--- gcc-3.4-3.4.6.orig/debian/fixincludes.in +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/gnat-BV-doc.prerm +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/rules.unpack +++ gcc-3.4-3.4.6/debian/rules.unpack @@ -0,0 +1,182 @@ +# -*- 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) +ifeq ($(with_check),yes) + tarballs += $(testsuite_tarball) +endif +ifeq ($(with_pascal),yes) + tarballs += $(gpc_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/c-tree.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/cpp.texi \ + gcc/doc/cppenv.texi \ + gcc/doc/cppinternals.texi \ + gcc/doc/cppopts.texi \ + gcc/doc/extend.texi \ + gcc/doc/fragments.texi \ + gcc/doc/frontends.texi \ + gcc/doc/gcc.texi \ + gcc/doc/gccint.texi \ + gcc/doc/gcov.texi \ + gcc/doc/gnu.texi \ + gcc/doc/gty.texi \ + gcc/doc/headerdirs.texi \ + gcc/doc/hostconfig.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/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/trouble.texi \ + gcc/doc/include/gcc-common.texi \ + gcc/doc/include/funding.texi \ + gcc/f/bugs.texi \ + gcc/f/bugs0.texi \ + gcc/f/ffe.texi \ + gcc/f/intdoc.texi \ + gcc/f/invoke.texi \ + gcc/f/news.texi \ + gcc/f/news0.texi \ + gcc/f/root.texi \ + libstdc++-v3/docs/html/17_intro/porting.texi \ + +gfdl_toplevel_texinfo_files = \ + gcc/doc/gcc.texi \ + gcc/doc/gcov.texi \ + gcc/java/gcj.texi \ + gcc/ada/gnat-style.texi \ + gcc/ada/gnat_rm.texi \ + gcc/ada/gnat_ugn.texi \ + gcc/f/g77.texi \ + gcc/treelang/treelang.texi \ + gcc/doc/include/funding.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_tarball) + : # 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_tarball);; \ + *.gz) tar -x --gzip -f $(gcc_tarball);; \ + *) 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 debian/dummy.texi $(srcdir)/$$i; \ + done + for i in $(gfdl_toplevel_texinfo_files); do \ + n=$$(basename $$i .texi); \ + sed "s/@name@/$$n/g" debian/gcc-dummy.texi > $(srcdir)/$$i; \ + done + cp debian/porting.* $(srcdir)/libstdc++-v3/docs/html/17_intro/ +endif + echo "$(gcc_tarball) unpacked." > $@ + +# --------------------------------------------------------------------------- +$(unpack_stamp)-$(gpc_tarball): $(gpc_tarball) + : # 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_tarball);; \ + *.gz) tar -x --gzip -f $(gpc_tarball);; \ + *) 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)-$(testsuite_tarball): $(testsuite_tarball) + : # unpack testsuite tarball + -mkdir $(stampdir) + rm -rf $(testsuite_srcdir) + case $(testsuite_tarball) in \ + *.bz2) tar -x -p --bzip2 -f $(testsuite_tarball);; \ + *.gz) tar -x -p --gzip -f $(testsuite_tarball);; \ + *) false; \ + esac + for t in gcc libjava libstdc++-v3; do \ + rm -rf $(srcdir)/$$t/testsuite; \ + mv $(testsuite_srcdir)/$$t/testsuite $(srcdir)/$$t/.; \ + done + rm -rf $(testsuite_srcdir) + echo "$(testsuite_tarball) unpacked." > $@ --- gcc-3.4-3.4.6.orig/debian/gij-wrapper.1 +++ gcc-3.4-3.4.6/debian/gij-wrapper.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-3.3(1) for a list of options that gij understands. + +.SH "SEE ALSO" +.BR gij-3.3(1) +, +.BR java(1) --- gcc-3.4-3.4.6.orig/debian/gcc-BV-hppa64.postinst +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/logwatch.sh +++ gcc-3.4-3.4.6/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 ] [-t ] [-m ]" + echo >&2 " [ ...]" + 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-3.4-3.4.6.orig/debian/gcj-wrapper +++ gcc-3.4-3.4.6/debian/gcj-wrapper @@ -0,0 +1,89 @@ +#!/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 +# Based on the original gcj-wrapper-3.2 shell script. + +use strict; + +# The real Java compiler: +my $javaCompiler = '/usr/bin/gcj-3.4'; + +# 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 =~ /^-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-3.4-3.4.6.orig/debian/rename-pkgs.sh +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/gcc-cross.postinst +++ gcc-3.4-3.4.6/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 15 \ + --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-3.4-3.4.6.orig/debian/gij-BV.postinst +++ gcc-3.4-3.4.6/debian/gij-BV.postinst @@ -0,0 +1,11 @@ +#! /bin/sh -e + +update-alternatives --quiet \ + --install /usr/bin/java java /usr/bin/gij-wrapper-@BV@ 34 \ + --slave /usr/share/man/man1/java.1.gz java.1.gz /usr/share/man/man1/gij-wrapper-@BV@.1.gz \ + --slave /usr/bin/rmiregistry rmiregistry /usr/bin/rmiregistry-@BV@ \ + --slave /usr/share/man/man1/rmiregistry.1.gz rmiregistry.1.gz /usr/share/man/man1/rmiregistry-@BV@.1.gz + +#DEBHELPER# + +exit 0 --- gcc-3.4-3.4.6.orig/debian/compat +++ gcc-3.4-3.4.6/debian/compat @@ -0,0 +1 @@ +4 --- gcc-3.4-3.4.6.orig/debian/gcjh-wrapper.1 +++ gcc-3.4-3.4.6/debian/gcjh-wrapper.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-3.3(1) for a list of options that gcj understands. + +.SH "SEE ALSO" +.BR gcjh-3.3(1) +, +.BR javah(1) --- gcc-3.4-3.4.6.orig/debian/gnat.1 +++ gcc-3.4-3.4.6/debian/gnat.1 @@ -0,0 +1,39 @@ +.\" Hey, Emacs! This is an -*- nroff -*- source file. +.\" +.\" Copyright (C) 1996 Erick Branderhorst +.\" +.\" 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 3.4, a freely available Ada 95 compiler. +.PP +For accessing the full GNAT manuals, use +.B info gnat-ug-3.4 +and +.B info gnat-rm-3.4 +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-3.4 (1) +.SH AUTHOR +This manpage has been written by Samuel Tardieu , for the +Debian GNU/Linux project. --- gcc-3.4-3.4.6.orig/debian/dh_rmemptydirs +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/README.libf2c +++ gcc-3.4-3.4.6/debian/README.libf2c @@ -0,0 +1,8 @@ +Building libraries and executables dependent on libg2c +====================================================== + +The header file for the g2c library is specific to the compiler +version used and therefore is included in the g77-X.Y package. + +If you use the g2c header and libraries without using g77, +make sure you have the g77 package installed. --- gcc-3.4-3.4.6.orig/debian/gcc-BV-doc.postinst +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/gcc-BV-hppa64.prerm +++ gcc-3.4-3.4.6/debian/gcc-BV-hppa64.prerm @@ -0,0 +1,10 @@ +#! /bin/sh -e + +if [ "$1" != "upgrade" ]; then + update-alternatives --quiet \ + --remove hppa64-linux-gnu-gcc /usr/bin/hppa64-linux-gnu-gcc-@BV@ +fi + +#DEBHELPER# + +exit 0 --- gcc-3.4-3.4.6.orig/debian/README.C++ +++ gcc-3.4-3.4.6/debian/README.C++ @@ -0,0 +1,47 @@ +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++3-doc package. After the +installation of the package, look at: + +file://usr/share/doc/gcc-3.4-base/libstdc++/html/17_intro/porting-howto.html + +On Debian GNU/Linux you find additional documentation in the +libstdc++6-doc and stl-manual packages. After installing these packages, +point your browser to + + file://localhost/usr/share/doc/libstdc++6-doc/libstdc++/html/index.html + + file://localhost/usr/share/doc/stl-manual/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 . 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/ + +Germany: http://www.informatik.uni-konstanz.de/~kuehl/cpp/cppfaq.htm + +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-3.4-3.4.6.orig/debian/protoize.1 +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/gcjh-wrapper +++ gcc-3.4-3.4.6/debian/gcjh-wrapper @@ -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 +# Haphazardly hacked up based on the gcj-wrapper perl script. +# Copyright (C) 2002-2003 by Ben Burton +# Based on the original gcj-wrapper-3.2 shell script. + +use strict; + +# The real Java header generator: +my $javaHeaderGen = '/usr/bin/gcjh-3.4'; + +# 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-3.4-3.4.6.orig/debian/reduce-test-diff.awk +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/fastjar.postinst +++ gcc-3.4-3.4.6/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 34 \ + --slave /usr/share/man/man1/jar.1.gz jar.1.gz /usr/share/man/man1/fastjar.1.gz + +#DEBHELPER# --- gcc-3.4-3.4.6.orig/debian/gccbug.1 +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/cross-unwind/path_max.patch +++ gcc-3.4-3.4.6/debian/cross-unwind/path_max.patch @@ -0,0 +1,21 @@ +--- src.orig/os-linux.h 2004-11-04 00:08:07.000000000 +0300 ++++ src/os-linux.h 2005-01-04 22:56:46.000000000 +0300 +@@ -26,6 +26,8 @@ + #ifndef os_linux_h + #define os_linux_h + ++#include ++ + struct map_iterator + { + off_t offset; +--- src.orig/ptrace/_UPT_find_proc_info.c 2004-11-04 00:08:07.000000000 +0300 ++++ src/ptrace/_UPT_find_proc_info.c 2005-01-04 23:37:34.000000000 +0300 +@@ -35,6 +35,7 @@ + #if UNW_TARGET_IA64 + + #include "elf64.h" ++#include + + static unw_word_t + find_gp (struct UPT_info *ui, Elf64_Phdr *pdyn, Elf64_Addr load_base) --- gcc-3.4-3.4.6.orig/debian/cross-unwind/Gcursor_i.h +++ gcc-3.4-3.4.6/debian/cross-unwind/Gcursor_i.h @@ -0,0 +1,33 @@ +#ifndef cursor_i_h +#define cursor_i_h + +/* + * DO NOT MODIFY + * + * This file was generated by ./a.out. + * + */ + +#define IP_OFF 8 /* 0x8 */ +#define PR_OFF 24 /* 0x18 */ +#define BSP_OFF 32 /* 0x20 */ +#define PSP_OFF 48 /* 0x30 */ +#define PFS_LOC_OFF 152 /* 0x98 */ +#define RNAT_LOC_OFF 168 /* 0xa8 */ +#define UNAT_LOC_OFF 328 /* 0x148 */ +#define LC_LOC_OFF 360 /* 0x168 */ +#define FPSR_LOC_OFF 376 /* 0x178 */ +#define B1_LOC_OFF 392 /* 0x188 */ +#define B2_LOC_OFF 408 /* 0x198 */ +#define B3_LOC_OFF 424 /* 0x1a8 */ +#define B4_LOC_OFF 440 /* 0x1b8 */ +#define B5_LOC_OFF 456 /* 0x1c8 */ +#define F2_LOC_OFF 472 /* 0x1d8 */ +#define F3_LOC_OFF 488 /* 0x1e8 */ +#define F4_LOC_OFF 504 /* 0x1f8 */ +#define F5_LOC_OFF 520 /* 0x208 */ +#define FR_LOC_OFF 536 /* 0x218 */ +#define LOC_SIZE 16 /* 0x10 */ +#define SIGCONTEXT_ADDR_OFF 824 /* 0x338 */ + +#endif /* cursor_i_h */ --- gcc-3.4-3.4.6.orig/debian/cross-unwind/Lcursor_i.h +++ gcc-3.4-3.4.6/debian/cross-unwind/Lcursor_i.h @@ -0,0 +1,33 @@ +#ifndef cursor_i_h +#define cursor_i_h + +/* + * DO NOT MODIFY + * + * This file was generated by ./a.out. + * + */ + +#define IP_OFF 8 /* 0x8 */ +#define PR_OFF 24 /* 0x18 */ +#define BSP_OFF 32 /* 0x20 */ +#define PSP_OFF 48 /* 0x30 */ +#define PFS_LOC_OFF 104 /* 0x68 */ +#define RNAT_LOC_OFF 112 /* 0x70 */ +#define UNAT_LOC_OFF 192 /* 0xc0 */ +#define LC_LOC_OFF 208 /* 0xd0 */ +#define FPSR_LOC_OFF 216 /* 0xd8 */ +#define B1_LOC_OFF 224 /* 0xe0 */ +#define B2_LOC_OFF 232 /* 0xe8 */ +#define B3_LOC_OFF 240 /* 0xf0 */ +#define B4_LOC_OFF 248 /* 0xf8 */ +#define B5_LOC_OFF 256 /* 0x100 */ +#define F2_LOC_OFF 264 /* 0x108 */ +#define F3_LOC_OFF 272 /* 0x110 */ +#define F4_LOC_OFF 280 /* 0x118 */ +#define F5_LOC_OFF 288 /* 0x120 */ +#define FR_LOC_OFF 296 /* 0x128 */ +#define LOC_SIZE 8 /* 0x8 */ +#define SIGCONTEXT_ADDR_OFF 456 /* 0x1c8 */ + +#endif /* cursor_i_h */ --- gcc-3.4-3.4.6.orig/debian/cross-unwind/README +++ gcc-3.4-3.4.6/debian/cross-unwind/README @@ -0,0 +1,10 @@ +Files in this directory are used to cross-compile libunwind while building +cross-gcc for ia64 target. Libunwind source can't cross-compile as-is because +it builds tools to generate two header files that are used later in build +process, and this procedure can't handle cross-compiling case properly. + +Fixing build procedure seems too hard because autotools don't seem to +support this case. + +So, as a temporary solution, files are pre-built on ia64 host and provided +in this directory. --- gcc-3.4-3.4.6.orig/debian/libffi.preinst +++ gcc-3.4-3.4.6/debian/libffi.preinst @@ -0,0 +1,9 @@ +#! /bin/sh -e + +if [ -h /usr/share/doc/libffi2 ]; then + rm -f /usr/share/doc/libffi2 +else + true +fi + +#DEBHELPER# --- gcc-3.4-3.4.6.orig/debian/gnat-BV-doc.doc-base.ug +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/gcj-wrapper.1 +++ gcc-3.4-3.4.6/debian/gcj-wrapper.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-3.3(1) for a list of options that gcj understands. + +.SH "SEE ALSO" +.BR gcj-3.3(1) +, +.BR javac(1) --- gcc-3.4-3.4.6.orig/debian/README.patches +++ gcc-3.4-3.4.6/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 + .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- 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-3.4-3.4.6.orig/debian/gpc-PV-BV-doc.doc-base.gpc +++ gcc-3.4-3.4.6/debian/gpc-PV-BV-doc.doc-base.gpc @@ -0,0 +1,15 @@ +Document: gpc-@PV@-@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-@PV@-@BV@.info.gz +Files: /usr/share/info/gpc-@PV@-@BV@* --- gcc-3.4-3.4.6.orig/debian/libstdc++6-doc.doc-base +++ gcc-3.4-3.4.6/debian/libstdc++6-doc.doc-base @@ -0,0 +1,13 @@ +Document: libstdc++6-doc +Title: The GNU Standard C++ Library v3 (gcc-3.4) +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: Apps/Programming + +Format: html +Index: /usr/share/doc/libstdc++6-doc/libstdc++/html_user/index.html +Files: /usr/share/doc/libstdc++6-doc/libstdc++/html*/* --- gcc-3.4-3.4.6.orig/debian/copyright +++ gcc-3.4-3.4.6/debian/copyright @@ -0,0 +1,522 @@ +This is the Debian GNU/Linux prepackaged version of the GCC compiler +collection, containing C, C++, Objective-C, Fortran-77, Java, Chill +and Pascal compilers, and the libstdc++ support library. + +The compilers are split into several binary packages: gcc (which has +support for C, g++ (which supports C++), gobjc (which supports +Objective C), g77 (supports Fortran77), gij, gcj (supports Java), chill +(supports Chill) and gpc (supports Pascal). A version of libstdc++-v3 +is also provided. + +Documentation is provided in the packages cpp-3.4-doc, gcc-3.4-doc, +gcj-3.4-doc, g77-3.4-doc and gpc-2.1-3.4-doc. + +This package was put together by the Debian GCC maintainers +, with sources obtained from: + + [NOTE: the current prereleases obtained from the CVS archive] + ftp://gcc.gnu.org/pub/gcc/releases/gcc-3.4.0.tar.bz2 + + http://gnu-pascal.de/alpha/ + +Changes: See changelog.Debian.gz + +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 can be found 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. + +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/GPL'. + +The libgcj library is licensed under the terms of the GNU General +Public License, with this special exception: + + As a special exception, if you link this library with other files + 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. + +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 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-3.4-3.4.6.orig/debian/fastjar.prerm +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/lib32gcc1.preinst +++ gcc-3.4-3.4.6/debian/lib32gcc1.preinst @@ -0,0 +1,8 @@ +#! /bin/sh -e + +if [ ! -h /usr/lib32 -a -d /usr/lib32 ]; then + rm -rf /usr/lib32 + ln -s /emul/ia32-linux/usr/lib /usr/lib32 +fi + +#DEBHELPER# --- gcc-3.4-3.4.6.orig/debian/gcc-BV-doc.doc-base.gcc +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/g77-BV-doc.prerm +++ gcc-3.4-3.4.6/debian/g77-BV-doc.prerm @@ -0,0 +1,5 @@ +#! /bin/sh -e + +install-info --quiet --remove g77-@BV@ + +#DEBHELPER# --- gcc-3.4-3.4.6.orig/debian/treelang-BV.doc-base +++ gcc-3.4-3.4.6/debian/treelang-BV.doc-base @@ -0,0 +1,15 @@ +Document: treelang-@BV@ +Title: The GNU Treelang Compiler +Author: Tim Josling +Abstract: This file documents the use and the internals of the GNU Treelang + compiler. At the moment this manual is not incorporated into the main + GCC manual as it is too incomplete. +Section: Apps/Programming + +Format: html +Index: /usr/share/doc/gcc-@BV@-base/treelang/treelang.html +Files: /usr/share/doc/gcc-@BV@-base/treelang/treelang.html + +Format: info +Index: /usr/share/info/treelang-@BV@.info.gz +Files: /usr/share/info/treelang-@BV@* --- gcc-3.4-3.4.6.orig/debian/g77-BV-doc.doc-base +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/libgcj-common.preinst +++ gcc-3.4-3.4.6/debian/libgcj-common.preinst @@ -0,0 +1,9 @@ +#! /bin/sh -e + +if [ -d /usr/share/doc/libgcj-common ]; then + rm -rf /usr/share/doc/libgcj-common +else + true +fi + +#DEBHELPER# --- gcc-3.4-3.4.6.orig/debian/gcc-cross.prerm +++ gcc-3.4-3.4.6/debian/gcc-cross.prerm @@ -0,0 +1,5 @@ +#!/bin/sh + +update-alternatives --quiet --remove cross-gcc /usr/bin/cross-gcc-ver + +exit 0 --- gcc-3.4-3.4.6.orig/debian/gcc-BV-doc.doc-base.gccint +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/FAQ.gcj +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/gij-BV.prerm +++ gcc-3.4-3.4.6/debian/gij-BV.prerm @@ -0,0 +1,7 @@ +#! /bin/sh -e + +update-alternatives --quiet --remove java /usr/bin/gij-wrapper-@BV@ + +#DEBHELPER# + +exit 0 --- gcc-3.4-3.4.6.orig/debian/README.cross +++ gcc-3.4-3.4.6/debian/README.cross @@ -0,0 +1,134 @@ +Building cross-compiler Debian packages +--------------------------------------- + +It is possible to build C and C++ cross compilers and support libraries +from gcc-3.4 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 + +Before you start, you should probably check available pre-built +cross-toolchain debs. At the time of writing (Jul 2004) those are +available from + http://zigzag.lvk.cs.msu.su/~nikita/debian/ +If they are no longer there, you may check EmDebian web site at + http://emdebian.sf.net/ +or ask debian-embedded@lists.debian.org for newer location. + + +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-3.4 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. + +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, libdb1-compat, 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-3.4 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. + +Build the package using dpkg-buildpackage. + + +3. Using crosshurd + +Jeff Bailey 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 --- gcc-3.4-3.4.6.orig/debian/rules.d/binary-libgcc-cross.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-libgcc-cross.mk @@ -0,0 +1,224 @@ +arch_binaries := $(arch_binaries) libgcc +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) + +ifeq ($(with_shared_libgcc),yes) +files_lgcc = \ + $(PF)/$(DEB_TARGET_GNU_TYPE)/lib/libgcc_s.so.$(GCC_SONAME) +files_l64gcc = \ + $(PF)/$(DEB_TARGET_GNU_TYPE)/lib64/libgcc_s.so.$(GCC_SONAME) +endif + +# ---------------------------------------------------------------------- +ifeq ($(DEB_TARGET_GNU_CPU),ia64) +$(binary_stamp)-libgcc: $(install_dependencies) $(binary_stamp)-libunwind +else +$(binary_stamp)-libgcc: $(install_dependencies) +endif + 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) + DH_COMPAT=2 dh_movefiles -p$(p_lgcc) $(files_lgcc) +endif + + dh_installdocs -p$(p_lgcc) + dh_installchangelogs -p$(p_lgcc) + + debian/dh_rmemptydirs -p$(p_lgcc) +ifeq ($(with_shared_libgcc),yes) + ifeq ($(DEB_TARGET_GNU_CPU),ia64) + cp -a $(PWD)/$(d)-unwind/usr/lib/libunwind.so.* $(d_lgcc)/usr/$(DEB_TARGET_GNU_TYPE)/lib/ + dh_makeshlibs -p$(p_lgcc) -V '$(p_lgcc) (>= 1:3.4.3-6)' -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 + touch debian/$(p_lgcc).substvars + ARCH=$(DEB_TARGET_ARCH) MAKEFLAGS="CC=something" dh_shlibdeps -p$(p_lgcc) -Xlibgcc_s + sed s/$(cross_lib_arch)//g < debian/$(p_lgcc).substvars > debian/$(p_lgcc).substvars.fixed + mv debian/$(p_lgcc).substvars.fixed debian/$(p_lgcc).substvars + 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 + else + 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 + touch debian/$(p_lgcc).substvars + ARCH=$(DEB_TARGET_ARCH) MAKEFLAGS="CC=something" dh_shlibdeps -p$(p_lgcc) + sed s/$(cross_lib_arch)//g < debian/$(p_lgcc).substvars > debian/$(p_lgcc).substvars.fixed + mv debian/$(p_lgcc).substvars.fixed debian/$(p_lgcc).substvars + 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 + endif + cat debian/$(p_lgcc)/DEBIAN/shlibs >> debian/shlibs.local +endif + PATH=/usr/share/dpkg-cross:$$PATH dh_strip -p$(p_lgcc) + dh_compress -p$(p_lgcc) + dh_fixperms -p$(p_lgcc) + 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) + DH_COMPAT=2 dh_movefiles -p$(p_l64gcc) $(files_l64gcc) +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/$(cross_lib_arch)//g < debian/$(p_l64gcc).substvars > debian/$(p_l64gcc).substvars.fixed + mv debian/$(p_l64gcc).substvars.fixed debian/$(p_l64gcc).substvars + 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) + DH_COMPAT=2 dh_movefiles -p$(p_l32gcc) $(files_l32gcc) +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/$(cross_lib_arch)//g < debian/$(p_l32gcc).substvars > debian/$(p_l32gcc).substvars.fixed + mv debian/$(p_l32gcc).substvars.fixed debian/$(p_l32gcc).substvars + 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) + +# ---------------------------------------------------------------------- + +unwind_dir = libunwind-0.98.3 +xxx: $(binary_stamp)-libunwind +$(binary_stamp)-libunwind: + rm -rf $(unwind_dir).tar.gz $(unwind_dir) $(d)-unwind + uudecode libunwind.uue + tar xfz $(unwind_dir).tar.gz + + : Below are several hacks to allow cross-build of libunwind unless + : related bugs both at unwind side and at gcc side are fixed + + : Put pre-built Gcursor_i.h and Lcursor_i.h into src/ ... + cp debian/cross-unwind/[GL]cursor_i.h $(unwind_dir)/src/ + touch $(unwind_dir)/src/[GL]cursor_i.h + + : ... and avoid rebuilding of those files + sed 's/\(@[GL]cursor_i.h\):/\1DISABLE:/g' $(unwind_dir)/src/Makefile.in > $(unwind_dir)/src/Makefile.in.tmp + mv -f $(unwind_dir)/src/Makefile.in.tmp $(unwind_dir)/src/Makefile.in + + : also, alter configure to disable REMOTE_ONLY mode of libunwind + : that is turned on with target!=build + : /manually checked that the following regexp affects only this/ + sed 's/test x\$$target_arch != x\$$build_arch/false/g' $(unwind_dir)/configure > $(unwind_dir)/configure.tmp + mv $(unwind_dir)/configure.tmp $(unwind_dir)/configure + chmod 755 $(unwind_dir)/configure + + : also, patch iseveral files to ensure PATH_MAX is defined + : /limits.h does not include it because of some problem/ + cd $(unwind_dir)/src && patch -p1 < ../../debian/cross-unwind/path_max.patch + + cd $(unwind_dir) && CC="$(PWD)/build/gcc/xgcc -B$(PWD)/build/gcc/" ./configure \ + --build=$(DEB_BUILD_GNU_TYPE) \ + --host=$(DEB_TARGET_GNU_TYPE) \ + --prefix=/usr + $(MAKE) -C $(unwind_dir) + $(MAKE) -C $(unwind_dir) install DESTDIR=$(PWD)/$(d)-unwind + touch $(binary_stamp)-libunwind --- gcc-3.4-3.4.6.orig/debian/rules.d/binary-ada.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-ada.mk @@ -0,0 +1,196 @@ +arch_binaries := $(arch_binaries) ada +ifneq ($(GFDL_INVARIANT_FREE),yes) + indep_binaries := $(indep_binaries) ada-doc +endif + +ifeq ($(with_libgnat),yes) + arch_binaries := $(arch_binaries) libgnat +endif + +p_gnat = gnat-$(GNAT_VERSION) +p_lgnat = libgnat-$(GNAT_VERSION) +p_gnatd = $(p_gnat)-doc + +d_gnat = debian/$(p_gnat) +d_lgnat = debian/$(p_lgnat) +d_gnatd = debian/$(p_gnatd) + +GNAT_TOOLS = gnat gnatbind gnatbl gnatchop gnatclean gnatfind gnatkr gnatlink \ + gnatls gnatmake gnatname gnatprep gnatxref gpr2make gprcmd + +dirs_gnat = \ + $(docdir)/$(p_base)/Ada \ + $(PF)/bin \ + $(PF)/share/man/man1 \ + $(gcc_lib_dir) \ + $(gcc_lexec_dir) \ + $(PF)/$(libdir)/gnat + +files_gnat = \ + $(PF)/share/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_VERSION).so.1 + +update-ada-files: + cd $(builddir) && tar cfj ada-generated.tar.bz2 \ + gcc/ada/{sinfo.h,einfo.h,nmake.ads,nmake.adb,treeprs.ads} + uuencode $(builddir)/ada-generated.tar.bz2 ada-generated.tar.bz2 \ + > debian/patches/ada-generated.uue + +$(binary_stamp)-libgnat: $(install_stamp) + dh_testdir + dh_testroot + mv $(install_stamp) $(install_stamp)-tmp + + rm -rf $(d_lgnat) + dh_installdirs -p$(p_lgnat) $(dirs_lgnat) + + for lib in lib{gnat,gnarl}; do \ + vlib=$$lib-$(GNAT_VERSION); \ + mv $(d)/$(gcc_lib_dir)/adalib/$$vlib.so.1 $(d)/$(PF)/$(libdir)/. ; \ + rm -f $(d)/$(gcc_lib_dir)/adalib/$$lib.so.1; \ + done + + DH_COMPAT=2 dh_movefiles -p$(p_lgnat) $(files_lgnat) + + debian/dh_doclink -p$(p_lgnat) $(p_base) + + debian/dh_rmemptydirs -p$(p_lgnat) + + dh_strip -p$(p_lgnat) + dh_compress -p$(p_lgnat) + dh_fixperms -p$(p_lgnat) + b=libgnat; \ + for ext in preinst postinst prerm postrm; do \ + for t in '' -dev -dbg; do \ + v=$(GNAT_VERSION); \ + 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_SOVERSION))' + cat debian/$(p_lgnat)/DEBIAN/shlibs >> debian/shlibs.local + + mkdir -p debian/$(p_lgnat)/usr/share/lintian/overrides + cp -p debian/$(p_lgnat).overrides \ + debian/$(p_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) + +ifeq ($(with_libgnat),yes) +$(binary_stamp)-ada: $(install_stamp) $(binary_stamp)-libgnat +else +$(binary_stamp)-ada: $(install_stamp) +endif + dh_testdir + dh_testroot + mv $(install_stamp) $(install_stamp)-tmp + + rm -rf $(d_gnat) + dh_installdirs -p$(p_gnat) $(dirs_gnat) + + DH_COMPAT=2 dh_movefiles -p$(p_gnat) $(files_gnat) + +ifeq ($(with_libgnat),yes) + for lib in lib{gnat,gnarl}; do \ + vlib=$$lib-$(GNAT_VERSION); \ + dh_link -p$(p_gnat) \ + /$(PF)/$(libdir)/$$vlib.so.1 /$(gcc_lib_dir)/adalib/$$vlib.so \ + /$(PF)/$(libdir)/$$vlib.so.1 /$(gcc_lib_dir)/adalib/$$lib.so; \ + done +endif + + debian/dh_doclink -p$(p_gnat) $(p_base) + + cp -p $(srcdir)/gcc/ada/ChangeLog \ + $(d_gnat)/$(docdir)/$(p_base)/Ada/changelog + + 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 + + ln -sf gcc$(pkg_ver) $(d_gnat)/$(PF)/bin/gnatgcc + ln -sf gcc$(pkg_ver).1.gz $(d_gnat)/$(PF)/share/man/man1/gnatgcc.1.gz + + mkdir -p $(d_gnat)/usr/share/lintian/overrides + cp -p debian/$(p_gnat).overrides \ + $(d_gnat)/usr/share/lintian/overrides/$(p_gnat) + + debian/dh_rmemptydirs -p$(p_gnat) + + dh_strip -p$(p_gnat) + dh_compress -p$(p_gnat) + dh_fixperms -p$(p_gnat) +ifeq ($(with_libgnat),yes) + dh_shlibdeps -p$(p_gnat) -L $(p_lgnat) -l $(d_lgnat)/$(PF)/$(libdir) +else + dh_shlibdeps -p$(p_gnat) +endif + perl -pi -e 's/, *libgnat[^,]*//' debian/$(p_gnat).substvars + 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 \ + -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 \ + -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 \ + -o gnat-style-$(GNAT_VERSION).info \ + $(srcdir)/gcc/ada/gnat-style.texi + + debian/dh_doclink -p$(p_gnatd) $(p_base) + 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-3.4-3.4.6.orig/debian/rules.d/binary-cxx-cross.mk +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/rules.d/binary-cross.mk +++ gcc-3.4-3.4.6/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/{$(GCC_TARGET)-linux-gcc,$(GCC_TARGET)-linux-cpp}$(pkg_ver) \ + $(PF)/share/man/man1/{$(GCC_TARGET)-linux-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-3.4-3.4.6.orig/debian/rules.d/binary-fastjar.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-fastjar.mk @@ -0,0 +1,54 @@ +arch_binaries := $(arch_binaries) fastjar + +p_jar = fastjar +d_jar = debian/$(p_jar) + +dirs_jar = \ + $(docdir)/$(p_jar) \ + $(PF)/bin \ + $(PF)/share/man/man1 \ + $(PF)/share/info + +files_jar = \ + $(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_jar) + dh_installdirs -p$(p_jar) $(dirs_jar) + +ifeq ($(versioned_packages),yes) + : # rename versioned files back to unversioned ones. + for i in jar 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 + + mv $(d)/$(PF)/bin/jar $(d)/$(PF)/bin/fastjar + mv $(d)/$(PF)/share/man/man1/jar.1 $(d)/$(PF)/share/man/man1/fastjar.1 + + DH_COMPAT=2 dh_movefiles -p$(p_jar) $(files_jar) + + dh_installdocs -p$(p_jar) $(srcdir)/fastjar/{CHANGES,NEWS,README} + dh_installchangelogs -p$(p_jar) $(srcdir)/fastjar/ChangeLog + + debian/dh_rmemptydirs -p$(p_jar) + + dh_strip -p$(p_jar) + dh_compress -p$(p_jar) + dh_fixperms -p$(p_jar) + dh_shlibdeps -p$(p_jar) + dh_gencontrol -p$(p_jar) -- -v$(DEB_EVERSION) $(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) --- gcc-3.4-3.4.6.orig/debian/rules.d/binary-libstdcxx-cross.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-libstdcxx-cross.mk @@ -0,0 +1,249 @@ +ifeq ($(with_libcxx),yes) + arch_binaries := $(arch_binaries) libstdcxx +endif +ifeq ($(with_lib64cxx),yes) + arch_binaries := $(arch_binaries) lib64stdcxx +endif +ifeq ($(biarch_ia32),yes) + arch_binaries := $(arch_binaries) lib32stdcxx +endif + +ifeq ($(with_cxxdev),yes) + arch_binaries := $(arch_binaries) libstdcxx-dev +endif + +p_lib = libstdc++$(CXX_SONAME)$(cross_lib_arch) +p_dev = $(p_lib:%$(cross_lib_arch)=%-dev$(cross_lib_arch)) +p_pic = $(p_lib:%$(cross_lib_arch)=%-pic$(cross_lib_arch)) +p_dbg = $(p_lib:%$(cross_lib_arch)=%-dbg$(cross_lib_arch)) +p_lib64 = lib64stdc++$(CXX_SONAME)$(cross_lib_arch) +p_lib32 = lib32stdc++$(CXX_SONAME)$(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) + +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)/$(p_lib) \ + $(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 ($(with_lib64cxx),yes) + dirs_dev += $(gcc_lib_dir)/64/ + files_dev += $(gcc_lib_dir)/64/libstdc++.{a,so} \ + $(gcc_lib_dir)/64/libsupc++.a + dirs_dbg += $(PF)/$(DEB_TARGET_GNU_TYPE)/lib64/debug + files_dbg += $(PF)/$(DEB_TARGET_GNU_TYPE)/lib64/debug/libstdc++.* + dirs_pic += $(gcc_lib_dir) + files_pic += $(gcc_lib_dir)/64/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) + + PATH=/usr/share/dpkg-cross:$$PATH 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))' -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/$(cross_lib_arch)//g < debian/$(p_lib).substvars > debian/$(p_lib).substvars.fixed + mv debian/$(p_lib).substvars.fixed debian/$(p_lib).substvars + 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_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_rmemptydirs -p$(p_lib64) + + PATH=/usr/share/dpkg-cross:$$PATH dh_strip -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/$(cross_lib_arch)//g < debian/$(p_lib64).substvars > debian/$(p_lib64).substvars.fixed + mv debian/$(p_lib64).substvars.fixed debian/$(p_lib64).substvars + 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_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_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_rmemptydirs -p$(p_lib32) + + PATH=/usr/share/dpkg-cross:$$PATH 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))' -n + 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/$(cross_lib_arch)//g < debian/$(p_lib32).substvars > debian/$(p_lib32).substvars.fixed + mv debian/$(p_lib32).substvars.fixed debian/$(p_lib32).substvars + 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_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)-libstdcxx-dev: $(install_stamp) \ + $(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 ($(with_lib64cxx),yes) + mv $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib64/lib*c++*.a $(d)/$(gcc_lib_dir)/64/. + ln -sf ../../../../../lib64/libstdc++.so.$(CXX_SONAME) \ + $(d)/$(gcc_lib_dir)/64/libstdc++.so +endif + + 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) + + 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/ChangeLog \ + $(d_dev)/usr/share/doc/$(p_lib)/changelog + 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) -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-3.4-3.4.6.orig/debian/rules.d/binary-gcc.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-gcc.mk @@ -0,0 +1,185 @@ +ifeq ($(with_cdev),yes) + arch_binaries := $(arch_binaries) gcc +endif +ifneq ($(GFDL_INVARIANT_FREE),yes) + indep_binaries := $(indep_binaries) gcc-doc +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 \ + $(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/{gcc,gcov,gccbug}$(pkg_ver).1 \ + $(gcc_lexec_dir)/collect2 \ + $(gcc_lib_dir)/{specs,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) + +ifeq ($(biarch),yes) + files_gcc += $(gcc_lib_dir)/64/{libgcc*,libgcov.a,*.o} +endif +ifeq ($(biarch32),yes) + files_gcc += $(gcc_lib_dir)/32/{libgcc*,*.o} +endif + +ifeq ($(with_nls),yes) + files_gcc += $(PF)/share/locale/*/*/gcc*.* +endif + +files_gcc += \ + $(shell test -e $(d)/$(gcc_lib_dir)/SYSCALLS.c.X \ + && echo $(gcc_lib_dir)/SYSCALLS.c.X) + +ifeq ($(DEB_HOST_ARCH),ia64) + files_gcc += $(gcc_lib_dir)/include/ia64intrin.h +endif + +ifeq ($(DEB_HOST_ARCH),i386) + files_gcc += $(gcc_lib_dir)/include/{,e,p,x}mmintrin.h +endif +ifeq ($(DEB_HOST_ARCH),amd64) + files_gcc += $(gcc_lib_dir)/include/{,e,p,x}mmintrin.h +endif + +ifeq ($(DEB_HOST_ARCH),kfreebsd-i386) + files_gcc += $(gcc_lib_dir)/include/{,e,p,x}mmintrin.h +endif + +ifeq ($(DEB_HOST_ARCH),hurd-i386) + files_gcc += $(gcc_lib_dir)/include/{,e,p,x}mmintrin.h +endif + +ifeq ($(DEB_HOST_ARCH),m68k) + files_gcc += $(gcc_lib_dir)/include/math-68881.h +endif + +ifeq ($(DEB_HOST_ARCH),powerpc) + 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 /$(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) \ + /$(lib64)/libgcc_s.so.$(GCC_SONAME) $(gcc_lib_dir)/libgcc_s_64.so \ + /$(lib64)/libgcc_s.so.$(GCC_SONAME) $(gcc_lib_dir)/64/libgcc_s_64.so \ + /$(lib64)/libgcc_s.so.$(GCC_SONAME) $(gcc_lib_dir)/64/libgcc_s.so +endif +ifeq ($(biarch32),yes) + mkdir -p $(d_gcc)/$(gcc_lib_dir) + mv $(d)/$(gcc_lib_dir)/32 $(d_gcc)/$(gcc_lib_dir)/ + dh_link -p$(p_gcc) \ + /$(lib32)/libgcc_s.so.$(GCC_SONAME) /$(gcc_lib_dir)/libgcc_s_32.so \ + /$(lib32)/libgcc_s.so.$(GCC_SONAME) /$(gcc_lib_dir)/32/libgcc_s_32.so \ + /$(lib32)/libgcc_s.so.$(GCC_SONAME) /$(gcc_lib_dir)/32/libgcc_s.so +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).1 \ + $(d_gcc)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gcc$(pkg_ver).1 + ln -sf gcc$(pkg_ver) \ + $(d_gcc)/$(PF)/bin/$(TARGET_ALIAS)-gcc$(pkg_ver) + ln -sf gcc$(pkg_ver).1 \ + $(d_gcc)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gcc$(pkg_ver).1 + +# 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/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-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* + + 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-3.4-3.4.6.orig/debian/rules.d/binary-fixincl.mk +++ gcc-3.4-3.4.6/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)/gcc/fixinc/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-3.4-3.4.6.orig/debian/rules.d/binary-softfloat.mk +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/rules.d/binary-treelang.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-treelang.mk @@ -0,0 +1,55 @@ +arch_binaries := $(arch_binaries) treelang + +p_tree = treelang$(pkg_ver) +d_tree = debian/$(p_tree) + +dirs_tree = \ + $(docdir)/$(p_base)/treelang \ + $(gcc_lexec_dir) \ + $(PF)/bin \ + $(PF)/share/info + +files_tree = \ + $(PF)/bin/tree1$(pkg_ver) \ + $(gcc_lexec_dir)/tree1 + +ifneq ($(GFDL_INVARIANT_FREE),yes) + files_tree += \ + $(PF)/share/info/treelang* +endif + +$(binary_stamp)-treelang: $(build_html_stamp) $(install_stamp) + dh_testdir + dh_testroot + mv $(install_stamp) $(install_stamp)-tmp + + rm -rf $(d_tree) + dh_installdirs -p$(p_tree) $(dirs_tree) + DH_COMPAT=2 dh_movefiles -p$(p_tree) $(files_tree) + + debian/dh_doclink -p$(p_tree) $(p_base) +ifneq ($(GFDL_INVARIANT_FREE),yes) + dh_installdocs -p$(p_tree) + rm -f $(d_tree)/$(docdir)/$(p_base)/copyright + cp -p html/treelang.html $(d_tree)/$(docdir)/$(p_base)/treelang/ +endif + cp -p $(srcdir)/gcc/treelang/README \ + $(d_tree)/$(docdir)/$(p_base)/treelang/. + cp -p $(srcdir)/gcc/treelang/ChangeLog \ + $(d_tree)/$(docdir)/$(p_base)/treelang/changelog + cp -p debian/README.treelang \ + $(d_tree)/$(docdir)/$(p_base)/treelang/README.Debian + + debian/dh_rmemptydirs -p$(p_tree) + + dh_strip -p$(p_tree) + dh_compress -p$(p_tree) + + dh_fixperms -p$(p_tree) + dh_shlibdeps -p$(p_tree) + dh_gencontrol -p$(p_tree) -- -v$(DEB_VERSION) $(common_substvars) + dh_installdeb -p$(p_tree) + dh_md5sums -p$(p_tree) + dh_builddeb -p$(p_tree) + + trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp) --- gcc-3.4-3.4.6.orig/debian/rules.d/binary-hppa64.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-hppa64.mk @@ -0,0 +1,21 @@ +arch_binaries := $(arch_binaries) hppa64 + +# ---------------------------------------------------------------------- +$(binary_stamp)-hppa64: $(install_hppa64_stamp) + dh_testdir + dh_testroot + +# dh_installdirs -p$(p_hppa64) + 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-3.4-3.4.6.orig/debian/rules.d/binary-cxx.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-cxx.mk @@ -0,0 +1,52 @@ +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) \ + $(PF)/share/man/man1/g++$(pkg_ver).1 \ + $(gcc_lexec_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/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) \ + $(d_cxx)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-g++$(pkg_ver) + 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) \ + $(d_cxx)/$(PF)/bin/$(TARGET_ALIAS)-g++$(pkg_ver) + ln -sf g++$(pkg_ver).1.gz \ + $(d_cxx)/$(PF)/share/man/man1/$(TARGET_ALIAS)-g++$(pkg_ver).1.gz + + 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) --- gcc-3.4-3.4.6.orig/debian/rules.d/binary-pascal.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-pascal.mk @@ -0,0 +1,100 @@ +arch_binaries := $(arch_binaries) pascal +indep_binaries := $(indep_binaries) pascal-doc + +p_gpc = gpc$(gpc_pkg_ver) +p_gpcd = gpc$(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}$(gpc_pkg_ver) \ + $(PF)/share/man/man1/{binobj,gpc,gpc-run,gpidump}$(gpc_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}$(gpc_pkg_ver) \ + $(PF)/share/man/man1/{binobj,gpc,gpc-run}$(gpc_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) + + debian/dh_doclink -p$(p_gpc) $(p_base) + 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_gpc)/examples $(d_gpcd)/$(docdir)/$(p_gpcd)/examples +# ln -sf ../$(p_gpc)/docdemos $(d_gpcd)/$(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 \ + $(PF)/share/info + DH_COMPAT=2 dh_movefiles -p$(p_gpcd) \ + $(PF)/share/info/gpc*$(gpc_pkg_ver)*info* + debian/dh_doclink -p$(p_gpcd) $(p_base) + dh_installdocs -p$(p_gpcd) + rm -f $(d_gpcd)/$(docdir)/$(p_base)/copyright + 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/. + +# -$(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-3.4-3.4.6.orig/debian/rules.d/binary-proto.mk +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/rules.d/binary-libobjc.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-libobjc.mk @@ -0,0 +1,67 @@ +ifeq ($(with_objcdev),yes) + arch_binaries := $(arch_binaries) libobjc +endif + +p_lobjc = libobjc$(OBJC_SONAME) +d_lobjc = debian/$(p_lobjc) + +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 + +ifeq ($(with_lib64objc),yes) + dirs_lobjc += $(PF)/$(lib64) + files_lobjc += $(PF)/$(lib64)/libobjc.so.* + ifeq ($(with_objc_gc),yes) + files_lobjc += $(PF)/$(lib64)/libobjc_gc.so.* + endif +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) --- gcc-3.4-3.4.6.orig/debian/rules.d/binary-cpp-cross.mk +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/rules.d/binary-nof-cross.mk +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/rules.d/binary-base.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-base.mk @@ -0,0 +1,24 @@ +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) + cp -p debian/NEWS.sarge $(d_base)/usr/share/doc/$(p_base)/NEWS.Debian +ifeq ($(with_base_only),yes) + dh_installchangelogs -p$(p_base) +else + dh_installchangelogs -p$(p_base) $(srcdir)/ChangeLog +endif + dh_compress -p$(p_base) + 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-3.4-3.4.6.orig/debian/rules.d/binary-objc.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-objc.mk @@ -0,0 +1,51 @@ +arch_binaries := $(arch_binaries) objc + +p_objc = gobjc$(pkg_ver) +d_objc = debian/$(p_objc) + +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,libobjc*.la} + +$(binary_stamp)-objc: $(install_stamp) + dh_testdir + dh_testroot + mv $(install_stamp) $(install_stamp)-tmp + + mv $(d)/$(PF)/$(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) + + 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) --- gcc-3.4-3.4.6.orig/debian/rules.d/binary-java.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-java.mk @@ -0,0 +1,304 @@ +ifeq ($(with_java),yes) + arch_binaries := $(arch_binaries) java + indep_binaries := $(indep_binaries) gcjjar +endif + +ifeq ($(with_common_libs),yes) + indep_binaries := $(indep_binaries) libgcj-common +endif + +ifeq ($(with_javadev),yes) + arch_binaries := $(arch_binaries) javadev +endif + +p_gcj = gcj$(pkg_ver) +p_gij = gij$(pkg_ver) +p_jcom = libgcj-common +p_jlib = libgcj$(GCJ_SONAME) +p_jlibc = libgcj$(GCJ_SONAME)-common +p_jlibx = libgcj$(GCJ_SONAME)-awt +p_jdev = libgcj$(GCJ_SONAME)-dev + +d_gcj = debian/$(p_gcj) +d_gij = debian/$(p_gij) +d_jcom = debian/$(p_jcom) +d_jlib = debian/$(p_jlib) +d_jlibc = debian/$(p_jlibc) +d_jlibx = debian/$(p_jlibx) +d_jdev = debian/$(p_jdev) + +dirs_gcj = \ + $(docdir)/$(p_base)/java \ + $(PF)/bin \ + $(PF)/share/man/man1 \ + $(PF)/share/info \ + $(gcc_lexec_dir) +files_gcj = \ + $(PF)/bin/{gcj,gcjh,jv-convert,jv-scan,jcf-dump,rmic}$(pkg_ver) \ + $(PF)/share/man/man1/{gcj,gcjh,jv-convert,jv-scan,jcf-dump,rmic}$(pkg_ver).1 \ + $(gcc_lexec_dir)/{jc1,jvgenmain} + +ifneq ($(GFDL_INVARIANT_FREE),yes) + files_gcj += \ + $(PF)/share/info/gcj* +endif + +dirs_gij = \ + $(docdir)/$(p_base)/java \ + $(PF)/bin \ + $(PF)/share/man/man1 + +files_gij = \ + $(PF)/bin/{gij,rmiregistry}$(pkg_ver) \ + $(PF)/share/man/man1/{gij,rmiregistry}$(pkg_ver).1 + +dirs_jcom = \ + $(PF)/$(libdir) + +files_jcom = \ + $(PF)/$(libdir)/security + +dirs_jlib = \ + $(docdir)/$(p_jlib) \ + $(PF)/$(libdir) + +files_jlib = \ + $(PF)/$(libdir)/libgcj*.so.* \ + $(PF)/$(libdir)/lib-org-*.so.* + +dirs_jlibc = \ + $(docdir)/$(p_jlib) \ + $(PF)/share/java + +files_jlibc = \ + $(PF)/share/java/libgcj-$(VER).jar + +dirs_jlibx = \ + $(docdir)/$(p_jlib) \ + $(PF)/$(libdir) \ + $(PF)/share/java + +files_jlibx = \ + $(PF)/lib/lib-gnu-java-awt*.so.* + +dirs_jdev = \ + $(docdir)/$(p_jlib)/examples \ + $(PF)/include \ + $(PF)/$(libdir) \ + $(gcc_lib_dir)/include/gcj + +files_jdev = \ + $(PF)/include/{gcj,java,javax,jni.h,jvmpi.h} \ + $(PF)/include/gnu/{awt,classpath,gcj,java,javax} \ + $(PF)/$(libdir)/libgcj*.{a,la} \ + $(PF)/$(libdir)/{libgcj*.so,libgcj.spec} \ + $(gcc_lib_dir)/include/gcj/libgcj-config.h \ + $(PF)/$(libdir)/pkgconfig/libgcj.pc \ + $(PF)/$(libdir)/lib-gnu-*.{a,la} \ + $(PF)/$(libdir)/lib-gnu-*.so \ + $(PF)/$(libdir)/lib-org-*.{a,la} \ + $(PF)/$(libdir)/lib-org-*.so + +ifeq ($(with_lib64gcj),yes) + dirs_jlib += $(PF)/$(lib64) + files_jlib += $(PF)/$(lib64)/libgcj*.so.* \ + $(PF)/$(lib64)/lib-org-*.so.* + + dirs_jlibx += $(PF)/$(lib64) + files_jlibx += $(PF)/$(lib64)/lib-gnu-java-awt-*.so.* + + dirs_jdev += $(PF)/$(lib64) + files_jdev += $(PF)/$(lib64)/libgcj*.{a,so,la} \ + $(PF)/$(lib64)/lib-gnu-*.{a,so,la} \ + $(PF)/$(lib64)/lib-org-*.{a,so,la} +endif + +# ---------------------------------------------------------------------- +$(binary_stamp)-libgcj-common: $(install_stamp) + dh_testdir + dh_testroot + mv $(install_stamp) $(install_stamp)-tmp + + dh_installdirs -p$(p_jcom) $(dirs_jcom) + [ -d $(d)/$(PF)/$(libdir)/security ] \ + || mkdir -p $(d)/$(PF)/$(libdir)/security + [ -f $(d)/$(PF)/$(libdir)/security/classpath.security ] || \ + cp $(srcdir)/libjava/java/security/*.security \ + $(d)/$(PF)/$(libdir)/security/. + DH_COMPAT=2 dh_movefiles -p$(p_jcom) $(files_jcom) + debian/dh_doclink -p$(p_jcom) $(p_base) + debian/dh_rmemptydirs -p$(p_jcom) + dh_compress -p$(p_jcom) + dh_fixperms -p$(p_jcom) + dh_gencontrol -p$(p_jcom) -- -v$(DEB_EVERSION) $(common_substvars) + dh_installdeb -p$(p_jcom) + dh_md5sums -p$(p_jcom) + dh_builddeb -p$(p_jcom) + + trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp) + +# ---------------------------------------------------------------------- +$(binary_stamp)-gcjjar: $(install_stamp) + dh_testdir + dh_testroot + mv $(install_stamp) $(install_stamp)-tmp + + dh_installdirs -p$(p_jlibc) $(dirs_jlibc) + DH_COMPAT=2 dh_movefiles -p$(p_jlibc) $(files_jlibc) + debian/dh_doclink -p$(p_jlibc) $(p_base) + debian/dh_rmemptydirs -p$(p_jlibc) + dh_compress -p$(p_jlibc) + dh_fixperms -p$(p_jlibc) + dh_gencontrol -p$(p_jlibc) -u-v$(DEB_VERSION) + cp -p debian/libgcj5-common.preinst.in debian/libgcj5-common.preinst + dh_installdeb -p$(p_jlibc) + dh_md5sums -p$(p_jlibc) + dh_builddeb -p$(p_jlibc) + + trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp) + +# ---------------------------------------------------------------------- +$(binary_stamp)-java: $(install_stamp) + dh_testdir + dh_testroot + mv $(install_stamp) $(install_stamp)-tmp + + 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) + + debian/dh_doclink -p$(p_gij) $(p_base) + dh_installdocs -p$(p_jlib) $(srcdir)/libjava/{NEWS,README,THANKS} + dh_installchangelogs -p$(p_jlib) + debian/dh_doclink -p$(p_jlibx) $(p_jlib) + + cp -p debian/gij-wrapper $(d_gij)/$(PF)/bin/gij-wrapper$(pkg_ver) + chmod 755 $(d_gij)/$(PF)/bin/gij-wrapper$(pkg_ver) + cp -p debian/gij-wrapper.1 \ + $(d_gij)/$(PF)/share/man/man1/gij-wrapper$(pkg_ver).1 + + debian/dh_rmemptydirs -p$(p_gij) + debian/dh_rmemptydirs -p$(p_jlib) + debian/dh_rmemptydirs -p$(p_jlibx) + + dh_makeshlibs -p$(p_jlib) -V '$(p_jlib) (>= $(DEB_SOVERSION))' + cat debian/$(p_jlib)/DEBIAN/shlibs >> debian/shlibs.local + + dh_makeshlibs -p$(p_jlibx) -V '$(p_jlibx) (>= $(DEB_SOVERSION))' + + dh_strip -p$(p_gij) -p$(p_jlib) -p$(p_jlibx) + 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) $(p_lib) (>= $(DEB_STDCXX_SOVERSION))' \ + >> debian/shlibs.local +# dh_shlibdeps finds libgcc in lib64gcc1 ... move it away for a moment ... + -[ -d $(d_l64gcc) ] && mv $(d_l64gcc) $(d_l64gcc).away + dh_shlibdeps \ + -L$(p_lgcc) \ + -L$(p_jlib) \ + -l:$(d)/$(PF)/$(libdir):$(d_lib)/$(PF)/$(libdir):$(d_jlib)/$(PF)/$(libdir):$(d_lgcc)/lib \ + -p$(p_gij) -p$(p_jlib) -p$(p_jlibx) + -[ -d $(d_l64gcc).away ] && mv $(d_l64gcc).away $(d_l64gcc) + 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) + b=libgcj; \ + for ext in preinst postinst prerm postrm; do \ + for t in '' -awt -dev; do \ + v=$(GCJ_SONAME); \ + if [ -f debian/$$b$$t.$$ext ]; then \ + cp -pf debian/$$b$$t.$$ext debian/$$b$$v$$t.$$ext; \ + fi; \ + done; \ + done + 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)-javadev: $(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) + dh_installdirs -p$(p_jdev) $(dirs_jdev) + + DH_COMPAT=2 dh_movefiles -p$(p_gcj) $(files_gcj) + DH_COMPAT=2 dh_movefiles -p$(p_jdev) $(files_jdev) + + ln -sf gcj$(pkg_ver) \ + $(d_gcj)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gcj$(pkg_ver) + ln -sf gcj$(pkg_ver).1 \ + $(d_gcj)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gcj$(pkg_ver).1 + ln -sf gcj$(pkg_ver) \ + $(d_gcj)/$(PF)/bin/$(TARGET_ALIAS)-gcj$(pkg_ver) + ln -sf gcj$(pkg_ver).1 \ + $(d_gcj)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gcj$(pkg_ver).1 + + debian/dh_doclink -p$(p_gcj) $(p_base) +ifneq ($(GFDL_INVARIANT_FREE),yes) + dh_installdocs -p$(p_gcj) + rm -f $(d_gcj)/$(docdir)/$(p_base)/copyright + cp -p html/gcj.html $(d_gcj)/$(docdir)/$(p_base)/java/ +endif + cp -p $(srcdir)/libjava/doc/cni.sgml $(d_jdev)/$(docdir)/$(p_jlib)/. + debian/dh_doclink -p$(p_jdev) $(p_jlib) + cp -p debian/FAQ.gcj $(d_gcj)/$(docdir)/$(p_base)/java/. + cp -p $(srcdir)/gcc/java/ChangeLog \ + $(d_gcj)/$(docdir)/$(p_base)/java/changelog + cp -p $(srcdir)/libjava/ChangeLog \ + $(d_jdev)/$(docdir)/$(p_jlib)/changelog + + cp -p $(srcdir)/libjava/gnu/java/awt/peer/gtk/Test* \ + debian/testswing.java \ + $(d_jdev)/$(docdir)/$(p_jlib)/examples + + cp -p debian/gcj-wrapper $(d_gcj)/$(PF)/bin/gcj-wrapper$(pkg_ver) + chmod 755 $(d_gcj)/$(PF)/bin/gcj-wrapper$(pkg_ver) + cp -p debian/gcj-wrapper.1 \ + $(d_gcj)/$(PF)/share/man/man1/gcj-wrapper$(pkg_ver).1 + + cp -p debian/gcjh-wrapper $(d_gcj)/$(PF)/bin/gcjh-wrapper$(pkg_ver) + chmod 755 $(d_gcj)/$(PF)/bin/gcjh-wrapper$(pkg_ver) + cp -p debian/gcjh-wrapper.1 \ + $(d_gcj)/$(PF)/share/man/man1/gcjh-wrapper$(pkg_ver).1 + + debian/dh_rmemptydirs -p$(p_gcj) + debian/dh_rmemptydirs -p$(p_jdev) + + dh_strip -p$(p_gcj) -p$(p_jdev) + dh_compress -p$(p_gcj) -p$(p_jdev) -X.java + dh_fixperms -p$(p_gcj) -p$(p_jdev) + dh_shlibdeps \ + -L$(p_lgcc) \ + -l:$(d)/$(PF)/$(libdir):$(d_lib)/$(PF)/$(libdir):$(d_jlib)/$(PF)/$(libdir):$(d_lgcc)/lib \ + -p$(p_gcj) -p$(p_jdev) + dh_gencontrol \ + -p$(p_gcj) -p$(p_jdev) \ + -- -v$(DEB_VERSION) $(common_substvars) + b=libgcj; \ + for ext in preinst postinst prerm postrm; do \ + for t in '' -dev; do \ + v=$(GCJ_SONAME); \ + if [ -f debian/$$b$$t.$$ext ]; then \ + cp -pf debian/$$b$$t.$$ext debian/$$b$$v$$t.$$ext; \ + fi; \ + done; \ + done + dh_installdeb -p$(p_gcj) -p$(p_jdev) + dh_md5sums -p$(p_gcj) -p$(p_jdev) + dh_builddeb -p$(p_gcj) -p$(p_jdev) + + trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp) --- gcc-3.4-3.4.6.orig/debian/rules.d/binary-cpp.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-cpp.mk @@ -0,0 +1,75 @@ +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) \ + $(PF)/share/man/man1/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) + + ln -sf cpp$(pkg_ver) \ + $(d_cpp)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-cpp$(pkg_ver) + 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) \ + $(d_cpp)/$(PF)/bin/$(TARGET_ALIAS)-cpp$(pkg_ver) + ln -sf cpp$(pkg_ver).1 \ + $(d_cpp)/$(PF)/share/man/man1/$(TARGET_ALIAS)-cpp$(pkg_ver).1 + + 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-3.4-3.4.6.orig/debian/rules.d/binary-nof.mk +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/rules.d/binary-gcc-cross.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-gcc-cross.mk @@ -0,0 +1,106 @@ +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)/{specs,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) + +ifeq ($(biarch),yes) + files_gcc += $(gcc_lib_dir)/64/{libgcc*,*.o} +endif + +files_gcc += \ + $(shell test -e $(d)/$(gcc_lib_dir)/SYSCALLS.c.X \ + && echo $(gcc_lib_dir)/SYSCALLS.c.X) + +ifeq ($(DEB_TARGET_ARCH),ia64) + files_gcc += $(gcc_lib_dir)/include/ia64intrin.h +endif + +ifeq ($(DEB_TARGET_ARCH),i386) + files_gcc += $(gcc_lib_dir)/include/{,e,p,x}mmintrin.h +endif + +ifeq ($(DEB_TARGET_ARCH),hurd-i386) + files_gcc += $(gcc_lib_dir)/include/{,e,p,x}mmintrin.h +endif + +ifeq ($(DEB_TARGET_ARCH),kfreebsd-i386) + files_gcc += $(gcc_lib_dir)/include/{,e,p,x}mmintrin.h +endif + +ifeq ($(DEB_TARGET_ARCH),m68k) + files_gcc += $(gcc_lib_dir)/include/math-68881.h +endif + +ifeq ($(DEB_TARGET_ARCH),powerpc) + 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 + ln -sf /$(PF)/$(DEB_TARGET_GNU_TYPE)/$(lib64)/libgcc_s.so.$(GCC_SONAME) $(d)/$(gcc_lib_dir)/libgcc_s_64.so + ln -sf /$(PF)/$(DEB_TARGET_GNU_TYPE)/$(lib64)/libgcc_s.so.$(GCC_SONAME) $(d)/$(gcc_lib_dir)/64/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-3.4-3.4.6.orig/debian/rules.d/binary-libffi.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-libffi.mk @@ -0,0 +1,72 @@ +arch_binaries := $(arch_binaries) libffi + +p_ffi = libffi$(FFI_SONAME) +p_ffid = libffi$(FFI_SONAME)-dev + +d_ffi = debian/$(p_ffi) +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 ($(biarch),yes) + dirs_ffi += $(PF)/$(lib64) + files_ffi += $(PF)/$(lib64)/libffi.so.* + 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) + + 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_EVERSION) $(common_substvars) + b=libffi; v=$(FFI_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_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) --- gcc-3.4-3.4.6.orig/debian/rules.d/binary-fortran.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-fortran.mk @@ -0,0 +1,259 @@ +ifeq ($(with_libg2c),yes) + arch_binaries := $(arch_binaries) libg2c +endif +ifeq ($(with_lib32g2c),yes) + arch_binaries := $(arch_binaries) lib32g2c +endif +ifeq ($(with_lib64g2c),yes) + arch_binaries := $(arch_binaries) lib64g2c +endif + +ifeq ($(with_fdev),yes) + arch_binaries := $(arch_binaries) fdev + ifneq ($(GFDL_INVARIANT_FREE),yes) + indep_binaries := $(indep_binaries) fortran-doc + endif + arch_binaries := $(arch_binaries) libg2c-dev +endif + +p_g77 = g77$(pkg_ver) +p_g77d = g77$(pkg_ver)-doc +p_g2c = libg2c$(F77_SONAME) +p_g2c32 = lib32g2c$(F77_SONAME) +p_g2c64 = lib64g2c$(F77_SONAME) +p_g2cd = libg2c$(F77_SONAME)-dev + +d_g77 = debian/$(p_g77) +d_g77d = debian/$(p_g77d) +d_g2c = debian/$(p_g2c) +d_g2c32 = debian/$(p_g2c32) +d_g2c64 = debian/$(p_g2c64) +d_g2cd = debian/$(p_g2cd) + +dirs_g77 = \ + $(docdir)/$(p_base)/fortran \ + $(PF)/bin \ + $(gcc_lexec_dir) \ + $(gcc_lib_dir)/include \ + $(PF)/include \ + $(PF)/share/man/man1 +files_g77 = \ + $(PF)/bin/g77$(pkg_ver) \ + $(gcc_lexec_dir)/f771 \ + $(PF)/share/man/man1/g77$(pkg_ver).1 + +dirs_g2c = \ + $(docdir)/$(p_base)/fortran \ + $(PF)/$(libdir) \ + +files_g2c = \ + $(PF)/$(libdir)/libg2c.so.* + +dirs_g2cd = \ + $(docdir)/$(p_base)/fortran \ + $(PF)/$(libdir) \ + $(PF)/include \ + +files_g2cd = \ + $(PF)/$(libdir)/libg2c.{a,la,so} \ + $(PF)/$(libdir)/libfrtbegin.a \ + $(PF)/include/g2c.h + +ifeq ($(with_lib32g2c),yes) + dirs_g2cd += $(lib32) + files_g2cd += $(lib32)/{libg2c.{a,la,so},libfrtbegin.a} +endif +ifeq ($(with_lib64g2c),yes) + dirs_g2cd += $(PF)/lib64 + files_g2cd += $(PF)/lib64/{libg2c.{a,la,so},libfrtbegin.a} +endif + +# ---------------------------------------------------------------------- +$(binary_stamp)-libg2c: $(install_stamp) + dh_testdir + dh_testroot + mv $(install_stamp) $(install_stamp)-tmp + + rm -rf $(d_g2c) + dh_installdirs -p$(p_g2c) $(dirs_g2c) + DH_COMPAT=2 dh_movefiles -p$(p_g2c) $(files_g2c) + debian/dh_doclink -p$(p_g2c) $(p_base) + cp -p debian/README.libf2c \ + $(d_g2c)/$(docdir)/$(p_base)/fortran/README.Debian + + dh_strip -p$(p_g2c) + dh_compress -p$(p_g2c) + dh_fixperms -p$(p_g2c) + dh_makeshlibs -p$(p_g2c) -V '$(p_g2c) (>= $(DEB_F2C_SOVERSION))' + dh_shlibdeps -p$(p_g2c) + dh_gencontrol -p$(p_g2c) -- -v$(DEB_EVERSION) $(common_substvars) + dh_installdeb -p$(p_g2c) + dh_md5sums -p$(p_g2c) + dh_builddeb -p$(p_g2c) + + trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp) + +# ---------------------------------------------------------------------- +$(binary_stamp)-lib64g2c: $(install_stamp) + dh_testdir + dh_testroot + mv $(install_stamp) $(install_stamp)-tmp + + rm -rf $(d_g2c64) + dh_installdirs -p$(p_g2c64) \ + $(PF)/lib64 + DH_COMPAT=2 dh_movefiles -p$(p_g2c64) \ + $(PF)/lib64/libg2c.so.* + + debian/dh_doclink -p$(p_g2c64) $(p_base) + + dh_strip -p$(p_g2c64) + dh_compress -p$(p_g2c64) + dh_fixperms -p$(p_g2c64) + dh_makeshlibs -p$(p_g2c64) -V '$(p_g2c64) (>= $(DEB_F2C_SOVERSION))' +# dh_shlibdeps -p$(p_g2c64) + dh_gencontrol -p$(p_g2c64) -- -v$(DEB_EVERSION) $(common_substvars) + dh_installdeb -p$(p_g2c64) + dh_md5sums -p$(p_g2c64) + dh_builddeb -p$(p_g2c64) + + trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp) + +# ---------------------------------------------------------------------- +$(binary_stamp)-lib32g2c: $(install_stamp) + dh_testdir + dh_testroot + mv $(install_stamp) $(install_stamp)-tmp + + rm -rf $(d_g2c32) + dh_installdirs -p$(p_g2c32) \ + $(lib32) + DH_COMPAT=2 dh_movefiles -p$(p_g2c32) \ + $(lib32)/libg2c.so.* + + debian/dh_doclink -p$(p_g2c32) $(p_base) + + dh_strip -p$(p_g2c32) + dh_compress -p$(p_g2c32) + dh_fixperms -p$(p_g2c32) + dh_makeshlibs -p$(p_g2c32) -V '$(p_g2c32) (>= $(DEB_F2C_SOVERSION))' +# dh_shlibdeps -p$(p_g2c32) + dh_gencontrol -p$(p_g2c32) -- -v$(DEB_EVERSION) $(common_substvars) + dh_installdeb -p$(p_g2c32) + dh_md5sums -p$(p_g2c32) + dh_builddeb -p$(p_g2c32) + + trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp) + +# ---------------------------------------------------------------------- +$(binary_stamp)-libg2c-dev: $(install_stamp) + dh_testdir + dh_testroot + mv $(install_stamp) $(install_stamp)-tmp + + rm -rf $(d_g2cd) + dh_installdirs -p$(p_g2cd) $(dirs_g2cd) + mv $(d)/$(gcc_lib_dir)/include/g2c.h $(d)/$(PF)/include/ + dh_movefiles -p$(p_g2cd) $(files_g2cd) + debian/dh_doclink -p$(p_g2cd) $(p_base) + + dh_strip -p$(p_g2cd) + dh_compress -p$(p_g2cd) + dh_fixperms -p$(p_g2cd) + dh_shlibdeps -p$(p_g2cd) + dh_gencontrol -p$(p_g2cd) -- -v$(DEB_EVERSION) $(common_substvars) + dh_installdeb -p$(p_g2cd) + dh_md5sums -p$(p_g2cd) + dh_builddeb -p$(p_g2cd) + + 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 + +# sed "s,^libdir=.*,libdir='/$(gcc_lib_dir)'," \ +# $(d)/$(PF)/$(libdir)/libg2c.la > $(d)/$(gcc_lib_dir)/libg2c.la +# rm -f $(d)/$(PF)/$(libdir)/libg2c.la +# mv $(d)/$(PF)/$(libdir)/libg2c.{a,so} $(d)/$(gcc_lib_dir)/ +# ln -sf ../../../libg2c.so.$(F77_SONAME) \ +# $(d)/$(gcc_lib_dir)/libg2c.so +# mv $(d)/$(PF)/$(libdir)/libfrtbegin.a $(d)/$(gcc_lib_dir)/ + +#ifeq ($(biarch),yes) +# ifeq ($(DEB_TARGET_GNU_CPU),i386) +# mv $(d)/$(PF)/$(lib64)/libg2c.{a,la,so} $(d)/$(gcc_lib_dir)/64 +# ln -sf ../../../../lib64/libg2c.so.$(F77_SONAME) \ +# $(d)/$(gcc_lib_dir)/64/libg2c.so +# mv $(d)/$(PF)/$(lib64)/libfrtbegin.a $(d)/$(gcc_lib_dir)/64 +# endif +#endif + rm -rf $(d_g77) + dh_installdirs -p$(p_g77) $(dirs_g77) + DH_COMPAT=2 dh_movefiles -p$(p_g77) $(files_g77) + +# dh_installdirs -p$(p_g2cd) $(dirs_g2cd) +# DH_COMPAT=2 dh_movefiles -p$(p_g2cd) $(files_g2cd) + + ln -sf g77$(pkg_ver) \ + $(d_g77)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-g77$(pkg_ver) + ln -sf g77$(pkg_ver).1 \ + $(d_g77)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-g77$(pkg_ver).1 + ln -sf g77$(pkg_ver) \ + $(d_g77)/$(PF)/bin/$(TARGET_ALIAS)-g77$(pkg_ver) + ln -sf g77$(pkg_ver).1 \ + $(d_g77)/$(PF)/share/man/man1/$(TARGET_ALIAS)-g77$(pkg_ver).1 + + debian/dh_doclink -p$(p_g77) $(p_base) +# debian/dh_doclink -p$(p_g2cd) $(p_base) + +# #cp -p $(srcdir)/gcc/f/{NEWS,BUGS} \ +# # $(d_g77)/$(docdir)/$(p_base)/fortran/. + cp -p $(srcdir)/libf2c/README \ + $(d_g77)/$(docdir)/$(p_base)/fortran/README.libf2c + cp -p $(srcdir)/gcc/f/ChangeLog \ + $(d_g77)/$(docdir)/$(p_base)/fortran/changelog + debian/dh_rmemptydirs -p$(p_g77) +# debian/dh_rmemptydirs -p$(p_g2cd) + + dh_strip -p$(p_g77) + dh_compress -p$(p_g77) + dh_fixperms -p$(p_g77) + dh_shlibdeps -p$(p_g77) + dh_gencontrol -p$(p_g77) -- -v$(DEB_VERSION) $(common_substvars) + dh_installdeb -p$(p_g77) + dh_md5sums -p$(p_g77) + dh_builddeb -p$(p_g77) + + 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_g77d) + dh_installdirs -p$(p_g77d) \ + $(docdir)/$(p_base)/fortran \ + $(PF)/share/info + DH_COMPAT=2 dh_movefiles -p$(p_g77d) \ + $(PF)/share/info/g77* + + debian/dh_doclink -p$(p_g77d) $(p_base) +ifneq ($(GFDL_INVARIANT_FREE),yes) + dh_installdocs -p$(p_g77d) + rm -f $(d_g77d)/$(docdir)/$(p_base)/copyright + cp -p html/g77.html $(d_g77d)/$(docdir)/$(p_base)/fortran/ +endif + + dh_compress -p$(p_g77d) + dh_fixperms -p$(p_g77d) + dh_installdeb -p$(p_g77d) + dh_gencontrol -p$(p_g77d) -- -v$(DEB_VERSION) $(common_substvars) + dh_md5sums -p$(p_g77d) + dh_builddeb -p$(p_g77d) + + trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp) --- gcc-3.4-3.4.6.orig/debian/rules.d/binary-libgcc.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-libgcc.mk @@ -0,0 +1,160 @@ +ifeq ($(with_libgcc),yes) + arch_binaries := $(arch_binaries) libgcc +endif +ifeq ($(with_lib32gcc),yes) + arch_binaries := $(arch_binaries) lib32gcc +endif +ifeq ($(with_lib64gcc),yes) + arch_binaries := $(arch_binaries) lib64gcc +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 + + dh_installdocs -p$(p_lgcc) + dh_installchangelogs -p$(p_lgcc) + + debian/dh_rmemptydirs -p$(p_lgcc) +ifeq ($(with_shared_libgcc),yes) + dh_makeshlibs -p$(p_lgcc) -V '$(p_lgcc) (>= $(DEB_LIBGCC_SOVERSION))' + dh_shlibdeps -p$(p_lgcc) + cat debian/$(p_lgcc)/DEBIAN/shlibs >> debian/shlibs.local +endif + dh_strip -p$(p_lgcc) + dh_compress -p$(p_lgcc) + dh_fixperms -p$(p_lgcc) + 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) \ + lib64 + +ifeq ($(with_shared_libgcc),yes) + mv $(d)/$(PF)/lib64/libgcc_s.so.$(GCC_SONAME) $(d_l64gcc)/lib64/. +endif + + dh_installdocs -p$(p_l64gcc) + dh_installchangelogs -p$(p_l64gcc) + + 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 +ifeq ($(DEB_TARGET_ARCH),s390) +# 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 + echo 'shlibs:Depends=libc6-s390x (>= 2.3.1-1)' \ + > debian/$(p_l64gcc).substvars +else + ifeq ($(DEB_TARGET_ARCH),i386) + echo 'shlibs:Depends=libc6-amd64' \ + > debian/$(p_l64gcc).substvars + else + ifeq ($(DEB_TARGET_ARCH),powerpc) + echo 'shlibs:Depends=libc6-ppc64' \ + > debian/$(p_l64gcc).substvars + else + ifeq ($(DEB_TARGET_ARCH),sparc) + echo 'shlibs:Depends=libc6-sparc64' \ + > debian/$(p_l64gcc).substvars + else + dh_shlibdeps -p$(p_l64gcc) + endif + endif + endif +endif + dh_gencontrol -p$(p_l64gcc) \ + -- -v$(DEB_LIBGCC_VERSION) $(common_substvars) + b=lib64gcc; 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) \ + $(lib32) + mv $(d)/$(PF)/lib32/libgcc_s.so.$(GCC_SONAME) \ + $(d_l32gcc)/$(lib32)/. + + dh_installdocs -p$(p_l32gcc) + dh_installchangelogs -p$(p_l32gcc) + + debian/dh_rmemptydirs -p$(p_l32gcc) + dh_strip -p$(p_l32gcc) + dh_compress -p$(p_l32gcc) + dh_fixperms -p$(p_l32gcc) + dh_gencontrol -p$(p_l32gcc) \ + -- -v$(DEB_VERSION) $(common_substvars) + b=lib32gcc; 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-3.4-3.4.6.orig/debian/rules.d/binary-libstdcxx.mk +++ gcc-3.4-3.4.6/debian/rules.d/binary-libstdcxx.mk @@ -0,0 +1,439 @@ +ifeq ($(with_libcxx),yes) + arch_binaries := $(arch_binaries) libstdcxx +endif +ifeq ($(with_lib64cxx),yes) + arch_binaries := $(arch_binaries) lib64stdcxx +endif +ifeq ($(with_lib32cxx),yes) + arch_binaries := $(arch_binaries) lib32stdcxx +endif + +ifeq ($(with_cxxdev),yes) + arch_binaries := $(arch_binaries) libstdcxx-dev + indep_binaries := $(indep_binaries) libstdcxx-doc +endif + +p_lib = libstdc++$(CXX_SONAME) +p_dev = $(p_lib)-dev +p_pic = $(p_lib)-pic +p_dbg = $(p_lib)-dbg +p_lib64 = lib64stdc++$(CXX_SONAME) +p_lib32 = lib32stdc++$(CXX_SONAME) +p_libd = libstdc++6-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_libd = debian/$(p_libd) + +dirs_lib = \ + $(docdir) \ + $(PF)/$(libdir) + +dirs_lib64 = \ + $(docdir) \ + $(PF)/lib64 + +files_lib = \ + $(PF)/$(libdir)/libstdc++.so.* + +files_lib64 = \ + $(PF)/lib64/libstdc++.so.* + +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++.* + +dirs_pic = \ + $(docdir) \ + $(gcc_lib_dir) +files_pic = \ + $(gcc_lib_dir)/libstdc++_pic.a + +ifeq ($(biarch),yes) + dirs_dev += $(gcc_lib_dir)/64/ + files_dev += $(gcc_lib_dir)/64/libstdc++.{a,so} \ + $(gcc_lib_dir)/64/libsupc++.a + dirs_dbg += $(PF)/lib64/debug + files_dbg += $(PF)/lib64/debug/libstdc++.* + dirs_pic += $(gcc_lib_dir) + files_pic += $(gcc_lib_dir)/64/libstdc++_pic.a +endif +ifeq ($(biarch32),yes) + dirs_dev += $(gcc_lib_dir)/32/ + files_dev += $(gcc_lib_dir)/32/libstdc++.{a,so} \ + $(gcc_lib_dir)/32/libsupc++.a + dirs_dbg += $(PF)/lib32/debug + files_dbg += $(PF)/lib32/debug/libstdc++.* + dirs_pic += $(gcc_lib_dir) + files_pic += $(gcc_lib_dir)/32/libstdc++_pic.a +endif + +# ---------------------------------------------------------------------- + +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) $(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) + + 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) + + b=libstdc++; \ + for ext in preinst postinst prerm postrm; do \ + for t in ''; do \ + v=$(CXX_SONAME); \ + if [ -f debian/$$b$$t.$$ext ]; then \ + cp -pf debian/$$b$$t.$$ext debian/$$b$$v$$t.$$ext; \ + fi; \ + done; \ + done + + 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) + install -d $(d)/lib64 + DH_COMPAT=2 dh_movefiles -p$(p_lib64) $(files_lib64) + 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_rmemptydirs -p$(p_lib64) + dh_strip -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 +ifeq ($(DEB_TARGET_GNU_CPU),s390) +# 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=libc6-s390x (>= 2.3.1-1), $(p_l64gcc) (>= $(DEB_LIBGCC_SOVERSION))' \ + > debian/$(p_lib64).substvars +else + ifeq ($(DEB_TARGET_GNU_CPU),i386) + echo 'shlibs:Depends=libc6-amd64, $(p_l64gcc) (>= $(DEB_LIBGCC_SOVERSION))' \ + > debian/$(p_lib64).substvars + else + ifeq ($(DEB_TARGET_GNU_CPU),powerpc) + echo 'shlibs:Depends=libc6-ppc64, $(p_l64gcc) (>= $(DEB_LIBGCC_SOVERSION))' \ + > debian/$(p_lib64).substvars + else + ifeq ($(DEB_TARGET_GNU_CPU),sparc) + echo 'shlibs:Depends=libc6-sparc64 (>= 2.3.2.ds1-21), $(p_l64gcc) (>= $(DEB_LIBGCC_SOVERSION))' \ + > debian/$(p_lib64).substvars + else + dh_shlibdeps -p$(p_lib64) -L $(p_l64gcc) -l $(d_l64gcc)/lib + endif + endif + endif +endif + dh_gencontrol -p$(p_lib64) -- -v$(DEB_VERSION) $(common_substvars) + + b=lib64stdc++; \ + for ext in preinst postinst prerm postrm; do \ + for t in ''; do \ + v=$(CXX_SONAME); \ + if [ -f debian/$$b$$t.$$ext ]; then \ + cp -pf debian/$$b$$t.$$ext debian/$$b$$v$$t.$$ext; \ + fi; \ + done; \ + done + + 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) \ + $(docdir)/$(p_lib32) \ + $(lib32) + mv $(d)/$(lib32)/libstdc++.so.* \ + $(d_lib32)/$(lib32)/. + + 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_rmemptydirs -p$(p_lib32) + dh_strip -p$(p_lib32) + dh_compress -p$(p_lib32) + dh_fixperms -p$(p_lib32) + dh_gencontrol -p$(p_lib32) -- -v$(DEB_VERSION) $(common_substvars) + + b=lib32stdc++; \ + for ext in preinst postinst prerm postrm; do \ + for t in ''; do \ + v=$(CXX_SONAME); \ + if [ -f debian/$$b$$t.$$ext ]; then \ + cp -pf debian/$$b$$t.$$ext debian/$$b$$v$$t.$$ext; \ + fi; \ + done; \ + done + + 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 +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)/ + 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 + +ifeq ($(biarch),yes) + mv $(d)/$(PF)/lib64/lib*c++*.{a,so} $(d)/$(gcc_lib_dir)/64/. + ifeq ($(DEB_TARGET_ARCH),i386) + mv $(d)/$(cxx_inc_dir)/x86_64-linux $(d)/$(cxx_inc_dir)/x86_64-linux-gnu + endif +endif +ifeq ($(biarch32),yes) + mv $(d)/$(lib32)/lib*c++*.{a,so} $(d)/$(gcc_lib_dir)/32/. +endif + + 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 +ifeq ($(biarch),yes) + dh_link -p$(p_dev) \ + /$(PF)/lib64/libstdc++.so.$(CXX_SONAME) \ + /$(gcc_lib_dir)/64/libstdc++.so +endif +ifeq ($(biarch32),yes) + dh_link -p$(p_dev) \ + /$(lib32)/libstdc++.so.$(CXX_SONAME) \ + /$(gcc_lib_dir)/32/libstdc++.so +endif + + 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 + + dh_strip -p$(p_dev) -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) + + b=libstdc++; \ + for ext in preinst postinst prerm postrm; do \ + for t in -dev -dbg -pic; do \ + v=$(CXX_SONAME); \ + if [ -f debian/$$b$$t.$$ext ]; then \ + cp -pf debian/$$b$$t.$$ext debian/$$b$$v$$t.$$ext; \ + fi; \ + done; \ + done + + 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 + if [ -f $(doxygen_doc_dir)/html_user/index.html ]; then \ + sed -e 's,http://gcc\.gnu\.org/onlinedocs/libstdc++,../html,g' \ + -e 's,Main Page,libstdc++-v3 Source: Main Index,' \ + $(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; \ + else \ + echo "unable to generate doxygen docs"; \ + exit 2; \ + fi + 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-3.4-3.4.6.orig/debian/testswing.java +++ gcc-3.4-3.4.6/debian/testswing.java @@ -0,0 +1,312 @@ +import java.awt.*; +import java.awt.geom.*; +import java.awt.image.*; +import java.awt.event.*; +import java.awt.font.*; +import java.util.*; +import javax.swing.*; + +public class testswing +{ + final JFrame frame; + + protected static class ButtonModelStatePrinter + implements javax.swing.event.ChangeListener + { + final String title; + public ButtonModelStatePrinter(final String t) + { + title = t; + } + public void stateChanged(javax.swing.event.ChangeEvent e) + { + if (e.getSource() instanceof ButtonModel) + { + ButtonModel b = (ButtonModel) e.getSource(); + String state = new String(); + state += (" " + (b.isArmed() ? "+" : "-") + "armed"); + state += (" " + (b.isPressed() ? "+" : "-") + "pressed"); + state += (" " + (b.isRollover() ? "+" : "-") + "rollover"); + state += (" " + (b.isSelected() ? "+" : "-") + "selected"); + System.err.println("[" + title + "] button state: " + state); + } + else + { + System.err.println("got weird changevent from " + e.getSource()); + } + } + } + + public static JCheckBox mkCheckbox(String label) + { + JCheckBox c = new JCheckBox(label); + c.setFont(new Font("Luxi", Font.PLAIN, 14)); + c.addChangeListener(new ButtonModelStatePrinter(label)); + return c; + } + + public static JRadioButton mkRadio(String label) + { + JRadioButton c = new JRadioButton(label); + c.setFont(new Font("Luxi", Font.PLAIN, 14)); + c.addChangeListener(new ButtonModelStatePrinter(label)); + return c; + } + + public static JSlider mkSlider() + { + JSlider a = new JSlider(); + a.setPaintTrack(true); + a.setPaintTicks(true); + a.setMajorTickSpacing(30); + a.setInverted(false); + return a; + } + + public static JList mkList(Object[] elts) + { + JList list = new JList(elts); + list.setFont(new Font("Luxi", Font.PLAIN, 14)); + return list; + } + + public static JTabbedPane mkTabs(String[] names) + { + JTabbedPane tabs = new JTabbedPane(); + for (int i = 0; i < names.length; ++i) + { + tabs.addTab(names[i], mkButton(names[i])); + } + return tabs; + } + + + public static JButton mkButton(String title) + { + JButton b = new JButton(title); + b.setMargin(new Insets(5,5,5,5)); + b.setFont(new Font("Luxi", Font.PLAIN, 14)); + b.addChangeListener(new ButtonModelStatePrinter(title)); + return b; + } + + public static JToggleButton mkToggle(String title) + { + JToggleButton b = new JToggleButton(title); + b.setMargin(new Insets(5,5,5,5)); + b.setFont(new Font("Luxi", Font.PLAIN, 14)); + b.getModel().addChangeListener(new ButtonModelStatePrinter(title)); + return b; + } + + public static JPanel mkPanel(JComponent[] inners) + { + JPanel p = new JPanel(); + for (int i = 0; i < inners.length; ++i) + { + p.add(inners[i]); + } + return p; + } + + private static class CheckCellRenderer + extends JCheckBox implements ListCellRenderer + { + public Component getListCellRendererComponent(JList list, + Object value, + int index, + boolean isSelected, + boolean cellHasFocus) + { + setSelected(isSelected); + setText(value.toString()); + setFont(new Font("Luxi", Font.PLAIN, 14)); + return this; + } + } + + private static class LabelCellRenderer + extends DefaultListCellRenderer + { + public Component getListCellRendererComponent(JList list, + Object value, + int index, + boolean isSelected, + boolean cellHasFocus) + { + Component c = super.getListCellRendererComponent(list, value, index, + isSelected, cellHasFocus); + c.setFont(new Font("Luxi Mono", Font.PLAIN, 10)); + return c; + } + } + + public static JScrollBar mkScrollBar() + { + JScrollBar scrollbar = new JScrollBar(); + return scrollbar; + } + + public static JPanel mkViewportBox(final JComponent inner) + { + final JViewport port = new JViewport(); + port.setView(inner); + JButton left = mkButton("left"); + JButton right = mkButton("right"); + + left.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + Point p = port.getViewPosition(); + port.setViewPosition(new Point(p.x - 10, p.y)); + } + }); + + right.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + Point p = port.getViewPosition(); + port.setViewPosition(new Point(p.x + 10, p.y)); + } + }); + + return mkPanel(new JComponent[] {port, left, right}); + } + + public static JScrollPane mkScrollPane(JComponent inner) + { + return new JScrollPane(inner, + JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, + JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + } + + public static JPanel mkListPanel(Object[] elts) + { + final DefaultListModel mod = new DefaultListModel(); + final JList list1 = new JList(mod); + final JList list2 = new JList(mod); + + list2.setSelectionModel(list1.getSelectionModel()); + for (int i = 0; i < elts.length; ++i) + mod.addElement(elts[i]); + list1.setCellRenderer(new LabelCellRenderer()); + list2.setCellRenderer(new CheckCellRenderer()); + + JButton add = mkButton("add element"); + add.addActionListener(new ActionListener() + { + int i = 0; + public void actionPerformed(ActionEvent e) + { + mod.addElement("new element " + i); + ++i; + } + }); + + JButton del = mkButton("delete selected"); + del.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + for (int i = 0; i < mod.getSize(); ++i) + if (list1.isSelectedIndex(i)) + mod.remove(i); + } + }); + + return mkPanel(new JComponent[] {list1, //mkScrollPane(list1), + list2, //mkScrollPane(list2), + mkPanel(new JComponent[] {add, del})}); + } + + + public static JButton mkDisposerButton(final JFrame c) + { + JButton close = mkButton("close"); + close.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + c.dispose(); + } + }); + return close; + } + + public void addCase(testcase c) + { + c.connectTo(this); + } + + class testcase + implements ActionListener + { + JFrame frame; + JComponent inner; + String name; + + testcase(String n, JComponent i) + { + frame = null; + name = n; + inner = i; + } + + public void connectTo(testswing t) + { + JButton b = mkButton(name); + b.addActionListener(this); + t.frame.getContentPane().add(b); + } + + public void actionPerformed(ActionEvent e) + { + frame = new JFrame(); + frame.getContentPane().setLayout(new BorderLayout()); + frame.getContentPane().add(inner, BorderLayout.CENTER); + frame.getContentPane().add(mkDisposerButton(frame), BorderLayout.SOUTH); + frame.pack(); + frame.show(); + } + } + + public testswing () + { + frame = new JFrame (); + Container cp = frame.getContentPane(); + cp.setLayout(new FlowLayout()); + this.addCase(new testcase("Buttons", mkPanel(new JComponent[] {mkButton("mango"), + mkButton("guava"), + mkButton("lemon")}))); + this.addCase(new testcase("Toggles", mkToggle("cool and refreshing"))); + this.addCase(new testcase("Checkbox", mkCheckbox("ice cold"))); + this.addCase(new testcase("Radio", mkRadio("delicious"))); + this.addCase(new testcase("Slider", mkSlider())); + this.addCase(new testcase("List", mkListPanel(new String[] { "hello", "this", "is", "a", "list"}))); + this.addCase(new testcase("Scrollbar", mkScrollBar())); + this.addCase(new testcase("Viewport", mkViewportBox(mkButton("View Me!")))); + this.addCase(new testcase("ScrollPane", mkScrollPane(mkButton("Scroll Me!")))); + this.addCase(new testcase("TabPane", mkTabs(new String[] {"happy", "sad", "indifferent"}))); + + JButton exitDisposer = mkDisposerButton(frame); + exitDisposer.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + System.exit(1); + } + }); + + frame.getContentPane().add(exitDisposer); + frame.pack (); + frame.show (); + } + + public static void main(String args[]) + { + testswing t = new testswing (); + } + +} --- gcc-3.4-3.4.6.orig/debian/README +++ gcc-3.4-3.4.6/debian/README @@ -0,0 +1,66 @@ + 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. + + +Notes on GCC 3.4 in the sarge distribution +------------------------------------------ + +[package maintainers: when using GCC 3.4 for package building, please + check that your packages still work on platforms with GCC changes + specific for these platforms (hppa, m68k, mips, mipsel, sparc). ] + +GCC 3.4 is included in sarge as a newer compiler version, the system +compiler for sarge is GCC 3.3 (the transition to a newer system compiler +is a post sarge issue). Due to some incompatibilities between +3.3 and 3.4 care should be taken, when some code built by both versions +is linked together (most likely linking against a shared library found +in Debian): + +- C++ code compiled by g++-3.3 and g++-3.4 is not compatible. Applications + using C++ libraries have to make sure that these libraries are rebuilt. + +- On i386, the compiler is built as a biarch compiler (can generated code + for amd64). To use it, call gcc-3.4 -m64. Packages containing the 64bit + versions of libraries and library development files need to be installed + separately (i.e. lib64gcc1, amd64-libs, ...). + gcc-3.4 -m64 turns on the common subset for all x86-64 architectures, + specifying -march=k8 turns on k8/opteron specific features, -march=nocona + turns on some P4/64 Nocona specific features. + +- On hppa and m68k the exception handling changed from SJLJ to Dwarf2 based + exception handling. This affects C++ and code, which implements it's own + handling. If a library or binary ends up linked against libgcc1 _and_ + libgcc2, something probably won't work. + +- The implementation of the MIPS ABIs has changed. As a result, the code + generated for certain MIPS targets will not be binary compatible with + earlier releases. See http://gcc.gnu.org/gcc-3.4/mips-abi.html + +- The implementation of the SPARC ABIs has changed. As a result, the code + generated will not be binary compatible with earlier releases in certain + cases. See http://gcc.gnu.org/gcc-3.4/sparc-abi.html + +Maintainers of these packages +----------------------------- + +Matthias Klose +Ray Dassen +Jeff Bailey (hurd-i386) +Joel Baker (netbsd-i386) +Philip Blundell (arm-linux) +Ben Collins (sparc-linux) +Randolph Chung (ia64-linux) +Falk Hueffner (alpha-linux) +Dan Jacobowitz (powerpc-linux) +Thiemo Seufer (mips*-linux) +Ryan Murray (mips*-linux) +Matt Taggart (hppa-linux) +Gerhard Tonn (s390-linux) +Roman Zippel (m68k-linux) +Ludovic Brenta (gnat) + +=============================================================================== --- gcc-3.4-3.4.6.orig/debian/gcj-BV.postinst +++ gcc-3.4-3.4.6/debian/gcj-BV.postinst @@ -0,0 +1,19 @@ +#! /bin/sh -e + +update-alternatives --quiet \ + --install /usr/bin/javac javac /usr/bin/gcj-wrapper-@BV@ 34 \ + --slave /usr/share/man/man1/javac.1.gz javac.1.gz /usr/share/man/man1/gcj-wrapper-@BV@.1.gz \ + --slave /usr/bin/javah javah /usr/bin/gcjh-wrapper-@BV@ \ + --slave /usr/share/man/man1/javah.1.gz javah.1.gz /usr/share/man/man1/gcjh-wrapper-@BV@.1.gz \ + --slave /usr/bin/rmic rmic /usr/bin/rmic-@BV@ \ + --slave /usr/share/man/man1/rmic.1.gz rmic.1.gz /usr/share/man/man1/rmic-@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 + true +fi + +#DEBHELPER# --- gcc-3.4-3.4.6.orig/debian/NEWS.html +++ gcc-3.4-3.4.6/debian/NEWS.html @@ -0,0 +1,2093 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GCC 3.4 Release Series — Changes, New Features, and Fixes +- GNU Project - Free Software Foundation (FSF) + + + + + + + + + +

+GCC 3.4 Release Series
Changes, New Features, and Fixes +

+ +

The latest release in the 3.4 release series is +GCC 3.4.5.

+ +

GCC 3.4 has many improvements in the C++ +frontend. Before reporting a bug, please make sure it's really GCC, +and not your code, that is broken.

+ +

Caveats

+ +
    +
  • GNU Make is now required to build GCC.
  • +
  • With -nostdinc the preprocessor used to ignore + both standard include paths and include paths + contained in environment variables. It was neither documented + nor intended that environment variable paths be ignored, so + this has been corrected.
  • +
  • GCC no longer accepts the options -fvolatile, + -fvolatile-global and -fvolatile-static. + It is unlikely that they worked correctly in any 3.x release.
  • +
  • GCC no longer ships <varargs.h>. Use + <stdarg.h> instead.
  • +
  • Support for all the systems obsoleted in + GCC 3.3 has been removed from GCC 3.4. See below for a + list of systems which are obsoleted + in this release.
  • +
  • GCC now requires an ISO C90 (ANSI C89) C compiler to build. + K&R C compilers will not work.
  • +
  • The implementation of the MIPS ABIs has + changed. As a result, the code generated for certain MIPS + targets will not be binary compatible with earlier releases.
  • +
  • In previous releases, the MIPS port had a fake "hilo" register + with the user-visible name accum. This register + has been removed.
  • +
  • The implementation of the SPARC ABIs has + changed. As a result, the code generated will not be binary + compatible with earlier releases in certain cases.
  • +
  • The configure option --enable-threads=pthreads has + been removed; use --enable-threads=posix instead, + which should have the same effect.
  • +
  • Code size estimates used by inlining heuristics for C, Objective-C, C++ + and Java have been redesigned significantly. As a result the parameters + of -finline-insns, + --param max-inline-insns-single + and --param max-inline-insns-auto need to be + reconsidered.
  • +
  • --param max-inline-slope + and --param min-inline-insns + have been removed; they are not needed for the new bottom-up inlining + heuristics.
  • +
  • The new unit-at-a-time compilation scheme has several compatibility + issues: +
      +
    • The order in which functions, variables, and top-level + asm statements are emitted may have changed. Code + relying on some particular ordering needs to be updated. The + majority of such top-level asm statements can be replaced by section + attributes.
    • +
    • Unreferenced static variables and functions are removed. + This may result in undefined references when an asm + statement refers to the variable/function directly. In that + case either the variable/function shall be listed in asm statement + operand or in the case of top-level asm statements the attribute + used shall be used to force function/variable to be + always output and considered as a possibly used by unknown code. + +

      For variables the attribute is accepted only by GCC 3.4 and newer, + while for earlier versions it is sufficient to use + unused to silence warnings about the variables not being + referenced. + To keep code portable across different GCC versions, you can use + appropriate preprocessor conditionals.

    • +
    • Static functions now can use non-standard passing conventions that may + break asm statements calling functions directly. Again + the attribute used shall be used to prevent this + behavior.
    • +
    + As a temporary workaround, -fno-unit-at-a-time can be used, + but this scheme may not be supported by future releases of GCC. +
  • +
  • GCC 3.4 automatically places zero-initialized variables in + the .bss section on some operating systems. + Versions of GNU Emacs up to (and including) 21.3 will not work + correctly when using this optimization; you can use + -fno-zero-initialized-in-bss to disable it.
  • +
  • If GCC 3.4 is configured with --enable-threads=posix + (the default on most targets that support pthreads) then + _REENTRANT will be defined unconditionally by + some libstdc++ headers. C++ code which relies on that macro to + detect whether multi-threaded code is being compiled might + change in meaning, possibly resulting in linker errors for + single-threaded programs. + Affected users of Boost should + compile single-threaded code with -DBOOST_DISABLE_THREADS. + See Bugzilla for + more + information. +
  • +
+ +

General Optimizer Improvements

+ +
    +
  • Usability of the profile feedback and coverage testing has been improved. +
      +
    • Performance of profiled programs has been improved by faster profile + merging code.
    • +
    • Better use of the profile feedback for optimization (loop unrolling + and loop peeling).
    • +
    • File locking support allowing fork() calls and parallel + runs of profiled programs.
    • +
    • Coverage file format has been redesigned.
    • +
    • gcov coverage tool has been improved.
    • +
    • make profiledbootstrap available to build a faster + compiler. + +

      Experiments made on i386 hardware showed an 11% speedup on + -O0 and a 7.5% speedup on -O2 compilation of a + large C++ + testcase.

    • +
    • New value profiling pass enabled via + -fprofile-values
    • +
    • New value profile transformations pass enabled via -fvpt + aims to optimize some code sequences by exploiting knowledge about + value ranges or other properties of the operands. At the moment a + conversion of expensive divisions into cheaper operations has been + implemented.
    • +
    • New -fprofile-generate and -fprofile-use + command line options to simplify the use of profile feedback.
    • +
    +
  • +
  • A new unit-at-a-time compilation scheme for C, Objective-C, C++ and + Java which is enabled via -funit-at-a-time (and implied by + -O2). In this scheme a whole file is parsed first and + optimized later. The following basic inter-procedural optimizations + are implemented: +
      +
    • Removal of unreachable functions and variables
    • +
    • Discovery of local functions (functions with static linkage whose + address is never taken)
    • +
    • On i386, these local functions use register parameter passing + conventions.
    • +
    • Reordering of functions in topological order of the call graph to + enable better propagation of optimizing hints (such as the stack + alignments needed by functions) in the back end.
    • +
    • Call graph based out-of-order inlining heuristics which allows to + limit overall compilation unit growth (--param + inline-unit-growth).
    • +
    + Overall, the unit-at-a-time scheme produces a 1.3% improvement for the + SPECint2000 benchmark on the i386 architecture (AMD Athlon CPU). +
  • +
  • More realistic code size estimates used by inlining for C, Objective-C, + C++ and Java. The growth of large functions can now be limited via + --param large-function-insns + and --param large-function-growth.
  • +
  • A new cfg-level loop optimizer pass replaces the old loop unrolling + pass and adds two other loop transformations -- loop peeling and loop + unswitching -- and also uses the profile feedback to limit code growth. + (The three optimizations are enabled by -funroll-loops, + -fpeel-loops and -funswitch-loops flags, + respectively). + +

    The old loop unroller still can be enabled by + -fold-unroll-loops and may produce better code in some + cases, especially when the webizer optimization pass is not + run.

  • +
  • A new web construction pass enabled via -fweb (and implied + by -O3) improves the quality of register allocation, CSE, + first scheduling pass and some other optimization passes by avoiding + re-use of pseudo registers with non-overlapping live ranges. The pass + almost always improves code quality but does make debugging difficult + and thus is not enabled by default by -O2 +

    The pass is especially effective as cleanup after code duplication + passes, such as the loop unroller or the tracer.

  • +
  • Experimental implementations of superblock or trace scheduling in the + second scheduling pass can be enabled via + -fsched2-use-superblocks and + -fsched2-use-traces, respectively.
  • +
+ + +

New Languages and Language specific improvements

+ +

Ada

+
    +
  • The Ada front end has been updated to include numerous + bug fixes and enhancements. These include: +
      +
    • Improved project file support
    • +
    • Additional set of warnings about potential wrong code
    • +
    • Improved error messages
    • +
    • Improved code generation
    • +
    • Improved cross reference information
    • +
    • Improved inlining
    • +
    • Better run-time check elimination
    • +
    • Better error recovery
    • +
    • More efficient implementation of unbounded strings
    • +
    • Added features in GNAT.Sockets, + GNAT.OS_Lib, GNAT.Debug_Pools, ...
    • +
    • New GNAT.xxxx packages (e.g. GNAT.Strings, + GNAT.Exception_Action)
    • +
    • New pragmas
    • +
    • New -gnatS switch replacing gnatpsta
    • +
    • Implementation of new Ada features (in particular limited with, + limited aggregates)
    • +
    +
  • +
+ +

C/Objective-C/C++

+ +
    + +
  • Precompiled headers are now supported. Precompiled headers + can dramatically speed up compilation of some projects. There + are some known defects in the current precompiled header + implementation that will result in compiler crashes in + relatively rare situations. Therefore, precompiled headers + should be considered a "technology preview" in this + release. Read the manual for details about how to use + precompiled headers.
  • +
  • File handling in the preprocessor has been rewritten. GCC no + longer gets confused by symlinks and hardlinks, and now has + a correct implementation of #import and + #pragma once. + These two directives have therefore been un-deprecated.
  • +
  • The undocumented extension that allowed C programs to have a + label at the end of a compound statement, which has been + deprecated since GCC 3.0, has been removed.
  • +
  • The cast-as-lvalue extension has been removed for C++ and + deprecated for C and Objective-C. In particular, + code like this: +
    +        int i;
    +        (char) i = 5;
    +        
    +

    or this:

    +
    +        char *p;
    +        ((int *) p)++;
    +        
    +

    is no longer accepted for C++ and will not be accepted for + C and Objective-C in a future version.

  • +
  • The conditional-expression-as-lvalue extension has been + deprecated for C and Objective-C. In particular, code like + this: +
    +        int a, b, c;
    +        (a ? b : c) = 2;
    +        
    +

    will not be accepted for C and Objective-C in a future + version.

  • +
  • The compound-expression-as-lvalue extension has been + deprecated for C and Objective-C. In particular, code like + this: +
    +        int a, b;
    +        (a, b) = 2;
    +        
    +

    will not be accepted for C and Objective-C in a future + version. A possible non-intrusive workaround is the following:

    +
    +        (*(a, &b)) = 2;
    +        
  • +
  • Several + + built-in functions such as __builtin_popcount + for counting bits, finding the highest and lowest bit in a + word, and parity have been added.
  • +
  • The -fwritable-strings option has been deprecated + and will be removed.
  • +
  • Many C math library functions are now recognized as built-ins and + optimized.
  • +
  • The C, C++, and Objective-C compilers can now handle source files + written in any character encoding supported by the host C library. + The default input character set is taken from the current locale, + and may be overridden with the -finput-charset command + line option. In the future we will add support for inline encoding + markers.
  • +
+ +

C++

+ +
    +
  • G++ is now much closer to full conformance to + the ISO/ANSI C++ standard. This means, among other things, that a lot + of invalid constructs which used to be accepted in previous versions + will now be rejected. It is very likely that existing C++ code will + need to be fixed. This document lists some of the most common + issues.
  • + +
  • A hand-written recursive-descent C++ parser has replaced the + YACC-derived C++ parser from previous GCC releases. The new + parser contains much improved infrastructure needed for better + parsing of C++ source codes, handling of extensions, and clean + separation (where possible) between proper semantics analysis + and parsing. The new parser fixes many bugs that were found + in the old parser.
  • + +
  • You must now use the typename and + template keywords to disambiguate dependent names, + as required by the C++ standard. + +
    +	struct K {
    +	  typedef int mytype_t;
    +	};
    +	
    +	template <class T1> struct A {
    +	  template <class T2> struct B { 
    +	      void callme(void);
    +	    };
    +
    +	  template <int N> void bar(void) 
    +	  {
    +	    // Use 'typename' to tell the parser that T1::mytype_t names
    +	    //  a type. This is needed because the name is dependent (in
    +	    //  this case, on template parameter T1).
    +	    typename T1::mytype_t x;
    +	    x = 0;
    +	  }
    +	};
    +
    +	template <class T> void template_func(void)
    +	{
    +	  // Use 'template' to prefix member templates within 
    +	  //  dependent types (a has type A<T>, which depends on
    +	  //  the template parameter T).
    +	  A<T> a;
    +	  a.template bar<0>();
    +
    +	  // Use 'template' to tell the parser that B is a nested 
    +	  //  template class (dependent on template parameter T), and 
    +	  //  'typename' because the whole A<T>::B<int> is 
    +	  //  the name of a type (again, dependent).
    +	  typename A<T>::template B<int> b;
    +	  b.callme();
    +	}
    +	
    +	void non_template_func(void)
    +	{
    +	  // Outside of any template class or function, no names can be
    +	  //  dependent, so the use of the keyword 'typename' and 'template'
    +	  //  is not needed (and actually forbidden).
    +	  A<K> a;
    +	  a.bar<0>();
    +	  A<K>::B<float> b;
    +	  b.callme();
    +	}
  • + + + +
  • In a template definition, unqualified names will no longer + find members of a dependent base (as specified by [temp.dep]/3 + in the C++ standard). For example, +
    +	template <typename T> struct B {
    +	  int m;
    +	  int n;
    +	  int f ();
    +	  int g ();
    +	};
    +	int n;
    +	int g ();
    +	template <typename T> struct C : B<T> {
    +	  void h ()
    +	  {
    +	    m = 0; // error
    +	    f ();  // error
    +	    n = 0; // ::n is modified
    +	    g ();  // ::g is called
    +	  }
    +	};
    +

    You must make the names dependent, e.g. by prefixing them + with this->. Here is the corrected definition + of C<T>::h,

    +
    +	template <typename T> void C<T>::h ()
    +	{
    +	  this->m = 0;
    +	  this->f ();
    +	  this->n = 0
    +	  this->g ();
    +	}
    +

    As an alternative solution (unfortunately not backwards + compatible with GCC 3.3), you may use using + declarations instead of this->:

    +
    +	template <typename T> struct C : B<T> {
    +	  using B<T>::m;
    +	  using B<T>::f;
    +	  using B<T>::n;
    +	  using B<T>::g;
    +	  void h ()
    +	  {
    +	    m = 0;
    +	    f ();
    +	    n = 0;
    +	    g ();
    +	  }
    +	};
  • + +
  • In templates, all non-dependent names are now looked up and bound + at definition time (while parsing the code), instead of later when + the template is instantiated. For instance: + +
    +	void foo(int);
    +
    +	template <int> struct A {
    +	  static void bar(void){
    +	    foo('a');
    +	  }
    +	};
    +
    +	void foo(char);
    +
    +	int main()
    +	{
    +	  A<0>::bar();    // Calls foo(int), used to call foo(char).
    +	}
    +	
  • + +
  • In an explicit instantiation of a class template, you must use + class or struct before the template-id: + +
    +	template <int N>
    +	class A {};
    +	
    +	template A<0>;         // error, not accepted anymore
    +	template class A<0>;   // OK
  • + +
  • The "named return value" and "implicit typename" + extensions have been removed.
  • + +
  • Default arguments in function types have been deprecated and + will be removed.
  • + +
  • ARM-style name-injection of friend declarations has been + deprecated and will be removed. For example: + + struct S { + friend void f(); + }; + + void g() { f(); } + + will not be accepted by future versions of G++; instead a + declaration of "f" will need to be present outside of the + scope of "S".
  • + +
  • Covariant returns are implemented for all but varadic + functions that require an adjustment.
  • + +
  • When -pedantic is used, G++ now issues errors about spurious + semicolons. For example, +
    +        namespace N {}; // Invalid semicolon.
    +        void f() {}; // Invalid semicolon.
  • + +
  • G++ no longer accepts attributes for a declarator after the + initializer associated with that declarator. For example, +
    +        X x(1) __attribute__((...));
    + is no longer accepted. Instead, use: +
    +        X x __attribute__((...)) (1);
  • + +
  • Inside the scope of a template class, the name of the class + itself can be treated as either a class or a template. So + GCC used to accept the class name as argument of type template, + and template template parameter. However this is not C++ standard + compliant. Now the name is not treated as a valid template template + argument unless you qualify the name by its scope. For example, + the code below no longer compiles. +
    +        template <template <class> class TT> class X {};
    +        template <class T> class Y {
    +          X<Y> x; // Invalid, Y is always a type template parameter.
    +        };
    +

    The valid code for the above example is

    +
    +          X< ::Y> x; // Valid.
    +

    (Notice the space between < and : to + prevent GCC to interpret this as a digraph for + [.)

  • + +
  • Friend declarations that refer to template specializations are + rejected if the template has not already been declared. For example, +
    +	template <typename T>
    +	class C {
    +	  friend void f<> (C&);
    +	};
    +

    is rejected. You must first declare f as a + template,

    +
    +	template <typename T>
    +	void f(T);
  • + +
  • In case of friend declarations, every name used in the friend + declaration must be accessible at the point of that declaration. + Previous versions of G++ used to be less strict about this and + allowed friend declarations for private class members, + for example. See the ISO C++ Standard Committee's defect + report #209 for details.
  • + +
  • Declaration of member functions of class templates as friends are + supported. For example, +
    +	template <typename T> struct A {
    +	  void f();
    +	};
    +	class C {
    +	  template <typename T> friend void A<T>::f();
    +	};
  • + +
  • You must use template <> to introduce template + specializations, as required by the standard. For example, +
    +	template <typename T>
    +	struct S;
    +
    +	struct S<int> { };
    +

    is rejected. You must write,

    +
    +	template <> struct S<int> {};
  • + +
  • G++ used to accept code like this, +
    +	struct S {
    +	  int h();
    +	  void f(int i = g());
    +	  int g(int i = h());
    +	};
    +

    This behavior is not mandated by the standard. Now G++ issues + an error about this code. To avoid the error, you must move + the declaration of g before the declaration of + f. The default arguments for g must + be visible at the point where it is called.

  • + +
  • The C++ ABI Section 3.3.3 specifications for the array + construction routines __cxa_vec_new2 and + __cxa_vec_new3 were changed to return + NULL when the allocator argument returns + NULL. These changes are incorporated into the + libstdc++ runtime library.
  • + +
  • Using a name introduced by a typedef in a friend declaration or in an + explicit instantiation is now rejected, as specified by the ISO C++ + standard. +
    +	class A;
    +	typedef A B;
    +	class C { 
    +	  friend class B;      // error, no typedef name here
    +	  friend B;            // error, friend always needs class/struct/enum
    +	  friend class A;      // OK
    +	};
    +	
    +	template <int> class Q {};
    +	typedef Q<0> R;
    +	template class R;      // error, no typedef name here
    +	template class Q<0>;   // OK
  • + +
  • When allocating an array with a new expression, GCC used to allow + parentheses around the type name. This is actually ill-formed and it is + now rejected: +
    +	int* a = new (int)[10];    // error, not accepted anymore
    +	int* a = new int[10];      // OK
  • + +
  • When binding an rvalue of class type to a reference, the copy + constructor of the class must be accessible. For instance, consider + the following code: +
    +	class A 
    +	{
    +	public:
    +	  A();
    +	  
    +	private:
    +	  A(const A&);   // private copy ctor
    +	};
    +	
    +	A makeA(void);
    +	void foo(const A&);
    +	
    +	void bar(void)
    +	{
    +	  foo(A());       // error, copy ctor is not accessible
    +	  foo(makeA());   // error, copy ctor is not accessible
    +	  
    +	  A a1;
    +	  foo(a1);        // OK, a1 is a lvalue
    +	}
    + +

    This might be surprising at first sight, especially since most + popular compilers do not correctly implement this rule + (further details).

  • + +
  • When forming a pointer to member or a pointer to member function, + access checks for class visibility (public, protected, private) + are now performed using the qualifying scope of the name itself. + This is better explained with an example: + +
    +	class A
    +	{
    +	public:
    +	  void pub_func();
    +	protected:
    +	  void prot_func();
    +	private:
    +	  void priv_func();
    +	};
    +
    +	class B : public A
    +	{
    +	public:
    +	  void foo()
    +	  {
    +	    &A::pub_func;   // OK, pub_func is accessible through A
    +	    &A::prot_func;  // error, cannot access prot_func through A
    +	    &A::priv_func;  // error, cannot access priv_func through A
    +
    +	    &B::pub_func;   // OK, pub_func is accessible through B
    +	    &B::prot_func;  // OK, can access prot_func through B (within B)
    +	    &B::priv_func;  // error, cannot access priv_func through B
    +	  }
    +	};
  • +
+ +

Runtime Library (libstdc++)

+ +
    +
  • Optimization work: +
      +
    • Streamlined streambuf, filebuf, separate + synched with C Standard I/O streambuf.
    • +
    • All formatted I/O now uses cached locale information.
    • +
    • STL optimizations (memory/speed for list, red-black trees as used + by sets and maps).
    • +
    • More use of GCC builtins.
    • +
    • String optimizations (avoid contention on increment/decrement-and-test + of the reference count in the empty-string object, constructor from + input_iterators speedup).
    • +
  • +
  • Static linkage size reductions.
  • +
  • Large File Support (files larger than 2 GB on 32-bit systems).
  • +
  • Wide character and variable encoding filebuf work + (UTF-8, Unicode).
  • +
  • Generic character traits.
  • +
  • Also support wchar_t specializations on Mac OS 10.3.x, + FreeBSD 5.x, Solaris 2.7 and above, AIX 5.x, Irix 6.5.
  • +
  • The allocator class is now standard-conformant, and two additional + extension allocators have been added, mt_alloc and bitmap_allocator.
  • +
  • PCH support: -include bits/stdc++.h (2x compile speedup).
  • +
  • Rewrote __cxa_demangle with support for C++ style + allocators.
  • +
  • New debug modes for STL containers and iterators.
  • +
  • Testsuite rewrite: five times as many tests, plus increasingly + sophisticated tests, including I/O, MT, multi-locale, wide and + narrow characters.
  • +
  • Use current versions of GNU "autotools" for build/configuration.
  • +
+ +

Objective-C

+ +
    +
  • The Objective-C front end has been updated to include the numerous + bug fixes and enhancements previously available only in Apple's + version of GCC. These include: +
      +
    • Structured exception (@try... @catch... + @finally, @throw) and synchronization + (@synchronized) support. These are accessible via + the -fobjc-exceptions switch; as of this writing, + they may only be used in conjunction with -fnext-runtime + on Mac OS X 10.3 and later. See Options Controlling Objective-C Dialect for more + information.
    • +
    • An overhaul of @encode logic. The C99 _Bool + and C++ bool type may now be encoded as + 'B'. In addition, the back-end/codegen dependencies + have been removed.
    • +
    • An overhaul of message dispatch construction, ensuring that the + various receiver types (and casts thereof) are handled properly, + and that correct diagnostics are issued.
    • +
    • Support for "Zero-Link" (-fzero-link) and + "Fix-and-Continue" (-freplace-objc-classes) debugging + modes, currently available on Mac OS X 10.3 and later. See Options Controlling Objective-C Dialect for more + information.
    • +
    • Access to optimized runtime entry points (-fno-nil-receivers + ) on the assumption that message receivers are never + nil. This is currently available on Mac OS X 10.3 and + later. See Options Controlling Objective-C Dialect for more + information.
    • +
  • +
+ +

Java

+ +
    +
  • Compiling a .jar file will now cause non-.class entries to be + automatically compiled as resources.
  • +
  • libgcj has been ported to Darwin.
  • +
  • Jeff Sturm has adapted Jan Hubicka's call graph optimization + code to gcj.
  • +
  • libgcj has a new gcjlib URL type; this + lets URLClassLoader load code from shared + libraries.
  • +
  • libgcj has been much more completely merged with GNU Classpath.
  • +
  • Class loading is now much more correct; in particular the + caller's class loader is now used when that is required.
  • +
  • Eclipse 2.x will run + out of the box using gij.
  • +
  • Parts of java.nio have been implemented. + Direct and indirect buffers work, as do fundamental file and + socket operations.
  • +
  • java.awt has been improved, though it is still + not ready for general use.
  • +
  • The HTTP protocol handler now uses HTTP/1.1 and can handle + the POST method.
  • +
  • The MinGW port has matured. Enhancements include socket + timeout support, thread interruption, improved + Runtime.exec() handling and support for accented + characters in filenames.
  • +
+ +

Fortran

+ + + +

New Targets and Target Specific Improvements

+ +

Alpha

+
    +
  • Several + built-in + functions have been added such as __builtin_alpha_zap to + allow utilizing the more obscure instructions of the CPU.
  • + +
  • Parameter passing of complex arguments has changed to match the + + ABI. This change is incompatible with previous GCC versions, but + does fix compatibility with the Tru64 compiler and several corner cases + where GCC was incompatible with itself.
  • +
+ +

ARM

+
    +
  • Nicolas Pitre has contributed his hand-coded floating-point support + code for ARM. It is both significantly smaller and faster than the + existing C-based implementation, even when building applications for + Thumb. The arm-elf configuration has been converted to use + the new code.
  • + +
  • Support for the Intel's iWMMXt architecture, a second + generation XScale processor, has been added. + Enabled at run time with the -mcpu=iwmmxt command + line switch.
  • + +
  • A new ARM target has been added: arm-wince-pe. This is + similar to the arm-pe target, but it defaults to using the + APCS32 ABI.
  • + +
  • The existing ARM pipeline description has been converted to + the use the DFA + processor pipeline model. There is not much change in code + performance, but the description is now easier + to understand.
  • + +
  • Support for the Cirrus EP9312 Maverick floating point + co-processor added. Enabled at run time with the + -mcpu=ep9312 command line switch. Note however that + the multilibs to support this chip are currently disabled in + gcc/config/arm/t-arm-elf, so if you want to enable their + production you will have to uncomment the entries in that + file.
  • +
+ +

H8/300

+
    +
  • Support for long long has been added.
  • + +
  • Support for saveall attribute has been added.
  • + +
  • Pavel Pisa contributed hand-written 32-bit-by-32-bit division + code for H8/300H and H8S, which is much faster than the previous + implementation.
  • + +
  • A lot of small performance improvements.
  • +
+ +

IA-32/AMD64 (x86-64)

+
    +
  • Tuning for K8 (AMD Opteron/Athlon64) core is available via + -march=k8 and -mcpu=k8.
  • +
  • Scalar SSE code generation carefully avoids reformatting penalties, + hidden dependencies and minimizes the number of uops generated on + both Intel and AMD CPUs.
  • +
  • Vector MMX and SSE operands are now passed in registers to improve + performance and match the argument passing convention used by the Intel + C++ Compiler. As a result it is not possible to call functions + accepting vector arguments compiled by older GCC version.
  • +
  • Conditional jump elimination is now more aggressive on modern CPUs.
  • +
  • The Athlon ports has been converted to use the DFA + processor pipeline description.
  • +
  • Optimization of indirect tail calls is now possible in a similar + fashion as direct sibcall optimization.
  • +
  • Further small performance improvements.
  • +
  • -m128bit-long-double is now less buggy.
  • +
  • __float128 support in 64-bit compilation.
  • +
  • Support for data structures exceeding 2GB in 64-bit mode.
  • +
  • -mcpu has been renamed to -mtune.
  • +
+ +

IA-64

+
    +
  • Tuning code for the Itanium 2 processor has been added. The + generation of code tuned for Itanium 2 (option + -mtune=itanium2) is enabled by default now. To + generate code tuned for Itanium 1 the option + -mtune=itanium1 should be used.
  • + +
  • DFA + processor pipeline descriptions for the IA-64 processors + have been added. This resulted in about 3% improvement on the + SPECInt2000 benchmark for Itanium 2.
  • + +
  • Instruction bundling for the IA-64 processors has been + rewritten using the DFA pipeline hazard recognizer. It + resulted in about 60% compiler speedup on the SPECInt2000 C + programs.
  • +
+ +

M32R

+
    +
  • Support for the M32R/2 processor has been added by Renesas.
  • +
  • Support for an M32R Linux target and PIC code generation has + been added by Renesas.
  • +
+ +

M68000

+
    +
  • Bernardo Innocenti (Develer S.r.l.) has contributed + the m68k-uclinux target, based on former work done + by Paul Dale (SnapGear Inc.). Code generation for the + ColdFire processors family has been enhanced and extended + to support the MCF 53xx and MCF 54xx cores, integrating + former work done by Peter Barada (Motorola).
  • +
+ +

MIPS

+

Processor-specific changes

+
    +
  • Support for the RM7000 and RM9000 processors has been added. + It can be selected using the -march compiler option + and should work with any MIPS I (mips-*) or MIPS III + (mips64-*) configuration.
  • +
  • Support for revision 2 of the MIPS32 ISA has been added. + It can be selected with the command-line option + -march=mips32r2.
  • +
  • There is a new option, -mfix-sb1, to work around + certain SB-1 errata.
  • +
+

Configuration

+
    +
  • It is possible to customize GCC using the following configure-time + options: +
      +
    • --with-arch, which specifies the default + value of the -march option.
    • +
    • --with-tune, which specifies the default + value of the -mtune option.
    • +
    • --with-abi, which specifies the default ABI.
    • +
    • --with-float=soft, which tells GCC to + use software floating point by default.
    • +
    • --with-float=hard, which tells GCC to + use hardware floating point by default.
    • +
  • +
  • A 64-bit GNU/Linux port has been added. The associated + configurations are mips64-linux-gnu and + mips64el-linux-gnu.
  • +
  • The 32-bit GNU/Linux port now supports Java.
  • +
  • The IRIX 6 configuration now supports the o32 ABI and will + build o32 multilibs by default. This support is compatible with + both binutils and the SGI tools, but note that several features, + including debugging information and DWARF2 exception handling, + are only available when using the GNU assembler. Use of the + GNU assembler and linker (version 2.15 or above) is strongly + recommended.
  • +
  • The IRIX 6 configuration now supports 128-bit long doubles.
  • +
  • There are two new RTEMS-specific configurations, + mips-rtems and mipsel-rtems.
  • +
  • There are two new *-elf configurations, + mipsisa32r2-elf and mipsisa32r2el-elf.
  • +
+

General

+
    +
  • Several ABI bugs have been fixed. + Unfortunately, these changes will break binary compatibility + with earlier releases.
  • +
  • GCC can now use explicit relocation operators when generating + -mabicalls code. This behavior is controlled by + -mexplicit-relocs and can have several performance + benefits. For example: +
      +
    • It allows for more optimization of GOT accesses, including + better scheduling and redundancy elimination.
    • +
    • It allows sibling calls to be implemented as jumps.
    • +
    • n32 and n64 leaf functions can use a call-clobbered + global pointer instead of $28.
    • +
    • The code to set up $gp can be removed from + functions that don't need it.
    • +
  • +
  • A new option, -mxgot, allows the GOT to be bigger + than 64k. This option is equivalent to the assembler's + -xgot option and should be used instead of + -Wa,-xgot.
  • +
  • Frame pointer elimination is now supported when generating 64-bit + MIPS16 code.
  • +
  • Inline block moves have been optimized to take more account of + alignment information.
  • +
  • Many internal changes have been made to the MIPS port, mostly + aimed at reducing the reliance on assembler macros.
  • +
+ +

PowerPC

+
    +
  • GCC 3.4 releases have a number of fixes for PowerPC and PowerPC64 + ABI incompatibilities + regarding the way parameters are passed during functions calls. + These changes may result in incompatibility between code compiled + with GCC 3.3 and GCC 3.4.
  • +
+ +

PowerPC Darwin

+
    +
  • Support for shared/dylib gcc libraries has been added. It is + enabled by default on powerpc-apple-darwin7.0.0 + and up.
  • + +
  • Libgcj is enabled by default. On systems older than + powerpc-apple-darwin7.0.0 you need to install dlcompat. +
  • + +
  • 128-bit IBM extended precision format support added for + long double.
  • +
+ +

PowerPC64 GNU/Linux

+
    +
  • By default, PowerPC64 GNU/Linux now uses natural alignment of + structure elements. The old four byte alignment for + double, with special rules for a struct + starting with a double, can be chosen with + -malign-power. This change may result in + incompatibility between code compiled with GCC 3.3 and GCC 3.4.
  • + +
  • -mabi=altivec is now the default rather than + -mabi=no-altivec.
  • + +
  • 128-bit IBM extended precision format support added for + long double.
  • +
+ +

S/390 and zSeries

+
    +
  • New command-line options allow to specify the intended execution + environment for generated code: +
      +
    • -mesa/-mzarch allows to specify + whether to generate code running in ESA/390 mode or in + z/Architecture mode (this is applicable to 31-bit code + only).
    • +
    • -march allows to specify a minimum processor + architecture level (g5, g6, + z900, or z990).
    • +
    • -mtune allows to specify which processor to tune + for.
    • +
  • +
  • It is possible to customize GCC using the following configure-time + options: +
      +
    • --with-mode, which specifies whether to + default to assuming ESA/390 or z/Architecture mode.
    • +
    • --with-arch, which specifies the default + value of the -march option.
    • +
    • --with-tune, which specifies the default + value of the -mtune option.
    • +
  • +
  • Support for the z990 processor has been added, and can be selected + using -march=z990 or -mtune=z990. This + includes instruction scheduling tuned for the superscalar instruction + pipeline of the z990 processor as well as support for all new + instructions provided by the long-displacement facility.
  • +
  • Support to generate 31-bit code optimized for zSeries processors + (running in ESA/390 or in z/Architecture mode) has been added. + This can be selected using -march=z900 and + -mzarch respectively.
  • +
  • Instruction scheduling for the z900 and z990 + processors now uses the DFA pipeline hazard recognizer.
  • +
  • GCC no longer generates code to maintain a stack backchain, + previously used to generate stack backtraces for debugging + purposes. As replacement that does not incur runtime overhead, + DWARF-2 call frame information is provided by GCC; + this is supported by GDB 6.1. The old behavior can + be restored using the -mbackchain option.
  • +
  • The stack frame size of functions may now exceed 2 GB in 64-bit + code.
  • +
  • A port for the 64-bit IBM TPF operating system has been added; + the configuration is s390x-ibm-tpf. This + configuration is supported as cross-compilation target only.
  • +
  • Various changes to improve the generated code have been implemented, + including: +
      +
    • GCC now uses the MULTIPLY AND ADD and + MULTIPLY AND SUBTRACT instructions to + significantly speed up many floating-point applications.
    • +
    • GCC now uses the ADD LOGICAL WITH CARRY and + SUBTRACT LOGICAL WITH BORROW instructions to + speed up long long arithmetic.
    • +
    • GCC now uses the SEARCH STRING instruction to + implement strlen().
    • +
    • In many cases, function call overhead for 31-bit code has + been reduced by placing the literal pool after the function + code instead of after the function prolog.
    • +
    • Register 14 is no longer reserved in 64-bit code.
    • +
    • Handling of global register variables has been improved.
    • +
  • +
+ +

SPARC

+
    +
  • The option -mflat is deprecated.
  • + +
  • Support for large (> 2GB) frames has been added to the + 64-bit port.
  • + +
  • Several ABI bugs have been fixed. + Unfortunately, these changes will break binary compatibility with + earlier releases.
  • + +
  • The default debugging format has been switched from STABS to + DWARF-2 for 32-bit code on Solaris 7 and later. DWARF-2 is already + the default debugging format for 64-bit code on Solaris.
  • +
+ +

SuperH

+
    +
  • Support for the SH2E processor has been added. + Enabled at run time with the -m2e command line + switch, or at configure time by specifying sh2e as the machine + part of the target triple.
  • +
+ +

V850

+
    +
  • Support for the Mitsubishi V850E1 processor has been added. + This is a variant of the V850E processor with some additional + debugging instructions.
  • +
+ +

Xtensa

+
    +
  • Several ABI bugs have been fixed. Unfortunately, these changes + break binary compatibility with earlier releases. +
      +
    • For big-endian processors, the padding of aggregate return values + larger than a word has changed. If the size of an aggregate return + value is not a multiple of 32 bits, previous versions of GCC inserted + padding in the most-significant bytes of the first return value + register. Aggregates larger than a word are now padded in the + least-significant bytes of the last return value register used. + Aggregates smaller than a word are still padded in the most-significant + bytes. The return value padding has not changed for little-endian + processors.
    • +
    • Function arguments with 16-byte alignment are now properly + aligned.
    • +
    • The implementation of the va_list type has changed. + A va_list value created by va_start from a + previous release cannot be used with va_arg from this + release, or vice versa.
    • +
  • +
  • More processor configuration options for Xtensa processors are + supported: +
      +
    • the ABS instruction is now optional;
    • +
    • the ADDX* and SUBX* instructions are + now optional;
    • +
    • an experimental CONST16 instruction can be used to + synthesize constants instead of loading them from constant pools.
    • +
    + These and other Xtensa processor configuration options can no longer + be enabled or disabled by command-line options; the processor + configuration must be specified by the xtensa-config.h + header file when building GCC. Additionally, the + -mno-serialize-volatile option is no longer supported.
  • +
+ +

Obsolete Systems

+ +

Support for a number of older systems has been declared obsolete in + GCC 3.4. Unless there is activity to revive them, the next release of + GCC will have their sources permanently removed.

+ +

All configurations of the following processor architectures have + been declared obsolete:

+ +
    +
  • Mitsubishi D30V, d30v-*
  • +
  • AT&T DSP1600 and DSP1610, dsp16xx-*
  • +
  • Intel 80960, i960
  • +
+ +

Also, some individual systems have been obsoleted:

+ +
    +
  • ARM Family +
      +
    • Support for generating code for operation in APCS/26 mode + (-mapcs-26).
    • +
  • +
  • IBM ESA/390 +
      +
    • "Bigfoot" port, i370-*. (The other port, + s390-*, is actively maintained and + supported.)
    • +
  • +
  • Intel 386 family +
      +
    • MOSS, i?86-moss-msdos and + i?86-*-moss*
    • +
    • NCR 3000 running System V r.4, i?86-ncr-sysv4*
    • +
    • FreeBSD with a.out object format, i?86-*-freebsd*aout* + and i?86-*-freebsd2*
    • +
    • Linux with a.out object format, i?86-linux*aout*
    • +
    • Linux with libc5, a.k.a. glibc1, i?86-linux*libc1*
    • +
    • Interix versions before Interix 3, i?86-*-interix
    • +
    • Mach microkernel, i?86-mach*
    • +
    • SCO UnixWare with UDK, i?86-*-udk*
    • +
    • Generic System V releases 1, 2, and 3, + i?86-*-sysv[123]*
    • +
    • VSTa microkernel, i386-*-vsta
    • +
  • +
  • Motorola M68000 family +
      +
    • HPUX, m68k-hp-hpux* and + m68000-hp-hpux*
    • +
    • NetBSD with a.out object format (before NetBSD 1.4), + m68k-*-*-netbsd* except + m68k-*-*-netbsdelf*
    • +
    • Generic System V r.4, m68k-*-sysv4*
    • +
  • +
  • VAX +
      +
    • Generic VAX, vax-*-* (This is generic VAX only; + we have not obsoleted any VAX triples for specific operating + systems.)
    • +
  • +
+ + +

Documentation improvements

+ + +

Other significant improvements

+ +
    +
  • The build system has undergone several significant cleanups. + Subdirectories will only be configured if they are being built, + and all subdirectory configures are run from the make + command. The top level has been autoconfiscated.
  • +
  • Building GCC no longer writes to its source directory. This + should help those wishing to share a read-only source directory + over NFS or build from a CD. The exceptions to this feature are + if you configure with either --enable-maintainer-mode + or --enable-generated-files-in-srcdir.
  • +
  • The -W warning option has been renamed to + -Wextra, which is more easily understood. The older + spelling will be retained for backwards compatibility.
  • +
  • Substantial improvements in compile time have been made, particularly + for non-optimizing compilations.
  • +
+ +
+

GCC 3.4.0

+ +

Bug Fixes

+ +

+A vast number of bugs have been fixed in 3.4.0, too many to publish a +complete list here. +Follow +this link to query the Bugzilla database for the list of over 900 bugs +fixed in 3.4.0. This is the list of all bugs marked as resolved and fixed +in 3.4.0 that are not flagged as 3.4 regressions.

+ +
+

GCC 3.4.1

+ + +

Bug Fixes

+ +

This section lists the problem reports (PRs) from GCC's bug tracking +system that +are known to be fixed in the 3.4.1 release. This list might not be complete +(that is, it is possible that some PRs that have been fixed are not listed +here).

+ +

Bootstrap failures

+
    +
  • 10129 Ada bootstrap fails on PPC-Darwin - invalid assembler emitted - PIC related
  • +
  • 14576 [ARM] ICE in libiberty when building gcc-3.4 for arm-elf
  • +
  • 14760 A bug in configure.in prevents using both --program-suffix and --program-prefix
  • +
  • 14671 [hppa64] bootstrap fails: ICE in save_call_clobbered_regs, in caller_save.c
  • +
  • 15093 [alpha][Java] make bootstrap fails to configure libffi on Alpha
  • +
  • 15178 Solaris 9/x86 fails linking after stage 3
  • +
+

Multi-platform internal compiler errors (ICEs)

+
    +
  • 12753 (preprocessor) Memory corruption in preprocessor on bad input
  • +
  • 13985 ICE in gcc.c-torture/compile/930621-1.c
  • +
  • 14810 (c++) tree check failures with invalid code involving templates
  • +
  • 14883 (c++) ICE on invalid code, in cp_parser_lookup_name, in cp/parser.c
  • +
  • 15044 (c++) ICE on syntax error, template header
  • +
  • 15057 (c++) Compiling of conditional value throw constructs cause a segmentation violation
  • +
  • 15064 (c++) typeid of template parameter gives ICE
  • +
  • 15142 (c++) ICE when passing a string where a char* is expected in a throw statement
  • +
  • 15159 ICE in rtl_verify_flow_info_1
  • +
  • 15165 (c++) ICE in instantiate_template
  • +
  • 15193 Unary minus using pointer to V4SF vector causes -fforce-mem to exhaust all memory
  • +
  • 15209 (c++) Runs out of memory with packed structs
  • +
  • 15227 (c++) Trouble with invalid function definition
  • +
  • 15285 (c++) instantiate_type ICE when forming pointer to template function
  • +
  • 15299 (c++) ICE in resolve_overloaded_unification
  • +
  • 15329 (c++) ICE on constructor of member template
  • +
  • 15550 ICE in extract_insn, in recog.c
  • +
  • 15554 (c++) ICE in tsubst_copy, in cp/pt.c
  • +
  • 15640 (c++) ICE on invalid code in arg_assoc, in cp/name-lookup.c
  • +
  • 15666 [unit-at-a-time] Gcc abort on valid code
  • +
  • 15696 (c++) ICE with bad pointer-to-member code
  • +
  • 15701 (c++) ICE with friends and template template parameter
  • +
  • 15761 ICE in do_SUBST, in combine.c
  • +
  • 15829 (c++) ICE on Botan-1.3.13 due to -funroll-loops
  • +
+

Ada

+
    +
  • 14538 All RTEMS targets broken for gnat
  • +
+

C front end

+
    +
  • 12391 missing warning about assigning to an incomplete type
  • +
  • 14649 atan(1.0) should not be a constant expression
  • +
  • 15004 [unit-at-a-time] no warning for unused paramater in static function
  • +
  • 15749 --pedantic-errors behaves differently from --pedantic with C-compiler on GNU/Linux
  • +
+

C++ compiler and library

+
    +
  • 10646 non-const reference is incorrectly matched in a "const T" partial specialization
  • +
  • 12077 wcin.rdbuf()->in_avail() return value too high
  • +
  • 13598 enc_filebuf doesn't work
  • +
  • 14211 const_cast returns lvalue but should be rvalue
  • +
  • 14220 num_put::do_put() undesired float/double behavior
  • +
  • 14245 problem with user-defined allocators in std::basic_string
  • +
  • 14340 libstdc++ Debug mode: failure to convert iterator to const_iterator
  • +
  • 14600 __gnu_cxx::stdio_sync_filebuf should expose internal FILE*
  • +
  • 14668 no warning anymore for reevaluation of declaration
  • +
  • 14775 LFS (large file support) tests missing
  • +
  • 14821 Duplicate namespace alias declaration should not conflict
  • +
  • 14930 Friend declaration ignored
  • +
  • 14932 cannot use offsetof to get offsets of array elements in g++ 3.4.0
  • +
  • 14950 [non unit-at-a-time] always_inline does not mix with templates and -O0
  • +
  • 14962 g++ ignores #pragma redefine_extname
  • +
  • 14975 Segfault on low-level write error during imbue
  • +
  • 15002 Linewise stream input is unusably slow (std::string slow)
  • +
  • 15025 compiler accepts redeclaration of template as non-template
  • +
  • 15046 [arm] Math functions misdetected by cross configuration
  • +
  • 15069 a bit test on a variable of enum type is miscompiled
  • +
  • 15074 g++ -lsupc++ still links against libstdc++
  • +
  • 15083 spurious "statement has no effect" warning
  • +
  • 15096 parse error with templates and pointer to const member
  • +
  • 15287 combination of operator[] and operator .* fails in templates
  • +
  • 15317 __attribute__ unused in first parameter of constructor gives error
  • +
  • 15337 sizeof on incomplete type diagnostic
  • +
  • 15361 bitset<>::_Find_next fails
  • +
  • 15412 _GLIBCXX_ symbols symbols defined and used in different namespaces
  • +
  • 15427 valid code results in incomplete type error
  • +
  • 15471 Incorrect member pointer offsets in anonymous structs/unions
  • +
  • 15503 nested template problem
  • +
  • 15507 compiler hangs while laying out union
  • +
  • 15542 operator & and template definitions
  • +
  • 15565 SLES9: leading + sign for unsigned int with showpos
  • +
  • 15625 friend defined inside a template fails to find static function
  • +
  • 15629 Function templates, overloads, and friend name injection
  • +
  • 15742 'noreturn' attribute ignored in method of template functions.
  • +
  • 15775 Allocator::pointer consistently ignored
  • +
  • 15821 Duplicate namespace alias within namespace rejected
  • +
  • 15862 'enum yn' fails (confict with undeclared builtin)
  • +
  • 15875 rejects pointer to member in template
  • +
  • 15877 valid code using templates and anonymous enums is rejected
  • +
  • 15947 Puzzling error message for wrong destructor declaration in template class
  • +
  • 16020 cannot copy __gnu_debug::bitset
  • +
  • 16154 input iterator concept too restrictive
  • +
  • 16174 deducing top-level consts
  • +
+

Java

+
    +
  • 14315 Java compiler is not parallel make safe
  • +
+

Fortran

+
    +
  • 15151 [g77] incorrect logical i/o in 64-bit mode
  • +
+

Objective-C

+
    +
  • 7993 private variables cannot be shadowed in subclasses
  • +
+

Optimization bugs

+
    +
  • 15228 useless copies of floating point operands
  • +
  • 15345 [non-unit-at-a-time] unreferenced nested inline functions not optimized away
  • +
  • 15945 Incorrect floating point optimization
  • +
  • 15526 ftrapv aborts on 0 * (-1)
  • +
  • 14690 Miscompiled POOMA tests
  • +
  • 15112 GCC generates code to write to unchanging memory
  • +
+

Preprocessor

+
    +
  • 15067 Minor glitch in the source of cpp
  • +
+

Main driver program bugs

+
    +
  • 1963 collect2 interprets -oldstyle_liblookup as -o ldstyle_liblookup
  • +
+

x86-specific (Intel/AMD)

+
    +
  • 15717 Error: can't resolve `L0' {*ABS* section} - `xx' {*UND* section}
  • +
+

HPPA-specific

+
    +
  • 14782 GCC produces an unaligned data access at -O2
  • +
  • 14828 FAIL: gcc.c-torture/execute/20030408-1.c execution, -O2
  • +
  • 15202 ICE in reload_cse_simplify_operands, in postreload.c
  • +
+

IA64-specific

+
    +
  • 14610 __float80 constants incorrectly emitted
  • +
  • 14813 init_array sections are initialized in the wrong order
  • +
  • 14857 GCC segfault on duplicated asm statement
  • +
  • 15598 Gcc 3.4 ICE on valid code
  • +
  • 15653 Gcc 3.4 ICE on valid code
  • +
+

MIPS-specific

+
    +
  • 15189 wrong filling of delay slot with -march=mips1 -G0 -mno-split-addresses -mno-explicit-relocs
  • +
  • 15331 Assembler error building gnatlib on IRIX 6.5 with GNU as 2.14.91
  • +
  • 16144 Bogus reference to __divdf3 when -O1
  • +
  • 16176 Miscompilation of unaligned data in MIPS backend
  • +
+

PowerPC-specific

+
    +
  • 11591 ICE in gcc.dg/altivec-5.c
  • +
  • 12028 powerpc-eabispe produces bad sCOND operation
  • +
  • 14478 rs6000 geu/ltu patterns generate incorrect code
  • +
  • 14567 long double and va_arg complex args
  • +
  • 14715 Altivec stack layout may overlap gpr save with stack temps
  • +
  • 14902 (libstdc++) Stream checking functions fail when -pthread option is used.
  • +
  • 14924 Compiler ICE on valid code
  • +
  • 14960 -maltivec affects vector return with -mabi=no-altivec
  • +
  • 15106 vector varargs failure passing from altivec to non-altivec code for -m32
  • +
  • 16026 ICE in function.c:4804, assign_parms, when -mpowerpc64 & half-word operation
  • +
  • 15191 -maltivec -mabi=no-altivec results in mis-aligned lvx and stvx
  • +
  • 15662 Segmentation fault when an exception is thrown - even if try and catch are specified
  • +
+

s390-specific

+
    +
  • 15054 Bad code due to overlapping stack temporaries
  • +
+

SPARC-specific

+
    +
  • 15783 ICE with union assignment in 64-bit mode
  • +
  • 15626 GCC 3.4 emits "ld: warning: relocation error: R_SPARC_UA32"
  • +
+

x86-64-specific

+
    +
  • 14326 boehm-gc hardcodes to 3DNow! prefetch for x86_64
  • +
  • 14723 Backported -march=nocona from mainline
  • +
  • 15290 __float128 failed to pass to function properly
  • +
+

Cygwin/Mingw32-specific

+
    +
  • 15250 Option -mms-bitfields support on GCC 3.4 is not conformant to MS layout
  • +
  • 15551 -mtune=pentium4 -O2 with sjlj EH breaks stack probe worker on windows32 targets
  • +
+

Bugs specific to embedded processors

+
    +
  • 8309 [m68k] -m5200 produces erroneous SImode set of short varaible on stack
  • +
  • 13250 [SH] Gcc code for rotation clobbers the register, but gcc continues to use the register as if it was not clobbered
  • +
  • 13803 [coldfire] movqi operand constraints too restrictivefor TARGET_COLDFIRE
  • +
  • 14093 [SH] ICE for code when using -mhitachi option in SH
  • +
  • 14457 [m6811hc] ICE with simple c++ source
  • +
  • 14542 [m6811hc] ICE on simple source
  • +
  • 15100 [SH] cc1plus got hang-up on libstdc++-v3/testsuite/abi_check.cc
  • +
  • 15296 [CRIS] Delayed branch scheduling causing invalid code on cris-*
  • +
  • 15396 [SH] ICE with -O2 -fPIC
  • +
  • 15782 [coldfire] m68k_output_mi_thunk emits wrong code for ColdFire
  • +
+

Testsuite problems (compiler not affected)

+
    +
  • 11610 libstdc++ testcases 27_io/* don't work properly remotely
  • +
  • 15488 (libstdc++) possibly insufficient file permissions for executing test suite
  • +
  • 15489 (libstdc++) testsuite_files determined incorrectly
  • +
+

Documentation bugs

+
    +
  • 13928 (libstdc++) no whatis info in some man pages generated by doxygen
  • +
  • 14150 Ada documentation out of date
  • +
  • 14949 (c++) Need to document method visibility changes
  • +
  • 15123 libstdc++-doc: Allocators.3 manpage is empty
  • +
+ +
+

GCC 3.4.2

+ + +

Bug Fixes

+ +

This section lists the problem reports (PRs) from GCC's bug tracking +system that +are known to be fixed in the 3.4.2 release. This list might not be complete +(that is, it is possible that some PRs that have been fixed are not listed +here).

+ +

Bootstrap failures and issues

+
    +
  • 16469 [mips-sgi-irix5.3] bootstrap fails in libstdc++-v3/testsuite
  • +
  • 16344 [hppa-linux-gnu] libstdc++'s PCH built by profiledbootstrap does not work with the built compiler
  • +
  • 16842 [Solaris/x86] mkheaders can not find mkheaders.conf
  • +
+

Multi-platform internal compiler errors (ICEs)

+
    +
  • 12608 (c++) ICE: expected class 't', have 'x' (error_mark) in cp_parser_class_specifier, in cp/parser.c
  • +
  • 14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
  • +
  • 15461 (c++) ICE due to NRV and inlining
  • +
  • 15890 (c++) ICE in c_expand_expr, in c-common.c
  • +
  • 16180 ICE: segmentation fault in RTL optimization
  • +
  • 16224 (c++) ICE in write_unscoped_name (template/namespace)
  • +
  • 16408 ICE: in delete_insn, in cfgrtl.c
  • +
  • 16529 (c++) ICE for: namespace-alias shall not be declared as the name of any other entity
  • +
  • 16698 (c++) ICE with exceptions and declaration of __cxa_throw
  • +
  • 16706 (c++) ICE in finish_member_declaration, in cp/semantics.c
  • +
  • 16810 (c++) Legal C++ program with cast gives ICE in build_ptrmemfunc
  • +
  • 16851 (c++) ICE when throwing a comma expression
  • +
  • 16870 (c++) Boost.Spirit causes ICE in tsubst, in cp/pt.c
  • +
  • 16904 (c++) ICE in finish_class_member_access_expr, in cp/typeck.c
  • +
  • 16905 (c++) ICE (segfault) with exceptions
  • +
  • 16964 (c++) ICE in cp_parser_class_specifier due to redefinition
  • +
  • 17068 (c++) ICE: tree check: expected class 'd', have 'x' (identifier_node) in dependent_template_p, in cp/pt.c
  • +
+

Preprocessor bugs

+
    +
  • 16366 Preprocessor option -remap causes memory corruption
  • +
+

Optimization

+
    +
  • 15345 unreferenced nested inline functions not optimized away
  • +
  • 16590 Incorrect execution when compiling with -O2
  • +
  • 16693 Bitwise AND is lost when used within a cast to an enum of the same precision
  • +
  • 17078 Jump into if(0) substatement fails
  • +
+

Problems in generated debug information

+
    +
  • 13956 incorrect stabs for nested local variables
  • +
+

C front end bugs

+
    +
  • 16684 GCC should not warn about redundant redeclarations of built-ins
  • +
+

C++ compiler and library

+
    +
  • 12658 Thread safety problems in locale::global() and locale::locale()
  • +
  • 13092 g++ accepts invalid pointer-to-member conversion
  • +
  • 15320 Excessive memory consumption
  • +
  • 16246 Incorrect template argument deduction
  • +
  • 16273 Memory exhausted when using nested classes and virtual functions
  • +
  • 16401 ostringstream in gcc 3.4.x very slow for big data
  • +
  • 16411 undefined reference to __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char> >::file()
  • +
  • 16489 G++ incorrectly rejects use of a null constant integral expression as a null constant pointer
  • +
  • 16618 offsetof fails with constant member
  • +
  • 16637 syntax error reported for valid input code
  • +
  • 16717 __attribute__((constructor)) broken in C++
  • +
  • 16813 compiler error in DEBUG version of range insertion std::map::insert
  • +
  • 16853 pointer-to-member initialization from incompatible one accepted
  • +
  • 16889 ambiguity is not detected
  • +
  • 16959 Segmentation fault in ios_base::sync_with_stdio
  • +
+

Java compiler and library

+
    +
  • 7587 direct threaded interpreter not thread-safe
  • +
  • 16473 ServerSocket accept() leaks file descriptors
  • +
  • 16478 Hash synchronization deadlock with finalizers
  • +
+

Alpha-specific

+
    +
  • 10695 ICE in dwarf2out_frame_debug_expr, in dwarf2out.c
  • +
  • 16974 could not split insn (ice in final_scan_insn, in final.c)
  • +
+

x86-specific

+
    +
  • 16298 ICE in output_operand
  • +
  • 17113 ICE with SSE2 intrinsics
  • +
+

x86-64 specific

+
    +
  • 14697 libstdc++ couldn't find 32bit libgcc_s
  • +
+

MIPS-specific

+
    +
  • 15869 [mips64] No NOP after LW (with -mips1 -O0)
  • +
  • 16325 [mips64] value profiling clobbers gp on mips
  • +
  • 16357 [mipsisa64-elf] ICE copying 7 bytes between extern char[]s
  • +
  • 16380 [mips64] Use of uninitialised register after dbra conversion
  • +
  • 16407 [mips64] Unaligned access to local variables
  • +
  • 16643 [mips64] verify_local_live_at_start ICE after crossjumping & cfgcleanup
  • +
+

ARM-specific

+
    +
  • 15927 THUMB -O2: strength-reduced iteration variable ends up off by 1
  • +
  • 15948 THUMB: ICE with non-commutative cbranch
  • +
  • 17019 THUMB: bad switch statement in md code for addsi3_cbranch_scratch
  • +
+

IA64-specific

+
    +
  • 16130 ICE on valid code: in bundling, in config/ia64/ia64.c (-mtune=merced)
  • +
  • 16142 ICE on valid code: in bundling, in config/ia64/ia64.c (-mtune=itanium)
  • +
  • 16278 Gcc failed to build Linux kernel with -mtune=merced
  • +
  • 16414 ICE on valid code: typo in comparison of asm_noperands result
  • +
  • 16445 ICE on valid code: don't count ignored insns
  • +
  • 16490 ICE (segfault) while compiling with -fprofile-use
  • +
  • 16683 ia64 does not honor SUBTARGET_EXTRA_SPECS
  • +
+

PowerPC-specific

+
    +
  • 16195 (ppc64): Miscompilation of GCC 3.3.x by 3.4.x
  • +
  • 16239 ICE on ppc64 (mozilla 1.7 compile, -O1 -fno-exceptions issue)
  • +
+

SPARC-specific

+
    +
  • 16199 ICE while compiling apache 2.0.49
  • +
  • 16416 -m64 doesn't imply -mcpu=v9 anymore
  • +
  • 16430 ICE when returning non-C aggregates larger than 16 bytes
  • +
+

Bugs specific to embedded processors

+
    +
  • 16379 [m32r] can't output large model function call of memcpy
  • +
  • 17093 [m32r] ICE with -msdata=use -O0
  • +
  • 17119 [m32r] ICE at switch case 0x8000
  • +
+

DJGPP-specific

+
    +
  • 15928 libstdc++ in 3.4.x doesn't cross-compile for djgpp
  • +
+

Alpha Tru64-specific

+
    +
  • 16210 libstdc++ gratuitously omits "long long" I/O
  • +
+

Testsuite, documentation issues (compiler is not affected):

+
    +
  • 15488 (libstdc++) possibly insufficient file permissions for executing test suite
  • +
  • 16250 ada/doctools runs makeinfo even in release tarball
  • +
+ +
+

GCC 3.4.3

+ +

This is the list +of problem reports (PRs) from GCC's bug tracking system that are +known to be fixed in the 3.4.3 release. This list might not be +complete (that is, it is possible that some PRs that have been fixed +are not listed here).

+ +

Bootstrap failures

+
    +
  • 17369 [ia64] Bootstrap failure with binutils-2.15.90.0.1.1
  • +
  • 17850 [arm-elf] bootstrap failure - libstdc++ uses strtold when undeclared
  • +
+

Internal compiler errors (ICEs) affecting multiple platforms

+
    +
  • 13948 (java) GCJ segmentation fault while compiling GL4Java .class files
  • +
  • 14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
  • +
  • 16301 (c++) ICE when "strong" attribute is attached to a using directive
  • +
  • 16566 ICE with flexible arrays
  • +
  • 17023 ICE with nested functions in parameter declaration
  • +
  • 17027 ICE with noreturn function in loop at -O2
  • +
  • 17524 ICE in grokdeclarator, in cp/decl.c
  • +
  • 17826 (c++) ICE in cp_tree_equal
  • +
+

C and optimization bugs

+
    +
  • 15526 -ftrapv aborts on 0 * (-1)
  • +
  • 16999 #ident stopped working
  • +
  • 17503 quadratic behaviour in invalid_mode_change_p
  • +
  • 17581 Long long arithmetic fails inside a switch/case statement when compiled with -O2
  • +
  • 18129 -fwritable-strings doesn't work
  • +
+

C++ compiler and library bugs

+
    +
  • 10975 incorrect initial ostringstream::tellp()
  • +
  • 11722 Unbuffered filebuf::sgetn is slow
  • +
  • 14534 Unrecognizing static function as a template parameter when its return value is also templated
  • +
  • 15172 Copy constructor optimization in aggregate initialization
  • +
  • 15786 Bad error message for frequently occuring error.
  • +
  • 16162 Rejects valid member-template-definition
  • +
  • 16612 empty basic_strings can't live in shared memory
  • +
  • 16715 std::basic_iostream is instantiated when used, even though instantiations are already contained in libstdc++
  • +
  • 16848 code in /ext/demangle.h appears broken
  • +
  • 17132 GCC fails to eliminate function template specialization when argument deduction fails
  • +
  • 17259 One more _S_leaf incorrectly qualified with _RopeRep:: in ropeimpl.h
  • +
  • 17327 use of `enumeral_type' in template type unification
  • +
  • 17393 "unused variable '._0'" warning with -Wall
  • +
  • 17501 Confusion with member templates
  • +
  • 17537 g++ not passing -lstdc++ to linker when all command line arguments are libraries
  • +
  • 17585 usage of unqualified name of static member from within class not allowed
  • +
  • 17821 Poor diagnostic for using "." instead of "->"
  • +
  • 17829 wrong error: call of overloaded function is ambiguous
  • +
  • 17851 Misleading diagnostic for invalid function declarations with undeclared types
  • +
  • 17976 Destructor is called twice
  • +
  • 18020 rejects valid definition of enum value in template
  • +
  • 18093 bogus conflict in namespace aliasing
  • +
  • 18140 C++ parser bug when using >> in templates
  • +
+

Fortran

+
    +
  • 17541 data statements with double precision constants fail
  • +
+

x86-specific

+
    +
  • 17853 -O2 ICE for MMX testcase
  • +
+

SPARC-specific

+
    +
  • 17245 ICE compiling gsl-1.5 statistics/lag1.c
  • +
+

Darwin-specific

+
    +
  • 17167 FATAL:Symbol L_foo$stub already defined.
  • +
+

AIX-specific

+
    +
  • 17277 could not catch an exception when specified -maix64
  • +
+

Solaris-specific

+
    +
  • 17505 <cmath> calls acosf(), ceilf(), and other functions missing from system libraries
  • +
+

HP/UX specific:

+
    +
  • 17684 /usr/ccs/bin/ld: Can't create libgcc_s.sl
  • +
+

ARM-specific

+
    +
  • 17384 ICE with mode attribute on structures
  • +
+

MIPS-specific

+
    +
  • 17770 No NOP after LWL with -mips1
  • +
+

Other embedded target specific

+
    +
  • 11476 [arc-elf] gcc ICE on newlib's vfprintf.c
  • +
  • 14064 [avr-elf] -fdata-sections triggers ICE
  • +
  • 14678 [m68hc11-elf] gcc ICE
  • +
  • 15583 [powerpc-rtems] powerpc-rtems lacks __USE_INIT_FINI__
  • +
  • 15790 [i686-coff] Alignment error building gcc with i686-coff target
  • +
  • 15886 [SH] Miscompilation with -O2 -fPIC
  • +
  • 16884 [avr-elf] [fweb related] bug while initializing variables
  • +
+

Bugs relating to debugger support

+
    +
  • 13841 missing debug info for _Complex function arguments
  • +
  • 15860 [big-endian targets] No DW_AT_location debug info is emitted for formal arguments to a function that uses "register" qualifiers
  • +
+

Testsuite issues (compiler not affected)

+
    +
  • 17465 Testsuite in libffi overrides LD_LIBRARY_PATH
  • +
  • 17469 Testsuite in libstdc++ overrides LD_LIBRARY_PATH
  • +
  • 18138 [mips-sgi-irix6.5] libgcc_s.so.1 not found by 64-bit testsuite
  • +
+

Documentation

+
    +
  • 15498 typo in gcc manual: non-existing locale example en_UK, should be en_GB
  • +
  • 15747 [mips-sgi-irix5.3] /bin/sh hangs during bootstrap: document broken shell
  • +
  • 16406 USE_LD_AS_NEEDED undocumented
  • +
+ +
+ +

GCC 3.4.4

+ +

This is the list +of problem reports (PRs) from GCC's bug tracking system that are +known to be fixed in the 3.4.4 release. This list might not be +complete (that is, it is possible that some PRs that have been fixed +are not listed here).

+ +
+ +

GCC 3.4.5

+ +

This is the list +of problem reports (PRs) from GCC's bug tracking system that are +known to be fixed in the 3.4.5 release. This list might not be +complete (that is, it is possible that some PRs that have been fixed +are not listed here).

+

Bootstrap issues

+
    +
  • 24688 sco_math fixincl breaks +math.h
  • +
+

C compiler bugs

+
    +
  • 17188 struct Foo { } +redefinition
  • +
  • 20187 wrong code for +((unsigned char)(unsigned long long)((a?a:1)&(a*b)))?0:1)
  • +
  • 21873 infinite warning loop on bad +array initializer
  • +
  • 21899 enum definition accepts +values to be overriden
  • +
  • 22061 ICE in +find_function_data, in function.c
  • +
  • 22308 Failure to diagnose +violation of constraint 6.516p2
  • +
  • 22458 ICE on missing brace
  • +
  • 22589 ICE casting to long +long
  • +
  • 24101 Segfault with preprocessed source
  • +
+

C++ compiler and library bugs

+
    +
  • 10611 operations on vector mode +not recognized in C++
  • +
  • 13377 unexpected behavior of +namespace usage directive
  • +
  • 16002 Strange error message with +new parser
  • +
  • 17413 local classes as template argument
  • +
  • 17609 spurious error message after +using keyword
  • +
  • 17618 ICE in +cp_convert_to_pointer, in cp/cvt.c
  • +
  • 18124 ICE with invalid template +template parameter
  • +
  • 18155 typedef in +template declaration not rejected
  • +
  • 18177 ICE with +const_cast for undeclared variable
  • +
  • 18368 C++ error message +regression
  • +
  • 16378 ICE when returning a copy of +a packed member
  • +
  • 18466 int ::i; +accepted
  • +
  • 18512 ICE on invalid usage of +template base class
  • +
  • 18454 ICE when returning undefined +type
  • +
  • 18738 typename not +allowed with non-dependent qualified name
  • +
  • 18803 rejects access to +operator() in template
  • +
  • 19004 ICE in +uses_template_parms, in cp/pt.c
  • +
  • 19208 Spurious error about +variably modified type
  • +
  • 18253 bad error message / ICE for +invalid template parameter
  • +
  • 19608 ICE after friend function +definition in local class
  • +
  • 19884 ICE on explicit +instantiation of a non-template constructor
  • +
  • 20153 ICE when C++ template +function contains anonymous union
  • +
  • 20563 Infinite loop in diagnostic +(and ice after error message)
  • +
  • 20789 ICE with incomplete type in +template
  • +
  • 21336 Internal compiler error when +using custom new operators
  • +
  • 21768 ICE in error message due to +violation of coding conventions
  • +
  • 21853 constness of pointer to data +member ignored
  • +
  • 21903 Default argument of template +function causes a compile-time error
  • +
  • 21983 multiple diagnostics
  • +
  • 21987 New testsuite failure +g++.dg/warn/conversion-function-1.C
  • +
  • 22153 ICE on invalid template +specialization
  • +
  • 22172 Internal compiler error, seg +fault.
  • +
  • 21286 filebuf::xsgetn +vs pipes
  • +
  • 22233 ICE with wrong number of +template parameters
  • +
  • 22508 ICE after invalid +operator new
  • +
  • 22545 ICE with pointer to class +member & user defined conversion operator
  • +
  • 23528 Wrong default allocator in +ext/hash_map
  • +
  • 23550 char_traits +requirements/1.cc test bad math
  • +
  • 23586 Bad diagnostic for invalid +namespace-name
  • +
  • 23624 ICE in +invert_truthvalue, in fold-const.c
  • +
  • 23639 Bad error message: not a +member of '<declaration error>'
  • +
  • 23797 ICE on typename +outside template
  • +
  • 23965 Bogus error message: no +matching function for call to 'foo(<type error>)'
  • +
  • 24052 +&#`label_decl' not supported by +dump_expr#<expression error>
  • +
  • 24580 virtual base class cause +exception not to be caught
  • +
+

Problems in generated debug information

+
    +
  • 24267 Bad DWARF for altivec vectors
  • +
+

Optimizations issues

+
    +
  • 17810 ICE in +verify_local_live_at_start
  • +
  • 17860 Wrong generated code for +loop with varying bound
  • +
  • 21709 ICE on compile-time complex +NaN
  • +
  • 21964 broken tail call at -O2 or +more
  • +
  • 22167 Strange optimization bug +when using -Os
  • +
  • 22619 Compilation failure for +real_const_1.f and real_const_2.f90
  • +
  • 23241 Invalid code generated for +comparison of uchar to 255
  • +
  • 23478 Miscompilation due to +reloading of a var that is also used in EH pad
  • +
  • 24470 segmentation fault in +cc1plus when compiling with -O
  • +
  • 24950 ICE in +operand_subword_force
  • +
+

Precompiled headers problems

+
    +
  • 14400 Cannot compile qt-x11-free-3.3.0
  • +
  • 14940 PCH largefile test fails on +various platforms
  • +
+

Preprocessor bugs

+
    +
  • 20239 ICE on empty preprocessed +input
  • +
  • 15220 "gcc -E -MM -MG" reports +missing system headers in source directory
  • +
+

Testsuite issues

+
    +
  • 19275 gcc.dg/20020919-1.c fails +with -fpic/-fPIC on i686-pc-linux-gnu
  • +
+

Alpha specific

+
    +
  • 21888 bootstrap failure with +linker relaxation enabled
  • +
+

ARM specific

+
    +
  • 15342 [arm-linux]: ICE +in verify_local_live_at_start
  • +
  • 23985 Memory aliasing information +incorrect in inlined memcpy
  • +
+

ColdFile specific

+
    +
  • 16719 Illegal move of byte into +address register causes compiler to ICE
  • +
+

HPPA specific

+
    +
  • 21723 ICE while building +libgfortran
  • +
  • 21841 +-mhp-ld/-mgnu-ld documentation
  • +
+

IA-64 specific

+
    +
  • 23644 IA-64 hardware models and +configuration options documentation error
  • +
  • 24718 Shared libgcc not used for +linking by default
  • +
+

M68000 specific

+
    +
  • 18421 ICE in +reload_cse_simplify_operands, in postreload.c
  • +
+

MIPS specific

+
    +
  • 20621 ICE in +change_address_1, in emit-rtl.c
  • +
+

PowerPC and PowerPC64 specific

+
    +
  • 18583 error on valid code: +const __attribute__((altivec(vector__))) doesn't work in +arrays
  • +
  • 20191 ICE in +reload_cse_simplify_operands
  • +
  • 22083 AIX: +TARGET_C99_FUNCTIONS is wrongly defined
  • +
  • 23070 +CALL_V4_CLEAR_FP_ARGS flag not properly set
  • +
  • 23404 gij trashes args of +functions with more than 8 fp args
  • +
  • 23539 C & C++ compiler +generating misaligned references regardless of compiler flags
  • +
  • 24102 +floatdisf2_internal2 broken
  • +
  • 24465 -mminimal-toc +miscompilation of __thread vars
  • +
+

Solaris specific

+
    +
  • 19933 Problem with define of +HUGE_VAL in math_c99
  • +
  • 21889 Native Solaris assembler +cannot grok DTP-relative debug symbols
  • +
+

SPARC specific

+
    +
  • 19300 PCH failures on +sparc-linux
  • +
  • 20301 Assembler labels have a +leading "-"
  • +
  • 20673 C PCH testsuite assembly +comparison failure
  • +
+

x86 and x86_64 specific

+
    +
  • 18582 ICE with arrays of type +V2DF
  • +
  • 19340 Compilation SEGFAULTs with +-O1 -fschedule-insns2 -fsched2-use-traces
  • +
  • 21716 ICE in +reg-stack.c's swap_rtx_condition
  • +
  • 24315 amd64 fails +-fpeephole2
  • +
+ + + + +
+ +

Please send FSF & GNU inquiries & questions to +gnu@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 +developer mailing list at gcc@gnu.org +or gcc@gcc.gnu.org. All of our lists +have public archives. +
+ +

Copyright (C) Free Software Foundation, Inc., +51 Franklin St, Fifth Floor, Boston, MA 02110, USA.

+

Verbatim copying and distribution of this entire article is +permitted in any medium, provided this notice is preserved.

+ +
+ Last modified 2005-12-07 + + + Valid XHTML 1.0 + + +
+ + + + + --- gcc-3.4-3.4.6.orig/debian/cpp-BV-doc.doc-base.cpp +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/rules.parameters +++ gcc-3.4-3.4.6/debian/rules.parameters @@ -0,0 +1,25 @@ +# configuration parameters taken from upstream source files +VER := 3.4.6 +BASE_VERSION := 3.4 +SOURCE_VERSION := 3.4.6-5ubuntu1 +DEB_VERSION := 3.4.6-5ubuntu1 +DEB_VERSION_NOREL := 3.4.6 +DEB_EVERSION := 1:3.4.6-5ubuntu1 +GPC_BASE_VERSION := 2.1 +DEB_GPC_VERSION := 3.4.6-5ubuntu1 +DEB_SOVERSION := 3.4.4 +DEB_SOEVERSION := 1:3.4.4 +DEB_LIBGCC_SOVERSION := 1:3.4.4 +DEB_LIBGCC_VERSION := 1:3.4.6-5ubuntu1 +DEB_STDCXX_SOVERSION := 3.4.4 +DEB_FFI_SOVERSION := 3.4.4 +DEB_F2C_SOVERSION := 1:3.4.4-5 +GCC_SONAME := 1 +CXX_SONAME := 6 +F77_SONAME := 0 +OBJC_SONAME := 1 +GCJ_SONAME := 5 +GNAT_VERSION := 3.4 +GNAT_SONAME := 3.4 +FFI_SONAME := 3 +LIBC_DEP := --- gcc-3.4-3.4.6.orig/debian/gcc-BV-doc.prerm +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/watch +++ gcc-3.4-3.4.6/debian/watch @@ -0,0 +1,2 @@ +version=2 +ftp://gcc.gnu.org/pub/gcc/releases/gcc-(3\.4[\d\.]*) 3.4.1 uupdate --- gcc-3.4-3.4.6.orig/debian/relink +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/patches/link-libs.dpatch +++ gcc-3.4-3.4.6/debian/patches/link-libs.dpatch @@ -0,0 +1,132 @@ +#! /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 -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 -u ./gcc/config/t-slibgcc-elf-ver~ ./gcc/config/t-slibgcc-elf-ver +--- ./gcc/config/t-slibgcc-elf-ver~ 2003-01-26 12:35:07.000000000 +0100 ++++ ./gcc/config/t-slibgcc-elf-ver 2004-05-28 17:23:02.856048856 +0200 +@@ -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_NAME).tmp @multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC) && \ + rm -f $(SHLIB_SOLINK) && \ + if [ -f $(SHLIB_NAME) ]; then \ +diff -u ./libf2c/Makefile.in~ ./libf2c/Makefile.in +--- ./libf2c/Makefile.in~ 2003-07-04 21:53:54.000000000 +0200 ++++ ./libf2c/Makefile.in 2004-05-28 17:17:35.334839648 +0200 +@@ -154,6 +154,7 @@ + $(LIBTOOL) --mode=link $(CC) -o $@ \ + -version-info $(VERSION_MAJOR):$(VERSION_MINOR):$(VERSION_SUB) \ + -rpath $(glibcpp_toolexeclibdir) \ ++ -Wl,-O1 \ + -objectlist s-libe77 \ + -objectlist s-libf77 \ + -objectlist s-libi77 \ +diff -u ./libffi/Makefile.am~ ./libffi/Makefile.am +--- ./libffi/Makefile.am~ 2004-05-23 13:59:17.000000000 +0200 ++++ ./libffi/Makefile.am 2004-05-28 17:18:54.254841984 +0200 +@@ -179,7 +179,7 @@ + + AM_CFLAGS = -fexceptions + +-libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` ++libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -Wl,-O1 + + INCLUDES = -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src + +diff -u ./libffi/Makefile.in~ ./libffi/Makefile.in +--- ./libffi/Makefile.in~ 2004-05-23 13:59:17.000000000 +0200 ++++ ./libffi/Makefile.in 2004-05-28 17:19:33.776833728 +0200 +@@ -223,7 +223,7 @@ + + AM_CFLAGS = -fexceptions + +-libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` ++libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -Wl,-O1 + + INCLUDES = -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +diff -u ./libjava/Makefile.in~ ./libjava/Makefile.in +--- ./libjava/Makefile.in~ 2004-05-23 13:59:17.000000000 +0200 ++++ ./libjava/Makefile.in 2004-05-28 17:14:23.595988384 +0200 +@@ -162,7 +162,7 @@ + + GCJCOMPILE = $(LIBTOOL) --tag=GCJ --mode=compile $(GCJ_WITH_FLAGS) -fclasspath= -fbootclasspath=$(here) $(JC1FLAGS) -MD -MT $@ -MF $(@:.lo=.d) -c + GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@ +-LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@ ++LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) $(LDFLAGS) -Wl,-O1 -o $@ + + LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) + +diff -u ./libjava/Makefile.am~ ./libjava/Makefile.am +--- ./libjava/Makefile.am~ 2004-05-23 13:59:17.000000000 +0200 ++++ ./libjava/Makefile.am 2004-05-28 17:13:58.076867880 +0200 +@@ -67,7 +67,7 @@ + + GCJCOMPILE = $(LIBTOOL) --tag=GCJ --mode=compile $(GCJ_WITH_FLAGS) -fclasspath= -fbootclasspath=$(here) $(JC1FLAGS) -MD -MT $@ -MF $(@:.lo=.d) -c + GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@ +-LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@ ++LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) $(LDFLAGS) -Wl,-O1 -o $@ + + ## We define this because otherwise libtool can be run with different + ## values of `CXX' and will then get confused and fail to work. So, +diff -u ./libobjc/Makefile.in~ ./libobjc/Makefile.in +--- ./libobjc/Makefile.in~ 2004-05-23 13:59:17.000000000 +0200 ++++ ./libobjc/Makefile.in 2004-05-28 17:16:18.398535744 +0200 +@@ -264,11 +264,13 @@ + libobjc.la: $(OBJS) + $(LIBTOOL_LINK) $(CC) -o $@ $(OBJS) \ + -rpath $(glibcpp_toolexeclibdir) \ ++ -Wl,-O1 \ + -version-info $(LIBOBJC_VERSION) + + libobjc_gc.la: $(OBJS_GC) + $(LIBTOOL_LINK) $(CC) -o $@ $(OBJS_GC) \ + -rpath $(glibcpp_toolexeclibdir) \ ++ -Wl,-O1 \ + -version-info $(LIBOBJC_GC_VERSION) + + # +diff -u ./libstdc++-v3/src/Makefile.am~ ./libstdc++-v3/src/Makefile.am +--- ./libstdc++-v3/src/Makefile.am~ 2004-05-28 13:18:10.000000000 +0200 ++++ ./libstdc++-v3/src/Makefile.am 2004-05-28 13:19:11.000000000 +0200 +@@ -148,6 +148,7 @@ + libstdc___la_DEPENDENCIES = ${version_dep} $(libstdc___la_LIBADD) + + libstdc___la_LDFLAGS = \ ++ -Wl,-O1 \ + -version-info $(libtool_VERSION) ${version_arg} -lm + + +diff -u ./libstdc++-v3/src/Makefile.in~ ./libstdc++-v3/src/Makefile.in +--- ./libstdc++-v3/src/Makefile.in~ 2004-05-28 13:18:10.000000000 +0200 ++++ ./libstdc++-v3/src/Makefile.in 2004-05-28 13:19:55.000000000 +0200 +@@ -305,6 +305,7 @@ + libstdc___la_DEPENDENCIES = ${version_dep} $(libstdc___la_LIBADD) + + libstdc___la_LDFLAGS = \ ++ -Wl,-O1 \ + -version-info $(libtool_VERSION) ${version_arg} -lm + + --- gcc-3.4-3.4.6.orig/debian/patches/protector.dpatch +++ gcc-3.4-3.4.6/debian/patches/protector.dpatch @@ -0,0 +1,45 @@ +#! /bin/sh -e + +# DP: gcc prototector patch: http://www.trl.ibm.com/projects/security/ssp/ + +# the basename of the protector tarball. the tarball is searched in the +# top level package directory. If it's not found, a uuencoded tarball +# is searched in debian/patches. + +pbase=protector-3.4-2.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) + rm -rf protector + mkdir protector + ( + cd protector; + if [ -f ../$pbase.tar.gz ]; then + tar xfz ../$pbase.tar.gz + else + uudecode ../debian/patches/protector.uue; + tar xfz $pbase.tar.gz + fi + ) + (cd protector && tar cf - gcc) | (cd ${dir} && tar xvf -) + patch $pdir -f --no-backup-if-mismatch -p0 < protector/protector.dif + ;; + -unpatch) + patch $pdir -f --no-backup-if-mismatch -R -p0 < protector/protector.dif + rm -f ${dir}gcc/protector.[ch] + rm -rf protector + ;; + *) + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1 +esac +exit 0 --- gcc-3.4-3.4.6.orig/debian/patches/fastjar-version.dpatch +++ gcc-3.4-3.4.6/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-3.4.3) + 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-3.4.3 + + + cat >>confdefs.h <<_ACEOF --- gcc-3.4-3.4.6.orig/debian/patches/ada-gcc-lib.dpatch +++ gcc-3.4-3.4.6/debian/patches/ada-gcc-lib.dpatch @@ -0,0 +1,43 @@ +#! /bin/sh -e + +# DP: Change /usr/lib/gcc-lib to /usr/lib/gcc so that the compiler +# DP: finds symboloc links to shared libraries. + +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/ada/Makefile.adalib~ 2004-07-25 19:59:36.000000000 +0200 ++++ gcc/ada/Makefile.adalib 2004-07-25 19:59:44.000000000 +0200 +@@ -53,9 +53,9 @@ + + target = $(shell $(CC) -dumpmachine) + version = $(shell $(CC) -dumpversion) +-ADA_INCLUDE_PATH = $(GNAT_ROOT)lib/gcc-lib/$(target)/$(version)/adainclude/ +-GCC_INCLUDE_PATH = $(GNAT_ROOT)lib/gcc-lib/$(target)/$(version)/gcc-include/ +-ADA_OBJECTS_PATH = $(GNAT_ROOT)lib/gcc-lib/$(target)/$(version)/adalib/ ++ADA_INCLUDE_PATH = $(GNAT_ROOT)lib/gcc/$(target)/$(version)/adainclude/ ++GCC_INCLUDE_PATH = $(GNAT_ROOT)lib/gcc/$(target)/$(version)/gcc-include/ ++ADA_OBJECTS_PATH = $(GNAT_ROOT)lib/gcc/$(target)/$(version)/adalib/ + + vpath %.adb $(ADA_INCLUDE_PATH) + vpath %.ads $(ADA_INCLUDE_PATH) + --- gcc-3.4-3.4.6.orig/debian/patches/ada-generated.uue +++ gcc-3.4-3.4.6/debian/patches/ada-generated.uue @@ -0,0 +1,523 @@ +begin 644 ada-generated.tar.bz2 +M0EIH.3%!629369#XX9$!3>]_Q?_________[/___^O____H$````A``("&"2 +M_OJW%&^`7&``-Y5>5Z`EJVI,\>A1LN!7E`:N\W'N\^\=.C1N +MP=44[MUI]WIQ=.B7:KUW:HV7Q?<#??<':SUG=N`Y/660>]CCO2.V*)*J4^WS +MFMFI%H-K3:91MM'WP18[AU.T/0HH['2]:)@V7;MAV9I2AS9(VS-E)"L` +M1:VS%5;CG7;"6E6U`R:`T*T9@#%:00VU5%301LU61!54>\G8$`.GMM&VSAUY +M>M[7>)U2JNRZHTU`#5JJJJ-F2N5E;@P::!-"!`C4::$TFU3S4&IZ,J>C4_5/ +MTRH/2#;5````])H!ZF0`$IZ1"((B:*GA-&D"?JGHF9-3!#!,`CR@81H9&)@` +M@/00&JG_M55*FC`F``$P````"83$P`````31DP`$GJE%$$:1)DU/-34Q/:H' +MJ``&0:````-``````$11"`@$9`F"!H0-`!&FFH,F"8&IAID-,H>DR:::-#0* +MB1$!$T)D:$T$R:FPF0U3U'J`:`-````!D]0`#0]3_JG^O^!^7\Y]=.HU36D4 +MFR`GWOM?:?;X#VF_ +MY_VYP$W$"HM^W_H`,/^W^-3*LG^O]R;YI;'JF:,H#]6DC0I1PUIO\]EUCE)< +MK36VKPUS]R\T),A$TQ%9;7^?1C3J*TTFFZ51\[)>N]Y5T'FS_1E&?_.N=MO.==NL[Z-]] +M]]XWA>NYF.\[ZZ[V.[[TWO7?5WWU-WSOG6M9.'77"'9WWWWUUIOLZZX\[S-S +MF[[W@]WS>^3F]V2.S +M>```````@`#``,!```8``!``.K*X``':M=P&","!``!U:LX!W<``B@`!VE/= +M?>^GQ\=FM?N?2MNVWM")01.`B8$3)1?QPCETTYZ7]/IE!^%BNFWBKP)O^:'C +M]^G1N^/LW=&>2H?((Y@(=:@T3G(E04$/E2*.A$%0AT@*)$1]D41(21Y[/LPK +M9J*8XG_BPU%U'V^GU>OV>;33333V^_[?5XD$1Z^GPG3,]V]9]\[R__?E[\^/I??9 +MOP`=`AX+,+$KIJQ&KSF;]?/.GY>NSEGWYSUXG+>5S5R=DJS;2T5H*="F*P0] +M>,-=P_^NGS]WOZ^J.^N=/RV3Y+"S90>0J&@GPE1);9%&$+I@,0 +M<0MMD480N,)2$+$AB?AH]V86T.V<[G>9XR]SPUIK(?7XBY2'0/QN$[OAS\*-E4="559]-Y5#TC +M9)''36^13.6EQQP&3/2X9C-.HB(#&.DQ`,4:+NH]!D]8,2Z,6==QNHY6V!:1 +M,@_L'^@3%O-U'3.?![.B/O+U`'!$]SZ51#=QZC=E`-$T\9`< +MO3($D8R!H*E;"VHU$1:,65=:EVJ2OC6KS;7>(2RTZJM;.Q;")--VW175,&[3 +M70R4#M!AE6ELM*LK"1)#2)#Z>N-J_K5O[#2^]J7TB2;"7YR05]NW*(A`U6+X +MTW93`2*2-H)0A&62MC04@$,DF1BML:6R^^L93UC4/ZVMK*I2-`!')H#D]>L9M^V.0B:^]6`B6<+Z,C)[FPB:?..(XV$2MQ[1UC6_ +M,9\G+Y*UWJ74RA5L3>7)D]FP?.S3=5!LLAR' +MO/S6G\6+W0P+[*[_+4G$0)(7971OEP)'XGFZDFZT'M`?BIE78AR!!%G8YW?V +MR,33>K=TI^1"GAJTVL&A_A9PM:YEGIJ%Z[+WKG:,WOO>B^=X +MY.KYF7O7=[ZY-W#.C-=]M\.N<>^I?'+++CWCKK=[WSIZ>^S6KXL;D2UGN]7M +M:]F<.%O<6IA9IE3IBL8M*M%Z=V-7W +M[;S5]><.MZOON9UG6N33L]GL`HIG>=GGN:[8V8CJ\J_'IO!%=/F9UUJ^[S.: +M>\T.LU=9K;SDYR:NV]PXFWCC*5N67%K62,>-ZT#++FF+S6B":PF:NY9,)9ES +M+Q$TYI339=Z@,RQRF0))=W4NV''+Y99QY<..]0T9O1F9N\PW-8X3W0?`TOO\ +M:?-U,$[H'B9DSA3&&$@&,JL!QD+RO-7[[&@VSZ;JN8VJ#&:;1:,EJ*L:C9*DD2121D0F_O3C-VN@6!U]M,#NY +M<;SN5O+F3/*&'9`@F_*JJ?O#"%F'#"K*P=&W\LJRG4J%5(JD7?9 +M&\F&I7M+R_E7,+P>;+>RC3;AHG*ML8>XUUCGQZ9_#]+]9\IR.0\#^\R<34T- +MYDJ:[G1R[G1W.'X+F\XXD@22:;-8BU@JM- +M+-6(B.M)>L_)EKI1M#[VONOKG-8F9*MMJ/VH^-)=#2ZEC-#9U +M.LK'$/"?C:M_(Z>)",6O4HD2T513\B9W%,2-OAI9[N[U,3'E+1ZP(GZ0BPE +M@0A3^.\=79A +M7+79XX[?/],D=&D/0Q3H('^'GO\6&S[$^@VTTJ(MG1*MJ*6UOIIJVK7X1>$M +M*X8Y/I\/+;GK9MOQ@"9)H3&A37"K6*0F2MI6O6=YAG.I6P\&&C#`5:6Z[N'" +MS9AJJ5"_O[YMRQ:QM]ERUDC9*BI2BK%1/O5OOM\RBF8,4TL`1%,Q&QF8Q)4D +MDCCLZ8[+NY`??Z2 +M8:-#>3R[S+JTI16@I:'L^^N#N,HAVI]E*J=`B3<44=ZIT=YL;SHSNZRU:?!] +M+-:8#D-+K7/DJJ`)RJV24#>46*C/WFG5>R\JQ4]SW3K&,GVQMM%A[Y)75^?VX +MU9T%JV']:I&55>(`\!$OJA$WRB;<.H4PHYA.0Q-#363%LFU#!,6>3UW0R'H2 +M2.IF'XNQ$)V03T")Y0CW:PD2381/2).S:O@Z'XA.PSL>W[E-.'`ZK?DN2R55F'.[Y?# +MGGP9[GJ]/#\C@REBT20FY.`W?T70-K(UF$^VE]2@905SG=;JYS]FCXQ5S`NU55OR)OQX/%:\-3<0-\E+7 +MYTY)C)'Z'W$H[F)MO]WL]GP:WIE=C>WLR:'9V'#AGO01>BF8G)(:>^&F[) +MI/.1>U.24@N4W$?4-478@;D"ZCF6C%*&P41(!!?\K,0W=V[\E4 +M44^']+YG*.SP66!%TT5]UH@B?'PS:43=!OX!DZCVIIL^Q-G.NVZ"TL`**]:G +M$/PN7URCOHRCR?%\/LT:N3YZ^[`AU5T#QSM`VH-`<`!`AEZ&WO"",9^1D$H* +M2+/(=G9PYG,YI$V,6!T%#7*#D.@P=O3XS;8SS\4`$>SKO?H<,:#L.N89$R?Z("$`*6*:N@O +M8OW0'U\A,#J.J/*#:`H'CY:"[[@SGU>9,\SFZZ93V^+Q^+KTXG-(92)S2)A, +MIDP3CQS$63BHJXQ9!B:#7%!ZO?G,;C0-@1Z5$#A,\X$RG`I2A"!4!$B@7;\X +M)*'6G@%!RG=KS#K$^CGB=#JGV=;[FM==7.8TV.UO;0M]&EI!Y*@PR@*L`*L/FAQ*AJXG6TR;;NW!2 +MQOYTS;2;\>*QC>=&O?I3"(.6.EN3BU71K,J?R#]'Z!]K!/X_">^,-GNG"\(/ +M/MSQDZ_)Q/?W?-G_/['NVW3S<&]7+=KM\NWI_;%5/WO:U2T[;A#V45?OGS_< +M]7K_7_!^'[_W]MMMMOPF_]7M^K_=]W];>J=AW_$6V^]:."$]9G"*3ZVN'2=`=$@2C7[%@6G< +MEIX$O?.',T9YWAY)O9LM2AX5MI.67>2M)6&]:K6:MFL;+#H2 +M!B/*3C5DXG&K_S>1,X5$`\7_X?/^NWW_9_-_X_H^O]'];X?#X?#X?#W?#X>' +ML]1\E]?FJ*')\_B+^J^K=(37.#V77&QI<.LBIYSUH*'\<1$_)^7\?],/IY_) +M^+/]OY3^+^W\O]?XY_5#/Y*=']G0;^K'Y^P07HW;B?GE[/[/S+SR^K:#BWAU +MN.ISR7]CSTWG-OV/A^*:\#E5N%?$\+N^AJRXO8M.3>U97C08Y8?NU\O+:SX? +M7SJ"9OG"X,:6Y&I+];S6G)6[6''7H0M7/'"V#RSM%NO*FGPSUY3#1XX@/IU9]7JVZWM;:V/#QZVVHSKCT=8&- +MNQ':U^N^\B"Q9>+X%<^%Y=MN<6P;<-S[Z\]+W&FM5:.>^B\N?>>>-;]JZ+;3 +MI.FO*=S68G.-=^;8UQJU6?.^11Y/V;==^7&NFJ]&QOOEJV%W6,'P#=?XK1UJ +M_/*6\%MV%MNN?2`@##EOZ%\=N/+T;KX9QMX^W;.WSZ($D^=!;():DA:1"A`0 +M(B:KWB+]5[VL.['G+\])[,[-K9FX$:A:KA5VKIJ;"P-L;VVTFU3&N--EL#%L +MYQMORG:.W+.-\<3S;KRY:."N/#9VN'VC1;5TP-AY'N\VO%Z$;7FM)[[VROC"ZSRZ\+IG=K[7[9A^_;F_'&G/58/5>-%[ +M\N?5=/!A/*W(;=._CG;P7<<^VCXYD=$\6_7''CTG5.OM\-5%1^&'WO8GPP9# +MUQ/@EF(-_A6_JY.NLN[EW=XYN>+H&[+F)*(&,2TEY9C4&TJJDAC4$ +MRZE"6W>F(Y,2):42XH:$7LWDG767=R[N]\W.B\])5ZY>+O/ +M?+UNEI55)#&H)EU*$MN],1R8D2THE\5\2+V_SNQLF-I6;1J6RTLVE9J4VFIM +M*:LU-I4VEFTLVF;1K:6DU4E:5;+6:LMHVU+&U-*?2VM?!'A[N&/V)C +MEG=OQIDAI]F_[4B='S15_4BH;?N33'^V"A!8`0"+T9S8%)TN+)"XHC9!"_5Y +M64J>]7+P?>1`+FVZI'DWK!UEMU!N$VS-:^;TNV?W[ZZ:_;GH +M:TQWRN7Q,S+N99)+ME;5(6?%P;8_T[G\B&<3WWMG,WK(OHHJ$W#2C=WK^+K+ +M68T6FM(5PU?SN6IGN[YGTL/HX:?4/#<[;]9EYE;OUJ;0ALKE^*=$ZE= +M8T\OC=+6G-&AJZOJ[;D<&Y2T:;=Y0/"BN&L.&Z0VL)67>#C1@ER<'#.,29,U +M&:+&$&MY9A;#,C"3K67CUNU0<4YO=HO;U+('#:G*J@*.P"BK/QW7WNL +M1F51$1&1#6-L:UC:HQ;&"I+;&Q5B+:*Q&,=557]+6V_?5^S_+M?]4O^L>X?: +M/F^KW#\PL+@@$!$(SR$`]M^;]BGD']'BZ`^K]/V_=T;[?N\_NJI9:-W/W7B= +M\Q%Y!_GZ5F2)YQI2I3%3:L+-1=8I8K"FS7$B2ABKK$,6+FVHN0UK/T>]WN#: +M],F75%/NI=(%8R+5[[+6^$TTXTW-ZWFM]M].$``&4&J`B$"_$W\>K]JHK1: +M9:C:V)-;Q/E\+/AP#C(0D59$D20"15D&='7(3S/T79TIGC*NH'_!AP:!:*\U(4;= +M*LAPET\@8MK%<_0_0S/R[EKG5]?&HA^GRM*EQ5R=I:#2)A+^I%NNDKTYFK77 +M$H$QB\+GJ%3JBI(D\$HF[CG>F[T:;S^$XXXF[?JFGIG3O[L=4WIGT\=_^P15 +M/[SD8*UK@1/:D$.=]H/Z7XWW?)/<^M]SN=PQ1CP*'W%C!+:O=5&MRU<+6N:Y +MK5\>/MP/AW]ZS)Y//H>$T\ +MXE/X$\Z?X)\Z9.*?6XI<<2<9[).?LQCU;_)/L^WNGCVW]?U'2+*[!1&&- +MI-2<*)0V45A7KI-X6S79L+>D!07HE4'W5<)1-^0J8-8X@R?B_[_T2;DV$TUE +MX=28\NG03W*,HGO6G1Q"WWS6.\++7WUG*,TI9!2AB2*M1;#Q&(D8J\V6M\RJ +MVO/LK#QC'5_BSE[]7Y[E][V^M[OTQ=PB]S\WXQBC"09%9"-$&2H1K?_F_AKZ +M]ON>(^M7CZ;T.&I1HSXSQD:RVK%;'H@5!R0%B9522223R_JJQ.RQ^OG?BT.! +M0>K;M[=DWZ\+>E+="EA).RV2$@_=.?M83W7LOK<7WLN_H2*L)%U,1_Z_76(22=57LJDZ*I).%[MG*PH8A&0"97KPS$DF +M;6]8E+))RMS?W<;YFOUN-#(:R32V+XH=75#?59K*B+L.4H`/+:X8K..T-:N= +MJ6M1%[V5D8S;%E?"ER@4$G15%]T8CD"2$)((!)()!*$%'XK +MU\@KZ5MAM&!F=:`&J"Z@Z#F+>=2?K +M6JK':+;A5TJL[3U46QQ#=;WIPO[I'J/[Y\!]7YE]#_2P'JIFKVIX>[IV[=N[ +M^#6[]?*+K>/`8J/FJHSG'*>\6#3H^EWTG`?0-=""2FJMRNS:XY@HV=#LHQMJ-=K1S]G)N^B!=4!1)$+&8$%-(P7\UJJOI82-$ +M"X9?E6]]&A!@XW5_F-5H+U:>%"_%2UG4XLD>VUFOO-B_.RV-X"H3^N%B+=-* +MS92?UK>^^)'-!@DXQEG&-IOR>FQC"U:K1^O.,>2[>NS5Z=\VV6V,BM<7,;*F +M/+164$%00P5055E)4LH12BE2BLH89GTZ3@8)E`4)604T9LE]3;EX[-51FH;Q +M6VF;.VEZ@P??35E;S>E#^^EIX02K]I76(P],O>RQ<0%U"A_A*]N>\N?A+/.& +MG,MM&VM17P6L/MXC[#[D]WR!Q\K>H']Q;.!^84?#.G'/IT'#&._2W9JQ#K,Q +MZKVKVKX7.E[1I68?.B@(\5#U?D64\U9B2"$N+`B6MDK[=]_G?7OX\RS#WHY\ +M>>KDT43Z^I=L5QBU8IN:WR]'$+]4M,0&)-H:@]%CY+&^L.?PK'$[#$6TRS?- +M=MHF;$0#9;&_%IR1!\[+?2&0_?"L@M&HW<%?'O_3[CU@8WVQTQH-+<[;+>&K +MGG03C.96T3D1-I5Y#7$:;5L +M=:5Y%F;JLUK`<_A6(U0M'A#!D&57Z%Y`S6)#\ +M4V(A&/U+%W$\+!^^6?-K=:\/'X_:6]WK^/[/P!_9<-:R:Z>&[;\".3&?'PZ7 +M9K^D2_Y,1>CX$;0\869H8U;)N6*)=]62@"$(:O;.)BSJM1E$I\N^6)0-:^WM +MU;)<`@^MV8:JOR*[!%]I;=\Y]C3)XV6VN_&;6B^NH]]PHOX2#DU:GJYD\==: +M,76S=7AX2,*MSU[?Y]LYMIG;-G6=9TVP<1@O;G>B`/5KOZ&_`W2$CR"A1TQRYZ#;7ESYWI6O:_(4V +M/A+VOT?#JM+,WQFKYG:_($/A0)9!;/41F$4V:&F-):7T5]WP577JPS+HO':: +MUN^WOQ+V3=P^,F<(%WX[WH6(=$LXDB(PLN%>,,@5\'H/8!^7D.G?I[++\_O_ +M=S\7M?5_H=&KU/U;/U>:ZYUUFKXZ-7J=6=)H$K_C/U`PG9_$?K/#INW%54QM +M^Y_*[NK8OGQCQG\>>X6_'QLYD-SDX+?.;X>#9[#AL\EF%=&CAAV'9X.C8(5^ +MMZ.^F86<^=^OV9PZXSHLZZWUUSEOL][NX=WJJN[T8/.%)O^I5!BU%J#K5*3:E42-@P<$4'&H8*(%A]`N'`2PM(LFI0\NO+I`&F +M#L^V?HM&EI`M`8HQ1`G#T]^)T:3H^YUNK[L&Q=>-`,8/ +M)]<[6C2T@6@,48H@3D]/?E.C2='Y'6ZONP;%UY:YSRA,8N.PL(`T#BX8*'&O +MU7V?4X:+.XOR'19T>#11:M4B>S9[GA]W+;[]\U5W=UP[/N-FA`P/D^!*LP.B +MQ)\5V\N5;:59X.%6$-FS#1\>EH3A9V(GD]#1T5LQP\P(G)Z%'R?&/X0(AH(( +M^V*(`?YGD/F_`BA]"#_1/9-)].8<`\'/[@'KQSG#QZ\'#GH\'`/7[7KX!\`Y +MSA^U\O7CU\#GV?#QP````#UX^CGH`#AS]KQ]'R^!SY?#UST'BL<;5MXQMT[= +MO\9QVQCQC;^VX]O;'P#^O<\?9]7R/AS_0>/`?F#^D\?@<#Y<\<^CZ@^KU]7# +MX?#X>O7CX>CQX\>O7/`?1SG#P>C_%>O!SUSR6?NS,^UFG[VW,=0XLDY%#@9* +M$(0I%F+F8T2JC1II-*VQI4:-L*QLO*\NNO;M;M&MJ2T&FO3KK5[+=+C$P75) +M>UTFN:3,3U<,Q.7$F&#:WM*,+5HJ5I-M,:(E%:5--L74;&6E2U><>5[;K/.[ +MN5W"5Y6\NO;0*W@ZE)9>6[;EHP5BT8-2E*^FJVI:O+R2Y$NNX^+D5WQ$NEO) +M:L2ZMIHQI1J-+7"(#=")^\`(Y`$?Y_T?P_H_;_8V_1O.'1WO5UI_8FFG3KK^ +MA-$]"IG6:;T!$/[44`/L_R_+_?_)^*?SWZWU_VO\?I?/RW_X\?M[^',;`_O_ +MX_O?\[?O:C]['V3^GG7*/LC7I2V^P?SN70GICQT-KZ;7WYXC'H[=9[:8M%^> +MOV=2%7?[OK2N_/1M^_"[>'6G3])K7*-Y]ND>&G^;:^N.==?&>+&W/Q\;6VQU +M?+[;ZV]'CGC[E;.[-Y>AI[^KIXY]6=Q*)/B_AX<_';U>>X\-EZ/;R[]]:_WA +M`$"?D0>A$_5]J#^`8@?13!_2GV$T3ZZ?Y)_=J]KSM_N(RZ^BEZMD8I8L%*2U(UD +MQ.#,;I*I9(DD@;$+VW0Q>%J$B@F"U_/+"?\:9,7?6J2*I@MQ:(3=5:1`O2X* +M6]!3!$MDM0Y9G?,251(A@MXTJ!@MG*`"+\/Y^>/S`_@0`_'C[3[/PN*_11DA +ME"LI+),D&P85M@EDER%(E(E#W!;9* +M.13%4RI5+-"59%R6ZV@8"T_F*%`D1,%J+(&D5P8NMH=ER3$S1+2H!?YZ'R)A +M/+(I!DFO#"82;]1&G32KF4@:DNEL@LY5`0*17VJ[JU^)1-+A-,:E?*]GC-I) +M`)@595`XJ,JK;&6`2+@4M4PI5*J"$P2IOEA'JE7);K0H,BX&UWM6A"*R*DD( +MK(N"I*RH'=D&@1\2IH)#HA'2PPN9#2:F]SDA$C-$58 +M:4DVVFIM5E:4TI4-9(SHJI[$GAE/V/8GOIA-$ZX,($(L(E&6:@DM%_F[-KA9 +ME12V*LLL6BK:^VSQ(*?A[F?&_-J3!":4:@0"=^X;A[VA5P6YI2(`ZY&6<3M>.2D;>7=YW8> +M3O>W/)VOER;Y:==29:C6DA``XQI&TH=L-3%UH59%P6[4T9J1:+87&V:[XP73 +MMFB1I"5EE:]V#12KH:6HINU-Y:\R-QD8MB+%5*KC\;!5A$[T+D@#$^.R-(0A +M`V+4W521P3$]LXY7X:]%^?5:YOLMKDK&VBT58U1;1;%:-1:+16C:C5&J+8K) +MS\O.58M46HV-C9O';&QJ-:-C4;"[BW?:,WQ5H,BQZ*4A(!""D@+8+*/?'[(T +M2-([Y!B+8=1F'687,T8\-,EHJBT6R7A?.F5%5;"^,,S&6#\D?W(^;>Y.6=B: +M3325D&=LQ84EHM'U<&:5JID"04]Z*G:2=A4A%>R)^;]%VBZ0*,XL8[IF4\,E +MQE6>L?A'TC4@]P(D_N1@(D_5']V-Q_)V2((X"(^204@2H@80@RD'D+E@GWR0 +MR;:Y&T62HB+$L9'JM748G]8X(OQ0*\X&0(552JD5^QD1]4?KC;\P(D +MR,W0E\8/+6?ADTNKYQ![79$WB)42HWG"60_)MP-8:F&0OZU9(DH3IC40(*HQ +M@1%="WJM6<+82.3=<0D$P,L31K1('7QJG6)_D>X#4,R7\+&,8QC&,8QC&,8Q +MC&,8QC&,8QC&,8QC&,8QC&,8QC&,8QC&,8QC&,8QC&,8QC&,8QC&,8QC&,8Q +MC&,8QC&,8QC&,8QC&,8QC&,8QC&,8QC&,8QC&,8QC&,8QC&,8QC&,8QC&,8Q +MC&,8QC&,8QC&,8QC&,8QC&,8QC&,8QC&,8QC&,;K57YRZEIBI.!*G*6!-*A8 +MK)-\X#@34Q?"Z$]OPD'(1-`_6J1TL`=HB218!'_F*Z@`B]*?`E1!%\$^5(FB +MA<-Q_]KC8``))&'.[BXN(8`DLDT8`D``$@`$C$@D```#``````%H"22R```` +M(@````DD8FDB<&ED#<"20```!@````,262<())````)`+@DDC`%D$@`%DD`` +M```$EF@``D`F@``#@```!AB0`,"022"20!@230`"VVVVVV\`%P",Q`%Z@A&( +MP""IN(86:F9@V%EW!3(D58HN\&S6&[;DLDI2R?YP!&+A@GCD"/I(.A/>G:8[ +M,'I(*IW1?=3@2);%DDDJA*J%55B-:OQ:JI;;:T:V[*63)9-!5&SQVU?BNZ^; +MKRGE[V[6-@FE*34BM^3W">Y(GPI4RGT#5&Q7JG&>-$^[=MJ3%HK%8U%HM&HU +M&HU&HJ-1J+1J-1M%HU&HJ*BT6BK&VU46HMG=5V_<)=L;/YW3@UCT8Q+SAU:3 +M^2`_:C\D>K[>(_%'N=MKQ;%J+:*BV*P6J-OSFU[VAS(681,BVK@:N"8Z;3M) +MTQZS=16$A15BI(EE1RS).WG?R^XU&R5/(E'8 +ME(1VM,A*;%*K(HB,)$"!P+5.E.I,/H2!VIA/5JY(^\FJ=T3Q&3BBV2V2V'?& +M1%\EQ/9<5IF:S`&$"=$JS(RKEE8.#^F]6'V.D!X?@SW5U54+3YS#%DH][,^[&26R:&8?(PTNMY]^H1LB"J"34Q2R +M_EC`9UR&5)0V-62BFE&W:JUNJM;IL4J")SD1]*EL32PG*%F6$>J44M=H4RVV +ME;-K;;RU=VJ^TI9NBR+FV[Z=K7/C*Z%+51TN24J.3,Y/!(G_G*;^ +MG*83ZB`/FZGDG17J,P_'A9AGNQ&5%RX%V7$[_+-*7XY$RBR+"E%YY,TP5"C( +MHQGQA1R3">*6&"W%I`B$(**R""8+5$D$W1"NT*D(U,GOIA/ +M0F"BPA5D3I3(6R6DM%+$[,P>:F1%"*>UHW(&*+@GNA1)%D6(0L;&I+]FVES6 +MT:GQ.L?L>7G?JK0'`VNYK5BD(;B0J!8"2(2(^\G2D3FD0`RI\Q#^0_?)_4?B +MI_'_*0_20^;W\O(1W7#_9VO;VWOL&H@=UP_IW\GQ>^P$(2'E]CSR![_O?'5/ +MQG\Q_1I..[B9SB9G]9^,?R;!`DD-QJC@ZSDIN/FGX8GDN79)>#"\E5T0GBJ.K% +M7JNJ^"JV%?'2T2!1I\,PEMG4`RM'R;W&<=JKD_Z<9AM,VLS8+4M'"E6:=J[* +M[=FZNW71=?-7Q\0$M7U=1Q_T,')PKG%6KQF*MNM(Y2+)U>K<#;G@DY;;[V>, +MF6WGA;;V=5W5LFVS9L=!(+5"O3NPJ)(@2($@EW>D`DEZ#+3NOGV9_I_R535*--*B4A/%8!M$+*AY+/NRRXP +M$1N$N$LES:O;>W&,`9.OU77X]@(.4:U!@',/DVD&#&)-F!0/CQ>=SHUAIXY: +MFLJ;UGZ-&LW2:^@EV::C/)/"T.,X4MRLJU;]&WPE5QPM[5=XRXF65\&?M]/I![?O??'OL'O=".W7#.RX61669II2& +M;Q9%;/!0ATCRJ)UH55%6WXR>67A`_!'>A4 +MKG7.NW5+MKG%75\R8[EJ;[S6)TD3N;U#">K/NL\ZK:>7'?_%AYTQB=SO) +MCW+4YS-8G:1.YO6]%4A`$@4B4GUM[[OS^(1VVW7`D"#M8&?)WW9E_$JQXU%7 +M!$:VV%RTM_.ZRB]W6DYF(J"NYC>X`=7"*(.[H +M/IOF\\@]RI5Y?>]]NN72$KLKLRQ5PT5=BKNK/1LK76:&FA.`)?KSCH^/X6]S +M-+E;Z\BK?U/0&8*O`.-^&94,/C(Z&/%M^+4[JTG\;J.T\>%)*J"`$GQ!?0<+ +MAEJVQGJOOES-G:+3%G1`F$W65V94+\^Y;D/.#?Y/S??HEYAUT*K<(K[^\S"3 +MSV]N#NN'TNZ#SYOK=WO>T5LPNQ5NK$J[%7[51]B5O\&F:N[DC,S!556\5=U5 +M>-T)QUR>!6*!))())55!)'6R[%145IR059Z*,/Q?=>+7U^I[.%9T?NBK9O9= +M96J"M8:$4N]&J3IAUNZ#YM=T'Q;]_] +MZDLM;:P@QR0C3HVD==&<,$J`CRGHC4PR)8V))FTF*2LE%F9A:`PFFNZU4,2$ +MK@DMS)`,R^*_O[FUA:4L:*B*2+;>JKFN;;HS44FHT5$4D6VY5T/'L58'Y?"S1AUT*MGFM"H9@JR@9BVW2R#:?3CSEJ5[-_*W[S +MZET=CZ6GS\+?W#H^OP:8R044%=LI>M:&CD7YX6VZU9:MK:LL'H\MCO[+8X3' +M9]5!NPKP^"*^.QNQ5\_G:WPSGW0<+;LU9'-8N--W#AI,"><7`0`H$3!4S3NY +M;%.&HGO.LMY>SQL^F_*:H\E<*#Z?$`PDJ-!&IJUYY?JM>^@`"&MOSOR_7;[7 +MM?;=/>JYS$Z3UL%J3(HC!4/4<\\O:MY994+)4DD@8U=K*:I*RZ[:9Z=EM +MMJVWEQEW,\H\)PTDD]6G<5Q`CM`7J;(KX/%&Q\&DT,DC'T=%'7+ZK(G*NPUK +M4U8RM3&(C1IBW-83)=4QK(F-,M+?1AY:3PZ*YG#;)UD[2QC&,>ZZ&D-6:T*ODVZ/0<*_` +MZ^GSUK&\SKP^"+3LD%1H.;&TLLML;8W)=HJR)%D(QD15P\":">9QT+GMS*QH +M6[NR=5T+#T.&7+'4+S6M%D-%W+LG1401`&]R;E;\%@I +M)9U8K;>O)/"8,62GN[PT%XJ52JI"`02#83ZE)!'P%R[-LJM&:JS#`P2S9!0V +M!>]3,QO,J:E,-7#-&L%K-D)IC1C-Y+N.R9D-82766&QT:2OR%X,JRMTB=[%7 +MT<,.?9P9PYP5>P+KK?0TC&O?VG;=WG?8J]4$@BNBB28?I>WMY5^E7W^?J]CN +MX@U/+KAK3F3(J[VMMTL")3ZFM+;>^UZ]Y7M?"$("`D#?CG;F/?Q^;6>31%98 +M%;/9K0JNJA%8>!##9K0JY=4:,P5?5:]O/Q9PUF97=:/?$6'1:;[0+$D#(/:I +MH'`AT;:V':6XE:2L:LEW=RBVVUKKYFG*U +MJHA\7KA:&-H66U?K/JPUNIA"EF79>27*R@@EA9@A;:W,LE,A&9#,RR-]9K1F +MJCF0S+:JFBAH&DI1*::V?(86!WZ7\5_?]/%FC[7:6],^%$PA]B7EY>.33U8< +MZWKMZ[R)AAV=&-+79T0T=D(:!HU=6.:NS>^9W<[,WF2[[O&SJ[ZD[UWG99V[ +MK'G?=Z-'=W-F[ODG$#Z>8D[-1S:4ZPQJ:8N9BW&)Z*BNDW(Y:-\GJZ +M\K;?A'*\'K'K9"V2;<]CF?-I[V.KUKODT062(J]\Y&9>+9ACEPR7<9F9>>NP +M[.<%71(*KG?;Y#XJC"V*YU<5B[-JVE[[OADO2NZR;L7#!S@A00[PUG7O8J@4 +MZHA!6%5LNQ5K5`>CL]4['4TD]>O5PY!JT6E/NZ+-2)W'2XD?,BROC:!98>!3NQ>1,1$0T,JD\U +M"RZCERL9%&RXFUK6>!$&>MX#PW,ZJ3>K#3-KXE<8IW),W+11$!:=^S\_^37' +MYZET_,[C?<\%^+S.M9%3&$)\]][U??-O/?%1I41Z/K<6)&,=_$;J,+L2%@@V +MVVW=L98JW=WX.DT7@LNW+AG6K%,(0T)=1NUK62\A&9XF9INX6RX1@0\EA]0\ +M8`HJJ0DF0M(230-;;MU&,23A7(Q370Z.A6-IFT;2^U]*_@NOK5]/O`0?'VE8 +MHF8*JBK9HT9@J^M^Z^97+[WE.:S1I-Z/8<_#\))\><&2+W"*SN<81E$H?8]F +MJZA7L:JK.M"K9T?4NCY-05='JJ!'(!$`_2.+1T()4\+- +MEYUS)5[PK5,AJN;J#C'!)+0 +MB9<67+1G3?KQ9RMDVQLI=NN:8A^JG%3D#X\2/E*,&$DB`/V#H1!R:F! +MA^%/O/Y_1]>G#]9\7,^+WH(4GC\4B/2P+"BBA4HK4D6)$-[CFV5*-)&2B'2( +M?-/>@1.CG?H-46++4A/XH@ +M-6K"%5*JV0K(!1U5(-_;%!/2,9$)G=?CMM5]S63VAI3PZ#$DYD]C&))"67%*8:@BU:R0%@M4H@X"@F&I5M5#M'+R/FNI>8 +M\"<7XJ>25%8J&03[X!DDD1^=\'H28;V*Q#HJ;#QW`/@:G`$.:KWP$D4_9C?: +M+/P=X0\>WB(MA5%LBU%I9(/6(T@0YH<7LWR[LYX)$RCXA(JR$/,4#F/J#TD' +M]UWD/?$1Y^2'B.HB,/8+V@>/TSK2U\W2.?M)Z.71L/,#>'WO-Y3XC>PDFU='`T#H4I1=DA +MO0%#"=W<84?.0RO6([]N0EBR$D:4)258T&FD)BN%UPRRU?K+B+<-J&&N#0T< +M*VUU9I#(Q&*2J51528F"MUMTMNN[<[EQ8TW=TNF#7)E=W= +M+FS(0++R$IC%*1L&0D"1*P*%:MUDK<6D*1DD2PC`MM(6+E-16DU/5RL9&X+$ +MD[(5EZ7D,(R+((2BT:0"K0I&K1I+(6M%=G+==G.=KE=-VHXNFZF_,0X%B:WF +M2RVJN07\OZ9(X1&ED2/F^M/2>X?E=H.4FE8A5*%B1'K/6]?<*=,3Y8KTG,7E +M`!'*BT1SQ'"?S0DYUS;(JPJ%#A$URASLC]]%IH`CJN`1JJ#W@P#9,BI!'1IG +MMG?,5L))30C@DS"L0!&(W5A^SKO4FS+0B9EX1?JBC02K$D4L@_@.LPLG5S&J +M.BLA);(3*F6`Q*D%AM]L=B'FQ(YUUC.TNDL3$D!LQ$,2085+8SF5KF*C%YW8 +MZ5=;W56MVQ%.B*\4IP-%#D"'U!1J&2,(CC4B"P@0P#OWZ0MI(/+>^Y4L]@5@ +M>HW(N#J%V`\YN30`AQ4%@(KP%:TD4T*PC0(1)Z:@8,`P$6JI"``IVNJT8=)! +MX$%R)1$65"H9[/`74:Y`R31"=J@G=T=N3W68@R9TY0]FVUVVRLJ6M:R$V"2? +M`EJ&I'"DF1)[]DT)\_?3IRV$,@"-2D9%.Z)5`)FJ29WN*JCC-<\:V$.(DXLY +MLF]YA"T%H.;SF9K6M7:();))0B6:JI$T_9\;9W*.UUE==KE;]!B$,Q@`B$@H +M%B*TTUHC);5V]7/&\]U56YL3+*0$A041J21-DR8"(UHEL@QMI(2W=YW:R,:S +M)=%:WCA!!=DD\VV#A)76EL@M2U3$8-MEFU25MY9=+W5I1T-,D*B6"+%0546R +M*I:C>Y;,&BJ*3)%A&6*P4RV2K:M*J"RFRHF+XCB'"`W\#UP"85SHCE"E`EWH +MR*",81^&W036U9I5M58UL;35]/;AQN.ERWL:25',?U)(D74]85ZP%V*;^94X +M%3&$X\1WY@F14XD4#1^MQS'1&H2>%D.Y40U)^^/]F-N(5Z/'2XO +MOU3-&KJR6]C9LX]`;@*1#P_TOQ_I^;\/T/NU/I^.[G&XXNT8OR7T^_Y.9#(F +M,*!U:4`8`9'IPN+I@3-EP9*4]-9Y*A;C4\^N]F@TUZ:K5]^)APT51=KUYE'9 +MHAI4T[R)IE::U>6;\D=L5WN]!4//E<+&O.F>3KOK`ZZ`A-W=;.K+^_?+*P\D +MK34]>K?!YYFTMZ8AZFK$A=@1KCK(==0KAGJSCT\>GC1TVEZCW*-CCZR5GJKU +M1D,M[);+J]"@$"4**+979<-3$*@"BO'- +MZE%>>^0L\)7BHF_*8<=8D)R8[-NBM#&E3CV]O;>][WOPKJJ=A79_(8[MQDR5 +MQPM6[:RSOWSOY\=HWU68\:>LW?:*=Z$=:GJ3K0:B&(J(Z[JF,NR;7)OUQL9G +M7YO0^4K7/%E]44^X!NY1P/#10M`5T7)PKAJ+ +M$F^%A7:#V[7Q:I)-!0RLH8A2QG.F>>O7;ID +M^\]A3Z)16JFO0/<:UXTT]._!>F_3]_R?JWS))%L#OGN[ +M-N]@CE``4*(^:&BBSEB3I985V@[[[XM4DF@H1-*GA5JT&OF]\<'S]2<"B +MB*610VHTIZ[LM(K]BX:=U;I-FQ)HV&18Q.DE*E2S8:AXL+9!5D6E4BV+8 +M;14T&.[1HTI&LLM3`>'2&"5*;%-*23E21RU"1/2K422*I`6606Q$F:T:MI+6 +MHL62VU))"*H)-&X43<@YTJVVRJNB;=1)EUFJUT=7)N1PP4"C)[EFVCRH +M]%)P.[)UI5+2TJBBBBBBHHHHHJ42J6^I1U%#T%#E*/)NVPZ)T[WB98XG19:M +MMMGNT1H4=!1U@1*=RAR5;;$><68QEES,MSU\1:MEBRVU@VCPZ:&2DVB%AJRA +M01*6FFA13OY^?CWDR&8Y))88.9EXLF9)+S!DS)0!\'88(4>Y1[A2 +M4IX*;>:ZW.F54N9JZR!J:TT-FD12>:1T=F#9^.N6CW137&ITS79RY7Z3][RK +M]S,ML5(54O2+Y)"?"O/`;B/XR:DGGBO2P^`-$^5^BF5%'91V$4@JAVPD2U$C +MLB3HIW__"V2DJ#4E)Z3V62-BI!1N61/W_\OWN[??OLY\8?Z2J.)IF +M)+E+,MG[^2"AR05EEM5=O@/!AZ+(\*Z +M/*)(V#1C&+,B2_F^[**9%%8Q4$,@AZ57U(`'!,"GN1)^<(G9J?T=T(]8X0?EL +M)CV=!Y*IY0'K07D=R9$>7,-HR$8ZT*0]`M5$>40\BC!!\D5=`)ZD@.O=Y?+< +M3&+AYR)$KR(>4PIO$0R'FB0&0:2EBI2J44/X_F$3_:E^;J/T(>UJR`KO]L.) +M#V2/PEBR'X/L,F9IVG5VM)6E(J92;\-5TTO+L:HG*\C22R&)',[17 +M4]A_%(3I&BNHAU5(E63Y>".B'NZ)8_%#K$D>?_1AH8'J>IT'/PAJ +M*666)"0V/=$D1X$`-X,$GHU%\D8L%X)V]S^,/P5;;/I98JU?#,?MCU9PL35W +MM_0PK$FX8/:-R1S9":.668.8@O0K$`7B-4XZH(H8&"@A0((:=38B9(:DDW&M +M(ZR-N:+9+76*P*2)4C^>1J2:C@$3^:SA.G[[+4JR.*_?H$,A%11))]99`X2D +MQI@85;;(&6<0G]/]GU?V?V<_3))(TU#"K(_M)NJ;4M4LVU-1DC1B9_/VT_&O +MO:7`)>TT5.8)UB,`5.M-@!&J$5).>J',21.RK4D-HD.*B*"A^>,2:C=#\V1.6M-$RF3K".O4Z(X.8H9&I(=(Z=8XC3ER':01RX_ +MB_AMZIRXF*J2?A(?V][[>KK5^V=E$S&EFTPS(0C!C`%^AS#2"E6BIEX;@E:@ +M2V30BFF86!F)D0IF2G&+2:4632GXT=;(J+:B6I+%"RC8Q9-%BBP:(M)1:U?O +M_02"1;Z[4U;^/>6V^M/(I\"'N3C!^VK%[3)LN#@JOA&36F> +MYG]2'=E]$GPDB)X%4W`D]H1TC.R=B/1#C]1J*GQ5`0^H8$.GYA7B>LG02U&L +M(^@1I42(OHC]J'DR?4]S+%FS#]K5??'^,/SQ^I\7O?.1/R$^OXOPXD![V$+A +M^;[8^\(G)*(0'PAR#)W$2D*/;1,*J\A'U-4[PWGU@0[44#E.A01X"HI/')X` +MS5]55:A3.'+V?IQI)9U)J%?!))7*MOZ71 +MJ=(Z$(QG19)C'17OTO$.Z)1H[.3).B5>UEO`DW,UCU#?;BYE>](('@[R/=U= +MKL4H7]1*BV!4+2@P&(E/T!-9(K)(;XX<)_5#;V1'K2K49E1MM&*TLM"IL;&2 +MOS6V=VV5K*V-8K=-;=935FBMBQM;0RU2S5LT65JMB!31?S'910R3;&1IK&L6 +MQMJ-8&8VEFI9E*3,DF695:2J9M$M&&Q;&VHU@*E3:LR*M)D$C4S;:5-JJ*M3 +M:46VFFUBT4U26AE3%B6P6R6HKN?HTC$T_%#\A^"1/>.\1$^9858M5:7CW!2# +MYE@2T3W1#XQ^A(]3VG![W[UOE8UK)BILM%C1;:S)09!!/2=7!7)L>5]-A)&$ +MA(1^K#I17/,V;RUUPU);^.S4MOO==4`T2G$-MN9V/E'RC'15^V(=)`/B](A! +M6>I-P-34/+&$9$'])/9R>^VP581:1Q%8LD'8JST+`F2)NRU(L4A5)XC4AT[1LGQDGT(> +M3[9`_+7WU?S=&1,1%TMDI+NM3X0D^*.]+;?)&9EG%:7+BM!E9=EN-HH7-BYK +MR2MDVLK[\&%44*M)$^T0B5NR#']56KJ^=M7\0``;?SK7E\T-DP>#V;K-(2+; +M4M@6S`!"1'$3$"[E22@I4:!;L"!8VJ)`LL@E#:R[BT4T-`R1^WY8&JU4":MN +MX,"P1I$2VUA=Q'5%EA8R+,@RCHU(8TP8IM@HLABHJI$ITQ#$J)5DFK+4C)"B +ME1*U^?:NW]BW.:2BBC&[;)L-9;56PJREGD<*'],>_XT$+[_0388`<55$^57X +MN`>1.E>@0P!H)JRK;=JM]-,5O:;/M8PIBS7UCZ-:L?GBL4&@P\.Y(3LZPD]A +M]BQ9(>\\21T-))U-)'+]LAXB._T'"2=26*'"65"]GU_9(1/A4>9Z0T\1S(?P +M=?6TL2/A9*JVK5A5VUYL)HQ0==5TI^@DR1N"QD +M32R?8GS![020\O-DGT#N3M,]J>->\.[8ASY'"6MTB +MUBK;FJYJI,;;%94%J%L2V23%).U&"H_$R;DK\4KZ*W,05A+;;NWKS:M_%[9( +ME2:&$:LC(6)#5!9$85I(+"/X-\14J=1YFI(Q-I'&D +MC$9&)(C%'V221L=8IT;3AK$0Y")8CBR$ZV#523=B&[JR";+-ZQ-61INYPK8) +M86.-N-Q;;&(&(@Y(J"8T+:41&RD1<`@PFFA%$4P@",`5!LD19DFB/", +MDZ1Y6"K(="P,BA9/*+VB3N'N3CEV(XAUD$D[$^G3OFU6E805BD!&$DQC&P(1 +MR(Q@KDVMWU0B5>_*KQKG4<;YVB79D29<;D&K$)=\QOC6]\72)-#ER;)+)+(I +MV<[-1V+N".P295I;;Z8Q"HE-L>["HG::B*&B9OB30>*. +MDB0C($"*D98(D\(A43B';$B24\FYYQ9ED943#:U?2OBF5M:NU6JEF[J2%&R( +MFZ.GQ6_X3T!MU\>8^4?'WS6X61[>`_6_75JU56$JU:JJJJM"R1Z^QL1&5XQD +MB)VQ["$.U0U-"%`-6(:1.E`JJKH55JH/;DS&0"0#2T+BA20F!LO*=URC7-:4 +MN1;1N;5TL[K;D5TW+>+QH\72MSHZX$/&J\;4EI;RZVKKX=:E>=M=MVVBU:SM +MTDW,E;LJ-KJPT;7.454FT5-W;5R;44N[M)8C1M&(6Y*2Y;WZJ;8 +MQQ#H%=`:%)Y1^-^*K)8I[[GG]_&(3&*8ZM\P)\![Q\P9:8&!W1,N3(X&2-#A +MJ:F--5IT&IJII-DA^1(,D#Q(2:)VI/U(?#=[\28E++)!4&0PPI" +M^_15,10205!!@F/@/?3@;"N$4^*"@]B)Q/)) +M)!C%A\V@T%!QLKXDZTJ'@=I`[CQ?2'*I18)&`J$6"^4%#XXB@'8,;F)$9+`, +M5(2V)"3Y75(JDU2?2I)&4A:A+9-2DG:+`:L0EL@=EA!5)5B"E(.B1HA20Z'U +M-)(C29\]^0YDD2^TU:WY?2IJULUC4F1"#`A(Q@D2*R*OD'H#B>(#P40>SYB# +M]QY^2#Q(^D4>^-P]I/5N*MC1\3_?:2$8%O>FN3`PR0PF+BMP.4L^1*_;=M\\ +MXS)53,LN3@U`S!A%+!>@1W@KJD#90WIVI0?>3R1W`;S.Y?,_UXTV'UV$&?6) +MJ&:7SYMD'9Z07RAJ'@#W=RY4P`QG7N;X)S.9"$A`B213QIWHFQB#XA%-CM7Z +M@'N7N3CTIV]A@1[H#VJ]`7K$WIIZU01[#Q];1^0@.7I'M\)/<63Y_>17YE/D +MZ,G8A/8.C]1X,/BM"WD?1O8RN_SDJF"(.PQ1(0(L*$9)*(461^5C)'YG^'VJ +MG:1_.D^>NKYOG'>PM(6I%L@MB6I:-8U&K8L:E3:JI2VI+7Y.J<5(_-6*(EH2 +M<1PCR]!H=)HDVG>$/!%DGT1L1)J.UBD-I(C*M'JGO/07B>9)(YCY<23]D;Z;5E=7`^G?>\Z?IK +MJYHC5J/%KE`_.?/CN7<\1-YN1"1D`D5C$$&BT*1`:46PD1(0 +M!*AU(GM)")M#:J2615B3U6*B4R33"6UD5B8BQPS(IJZMBU=&JJIB81D+`^]^ +MZ'5W?RA[%*G@=J\X'(D)Q'D,-4]]7A[4AQP!W%<$PK[C@!R/*&P(>,1XO)U4 +M&+T`1&2,AV:@`O>B81#VC1C%5'J/*(L!13\(`C%0'[=`!&BO1-R&O%#B?6D` +M(M(*XW]HJ9%4]$42G,5,OU$?Q1]T/A%.L0/)RG1)8BI!*<(N1]"D0*EF(%1+!+$6;1JE:)82"IH>85<`(:(N5 +M@5>E.Y7FE4R$4T@(.@C$60B0B'<62O688`!`GD+K\:WN8GY,"H$``>=*B"[J +M)(4=%A`T=Y^SHJ9`EZLLH_>C=\X2KS3L(>KUO8$&@O?CDP,&E%](;LH.^[VF +MT26MQKK".(]%@%$Y$2^I$D"@$!.FQ'$`((`X$;A[Z:VR=IE[:E&UUIL,H;8B +MM-Y?(-P@*K[<]LV-K)HSC4C/.D3&HE;AY6:GMV*77KZ$F8:#UWSNBZF>OL=E +MNS7#Q"KYO+]:JOREG'DZUGE*^*.\.4--#X-#XL+NCY3=PFYW<_3LBW/-[<.I +MF2E,1D?I`A]9S)FIY8BU1:$!/3N\L/=6GUOPK7>X;C7=A=[FUR@7`DKMPN`7 +M>6/MFJD%HDF^R!LQ[B:V[,\;\7=5*'9DZH\)F^'7-5;_0-U7B1BO*F-O@8YE +M1LXL##WM,=U.J63T5S7@4Y4TE*HN,3J.[&U52R3T8X&F(Y5,:8Q6*9*55EK291I557IQW;3U4VP8<'I*PI719BX4K&"JJI@X>S-[,>*\6 +MZ:U&]+*;4Z6W1N)X::?&V;K%]K203@>9JBV`@$'GS$?;!9"\$K&K$TJ-1894 +M>O#<:GK8X1%M+9.:Q4MB[--&JE$FVDZ0HQ,U?8R`%7M5VKMJO;2[^*[\XA-D +M2J^=*G4<417&%V-Q[QT1#0^O.@UC(\&)&FO1)MWB5M4;/W^'LV6-N_6D-45; +M%5)I%2$U:U;5D%EC(J9:Y'8LC%&@M)U9S)#<;:C'GBK5OX"^R1'6>>_:0DL; +M0V8=!&K:54"Q+#ZA89(BHX,*"X1Y'*B@E'B.A)(Q.[7'EU[NM5MU7D`*]R&I +M1YGRJ2(;CMYDZ]W9.RKJ-$W.@\J"053179SA,&'#'0"<0".G'R_1^;CII$][ +M6O'-'JB%DQ?%[).K"]&DDLM0M*.Q^SRR+5:U"THTYDHM*HCVT%?J-4:$[HP^.\MW*M[R4_&6*K]%Z_DGRM&_2:YZBJY;NX>2Z+$""`=>_?Q[7S +MK6M:76RJZ.B`?!\EFAW!8HQ0(Y#)&63)8O.!H)";ZDJ +MBD%:0+7%()/G%.HVN@LA1+(-Y%HM#%/>[HV#7X=RN=78$;:2FBZ4*I94M%4L +MLNO?C*WO'K9O>#K[_?XSSTRJW\SL:[0CSOOG.NUOKONIXE4$;2(!C&,8P3BR +M#!".=E9L')`4@#.6-LW0T3&R=1>2D60D&*QB0DB"T*";D:?E* +MB47W")UD/#69`/'KU[SENE77G=YP$`Y&'H4Y#S*8W$;BD8226VZFK+W)?#<( +MQR*ZIWI&T;K9:5XNG[RBF9`LO/W3VK>WV3NLOQ9WF,D4AG:DM:[MBTI8J2QM +M%1BQMVOI4M<\VX3H**E9HQ$R<::DR12O,R$MBJ[I[SCFW=>)V31/1.)D5!(@ +M91IKLNC#-D)6&`U*55DHZUYNKO)JX-O*-8B6E0Z=%U'E7,D=%7=>JV5)E49A +MHHJZ*TXZ9HE!C;9DG%KE93E%V/3M;224B6R)825$I>&G'#'O,D:26"]K:J+? +M=-Q<598R[MLD@M1MK*V)L&J(-&C"".VU-=4CC$DM2HCA9)D+"/`?'5]W49J#OM<+.HX<6VVV&HQ4CT9-)&KZTJW,@2D.5\0:2Z.B;I!T +MJG>5E9CR]]'10\SN@FBX>(AH*Q$$(%PXU/$18@C0B\"G@)$!0Y4'L4>9HANB=P<;8L(XW),8N3&#"I"QDQ`'-&N1"*K"/ +M!0#<+P34X)3@?$B,CJZL'Z?R=[9"R60]ZHJWLB)T+A/A1].5,(FY0-_"!(O- +M5R)E%%J]@',[>O*CJ,4"20"$(DC(KYZNJ)DC:#2OJ[-HI((8Q<$C95A+6R%H +MI2"\\8`<.^G9[W;U=+%YU>7O73W:C35,:TJU+8-*TDJ62I&0V)!A#5)LZU6M +M[?'F]T*0/7>MT48R3)J[3=DTR4L)-1%H2HV4B:*0P,S,V-=>;M>`I2M38S:6 +MS3)IDI82:B+0E1J9MMW@MUMUEXBDD#!=%7FKJZV^+S5U>5[4KXO/1()#RV2V +M:FN;5>ZXUH,+I(FK:%MDS(C%A&,[:\[32:\:W+$7+;E46WVM?*"-)\=B'&A3 +M",GB#U'5]AYC4G$FV&8HXM'"C@"B$\:C(,,G$]B:0IX!TP1R(["G +M9%#N!44-A\JO9O!+8D6M18,$61411"HLG?D/7Z`[8DA(P?/!"8EL;&3L8RT4 +MQ(!@K;:/KB?$3_V)_YL?;41W^D1ZI0#F04&,59`03VE.]-D"19))4^(QVDA5 +M'J3^5AUBG\WRCNB>XX0'Y1?+S8$8(0^<34/`U5('L4(R&'1[26)W01*A*[PC +MH60^4?//9I955?[\;&T>'#V'EXC[^8D1.Y\[:D54'UB$A^U2."?C5]?:];BY +MP.;A)VU?R[:U^>IM::]J(E"0A\QXA/]4U.U(GFGPJ\1R@F[*U-Y[!?0AZ^@[ +M@ZRVX)C!)987`=1#3OXA@DDG:*26HAN+8XBFXIX/0F#9-Q9:3B,LD<2;PZ8A +MJ$LM!&;SZ!#5."L$XN@5(0^**5^>I`(&^)@$&U-Y\?0-;.0LF+)5GQYF&DN,UDQ$;;3:ADB&F,? +MH*C$-L3@K2I)B33B!=!3F66%!<+LHA"R%HA9AJO^%#8<<6\:3#*%E@R57*]Z +MELR2CET# +HB>?E'OI*J+26P6VU*JC]E@?6\>Y_-!$,@B'[8C__%W)%.%"0D/CAD0`` +` +end --- gcc-3.4-3.4.6.orig/debian/patches/libstdc++-doclink.dpatch +++ gcc-3.4-3.4.6/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 @@ + + +

The other type is the source documentation, of which this is the first page. +@@ -78,7 +78,7 @@ + +

License, Copyright, and Other Lawyerly Verbosity

+

The libstdc++-v3 documentation is released under +- ++ + these terms. +

+

Part of the generated documentation involved comments and notes from --- gcc-3.4-3.4.6.orig/debian/patches/gpc-version-fix.dpatch +++ gcc-3.4-3.4.6/debian/patches/gpc-version-fix.dpatch @@ -0,0 +1,46 @@ +#! /bin/sh -e + +# DP: gpc: Declare global variable 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 + +--- gcc/p/options.c.orig Sun Apr 10 01:23:17 2005 ++++ gcc/p/options.c Sun Apr 10 01:26:37 2005 +@@ -31,6 +31,8 @@ + #include "options.h" + #endif + ++const char *lang_version_string = GPC_RELEASE_STRING ", based on gcc-"; ++ + /* An array with all long Pascal command-line switches. */ + static const struct + { +@@ -915,8 +917,6 @@ + version_flag = 1; + if (version_flag) + fprintf (stderr, "GNU Pascal version is actually %s, based on gcc-%s\n", GPC_RELEASE_STRING, version_string); +-#else +- version_string = concat (GPC_RELEASE_STRING ", based on gcc-", version_string, NULL); + #endif + + lexer_options = compiler_options = co = (struct options *) xmalloc (sizeof (struct options)); + --- gcc-3.4-3.4.6.orig/debian/patches/gcj-without-rpath.dpatch +++ gcc-3.4-3.4.6/debian/patches/gcj-without-rpath.dpatch @@ -0,0 +1,118 @@ +#! /bin/sh -e + +# DP: don't define runtime link path for java binaries and libraries + +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/Makefile.am~ Mon Apr 1 11:29:37 2002 ++++ src/libjava/Makefile.am Mon Apr 1 11:42:55 2002 +@@ -109,6 +109,8 @@ + + ## ################################################################ + ++rpath_def = $(shell if test "$(toolexeclibdir)" != /usr/lib -a test "$(toolexeclibdir)" != /usr/lib/.; then echo -rpath $(toolexeclibdir); fi) ++ + ## + ## How to build libgcj.a and libgcj.jar + ## +@@ -423,7 +425,7 @@ + ## need this because we are explicitly using libtool to link using the + ## `.la' file. + jv_convert_LDFLAGS = --main=gnu.gcj.convert.Convert \ +- -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++ $(rpath_def) -shared-libgcc $(THREADLDFLAGS) + jv_convert_LINK = $(GCJLINK) + ## We explicitly link in the libraries we need. This way we don't + ## need -nodefaultlibs, so we can still rely on gcj picking up the +@@ -440,7 +442,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 $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++gij_LDFLAGS = $(rpath_def) -shared-libgcc $(THREADLDFLAGS) + gij_LINK = $(GCJLINK) + ## We explicitly link in the libraries we need. This way we don't + ## need -nodefaultlibs, so we can still rely on gcj picking up the +@@ -456,7 +458,7 @@ + ## This is a dummy definition. + EXTRA_rmic_SOURCES = $(rmi_java_source_files) + rmic_LDFLAGS = --main=gnu.java.rmi.rmic.RMIC \ +- -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++ $(rpath_def) -shared-libgcc $(THREADLDFLAGS) + rmic_LINK = $(GCJLINK) + ## We explicitly link in the libraries we need. This way we don't + ## need -nodefaultlibs, so we can still rely on gcj picking up the +@@ -472,7 +474,7 @@ + ## This is a dummy definition. + EXTRA_rmiregistry_SOURCES = $(rmi_java_source_files) + rmiregistry_LDFLAGS = --main=gnu.java.rmi.registry.RegistryImpl \ +- -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++ $(rpath_def) -shared-libgcc $(THREADLDFLAGS) + rmiregistry_LINK = $(GCJLINK) + ## We explicitly link in the libraries we need. This way we don't + ## need -nodefaultlibs, so we can still rely on gcj picking up the +--- src/libjava/Makefile.in~ Mon Apr 1 11:29:37 2002 ++++ src/libjava/Makefile.in Mon Apr 1 11:44:02 2002 +@@ -195,6 +195,7 @@ + $(GCINCS) $(THREADINCS) $(INCLTDL) \ + $(GCC_UNWIND_INCLUDE) $(ZINCS) $(LIBFFIINCS) + ++rpath_def = $(shell if test "$(toolexeclibdir)" != /usr/lib -a test "$(toolexeclibdir)" != /usr/lib/.; then echo -rpath $(toolexeclibdir); fi) + + nat_files = $(nat_source_files:.cc=.lo) + x_nat_files = $(x_nat_source_files:.cc=.lo) +@@ -267,7 +268,7 @@ + jv_convert_SOURCES = + EXTRA_jv_convert_SOURCES = $(convert_source_files) + jv_convert_LDFLAGS = --main=gnu.gcj.convert.Convert \ +- -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++ $(rpath_def) -shared-libgcc $(THREADLDFLAGS) + + jv_convert_LINK = $(GCJLINK) + jv_convert_LDADD = libgcj.la -L$(here)/.libs +@@ -276,7 +277,7 @@ + + + gij_SOURCES = gij.cc +-gij_LDFLAGS = -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++gij_LDFLAGS = $(rpath_def) -shared-libgcc $(THREADLDFLAGS) + gij_LINK = $(GCJLINK) + gij_LDADD = libgcj.la -L$(here)/.libs + gij_DEPENDENCIES = libgcj.la libgcj.spec +@@ -284,7 +285,7 @@ + rmic_SOURCES = + EXTRA_rmic_SOURCES = $(rmi_java_source_files) + rmic_LDFLAGS = --main=gnu.java.rmi.rmic.RMIC \ +- -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++ $(rpath_def) -shared-libgcc $(THREADLDFLAGS) + + rmic_LINK = $(GCJLINK) + rmic_LDADD = libgcj.la -L$(here)/.libs +@@ -293,7 +294,7 @@ + rmiregistry_SOURCES = + EXTRA_rmiregistry_SOURCES = $(rmi_java_source_files) + rmiregistry_LDFLAGS = --main=gnu.java.rmi.registry.RegistryImpl \ +- -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++ $(rpath_def) -shared-libgcc $(THREADLDFLAGS) + + rmiregistry_LINK = $(GCJLINK) + rmiregistry_LDADD = libgcj.la -L$(here)/.libs --- gcc-3.4-3.4.6.orig/debian/patches/gpc-doc.dpatch +++ gcc-3.4-3.4.6/debian/patches/gpc-doc.dpatch @@ -0,0 +1,38 @@ +#! /bin/sh -e + +# DP: gpc documentation: Fix hyperlinks to the example 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 + +--- gcc/p/doc/macros.texi~ 2005-01-01 23:47:29.000000000 +0100 ++++ gcc/p/doc/macros.texi 2005-08-09 11:25:36.472607454 +0200 +@@ -49,7 +49,7 @@ + @end macro + + @macro xhrefexample{FILENAME,DESCRIPTION} +-@uref{../demos/\FILENAME\,[\DESCRIPTION\]} ++@uref{../examples/\FILENAME\,[\DESCRIPTION\]} + @end macro + + @macro htmlhrule --- gcc-3.4-3.4.6.orig/debian/patches/ada-gcc-name.dpatch +++ gcc-3.4-3.4.6/debian/patches/ada-gcc-name.dpatch @@ -0,0 +1,106 @@ +#! /bin/sh -e + +# DP: use gcc-3.4 instead of gcc as the command 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 + +diff -ur gcc/ada.old/ali.adb gcc/ada/ali.adb +--- gcc/ada.old/ali.adb 2004-02-21 15:23:32.000000000 +0100 ++++ gcc/ada/ali.adb 2004-02-21 15:23:57.000000000 +0100 +@@ -260,7 +260,7 @@ + Write_Str (" is incorrectly formatted"); + Write_Eol; + Write_Str +- ("make sure you are using consistent versions of gcc/gnatbind"); ++ ("make sure you are using consistent versions of gcc-3.4/gnatbind"); + Write_Eol; + + -- Find start of line +diff -ur gcc/ada.old/comperr.adb gcc/ada/comperr.adb +--- gcc/ada.old/comperr.adb 2004-02-21 15:23:32.000000000 +0100 ++++ gcc/ada/comperr.adb 2004-02-21 15:23:57.000000000 +0100 +@@ -292,7 +292,7 @@ + End_Line; + + Write_Str +- ("| Include the exact gcc or gnatmake command " & ++ ("| Include the exact gcc-3.4 or gnatmake command " & + "that you entered."); + End_Line; + +diff -ur gcc/ada.old/gnatlink.adb gcc/ada/gnatlink.adb +--- gcc/ada.old/gnatlink.adb 2004-02-21 15:23:32.000000000 +0100 ++++ gcc/ada/gnatlink.adb 2004-02-21 15:23:57.000000000 +0100 +@@ -123,7 +123,7 @@ + + subtype chars_ptr is System.Address; + +- Gcc : String_Access := Program_Name ("gcc"); ++ Gcc : String_Access := Program_Name ("gcc-3.4"); + + Read_Mode : constant String := "r" & ASCII.Nul; + +@@ -1287,7 +1287,8 @@ + Write_Line (" -b target Compile the binder source to run on target"); + Write_Line (" -Bdir Load compiler executables from dir"); + Write_Line (" --GCC=comp Use comp as the compiler"); +- Write_Line (" --LINK=nam Use 'nam' for the linking rather than 'gcc'"); ++ Write_Line (" --LINK=nam Use 'nam' for the linking rather " & ++ "than 'gcc-3.4'"); + Write_Eol; + Write_Line (" [non-Ada-objects] list of non Ada object files"); + Write_Line (" [linker-options] other options for the linker"); +diff -ur gcc/ada.old/make.adb gcc/ada/make.adb +--- gcc/ada.old/make.adb 2004-02-21 15:23:32.000000000 +0100 ++++ gcc/ada/make.adb 2004-02-21 15:23:57.000000000 +0100 +@@ -650,7 +650,7 @@ + -- Compiler, Binder & Linker Data and Subprograms -- + ---------------------------------------------------- + +- Gcc : String_Access := Program_Name ("gcc"); ++ Gcc : String_Access := Program_Name ("gcc-3.4"); + Gnatbind : String_Access := Program_Name ("gnatbind"); + Gnatlink : String_Access := Program_Name ("gnatlink"); + -- Default compiler, binder, linker programs +diff -ur gcc/ada.old/par-ch10.adb gcc/ada/par-ch10.adb +--- gcc/ada.old/par-ch10.adb 2004-02-21 15:23:32.000000000 +0100 ++++ gcc/ada/par-ch10.adb 2004-02-21 15:23:57.000000000 +0100 +@@ -224,7 +224,7 @@ + else + Item := First (Config_Pragmas); + Error_Msg_N +- ("cannot compile configuration pragmas with gcc", Item); ++ ("cannot compile configuration pragmas with gcc-3.4", Item); + Error_Msg_N + ("use gnatchop -c to process configuration pragmas!", Item); + raise Unrecoverable_Error; +--- gcc/ada/gnatchop.adb~ 2004-01-05 16:20:44.000000000 +0100 ++++ gcc/ada/gnatchop.adb 2004-04-25 09:33:51.000000000 +0200 +@@ -43,7 +43,7 @@ + Config_File_Name : constant String_Access := new String'("gnat.adc"); + -- The name of the file holding the GNAT configuration pragmas + +- Gcc : String_Access := new String'("gcc"); ++ Gcc : String_Access := new String'("gcc-3.4"); + -- May be modified by switch --GCC= + + Gcc_Set : Boolean := False; --- gcc-3.4-3.4.6.orig/debian/patches/ada-no-gnatpsta.dpatch +++ gcc-3.4-3.4.6/debian/patches/ada-no-gnatpsta.dpatch @@ -0,0 +1,55 @@ +#! /bin/sh -e + +# DP: Don't build the gnatpsta tool + +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-10-22 Arnaud Charlet + + * Makefile.in: Disable build of gnatpsta. PR ada/10110. + +--- gcc/ada/Makefile.in~ 2003-07-04 21:53:53.000000000 +0200 ++++ gcc/ada/Makefile.in 2003-10-29 11:02:58.000000000 +0100 +@@ -1609,7 +1609,7 @@ + TOOLSCASE=native \ + ../../gnatchop$(exeext) ../../gnat$(exeext) ../../gnatkr$(exeext) \ + ../../gnatls$(exeext) ../../gnatprep$(exeext) \ +- ../../gnatpsta$(exeext) ../../gnatxref$(exeext) \ ++ ../../gnatxref$(exeext) \ + ../../gnatfind$(exeext) ../../gnatname$(exeext) + + # These tools are only built for the native version. +@@ -1653,10 +1653,10 @@ + $(TOOLS_LIBS) + + ../../gnatpsta$(exeext): deftarg.o +- $(GNATMAKE) -c $(ADA_INCLUDES) gnatpsta --GCC="$(CC) $(ALL_ADAFLAGS)" +- $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatpsta +- $(GNATLINK) -v gnatpsta -o $@ --GCC="$(CC) $(ADA_INCLUDES)"\ +- ../targtyps.o deftarg.o $(TOOLS_LIBS) ++# $(GNATMAKE) -c $(ADA_INCLUDES) gnatpsta --GCC="$(CC) $(ALL_ADAFLAGS)" ++# $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatpsta ++# $(GNATLINK) -v gnatpsta -o $@ --GCC="$(CC) $(ADA_INCLUDES)"\ ++# ../targtyps.o deftarg.o $(TOOLS_LIBS) + + ../../gnatxref$(exeext): + $(GNATMAKE) -c $(ADA_INCLUDES) gnatxref --GCC="$(CC) $(ALL_ADAFLAGS)" --- gcc-3.4-3.4.6.orig/debian/patches/libstdc++-mips-atomic.dpatch +++ gcc-3.4-3.4.6/debian/patches/libstdc++-mips-atomic.dpatch @@ -0,0 +1,86 @@ +#! /bin/sh -e + +# DP: Fix libstdc++ atomic ops for 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 + ;; + -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/config/cpu/mips/atomicity.h.old 2004-03-18 18:36:29.000000000 +0100 ++++ libstdc++-v3/config/cpu/mips/atomicity.h 2004-10-26 16:40:09.000000000 +0200 +@@ -39,43 +39,25 @@ namespace __gnu_cxx + + __asm__ __volatile__ + ("/* Inline exchange & add */\n\t" +- "1:\n\t" + ".set push\n\t" +-#if _MIPS_SIM == _ABIO32 + ".set mips2\n\t" +-#endif +- "ll %0,%3\n\t" +- "addu %1,%4,%0\n\t" +- "sc %1,%2\n\t" ++ ".set noreorder\n\t" ++ ".set nomacro\n" ++ "1:\tll %0,(%2)\n\t" ++ "addu %1,%3,%0\n\t" ++ "sc %1,(%2)\n\t" ++ ".set reorder\n\t" ++ "beqzl %1,1b\n\t" + ".set pop\n\t" +- "beqz %1,1b\n\t" +- "/* End exchange & add */" +- : "=&r"(__result), "=&r"(__tmp), "=m"(*__mem) +- : "m" (*__mem), "r"(__val)); +- ++ "/* End exchange & add */\n" ++ : "=&r"(__result), "=&r"(__tmp), "+r"(__mem) ++ : "r"(__val) ++ : "memory"); ++ + return __result; + } + + void +- __attribute__ ((__unused__)) + __atomic_add(volatile _Atomic_word* __mem, int __val) +- { +- _Atomic_word __result; +- +- __asm__ __volatile__ +- ("/* Inline atomic add */\n\t" +- "1:\n\t" +- ".set push\n\t" +-#if _MIPS_SIM == _ABIO32 +- ".set mips2\n\t" +-#endif +- "ll %0,%2\n\t" +- "addu %0,%3,%0\n\t" +- "sc %0,%1\n\t" +- ".set pop\n\t" +- "beqz %0,1b\n\t" +- "/* End atomic add */" +- : "=&r"(__result), "=m"(*__mem) +- : "m" (*__mem), "r"(__val)); +- } ++ { __exchange_and_add(__mem, __val); } + } // namespace __gnu_cxx + + --- gcc-3.4-3.4.6.orig/debian/patches/ada-missing-lib.dpatch +++ gcc-3.4-3.4.6/debian/patches/ada-missing-lib.dpatch @@ -0,0 +1,47 @@ +#! /bin/sh -e + +# DP: Diable usage auf addr2line library (currently not packaged for Debian) + +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/gcc/ada/adaint.c~ Sat Mar 2 00:38:10 2002 ++++ src/gcc/ada/adaint.c Fri Apr 5 18:36:10 2002 +@@ -2214,7 +2214,7 @@ + } + #endif + +-#if defined (CROSS_COMPILE) \ ++#if 1 || defined (CROSS_COMPILE) \ + || (! (defined (sparc) && defined (sun) && defined (__SVR4)) \ + && ! defined (linux) \ + && ! defined (sgi) \ +--- src/gcc/ada/Makefile.in~ Thu Mar 14 12:46:04 2002 ++++ src/gcc/ada/Makefile.in Fri Apr 5 18:39:51 2002 +@@ -1169,7 +1169,7 @@ + system.ads<5lsystem.ads + + MLIB_TGT=5lml-tgt +- MISCLIB=-laddr2line -lbfd ++ MISCLIB=-lbfd + THREADSLIB=-lpthread + GNATLIB_SHARED=gnatlib-shared-dual + GMEM_LIB=gmemlib --- gcc-3.4-3.4.6.orig/debian/patches/multiarch-lib.dpatch +++ gcc-3.4-3.4.6/debian/patches/multiarch-lib.dpatch @@ -0,0 +1,55 @@ +#! /bin/sh -e + +# DP: multiarch-include.dpatch by Stephen Frost +# DP: updated for gcc-3.4 by Matthias Klose +# DP: +# DP: Adds the multiarch include directory (/usr/include/TARGET_ALIAS) +# DP: to the system include paths. + +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 01:44:11.000000000 +0200 +@@ -6,7 +6,7 @@ + + MULTILIB_OPTIONS = m64/m32 + MULTILIB_DIRNAMES = 64 32 +-MULTILIB_OSDIRNAMES = ../lib64 ../lib ++MULTILIB_OSDIRNAMES = x86_64-linux-gnu i486-linux-gnu + + LIBGCC = stmp-multilib + INSTALL_LIBGCC = install-multilib +diff -urN gcc.old/config/t-linux gcc/config/t-linux +--- gcc.old/config/t-linux 2003-09-23 20:55:57.000000000 +0200 ++++ gcc/config/t-linux 2004-07-10 01:48:41.000000000 +0200 +@@ -11,3 +11,10 @@ + 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 gthr-gnat.c ++ ++MULTILIB_OPTIONS = m32 ++MULTILIB_DIRNAMES = 32 ++MULTILIB_OSDIRNAMES = $TARGET_ARCH ++ ++LIBGCC = stmp-multilib ++INSTALL_LIBGCC = install-multilib --- gcc-3.4-3.4.6.orig/debian/patches/m32r-fixes.dpatch +++ gcc-3.4-3.4.6/debian/patches/m32r-fixes.dpatch @@ -0,0 +1,89 @@ +#! /bin/sh -e +# +# +# DP: fix for shared libgcc + +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 -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 + +--- gcc-3.4-3.4.2/src/gcc/config.gcc.orig 2004-04-22 00:12:35.000000000 +0900 ++++ gcc-3.4-3.4.2/src/gcc/config.gcc 2004-11-17 21:23:21.000000000 +0900 +@@ -1304,7 +1304,7 @@ + m32r-*-linux*) + tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} m32r/linux.h" + extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" +- tmake_file="m32r/t-linux" ++ tmake_file="t-slibgcc-elf-ver m32r/t-linux" + gnu_ld=yes + use_fixproto=yes + if test x$enable_threads = xyes; then +@@ -1314,7 +1314,7 @@ + m32rle-*-linux*) + tm_file="dbxelf.h elfos.h svr4.h linux.h m32r/little.h ${tm_file} m32r/linux.h" + extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" +- tmake_file="m32r/t-linux" ++ tmake_file="t-slibgcc-elf-ver m32r/t-linux" + gnu_ld=yes + use_fixproto=yes + if test x$enable_threads = xyes; then +--- gcc-3.4-3.4.2/src/gcc/config/m32r/t-linux.orig 2003-12-31 19:33:02.000000000 +0900 ++++ gcc-3.4-3.4.2/src/gcc/config/m32r/t-linux 2004-11-17 21:18:50.000000000 +0900 +@@ -23,7 +23,6 @@ + # to produce a shared library, but since we don't know ahead of time when + # we will be doing that, we just always use -fpic when compiling the + # routines in initfini.c. +-# -fpic currently isn't supported for the m32r. + + CRTSTUFF_T_CFLAGS_S = -fPIC + +@@ -40,3 +39,12 @@ + CROSS_LIBGCC1 = + LIBGCC1_TEST = + ++# Override t-slibgcc-elf-ver to export some libgcc symbols with ++# the symbol versions that glibc used. ++SHLIB_MAPFILES += $(srcdir)/libgcc-std.ver \ ++ $(srcdir)/config/m32r/libgcc-glibc.ver ++ ++# Use unwind-dw2-fde-glibc ++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 gthr-gnat.c +--- /dev/null 2004-11-01 19:04:23.000000000 +0900 ++++ gcc-3.4-3.4.2/src/gcc/config/m32r/libgcc-glibc.ver 2004-11-17 21:11:56.000000000 +0900 +@@ -0,0 +1,21 @@ ++# In order to work around the very problems that force us to now generally ++# create a libgcc.so, glibc reexported a number of routines from libgcc.a. ++# By now choosing the same version tags for these specific routines, we ++# maintain enough binary compatibility to allow future versions of glibc ++# to defer implementation of these routines to libgcc.so via DT_AUXILIARY. ++ ++# Note that we cannot use the default libgcc-glibc.ver file on m32r, ++# because GLIBC_2.0 does not exist on this architecture, as the first ++# ever glibc release on the platform was GLIBC_2.3. ++ ++%inherit GCC_3.0 GLIBC_2.3 ++GLIBC_2.3 { ++ __register_frame ++ __register_frame_table ++ __deregister_frame ++ __register_frame_info ++ __deregister_frame_info ++ __frame_state_for ++ __register_frame_info_table ++} ++ --- gcc-3.4-3.4.6.orig/debian/patches/hurd-changes.dpatch +++ gcc-3.4-3.4.6/debian/patches/hurd-changes.dpatch @@ -0,0 +1,52 @@ +#! /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. + +--- gcc/config/t-gnu.old 2003-04-27 15:01:15.000000000 -0400 ++++ gcc/config/t-gnu 2003-04-27 15:01:48.000000000 -0400 +@@ -1,2 +1,3 @@ + # In GNU, "/usr" is a four-letter word. +-NATIVE_SYSTEM_HEADER_DIR = /include ++# Overridden for Debian GNU/Hurd (hurd-i386) ++NATIVE_SYSTEM_HEADER_DIR = /usr/include + + + + + +--- gcc/config/gnu.h.orig 2005-08-24 19:11:28.000000000 +0200 ++++ gcc/config/gnu.h 2005-08-24 19:22:56.000000000 +0200 +@@ -10,7 +10,8 @@ + + /* Standard include directory. In GNU, "/usr" is a four-letter word. */ + #undef STANDARD_INCLUDE_DIR +-#define STANDARD_INCLUDE_DIR "/include" ++/* Overridden for Debian GNU/Hurd (hurd-i386). */ ++#define STANDARD_INCLUDE_DIR "/usr/include" + + /* Implicit library calls should use memcpy, not bcopy, etc. */ + #undef TARGET_MEM_FUNCTIONS --- gcc-3.4-3.4.6.orig/debian/patches/libffi-without-libgcj.dpatch +++ gcc-3.4-3.4.6/debian/patches/libffi-without-libgcj.dpatch @@ -0,0 +1,65 @@ +#! /bin/sh -e + +# DP: build libffi without building libgcj + +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 + +--- configure.in.orig 2004-08-03 00:53:36.000000000 +0200 ++++ configure.in 2004-08-03 00:52:35.000000000 +0200 +@@ -136,8 +136,7 @@ + host_tools="texinfo byacc flex bison binutils gas ld gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar" + + # libgcj represents the runtime libraries only used by gcj. +-libgcj="target-libffi \ +- target-boehm-gc \ ++libgcj="target-boehm-gc \ + target-zlib \ + target-qthreads \ + target-libjava" +@@ -150,6 +150,7 @@ + target-libstdc++-v3 \ + target-libf2c \ + ${libgcj} \ ++ target-libffi \ + target-libobjc" + + # these tools are built using the target libraries, and are intended to +--- configure~ 2004-08-28 02:31:04.000000000 +0200 ++++ configure 2004-08-28 10:55:28.000000000 +0200 +@@ -876,8 +876,7 @@ + host_tools="texinfo byacc flex bison binutils gas ld gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar" + + # libgcj represents the runtime libraries only used by gcj. +-libgcj="target-libffi \ +- target-boehm-gc \ ++libgcj="target-boehm-gc \ + target-zlib \ + target-qthreads \ + target-libjava" +@@ -891,6 +890,7 @@ + target-libstdc++-v3 \ + target-libf2c \ + ${libgcj} \ ++ target-libffi \ + target-libobjc" + + # these tools are built using the target libraries, and are intended to --- gcc-3.4-3.4.6.orig/debian/patches/libobjc.dpatch +++ gcc-3.4-3.4.6/debian/patches/libobjc.dpatch @@ -0,0 +1,31 @@ +#! /bin/sh -e + +# DP: Find gc.h header in /usr/include/gc for --enable-objc-gc enabled builds. + + +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 + +--- libobjc/Makefile.in~ Fri Jul 21 13:16:47 2000 ++++ libobjc/Makefile.in Fri Jul 21 13:20:23 2000 +@@ -76,7 +76,7 @@ + -I$(srcdir)/$(MULTISRCTOP)../gcc/config -I$(MULTIBUILDTOP)../../gcc \ + -I$(srcdir)/$(MULTISRCTOP)../include + +-OBJC_GCFLAGS=-DOBJC_WITH_GC=1 ++OBJC_GCFLAGS=-I/usr/include/gc -DOBJC_WITH_GC=1 + OBJC_THREAD_FILE=thr-objc + + .SUFFIXES: --- gcc-3.4-3.4.6.orig/debian/patches/libgpc-shared.dpatch +++ gcc-3.4-3.4.6/debian/patches/libgpc-shared.dpatch @@ -0,0 +1,47 @@ +#! /bin/sh -e + +# DP: build shared libgpc (pascal runtime 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 + +--- gcc/p/Make-lang.in~ 2003-01-13 22:37:21.000000000 +0100 ++++ gcc/p/Make-lang.in 2003-01-13 22:42:48.000000000 +0100 +@@ -98,7 +98,7 @@ + GPCSOLIBSHORTNAME=libgpc.so + GPCSOLIBNAME=$(GPCSOLIBSHORTNAME).$(gpc_major).$(gpc_minor).$(rts_version) + GPCSOLIBDIR=lib +-WITH_SHARED=@with_shared@ ++WITH_SHARED=yes + + BISON=bison + BISONFLAGS= +--- gcc/p/rts/Makefile.in~ 2002-11-14 17:23:41.000000000 +0100 ++++ gcc/p/rts/Makefile.in 2003-01-13 22:43:00.000000000 +0100 +@@ -42,7 +42,7 @@ + WITH_SHARED=@with_shared@ + VERSION_FILENAME=$(srcdir)/rts-version + gpc_major=2 +-gpc_minor=0 ++gpc_minor=1 + rts_version=`cat $(VERSION_FILENAME)` + GPCSOLIBSHORTNAME=libgpc.so + GPCSOLIBNAME=$(GPCSOLIBSHORTNAME).$(gpc_major).$(gpc_minor).$(rts_version) --- gcc-3.4-3.4.6.orig/debian/patches/kbsd-gnu.dpatch +++ gcc-3.4-3.4.6/debian/patches/kbsd-gnu.dpatch @@ -0,0 +1,735 @@ +#! /bin/sh -e + +# Description: GNU/k*BSD support +# Author: Robert Millan +# Status: libtool bits are merged in upstream 3.5 branch, rest is pending. + +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. + +diff -Nur gcc-3.4.4.old/boehm-gc/configure gcc-3.4.4/boehm-gc/configure +--- gcc-3.4.4.old/boehm-gc/configure 2005-05-19 11:58:00.000000000 +0200 ++++ gcc-3.4.4/boehm-gc/configure 2005-06-23 16:09:42.000000000 +0200 +@@ -1879,7 +1879,7 @@ + lt_cv_deplibs_check_method=pass_all + ;; + +-freebsd* ) ++freebsd* | kfreebsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) +@@ -1947,7 +1947,7 @@ + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +-netbsd*) ++netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' + else +diff -Nur gcc-3.4.4.old/configure gcc-3.4.4/configure +--- gcc-3.4.4.old/configure 2005-03-08 18:31:40.000000000 +0100 ++++ gcc-3.4.4/configure 2005-06-23 16:09:40.000000000 +0200 +@@ -1935,7 +1935,7 @@ + powerpc-*-netware*) + target_makefile_frag="config/mt-netware" + ;; +- *-*-linux*) ++ *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu) + target_makefile_frag="config/mt-linux" + ;; + *-*-aix4.[3456789]* | *-*-aix[56789].*) +diff -Nur gcc-3.4.4.old/configure.in gcc-3.4.4/configure.in +--- gcc-3.4.4.old/configure.in 2005-03-08 18:31:40.000000000 +0100 ++++ gcc-3.4.4/configure.in 2005-06-23 16:09:40.000000000 +0200 +@@ -1174,7 +1174,7 @@ + powerpc-*-netware*) + target_makefile_frag="config/mt-netware" + ;; +- *-*-linux*) ++ *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu) + target_makefile_frag="config/mt-linux" + ;; + *-*-aix4.[[3456789]]* | *-*-aix[[56789]].*) +diff -Nur gcc-3.4.4.old/gcc/config/i386/kfreebsd-gnu.h gcc-3.4.4/gcc/config/i386/kfreebsd-gnu.h +--- gcc-3.4.4.old/gcc/config/i386/kfreebsd-gnu.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-3.4.4/gcc/config/i386/kfreebsd-gnu.h 2005-06-23 16:09:40.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Definitions for Intel 386 running kFreeBSD-based GNU systems with ELF format ++ Copyright (C) 2004 ++ Free Software Foundation, Inc. ++ Contributed by Robert Millan. ++ ++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, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. */ ++ ++#undef LINK_EMULATION ++#define LINK_EMULATION "elf_i386_fbsd" ++#undef REG_NAME ++#define REG_NAME(reg) sc_ ## reg +diff -Nur gcc-3.4.4.old/gcc/config/i386/knetbsd-gnu.h gcc-3.4.4/gcc/config/i386/knetbsd-gnu.h +--- gcc-3.4.4.old/gcc/config/i386/knetbsd-gnu.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-3.4.4/gcc/config/i386/knetbsd-gnu.h 2005-06-23 16:09:41.000000000 +0200 +@@ -0,0 +1,24 @@ ++/* Definitions for Intel 386 running kNetBSD-based GNU systems with ELF format ++ Copyright (C) 2004 ++ Free Software Foundation, Inc. ++ Contributed by Robert Millan. ++ ++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, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. */ ++ ++#undef REG_NAME ++#define REG_NAME(reg) sc_ ## reg +diff -Nur gcc-3.4.4.old/gcc/config/i386/linux.h gcc-3.4.4/gcc/config/i386/linux.h +--- gcc-3.4.4.old/gcc/config/i386/linux.h 2003-11-29 04:08:10.000000000 +0100 ++++ gcc-3.4.4/gcc/config/i386/linux.h 2005-06-23 16:09:41.000000000 +0200 +@@ -108,24 +108,30 @@ + + /* If ELF is the default format, we should not use /lib/elf. */ + ++#ifndef LINK_EMULATION ++# define LINK_EMULATION "elf_i386" ++#endif ++#ifndef DYNAMIC_LINKER ++# ifdef USE_GNULIBC_1 ++# define DYNAMIC_LINKER "/lib/ld-linux.so.1" ++# else ++# define DYNAMIC_LINKER "/lib/ld-linux.so.2" ++# endif ++#endif ++ ++#undef SUBTARGET_EXTRA_SPECS ++#define SUBTARGET_EXTRA_SPECS \ ++ { "link_emulation", LINK_EMULATION },\ ++ { "dynamic_linker", DYNAMIC_LINKER } ++ + #undef LINK_SPEC +-#ifdef USE_GNULIBC_1 +-#define LINK_SPEC "-m elf_i386 %{shared:-shared} \ +- %{!shared: \ +- %{!ibcs: \ +- %{!static: \ +- %{rdynamic:-export-dynamic} \ +- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.1}} \ +- %{static:-static}}}" +-#else +-#define LINK_SPEC "-m elf_i386 %{shared:-shared} \ ++#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \ + %{!shared: \ + %{!ibcs: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ +- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \ ++ %{!dynamic-linker:-dynamic-linker %(dynamic_linker)}} \ + %{static:-static}}}" +-#endif + + /* A C statement (sans semicolon) to output to the stdio stream + FILE the assembler definition of uninitialized global DECL named +@@ -217,6 +223,8 @@ + #include + #include + ++#define REG_NAME(reg) reg ++ + #define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS, SUCCESS) \ + do { \ + unsigned char *pc_ = (CONTEXT)->ra; \ +@@ -245,28 +253,28 @@ + else \ + break; \ + \ +- new_cfa_ = sc_->esp; \ ++ new_cfa_ = sc_->REG_NAME(esp); \ + (FS)->cfa_how = CFA_REG_OFFSET; \ + (FS)->cfa_reg = 4; \ + (FS)->cfa_offset = new_cfa_ - (long) (CONTEXT)->cfa; \ + \ + /* The SVR4 register numbering macros aren't usable in libgcc. */ \ + (FS)->regs.reg[0].how = REG_SAVED_OFFSET; \ +- (FS)->regs.reg[0].loc.offset = (long)&sc_->eax - new_cfa_; \ ++ (FS)->regs.reg[0].loc.offset = (long)&sc_->REG_NAME(eax) - new_cfa_; \ + (FS)->regs.reg[3].how = REG_SAVED_OFFSET; \ +- (FS)->regs.reg[3].loc.offset = (long)&sc_->ebx - new_cfa_; \ ++ (FS)->regs.reg[3].loc.offset = (long)&sc_->REG_NAME(ebx) - new_cfa_; \ + (FS)->regs.reg[1].how = REG_SAVED_OFFSET; \ +- (FS)->regs.reg[1].loc.offset = (long)&sc_->ecx - new_cfa_; \ ++ (FS)->regs.reg[1].loc.offset = (long)&sc_->REG_NAME(ecx) - new_cfa_; \ + (FS)->regs.reg[2].how = REG_SAVED_OFFSET; \ +- (FS)->regs.reg[2].loc.offset = (long)&sc_->edx - new_cfa_; \ ++ (FS)->regs.reg[2].loc.offset = (long)&sc_->REG_NAME(edx) - new_cfa_; \ + (FS)->regs.reg[6].how = REG_SAVED_OFFSET; \ +- (FS)->regs.reg[6].loc.offset = (long)&sc_->esi - new_cfa_; \ ++ (FS)->regs.reg[6].loc.offset = (long)&sc_->REG_NAME(esi) - new_cfa_; \ + (FS)->regs.reg[7].how = REG_SAVED_OFFSET; \ +- (FS)->regs.reg[7].loc.offset = (long)&sc_->edi - new_cfa_; \ ++ (FS)->regs.reg[7].loc.offset = (long)&sc_->REG_NAME(edi) - new_cfa_; \ + (FS)->regs.reg[5].how = REG_SAVED_OFFSET; \ +- (FS)->regs.reg[5].loc.offset = (long)&sc_->ebp - new_cfa_; \ ++ (FS)->regs.reg[5].loc.offset = (long)&sc_->REG_NAME(ebp) - new_cfa_; \ + (FS)->regs.reg[8].how = REG_SAVED_OFFSET; \ +- (FS)->regs.reg[8].loc.offset = (long)&sc_->eip - new_cfa_; \ ++ (FS)->regs.reg[8].loc.offset = (long)&sc_->REG_NAME(eip) - new_cfa_; \ + (FS)->retaddr_column = 8; \ + goto SUCCESS; \ + } while (0) +diff -Nur gcc-3.4.4.old/gcc/config/kfreebsd-gnu.h gcc-3.4.4/gcc/config/kfreebsd-gnu.h +--- gcc-3.4.4.old/gcc/config/kfreebsd-gnu.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-3.4.4/gcc/config/kfreebsd-gnu.h 2005-06-23 16:09:41.000000000 +0200 +@@ -0,0 +1,36 @@ ++/* Definitions for kFreeBSD-based GNU systems with ELF format ++ Copyright (C) 2004 ++ Free Software Foundation, Inc. ++ Contributed by Robert Millan. ++ ++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, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. */ ++ ++#undef LINUX_TARGET_OS_CPP_BUILTINS ++#define LINUX_TARGET_OS_CPP_BUILTINS() \ ++ do \ ++ { \ ++ builtin_define ("__FreeBSD_kernel__"); \ ++ builtin_define ("__GLIBC__"); \ ++ builtin_define_std ("unix"); \ ++ builtin_assert ("system=unix"); \ ++ builtin_assert ("system=posix"); \ ++ } \ ++ while (0) ++ ++#undef DYNAMIC_LINKER ++#define DYNAMIC_LINKER "/lib/ld.so.1" +diff -Nur gcc-3.4.4.old/gcc/config/knetbsd-gnu.h gcc-3.4.4/gcc/config/knetbsd-gnu.h +--- gcc-3.4.4.old/gcc/config/knetbsd-gnu.h 1970-01-01 01:00:00.000000000 +0100 ++++ gcc-3.4.4/gcc/config/knetbsd-gnu.h 2005-06-23 16:09:41.000000000 +0200 +@@ -0,0 +1,36 @@ ++/* Definitions for kNetBSD-based GNU systems with ELF format ++ Copyright (C) 2004 ++ Free Software Foundation, Inc. ++ Contributed by Robert Millan. ++ ++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, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. */ ++ ++#undef LINUX_TARGET_OS_CPP_BUILTINS ++#define LINUX_TARGET_OS_CPP_BUILTINS() \ ++ do \ ++ { \ ++ builtin_define ("__NetBSD_kernel__"); \ ++ builtin_define ("__GLIBC__"); \ ++ builtin_define_std ("unix"); \ ++ builtin_assert ("system=unix"); \ ++ builtin_assert ("system=posix"); \ ++ } \ ++ while (0) ++ ++#undef DYNAMIC_LINKER ++#define DYNAMIC_LINKER "/lib/ld.so.1" +diff -Nur gcc-3.4.4.old/gcc/config.gcc gcc-3.4.4/gcc/config.gcc +--- gcc-3.4.4.old/gcc/config.gcc 2005-04-25 06:47:59.000000000 +0200 ++++ gcc-3.4.4/gcc/config.gcc 2005-06-23 16:09:41.000000000 +0200 +@@ -434,21 +434,10 @@ + esac + fbsd_tm_file="${fbsd_tm_file} freebsd-spec.h freebsd.h" + ;; +-*-*-kfreebsd*-gnu) +- # Must come before *-*-gnu* +- xm_defines=POSIX # needed for cross-compiling from FreeBSD? +- extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o" +- # GNU tools are the only tools. +- gas=yes +- gnu_ld=yes +- case ${enable_threads} in +- "" | yes | posix) thread_file='posix' ;; +- esac +- ;; + *-*-linux*libc1* | *-*-linux*aout*) + # Avoid the generic linux case. + ;; +-*-*-linux*) ++*-*-linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu) + # Must come before *-*-gnu* (because of *-*-linux-gnu* systems). + extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o" + gas=yes +@@ -998,23 +987,21 @@ + thread_file='single' + fi + ;; +-i[34567]86-*-linux*) # Intel 80386's running GNU/Linux ++i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu) ++ # Intel 80386's running GNU/* + # with ELF format using glibc 2 +- # aka GNU/Linux C library 6 + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h" + tmake_file="t-slibgcc-elf-ver t-linux i386/t-crtstuff" ++ case ${target} in ++ i[34567]86-*-knetbsd*-gnu) tm_file="${tm_file} knetbsd-gnu.h i386/knetbsd-gnu.h" ;; ++ i[34567]86-*-kfreebsd*-gnu) tm_file="${tm_file} kfreebsd-gnu.h i386/kfreebsd-gnu.h" ;; ++ esac + ;; + x86_64-*-linux*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h \ + i386/x86-64.h i386/linux64.h" + tmake_file="t-slibgcc-elf-ver t-linux i386/t-linux64" + ;; +-i[34567]86-*-kfreebsd*-gnu) # must be before i[34567]86-*-gnu* +- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h kfreebsdgnu.h i386/kfreebsdgnu.h" +- tmake_file="t-slibgcc-elf-ver t-kfreebsd-gnu i386/t-crtstuff" +- float_format=i386 +- use_fixproto=no +- ;; + i[34567]86-*-gnu*) + ;; + i[34567]86-pc-msdosdjgpp*) +diff -Nur gcc-3.4.4.old/libf2c/configure gcc-3.4.4/libf2c/configure +--- gcc-3.4.4.old/libf2c/configure 2004-05-18 11:08:39.000000000 +0200 ++++ gcc-3.4.4/libf2c/configure 2005-06-23 16:09:41.000000000 +0200 +@@ -1549,7 +1549,7 @@ + lt_cv_deplibs_check_method=pass_all + ;; + +-freebsd* ) ++freebsd* | kfreebsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) +@@ -1617,7 +1617,7 @@ + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +-netbsd*) ++netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' + else +diff -Nur gcc-3.4.4.old/libffi/configure gcc-3.4.4/libffi/configure +--- gcc-3.4.4.old/libffi/configure 2004-05-18 11:08:39.000000000 +0200 ++++ gcc-3.4.4/libffi/configure 2005-06-23 16:09:41.000000000 +0200 +@@ -1264,7 +1264,7 @@ + lt_cv_deplibs_check_method=pass_all + ;; + +-freebsd* ) ++freebsd* | kfreebsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) +@@ -1332,7 +1332,7 @@ + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +-netbsd*) ++netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' + else +@@ -2818,16 +2818,16 @@ + i*86-*-linux*) TARGET=X86; TARGETDIR=x86;; + i*86-*-solaris*) TARGET=X86; TARGETDIR=x86;; + i*86-*-beos*) TARGET=X86; TARGETDIR=x86;; +-i*86-*-freebsd*) TARGET=X86; TARGETDIR=x86;; +-i*86-*-netbsdelf*) TARGET=X86; TARGETDIR=x86;; ++i*86-*-freebsd* | i*86-*-kfreebsd*-gnu) TARGET=X86; TARGETDIR=x86;; ++i*86-*-netbsdelf* | i*86-*-knetbsd*-gnu) TARGET=X86; TARGETDIR=x86;; + i*86-*-win32*) TARGET=X86_WIN32; TARGETDIR=x86;; + i*86-*-cygwin*) TARGET=X86_WIN32; TARGETDIR=x86;; + i*86-*-mingw*) TARGET=X86_WIN32; TARGETDIR=x86;; + sparc-sun-4*) TARGET=SPARC; TARGETDIR=sparc;; + sparc*-sun-*) TARGET=SPARC; TARGETDIR=sparc;; +-sparc-*-linux* | sparc-*-netbsdelf*) TARGET=SPARC; TARGETDIR=sparc;; +-sparc64-*-linux* | sparc64-*-netbsd*) TARGET=SPARC; TARGETDIR=sparc;; +-alpha*-*-linux* | alpha*-*-osf* | alpha*-*-freebsd* | alpha*-*-netbsd*) TARGET=ALPHA; TARGETDIR=alpha;; ++sparc-*-linux* | sparc-*-netbsdelf* | sparc-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;; ++sparc64-*-linux* | 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;; + ia64*-*-*) TARGET=IA64; TARGETDIR=ia64;; + m68k-*-linux*) TARGET=M68K; TARGETDIR=m68k;; + mips64*-*);; +@@ -2839,7 +2839,7 @@ + powerpc-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;; + rs6000-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;; + arm*-*-linux-*) TARGET=ARM; TARGETDIR=arm;; +-arm*-*-netbsdelf*) TARGET=ARM; TARGETDIR=arm;; ++arm*-*-netbsdelf* | i*86-*-knetbsd*-gnu) TARGET=ARM; TARGETDIR=arm;; + s390-*-linux-*) TARGET=S390; TARGETDIR=s390;; + s390x-*-linux-*) TARGET=S390; TARGETDIR=s390;; + x86_64-*-linux*) TARGET=X86_64; TARGETDIR=x86;; +diff -Nur gcc-3.4.4.old/libffi/configure.in gcc-3.4.4/libffi/configure.in +--- gcc-3.4.4.old/libffi/configure.in 2004-04-27 07:10:19.000000000 +0200 ++++ gcc-3.4.4/libffi/configure.in 2005-06-23 16:09:41.000000000 +0200 +@@ -60,16 +60,16 @@ + i*86-*-linux*) TARGET=X86; TARGETDIR=x86;; + i*86-*-solaris*) TARGET=X86; TARGETDIR=x86;; + i*86-*-beos*) TARGET=X86; TARGETDIR=x86;; +-i*86-*-freebsd*) TARGET=X86; TARGETDIR=x86;; +-i*86-*-netbsdelf*) TARGET=X86; TARGETDIR=x86;; ++i*86-*-freebsd* | i*86-*-kfreebsd*-gnu) TARGET=X86; TARGETDIR=x86;; ++i*86-*-netbsdelf* | i*86-*-knetbsd*-gnu) TARGET=X86; TARGETDIR=x86;; + i*86-*-win32*) TARGET=X86_WIN32; TARGETDIR=x86;; + i*86-*-cygwin*) TARGET=X86_WIN32; TARGETDIR=x86;; + i*86-*-mingw*) TARGET=X86_WIN32; TARGETDIR=x86;; + sparc-sun-4*) TARGET=SPARC; TARGETDIR=sparc;; + sparc*-sun-*) TARGET=SPARC; TARGETDIR=sparc;; +-sparc-*-linux* | sparc-*-netbsdelf*) TARGET=SPARC; TARGETDIR=sparc;; +-sparc64-*-linux* | sparc64-*-netbsd*) TARGET=SPARC; TARGETDIR=sparc;; +-alpha*-*-linux* | alpha*-*-osf* | alpha*-*-freebsd* | alpha*-*-netbsd*) TARGET=ALPHA; TARGETDIR=alpha;; ++sparc-*-linux* | sparc-*-netbsdelf* | sparc-*-knetbsd*-gnu) TARGET=SPARC; TARGETDIR=sparc;; ++sparc64-*-linux* | 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;; + ia64*-*-*) TARGET=IA64; TARGETDIR=ia64;; + m68k-*-linux*) TARGET=M68K; TARGETDIR=m68k;; + mips64*-*);; +@@ -81,7 +81,7 @@ + powerpc-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;; + rs6000-*-aix*) TARGET=POWERPC_AIX; TARGETDIR=powerpc;; + arm*-*-linux-*) TARGET=ARM; TARGETDIR=arm;; +-arm*-*-netbsdelf*) TARGET=ARM; TARGETDIR=arm;; ++arm*-*-netbsdelf* | i*86-*-knetbsd*-gnu) TARGET=ARM; TARGETDIR=arm;; + s390-*-linux-*) TARGET=S390; TARGETDIR=s390;; + s390x-*-linux-*) TARGET=S390; TARGETDIR=s390;; + x86_64-*-linux*) TARGET=X86_64; TARGETDIR=x86;; +diff -Nur gcc-3.4.4.old/libjava/configure gcc-3.4.4/libjava/configure +--- gcc-3.4.4.old/libjava/configure 2005-05-19 11:58:00.000000000 +0200 ++++ gcc-3.4.4/libjava/configure 2005-06-23 16:09:41.000000000 +0200 +@@ -1975,7 +1975,7 @@ + lt_cv_deplibs_check_method=pass_all + ;; + +-freebsd* ) ++freebsd* | kfreebsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) +@@ -2043,7 +2043,7 @@ + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +-netbsd*) ++netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' + else +diff -Nur gcc-3.4.4.old/libjava/libltdl/configure gcc-3.4.4/libjava/libltdl/configure +--- gcc-3.4.4.old/libjava/libltdl/configure 2005-05-19 11:58:00.000000000 +0200 ++++ gcc-3.4.4/libjava/libltdl/configure 2005-06-23 16:09:42.000000000 +0200 +@@ -3558,7 +3558,7 @@ + lt_cv_deplibs_check_method=pass_all + ;; + +-freebsd*) ++freebsd* | kfreebsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) +@@ -3629,7 +3629,7 @@ + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +-netbsd*) ++netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else +@@ -7343,7 +7343,7 @@ + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. +- freebsd*) ++ freebsd* | kfreebsd*-gnu) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes +@@ -7976,6 +7976,20 @@ + dynamic_linker=no + ;; + ++kfreebsd*) ++ version_type=linux ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=no ++ hardcode_into_libs=yes ++ dynamic_linker='GNU ld.so' ++ ;; ++ ++ + freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat +diff -Nur gcc-3.4.4.old/libobjc/configure gcc-3.4.4/libobjc/configure +--- gcc-3.4.4.old/libobjc/configure 2004-05-18 11:08:42.000000000 +0200 ++++ gcc-3.4.4/libobjc/configure 2005-06-23 16:09:41.000000000 +0200 +@@ -1554,7 +1554,7 @@ + esac + ;; + +-freebsd* ) ++freebsd* | kfreebsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) +@@ -1622,7 +1622,7 @@ + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +-netbsd*) ++netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' + else +diff -Nur gcc-3.4.4.old/libstdc++-v3/configure gcc-3.4.4/libstdc++-v3/configure +--- gcc-3.4.4.old/libstdc++-v3/configure 2005-02-01 07:29:28.000000000 +0100 ++++ gcc-3.4.4/libstdc++-v3/configure 2005-06-23 16:09:41.000000000 +0200 +@@ -3944,7 +3944,7 @@ + lt_cv_deplibs_check_method=pass_all + ;; + +-freebsd* ) ++freebsd* | kfreebsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) +@@ -4012,7 +4012,7 @@ + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +-netbsd*) ++netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' + else +diff -Nur gcc-3.4.4.old/libtool.m4 gcc-3.4.4/libtool.m4 +--- gcc-3.4.4.old/libtool.m4 2004-05-18 11:08:37.000000000 +0200 ++++ gcc-3.4.4/libtool.m4 2005-06-23 16:09:41.000000000 +0200 +@@ -621,7 +621,7 @@ + lt_cv_deplibs_check_method=pass_all + ;; + +-freebsd* ) ++freebsd* | kfreebsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) +@@ -689,7 +689,7 @@ + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +-netbsd*) ++netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'] + else +diff -Nur gcc-3.4.4.old/ltcf-c.sh gcc-3.4.4/ltcf-c.sh +--- gcc-3.4.4.old/ltcf-c.sh 2003-11-19 06:29:32.000000000 +0100 ++++ gcc-3.4.4/ltcf-c.sh 2005-06-23 16:09:41.000000000 +0200 +@@ -175,7 +175,7 @@ + $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags' + ;; + +- netbsd*) ++ netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= +@@ -442,7 +442,7 @@ + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. +- freebsd*) ++ freebsd* | kfreebsd*-gnu) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes +@@ -489,7 +489,7 @@ + link_all_deplibs=yes + ;; + +- netbsd*) ++ netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else +diff -Nur gcc-3.4.4.old/ltcf-cxx.sh gcc-3.4.4/ltcf-cxx.sh +--- gcc-3.4.4.old/ltcf-cxx.sh 2003-11-19 06:29:32.000000000 +0100 ++++ gcc-3.4.4/ltcf-cxx.sh 2005-06-23 16:09:41.000000000 +0200 +@@ -289,7 +289,7 @@ + # C++ shared libraries reported to be fairly broken before switch to ELF + ld_shlibs=no + ;; +- freebsd*) ++ freebsd* | kfreebsd*-gnu) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs=yes +@@ -449,7 +449,7 @@ + ;; + esac + ;; +- netbsd*) ++ netbsd* | knetbsd*-gnu) + # NetBSD uses g++ - do we need to do anything? + ;; + osf3*) +@@ -804,7 +804,7 @@ + ;; + esac + ;; +- freebsd*) ++ freebsd* | kfreebsd*-gnu) + # FreeBSD uses GNU C++ + ;; + gnu*) +diff -Nur gcc-3.4.4.old/ltcf-gcj.sh gcc-3.4.4/ltcf-gcj.sh +--- gcc-3.4.4.old/ltcf-gcj.sh 2003-11-19 06:29:32.000000000 +0100 ++++ gcc-3.4.4/ltcf-gcj.sh 2005-06-23 16:09:41.000000000 +0200 +@@ -178,7 +178,7 @@ + $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags' + ;; + +- netbsd*) ++ netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= +@@ -445,7 +445,7 @@ + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. +- freebsd*) ++ freebsd* | kfreebsd*-gnu) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes +@@ -476,7 +476,7 @@ + link_all_deplibs=yes + ;; + +- netbsd*) ++ netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else +diff -Nur gcc-3.4.4.old/ltconfig gcc-3.4.4/ltconfig +--- gcc-3.4.4.old/ltconfig 2004-03-05 22:05:41.000000000 +0100 ++++ gcc-3.4.4/ltconfig 2005-06-23 16:09:41.000000000 +0200 +@@ -1168,6 +1168,17 @@ + hardcode_into_libs=yes + ;; + ++kfreebsd*-gnu | knetbsd*-gnu) ++ version_type=linux ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' ++ soname_spec='${libname}${release}.so$major' ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=yes ++ hardcode_into_libs=yes ++ ;; ++ + hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. +diff -Nur gcc-3.4.4.old/zlib/configure gcc-3.4.4/zlib/configure +--- gcc-3.4.4.old/zlib/configure 2004-05-18 11:09:14.000000000 +0200 ++++ gcc-3.4.4/zlib/configure 2005-06-23 16:09:41.000000000 +0200 +@@ -1521,7 +1521,7 @@ + esac + ;; + +-freebsd* ) ++freebsd* | kfreebsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) +@@ -1589,7 +1589,7 @@ + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +-netbsd*) ++netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' + else --- gcc-3.4-3.4.6.orig/debian/patches/m32r-gotoff.dpatch +++ gcc-3.4-3.4.6/debian/patches/m32r-gotoff.dpatch @@ -0,0 +1,76 @@ +#! /bin/sh -e +# +# +# DP: Bug fix of static variable access with GOTOFF + +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 -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 + +--- gcc-3.4.1/gcc/config/m32r/m32r.c.orig 2004-09-09 18:26:50.000000000 +0900 ++++ gcc-3.4.1/gcc/config/m32r/m32r.c 2004-09-09 18:27:30.000000000 +0900 +@@ -2207,6 +2207,15 @@ + else + address = reg; + ++ current_function_uses_pic_offset_table = 1; ++ if (GET_CODE (orig) == LABEL_REF ++ || GET_CODE (orig) == SYMBOL_REF && SYMBOL_REF_LOCAL_P (orig)) ++ { ++ emit_insn (gen_gotoff_load_addr (reg, orig)); ++ emit_insn (gen_addsi3 (reg, reg, pic_offset_table_rtx)); ++ return reg; ++ } ++ + emit_insn (gen_pic_load_addr (address, orig)); + + emit_insn (gen_addsi3 (address, address, pic_offset_table_rtx)); +@@ -2214,8 +2223,7 @@ + + RTX_UNCHANGING_P (pic_ref) = 1; + insn = emit_move_insn (reg, pic_ref); +- current_function_uses_pic_offset_table = 1; + #if 0 + /* Put a REG_EQUAL note on this insn, so that it can be optimized + by loop. */ + +--- gcc-3.4.1/gcc/config/m32r/m32r.md.orig 2004-09-09 18:26:50.000000000 +0900 ++++ gcc-3.4.1/gcc/config/m32r/m32r.md 2004-09-09 18:27:30.000000000 +0900 +@@ -31,7 +31,8 @@ + [(UNSPEC_LOAD_SDA_BASE 2) + (UNSPEC_SET_CBIT 3) + (UNSPEC_PIC_LOAD_ADDR 4) +- (UNSPEC_GET_PC 5)]) ++ (UNSPEC_GET_PC 5) ++ (UNSPEC_GOTOFF 6)]) + + ;; Insn type. Used to default other attribute values. + (define_attr "type" +@@ -2711,7 +2712,15 @@ + "ld24 %0,%#%1" + [(set_attr "type" "int4")]) + ++(define_insn "gotoff_load_addr" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec:SI [(match_operand 1 "" "")] UNSPEC_GOTOFF))] ++ "flag_pic" ++ "seth %0,%#shigh(%1@GOTOFF)\;add3 %0,%0,low(%1@GOTOFF)" ++ [(set_attr "type" "int4") ++ (set_attr "length" "8")]) ++ + ;; Load program counter insns. + + (define_insn "get_pc" --- gcc-3.4-3.4.6.orig/debian/patches/gpc-names.dpatch +++ gcc-3.4-3.4.6/debian/patches/gpc-names.dpatch @@ -0,0 +1,119 @@ +#! /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 -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-old/gcc/p/doc/en/gpc.texi Mon Oct 9 09:32:26 2000 ++++ src-native/gcc/p/doc/en/gpc.texi Tue Dec 19 21:04:21 2000 +@@ -28,11 +28,11 @@ + + @dircategory GNU programming tools + @direntry +-* GPC: (gpc). The GNU Pascal Compiler. ++* GPC-2.1-3.4: (gpc-2.1-3.4). The GNU Pascal Compiler. + @end direntry + @dircategory Individual utilities + @direntry +-* GPC: (gpc)Invoking GPC. The GNU Pascal Compiler. ++* GPC-2.1-3.4: (gpc-2.1-3.4)Invoking GPC. The GNU Pascal Compiler. + @end direntry + + @c Version numbers appear twice: in lowercase and capitalized for headlines. + +--- src/gcc/p/Make-lang.in~ 2003-08-31 10:13:01.000000000 +0200 ++++ src/gcc/p/Make-lang.in 2003-08-31 10:20:51.000000000 +0200 +@@ -711,42 +711,44 @@ + pascal.start.encap: + pascal.rest.encap: + +-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=-3.4 ++ ++pascal.info: $(srcdir)/p/doc/info/gpc-2.1$(iv).info \ ++ $(srcdir)/p/doc/info/gpcs-2.1$(iv).info \ ++ $(srcdir)/p/doc/info/gpcs-de-2.1$(iv).info \ ++ $(srcdir)/p/doc/info/gpc-hr-2.1$(iv).info \ ++ $(srcdir)/p/doc/info/gpcs-hr-2.1$(iv).info \ ++ $(srcdir)/p/doc/info/gpc-es-2.1$(iv).info \ ++ $(srcdir)/p/doc/info/gpcs-es-2.1$(iv).info + pascal.dvi: gpc.dvi + +-$(srcdir)/p/doc/info/gpc.info: $(GPC_TEXI_EN) ++$(srcdir)/p/doc/info/gpc-2.1$(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-2.1$(iv).info gpc.texi + +-$(srcdir)/p/doc/info/gpcs.info: $(GPC_TEXI_EN) ++$(srcdir)/p/doc/info/gpcs-2.1$(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-2.1$(iv).info gpcs.texi + +-$(srcdir)/p/doc/info/gpcs-de.info: $(GPC_TEXI_DE) ++$(srcdir)/p/doc/info/gpcs-de-2.1$(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-2.1$(iv).info gpcs.texi + +-$(srcdir)/p/doc/info/gpc-hr.info: $(GPC_TEXI_HR) ++$(srcdir)/p/doc/info/gpc-hr-2.1$(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-2.1$(iv).info gpc.texi + +-$(srcdir)/p/doc/info/gpcs-hr.info: $(GPC_TEXI_HR) ++$(srcdir)/p/doc/info/gpcs-hr-2.1$(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-2.1$(iv).info gpcs.texi + +-$(srcdir)/p/doc/info/gpc-es.info: $(GPC_TEXI_ES) ++$(srcdir)/p/doc/info/gpc-es-2.1$(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-2.1$(iv).info gpc.texi + +-$(srcdir)/p/doc/info/gpcs-es.info: $(GPC_TEXI_ES) ++$(srcdir)/p/doc/info/gpcs-es-2.1$(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-2.1$(iv).info gpcs.texi + + gpc.dvi: $(GPC_TEXI_EN) + TEXINPUTS=$(srcdir)/p/doc:$(srcdir)/p/doc/images:$$TEXINPUTS \ +@@ -942,11 +942,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-2.1$(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-3.4-3.4.6.orig/debian/patches/gcc-textdomain.dpatch +++ gcc-3.4-3.4.6/debian/patches/gcc-textdomain.dpatch @@ -0,0 +1,58 @@ +#! /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~ 2004-07-21 22:42:58.000000000 +0200 ++++ gcc/Makefile.in 2004-07-21 22:43:37.000000000 +0200 +@@ -2311,6 +2311,7 @@ + intl.o: intl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) intl.h Makefile + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + -DLOCALEDIR=\"$(localedir)\" \ ++ -DPACKAGE=\"$(PACKAGE)\" \ + -c $(srcdir)/intl.c $(OUTPUT_OPTION) + + # +@@ -3848,7 +3848,7 @@ + GMSGFMT = @GMSGFMT@ + MSGMERGE = msgmerge + +-PACKAGE = @PACKAGE@ ++PACKAGE = $(shell echo @PACKAGE@|sed '$(program_transform_name)') + CATALOGS = @CATALOGS@ + + .PHONY: build- install- build-po install-po update-po +--- gcc/intl.c~ 2004-07-21 22:42:58.000000000 +0200 ++++ gcc/intl.c 2004-07-21 22:43:37.000000000 +0200 +@@ -41,8 +41,8 @@ + setlocale (LC_ALL, ""); + #endif + +- (void) bindtextdomain ("gcc", LOCALEDIR); +- (void) textdomain ("gcc"); ++ (void) bindtextdomain (PACKAGE, LOCALEDIR); ++ (void) textdomain (PACKAGE); + } + + #if defined HAVE_WCHAR_H && defined HAVE_WORKING_MBSTOWCS && defined HAVE_WCSWIDTH --- gcc-3.4-3.4.6.orig/debian/patches/ada-driver.dpatch +++ gcc-3.4-3.4.6/debian/patches/ada-driver.dpatch @@ -0,0 +1,38 @@ +#! /bin/sh -e + +# DP: Look for gcc-3.3 as gcc with Ada support. + +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/aclocal.m4~ Sat Mar 2 00:37:42 2002 ++++ gcc/aclocal.m4 Sat Apr 6 13:01:36 2002 +@@ -312,6 +312,7 @@ + ${ac_tool_prefix}$user_cc $user_cc \ + ${ac_tool_prefix}gcc gcc \ + ${ac_tool_prefix}cc cc \ ++ ${ac_tool_prefix}gcc-3.3 gcc-3.3 \ + ${ac_tool_prefix}gnatgcc gnatgcc \ + ${ac_tool_prefix}gnatcc gnatcc \ + ${ac_tool_prefix}adagcc adagcc \ --- gcc-3.4-3.4.6.orig/debian/patches/libstdc++-pic.dpatch +++ gcc-3.4-3.4.6/debian/patches/libstdc++-pic.dpatch @@ -0,0 +1,70 @@ +#! /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 + +--- libstdc++-v3/src/Makefile.am~ 2003-02-28 09:21:05.000000000 +0100 ++++ libstdc++-v3/src/Makefile.am 2003-02-28 09:28:50.000000000 +0100 +@@ -224,6 +224,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 GLIBCPP_BUILD_DEBUG + all-local: build_debug + +--- libstdc++-v3/src/Makefile.in~ 2004-02-21 09:55:48.000000000 +0100 ++++ libstdc++-v3/src/Makefile.in 2004-02-21 09:59:34.000000000 +0100 +@@ -585,7 +585,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 + +@@ -618,6 +618,7 @@ + distclean-tags distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-data-local \ + install-exec install-exec-am install-info install-info-am \ ++ install-exec-local \ + install-man install-strip install-toolexeclibLTLIBRARIES \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ +@@ -707,6 +708,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-3.4-3.4.6.orig/debian/patches/m68k-update.dpatch +++ gcc-3.4-3.4.6/debian/patches/m68k-update.dpatch @@ -0,0 +1,191 @@ +#! /bin/sh -e + +# DP: Add two m68k specfic patches backported from 4.0 concerning wrong code +# DP: generation (Richard Zidlicky). + +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/m68k/m68k.md.rz 2005-03-05 12:14:41.038411000 +0100 ++++ gcc/config/m68k/m68k.md 2005-03-05 12:15:19.580856855 +0100 +@@ -1454,11 +1454,20 @@ + "" + { + CC_STATUS_INIT; +- operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); +- if (TARGET_68020 || TARGET_COLDFIRE) +- return "move%.b %1,%2\;extb%.l %2\;smi %0\;extb%.l %0"; ++ if (ADDRESS_REG_P(operands[1])) ++ { ++ if (TARGET_68020 || TARGET_COLDFIRE) ++ return "move%.w %1,%R0\;extb%.l %R0\;smi %0\;extb%.l %0"; ++ else ++ return "move%.w %1,%R0\;ext%.w %R0\;ext%.l %R0\;move%.l %R0,%0\;smi %0"; ++ } + else +- return "move%.b %1,%2\;ext%.w %0\;ext%.l %2\;move%.l %2,%0\;smi %0"; ++ { ++ if (TARGET_68020 || TARGET_COLDFIRE) ++ return "move%.b %1,%R0\;extb%.l %R0\;smi %0\;extb%.l %0"; ++ else ++ return "move%.b %1,%R0\;ext%.w %R0\;ext%.l %R0\;move%.l %R0,%0\;smi %0"; ++ } + }) + + (define_insn "extendhidi2" +@@ -4834,8 +4843,8 @@ + (define_insn "" + [(set (match_operand:SI 0 "nonimmediate_operand" "=d") + (sign_extract:SI (match_operand:QI 1 "memory_operand" "o") +- (match_operand:SI 2 "general_operand" "di") +- (match_operand:SI 3 "general_operand" "di")))] ++ (match_operand:SI 2 "general_operand" "dn") ++ (match_operand:SI 3 "general_operand" "dn")))] + "TARGET_68020 && TARGET_BITFIELD" + "bfexts %1{%b3:%b2},%0") + +@@ -4850,8 +4859,8 @@ + (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" "di,di") +- (match_operand:SI 3 "general_operand" "di,di")))] ++ (match_operand:SI 2 "general_operand" "dn,dn") ++ (match_operand:SI 3 "general_operand" "dn,dn")))] + "TARGET_68020 && TARGET_BITFIELD" + { + if (GET_CODE (operands[2]) == CONST_INT) +@@ -4868,8 +4877,8 @@ + + (define_insn "" + [(set (zero_extract:SI (match_operand:QI 0 "memory_operand" "+o") +- (match_operand:SI 1 "general_operand" "di") +- (match_operand:SI 2 "general_operand" "di")) ++ (match_operand:SI 1 "general_operand" "dn") ++ (match_operand:SI 2 "general_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 +@@ -4883,8 +4892,8 @@ + + (define_insn "" + [(set (zero_extract:SI (match_operand:QI 0 "memory_operand" "+o") +- (match_operand:SI 1 "general_operand" "di") +- (match_operand:SI 2 "general_operand" "di")) ++ (match_operand:SI 1 "general_operand" "dn") ++ (match_operand:SI 2 "general_operand" "dn")) + (const_int 0))] + "TARGET_68020 && TARGET_BITFIELD" + { +@@ -4894,8 +4903,8 @@ + + (define_insn "" + [(set (zero_extract:SI (match_operand:QI 0 "memory_operand" "+o") +- (match_operand:SI 1 "general_operand" "di") +- (match_operand:SI 2 "general_operand" "di")) ++ (match_operand:SI 1 "general_operand" "dn") ++ (match_operand:SI 2 "general_operand" "dn")) + (const_int -1))] + "TARGET_68020 && TARGET_BITFIELD" + { +@@ -4913,8 +4922,8 @@ + + (define_insn "" + [(set (zero_extract:SI (match_operand:QI 0 "memory_operand" "+o") +- (match_operand:SI 1 "general_operand" "di") +- (match_operand:SI 2 "general_operand" "di")) ++ (match_operand:SI 1 "general_operand" "dn") ++ (match_operand:SI 2 "general_operand" "dn")) + (match_operand:SI 3 "register_operand" "d"))] + "TARGET_68020 && TARGET_BITFIELD" + "bfins %3,%0{%b2:%b1}") +@@ -4925,16 +4934,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" "di") +- (match_operand:SI 3 "general_operand" "di")))] ++ (match_operand:SI 2 "general_operand" "dn") ++ (match_operand:SI 3 "general_operand" "dn")))] + "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" "di") +- (match_operand:SI 3 "general_operand" "di")))] ++ (match_operand:SI 2 "general_operand" "dn") ++ (match_operand:SI 3 "general_operand" "dn")))] + "TARGET_68020 && TARGET_BITFIELD" + { + if (GET_CODE (operands[2]) == CONST_INT) +@@ -4951,8 +4960,8 @@ + + (define_insn "" + [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+d") +- (match_operand:SI 1 "general_operand" "di") +- (match_operand:SI 2 "general_operand" "di")) ++ (match_operand:SI 1 "general_operand" "dn") ++ (match_operand:SI 2 "general_operand" "dn")) + (const_int 0))] + "TARGET_68020 && TARGET_BITFIELD" + { +@@ -4962,8 +4971,8 @@ + + (define_insn "" + [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+d") +- (match_operand:SI 1 "general_operand" "di") +- (match_operand:SI 2 "general_operand" "di")) ++ (match_operand:SI 1 "general_operand" "dn") ++ (match_operand:SI 2 "general_operand" "dn")) + (const_int -1))] + "TARGET_68020 && TARGET_BITFIELD" + { +@@ -4973,8 +4982,8 @@ + + (define_insn "" + [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+d") +- (match_operand:SI 1 "general_operand" "di") +- (match_operand:SI 2 "general_operand" "di")) ++ (match_operand:SI 1 "general_operand" "dn") ++ (match_operand:SI 2 "general_operand" "dn")) + (match_operand:SI 3 "register_operand" "d"))] + "TARGET_68020 && TARGET_BITFIELD" + { +@@ -4996,7 +5005,7 @@ + [(set (cc0) + (zero_extract:SI (match_operand:QI 0 "memory_operand" "o") + (match_operand:SI 1 "const_int_operand" "n") +- (match_operand:SI 2 "general_operand" "di")))] ++ (match_operand:SI 2 "general_operand" "dn")))] + "TARGET_68020 && TARGET_BITFIELD" + { + if (operands[1] == const1_rtx +@@ -5021,7 +5030,7 @@ + [(set (cc0) + (zero_extract:SI (match_operand:SI 0 "register_operand" "d") + (match_operand:SI 1 "const_int_operand" "n") +- (match_operand:SI 2 "general_operand" "di")))] ++ (match_operand:SI 2 "general_operand" "dn")))] + "TARGET_68020 && TARGET_BITFIELD" + { + if (operands[1] == const1_rtx --- gcc-3.4-3.4.6.orig/debian/patches/gpc-no-gpidump.dpatch +++ gcc-3.4-3.4.6/debian/patches/gpc-no-gpidump.dpatch @@ -0,0 +1,40 @@ +#! /bin/sh -e + +# DP: Do not build gpidump due to PR optimization/9279. + +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/p/utils/Makefile~ 2006-06-10 23:11:43.995565704 +0000 ++++ gcc/p/utils/Makefile 2006-07-04 08:49:03.733107048 +0000 +@@ -41,9 +41,9 @@ + + # Internal variables + PFLAGS1=--executable-path=. --unit-path=$(GCC_DIR)/p/rts --unit-path=$(GCC_DIR)/p/units +-EXE=binobj$(exeext) gpidump$(exeext) +-EXE2=binobj gpidump +-DOC=binobj.1 gpidump.1 ++EXE=binobj$(exeext) ++EXE2=binobj ++DOC=binobj.1 + PC_WITH_FLAGS=$(PC) --automake --executable-file-name $(UTILS_WARN) $(CFLAGS) $(PFLAGS) $(PFLAGS1) + + all: $(EXE) $(DOC) --- gcc-3.4-3.4.6.orig/debian/patches/arm-tune.dpatch +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/patches/hppa-libjava-update.dpatch +++ gcc-3.4-3.4.6/debian/patches/hppa-libjava-update.dpatch @@ -0,0 +1,255 @@ +#! /bin/sh -e + +# DP: MD_FALLBACK_FRAME_STATE_FOR definition for pa32-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}libjava && 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" +Sender: gcc-patches-owner@gcc.gnu.org +To: randolph@tausq.org +Cc: gcc-patches@gcc.gnu.org +Subject: Re: [patch/hppa-linux] MD_FALLBACK_FRAME_STATE_FOR definition +Date: Thu, 8 Jul 2004 23:44:54 -0400 (EDT) + +I committed the following, slightly revised version, of your patch. +The libjava portion was previously approved. + +Tested on hppa-unknown-linux-gnu. Installed to trunk. + +Thanks, +Dave +-- +J. David Anglin dave.anglin@nrc-cnrc.gc.ca +National Research Council of Canada (613) 990-0752 (FAX: 952-6602) + +2004-07-08 Randolph Chung + + * gcc/config/pa/pa32-linux.h (MD_FALLBACK_FRAME_STATE_FOR): Define. + + * libjava/configure.in (SIGNAL_HANDLER): Use pa-signal.h for hppa. + * libjava/configure: Regenerate. + * libjava/configure.host: Set can_unwind_signal for hppa*-linux. + * libjava/pa-signal.h: New file. + +Index: gcc/config/pa/pa32-linux.h +=================================================================== +RCS file: /cvs/gcc/gcc/gcc/config/pa/pa32-linux.h,v +retrieving revision 1.12 +diff -u -3 -p -r1.12 pa32-linux.h +--- gcc/config/pa/pa32-linux.h 23 Aug 2003 01:32:59 -0000 1.12 ++++ gcc/config/pa/pa32-linux.h 9 Jul 2004 03:12:51 -0000 +@@ -35,3 +35,97 @@ Boston, MA 02111-1307, USA. */ + __attribute__ ((__unused__, section(".ctors"), \ + aligned(sizeof(func_ptr)))) \ + = { (func_ptr) (-1) } ++ ++/* Do code reading to identify a signal frame, and set the frame ++ state data appropriately. See unwind-dw2.c for the structs. */ ++ ++#ifdef IN_LIBGCC2 ++#include ++#include ++ ++/* Unfortunately, because of various bugs and changes to the kernel, ++ we have several cases to deal with. ++ ++ In 2.4, the signal trampoline is 4 words, and (CONTEXT)->ra should ++ point directly at the beginning of the trampoline and struct rt_sigframe. ++ ++ In <= 2.6.5-rc2-pa3, the signal trampoline is 9 words, and ++ (CONTEXT)->ra points at the 4th word in the trampoline structure. This ++ is wrong, it should point at the 5th word. This is fixed in 2.6.5-rc2-pa4. ++ ++ To detect these cases, we first take (CONTEXT)->ra, align it to 64-bytes ++ to get the beginning of the signal frame, and then check offsets 0, 4 ++ and 5 to see if we found the beginning of the trampoline. This will ++ tell us how to locate the sigcontext structure. ++ ++ Note that with a 2.4 64-bit kernel, the signal context is not properly ++ passed back to userspace so the unwind will not work correctly. */ ++#define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS, SUCCESS) \ ++ do { \ ++ unsigned long sp = (unsigned long)(CONTEXT)->ra & ~63; \ ++ unsigned int *pc = (unsigned int *)sp; \ ++ unsigned long off; \ ++ _Unwind_Ptr new_cfa; \ ++ int i; \ ++ struct sigcontext *sc; \ ++ struct rt_sigframe { \ ++ struct siginfo info; \ ++ struct ucontext uc; \ ++ } *frame; \ ++ \ ++ /* rt_sigreturn trampoline: \ ++ 3419000x ldi 0, %r25 or ldi 1, %r25 (x = 0 or 2) \ ++ 3414015a ldi __NR_rt_sigreturn, %r20 \ ++ e4008200 be,l 0x100(%sr2, %r0), %sr0, %r31 \ ++ 08000240 nop */ \ ++ \ ++ if (pc[0] == 0x34190000 || pc[0] == 0x34190002) \ ++ off = 4*4; \ ++ else if (pc[4] == 0x34190000 || pc[4] == 0x34190002) \ ++ { \ ++ pc += 4; \ ++ off = 10 * 4; \ ++ } \ ++ else if (pc[5] == 0x34190000 || pc[5] == 0x34190002) \ ++ { \ ++ pc += 5; \ ++ off = 10 * 4; \ ++ } \ ++ else \ ++ break; \ ++ if (pc[1] != 0x3414015a \ ++ || pc[2] != 0xe4008200 \ ++ || pc[3] != 0x08000240) \ ++ break; \ ++ \ ++ frame = (struct rt_sigframe *)(sp + off); \ ++ sc = &frame->uc.uc_mcontext; \ ++ \ ++ new_cfa = sc->sc_gr[30]; \ ++ (FS)->cfa_how = CFA_REG_OFFSET; \ ++ (FS)->cfa_reg = 30; \ ++ (FS)->cfa_offset = new_cfa - (long) (CONTEXT)->cfa; \ ++ for (i = 1; i <= 31; i++) \ ++ { \ ++ (FS)->regs.reg[i].how = REG_SAVED_OFFSET; \ ++ (FS)->regs.reg[i].loc.offset = (long)&sc->sc_gr[i] - new_cfa; \ ++ } \ ++ for (i = 4; i <= 31; i++) \ ++ { \ ++ /* FP regs have left and right halves */ \ ++ (FS)->regs.reg[2*i+24].how = REG_SAVED_OFFSET; \ ++ (FS)->regs.reg[2*i+24].loc.offset \ ++ = (long)&sc->sc_fr[i] - new_cfa; \ ++ (FS)->regs.reg[2*i+24+1].how = REG_SAVED_OFFSET; \ ++ (FS)->regs.reg[2*i+24+1].loc.offset \ ++ = (long)&sc->sc_fr[i] + 4 - new_cfa; \ ++ } \ ++ (FS)->regs.reg[88].how = REG_SAVED_OFFSET; \ ++ (FS)->regs.reg[88].loc.offset = (long) &sc->sc_sar - new_cfa; \ ++ (FS)->regs.reg[2].how = REG_SAVED_OFFSET; \ ++ (FS)->regs.reg[2].loc.offset = (long) &sc->sc_iaoq[0] - new_cfa; \ ++ (FS)->retaddr_column = 2; \ ++ goto SUCCESS; \ ++ } while (0) ++ ++#endif /* IN_LIBGCC2 */ +Index: libjava/configure.host +=================================================================== +RCS file: /cvs/gcc/gcc/libjava/configure.host,v +retrieving revision 1.59 +diff -u -3 -p -r1.59 configure.host +--- libjava/configure.host 7 Jul 2004 18:23:59 -0000 1.59 ++++ libjava/configure.host 9 Jul 2004 03:12:51 -0000 +@@ -169,6 +169,7 @@ case "${host}" in + sparc*-linux* | \ + ia64-* | \ + x86_64*-linux* | \ ++ hppa*-linux* | \ + sh-linux* | sh[34]*-linux*) + can_unwind_signal=yes + if test x$slow_pthread_self = xyes \ +Index: libjava/configure.in +=================================================================== +RCS file: /cvs/gcc/gcc/libjava/configure.in,v +retrieving revision 1.186 +diff -u -3 -p -r1.186 configure.in +--- libjava/configure.in 1 Jul 2004 04:09:07 -0000 1.186 ++++ libjava/configure.in 9 Jul 2004 03:12:51 -0000 +@@ -1177,6 +1177,9 @@ case "${host}" in + # SYSDEP_SOURCES=sysdep/ia64.c + # test -d sysdep || mkdir sysdep + # ;; ++ hppa*-*-linux*) ++ SIGNAL_HANDLER=include/pa-signal.h ++ ;; + ia64-*-linux*) + SIGNAL_HANDLER=include/dwarf2-signal.h + ;; +--- libjava/include/pa-signal.h 2004-05-04 13:30:25.000000000 -0700 ++++ libjava/include/pa-signal.h 2004-05-04 13:30:25.000000000 -0700 +@@ -0,0 +1,61 @@ ++// pa-signal.h - Catch runtime signals and turn them into exceptions. ++ ++/* Copyright (C) 1998, 1999, 2000 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 JAVA_SIGNAL_H ++#define JAVA_SIGNAL_H 1 ++ ++#include ++#include ++#include ++ ++#define HANDLE_SEGV 1 ++#define HANDLE_FPE 1 ++ ++#define SIGNAL_HANDLER(_name) \ ++static void _Jv_##_name (int _dummy, siginfo_t *_info, void *arg) ++ ++#define MAKE_THROW_FRAME(_exception) \ ++do \ ++{ \ ++ struct ucontext *uc = (struct ucontext *)arg; \ ++ struct sigcontext *sc = &uc->uc_mcontext; \ ++ (void)_dummy; \ ++ (void)_info; \ ++ /* Advance the program counter so that it is after the start \ ++ of the instruction: the exception handler expects \ ++ the PC to point to the instruction after a call. */ \ ++ sc->sc_iaoq[0] = sc->sc_iaoq[1]; \ ++ sc->sc_iaoq[1] += 4; \ ++} \ ++while (0) ++ ++#define INIT_SEGV \ ++do \ ++ { \ ++ struct sigaction act; \ ++ act.sa_sigaction = _Jv_catch_segv; \ ++ sigemptyset (&act.sa_mask); \ ++ act.sa_flags = SA_SIGINFO; \ ++ syscall (SYS_rt_sigaction, SIGSEGV, &act, NULL, _NSIG / 8); \ ++ } \ ++while (0) ++ ++#define INIT_FPE \ ++do \ ++ { \ ++ struct sigaction act; \ ++ act.sa_sigaction = _Jv_catch_fpe; \ ++ sigemptyset (&act.sa_mask); \ ++ act.sa_flags = SA_SIGINFO; \ ++ syscall (SYS_rt_sigaction, SIGFPE, &act, NULL, _NSIG / 8); \ ++ } \ ++while (0) ++ ++#endif /* JAVA_SIGNAL_H */ --- gcc-3.4-3.4.6.orig/debian/patches/alpha-ieee.dpatch +++ gcc-3.4-3.4.6/debian/patches/alpha-ieee.dpatch @@ -0,0 +1,53 @@ +#! /bin/sh -e + +# DP: #212912 +# DP: on alpha-linux, make -mieee default and add -mieee-disable switch +# DP: to turn default off + +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/gcc/config/alpha/alpha.c_ 2003-12-23 15:08:11.000000000 -0500 ++++ src/gcc/config/alpha/alpha.c 2003-12-23 15:16:31.000000000 -0500 +@@ -337,4 +337,8 @@ + }; + ++ /* If not -ffinite-math-only, enable -mieee*/ ++ if (!flag_finite_math_only) ++ target_flags |= MASK_IEEE|MASK_IEEE_CONFORMANT; ++ + /* Unicos/Mk doesn't have shared libraries. */ + if (TARGET_ABI_UNICOSMK && flag_pic) +--- src/gcc/doc/invoke.texi_ 2004-01-06 10:59:19.000000000 -0500 ++++ src/gcc/doc/invoke.texi 2004-01-06 11:26:11.000000000 -0500 +@@ -8571,4 +8571,11 @@ + compilers call this option @option{-ieee_with_no_inexact}. + ++DEBIAN SPECIFIC: This option is on by default, unless ++@option{-ffinite-math-only} (which is part of the @option{-ffast-math} ++set) is specified, because the software functions in the GNU libc math ++libraries generate denormalized numbers, NaNs, and infs (all of which ++will cause a programs to SIGFPE when it attempts to use the results without ++@option{-mieee}). ++ + @item -mieee-with-inexact + @opindex mieee-with-inexact --- gcc-3.4-3.4.6.orig/debian/patches/fastjar-update.dpatch +++ gcc-3.4-3.4.6/debian/patches/fastjar-update.dpatch @@ -0,0 +1,1179 @@ +#! /bin/sh -e + +# DP: Implement fastjar -u (PR 7854). + +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 fastjar.old/Makefile.am fastjar/Makefile.am +--- fastjar.old/Makefile.am 2004-04-15 01:49:37.000000000 +0200 ++++ fastjar/Makefile.am 2004-05-30 17:30:34.000000000 +0200 +@@ -46,10 +46,11 @@ + LIBIBERTY = ../libiberty/libiberty.a + + bin_PROGRAMS = jar grepjar +-jar_SOURCES = jartool.c dostime.c compress.c pushback.c jartool.h \ +-zipfile.h dostime.h compress.h pushback.h ++jar_SOURCES = jartool.c dostime.c compress.c pushback.c shift.c jartool.h \ ++zipfile.h dostime.h compress.h pushback.h shift.h + jar_LDADD = $(ZLIBS) $(LIBIBERTY) + jar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY) ++jar_CPPFLAGS = $(AM_CPPFLAGS) -DWITH_SHIFT_DOWN + + grepjar_SOURCES = jargrep.c dostime.c compress.c pushback.c jartool.h \ + zipfile.h dostime.h compress.h pushback.h +diff -urN fastjar.old/Makefile.in fastjar/Makefile.in +--- fastjar.old/Makefile.in 2004-04-19 04:23:04.000000000 +0200 ++++ fastjar/Makefile.in 2004-05-30 17:33:00.000000000 +0200 +@@ -165,11 +165,12 @@ + LIBIBERTY = ../libiberty/libiberty.a + + bin_PROGRAMS = jar grepjar +-jar_SOURCES = jartool.c dostime.c compress.c pushback.c jartool.h \ +-zipfile.h dostime.h compress.h pushback.h ++jar_SOURCES = jartool.c dostime.c compress.c pushback.c shift.c jartool.h \ ++zipfile.h dostime.h compress.h pushback.h shift.h + + jar_LDADD = $(ZLIBS) $(LIBIBERTY) + jar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY) ++jar_CPPFLAGS = -DWITH_SHIFT_DOWN + + grepjar_SOURCES = jargrep.c dostime.c compress.c pushback.c jartool.h \ + zipfile.h dostime.h compress.h pushback.h +@@ -217,8 +218,9 @@ + compress.$(OBJEXT) pushback.$(OBJEXT) + grepjar_OBJECTS = $(am_grepjar_OBJECTS) + grepjar_LDFLAGS = +-am_jar_OBJECTS = jartool.$(OBJEXT) dostime.$(OBJEXT) compress.$(OBJEXT) \ +- pushback.$(OBJEXT) ++am_jar_OBJECTS = jar-jartool.$(OBJEXT) jar-dostime.$(OBJEXT) \ ++ jar-compress.$(OBJEXT) jar-pushback.$(OBJEXT) \ ++ jar-shift.$(OBJEXT) + jar_OBJECTS = $(am_jar_OBJECTS) + jar_LDFLAGS = + +@@ -329,6 +331,36 @@ + .c.obj: + $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` + ++jar-jartool.o: jartool.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jar-jartool.o `test -f 'jartool.c' || echo '$(srcdir)/'`jartool.c ++ ++jar-jartool.obj: jartool.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jar-jartool.obj `if test -f 'jartool.c'; then $(CYGPATH_W) 'jartool.c'; else $(CYGPATH_W) '$(srcdir)/jartool.c'; fi` ++ ++jar-dostime.o: dostime.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jar-dostime.o `test -f 'dostime.c' || echo '$(srcdir)/'`dostime.c ++ ++jar-dostime.obj: dostime.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jar-dostime.obj `if test -f 'dostime.c'; then $(CYGPATH_W) 'dostime.c'; else $(CYGPATH_W) '$(srcdir)/dostime.c'; fi` ++ ++jar-compress.o: compress.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jar-compress.o `test -f 'compress.c' || echo '$(srcdir)/'`compress.c ++ ++jar-compress.obj: compress.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jar-compress.obj `if test -f 'compress.c'; then $(CYGPATH_W) 'compress.c'; else $(CYGPATH_W) '$(srcdir)/compress.c'; fi` ++ ++jar-pushback.o: pushback.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jar-pushback.o `test -f 'pushback.c' || echo '$(srcdir)/'`pushback.c ++ ++jar-pushback.obj: pushback.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jar-pushback.obj `if test -f 'pushback.c'; then $(CYGPATH_W) 'pushback.c'; else $(CYGPATH_W) '$(srcdir)/pushback.c'; fi` ++ ++jar-shift.o: shift.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jar-shift.o `test -f 'shift.c' || echo '$(srcdir)/'`shift.c ++ ++jar-shift.obj: shift.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jar_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jar-shift.obj `if test -f 'shift.c'; then $(CYGPATH_W) 'shift.c'; else $(CYGPATH_W) '$(srcdir)/shift.c'; fi` ++ + .texi.info: + @rm -f $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9] + $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ +diff -urN fastjar.old/compress.c fastjar/compress.c +--- fastjar.old/compress.c 2002-01-03 05:57:56.000000000 +0100 ++++ fastjar/compress.c 2004-05-30 17:30:34.000000000 +0200 +@@ -74,6 +74,7 @@ + /* + compress.c - code for handling deflation + Copyright (C) 1999 Bryan Burns ++ 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 +@@ -109,8 +110,12 @@ + #include "jartool.h" + #include "pushback.h" + #include "compress.h" ++#include "shift.h" ++ ++int write_data (int, void *, size_t, struct zipentry *); + + extern int seekable; ++extern off_t end_of_entries; + + static z_stream zs; + +@@ -133,7 +138,36 @@ + } + } + +-int compress_file(int in_fd, int out_fd, struct zipentry *ze){ ++int ++write_data (int fd, void *buf, size_t len, struct zipentry *ze) ++{ ++#ifdef WITH_SHIFT_DOWN ++ struct zipentry *next = NULL; ++ off_t here = lseek (fd, 0, SEEK_CUR); ++ /* ++ * If we are updating and there is not enough space before the next ++ * entry, expand the file. ++ */ ++ if (ze) ++ { ++ next = ze->next_entry; ++ if (next && here + len >= next->offset) ++ { ++ if (shift_down (fd, next->offset, (here + len) - next->offset, next)) ++ { ++ perror ("can't expand file"); ++ exit (1); ++ } ++ } ++ } ++#endif /* WITH_SHIFT_DOWN */ ++ ++ return write (fd, buf, len); ++} ++ ++int compress_file(int in_fd, int out_fd, struct zipentry *ze, ++ struct zipentry *existing) ++{ + Bytef in_buff[RDSZ]; + Bytef out_buff[RDSZ]; + unsigned int rdamt, wramt; +@@ -183,10 +217,11 @@ + /* If the output buffer is full, dump it to disk */ + if(zs.avail_out == 0){ + +- if(write(out_fd, out_buff, RDSZ) != RDSZ){ +- perror("write"); +- exit(1); +- } ++ if (write_data (out_fd, out_buff, RDSZ, existing) != RDSZ) ++ { ++ perror("write"); ++ exit(1); ++ } + + /* clear the output buffer */ + zs.next_out = out_buff; +@@ -201,10 +236,11 @@ + + wramt = RDSZ - zs.avail_out; + +- if(write(out_fd, out_buff, wramt) != (int)wramt){ +- perror("write"); +- exit(1); +- } ++ if (write_data (out_fd, out_buff, wramt, existing) != (int)wramt) ++ { ++ perror("write"); ++ exit(1); ++ } + /* clear the output buffer */ + zs.next_out = out_buff; + zs.avail_out = (uInt)RDSZ; +@@ -215,10 +251,11 @@ + while(deflate(&zs, Z_FINISH) == Z_OK){ + wramt = RDSZ - zs.avail_out; + +- if(write(out_fd, out_buff, wramt) != (int)wramt){ +- perror("write"); +- exit(1); +- } ++ if (write_data (out_fd, out_buff, wramt, existing) != (int)wramt) ++ { ++ perror("write"); ++ exit(1); ++ } + + zs.next_out = out_buff; + zs.avail_out = (uInt)RDSZ; +@@ -228,10 +265,11 @@ + if(zs.avail_out != RDSZ){ + wramt = RDSZ - zs.avail_out; + +- if(write(out_fd, out_buff, wramt) != (int)wramt){ +- perror("write"); +- exit(1); +- } ++ if (write_data (out_fd, out_buff, wramt, existing) != (int)wramt) ++ { ++ perror("write"); ++ exit(1); ++ } + } + + /* update fastjar's entry information */ +diff -urN fastjar.old/compress.h fastjar/compress.h +--- fastjar.old/compress.h 2000-12-14 19:45:35.000000000 +0100 ++++ fastjar/compress.h 2004-05-30 17:30:34.000000000 +0200 +@@ -46,7 +46,7 @@ + void init_compression(void); + + /* Compresses the file specified by in_fd and appends it to out_fd */ +-int compress_file(int in_fd, int out_fd, struct zipentry *ze); ++int compress_file(int, int, struct zipentry *, struct zipentry *); + + /* Frees memory used by compression function */ + void end_compression(void); +diff -urN fastjar.old/fastjar.texi fastjar/fastjar.texi +--- fastjar.old/fastjar.texi 2003-08-13 23:04:12.000000000 +0200 ++++ fastjar/fastjar.texi 2004-05-30 17:32:33.000000000 +0200 +@@ -125,8 +125,7 @@ + Extract named (or all) files from archive. + + @item -u +-Update existing archive. This option is disabled due to bugs (currently +-fails with exit status 1 and does nothing). ++Update existing archive. Note: This is a Debian backport from GCC 4.0. In unpatched builds this option is disabled due to bugs (currently fails with exit status 1 and does nothing). + + @end table + +diff -urN fastjar.old/jartool.c fastjar/jartool.c +--- fastjar.old/jartool.c 2004-01-07 19:46:04.000000000 +0100 ++++ fastjar/jartool.c 2004-05-30 17:30:34.000000000 +0200 +@@ -1,6 +1,6 @@ + /* + jartool.c - main functions for fastjar utility +- Copyright (C) 2002 Free Software Foundation ++ Copyright (C) 2002, 2004 Free Software Foundation + Copyright (C) 1999, 2000, 2001 Bryan Burns + + This program is free software; you can redistribute it and/or +@@ -238,6 +238,7 @@ + #include "dostime.h" + #include "pushback.h" + #include "compress.h" ++#include "shift.h" + + /* Some systems have mkdir that takes a single argument. */ + #ifdef MKDIR_TAKES_ONE_ARG +@@ -273,15 +274,18 @@ + int consume(pb_file *, int); + int list_jar(int, char**, int); + int extract_jar(int, char**, int); +-int add_file_to_jar(int, int, const char*, struct stat*); +-int add_to_jar(int, const char*); +-int add_to_jar_with_dir(int, const char*, const char*); ++int add_file_to_jar(int, int, const char*, struct stat*, int); ++int add_to_jar(int, const char*, int); ++int add_to_jar_with_dir(int, const char*, const char*, int); + int create_central_header(int); +-int make_manifest(int, const char*); ++int make_manifest(int, const char*, int); ++int read_entries (int); + static void init_args(char **, int); + static char *get_next_arg (void); + static char *jt_strdup (char*); + static void expand_options (int *argcp, char ***argvp); ++static inline struct zipentry *find_entry (const char *); ++static inline int looks_like_dir (const char *); + + /* global variables */ + ub1 file_header[30]; +@@ -305,6 +309,12 @@ + + int number_of_entries; /* number of entries in the linked list */ + ++/* What we go by. */ ++const char *progname; ++ ++/* The offset of the end of the last zip entry. */ ++ub4 end_of_entries; ++ + /* This is used to mark options with no short value. */ + #define LONG_OPT(Num) ((Num) + 128) + +@@ -340,6 +350,8 @@ + int new_argc; + char **new_argv; + ++ progname = argv[0]; ++ + do_compress = TRUE; + verbose = FALSE; + +@@ -418,15 +430,11 @@ + new_argv[new_argc] = NULL; + + if(action == ACTION_NONE){ +- fprintf(stderr, "One of options -{ctxu} must be specified.\n"); ++ fprintf(stderr, "%s: one of options -{ctxu} must be specified.\n", ++ progname); + usage(argv[0]); + } + +- if(action == ACTION_UPDATE){ +- fprintf(stderr, "%s: `-u' mode unimplemented.\n", argv[0]); +- exit(1); +- } +- + /* Verify unsupported combinations and warn of the use of non + standard features */ + if(verbose && use_explicit_list_only) +@@ -435,7 +443,8 @@ + fprintf (stderr, "Warning: using non standard '-@' option\n"); + if(read_names_from_stdin + && (action != ACTION_CREATE && action != ACTION_UPDATE)){ +- fprintf(stderr, "Option '-@' is supported only with '-c' or '-u'.\n"); ++ fprintf(stderr, "%s: option '-@' is supported only with '-c' or '-u'.\n", ++ progname); + usage(argv[0]); + } + +@@ -445,8 +454,8 @@ + jarfd = open(jarfile, O_CREAT | O_BINARY | O_WRONLY | O_TRUNC, 0666); + + if(jarfd < 0){ +- fprintf(stderr, "Error opening %s for writing!\n", jarfile); +- perror(jarfile); ++ fprintf(stderr, "%s: error opening %s for writing: %s\n", progname, ++ jarfile, strerror (errno)); + exit(1); + } + +@@ -470,8 +479,8 @@ + jarfd = open(jarfile, O_RDONLY | O_BINARY); + + if(jarfd < 0){ +- fprintf(stderr, "Error opening %s for reading!\n", jarfile); +- perror(jarfile); ++ fprintf(stderr, "%s: error opening %s for reading: %s\n", progname, ++ jarfile, strerror (errno)); + exit(1); + } + +@@ -484,28 +493,51 @@ + } + } + ++ if (action == ACTION_UPDATE) ++ { ++ if (!jarfile) ++ { ++ fprintf (stderr, "%s: `-u' mode requires a file name\n", ++ argv[0]); ++ exit (1); ++ } ++ ++ if ((jarfd = open (jarfile, O_RDWR | O_BINARY)) < 0) ++ { ++ fprintf (stderr, "Error opening %s for reading!\n", jarfile); ++ perror (jarfile); ++ exit (1); ++ } ++ ++ /* Assert that jarfd is seekable. */ ++ if (lseek (jarfd, 0, SEEK_CUR) == -1) ++ { ++ fprintf (stderr, "%s: %s is not seekable\n", argv[0], jarfile); ++ exit (1); ++ } ++ ++ seekable = TRUE; ++ } ++ + if(action == ACTION_CREATE || action == ACTION_UPDATE){ + const char *arg; + init_headers(); + +- if((action == ACTION_UPDATE) && jarfile) { +- if((jarfd = open(jarfile, O_RDWR | O_BINARY)) < 0) { +- fprintf(stderr, "Error opening %s for reading!\n", jarfile); +- perror(jarfile); +- exit(1); +- } +- } +- + if(do_compress) + init_compression(); +- ++ ++ if (action == ACTION_UPDATE) ++ { ++ if (read_entries (jarfd)) ++ exit (1); ++ } + + /* Add the META-INF/ directory and the manifest */ + if(manifest && mfile) +- make_manifest(jarfd, mfile); +- else if(manifest) +- make_manifest(jarfd, NULL); +- ++ make_manifest(jarfd, mfile, action == ACTION_UPDATE); ++ else if(manifest && action == ACTION_CREATE) ++ make_manifest(jarfd, NULL, FALSE); ++ + init_args (new_argv, 0); + /* now we add the files to the archive */ + while ((arg = get_next_arg ())){ +@@ -514,17 +546,19 @@ + const char *dir_to_change = get_next_arg (); + const char *file_to_add = get_next_arg (); + if (!dir_to_change || !file_to_add) { +- fprintf(stderr, "Error: missing argument for -C.\n"); +- exit(1); +- } +- if (add_to_jar_with_dir(jarfd, dir_to_change, file_to_add)) { +- fprintf(stderr, +- "Error adding %s (in directory %s) to jar archive!\n", +- file_to_add, dir_to_change); ++ fprintf(stderr, "%s: error: missing argument for -C.\n", progname); + exit(1); + } ++ if (add_to_jar_with_dir(jarfd, dir_to_change, file_to_add, ++ action == ACTION_UPDATE)) ++ { ++ fprintf(stderr, ++ "Error adding %s (in directory %s) to jar archive!\n", ++ file_to_add, dir_to_change); ++ exit(1); ++ } + } else { +- if(add_to_jar(jarfd, arg)){ ++ if(add_to_jar(jarfd, arg, action == ACTION_UPDATE)){ + fprintf(stderr, "Error adding %s to jar archive!\n", arg); + exit(1); + } +@@ -533,11 +567,20 @@ + /* de-initialize the compression DS */ + if(do_compress) + end_compression(); ++ ++ if (action == ACTION_UPDATE) ++ lseek (jarfd, end_of_entries, SEEK_SET); + + create_central_header(jarfd); +- +- if (close(jarfd) != 0) { +- fprintf(stderr, "Error closing jar archive!\n"); ++ ++ /* Check if the file shrunk when we updated it. */ ++ if (action == ACTION_UPDATE) ++ ftruncate (jarfd, lseek (jarfd, 0, SEEK_CUR)); ++ ++ if (jarfd != STDIN_FILENO && close(jarfd) != 0) { ++ fprintf(stderr, "%s: error closing jar archive: %s\n", ++ progname, strerror (errno)); ++ exit (1); + } + } else if(action == ACTION_LIST){ + list_jar(jarfd, &new_argv[0], new_argc); +@@ -688,7 +731,175 @@ + number_of_entries++; + } + +-int make_manifest(int jfd, const char *mf_name){ ++static inline struct zipentry * ++find_entry (const char *fname) ++{ ++ struct zipentry *ze; ++ ++ for (ze = ziptail; ze; ze = ze->next_entry) ++ { ++ if (!strcmp (ze->filename, fname)) ++ return ze; ++ } ++ return NULL; ++} ++ ++ ++static inline int ++looks_like_dir (const char *fname) ++{ ++ struct zipentry *ze; ++ size_t len = strlen (fname); ++ ++ for (ze = ziptail; ze; ze = ze->next_entry) ++ { ++ if (strlen (ze->filename) > len ++ && !strncmp (fname, ze->filename, len) ++ && ze->filename[len] == '/') ++ return 1; ++ } ++ return 0; ++} ++ ++ ++/* ++ * Read the zip entries of an existing file, building `ziplist' as we go. ++ */ ++int read_entries (int fd) ++{ ++ struct zipentry *ze; ++ ub1 intbuf[4]; ++ ub1 header[46]; ++ ub2 len; ++ ub2 count, i; ++ off_t offset; ++ ++ if (lseek (fd, -22, SEEK_END) == -1) ++ { ++ fprintf (stderr, "%s: %s: can't seek file\n", progname, jarfile); ++ return 1; ++ } ++ ++ if (read (fd, intbuf, 4) < 4) ++ { ++ perror (progname); ++ return 1; ++ } ++ /* Is there a zipfile comment? */ ++ while (UNPACK_UB4(intbuf, 0) != 0x06054b50) ++ { ++ if (lseek (fd, -5, SEEK_CUR) == -1 || ++ read (fd, intbuf, 4) != 4) ++ { ++ fprintf (stderr, "%s: can't find end of central directory: %s\n", ++ progname, strerror (errno)); ++ return 1; ++ } ++ } ++ ++ /* Skip disk numbers. */ ++ if (lseek (fd, 6, SEEK_CUR) == -1) ++ { ++ perror (progname); ++ return 1; ++ } ++ ++ /* Number of entries in the central directory. */ ++ if (read (fd, intbuf, 2) != 2) ++ { ++ perror (progname); ++ return 1; ++ } ++ count = UNPACK_UB2(intbuf, 0); ++ ++ if (lseek (fd, 4, SEEK_CUR) == -1) ++ { ++ perror (progname); ++ return 1; ++ } ++ ++ /* Offset where the central directory begins. */ ++ if (read (fd, intbuf, 4) != 4) ++ { ++ perror (progname); ++ return 1; ++ } ++ offset = UNPACK_UB4(intbuf, 0); ++ end_of_entries = offset; ++ ++ if (lseek (fd, offset, SEEK_SET) != offset) ++ { ++ perror (progname); ++ return 1; ++ } ++ ++ if (read (fd, header, 46) != 46) ++ { ++ fprintf (stderr, "%s: %s: unexpected end of file\n", ++ progname, jarfile); ++ return 1; ++ } ++ ++ for (i = 0; i < count; i++) ++ { ++ if (UNPACK_UB4(header, 0) != 0x02014b50) ++ { ++ fprintf (stderr, "%s: can't find central directory header\n", ++ progname); ++ return 1; ++ } ++ ze = (struct zipentry *) malloc (sizeof (struct zipentry)); ++ if (!ze) ++ { ++ perror (progname); ++ return 1; ++ } ++ memset (ze, 0, sizeof (struct zipentry)); ++ ze->flags = UNPACK_UB2(header, CEN_FLAGS); ++ ze->mod_time = UNPACK_UB2(header, CEN_MODTIME); ++ ze->mod_date = UNPACK_UB2(header, CEN_MODDATE); ++ ze->crc = UNPACK_UB4(header, CEN_CRC); ++ ze->usize = UNPACK_UB4(header, CEN_USIZE); ++ ze->csize = UNPACK_UB4(header, CEN_CSIZE); ++ ze->offset = UNPACK_UB4(header, CEN_OFFSET); ++ ze->compressed = (header[CEN_COMP] || header[CEN_COMP+1]); ++ len = UNPACK_UB2(header, CEN_FNLEN); ++ ze->filename = (char *) malloc ((len+1) * sizeof (char)); ++ if (!ze->filename) ++ { ++ perror (progname); ++ return 1; ++ } ++ if (read (fd, ze->filename, len) != len) ++ { ++ fprintf (stderr, "%s: %s: unexpected end of file\n", ++ progname, jarfile); ++ return 1; ++ } ++ len = UNPACK_UB4(header, CEN_EFLEN); ++ len += UNPACK_UB4(header, CEN_COMLEN); ++ if (lseek (fd, len, SEEK_CUR) == -1) ++ { ++ perror (progname); ++ return 1; ++ } ++ add_entry (ze); ++ if (i < count - 1) ++ { ++ if (read (fd, header, 46) != 46) ++ { ++ fprintf (stderr, "%s: %s: unexpected end of file\n", ++ progname, jarfile); ++ return 1; ++ } ++ } ++ } ++ ++ lseek (fd, 0, SEEK_SET); ++ return 0; ++} ++ ++int make_manifest(int jfd, const char *mf_name, int updating){ + time_t current_time; + int nlen; /* length of file name */ + int mod_time; /* file modification time */ +@@ -812,7 +1023,7 @@ + exit(1); + } + +- if(add_file_to_jar(jfd, mfd, "META-INF/MANIFEST.MF", &statbuf)){ ++ if(add_file_to_jar(jfd, mfd, "META-INF/MANIFEST.MF", &statbuf, updating)){ + perror("error writing to jar"); + exit(1); + } +@@ -823,9 +1034,16 @@ + } + + /* Implements -C by wrapping add_to_jar. new_dir is the directory +- to switch to. */ ++ to switch to. ++ ++ `updating', if nonzero, will indicate that we are updating an ++ existing file, and will need to take special care. If set, we will ++ also expect that the linked list of zip entries will be filled in ++ with the jar file's current contents. ++ */ + int +-add_to_jar_with_dir (int fd, const char* new_dir, const char* file) ++add_to_jar_with_dir (int fd, const char* new_dir, const char* file, ++ const int updating) + { + int retval; + char old_dir[MAXPATHLEN]; +@@ -837,7 +1055,7 @@ + perror(new_dir); + return 1; + } +- retval=add_to_jar(fd, file); ++ retval=add_to_jar(fd, file, updating); + if (chdir(old_dir) == -1) { + perror(old_dir); + return 1; +@@ -846,11 +1064,13 @@ + } + + int +-add_to_jar (int fd, const char *file) { ++add_to_jar (int fd, const char *file, const int updating) ++{ + struct stat statbuf; + DIR *dir; + struct dirent *de; + zipentry *ze; ++ zipentry *existing = NULL; + int stat_return; + + /* This is a quick compatibility fix -- Simon Weijgers +@@ -917,9 +1137,6 @@ + PACK_UB2(file_header, LOC_FNLEN, nlen); + PACK_UB4(file_header, LOC_MODTIME, mod_time); + +- if(verbose) +- printf("adding: %s (in=%d) (out=%d) (stored 0%%)\n", fullname, 0, 0); +- + ze = (zipentry*)malloc(sizeof(zipentry)); + if(ze == NULL){ + perror("malloc"); +@@ -936,10 +1153,36 @@ + ze->mod_date = (ub2)((mod_time & 0xffff0000) >> 16); + ze->compressed = FALSE; + +- add_entry(ze); ++ if (updating) ++ { ++ if ((existing = find_entry (ze->filename)) != NULL) ++ { ++ if (existing->usize != 0) ++ { ++ /* XXX overwriting non-directory with directory? */ ++ fprintf (stderr, "%s: %s: can't overwrite non-directory with directory\n", ++ progname, fullname); ++ return 1; ++ } ++ } ++ if (lseek (fd, end_of_entries, SEEK_SET) == -1) ++ { ++ fprintf (stderr, "%s %d\n", __FILE__, __LINE__); ++ perror ("lseek"); ++ return 1; ++ } ++ } ++ ++ if (!existing) ++ { ++ add_entry (ze); ++ write (fd, file_header, 30); ++ write (fd, fullname, nlen); ++ end_of_entries = lseek (fd, 0, SEEK_CUR); + +- write(fd, file_header, 30); +- write(fd, fullname, nlen); ++ if (verbose) ++ printf ("adding: %s (in=%d) (out=%d) (stored 0%%)\n", fullname, 0, 0); ++ } + + while(!use_explicit_list_only && (de = readdir(dir)) != NULL){ + if(de->d_name[0] == '.') +@@ -953,7 +1196,7 @@ + + strcpy(t_ptr, de->d_name); + +- if (add_to_jar(fd, fullname)) { ++ if (add_to_jar(fd, fullname, updating)) { + fprintf(stderr, "Error adding file to jar!\n"); + return 1; + } +@@ -971,7 +1214,7 @@ + return 1; + } + +- if(add_file_to_jar(fd, add_fd, file, &statbuf)){ ++ if(add_file_to_jar(fd, add_fd, file, &statbuf, updating)){ + fprintf(stderr, "Error adding file to jar!\n"); + return 1; + } +@@ -982,8 +1225,9 @@ + return 0; + } + +-int add_file_to_jar(int jfd, int ffd, const char *fname, struct stat *statbuf){ +- ++int add_file_to_jar(int jfd, int ffd, const char *fname, struct stat *statbuf, ++ const int updating) ++{ + unsigned short file_name_length; + unsigned long mod_time; + ub1 rd_buff[RDSZ]; +@@ -991,6 +1235,18 @@ + off_t offset = 0; + int rdamt; + struct zipentry *ze; ++ struct zipentry *existing = NULL; ++ ++ if (updating) ++ { ++ existing = find_entry (fname); ++ if (existing && looks_like_dir (fname)) ++ { ++ fprintf (stderr, "%s: %s is a directory in the archive\n", ++ progname, fname); ++ return 1; ++ } ++ } + + mod_time = unix2dostime(&(statbuf->st_mtime)); + file_name_length = strlen(fname); +@@ -1045,13 +1301,29 @@ + + ze->csize = statbuf->st_size; + ze->usize = ze->csize; +- ze->offset = lseek(jfd, 0, SEEK_CUR); ++ ++ if (existing) ++ ze->offset = existing->offset; ++ else if (updating) ++ ze->offset = end_of_entries; ++ else ++ ze->offset = lseek(jfd, 0, SEEK_CUR); ++ + if(do_compress) + ze->compressed = TRUE; + else + ze->compressed = FALSE; +- +- add_entry(ze); ++ ++ if (!existing) ++ add_entry(ze); ++ if (updating && lseek (jfd, ze->offset, SEEK_SET) < 0) ++ { ++ perror ("lseek"); ++ return 1; ++ } ++ ++ /* We can safely write the header here, since it will be the same size ++ as before */ + + /* Write the local header */ + write(jfd, file_header, 30); +@@ -1061,14 +1333,31 @@ + + + if(verbose){ +- printf("adding: %s ", fname); ++ if (existing) ++ printf ("updating: %s ", fname); ++ else ++ printf("adding: %s ", fname); + fflush(stdout); + } + + if(do_compress){ + /* compress the file */ +- compress_file(ffd, jfd, ze); ++ compress_file(ffd, jfd, ze, existing); + } else { ++ /* If we are not writing the last entry, make space for it. */ ++ if (existing && existing->next_entry) ++ { ++ if (ze->usize > existing->usize) ++ { ++ if (shift_down (jfd, existing->next_entry->offset, ++ ze->usize - existing->usize, existing->next_entry)) ++ { ++ fprintf (stderr, "%s: %s\n", progname, strerror (errno)); ++ return 1; ++ } ++ } ++ } ++ + /* Write the contents of the file (uncompressed) to the zip file */ + /* calculate the CRC as we go along */ + ze->crc = crc32(0L, Z_NULL, 0); +@@ -1112,12 +1401,42 @@ + /* Sun's jar tool will only allow a data descriptor if the entry is + compressed, but we'll save 16 bytes/entry if we only use it when + we can't seek back on the file */ ++ /* Technically, you CAN'T have a data descriptor unless the data ++ part has an obvious end, which DEFLATED does. Otherwise, there ++ would not be any way to determine where the data descriptor is. ++ Store an uncompressed file that ends with 0x504b0708, and see. ++ -- csm */ + + if(write(jfd, data_descriptor, 16) != 16){ + perror("write"); + return 0; + } + } ++ ++ if (existing) ++ { ++ int dd = (existing->flags & (1 << 3)) ? 12 : 0; ++ if (existing->next_entry && ze->csize < existing->csize + dd) ++ { ++ if (shift_up (jfd, existing->next_entry->offset, ++ existing->csize + dd - ze->csize, ++ existing->next_entry)) ++ { ++ perror (progname); ++ return 1; ++ } ++ } ++ /* Replace the existing entry data with this entry's. */ ++ existing->csize = ze->csize; ++ existing->usize = ze->usize; ++ existing->crc = ze->crc; ++ existing->mod_time = ze->mod_time; ++ existing->mod_date = ze->mod_date; ++ free (ze->filename); ++ free (ze); ++ } ++ else if (updating) ++ end_of_entries = lseek (jfd, 0, SEEK_CUR); + + if(verbose) + printf("(in=%d) (out=%d) (%s %d%%)\n", +@@ -1890,7 +2209,7 @@ + { + printf("jar (%s) %s\n\n", PACKAGE, VERSION); + printf("Copyright 1999, 2000, 2001 Bryan Burns\n"); +- printf("Copyright 2002 Free Software Foundation\n"); ++ printf("Copyright 2002, 2004 Free Software Foundation\n"); + printf("\ + 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"); +diff -urN fastjar.old/jartool.h fastjar/jartool.h +--- fastjar.old/jartool.h 2000-12-09 04:08:23.000000000 +0100 ++++ fastjar/jartool.h 2004-05-30 17:30:34.000000000 +0200 +@@ -52,6 +52,10 @@ + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + ++#ifndef __FASTJAR_JARTOOL_H__ ++#define __FASTJAR_JARTOOL_H__ ++ ++#include + #include "config.h" + + #define ACTION_NONE 0 +@@ -104,9 +108,12 @@ + ub4 usize; + ub4 offset; + ub1 compressed; ++ ub2 flags; + char *filename; + + struct zipentry *next_entry; + }; + + typedef struct zipentry zipentry; ++ ++#endif /* __FASTJAR_JARTOOL_H__ */ +diff -urN fastjar.old/shift.c fastjar/shift.c +--- fastjar.old/shift.c 1970-01-01 01:00:00.000000000 +0100 ++++ fastjar/shift.c 2004-05-30 17:30:34.000000000 +0200 +@@ -0,0 +1,166 @@ ++/* shift.c -- utilities to move regions of data in a file. ++ 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 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. */ ++ ++ ++#include ++#include ++#include ++#include "jartool.h" ++#include "shift.h" ++ ++#define BUFFER_SIZE 1024 ++ ++#define MIN(a, b) ((a) < (b) ? (a) : (b)) ++ ++/* ++ * Shift the contents of a file up by `amount' bytes, starting at `begin'. ++ * The file is not truncated, data from `amount' to `begin - amount' is ++ * overwritten. The current file pointer of `fd' is preserved. Note that ++ * this might be past the new "end" of the file. ++ * ++ * If this function is passed a `struct zipentry', then all `offset' ++ * fields from that entry down the list that are greater than or equal ++ * to `begin' will be decreased by `amount'. ++ * ++ * fd - The file descriptor. ++ * begin - The offset of the first byte that should be shifted. ++ * amount - The number of bytes to shift by. ++ * ze - A pointer into a list of zip entries that should be updated ++ * to reflect the modified offset. ++ */ ++int ++shift_up (int fd, off_t begin, off_t amount, struct zipentry *ze) ++{ ++ extern off_t end_of_entries; ++ int len, moved = 0; ++ ub1 buffer[BUFFER_SIZE]; ++ off_t where, end, save; ++ ++ if (amount <= 0) ++ return 0; ++ ++ if ((save = lseek (fd, 0, SEEK_CUR)) == -1) ++ return 1; ++ if ((end = lseek (fd, 0, SEEK_END)) == -1) ++ return 1; ++ if (end < begin) ++ return 0; ++ ++ where = begin; ++ ++ do ++ { ++ if (lseek (fd, where, SEEK_SET) < 0) ++ return 1; ++ if ((len = read (fd, buffer, BUFFER_SIZE)) < 0) ++ return 1; ++ if (len == 0) ++ break; ++ if (lseek (fd, where - amount, SEEK_SET) < 0) ++ return 1; ++ if (write (fd, buffer, len) < 0) ++ return 1; ++ where += len; ++ } ++ while (where < end); ++ ++ for (; ze; ze = ze->next_entry) ++ { ++ if (ze->offset >= begin) ++ { ++ ze->offset -= amount; ++ moved = 1; ++ } ++ } ++ if (moved) ++ end_of_entries -= amount; ++ ++ if (lseek (fd, save, SEEK_SET) == -1) ++ return 1; ++ return 0; ++} ++ ++/* ++ * Shift the contents of this file down by `amount' bytes, extending the ++ * end of file, starting at `begin'. This function will preserve the ++ * current file pointer of `fd'. Naturally, this function will fail if ++ * `fd' is not seekable. ++ * ++ * If this function is passed a `struct zipentry', then all `offset' ++ * fields from that entry down the list that are greater than or equal ++ * to `begin' will be increased by `amount'. ++ * ++ * fd - The file descriptor. ++ * begin - The offset of the first byte that should be shifted. ++ * amount - The number of bytes to shift by. ++ * ze - A pointer into a list of zip entries that should be updated ++ * to reflect the modified offset. ++ */ ++int ++shift_down (int fd, off_t begin, off_t amount, struct zipentry *ze) ++{ ++ extern off_t end_of_entries; ++ int off, len, moved = 0; ++ ub1 buffer[BUFFER_SIZE]; ++ off_t where, save; ++ ++ if (amount <= 0) ++ return 0; ++ ++ if ((save = lseek (fd, 0, SEEK_CUR)) == -1) ++ return 1; ++ if ((where = lseek (fd, 0, SEEK_END)) == -1) ++ return 1; ++ if (where < begin) ++ return 0; ++ off = (where - begin) % BUFFER_SIZE; ++ if (off == 0) ++ where -= BUFFER_SIZE; ++ else ++ where -= off; ++ ++ do ++ { ++ if (lseek (fd, where, SEEK_SET) < 0) ++ return 1; ++ if ((len = read (fd, buffer, BUFFER_SIZE)) < 0) ++ return 1; ++ if (lseek (fd, where + amount, SEEK_SET) < 0) ++ return 1; ++ if (write (fd, buffer, len) < 0) ++ return 1; ++ where -= BUFFER_SIZE; ++ } ++ while (where >= begin); ++ ++ for (; ze; ze = ze->next_entry) ++ { ++ if (ze->offset >= begin) ++ { ++ ze->offset += amount; ++ moved = 1; ++ } ++ } ++ if (moved) ++ end_of_entries += amount; ++ ++ if (lseek (fd, save, SEEK_SET) == -1) ++ return 1; ++ ++ return 0; ++} +diff -urN fastjar.old/shift.h fastjar/shift.h +--- fastjar.old/shift.h 1970-01-01 01:00:00.000000000 +0100 ++++ fastjar/shift.h 2004-05-30 17:30:34.000000000 +0200 +@@ -0,0 +1,29 @@ ++/* shift.h -- utilities to move regions of data in a file. ++ 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 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 __FASTJAR_SHIFT_H__ ++#define __FASTJAR_SHIFT_H__ ++ ++#include ++#include "jartool.h" ++ ++int shift_down (int, off_t, off_t, struct zipentry *); ++int shift_up (int, off_t, off_t, struct zipentry *); ++ ++#endif /* __FASTJAR_SHIFT_H__ */ +diff -urN fastjar.old/zipfile.h fastjar/zipfile.h +--- fastjar.old/zipfile.h 2000-12-09 04:08:23.000000000 +0100 ++++ fastjar/zipfile.h 2004-05-30 17:30:34.000000000 +0200 +@@ -47,6 +47,7 @@ + #define LOC_FNLEN 26 /* filename length */ + #define LOC_EFLEN 28 /* extra-field length */ + ++#define CEN_FLAGS 8 + #define CEN_COMP 10 /* compression method */ + #define CEN_MODTIME 12 + #define CEN_MODDATE 14 --- gcc-3.4-3.4.6.orig/debian/patches/libssp.dpatch +++ gcc-3.4-3.4.6/debian/patches/libssp.dpatch @@ -0,0 +1,92 @@ +#! /bin/sh -e + +# All lines beginning with `# DPATCH:' are a description of the patch. +# DP: Hardened Debian SSP/ProPolice library (libssp). lorenzo@gnu.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 + +--- gcc/Makefile.in 2004-11-11 01:11:56.000000000 +0100 ++++ gcc/Makefile.in 2004-11-11 01:10:15.000000000 +0100 +@@ -486,11 +486,11 @@ + INSTALL_LIBGCC = install-libgcc + + # Options to use when compiling libgcc2.a. + # + LIBGCC2_DEBUG_CFLAGS = -g +-LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED @inhibit_libc@ ++LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED @inhibit_libc@ -D_LIBSSP_PROVIDES_SSP_ + + # Additional options to use when compiling libgcc2.a. + # Some targets override this to -isystem include + LIBGCC2_INCLUDES = + +--- gcc/gcc.c 2004-11-14 21:17:58.585438344 -0500 ++++ gcc/gcc.c 2004-11-21 13:28:43.699379520 -0500 +@@ -711,7 +711,17 @@ + static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC; + static const char *asm_spec = ASM_SPEC; + static const char *asm_final_spec = ASM_FINAL_SPEC; ++ ++#if defined(_LIBSSP_PROVIDES_SSP_) ++#if defined(EFAULT_PIE_SSP) || defined(EFAULT_SSP) ++static const char *link_spec = LINK_SPEC " %{!fno-stack-protector|!fno-stack-protector-all:-lssp %{static: -lc}}"; ++#else ++static const char *link_spec = LINK_SPEC " %{fstack-protector|fstack-protector-all:-lssp %{static: -lc}}"; ++#endif // defined(EFAULT_PIE_SSP) || defined(EFAULT_SSP) ++#else + static const char *link_spec = LINK_SPEC; ++#endif // defined(_LIBSSP_PROVIDES_SSP_) ++ + static const char *lib_spec = LIB_SPEC; + static const char *libgcc_spec = LIBGCC_SPEC; + static const char *endfile_spec = ENDFILE_SPEC; +diff -Nru gcc-3.4.3-ssp/gcc/libgcc-std.ver gcc-3.4.3-ssp-libssp/gcc/libgcc-std.ver +--- gcc/libgcc-std.ver 2004-11-14 21:18:00.004222656 -0500 ++++ gcc/libgcc-std.ver 2004-11-15 19:22:11.802713352 -0500 +@@ -175,7 +175,7 @@ + _Unwind_SjLj_ForcedUnwind + _Unwind_SjLj_Resume + +-%if !defined(_LIBC_PROVIDES_SSP_) ++%if !defined(_LIBC_PROVIDES_SSP_) && !defined(_LIBSSP_PROVIDES_SSP_) + # stack smash handler symbols + __guard + __stack_smash_handler +diff -Nru gcc-3.4.3-ssp/gcc/libgcc2.c gcc-3.4.3-ssp-libssp/gcc/libgcc2.c +--- gcc/libgcc2.c 2004-11-14 21:18:00.004222656 -0500 ++++ gcc/libgcc2.c 2004-11-15 19:24:58.428382400 -0500 +@@ -1680,7 +1680,7 @@ + + + #ifdef L_stack_smash_handler +-#ifndef _LIBC_PROVIDES_SSP_ ++#if !defined(_LIBC_PROVIDES_SSP_) && !defined(_LIBSSP_PROVIDES_SSP_) + #include + #include + #include +@@ -1797,5 +1797,5 @@ + #endif + _exit (127); + } +-#endif /* _LIBC_PROVIDES_SSP_ */ ++#endif /* _LIBC_PROVIDES_SSP_ && _LIBSSP_PROVIDES_SSP_ */ + #endif /* L_stack_smash_handler */ --- gcc-3.4-3.4.6.orig/debian/patches/m32r-limits.dpatch +++ gcc-3.4-3.4.6/debian/patches/m32r-limits.dpatch @@ -0,0 +1,32 @@ +#! /bin/sh -e +# +# +# DP: Author: NIIBE Yutaka +# DP: Status: experimental, only tested for Debian m32r + +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 -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 + +--- gcc-3.4.3/gcc/config/m32r/t-linux~ 2004-11-24 22:17:07.000000000 +0900 ++++ gcc-3.4.3/gcc/config/m32r/t-linux 2004-11-24 22:18:51.000000000 +0900 +@@ -48,3 +48,6 @@ SHLIB_MAPFILES += $(srcdir)/config/m32r/ + 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 gthr-gnat.c ++ ++# We're GNU system, where GNU C library is native C library. ++CROSS_SYSTEM_HEADER_DIR = $(gcc_tooldir)/include --- gcc-3.4-3.4.6.orig/debian/patches/amd64-specs.dpatch +++ gcc-3.4-3.4.6/debian/patches/amd64-specs.dpatch @@ -0,0 +1,36 @@ +#! /bin/sh -e + +# DP: On x86-64 use 64bits mode assembly except with -m32. + +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/gcc/config/i386/x86-64.h.old 2002-11-16 14:33:38.000000000 +0100 ++++ src/gcc/config/i386/x86-64.h 2003-11-26 22:54:35.000000000 +0100 +@@ -49,7 +49,7 @@ + + #undef ASM_SPEC + #define ASM_SPEC "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} \ +- %{Wa,*:%*} %{m32:--32}" ++ %{Wa,*:%*} %{m32:--32} %{!m32:--64}" + + /* A C statement (sans semicolon) to output to the stdio stream + FILE the assembler definition of uninitialized global DECL named --- gcc-3.4-3.4.6.orig/debian/patches/hppa-toplevel.dpatch +++ gcc-3.4-3.4.6/debian/patches/hppa-toplevel.dpatch @@ -0,0 +1,51 @@ +#! /bin/sh -e + +# DP: For hppa-linux enable libgcj and dependent libs in the toplevel directory + +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 + +--- configure.in~ 2004-02-22 16:12:01.000000000 +0100 ++++ configure.in 2004-02-22 16:22:19.000000000 +0100 +@@ -482,8 +482,9 @@ + # headers, crt*.o, etc., all of which are needed by these. + noconfigdirs="$noconfigdirs target-zlib" + ;; ++ parisc*-*-linux* | hppa*-*-linux*) ++ ;; + hppa*-*-*elf* | \ +- parisc*-*-linux* | hppa*-*-linux* | \ + hppa*-*-lites* | \ + hppa*-*-openbsd* | \ + hppa*64*-*-*) +--- configure~ 2004-02-21 20:43:26.000000000 +0100 ++++ configure 2004-02-22 16:24:31.000000000 +0100 +@@ -1243,8 +1243,9 @@ + # headers, crt*.o, etc., all of which are needed by these. + noconfigdirs="$noconfigdirs target-zlib" + ;; ++ parisc*-*-linux* | hppa*-*-linux*) ++ ;; + hppa*-*-*elf* | \ +- parisc*-*-linux* | hppa*-*-linux* | \ + hppa*-*-lites* | \ + hppa*-*-openbsd* | \ + hppa*64*-*-*) --- gcc-3.4-3.4.6.orig/debian/patches/amd64-biarch.dpatch +++ gcc-3.4-3.4.6/debian/patches/amd64-biarch.dpatch @@ -0,0 +1,86 @@ +#! /bin/sh -e + +# DP: biarch patches for i386/x86_64 + +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/t-linux64~ 2002-11-28 14:47:02.000000000 +0000 ++++ gcc/config/i386/t-linux64 2004-07-24 07:40:21.716247432 +0000 +@@ -6,7 +6,7 @@ + + MULTILIB_OPTIONS = m64/m32 + MULTILIB_DIRNAMES = 64 32 +-MULTILIB_OSDIRNAMES = ../lib64 ../lib ++MULTILIB_OSDIRNAMES = ../lib ../lib32 + + LIBGCC = stmp-multilib + INSTALL_LIBGCC = install-multilib +--- config-ml.in~ 2003-07-04 19:53:34.000000000 +0000 ++++ config-ml.in 2004-07-24 14:13:02.871407408 +0000 +@@ -500,6 +500,46 @@ + ;; + esac + ;; ++x86_64*-*-*) ++ case " $multidirs " in ++ *" 32 "*) ++ # We will not be able to create libraries with -m32 if ++ # we cannot even link a trivial program. It usually ++ # indicates the 32bit libraries are missing. ++ if echo 'main() {}' > conftest.c && ++ ${CC-gcc} -m32 conftest.c -o conftest; then ++ echo Enable only libstdc++. ++ old_multidirs="${multidirs}" ++ multidirs="" ++ for x in ${old_multidirs}; do ++ case "$x" in ++ *32* ) case ${ml_realsrcdir} in ++ *"libstdc++-v3" ) multidirs="${multidirs} ${x}" ;; ++ *"libf2c" ) multidirs="${multidirs} ${x}" ;; ++ *"libobjc" ) multidirs="${multidirs} ${x}" ;; ++ *"libiberty" ) multidirs="${multidirs} ${x}" ;; ++ *"zlib" ) multidirs="${multidirs} ${x}" ;; ++ *) : ;; ++ esac ++ ;; ++ *) multidirs="${multidirs} ${x}" ;; ++ esac ++ done ++ else ++ echo Could not link program with -m32, disabling it. ++ old_multidirs="${multidirs}" ++ multidirs="" ++ for x in ${old_multidirs}; do ++ case "$x" in ++ *m32* ) : ;; ++ *) multidirs="${multidirs} ${x}" ;; ++ esac ++ done ++ fi ++ rm -f conftest.c conftest ++ ;; ++ esac ++ ;; + esac + + # Remove extraneous blanks from multidirs. --- gcc-3.4-3.4.6.orig/debian/patches/libjava-mips.dpatch +++ gcc-3.4-3.4.6/debian/patches/libjava-mips.dpatch @@ -0,0 +1,38 @@ +#! /bin/sh -e + +# DP: libjava-mips patch from Thiemo Seufer + +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 + +# append the patch here and adjust the -p? flag in the patch calls. + +--- libjava/include/mips-signal.h.old 2003-10-22 18:35:16.000000000 +0200 ++++ libjava/include/mips-signal.h 2003-12-13 18:29:53.000000000 +0100 +@@ -80,7 +80,7 @@ + kact.k_sa_handler = catch_segv; \ + kact.k_sa_flags = SA_SIGINFO | SA_NODEFER; \ + sigemptyset (&kact.k_sa_mask); \ +- syscall (SYS_sigaction, SIGSEGV, &kact, NULL); \ ++ syscall (__NR_sigaction, SIGSEGV, &kact, NULL); \ + } \ + while (0) + --- gcc-3.4-3.4.6.orig/debian/patches/m32r-stack.dpatch +++ gcc-3.4-3.4.6/debian/patches/m32r-stack.dpatch @@ -0,0 +1,36 @@ +#! /bin/sh -e +# +# +# DP: Author: NIIBE Yutaka +# DP: Status: Not yet in CVS +# DP: Stack protection 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 -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 + +2004-11-12 NIIBE Yutaka + + * config/m32r/linux.h (TARGET_ASM_FILE_END): Defined for stack + protection. + +--- gcc-3.4.2/gcc/config/m32r/linux.h.orig 2003-12-31 19:33:02.000000000 +0900 ++++ gcc-3.4.2/gcc/config/m32r/linux.h 2004-11-12 11:32:02.000000000 +0900 +@@ -102,3 +102,4 @@ + + #define TARGET_OS_CPP_BUILTINS() LINUX_TARGET_OS_CPP_BUILTINS() + ++#define TARGET_ASM_FILE_END file_end_indicate_exec_stack --- gcc-3.4-3.4.6.orig/debian/patches/hppa-libjava.dpatch +++ gcc-3.4-3.4.6/debian/patches/hppa-libjava.dpatch @@ -0,0 +1,140 @@ +#! /bin/sh -e + +# All lines beginning with `# DPATCH:' are a description of the patch. +# DP: Enable libjava support for 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 -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 + +2004-02-10 Randolph Chung + + * configure.in: Build java for hppa target. + * libjava/configure.host (hppa-*): Add target. + * libjava/sysdeps/pa/lock.h: New file. + +diff -uNr src.orig/configure.in src/configure.in +--- src.orig/configure.in 2004-02-11 21:34:27.418499952 -0800 ++++ src/configure.in 2004-02-11 21:37:17.619625448 -0800 +@@ -487,7 +487,6 @@ + hppa*-*-lites* | \ + hppa*-*-openbsd* | \ + hppa*64*-*-*) +- noconfigdirs="$noconfigdirs ${libgcj}" + # Do configure ld/binutils/gas for this case. + ;; + hppa*-*-*) +diff -uNr src.orig/libjava/configure.host src/libjava/configure.host +--- src.orig/libjava/configure.host 2004-02-11 21:34:26.638618512 -0800 ++++ src/libjava/configure.host 2004-02-11 21:38:59.687108832 -0800 +@@ -115,6 +115,11 @@ + enable_hash_synchronization_default=yes + IEEESPEC=-mieee + ;; ++ hppa-*) ++ sysdeps_dir=pa ++ libgcj_interpreter=yes ++ enable_hash_synchronization_default=yes ++ ;; + powerpc64*-*) + sysdeps_dir=powerpc + libgcj_interpreter=yes +diff -uNr src.orig/libjava/sysdep/pa/locks.h src/libjava/sysdep/pa/locks.h +--- src.orig/libjava/sysdep/pa/locks.h 1969-12-31 16:00:00.000000000 -0800 ++++ src/libjava/sysdep/pa/locks.h 2004-02-11 21:40:03.542401352 -0800 +@@ -0,0 +1,78 @@ ++// locks.h - Thread synchronization primitives. PARISC implementation. ++ ++/* Copyright (C) 2002 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__ ++ ++typedef size_t obj_addr_t; /* Integer type big enough for object */ ++ /* address. */ ++ ++// 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. ++inline static bool ++compare_and_swap(volatile obj_addr_t *addr, ++ obj_addr_t old, ++ obj_addr_t new_val) ++{ ++ /* FIXME: not atomic */ ++ obj_addr_t prev; ++ ++ if ((prev = *addr) == old) ++ { ++ *addr = new_val; ++ return true; ++ } ++ else ++ { ++ return false; ++ } ++} ++ ++// Set *addr to new_val with release semantics, i.e. making sure ++// that prior loads and stores complete before this ++// assignment. ++inline static 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. ++inline static 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. ++inline static void ++read_barrier() ++{ ++ __asm__ __volatile__(" " : : : "memory"); ++} ++ ++// Ensure that prior stores to memory are completed with respect to other ++// processors. ++inline static void ++write_barrier() ++{ ++ __asm__ __volatile__(" " : : : "memory"); ++} ++ ++#endif ++ --- gcc-3.4-3.4.6.orig/debian/patches/libjava-no-rpath.dpatch +++ gcc-3.4-3.4.6/debian/patches/libjava-no-rpath.dpatch @@ -0,0 +1,102 @@ +#! /bin/sh -e + +# DP: work around libtool adding ld run path to gcj tools + +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/Makefile.am~ 2004-01-26 07:36:06.000000000 +0100 ++++ libjava/Makefile.am 2004-02-21 22:39:34.000000000 +0100 +@@ -719,7 +719,7 @@ + ## need this because we are explicitly using libtool to link using the + ## `.la' file. + jv_convert_LDFLAGS = --main=gnu.gcj.convert.Convert \ +- -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++ $(shell test $(toolexeclibdir) = /usr/lib || echo -rpath $(toolexeclibdir)) -shared-libgcc $(THREADLDFLAGS) + jv_convert_LINK = $(GCJLINK) + ## We don't explicitly link in the libraries we need; libgcj.la brings + ## in all dependencies. We need the -L so that gcj can find libgcj +@@ -738,7 +738,8 @@ + ## 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 $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++gij_LDFLAGS = $(shell test $(toolexeclibdir) = /usr/lib || echo -rpath $(toolexeclibdir)) -shared-libgcc $(THREADLDFLAGS) ++ + gij_LINK = $(GCJLINK) + ## See jv_convert_LDADD. + gij_LDADD = -L$(here)/.libs libgcj.la +@@ -750,7 +751,7 @@ + ## This is a dummy definition. + EXTRA_rmic_SOURCES = $(rmi_java_source_files) + rmic_LDFLAGS = --main=gnu.java.rmi.rmic.RMIC \ +- -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++ $(shell test $(toolexeclibdir) = /usr/lib || echo -rpath $(toolexeclibdir)) -shared-libgcc $(THREADLDFLAGS) + rmic_LINK = $(GCJLINK) + ## See jv_convert_LDADD. + rmic_LDADD = -L$(here)/.libs libgcj.la +@@ -762,7 +763,7 @@ + ## This is a dummy definition. + EXTRA_rmiregistry_SOURCES = $(rmi_java_source_files) + rmiregistry_LDFLAGS = --main=gnu.java.rmi.registry.RegistryImpl \ +- -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++ $(shell test $(toolexeclibdir) = /usr/lib || echo -rpath $(toolexeclibdir)) -shared-libgcc $(THREADLDFLAGS) + rmiregistry_LINK = $(GCJLINK) + ## See jv_convert_LDADD. + rmiregistry_LDADD = -L$(here)/.libs libgcj.la +--- libjava/Makefile.in~ 2004-01-26 07:36:06.000000000 +0100 ++++ libjava/Makefile.in 2004-02-21 22:48:12.000000000 +0100 +@@ -499,7 +499,7 @@ + jv_convert_SOURCES = + EXTRA_jv_convert_SOURCES = $(convert_source_files) + jv_convert_LDFLAGS = --main=gnu.gcj.convert.Convert \ +- -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++ $(shell test $(toolexeclibdir) = /usr/lib || echo -rpath $(toolexeclibdir)) -shared-libgcc $(THREADLDFLAGS) + + jv_convert_LINK = $(GCJLINK) + jv_convert_LDADD = -L$(here)/.libs libgcj.la +@@ -508,7 +508,7 @@ + + + gij_SOURCES = gij.cc +-gij_LDFLAGS = -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++gij_LDFLAGS = $(shell test $(toolexeclibdir) = /usr/lib || echo -rpath $(toolexeclibdir)) -shared-libgcc $(THREADLDFLAGS) + gij_LINK = $(GCJLINK) + gij_LDADD = -L$(here)/.libs libgcj.la + gij_DEPENDENCIES = libgcj.la libgcj.spec +@@ -516,7 +516,7 @@ + rmic_SOURCES = + EXTRA_rmic_SOURCES = $(rmi_java_source_files) + rmic_LDFLAGS = --main=gnu.java.rmi.rmic.RMIC \ +- -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++ $(shell test $(toolexeclibdir) = /usr/lib || echo -rpath $(toolexeclibdir)) -shared-libgcc $(THREADLDFLAGS) + + rmic_LINK = $(GCJLINK) + rmic_LDADD = -L$(here)/.libs libgcj.la +@@ -525,7 +525,7 @@ + rmiregistry_SOURCES = + EXTRA_rmiregistry_SOURCES = $(rmi_java_source_files) + rmiregistry_LDFLAGS = --main=gnu.java.rmi.registry.RegistryImpl \ +- -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) ++ $(shell test $(toolexeclibdir) = /usr/lib || echo -rpath $(toolexeclibdir)) -shared-libgcc $(THREADLDFLAGS) + + rmiregistry_LINK = $(GCJLINK) + rmiregistry_LDADD = -L$(here)/.libs libgcj.la --- gcc-3.4-3.4.6.orig/debian/patches/gccbug-manpage.dpatch +++ gcc-3.4-3.4.6/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 + + * 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 ). + 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-3.4-3.4.6.orig/debian/patches/gccbug.dpatch +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/patches/libltdl.dpatch +++ gcc-3.4-3.4.6/debian/patches/libltdl.dpatch @@ -0,0 +1,182 @@ +#! /bin/sh -e + +# DP: * libltdl.dpatch: Search the versioned extension, when loading a shared +# DP: library (i.e. gij looks for .so.5 for loading additional libraries +# DP: like the GTK based AWT peers. + +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 + +Index: libltdl/acinclude.m4 +=================================================================== +RCS file: /cvs/gcc/gcc/libjava/libltdl/acinclude.m4,v +retrieving revision 1.4.8.1 +diff -u -r1.4.8.1 acinclude.m4 +--- libjava/libltdl/acinclude.m4 24 Jun 2004 05:31:44 -0000 1.4.8.1 ++++ libjava/libltdl/acinclude.m4 7 Sep 2004 18:14:54 -0000 +@@ -6091,6 +6091,9 @@ + if test -n "$libltdl_cv_shlibext"; then + AC_DEFINE_UNQUOTED(LTDL_SHLIB_EXT, "$libltdl_cv_shlibext", + [Define to the extension used for shared libraries, say, ".so".]) ++ libltdl_cv_shlibversionext=.so.`grep -v '^\#' ${srcdir}/../libtool-version | awk -F: '{ print $'1' }'` ++ AC_DEFINE_UNQUOTED(LTDL_SHLIB_VERSION_EXT, "$libltdl_cv_shlibversionext", ++ [Define to the versioned extension used for shared libraries, say, ".so.5".]) + fi + ])# AC_LTDL_SHLIBEXT + +Index: libltdl/config-h.in +=================================================================== +RCS file: /cvs/gcc/gcc/libjava/libltdl/config-h.in,v +retrieving revision 1.3.16.1 +diff -u -r1.3.16.1 config-h.in +--- libjava/libltdl/config-h.in 24 Jun 2004 05:31:45 -0000 1.3.16.1 ++++ libjava/libltdl/config-h.in 7 Sep 2004 18:14:54 -0000 +@@ -158,6 +158,10 @@ + /* Define to the extension used for shared libraries, say, ".so". */ + #undef LTDL_SHLIB_EXT + ++/* Define to the versioned extension used for shared libraries, say, ".so.5". ++ */ ++#undef LTDL_SHLIB_VERSION_EXT ++ + /* Define to the system default library search path. */ + #undef LTDL_SYSSEARCHPATH + +Index: libltdl/configure +=================================================================== +RCS file: /cvs/gcc/gcc/libjava/libltdl/configure,v +retrieving revision 1.10.8.1 +diff -u -r1.10.8.1 configure +--- libjava/libltdl/configure 24 Jun 2004 05:31:46 -0000 1.10.8.1 ++++ libjava/libltdl/configure 7 Sep 2004 18:15:01 -0000 +@@ -19623,6 +19623,12 @@ + #define LTDL_SHLIB_EXT "$libltdl_cv_shlibext" + _ACEOF + ++ libltdl_cv_shlibversionext=.so.`grep -v '^\#' ${srcdir}/../libtool-version | awk -F: '{ print $'1' }'` ++ ++cat >>confdefs.h <<_ACEOF ++#define LTDL_SHLIB_VERSION_EXT "$libltdl_cv_shlibversionext" ++_ACEOF ++ + fi + + +Index: libltdl/ltdl.c +=================================================================== +RCS file: /cvs/gcc/gcc/libjava/libltdl/ltdl.c,v +retrieving revision 1.7 +diff -u -r1.7 ltdl.c +--- libjava/libltdl/ltdl.c 25 Dec 2003 19:33:06 -0000 1.7 ++++ libjava/libltdl/ltdl.c 7 Sep 2004 18:15:02 -0000 +@@ -859,6 +859,7 @@ + static const char objdir[] = LTDL_OBJDIR; + static const char archive_ext[] = LTDL_ARCHIVE_EXT; + #ifdef LTDL_SHLIB_EXT ++static const char shlib_version_ext[] = LTDL_SHLIB_VERSION_EXT; + static const char shlib_ext[] = LTDL_SHLIB_EXT; + #endif + #ifdef LTDL_SYSSEARCHPATH +@@ -2388,17 +2389,14 @@ + cur = *handle; + if (filename) + { +- /* Comment out the check of file permissions using access. +- This call seems to always return -1 with error EACCES. +- */ + /* We need to catch missing file errors early so that +- file_not_found() can detect what happened. ++ file_not_found() can detect what happened. */ + if (access (filename, R_OK) != 0) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (FILE_NOT_FOUND)); + ++errors; + goto done; +- } */ ++ } + + cur->info.filename = lt_estrdup (filename); + if (!cur->info.filename) +@@ -3425,10 +3423,11 @@ + return 0; + } + +-/* If FILENAME has an ARCHIVE_EXT or SHLIB_EXT extension, try to +- open the FILENAME as passed. Otherwise try appending ARCHIVE_EXT, +- and if a file is still not found try again with SHLIB_EXT appended +- instead. */ ++/* If FILENAME has an ARCHIVE_EXT, SHLIB_VERSION_EXT or SHLIB_EXT ++ extension, try to open the FILENAME as passed. Otherwise try ++ appending ARCHIVE_EXT, and if a file is still not found try again ++ with SHLIB_VERSION_EXT appended. If the file is still not found, ++ try again with SHLIB_EXT appended. */ + lt_dlhandle + lt_dlopenext (filename) + const char *filename; +@@ -3453,6 +3452,7 @@ + to try appending additional extensions. */ + if (ext && ((strcmp (ext, archive_ext) == 0) + #ifdef LTDL_SHLIB_EXT ++ || (strcmp (ext, shlib_version_ext) == 0) + || (strcmp (ext, shlib_ext) == 0) + #endif + )) +@@ -3460,6 +3460,29 @@ + return lt_dlopen (filename); + } + ++#ifdef LTDL_SHLIB_EXT ++ /* First try appending SHLIB_VERSION_EXT. */ ++ tmp = LT_EMALLOC (char, len + LT_STRLEN (shlib_version_ext) + 1); ++ if (!tmp) ++ return 0; ++ ++ strcpy (tmp, filename); ++ strcat(tmp, shlib_version_ext); ++ errors = try_dlopen (&handle, tmp); ++ ++ /* As before, if the file was found but loading failed, return now ++ with the current error message. */ ++ if (handle || ((errors > 0) && !file_not_found ())) ++ { ++ LT_DLFREE (tmp); ++ return handle; ++ } ++ else ++ { ++ LT_DLFREE (tmp); ++ } ++#endif ++ + /* First try appending ARCHIVE_EXT. */ + tmp = LT_EMALLOC (char, len + LT_STRLEN (archive_ext) + 1); + if (!tmp) +@@ -3482,7 +3505,7 @@ + + #ifdef LTDL_SHLIB_EXT + /* Try appending SHLIB_EXT. */ +- if (LT_STRLEN (shlib_ext) > LT_STRLEN (archive_ext)) ++ if (LT_STRLEN (shlib_ext) > LT_STRLEN (shlib_version_ext)) + { + LT_DLFREE (tmp); + tmp = LT_EMALLOC (char, len + LT_STRLEN (shlib_ext) + 1); --- gcc-3.4-3.4.6.orig/debian/patches/arm-gotoff.dpatch +++ gcc-3.4-3.4.6/debian/patches/arm-gotoff.dpatch @@ -0,0 +1,98 @@ +#! /bin/sh -e + +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 -p0 --fuzz 10 < $0 + ;; + -unpatch) + patch $pdir -f --no-backup-if-mismatch -R -p0 --fuzz 10 < $0 + ;; + *) + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1 +esac +exit 0 + +# DP: use GOTOFF not GOT relocs for .LCn and other local symbols; +# DP: don't use gotoff for non-static functions, even if defined locally + +=================================================================== +RCS file: /cvs/gcc/gcc/gcc/config/arm/arm.c,v +retrieving revision 1.243.2.5 +diff -u -r1.243.2.5 arm.c +--- gcc/config/arm/arm.c 14 Jun 2003 14:20:53 -0000 1.243.2.5 ++++ gcc/config/arm/arm.c 20 Sep 2003 14:18:02 -0000 +@@ -2364,6 +2364,40 @@ + return 1; + } + ++/* Return true if OP is a symbolic operand that resolves locally. */ ++ ++static int ++local_symbolic_operand (op, mode) ++ rtx op; ++ enum machine_mode mode ATTRIBUTE_UNUSED; ++{ ++ if (GET_CODE (op) == CONST ++ && GET_CODE (XEXP (op, 0)) == PLUS ++ && GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT) ++ op = XEXP (XEXP (op, 0), 0); ++ ++ if (GET_CODE (op) == LABEL_REF) ++ return 1; ++ ++ if (GET_CODE (op) != SYMBOL_REF) ++ return 0; ++ ++ /* These we've been told are local by varasm and encode_section_info ++ respectively. */ ++ if (CONSTANT_POOL_ADDRESS_P (op) || SYMBOL_REF_FLAG (op)) ++ return 1; ++ ++ /* There is, however, a not insubstantial body of code in the rest of ++ the compiler that assumes it can just stick the results of ++ ASM_GENERATE_INTERNAL_LABEL in a symbol_ref and have done. */ ++ /* ??? This is a hack. Should update the body of the compiler to ++ always create a DECL an invoke targetm.encode_section_info. */ ++ if (strncmp (XSTR (op, 0), ".L", 2) == 0) ++ return 1; ++ ++ return 0; ++} ++ + rtx + legitimize_pic_address (orig, mode, reg) + rtx orig; +@@ -2404,10 +2438,7 @@ + else + emit_insn (gen_pic_load_addr_thumb (address, orig)); + +- if ((GET_CODE (orig) == LABEL_REF +- || (GET_CODE (orig) == SYMBOL_REF && +- ENCODED_SHORT_CALL_ATTR_P (XSTR (orig, 0)))) +- && NEED_GOT_RELOC) ++ if (local_symbolic_operand (orig, Pmode) && NEED_GOT_RELOC) + pic_ref = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, address); + else + { +@@ -8804,11 +8835,7 @@ + if (NEED_GOT_RELOC && flag_pic && making_const_table && + (GET_CODE (x) == SYMBOL_REF || GET_CODE (x) == LABEL_REF)) + { +- if (GET_CODE (x) == SYMBOL_REF +- && (CONSTANT_POOL_ADDRESS_P (x) +- || ENCODED_SHORT_CALL_ATTR_P (XSTR (x, 0)))) +- fputs ("(GOTOFF)", asm_out_file); +- else if (GET_CODE (x) == LABEL_REF) ++ if (local_symbolic_operand (x, Pmode)) + fputs ("(GOTOFF)", asm_out_file); + else + fputs ("(GOT)", asm_out_file); --- gcc-3.4-3.4.6.orig/debian/patches/libstdc++-doxygen-syntax.dpatch +++ gcc-3.4-3.4.6/debian/patches/libstdc++-doxygen-syntax.dpatch @@ -0,0 +1,39 @@ +#! /bin/sh -e + +# DP: fix doxygen syntax error in header that causes segfaults with some +# DP: versions + +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 + +@DPATCH@ +diff -uNr src.orig/libstdc++-v3/include/bits/basic_string.h src/libstdc++-v3/include/bits/basic_string.h +--- src.orig/libstdc++-v3/include/bits/basic_string.h 2004-10-28 14:52:40.000000000 -0700 ++++ src/libstdc++-v3/include/bits/basic_string.h 2005-05-01 14:31:48.000000000 -0700 +@@ -248,7 +248,7 @@ + // Data Members (public): + // NB: This is an unsigned type, and thus represents the maximum + // size that the allocator can hold. +- /// @var ++ /// @var static const size_type npos + /// Value returned by various member functions when they fail. + static const size_type npos = static_cast(-1); + --- gcc-3.4-3.4.6.orig/debian/patches/sparc-biarch.dpatch +++ gcc-3.4-3.4.6/debian/patches/sparc-biarch.dpatch @@ -0,0 +1,59 @@ +#! /bin/sh -e +# 10_newpatch.dpatch by +# +# 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;; + -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/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 2003-03-13 08:40:33.000000000 +0000 ++++ gcc/config.gcc 2003-03-13 08:48:27.000000000 +0000 +@@ -2383,8 +2383,18 @@ + gnu_ld=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="t-slibgcc-elf-ver t-linux sparc/t-crtfm" ++ else ++ tmake_file="t-slibgcc-elf-ver t-linux sparc/t-linux64 sparc/t-crtfm" ++ tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux64.h" ++ float_format=sparc ++ need_64bit_hwint=yes ++ fi ++ #tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux.h" ++ #tmake_file="t-slibgcc-elf-ver t-linux sparc/t-crtfm" + ;; + sparc-*-lynxos*) + if test x$gas = xyes + --- gcc-3.4-3.4.6.orig/debian/patches/deb-protoize.dpatch +++ gcc-3.4-3.4.6/debian/patches/deb-protoize.dpatch @@ -0,0 +1,30 @@ +#! /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~ 2004-02-21 12:42:04.000000000 +0100 ++++ gcc/Makefile.in 2004-02-21 12:42:59.000000000 +0100 +@@ -121,7 +121,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@ --- gcc-3.4-3.4.6.orig/debian/patches/cross-configure.dpatch +++ gcc-3.4-3.4.6/debian/patches/cross-configure.dpatch @@ -0,0 +1,48 @@ +#! /bin/sh -e + +# DP: fix configure script to handle both --program-prefix and --program-suffix +# DP: and not to override binutils detected by autoconf + +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 + +--- configure.in.orig 2004-02-06 10:03:08.000000000 +0300 ++++ configure.in 2004-03-10 00:39:05.000000000 +0300 +@@ -2103,7 +2103,10 @@ + AC_SUBST(RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE) + + # Fix up target tools. +-if test "x${build}" = "x${host}" ; then ++# This is not needed for Debian: binutils are built separately, and ++# USUAL_*_FOR_TARGET macros do cause problems for cross-compiler build ++#if test "x${build}" = "x${host}" ; then ++if false; then + # In this case, the newly built tools can and should be used, + # so we override the results of the autoconf tests. + # This should really only happen when the tools are actually being built, +--- configure.orig 2004-02-06 10:03:08.000000000 +0300 ++++ configure 2004-03-10 00:39:18.000000000 +0300 +@@ -4006,7 +4006,10 @@ + + + # Fix up target tools. +-if test "x${build}" = "x${host}" ; then ++# This is not needed for Debian: binutils are built separately, and ++# USUAL_*_FOR_TARGET macros do cause problems for cross-compiler build ++#if test "x${build}" = "x${host}" ; then ++if false; then + # In this case, the newly built tools can and should be used, + # so we override the results of the autoconf tests. + # This should really only happen when the tools are actually being built, --- gcc-3.4-3.4.6.orig/debian/patches/netbsd-dynlinker.dpatch +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/patches/protector.uue +++ gcc-3.4-3.4.6/debian/patches/protector.uue @@ -0,0 +1,696 @@ +begin 644 protector-3.4-2.1.tar.gz +M'XL(`*_5WT$``^QOOCEJ-M^\?O4->_.U!+C\*F/@>OSP^G79_K]Z +M_?(U[#_\T3SZ`?Z%_7_U%E:0_2&+^/]\_U\\8\-QEUUOYG,>LN"&AW,ON&52 +M)=S`9_.-+_\(0G;9F[`VFP:KM>OQL,H8:P?K^]!=+&-6:]?92]@_=A%RSD;! +M/+YU0LXN@HT_>.V5==\K]B#,'),"6:,EG[/J>R%'^:H'\)XR[\#QDL$H1 +MKLC+!H/A:TZ,$L+JK9&J#F+=,\\!":J2,)E8(O^,N3Z-M@S6(.X2F,`$;EW/ +M8]><;2(^WW@-V)>8?>B,W_4G8];J?:I^:`V'K=[XTPE0QLL`GO(;+OBXJ[7G +M`EL0.G3\^!XG?V4-V^^`OG76Z7;>#:ZD5GW+-&(W;1'[(6&[2&XTY[TFT- +MV6`R'/1'UB%C(\YW+%MU3LL.JS/CL>-Z$OCAKL+(AB)+IJ58]>-IO-@^:KH[<--AFU +M8*!G+ZK5*AC(.9]ZR/5RTAJ>LQLG=)UKCPN";V=\[OKRF;VJ5`:@C5PW3WJ= +M\<@>6$.;""KT^6^PFZO6Q]I9Y_+2&HWM5K=SV;NR>F/V@ITI>NS98)?6V+[J +MGUOVJ/-?%JO)4>KU:O5;=P[*/F==&QS8]+,=K9QH:2_!)-`P4>P.K"G8EL,6 +M&R><:;E!O>:X<[`M2R=TIJ"GRORA,S;Z"['N08C6A!NW#EP?Z12/J)'K'%%O +M1>B$B\V*^W$DEY'?0:O/;@(7:$(.1L^EW(:G837H7#^AN>'4QD/+LMLP>YS- +MB#OA=)F2&A7]'GQ%L")QHS6?NG,T@?@>30HT(CTZ<`>=0C8V6J&_L'&4&A+" +MJ-]R']P(K9QUYZQP]VZ7G.R=S,M?@[5-`Q_TW4HULSQO&#JH']`&Z,U$H,=LD[B'S05NF`P +M`>D"A3\!P7#/(KZ9!6"&"_`YN#]3Z(1L<;T67G#M>#:Q28O\K@\:^:$#*M"17XLV/R'_E)X[_I5QEC*_Y[V7S3?/D*\=_+MV^:@`6/!/Y[ +M^Q?^^R,^?^&_O_#?7_BO'/^!?23JJJ-_!*N.$UAQ6(1[`B(`FA#P:'.)4#)I +M1A3AEK@D%/,E6B#`1/-+80FY3A3;L"/%:T=\/R"4!S"#.3%^)TS@>%&`A##8 +MC3OCD>"IK)8T2\H1Y8&!J$R.,,;E_PH +M>,*I$PEC%V.[A`I]O@`COD$8WXHB2"B(0K,3(Z]!/F$UMT$Z)[OH]OM#>]B? +M],YK[UO=B=6@3*O.:N)KG7W'_K=6DXT'K(EY%:8:[LJ%A$]XWY#61*Z%#QB4 +M+2':F2M"B[#B/";+0[G-"1ORM*U.MT"<2DW+\YR9TICB2>E0O%[@_YV'`7/G +MB95?RN6C$-H<3:QN2FP6SZFZ31Q;)5'\^!U^"N@9Y"&IT=,OY&@T(TR<,N6`.@#]HJ]-9<)3:IW0. +M1UQD%A?0$"7#):FG'A"$C`%,N,`6!LVFE%L&76^BI:T9RG'9*3LJ&YLRNM]O +M:'.ZR;`C,6:3.7-*$5($D3X4*KDB+R*9+#@N"JV=CY%7E#TE!D0"`$(\3 +MDH@6#BTEVIMZQJ=>;B[%Y,'<7GN;8M:Q9RO;+'O.P;N6/9<8$!?6IL)9H42( +MA&G+A((D698JJIC$PG#EWNG""H[=2*O\MGZN;RY0(UOY>`@?E/NQ;&`S2 +M'7Z41)`ZA8BB!2/TN<\>Q&\%"2].BXQ"[(/B)/_9UEN42JE_P;1*1=K.I6A6 +M^S,#].1"XL.%)"@2Z$W(YX4JKXGE@%ER.:(L]8VHO'JO'!]6`L%O*UPA,S]( +M7:52JTJCS%R8REP('TEH<<:G#LP9GV':J^K(D,!A)92\KHLETGCCB)1*C`WP +M!;GH8H7HV"`$`P[+`2@JY(L(DPGHI@3^X36[!J^N`HE$:+*8/IJ,!IUVIS\9 +MV6>3"RJZ:_16\(S]JZX:*ZK69-RWSUHC:S`>UC[6&=;Z:UC%QSHVPY;34S;H +M3D;L/]A'Z^,`FAKLJ,Z.V<=ZFDG_XF)DC7?Q`!4`[`B-BA?`1&!V!,PV-"7( +M\*_L06LTLLY!7^PKZZH__*1'*GQ:PU8:UACUW&IW@:3=OX(LW,::D2`C8:!? +M(CV5[=]W1IVQ=5[K06<$W/3_P8\07E>0!&U\\#+YN=;OVQ;`/,QI:()QEC\:M]D_PK3^VVN-.OUC-[!7ZTKJU*I +M-`7&'H@S"IWH"QTV_#6BDU`<<9"\5+<6<%+C/E12=YY.QP'$0MXOCR[P[TS= +MO)'H.!I3`JJSI0"6*04TJ)S@ZG,$C6,/J]AUC.<#%\+,W-0>`!IM]$) +M$M6:]4@>LT@1&]3\LB[`J@%X66#4]P75J_ILL_9<.@[(G0,A'@@R\UT$3N.[JM:>HY4(\2NYE^O_@)#8-1BU\#L'5=D:X(`?)*_O_N./4&,`0!.4'#L7P1%MR!CMAT(,H9N^+.[ID4R +ME;%`R?Q`3!>7%ZN40C,P;2?I-+%84%+4_$*8TZT3IRT!!L^*9`"LT^HARR=J +MT7_]=?MJ"O:B0D9SW3_1I)ZG.\'Q;O=0IX$+5V+[X`RG1]N?548QK5\D54%& +M"(*;"T<2,%8B17*6J*J,]6KEEVI%D-\ZH9\6(`CK53KQPD?H*VI/T3A_19T+BVV['/8_C.SS_H?>A];P/!'+['C, +M@AU)+F;9QADK3+9#AB+V6Q?IM;6HTU(]7,I?K391C&Y;'G5*1&-.V?"@IP5Y +M(ZN==7^BT\KLU8$&.VB25>%G,!'7`L#HC!*$NAV@J"`JV^_[W=:XT[7L@4D+ +M09LU3Y)+!!3]BE>T<#?2Q02%@?2:7.#I@/,9-2`,(&11Z4)>0H`(WV`1%J@P +M%`FUQ\@U=^_$I0-B"ON@JN2R'J[S'U5SO'80'^*YE%D^QQT<*>XSNK@AL2/P +MT5&D8$0U'O3?.6*N:&_N<$G69FY49FM1]2LE&@6RB)4CE<%\12/::X"P/EEU +M1HE-"P.WD$*3!!--68[J=?`1$CX6/$5$B2X`W91O0T(`>+`'"0A66FKO^YUS +MH:UY-<%9F_ARE`6"YW",*9R@$WX!<[@CPT+HR)-.YF4>$OC>/6FHXZV7 +MCE:?,BR[4S](/;:&OT+6,@B6*6XZ+)4K(."<*#ZRJ<1Q4#C0ED$,=UKL,>N$ +MDW)!L64D.*)`6);=B"X%!44!I8T;3F? +M+'##?$<#O)J$'FBZ6OGW.ODAQP4Y5+&E[(E@Y2464-WDD/)?\&PKAJ")=PN> +M-I2#S-=R0/3?,/6O,G754)Z3\\WJ,(P6I'`I47E2`P +M!Z^F#@>J>Q3]Y>BY5+>!1KRBY)[*]H+%6N>2#L()ARZK1*JJCU5SK*"1UYDZ +MTR6AX'FP==6\M.>DVRAQ&<]N+BBM+$X=3>/J1*_5XKX"J<% +M#B6?0L/F1]+?IY/S/9=6[9ZA(TG3;TI$-;F4?@JZ'-JX5O# +MRPE&W%'YTD,7#.6U$^D=-`-QX?I=JP,^BMKJ=6TTQ+Q''DH\PM6E#N-/@Z3Q +MR2GC80A(>>6$GR$XS+BR)\`6R*>PXIP,5R%"RJ/*U(/.)/7(JN>)Z)5>^TK! +M-E5$?!*[E43I7?8,N,C-9X]JA8T9 +M7IXN8"GO/J>;*J8IWRXI*E,OO5U8SA=-]=/3LVZ__5.F1H6J08P1R.%S^WUK +M.))=3N283%$D.B,ZU0T8J6N51B(NLNF0RU<&F+C5;2R8!I?`P`?D=2R&.D0> +MA]AP*(_A7<#S[HP5?00#X2I(<:V/8VO80W\DA*1ZK9`=S'#<::L'2F7,U=*= +M(&+`4MC(T:![H@QOW+D`4)$,8M`0Q7#\H"E:E!O +M,PC=3[+_15M!?"=>#CAEV3%.-'-L.T+G7S[.%CN^P#";2FT&_TX.= +MMY%X!D&F\72&$4-S/0[*Y$7Q(>"8IP^K9"G$[<.%3268,WY:ZFBXS5?NO*.K#B- +M8E%`A;U;+JZX!2)O=^XIA1#2&-E5NMZ7B9L5=%.5!X;]"F1VI-W*7JC:N1'O +M39F%`.W%A$L5GED'(`P]22V=8M9V[R_\\&AR1G^,I$^O:V>;&4&S%JY?^7$9 +MVJ4GUZD:(5$9W8A1-KI]R4M7^9"F[Q(1J1G%^.I$B2%\MB`H1.'1K1N#2+6, +M=ZZ;08PND^)-^4_D$8^3E+B--Y+4>9F8BFM65Y2R)UN8;!&R`J!V16M(8U+9 +M!)X#V8UAL_$(F!C)) +M+8&T\90BR,9#$TML40`5[O97@LKOH0$Y<+ME>E2NA#DN0NZ(```>M*`0DI_R +MPY1:[`B$-;L]&MO=_H<,$Y.'FM?S)BW(CZ>%E9FRB>Z;/&NG*&0T3EKT&QKX +M&@W$47WN*0\TZ%4>69^7Q7<11>-@G3*-J-C8I,@Y/YC3VA-Y`$2>:]+K]'N& +MYZ+&OTU:7;OPR=!J]P&%E'DZ[H"[!`]-[^5$6PO6`OKS%4X#-^FB8W7/1W*C +M3\A/,_G8R!2AQ03]_176K'G(92)$<4%<0=P`;*?@_=D/;@&+WN*B1IOU&K8+ +M%W=U:*A>RL/#$*C[0G4`O-931ITX/8((W&4IZ:/?7L;0 +MG7UKF05K$;'IO5H\!IR"1V7X#^7&0'&G$E&WP7ZFVA.6V44P>39?Q605=Z`\ +MP5K=#KF3!P^%D9X&.#4RH[MZ"@%,=7'!B/KZGYQUK6RS\7WTZ>JL +M#VF1=9$B.K?L;NO,ZJ;V[]+XUCH_'UJC4?_B.&WUR4PD(>1&AH'2&0NURQM; +M"WDL"?`C-MZ=3I`S'N_A.W%XA=FFQ77`^]TB@$9\&]$;@/-[NN)L@PILHMPM +M'Q7'13IR1ZG6:5FJ!JM7'2`5HH-6HX_FA?](=7K;%4I!-5%7.I=,U<]N^: +ML&OU+L?O%"%SGS]O(*OGSY/RV#-B?: +MLZ4YDYP_"SE_!CD_O@=79_4D8VA#R0H&!S(]/MAHD0B/<"H8*U/W(?+%K=QK +M!7],*O!5`ZI3=`GD\9'T3PZ!J9WZ@B"X+0]+HZ*RD?*XZ-'1U,"T0ZMUWN]U +M/^4*9W43RU#IQ4U>F\U=D%-/U,$B0)^"F_`:4J=GGGY])B>'L:CII?ZJR"`S +ML3)+SK_Z\X]ORA4AAGD_70^3G#O`.ETYX6=QTP:Q*]CX4MP/NN;<9_C.*@5I +M#Y9\9A9Z"AC+>W:*<;D/*5[WRJ-]B0Y%-/D"-T'<9$F;J)/R[DHDL +M_KX[^!&7_DMP<[*FOP\X3I\GJI4VMH[@*;@.F@@@YF,%/G(JE,/+^<-,+V-UN;T-\674Q'SP?$(4G>0=Z'FLS7"J[!`?I>R, +M7GS9\0A7Z+7P9PR9^K*%>I5-*L2+$KI7JM>"C5)K19.JQ2;]F+ +M--PE[\PL>6^0_8N@$&:NY6`RI/DA;+#[W!Q8.M5``QG +M981I\L):D3S+35.F7((ZN#4/7K>I7]F)Z\D#CE93!H.[7V`T&EWA1?0;\T)[ +M"H[M83OFCQLHW/6H`%`,KKX(5LF*)X^D":M[Y?A#;]X]Y,P._E`0Z/@M_L@. +MG^&=A5E`)26:9RSN",LW;5=)J>4?%*^92`VCF$&K0Y_97T4[HZW7'YN2T?@9 +MPI8PU11F5Y)<,4O9Q(DD-5E]0M!:U?5(]+RBF_%^/+.M"2I_=EV_>UL:5]`W/O_+U?(AC,D\B&8EH12S!M``FSHQU)5CJ/OM2IZI.U:^2O*\D>-K!2OHILUP8[M*[#+8WCM"B&5VTSY(.FWDT/(;SC*7L[=.WWM$Q6_N9!#\=_=CR +MO![L$HV2\&;[U+-S:IB`Y`MM,8HM\#[ZW<=AEG&[/\M!0_&+=[!_V/(.S]^^ +M:IW$TE"!GM8CO&KM%>++E\9#]5?DXUW`])9N4VN>X/O_X*!\5Y2`W;=D:[C9BI"9!6MK-@G)CM+#AK17D[7Y1#I864I_D;]Z +M1LX>:'<1_#8)^NU`^70S,IKE0`H\H88R+^JGYN@5^6/V`5OR..\2D^^@%XX] +M@NQAMZ04_#59(^S*A%\],D"=1..H3$SD29_M/&;.@&DK;*92..TW]1@4SL&8 +MLD1Y^G7I78(D$'A=_R+H;CHT2&C(.;21WE0"$SZ(D)]C7I!!"A"?U9-*"FTO +MGCF#TEWAS?9/+9E)[F+K27+OV%N&TW"KY3J@[SCO\ND-]34)$`B\%O>+49*?)!/V6=H9X\,V!_R6I#V!KS[H"D7D[#; +M429IZ*'2#?K)0XERYM$>KLA&X)DI<#*L&P9944'71,9=9/J(VDW;"A*Y[4W9 +M-BIM2S#BK3$IH:M8620RVX92=L.+D3^Z(R\J=!.=1KI3XE(L%8K*.P"FT:`' +M5(O/4A<-<[BJI2S]RPK2@2]B,X6:"F17I&VSDJP3,T;FX*J/%S!V(=ZVX'JA +M%?/)6C%R9\06R4-JME@B2Q?#OUNGYP>9W(OD=A`U3FY4?64R-^%&PA:G"RXQ +MC^\3FG3.FS=B57SD7%I!M/U>IS+SE/)0EKR&/(,19<15/$KL+%KU8<+4L2CA +M,\)QI/$UL)E.I`IEWLF/DO[?PT$4&H,J^_#.`(#,5F&ZJ*7*:UT>A/=2:<*@ +M9,%H)>`F0D0('H[Q%GH4C6=^Q+:%12C11FN:T&P?5PNI4;0]P9'L^32,]MS-;;GX_MGMXLCW,E^U)O=D>YL]& +M'FU&5:\=IQ)>SLH]*TXAD1Z1$\.6G+]\PM5`+F8.EJ56\[(+/4+0ZHH+2<+6 +MJ,;M8`R!42]0F(IR0YC&H3AEH.CGPSS)":L7#LZ.>EPT95J-T<30A%>ZE.VR +MP(#P](F(9O$]Y?"-Y$D5F7=2CLJ2[JO:KC3$FWI5,I8 +M"*V!@3ZV[8IL%8&+RJ*U!L`/JY-L81B$I+&AA/Y$1J-# +MX)T<,>YC8'$8-FX"'M=3C7-U3UP#0USHHRO:5+09MV91:%G*@A0ZEY/K+,*+ +M"F+VS5)QVJ?3]@>]$/A$E3C1$=)^Y7)IVJ]<3)ED"(EJ/3,`KCTD3:)_&=A& +MD/*?3-3P5%V7';4N7G51?(MUL$"?,],(S_3P48MRML82[Z,DQC)L:4;IY-!& +M.F`)Y,`.P!*1*K:XYI6K30R%U5.LF^Z=GE8+V#46*\1N +M1;S#R?F3J\4T)WNY88)9*^Z37+CD3!]HI.81S0H&:^LS1#U2,[Z/NT"+0#0R +M1]!OJH0$7J1(JF*]<&T:"">53>;4BK4-FU%JM+(45!J''IK7N([M(K-)',;! +M"]'5-GM7Z"&]/_W#.OYHFH=MN`^=^\/(G%PNSM19,8V1[QJ@2C<>OY7@2+%D +M>[4K+DW7DHYA3&UCVJ46@&(,K/E,I++T#N)O)EVI0@$-8L6,S6 +M_$NR"1\Q*&"Z4HH%X#50^8ZT6 +MQ5G.#"_KE'RV!E-[CBBEOMU\5SN4VH28@9WN1\SZ,E&NBF!CAB*EI)BEGNN6 +MGG#^O@_NNU26"%?--AOR/2/8UCP@F'S':P^'HY6*=7A69U2[39?F +M:CQ'^)I/[4*MG]'XM$``?-5AXMTD8P%PHS.G::%P`&D===G.U"B-V?WBCNUT +M`X1(0O,X:,SY:6L7HTJ1.D\&TXIDL`DKQ$%L67(W,]!4IYFFS[.V6+$VQ38V +M$U9_EI(6R3?2[[>H;J0X07)=ZGBQ#A\IYXW5T--5C.G1V`3/"&&0D`"`WT#V +MFTZ)OZ3%ERGQ<,^D6$-=^@PKC3N4C34^;9&X%^Y\8B?4R5P9>D1'L3IF'+%N +M:$)6N,=GU=F(1MA/2V0F?[Y[]H>[$/W14*F/Z""4>2M>4*IJHR>>XCC$X^*B +M2LQT'K(8[DO&C\3UDK:4=!,R[W5G^1D94Z7,ULXJ/W:_.PT^ARM`QM\)9"05 +M0D1@9*Q'"WU/6YXDI">2.6SNZ8X2TV)5[A!U#L1VME1S;K9V[ +MOM\+T1[PSHFM93!0EBVLQD +M;+>D.*6[8VM7%J81:B"S]\8"1()[AYFLK266%R<6D"]K4&=$EI)[0;7&Q)9B +M+2E>RTJMZ/1MH98:_CL/`4DGITDBHA9`[EY4!`O`@SN#BDP;-\X](RQ7RMP\ +M:.P^Q70ZQEPB@[/+L!PLZC%V)2VWF5SR_(88>?U9[!YO32;A!M'BN#6*8S9?/2S7N23=4F.WQSZC$S!ZOW&;FT +M>U%>PS(\A/C:A%<.LJ$?_YY\6RK-Y>SW);OW&SF'Y*H?&J*=-"\51'+J2T0W +MKI;2E?]C5<2!'LO5S>DVK0HJNN[EL""UW;XI#58(2=T?D4&-1&Y +M/V"[C4V]TJM0R.I(8U.;X9I!GUT]BM$232?1N9D$^HO#O(G-BN6N%S^O%+F3 +M6J5O74

:,WY;2=6>!):\]#M]33N8N,+]79BTF%/[<63NJJ(;^-](5#;,// +MN!DT,B?!GH72M@="OF!&(ZCA$I>VIF&!($XG7S +ML>:/#3P&')4<4SE[04M+4XOO#FXRFH:$3+==Z__OW/TVQY:R9]Q5N[X`$LG; +M9\KVFH/S0>QG+"L;C$3!E13%!P4VD<4FI8%+/R)@R=.!2:<#B3"^X2G:.!R? +MVP7C+9_W4VLG_FAW__7KV'/V7YV-5"U%<3OCG@,M9S,^8;^-)D%7;`LL,9V! +MGMU.$Z^S4DCE05:BP61\-9A55_O2ERQ8DE8F<1630"?`2!H`%:""J$.%-?9K +MC_Z9#/D8((!M?HK\!AH9X/-G.<14'7:#C6>Y/)F&D',[U+YQNB]N;X%IS%#R +MD/$L9\E((/)X*ZO.`@>^.P5`N^PX^6@UR"US>5,85W=<'@_*.^U*V887LW:` +M!34#Q\0;\A5%K3FJE3C)0`51UE96A$NB-&GW@C=?"(Q<8S+?.H+*U0`C&,`2 +M[0:*)W%XJ!SKS5.EE]N"CM?!QY6.,8J1HD5G<-/G4-%TY23Y-[7]E-H?A51U +MRJEC(^$IH*_H^(I%YHT&4K3&F%(JI!I=T[']!1=:$A455AKY.@*OP@,7S^&Q +M-&T:WA$K[*-ESN0B&H?CR1CW!]+SX`JMHI0!'(\APN.@5>+>R?89B)DXZ.KR +M`.E^J:('9G$Y+EN^`/'J@^7.9A[.$,,D)\89[R^(J1**:I8: +MG;/>.H($,V*YF;HO'J1*.:4N +M6XTR@A/^(,HX%W[4\_KZQC.M@*RQ@BI=MC:>!8EA53J,$^]EC'EE)&(B#MO=8"2) +MY!RG&,LH2(#A?6H@^;G/-47D9AW/\PS6!NQ?#-C3MP+%F`&,QSE_EANJVZ') +MB*"EX4A`+>J&X96$R&/'D47*P_K_GK_I1Y)[JC0+,E2[A]MFC3DF\Z"1Y(WF +M1J6+@[;5%,PK;6WI@J7OK!@H39\NP6]QRD+'==CD4D\B_"BQB-4M%8Z^F>10S#G&Y +M=Z"9F:V*@P=.;=LGJ%!JG$.M_RD@8=K9V +M(:[[,<-.OGH92C&7@4X0"\4)VF9[#U)))*^M>=FBVLX(W]]^&],S_)!RWVTR +M+O/J)A,=*U/:)3EOC;*QT5S6P!JE:75H@=156\QGQQ;325A%V,*XA#TPJN@D +ME\H_9FD,XXME$8WAHZR:^36*,N5S8=2)[GK+4!1^>8M/24*QO%MIM5J+,)>; +M=P$6_F#5F7KHW)5\DA/"O[(E7GS["%(O%A.3?',\P9EA]YQKC:P=LD1R#I!J +M.$3)T#-.7)=0][L_%KW`[T=LCTZZ9>MF4A[_E6ALN`-4$.,=2>=^VZSR;T2< +MT_7'GW=[T(J/:?06LCPV]CZN'C!1SQP;)7N)?AG*F4RYSA&FD\+,9]+%\/DF +MF7IG1#+D\+*6PZG',\4T6QHOLS2>TKE/UJ9-551+C3/5:28,RIO52F=N8,N& +MY"ON=[L!>S#)@(CTE197)AV@ZP-I\43P]2Q+:>D"GJ2)5*9C4\-^E578+PE8 +MIV72M&1LJI5X+AA>WD(88WT+_(ZEQ06.2SI>@GU7`BDJ-S@H<`86:=&2JW0A`A1.(4!& +M$?B3O/PQ*AJ-5Y`6+LEZ3T95^/]9/)XZPIN,!M)*-XN=&6,1:GZ +MPGXG&,)10?#0L2H)L&U6N\BX+1K$AH?B#R"LK,:^M@14822PNK +M_4`7NU">\SKY_I?)>A9E8F<>4PU-S4%$YXN9#ZC0TW.6-U[%>G,G%KV"-84% +M@N2C/<`M@S:/:;MAT$\Q<)S:_*21XS0]H50X6G?JKNXP34=H&SP^MK[P_#2A +M$OQ/UA[&-$*:5-&&O[LO8:Z21_`D77#II0SI +M$+WC%UC(^Q6B6+QEIE16$1Q2R8,I\M]1!>]7Y!9]5WV_TC,%R!@JUJ_;P;!L +M"W_(_L*SBOVLHCH@K5L<=J>GXK_*M7(X`+8CY'!YWT5X<--!$T2B,\`XA.C5 +M>J,$=T4TE1$=BI>D$^EQF!^#/1@I%SZUK)X#*S:MU[KB`O0!.E3DL2JP=RJ/ +MV_-8I!G\R,Z3&1Z(N?B.#%>HHQ4>'-U?CD>SUSKT7N\%*!`K$SW^V$E&"+"G7GA".OD(6I0I_!\)[&]5Y":"A,M!54W]Z$,.JX`U4J8O(1 +M!+H37K*]+WEN(FZ?"YX:41!`I5-A8!&/BN%IET]0]:^KKQQMR6GML6I9JK)%OE`5)N#GN*F(P^ +M&>U_''Q`EQL=;CUD)B`TR(6Q$6"/HI.`8Z'$4'3(M0<-$M';R,DGJ[B87!)^ +M"Z3SB2<50LI![3$MD\@:>(!#4(V!4AN^-'C"44PK/L.M5.6O+>"1U=$ +MY!'8*;ZU^8&RDD)E&!+]0XM"HH'1!&0R/LCD5BLJA'U-@P=62*D5 +MI7XRBJ6.)!8OSQ?UB7G"=(9< +MX[TF;6>*!J\T'FHWG9S\ZU^&X*33$TW6T["#^4;6PC.ER44&4^)ZD<^*C@XQ +M`P9/2>ZDM$QTS_^(Z]IV2!"3?CB./%AJM,J++)GAI0,E4T(_8^;AR<@!"X>3 +M$:H\%5IY,9'`/CBU^="4HU#R%!B(@0!?@:LPCY[+,3!/$IT/<)G9& +M-X0$-0W)*.PK%%Y%GEC9UR=';[WC\],W'`NH,*4>Y5^NGT3.(3[O!"-[-WU( +M8;Z?)TY[,J%H1QC7<(Q`RC!V06NNDG +MH+DL69":&`Z3^#XI&Z!FX#'$810QK/'!R!PR,`U?MFIU0O\JKDM06C-*$`W")H+E3!YV9:I&M"HQG';_`L,`.F/[N1%\'19 +M,Y^$1']*G/=4#<:\*.]"*1W5..B>/PG,>YK>9'Z0]_G;G@U(G=Y^;O9"8V]4 +M-BXW,$_S4E4K;"D:5Y*DUYRNFTFM.CNK98.9T>8Y-L(GI0W&T23U(!FP#2Y= +M3[>T!I.9R+1>VWMZ5E,LW2Y>%1*R#Z%4\YUZ6OW9:50SU,1]!I#]I\/7MY>G +M07//4DM+"W(T7KJ4@HPFIJ&K@^<>99'H&'U6!IPIZS;5%($O6;8.MH%,_[1_ +M_NG9ZV3Y0I?O/3\6US._8&\SE*<>UHM[\+W,1?#6S)524V)=Y1I +M]^\Z<'7ZI;H#`"R3I>$XFJ2\*U5L2^6=:U`=:%XUPY[FME*6!H+<->*P$F.M +M-_IG'&E5QZQQMM)EC?*4\;N]QZC=9HZ5I%W'R$(QM3+GM@/5F@@E@4%N_0]X +MU:(".F"ACL3E!OU+9T_F"CQ`R57$,FKY--[E:\2!1XPXD&+#.B7D0"X.%3LS +MWL#"$0=F0).G$J;LJ`,I#7Y@\3+\+-NI)Z%UT6HDL7DU8_>O?^FUC`DUZHK= +MRMQL*/M$!0;%7F\EA8$:0T"=AG]JT.$?/$H,9&_"SR^(8J^750+'_C$;*6'L +MIP3PF@I(+WNW`,I\-G"]7B$&">KEED7W./JF +M2NU_#<:-CFQN"$])>L*RG7&4M +M:P@R:N1W#,9]QB0"A7QDZOTN$@9CJ(6X1VGZ$ZO(%Y=#%@BDGE23(:-Z,==3 +M,7)CG8NSHGQEF=BD@G1;Q'0:G<'KFGXX%KH';#-H^I.G#A;$;5L*Q5)Z\M#B +M@2Z,H([!)=LQ,U;=%XK"@Z%+"8;'6@$&^)O0;XYM_3,W@HB#!9^88:*4CM63 +M?J*E5(4`X/-4D``+G[\*'!8!^^_$.P!I.!4')]6%)GZ*QUJDDWJOSP]WSO:/ +M#KWST^T]59HT@9G12E+"Q-Q4HO%=ER^74>M^D>)!AKXI1#BB08(H1-?*RD_Z +MA#%=1V`=3!HOBXJ)-\$:(VO):&$^3[%PMT!(O?.B81K)#@'`J3PH<$_>31;V6&QC*V@B8V$ORC5W$"PDU;(>KKC%CG.5*#_ +M@>,IP-.M%ZD,R[>C!@D/N,$D(M4Z,,E(2P9D?XM+<-1SHH;T@EX;LME%FA.' +M=SOYE'6"RP(BU,HWH_&DCY;/5+V[*>T]8IH8IZMB*SGUFY*=&2,38N&+39MT +MU0].+ET\3+5$-W=;!RV)U\QO8AR1F0:S1>2&5ULCOH.8SY*);'W&C(25]*!O +M5D'XVF81K:P26C93PG:23HWZ1O!C2AJ84@0.H6)5WD'O#H_2NOY>F&C8=K@= +M!ZS-(9?6J#/O(EF'F&I:WJ7TQ62HG2U0^LNK-ID;I71N\.*.W;K9^=8((J0N +MM*)52+NHZ>)G!IH;^8";N])[,8E*\8UES8XR\17R[0F=-EVGU"`-.52+F:C!2A1!B^KS9LNO%8A:E'D[@>N[VAJ7*PT6V61 +MA9NNEJ*T7=`"O*N\Y%3:W6Z>.4X_7SGE>X0ZG_9>VXW)QAV/!D/_"IG<1VH@ +M?69M63MA9G,KW!V*HY'L">*5I=XI<]FP,,@/&@_&BV"4/A8O)?S#K!&;VL18 +MR!=#X2V'Q=PC"Q, +MQ=6Z>%>^K9??SWW*9,Q!-BDX/7]ER!7_P.TYGWW*O^V\.1P)SISB&H1A-X:\ +M-^BRAM^OX*=`_\I$.@NS[J\0&S$^D]/H==IT3J':Z>1]UB&TT"RF3)BY#9E: +MTSUG]Y%F=!Y:1\Z(BN`55A+SKB?1F7&><+TH9.II$SW/\;+PV7Q\TOK)5H(Z +M[Y3.)I[(285*O=T6*OVRTULJC%N^*D]K:E(]F"PH'71&+T/%D\Y5U+UH38ZQ +M.N:I@#,^`C&*[8`X4NFC+&#:I;!XSZZMUWX7&(/.'3N3^?)V3R@'TU\1#(4N +M&@F@DHI^EK-T^8^RE!,=UU)%;(12A^'XH1%\\'C]7*%[4B\7'32@:>89TW-7 +M'I2[.LLTY$^+EI(.RYD4YU,8]5C4FU15H!7A9NH5G@.V.6VD'PMP,GSU9P= +M#:US.)(F_N,CV;;'5$?E;#V5?8D[Q6CI5EHLL2I67^(\3PK(?&N2:@RH1R67 +M8;&3TNP%^-)T`YU$+`G7.B>7PN];PYZ;1V26R9)D38[K`W40BVHA$B9'?!1%CDN3D`<0D[O/SAY&2>;PU1(9N#1C1S^NQ,0FSEU^%4=]]K=J27>;Y\'[0]I`-@&N5(B@!GS +M0G0HID"(*1>ST.AGTZ&:4JWUW,W]Q9G/3460<'BXN`64[EC!B$5._'B<$?E8 +M6N*ES(SV2Y3$ZA'F(G%ESF#ICWL-/O]UMS9#_'KI/3]2L1JTV&7W@ESI"S6/_'=A.QB_#Q25%@Y)^H765JG^,V-GH-'U70\0:SB&:@X#D=M4[&4 +M93%O497'*ZHZNZ@_O5YD/MKM:"_F.FX>0X6Q0/N2^HPIK4PY#27.RE^^?OX\ +MGZMV^_MQ$(VC23@.OO\\=93ATVPT\-]*LU&V_U6?OU3*E=5FL]YH-&M_*5=J +MC6;]+Z+Q>9KC?B8(?"7$7SJ##X-IZ6:]5QU1__Y)/N[\PZ^5SM5C+X/%Y[_> +MK%:^SO]3?%+G/XJ&I1M_U%]I/TH=.!ZK]7K6_,/4PYPWFS#U]>9JHPGSO[I: +M7_V+>))!_`^??V"H?A>=JU)G`"Q^;XB0%)^0D5+/!T/6,BR5+@FMK*11C)R +M-,K[)%1;+@97((DLH9>50LKM7VFUW@8BHRD\6A/L2C;3M+-*C9+!I]R:Y>^/ +M^*"?;(G@-_,V3#MU4\LXJJ'&T>@&_:OQM42'3[2QEH\UK_&0<>%*4`-AX$S7 +MQ,4=ACCI#OI7LOH_>BE^_?P!GR3][X51NT2/'HL/6/S\7ZU7JU_/_Z?X3)U_ +MY`."VZ`]&0>5!_`",\[_:JW2A/D'KJ_<`#8`YK]:@?7R]?Q_B@]>N<% +M?33N;HC\,MH9EMJ5@KDS?#%$)VG.R9P-18S*,^JC++3!A5:G%KK<2"VVD5UL +MJ<+EUC+*M=I;2F\SE)!9>GV=2Z]/;W5]/;5DR)TL6O(6I, +MTRK!P.E!-5\,;!'2LNPBNU'S@$+/"$5Z/`9_A\B7+?\V\Q/-:$[@(0]QE:4%E% +MZ$UBZZ\L7%;9].H[.+@;/Y7JN6O +MY_]3?&*G>5&>M[]RV)\/UNGNN^>V/JT)T!?%2/&BDW;PTZM`9:8L;%/CLRA; +MQ\<8J+1!N>'+*GY!:X@\YGU1:-).Y]1KBIYA,.!+#-0@I5N^_,$KD3Y?B?3% +M#P*6$7Q1ES@LUBM97A*@7^F&&VT07OR*I*B:I-"8C!NK[\+CKR^FO&M/>=>9 +M\B[(JE+2/:$(7XP^RHG\H(;[UW=U.?9L,B/@26T=QZ&*/Q"LKK:IZ"ID_)9> +M0P%?R>J__V=>^K\"!_I]ZYA!_VO5:IWI?Z.ZNEJK(_VO5^I?Z?]3?+X!RH*` +M-Z/PZAHHRDY!5&%&Q&N$!SD=7(YO$)W\-5T#FN!M,!%[48TQCC#9V,<%@W(1C^3T0:0X\"L7`(RA;1F\"-K07 +MJ2`B>X?G8B_H!R._*XXG%]VP+0["=M"/`L3&'.(3,IJ[P&(P0U:;-T40DG$' +MG!AH*B"JJ@I97E$,1E!&WA]CLT>"==X%:.N=Z!)O+'.N0*J4KIL>DLDM1U,= +MJOBL)OKJ)`HN)]TBE`!IQ<_[9V^.SL_$]N$OXN?MDY/MP[-?-@G$#^W$@H\* +M0+`W[(90\`W*X/WQ'6+:?R/>MDYVWD".[5?[!_MGOT`'Q.O]L\/6Z:EX?70B +MML4Q!E39.3_8/A''YR?'1Z>(VG8:D*$PY)\RN)2G?X%)E1B +ME9%CTRAH!^%'!"IE5*F9LP9E^,0+$$[AV!K#33SN^H-Q4=R,PK$.*./,)^2. +MK\*B:*R+LP"M=,0QA6`MB5,D8Z)6*Q?%JT$TQJ1OMP4RE)52I59N%L7YZ?8* +MNF-\PWH/TA-(3;G?#6E\5;LB=272X38GKD!P:"@J+.K;N^&'0`#EA%-Z,@KD +M(H+10V'K[.CD[/RDY1T=(^[FH+#Y-?5^9\;XZ\WWI +MV*Q+\=?Q"-99%S9GE]&U^$XKHL?V6V2E_@`7 +M9Q=S_!7>=L+1]W^-)A?XKW5LOUAIOW\O6_F-V+\4-\%WN#@QS!!61/B%"J;P +M,E2A<\8[A49[CTS5( +M&O+<6'(),P"JL90'1NZ//A/_DSYJG<."6($C^;/4,8/_:]1KJZC_;Y3A#]X% +MX$U`K?*5_WN*SSXP7[<;`L6`M_Z'`+?Q2MA_MO7PS[.3G5,B*1OB^_;':#08 +MC%&^T/];U14_/AL%P$(%'Y$>C>`?XM,J*Y5JM;927:G4G\':O!2EMB@!O1Z* +MTLAZ)^R&OWCQ(MZ97$5L#T?(U]9%976CWMQHU$4))REGUU`JE9(Y*U#X'6C*I\S]MY?;"]=PHUE:Z> +M/=?OS%,XX_^:5X_W#W<.SG=;IP5X!@]D,OQUMGV"1K!N_H*5U:Z-LI^].6EM +M[WKR06EW_U#EAA^>A\6_/CC:/D-42N^PU=IM[8K_"OO7X44XQJ.O_5^L?OE& +M;'BE^::RB`*^P!F^B/K@(X:5`3-`H[`9]:D+\41G?1.`#>O-_N3CH! +M3:T:>_A>^H\>>V!Q^H-2C,M!#NJ))R6^@5+'0FS1QFF4R\5&>77>C=,>C2^" +MJ[#_?=#O8-MV3LY.S\Y?OXY/D#L9]C2]/3\X`\GJE7Y=NBI+'A$Y3!K.$OIY +ME8#A0H,;D(AH7!/<)ST-;MN!;/$_8;T(?OJ_P0@SP&"#Y/&_00>^ERXBF04C +M>99\^*\T#GM!RMQ$(*JV`QJ":_;C,+5LJO'O!`3>J68%!.=^$'0"&A7H7G5[ +M=[?U!L;CKWGF(0O?3_HW8;]3ZMQ45]JICTN7G0!>_9-VE9J8.7?5O]_$++*; +M_O`9BV^Y\0!DYX\K`[&AOF(!.T>'K_?WO#_G)ZUWM(>K#1JU2+\65.[ +M$#Y=OW]U/1A\B%:NR?VO1%#)\*-]>=7U[P:3,7P'":8K'X%4`]]XNL0U".@J +M,U"\[<.]-T='/YX"S7N-E;=!!!]>T[N=HY]:)]M[+7Q,?KT@`0Z@3"@G!V]W +ML*5X]IHE0[^.CU.6$$YS#N9Y5](;C"^R]<^EO^9YQ+W^H-_VX0\&`RK\GQR=M7;.CDZ^_$GXH[GSS_\QNJS/)?W-D/\J]7H#WK']7Z/: +M(/OO6J/V]?[W23Y_$X.+7TMA;6T5!)7^Y/89/Y"@?/`KIB"PGHSD;Q2:S+-V +MXLFU?#+%S2`U1?9%U`+)*PL57J74P-=>5MO?PS^OF\WO_F6@RX*\ +M?M2#-Q_9S'*@KYO@6R_J7%QQ2V[;@\M+_FJ=R+(]B +M7$*=,WP;PC2/[X!-#?N8!MCL/3C';X*+E0%SJS2*O0YQE^0M>O$K;&'2[1;4 +M:W_4OD:F&M.T_G%VLNWA8SQ6D;GPL%;,5T"'A^LQQ8>2_6<.7#48)US-D.)N +MOLY0]@Q99/2L29\N/ZC4U]T,? +M+]RH1/EU,:[MKQCE;_OM:8R#DT.\(;\L6B9SQV]P.-VIV<@LR$F']1V?M,[. +M?@&N=__P#(M:MF<2NVN.S@5;A]%PZ0O%1'R#C/8R.89+B4`#'EW3[!^?<&I@ +MD[=?GC4B-$.XZ$3W"X]J&IH8B,BV^2.B-.)?]K'.M(S6'=/<:3+JC*/\UJE`6=M +M(^4PEV^$:JPZQN7O7*4!![$\PZNUC6IUHU[59[@J5IW@.E/B]&Z4,TYO8.G\ +M?L?#G#(N*3SAJ#`L$+(U8D@-J]:JE2+\T7J('+L6$O3']R_$Z\%(N]F1)J@C +M>*5$1:"DHH?XJQAMC8'#Z&+?E]6H4O`HXDM1"LM(UZ;PWXA,$U081$B"E[X# +M-M,@#9"XAC1%EG;I@]F,R41_(&Y\,C#XT!_(W'W +M([3!]L9!;RCR5O13&"*$T./_"M*BD7)2'%1,[R&LK#<&EJHO\AU*DY/WU9,V +MWKQZ9.=-R72TB0Y'-<;IE$-=JRHJ_6\TU)#5RGW&%]ZR?#DZF-TW8'02[H)[ +M2-?D:!&/E^1607[<:X;L:4RSE8,F6J9$`R[!RHY3!T,UB52D)9Y]"@$L+6Q^ +M;+6.35Q@Z%'C'LNF\;F6C4WZ!KT+9"&>AOBIRC+)7[U<7JFOK*:0/_E&F`9K +M`JB>Y*H5\3JXD&(,D,#Z!O(ND@2JHC4)U-E2B!6+;[X\]F9/#U`T-#%N! +M&:EZN5*$/ZL6(\6/*F5KB^+GVV_%I1"1QNA(@H6Z+K<%Y5-.MJ!+!PB%IH:38$' +M/UN5R%A#EH^R6<9H*H<7!F@M1:&@1#B^*QB)`VW6#P[H@I +MEH8D5%@^,#1HO"CC#4!@CQ$Q3W:RH%!K$4%)KA("4"*DHO9W!5JB,$SU8FVM7+.6Z&<<*\2:?RZ^ +M"2^!$EV*UR`4M+R]DZ.?3[W=HY\/?]X^V>5$\ORB\?/YJFH46'Z#5Z/!320F +MPQO@_\Q!DZ#D4,2'(!CR2!M?0U..-%;3)0P'44A#[3A3/5<#CJ3>*]0IPT_H4J%=6J_"H63=; +M#'H(/1TA*W0C"``,:"C"B=$ZMV'\9H51HS5&/<;30G58(AUZ>MO&-B^1X:F[ +M<%GD"/!WVH9*A%DFELR-/XX%XRAQ2$Y9[Q/KW) +M,IMJH0W:6'S@LJPV80U6F^OZ2/RD#EXI+NRH*SV0%$2^%_8GD=B6T7M>B9T" +MJB'4<_WZ50'>(!--9$#2S$@1S:GKUPKQ)XE.:^]D^\![BY"AD`2'B;B8M)%^ +MNW\X?:CM!#:X9>H(QZ(*0B+:MM7UU6*]5E[7V_9S#AG]HC\+[SG*%=]WCS<' +M3.$Q4OG4#0FI"3S+UOY +M$88IC*()[Q_<9%'/CZ[QIUG+I!6(!@2SZT=4`M3A3VY+&%M<-TR2MW#A/C*3,5_`UD).D>CMR'1 +M1F>O1D^EY8BF:3BJS3781VD*7OE&<$/U]HRD9L-6[I8K^I8U9XK46S/*T&K4 +M,W;EY:#;<=@&5Z-1KY9KP#24-=-@5!-XH/2#&\;-UW[0N9R$!'YN)86#DA6' +MR.\"]S]HASZ[MER'EV/#O$=%T1F@4TLW&!.C3P7B,NA,VABK2Z9G\0T5FNJ[ +M5/K!INVB^G*TPCE);=@FM>.@W9Z,F`+[@BU4VKC==S/.V*14QQ$;E>CGIM!]LT0\ +MJW.6GK4AFC40[IIU6[@#`@R/&@W+"M!2?W$8 +M00X",FS3C"AA+25*X"WS.@28CTCZM*XVE;:-$)8F8QFZ@`ZLH7_E*PKI$%=T +M_93J.Z.3PX_&K(XKY[#NWU$\(E*`JAR[_9M**+/B"52LN*FQ#EGA4V_MH.B2(M#BI1>&MH22"2(2KQEI!I%+Q\M' +M

<>!O4 +MLK5Z<;ULC*'IMC+H,;`I7E?BQC91A23HR'.1!`6Q55N\A-!&Q!^--]A*!NJI +MF+U_GWJTE$;7`MEG`KZGD!\?P]%XXG<]VO$>,,01A6B8V=X'#6AEK5&L0%?U +MD.+'B63QR>W:\C!A=J%@KX,2(NA9`*,N#%I;N,T +MDTU85J&U-9:S5X0A; +MMP^UU6*C7$D>:6ZQ>`K@J<85H_T%K;_]L +M_^W^_VLI+:=&18P5))$*9*]+G6`(C``H$DBL4#2#[D=871&A<\0]B.T`H +M;PS%4M2KK"%1M]`,,'(+*+EB@[4!>M'0"RGL1(%N,N"_2P0F9F^$` +M-@MJ%ZBX(H&?)'>,RZZ,GHQ9&4UA558K#60ITG@5]4K(QEJLRBB545G3C(HN +MU>)41NE\RFH&GY**S)."AL*T=ZW8J%F4%WX:-UCIC2F6@)/HKEPO.<_&/6^8 +M>$;F._ATV7IJF>@M\6F##'#0Q@,?A":ZE#2F--]%6G2(%*C,16!"/?(*IIB. +ME^$H(BN7KA^1@$9/Z0<:\^#;E:2XY??A!/H8>!=WWC#$!2ORD[Z$LK3X#N8Z +MRJOE(OQ9M500@BR16H>[Q[CLRXK?&0^*N)G5\XIZ+@/O^4S541;TNSX7`Z^& +M[2'L4WG_J/)68WE51M;AXUTDXK-3.<0R1&,L1EW;/2,J"G_CO23F<,#")8Y4 +M4:3U&_B";M#G.PCH>06ZWZQ86H@OMOMLM`6?GZ^#?NI=O)*)?"7$HJ5V0.-4 +M1&LKXE/Y',=G7)H53Y'7EW7,DP6*5%3BXN"/):?` +MBU<5U`G:HX"L7:SZ'GE&$TS:G*7Q3JA4:T7XLV:IR^$7/*HUW-4A#[7STY9W +M<+0-`O1)"^3XG9/6VQ;RG'2I@Z'#2".[G?##$QG +M:;!BZ"<H9P9MD.,\Z83E"#%`Z>BUH1QMS7O\*L.CQIZH^;FZ*)^JT.CFYD[ +M/3N":;O?U(T'GW?BH/WS3IM,FCUI<$Y,FS)Z/7O"O`I/6?X%2%QPD!7H9U&L +MK/"$5=?@%*D:A4`.AQ[54'[GUTDT-G(2MJ#TDF><11M^HN/=QC;9F^V?XK,D +MIZ?T,MZ1'Z0N->C1,U0XHGP(=5?E3\ZGQHSTKJB;U>)BR8WU7*!8MH78ZIF[ +M2;0=YFV4V7\+-H>K4ZK0FO6QH-*D38<<BMN4\5>060<@AJ:S/2A&9K(/[UK\QFEBKRPG[A5?8TZ^Q>/9,ES-VWE,7Z +M%,LU3J/(I-8E4KP(8F^(1E7KS4:Q6E^KN)SN0D="Z67B3"B]C!\*SQ6EU6M@ +M(4+..>/DW*HF1L^3BY0).MG3D!\#@O]4Z^OKF5S,8W8<=;)\UNF.;&J3T]2M +M;7A2FK4$/^I8G\[+E\YI5JK-*^E@WLHXF1\XHX\TE[-6?S7CB.;5WP#^J=IH +MZ-6?@ZV52>.1,_OR3V>11EC:>&4,@\"%T6SP8+@/\)?;.^ZQ18.G4*0V.@%( +M+Z'&:A4&MFF\A/ZH@?U\1R>MM"_U[/S#5T%\7[+^T@E:3U>7MDL?7WSJ/O,V=DN'EEGB]?P*#_-/^R=GY-EZ! +M[.V?GK5.M*GB[#)^P.N3E"+D6:$]%\A%:TLY09*M;8`&A8.AK?ZEPJ'DMK$] +MQ&6167]1#(955O'`UJS`(%?7+0>,?_=!MDQ*Y_"H@!V;60=>-4RYAWNRF;04 +MY-+W^BDTY+*J*1@AS:S;?'ZCO-%INULE3K<(5<4J%;G.-+^.'*UR1GUQ,1AT +M$3R][W6"X2A`=]*.AU:3FRRWTRUNQ48FP`>VOBM1$%I.MN%@ZX8^7M+):T@X +M?!YH!*K,:."_E#IQY>DS;9,-1M'9;M!GX\I+O`HF2R@$VL/[5SAQ.H0;<4GH +M>Y:J41:/G"J_#CP'1"3"@>X=P^A^W#G?A]/=.CLX/ +M=_9+&M/9CV6KP^/]Q!C#WO%6ZO[9-?4D0RZ'Y;[)W]DL_#\F*> +MT@8AF'RVI]15,0$B*3F,8KM'3&NK+,@S;58;=V:I!3'' +M_TAM4ED-[E#RKE='$,6M,MKQ6K%NG&&'\5JM6R.!"6G61:X6$I18@,C#0"R +M-O(E[@,.+ARV#(,@S1&4=$(.$2$O`>6NIIL5&3=']Z[L<@)SB]5KG_57SG22 +M)B4.Y*#.,7*QA:+9*L*J7U-\RT?=6BDTW^1[OFEFFPHQB!/J^A)F!G@56`?B +M;>MMA/?>PRB8=`;VZR&1E9^V3_!V]2XQ1Q(`@L\#-G-*M=&21&FMN%JWYFRU +MWBBN-FS[K)OK`9Q2W?`R(-Q;LHSNCQ$IBX+PB)V#UO;A^;%W?(1`1P@WA,-/ +M:!60MO9,2?;2CMN!]QC@24>```BLP;[<0H;9(+?.,06I[$"G)$]A.>E()Q(H +MZP/T<.5J!<9#G*+Z`!M16&&3*=60AFJ#JMP7/)`TIG0GK:=C10O4A)TA\4&( +M0!!@@178IQ/#^<#EIQFNJ5-#JQ4R,^%QIHBGI@Y38QMPK`*A7%VU#`_UA3!; +M@\)W%MX3N_3%L"A>7&"XCJ$R%&7!!=]NZ@6+"]_C-;\UPT&6Y"?@K=#,#@7` +M"OZ(`H0=\]C!R,.S)H]]LQ04;-%/&D88U%(%[\Z9$Z)QQ?5P,>C<"60).LY2 +M\37%NE,DP%%[$E'A@7_8J#?A7+9\64GI.RR]#/L>S+9\(L%N/`2Z0;7G91?E +M`A#V("&66Z2U4I"I\VKD9;Q!_EEZ263PI9#?E%"*!J)."C3OEU^A,/6*IIMS +MTU<#RR&A>E!7I=-!&?P%2K#*)?W1,PGO0TML#;D2@RGRY^D]%L".I-8JAM(@ +MA7ONDNWP0\?J04NL">=DTSXGFY7U8K/:B"&Y8(.DPE+N6?-B-`86!;B"Y!NJ +MK]=H\A!3#S0=3O>8J#$[3'IRU#]YBP+=GWY36UBI=9CG10\ +MQM))B??JX$?VRM:32Q=;:G=<^)$>X^78#&QA^58"]EJ3NTNAAOT=>X6!IBZ1 +MMSK>U$A!?V>OU6.-L9&3`TF%+U/AS+19[TSMG,!B[50J:S@JZNDGZI)V5?HM +MWJ_?8OT:SN[7L=.OOYM^'7.__N[VZS?3KZ'J%RYTF-#B^JJ+Y_1%32I4(CWZ +MTO8)I[:?_;LN`C4.N?N/PB,LF3C%&$[&>!?K87ZFM=HD0(N*+^`;$9`*^F54 +M+(L`ID*6NT@_N)&>2NRY0K]39`NT/$"MJL=W>[%;9/VFH"ZT\/X)(;?#CQ@V +M[F^B5$7R6:0V&CX14?WYW@&Z5$192-Y+X8NWYH4I7UKTR'[5[>-BCG[I$?J; +M=M1Y<%>QD*F]U55MI%6&9R3+?GS%;FJ6(XD59+>!0/D>,)KQY17RW7X(O+BG +M;D408$Z9Q[V`5N,U'RVOVGJM7(0_YG8O9T"99!A08/>5SXN%K:3.2.7@!`N: +M;O:/;4M!_%@8&Y`69G'3=7_^"#Q1X4)3=L-PWI"A7'/'5MO=Z$P3"V]U_\8!B_[>P[ +MM,\T8)9.^NK)T!6N9L`KK*VM5%?2P/#E&W'EXBM<28`%2P.-"/AU&SU7%:H4 +MT%>9"`MK6;B1."T)[W)6!:"+_J^3WC"2SN65YEJQ7EFKNRZ6B(07HM5^WX8; +M94D<8Q#A@F.C>C3BA]/JHQ]V"6(%ITY:2I`1D]+FD3+&Q1C#`Q,(+-3C47Y/ +M>4'WT:L`_=\W'2RAYT+Q62IVJ&/>,/2Q.$A"5A:C30F#IOKG2`E?;O]0,DV! +ML.0^%1;HO;5?S,W!DVP:J[HIT$%UC/*0BAU$;X3=:+5]K&>Y:DW\-TR?NL6I +MK6Z4RQ9\$!>O]I"=,64C9<60(',V.OOPS"7\>^P'`U+C\R(AXPMUM`$QM^YQ +M\$&]7(TKN?%B;W0526QBOWOCW\$"&PX#H`B,+524T:^E`C&TE-8$VWM^VMI% +M_,`A.CA*---E7;Y@G/Z.`UHD483]2.P?X@T.%0_L9'2#:KJ+.^MRT\)2G>J. +M3$UAYD$V90M5SVB==:``5_$[I#G>CS5X62O]3H.Q0F8O#6_"2]1+;I]LG>:@HIHB,34*3%&.5`Z^W*WV,\P..+UTT\V1>(XD:5H +MW%GY&(R>@BBY-6;3I5H:2:J)6(,507(?Y^J(SH64I28J90QL4V\8DE33U"B6 +M:P&"A/?TM94RZQE%!5>?[4)/#]8L5!COG$+^>:>_'OSJG?AA%+14?,'D^]=H +MH]?A)RFY@VC2"_C2\_]BH&^^%>[D,3[G#H9P^VE_MW7JG9X>>[S]O['M7*3[ +M[TA$=[V+03>B%)YW-?%''?F=91Q*[YRJBYV +MM*&U=]+^_B5U>;1?AC+RYZU%PSI@G:@*0_@&-E +M'\A)BVT!MD_?>D?'Q#SA.;.C*J"P@G#Z['I`MULGA]L'![](.Q]=UH&'M@F1 +MO"=;%O_'$,>#C"6B[!=25J)M^?`#;+APL'+],O80[Z3B3R_;Y/SL/IST0]RS +M]-2TRCL^.MW_AW=Z='ZRTW*+!L;25Z7P,E89A=H]9-1\^LOIP=%>P"C]]# +MIB6[_79'N@-8Z'(3OUM[#V?([^6B2/GOTZ:Q>D!EM2*?)UD8]52#$4,:N(7`K[1BX/'O^N+RLK.IN1G5T/)["1-C@\)SLDN, +MDS`88I0#[OT$[94'O276FFB^J(,EE"H%61,<]ZAZ\\9"7CN,`K^#R8K`]5S[ +MHQ>%;V7E14HQN%2-,6A1[2Y>ID.>@E"/L"K[DLG.IN\E[.9_4FS@/EZ`UG%E]_]L_]=QOL:OJ\V&OCZ$R\*O1I2Z`//`-&[=^^+`@,) +M[;\Z/P,N^I#X:%*D^SW_*M!+Q]J?N&KV#L^1LIQLG_SBR:--FMA1R2^@7AA& +MV.J]8-/>(*SDX\MST4.(C*O@'39^:2-N`0KK'G^'?:-O7#*W[Q>3R^A_J=.K +MY#C#;ZA8>/6.7K_?G$Y8I!/2X(H"(G$)RB\,B`GY[$SZ<#I''B;"WYML]2H",$)8'"]G9-]JV88T_;P3N1A4HIBZ8?J +MRZ7")L[95FUSKI4%^?MMD.6Y`+.RBG(5E*2[=$6VC=W*(!=^P4R%V!I$(L)9 +M7Y+3E>R]FHUXC7*=9E4G,JL4FOXL6".N^/M7IZ;C&*.KB6`T&NB]9B8%T6R! +MMIZ>[;9.3KS7^P>MPR.J4BR+6E'662O,WD+0L[S:0]@H.H9%7NX16&.P@KQ= +MD+'>LB\"GQ+6`)A%?8KK9^D2+X265(LUJ=4G+^IUKIUU;6W0E6C2]R[]'EKJ +M;:F-J@:'#T,::ER/B7Q8<-&<]D5EN\,'34:&@C,WJ4G>S2Z`"7SY.UT.#,5X +MH`>69H9FA9B'?(Q,"3A-[;*+4D!.J[>0L8-G$BDG@@1."23W)]VQ%F-0*2AQ +M1U4@JS0J))L>7OE,U2-?=5K^TPMZ3*0BGWHKS_EXQD(AE5)&_DKD>TPO#'JE];V`UO]_6!59]L>UYV$$@D-M8BD&JU?4#KM_Q5,!Z& +MG7PA3G*=20"!+[@%*2Y?J38+ZB@W4D`**V^?,RPHI)WVKO4ZQ3I_&BF0:IIB +MM8Y*_33E@GPC9%.U'$@_40@T0:;J&_75C;(59$H6J@5!F<>5`JOE#4352Y4" +MF3=$M-D.^SJB)Y-@QELM7BR5FK7:J-30`M0V5>='5**XTE9UV;!JS31`M::PFZIVAO4,D"J$U:%UXVN1_0`J`^U +MK8$>E?I:VQO#$L`5B2(U4&A@[3W_(OH885[\0H7`9,&3&G^!TBAG-+G@A_B% +MJH"Z^0E^4:W@HO`+%45:$\I_>1G1*_B7WW3_E_Y$\H=,+G^/^?=P,"1<8F_L +M7^`MKWX0V6\YJ0_LU%UDOL+3[U@Y]XW8#2.Z=OG]U6:8C59?E_V!"+ +MM//N\X^[13@&0VCY$X6N575E:^K+&"*DFJ:NYS="-U=1#O4@5S/7[^7R1KVA +M*4#.E*M(A\Z40C>R`H](=U_IYYL%@ZN.U>9:<77-MN:'!\URS3U2E8L\'PS\ +M"PU%^;`CL!KOMTDP"512'=N/E$;+BD +M1$BQ?+E&#!8P+E@-4<+^.WZ!8_=^A6ZD,(.1$^U1@M-9FL?P$Y.*#D/SVK&> +MD<8SR\(I\SD<[U0=0B*\HU:^7Y%(!N_*[U>&L&U"]$0H**,6-JM4'(+A//`M +MR80*EGZ^1L2`(?"^\K1U)O(_'>WO\DJB:DF`DQ=P+@2TL?_$4'2X\,KXIU*P +ML>J=.SM+OE;#0,N'81Q`9E$+\7?;I.)@X'=$9X((%^B8T1_T2Q\'77^,PK(< +ML(A0Z5DJ<2G+T]&5:52E`5QU*IO.+X1LJ$51B#1,QH"E>"%P<"EYHGJ# +M(0N[2J%/F`RDR:7!;JZO%3%PJ1[LM7*EN%8IN_9%::,-&UV/+7\T-+RZ`L"@ +MHT?'9][/L6':T+LT;1!-P3\&'?LGK7SM\>^BJCM=U0G_27)NE@PNI5:>6H\.C2&HR0L`4CW4X\D(7 +M#;FL!WD762LB,R\*9>;Y03.:>J0W)'YJ02BUZ`718H`ID<,Z2@9-W+4"_17 +MQTAO0!T_!C(Z3,<91;F>'[A(-#*"I^I0)L"J2^Q0Y-^FI3H.<(V-A +ME1M-',6FJ\;Z$XSB?&?:HP[O]'4^][C'%SM[^Y"/("G8>*V3JA`>RM6^7E]# +M=+MZDO=2"5%WAU8,!MF0T,K$A_[@IF^@4J(AWOYRN(.7:!)*`".$H0)RL`4^ +M?)OJ+FJKJJ_V][S6X>[^]J%V?>:PZFW$E@&F6%R$5R6\FO/[P""/1E+F0F87 +M+;2235^1S@#U=1S)E*"<3SN2"0?1/_'`VL(J&N0^B:"*%64+J74,*IGF\R?? +M"&ZH%E#Q5YIP:MWCRR*U<$I9%A!,I3DB6=:.QA^#MD?RF'?I0R\[C$F!\458 +M,&V"*-JT15-\8$&[2"6RYVEL-Z^PR:'@^`6LG4WQJ2"OZ*7=\,G9`4$(>CMO +M6CL_KN +MJ);QO#Y/YD;&\]5Y,CPLBF4+350NR+1Z\Y9M[`M"@2X*YY$F1GAHN>_4&6]L>0^/ +M3EIGYR>',W9&=D-X9ZRMP4:P=+L-A*(N:^.6]*6^.GNIPU308LTLHSG?=IE9 +MSMK\VZX@BWJT':Q;IAQVK%8B$MR)ASYHA#)*26'EQ&<+Q,[?>4WAK\9:K=@P +MP5]566ASB_?;IWF$>RQ0H$3Z6A3-@EMMW.F-ZY7;`GFT?'SXEN)9EHI,9XJ" +MJ]C9/CCPZ"O30UJA_WW^]I@?,@0E^KH4Q:OMDY/]U@GD01P&BIM:Y$O0(E5/ +M60^/SEH%]*63#JJ=0JS]L-W>;!_N[1_NQ=HODNVO9UQC$#2.'56WW+AE?+$'MH$66-_H +MP>5DORKY)3>]Z1?ZV%J-5EIXI]&H6U%H'I?HN8`(AL#R7ET!,PZM+HH@)"4+ +M6X#S`:??BG`Y:MT@`E0J&&*UO&8Y3%8=^/A8WA1F +MNY'!;*N<'H6VX?"4;..#5XYDQ,(X_IBX6FU4B_"G:6'?RD>6GA_%\KXW&*)= +M=A6E=(1LBOTD-H4,MXNB+W^9B.]2ER65(.8YR/R_\AUD#.YVJ""K5'AXS*&, +MT:%JRQA=P,]"ZLWY@D/1;$*_UZKV4#37\%'3@C9C/S211]P#*D(+D[^K+W2Y +MB=1Y0YK^S[1OLN)74[F#X?0HUBI+/,J%SIP1R!H_]M#"FY^V#])R;SJ=>;M_ +MB+T1MJ>_7!!;?'3F<2O0:6-E +M,'3[;&>BA]N'9P@L8&>K4K:D4DX'@"%_RU@U+BQ*['4_N!+_GXC5T4=U%AS; +MJDCXS5L$0<]4O'B.LF$*3[03[>G<<%6))$4]I5R:51RE*Y4,!\M(,9/P`VAWU>@VF:#6&)4YJQY?(X!QM1H9`22PENQR`["QM91=]V`08A9M:E,@`B@ +M3404&+@S"")TQT6,1K>#V@548K0P4:>L!#;.Q(4:[5ZM$&PAS8E+[-4XJOXF +M%\VFBF&UV!2I@DO2&@4>WF\FK,FTAM]LI(=OJ`<2R\8Z[D3+9JE:Q].L46LD +M-JP]DT:W\)X +M$EAWUBIVUW!$)QW>+>/(P>9)#X0D\DR$<$'?%@AR/2=>2\Z +MLP)Z@5^9`X,A&*'Y@2P=?EY8+Q6[2VF4*G0IE,JER=2RQ(U=EKBQB?+Y'$7#:=:CVB2BDD4FM,;5 +M)A65+'+!R7,SB(9J4"KA,&/AC*78,D$&:0A*9B0W%QS"9,Y/9J;U5YL:70ZZ +MW<$-`21(](&A/T:%K@5<+O)`(!`&X=7Y:\0Z?:\VMXSL&,E("#H*JIT5B0RT +M2Y1DYH)07^Q45:`Q.BG4-BH@J5%[-Z>/7J*[FOM7&"-3QCS>7ZX!!!/934.7 +M]$`@Z4SK??A^0X0;K$."WQNFK+`OGF<1#:N'_NAJ@N9@&TY(61A+5="L_F[- +M[*]ZJ4UAM6X.<7XMV#X9B&GE:D5L[_]#U%=N=6`W?4N@3S:03G9^ +M1)_OLQ8B1F7;N;J>L\I'F-`:@/!T0JP930UO"6"9[$=T'+G,1*)L6A4?(QU% +MQ5.\.4$,;,HQ62^NKUFLX?I:K;B^;AF^"&`OPQZPEIJSMV,7_3\3]*T_,&]D +M"*&V8F"EGH<<<%+;(N+04K'QY+C5SCN7(!2>/2CP'5.'J<'N%,A@9F@ZA4N@ +M.)19I97G+,VL%H34PM7"SNW/E`>3?;VHO=\IDF-"<&!/$TZ$H=?0>3X80A5H +M,,'.#S!S'JV-2J6!>O;5LM&R_+[4"WJE48"!#I<0;29`TQ#\580#_E.1$Z&U +MMS_\B`FH:_3+37#C)+BQ$CSG!/W@IC3R=0J$6D9%<9?PN"M$<3]M:G7UFX"# +M3?EB3*)J+)83A3GJK5P+1NCH`I=+0;DPQEJI)[5V\B(!<>(J34LR^G+Z+!,N +MT5(I::JB,Z2MLVD92U"TSAQ??Y]KE.-+.%226S)/K2-[-1L&=G?28Q9H-.YR +MJ%(3%ZP#[^A0'7>M@*5*I13T/4S`D#SYW=?[((AT&;&^D#2)0\0G1$=0^]0* +MG5*OKU6+\,=2U=?1`*#>J-A!SY0F"`/O$7XK1B-LM5H2<04;>N@?1D5!"@:, +MY-!%E[3Q-8*F"5S3-DJT'DR=V^L#V35&_7HG#%6(4HV@JR%_*?`:1HE@LUL6 +M5+&'O?!_\3XL)JY&Y$/7]H&T1W*Z?();'B&V%KN$<$D,I^2/,Z=31E)#E59G +M@-HLW&DW(AQ;\>YT#^-+80:*_++I?P;U/SLY;U'T/+V]]MF!`.W4;/<6<8$G +M%I#HA.,I^]0\":-(-66;E36RH.3E&R&;JEE$^IFS/4\K&XVJ8U?6<)'D998% +MF$,5+PY-4BDLDQW5L5)?6R]6ZNNV)Y]\9/NPW%P3S2.&AHSY-4.CF#)";-:RLC1GK&&UC![THO<6NO,,@UF?!(0S0.E.EK#.HB2A`J$#)#.&F^ +ME&,5#D-Y6ZPHIES.:8K>Z)K@NDE4"\>1-I)7P08I??R&V8*_5AU3K9O9IT0T +M9^R;,RQV?#PGFJFX`3Z->TLA`+%4/D)UC-"/H4_-_A]^^QUT[.X&@TM"-3O? +M[RPORZ":M/_4(<5R-:3_X%_)*^HHZ&'LCS9YE'TG"]O$.:?;;!@X4F*C"*L: +M1R$R&:$\C.R]B`'CPJOOQR5X.;E]BCWIUIA]0;V:=C>]*E1+U99TBT.$>@,' +MO;;1:.APP3DJ4VW+6+:4[9D199AW85&[S7TC=IC@B?9H?!%C/Y\"5?UK/O&\($J7Q_L[3A4*==BW +MBGPNSK9/4,]WL/]J;V>G*K/C#8',3T4<*=:"K-WHR-M$,2G@K9VMAN-$7F*E;(B$IMHUK?J%D;LE&/ +M[T@[:W)39B!K4_VUM7JY"'],F*,\L&[M:^6NLK&[#[+!DH)?DT^7Q-)2H?"> +M*.N27"NM_;,WK9,E?D8R"#)4\N79F_.WKY)0'*1Q[@](^I%!@FTO41E\B)MH +M>0]^EB9NG[Q5X:Q^MR]36QB]GB/\2A!7M)#:DG(U@7CB3_R+?/-%P&X"@1\A +MVF7,G\R^6F!WH'?E]W2I@!&M=%*A44@8@9B5*>0BL;NO,'ET`GVUSY?`I/%$ +J=ML:^A7X&%Y^@0GXR]?/U\_7S]?/U\_7S]?/U\\7]/G_`>FKZ(H`,`(` +` +end --- gcc-3.4-3.4.6.orig/debian/patches/netbsd-archs-gcc.dpatch +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/patches/libf2c-mxunit.dpatch +++ gcc-3.4-3.4.6/debian/patches/libf2c-mxunit.dpatch @@ -0,0 +1,36 @@ +#! /bin/sh -e + +# DP: libf2c/libI77/fio.c: Set MXUNIT to 1000. + +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 + +--- libf2c/libI77/fio.h~ 2002-06-01 14:38:29.000000000 +0200 ++++ libf2c/libI77/fio.h 2005-07-06 10:15:17.579613491 +0200 +@@ -86,7 +86,7 @@ + #define errfl(f,m,s) do {return err__fl((int)f,m,s);} while(0) + + /*Table sizes*/ +-#define MXUNIT 100 ++#define MXUNIT 1000 + + extern int f__recpos; /*position in current record */ + extern int f__cursor; /* offset to move to */ --- gcc-3.4-3.4.6.orig/debian/patches/gpc-profiled.dpatch +++ gcc-3.4-3.4.6/debian/patches/gpc-profiled.dpatch @@ -0,0 +1,38 @@ +#! /bin/sh -e + +# DP: Do not build the gpc runtime using -fprofile-generate/-use. + +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 + +# append the patch here and adjust the -p? flag in the patch calls. + +--- gcc/p/rts/Makefile.in~ 2004-05-16 17:27:49.000000000 +0200 ++++ gcc/p/rts/Makefile.in 2004-05-16 18:24:47.000000000 +0200 +@@ -33,6 +33,7 @@ + CC=@CC@ + PC=`echo $(CC) | $(GCC2GPC)` + CFLAGS=-O2 ++override CFLAGS := $(shell echo $(CFLAGS) | sed 's/-fprofile[a-z-]*//') + PFLAGS= + AR=@AR@ + AR_FLAGS=rc + --- gcc-3.4-3.4.6.orig/debian/patches/reporting.dpatch +++ gcc-3.4-3.4.6/debian/patches/reporting.dpatch @@ -0,0 +1,170 @@ +#! /bin/sh -e + +# DP: Add Debian URL for bug reporting isntructions. + +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[] = "";' >> ${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/gccbug.in~ Tue Nov 14 07:21:47 2000 ++++ gcc/gccbug.in Tue Nov 14 07:24:59 2000 +@@ -24,13 +24,13 @@ + 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. +-DEFAULT_RELEASE="@gcc_version_full@" ++DEFAULT_RELEASE="@gcc_version_full@ (Debian testing/unstable)" + + # The default organization. + DEFAULT_ORGANIZATION= + +--- gcc/java/gjavah.c~ 2003-03-28 23:18:48.000000000 +0100 ++++ gcc/java/gjavah.c 2004-05-14 07:26:44.000000000 +0200 +@@ -2320,6 +2320,8 @@ + printf ("\n"); + printf ("For 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); + exit (0); + } + +--- gcc/java/jcf-dump.c~ 2003-03-28 23:18:48.000000000 +0100 ++++ gcc/java/jcf-dump.c 2004-05-14 07:27:03.000000000 +0200 +@@ -893,6 +893,8 @@ + printf ("\n"); + printf ("For 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); + exit (0); + } + +--- gcc/java/jv-scan.c~ 2003-02-03 15:06:32.000000000 +0100 ++++ gcc/java/jv-scan.c 2004-05-14 07:27:26.000000000 +0200 +@@ -116,6 +116,8 @@ + printf ("\n"); + printf ("For 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); + exit (0); + } + +--- gcc/gcov.c~ 2002-10-08 21:45:17.000000000 +0200 ++++ gcc/gcov.c 2004-05-14 07:28:07.000000000 +0200 +@@ -350,6 +350,8 @@ + fnotice (file, " -p, --preserve-paths Preserve all pathname components\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~ 2002-10-08 19:27:39.000000000 +0200 ++++ gcc/version.h 2004-05-14 07:14:38.000000000 +0200 +@@ -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/diagnostic.c~ 2004-05-14 07:39:39.000000000 +0200 ++++ gcc/diagnostic.c 2004-05-14 07:42:06.000000000 +0200 +@@ -66,7 +66,9 @@ + #define bug_report_request \ + "Please submit a full bug report,\n\ + with preprocessed source if appropriate.\n\ +-See %s for instructions.\n" ++See %s for instructions.\n\ ++For Debian GNU/Linux specific bug reporting instructions,\n\ ++see %s.\n" + + + /* Return a malloc'd string containing MSG formatted a la printf. The +@@ -271,7 +273,7 @@ + if (context->abort_on_error) + real_abort (); + +- fnotice (stderr, bug_report_request, bug_report_url); ++ fnotice (stderr, bug_report_request, bug_report_url, debian_bug_report_url); + exit (FATAL_EXIT_CODE); + + case DK_FATAL: +@@ -570,7 +572,7 @@ + + fnotice (stderr, + "Internal compiler error: Error reporting routines re-entered.\n"); +- fnotice (stderr, bug_report_request, bug_report_url); ++ fnotice (stderr, bug_report_request, bug_report_url, debian_bug_report_url); + exit (FATAL_EXIT_CODE); + } + +--- gcc/gcc.c~ 2004-05-16 08:14:42.000000000 +0200 ++++ gcc/gcc.c 2004-05-16 08:19:13.000000000 +0200 +@@ -2829,9 +2829,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[j].prog, +- bug_report_url); ++ bug_report_url, debian_bug_report_url); + signal_count++; + ret_code = -1; + } +@@ -6250,6 +6252,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); + } +@@ -6453,6 +6457,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-3.4-3.4.6.orig/debian/patches/libffi-soversion.dpatch +++ gcc-3.4-3.4.6/debian/patches/libffi-soversion.dpatch @@ -0,0 +1,59 @@ +#! /bin/sh -e + +# DP: Install libffi with soversion 3. + +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 libffi.old/Makefile.am libffi/Makefile.am +--- libffi.old/Makefile.am 2003-10-22 01:02:59.000000000 +0200 ++++ libffi/Makefile.am 2004-02-21 10:06:49.000000000 +0100 +@@ -175,7 +175,7 @@ + + AM_CFLAGS = -Wall -g -fexceptions + +-libffi_la_LDFLAGS = -release $(VERSION) ++libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` + + INCLUDES = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src + +diff -urN libffi.old/Makefile.in libffi/Makefile.in +--- libffi.old/Makefile.in 2003-11-24 00:52:28.000000000 +0100 ++++ libffi/Makefile.in 2004-02-21 10:06:49.000000000 +0100 +@@ -226,7 +226,7 @@ + + AM_CFLAGS = -Wall -g -fexceptions + +-libffi_la_LDFLAGS = -release $(VERSION) ++libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` + + INCLUDES = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +diff -urN libffi.old/libtool-version libffi/libtool-version +--- libffi.old/libtool-version 1970-01-01 01:00:00.000000000 +0100 ++++ libffi/libtool-version 2004-02-21 10:06:49.000000000 +0100 +@@ -0,0 +1,6 @@ ++# This file is used to maintain libtool version info for libffi. See ++# the libtool manual to understand the meaning of the fields. This is ++# a separate file so that version updates don't involve re-running ++# automake. ++# CURRENT:REVISION:AGE ++3:0:0 --- gcc-3.4-3.4.6.orig/debian/patches/ignore-comp-fail.dpatch +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/patches/libffi-mips.dpatch +++ gcc-3.4-3.4.6/debian/patches/libffi-mips.dpatch @@ -0,0 +1,92 @@ +#! /bin/sh -e + +# DP: libffi mips update + +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/libffi/src/mips/ffi.c.old 2004-05-12 21:41:01.000000000 +0200 ++++ src/libffi/src/mips/ffi.c 2004-05-12 21:42:52.000000000 +0200 +@@ -27,6 +27,7 @@ + #include + + #include ++#include + + #if _MIPS_SIM == _ABIN32 + #define FIX_ARGP \ +@@ -91,7 +92,7 @@ static void ffi_prep_args(char *stack, + FIX_ARGP; + } + +-#if _MIPS_SIM == _ABIO32 ++#if _MIPS_SIM == _MIPS_SIM_ABI32 + #define OFFSET 0 + #else + #define OFFSET sizeof(int) +@@ -145,7 +146,7 @@ static void ffi_prep_args(char *stack, + } + else + { +-#if _MIPS_SIM == _ABIO32 ++#if _MIPS_SIM == _MIPS_SIM_ABI32 + memcpy(argp, *p_argv, z); + #else + { +@@ -266,7 +267,7 @@ ffi_status ffi_prep_cif_machdep(ffi_cif + { + cif->flags = 0; + +-#if _MIPS_SIM == _ABIO32 ++#if _MIPS_SIM == _MIPS_SIM_ABI32 + /* Set the flags necessary for O32 processing */ + + if (cif->rtype->type != FFI_TYPE_STRUCT) +@@ -440,7 +441,7 @@ void ffi_call(ffi_cif *cif, void (*fn)() + + switch (cif->abi) + { +-#if _MIPS_SIM == _ABIO32 ++#if _MIPS_SIM == _MIPS_SIM_ABI32 + case FFI_O32: + ffi_call_O32(ffi_prep_args, &ecif, cif->bytes, + cif->flags, ecif.rvalue, fn); +--- src/libffi/src/mips/ffitarget.h.old 2004-05-12 21:39:33.000000000 +0200 ++++ src/libffi/src/mips/ffitarget.h 2004-05-12 21:40:33.000000000 +0200 +@@ -26,9 +26,7 @@ + #ifndef LIBFFI_TARGET_H + #define LIBFFI_TARGET_H + +-#ifndef LIBFFI_ASM + #include +-#endif + + #if !defined(_MIPS_SIM) + -- something is very wrong -- +@@ -36,7 +34,7 @@ + # if (_MIPS_SIM==_ABIN32 && defined(_ABIN32)) || (_MIPS_SIM==_ABI64 && defined(_ABI64)) + # define FFI_MIPS_N32 + # else +-# if _MIPS_SIM==_ABIO32 && defined(_ABIO32) ++# if _MIPS_SIM==_MIPS_SIM_ABI32 + # define FFI_MIPS_O32 + # else + -- this is an unsupported platform -- --- gcc-3.4-3.4.6.orig/debian/patches/rename-info-files.dpatch +++ gcc-3.4-3.4.6/debian/patches/rename-info-files.dpatch @@ -0,0 +1,568 @@ +#! /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 + + * 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/f/ChangeLog: + * Make-lang.in: Allow transformations on info file names. + Pass macros of transformated info file defined in MAKEINFODEFS + names to makeinfo. + * g77.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. + + +diff -ur gcc.old/Makefile.in gcc/Makefile.in +--- gcc.old/Makefile.in 2004-02-06 08:03:12.000000000 +0100 ++++ gcc/Makefile.in 2004-02-21 13:28:52.000000000 +0100 +@@ -2615,8 +2615,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_G77_NAME = $(shell echo g77|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 'fng77 $(INFO_G77_NAME)' -D 'fngcj $(INFO_GCJ_NAME)' + + info: $(INFOFILES) lang.info @GENINSRC@ srcinfo lang.srcinfo + +@@ -2645,21 +2661,40 @@ + # patterns. To use them, put each of the specific target with with their + # 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 $(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) -I $(docdir) \ ++ $(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) $(MAKEINFODEFS) -I $(docdir) \ + -I $(docdir)/include -o $@ $<; \ + fi + +@@ -2935,11 +2970,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 $@ +@@ -3107,8 +3142,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. +diff -ur gcc.old/doc/cpp.texi gcc/doc/cpp.texi +--- gcc.old/doc/cpp.texi 2004-01-18 23:43:09.000000000 +0100 ++++ gcc/doc/cpp.texi 2004-02-21 13:28:52.000000000 +0100 +@@ -54,7 +54,7 @@ + @ifinfo + @dircategory Programming + @direntry +-* Cpp: (cpp). The GNU C preprocessor. ++* @value{fncpp}: (@value{fncpp}). The GNU C preprocessor. + @end direntry + @end ifinfo + +diff -ur gcc.old/doc/cppinternals.texi gcc/doc/cppinternals.texi +--- gcc.old/doc/cppinternals.texi 2002-03-02 00:38:51.000000000 +0100 ++++ gcc/doc/cppinternals.texi 2004-02-21 13:28:52.000000000 +0100 +@@ -5,7 +5,7 @@ + @ifinfo + @dircategory Programming + @direntry +-* Cpplib: (cppinternals). Cpplib internals. ++* @value{fncppint}: (@value{fncppint}). Cpplib internals. + @end direntry + @end ifinfo + +diff -ur gcc.old/doc/extend.texi gcc/doc/extend.texi +--- gcc.old/doc/extend.texi 2004-01-22 00:41:23.000000000 +0100 ++++ gcc/doc/extend.texi 2004-02-21 13:28:52.000000000 +0100 +@@ -7671,7 +7671,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 + * Min and Max:: C++ Minimum and maximum operators. +diff -ur gcc.old/doc/gcc.texi gcc/doc/gcc.texi +--- gcc.old/doc/gcc.texi 2004-01-02 12:27:45.000000000 +0100 ++++ gcc/doc/gcc.texi 2004-02-21 13:28:52.000000000 +0100 +@@ -79,7 +79,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 +@@ -131,7 +131,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. +diff -ur gcc.old/doc/gccint.texi gcc/doc/gccint.texi +--- gcc.old/doc/gccint.texi 2004-01-02 12:27:45.000000000 +0100 ++++ gcc/doc/gccint.texi 2004-02-21 13:28:52.000000000 +0100 +@@ -65,7 +65,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 +@@ -114,7 +114,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 +diff -ur gcc.old/doc/invoke.texi gcc/doc/invoke.texi +--- gcc.old/doc/invoke.texi 2004-02-18 09:17:23.000000000 +0100 ++++ gcc/doc/invoke.texi 2004-02-21 13:28:52.000000000 +0100 +@@ -763,7 +763,7 @@ + Fortran source code which must be preprocessed with a RATFOR + preprocessor (not included with GCC)@. + +-@xref{Overall Options,,Options Controlling the Kind of Output, g77, ++@xref{Overall Options,,Options Controlling the Kind of Output, @value{fng77}, + Using and Porting GNU Fortran}, for more details of the handling of + Fortran input files. + +@@ -5045,7 +5045,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 +@@ -5053,7 +5053,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 +@@ -11211,7 +11211,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 +@@ -11363,7 +11363,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 +diff -ur gcc.old/doc/libgcc.texi gcc/doc/libgcc.texi +--- gcc.old/doc/libgcc.texi 2004-01-18 23:43:10.000000000 +0100 ++++ gcc/doc/libgcc.texi 2004-02-21 13:28:52.000000000 +0100 +@@ -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 +diff -ur gcc.old/doc/makefile.texi gcc/doc/makefile.texi +--- gcc.old/doc/makefile.texi 2004-02-08 09:09:36.000000000 +0100 ++++ gcc/doc/makefile.texi 2004-02-21 13:28:52.000000000 +0100 +@@ -121,7 +121,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. + +diff -ur gcc.old/doc/passes.texi gcc/doc/passes.texi +--- gcc.old/doc/passes.texi 2003-11-24 00:52:07.000000000 +0100 ++++ gcc/doc/passes.texi 2004-02-21 13:28:52.000000000 +0100 +@@ -45,7 +45,7 @@ + definition's compilation is entirely freed, unless it is an inline + function, or was deferred for some reason (this can occur in + templates, for example). +-(@pxref{Inline,,An Inline Function is As Fast As a Macro,gcc,Using the ++(@pxref{Inline,,An Inline Function is As Fast As a Macro,@value{fngcc},Using the + GNU Compiler Collection (GCC)}). + + Here is a list of all the passes of the compiler and their source files. +@@ -74,7 +74,7 @@ + C preprocessing, for language front ends, that want or require it, is + performed by cpplib, which is covered in separate documentation. In + particular, the internals are covered in @xref{Top, ,Cpplib internals, +-cppinternals, Cpplib Internals}. ++@value{fncppinternals}, Cpplib Internals}. + + The source files to parse C are found in the toplevel directory, and + by convention are named @file{c-*}. Some of these are also used by +diff -ur gcc.old/doc/standards.texi gcc/doc/standards.texi +--- gcc.old/doc/standards.texi 2004-01-18 23:43:10.000000000 +0100 ++++ gcc/doc/standards.texi 2004-02-21 13:28:52.000000000 +0100 +@@ -185,8 +185,8 @@ + GNAT Reference Manual}, for information on standard + conformance and compatibility of the Ada compiler. + +-@xref{Language,,The GNU Fortran Language, g77, Using and Porting GNU ++@xref{Language,,The GNU Fortran Language, @value{fng77}, Using and Porting GNU + Fortran}, for details of the Fortran language supported by GCC@. + +-@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. +diff -ur gcc.old/doc/trouble.texi gcc/doc/trouble.texi +--- gcc.old/doc/trouble.texi 2004-02-04 22:12:40.000000000 +0100 ++++ gcc/doc/trouble.texi 2004-02-21 13:28:52.000000000 +0100 +@@ -88,7 +88,7 @@ + as @code{REAL_VALUE_TYPE}. But doing so is a substantial amount of + work for each target machine. + @xref{Cross-compilation,,Cross Compilation and Floating Point, +-gccint, GNU Compiler Collection (GCC) Internals}. ++@value{fngccint}, GNU Compiler Collection (GCC) Internals}. + + @item + At present, the program @file{mips-tfile} which adds debug +diff -ur gcc.old/f/Make-lang.in gcc/f/Make-lang.in +--- gcc.old/f/Make-lang.in 2004-02-20 11:53:17.000000000 +0100 ++++ gcc/f/Make-lang.in 2004-02-21 13:28:52.000000000 +0100 +@@ -153,7 +153,8 @@ + cd $(srcdir)/f; etags -o TAGS.sub *.c *.h; \ + etags --include TAGS.sub --include ../TAGS.sub + +-f77.info: doc/g77.info ++INFO_G77_NAME = $(shell echo g77|sed '$(program_transform_name)') ++f77.info: doc/$(INFO_G77_NAME).info + dvi:: doc/g77.dvi + f77.man: doc/g77.1 + +@@ -166,10 +167,10 @@ + $(docdir)/include/gpl.texi $(docdir)/include/funding.texi \ + $(docdir)/include/gcc-common.texi $(srcdir)/f/intdoc.texi + +-doc/g77.info: $(TEXI_G77_FILES) ++doc/$(INFO_G77_NAME).info: $(TEXI_G77_FILES) + if test "x$(BUILD_INFO)" = xinfo; then \ + rm -f $(@)*; \ +- $(MAKEINFO) $(MAKEINFOFLAGS) -I$(docdir)/include -I$(srcdir)/f \ ++ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I$(docdir)/include -I$(srcdir)/f \ + -o$@ $<; \ + else true; fi + +@@ -264,7 +265,7 @@ + echo ''; \ + else true; fi + +-install-info:: $(DESTDIR)$(infodir)/g77.info ++install-info:: $(DESTDIR)$(infodir)/$(INFO_G77_NAME).info + + f77.install-man: installdirs $(DESTDIR)$(man1dir)/$(G77_INSTALL_NAME)$(man1ext) + +@@ -280,7 +281,7 @@ + else : ; fi + rm -rf $(DESTDIR)$(bindir)/$(G77_INSTALL_NAME)$(exeext); \ + rm -rf $(DESTDIR)$(man1dir)/$(G77_INSTALL_NAME)$(man1ext); \ +- rm -rf $(DESTDIR)$(infodir)/g77.info* ++ rm -f $(DESTDIR)$(infodir)/$(INFO_G77_NAME).info* + # + # Clean hooks: + # A lot of the ancillary files are deleted by the main makefile. +diff -ur gcc.old/java/Make-lang.in gcc/java/Make-lang.in +--- gcc.old/java/Make-lang.in 2004-02-06 08:04:13.000000000 +0100 ++++ gcc/java/Make-lang.in 2004-02-21 13:28:52.000000000 +0100 +@@ -158,12 +158,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 + JAVA_MANFILES = doc/gcj.1 doc/gcjh.1 doc/jv-scan.1 doc/jcf-dump.1 doc/gij.1 \ + doc/jv-convert.1 doc/rmic.1 doc/rmiregistry.1 +@@ -224,8 +235,9 @@ + -rm -rf $(DESTDIR)$(man1dir)/jcf-dump$(man1ext) + -rm -rf $(DESTDIR)$(man1dir)/gij$(man1ext) + -rm -rf $(DESTDIR)$(man1dir)/jv-convert$(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: +diff -ur gcc.old/java/gcj.texi gcc/java/gcj.texi +--- gcc.old/java/gcj.texi 2003-08-29 23:25:30.000000000 +0200 ++++ gcc/java/gcj.texi 2004-02-21 13:28:52.000000000 +0100 +@@ -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 +@@ -151,7 +151,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 +diff -ur gcc.old/treelang/Make-lang.in gcc/treelang/Make-lang.in +--- gcc.old/treelang/Make-lang.in 2004-01-31 07:53:34.000000000 +0100 ++++ gcc/treelang/Make-lang.in 2004-02-21 13:28:52.000000000 +0100 +@@ -146,17 +146,21 @@ + 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 + +-doc/treelang.info: treelang/treelang.texi $(docdir)/include/gcc-common.texi \ ++doc/$(INFO_TREELANG_NAME).info: treelang/treelang.texi $(docdir)/include/gcc-common.texi \ + $(docdir)/include/gpl.texi $(docdir)/include/fdl.texi \ + $(docdir)/include/funding.texi +- $(MAKEINFO) $(MAKEINFOFLAGS) -I$(docdir)/include -o $@ $< ++ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) \ ++ $(TREELANG_MAKEINFODEFS) -I$(docdir)/include -o $@ $< + + doc/treelang.dvi: treelang/treelang.texi $(docdir)/include/gcc-common.texi \ + $(docdir)/include/gpl.texi $(docdir)/include/fdl.texi \ +@@ -189,7 +193,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: + +@@ -202,6 +206,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 + + # +diff -ur gcc.old/treelang/treelang.texi gcc/treelang/treelang.texi +--- gcc.old/treelang/treelang.texi 2003-12-06 00:15:02.000000000 +0100 ++++ gcc/treelang/treelang.texi 2004-02-21 13:28:52.000000000 +0100 +@@ -106,7 +106,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 +@@ -278,7 +278,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 +@@ -885,7 +885,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}). +diff -ur gcc.old/f/g77.texi gcc/f/g77.texi +--- gcc.old/f/g77.texi 2003-05-16 17:08:37.000000000 +0200 ++++ gcc/f/g77.texi 2004-02-28 16:04:22.000000000 +0100 +@@ -88,7 +88,7 @@ + @ifinfo + @dircategory Programming + @direntry +-* g77: (g77). The GNU Fortran compiler. ++* * @value{fng77}: (@value{fng77}). The GNU Fortran compiler. + @end direntry + @ifset INTERNALS + @ifset USING --- gcc-3.4-3.4.6.orig/debian/patches/libjava-build.dpatch +++ gcc-3.4-3.4.6/debian/patches/libjava-build.dpatch @@ -0,0 +1,69 @@ +#! /bin/sh -e + +# DP: work around libtool to fix mips libgcj build, backport from HEAD + +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 && automake + ;; + -unpatch) + patch $pdir -f --no-backup-if-mismatch -R -p0 < $0 + #rm ${dir}libjava/configure + ;; + *) + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1 +esac +exit 0 + +2005-02-15 Richard Henderson + + * Makefile.am (libgcj_la_SOURCES): Move all sources ... + (libgcj0_convenience_la_SOURCES): ... here. + (libgcj_la_LIBADD): Add libgcj0_convenience.la. + (libgcj_la_DEPENDENCIES): Include libgcj_la_LIBADD. + * Makefile.in: Regenerate. + + +--- libjava/Makefile.am~ 2005-02-08 00:52:28.282758095 +0100 ++++ libjava/Makefile.am 2005-02-25 01:21:18.726320374 +0100 +@@ -150,18 +150,26 @@ + $(built_java_source_files:.java=.lo) + x_javao_files = $(x_java_source_files:.java=.lo) + +-libgcj_la_SOURCES = prims.cc jni.cc exception.cc \ ++# Work around libtool wanting to do piece-wise linking with -r. Using a ++# convenience library suddenly invokes the --whole-archive path instead. ++# This allows the build to succeed for targets that allocate multiple got ++# subsections in the linker, such as Alpha and MIPS. ++libgcj0_convenience_la_SOURCES = prims.cc jni.cc exception.cc \ + resolve.cc defineclass.cc interpret.cc verify.cc \ + $(nat_source_files) + EXTRA_libgcj_la_SOURCES = boehm.cc nogc.cc posix-threads.cc no-threads.cc \ + win32-threads.cc posix.cc win32.cc $(c_source_files) \ + $(extra_cc_source_files) $(java_source_files) $(built_java_source_files) +-libgcj_la_DEPENDENCIES = libgcj-@gcc_version@.jar $(javao_files) \ +- $(c_files) $(extra_cc_files) $(GCOBJS) $(THREADOBJS) \ +- $(PLATFORMOBJS) $(LIBLTDL) $(LIBFFI) $(ZLIBS) $(GCLIBS) ++noinst_LTLIBRARIES = libgcj0_convenience.la ++ ++libgcj_la_SOURCES = + + libgcj_la_LIBADD = $(javao_files) $(c_files) $(extra_cc_files) $(GCOBJS) \ ++ libgcj0_convenience.la \ + $(THREADOBJS) $(PLATFORMOBJS) ++libgcj_la_DEPENDENCIES = libgcj-@gcc_version@.jar \ ++ java/lang/fdlibm.h java/lang/ieeefp.h java/lang/mprec.h \ ++ $(libgcj_la_LIBADD) + # Include THREADLIBS here to ensure that the correct version of + # certain linuxthread functions get linked: + libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(THREADLIBS) \ --- gcc-3.4-3.4.6.orig/debian/patches/s390-biarch.dpatch +++ gcc-3.4-3.4.6/debian/patches/s390-biarch.dpatch @@ -0,0 +1,36 @@ +#! /bin/sh -e + +# DP: enable biarch for 31 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 -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/gcc/config.gcc.bak 2003-02-25 09:24:14.000000000 +0000 ++++ src/gcc/config.gcc 2003-02-25 09:23:42.000000000 +0000 +@@ -2199,7 +2199,7 @@ + ;; + s390-*-linux*) + tm_file="s390/s390.h dbxelf.h elfos.h svr4.h linux.h s390/linux.h" +- tmake_file="t-slibgcc-elf-ver t-linux s390/t-crtstuff" ++ tmake_file="t-slibgcc-elf-ver t-linux s390/t-crtstuff s390/t-linux64" + ;; + s390x-*-linux*) + tm_file="s390/s390x.h s390/s390.h dbxelf.h elfos.h svr4.h linux.h s390/linux.h" --- gcc-3.4-3.4.6.orig/debian/patches/libstdc++-baseline.dpatch +++ gcc-3.4-3.4.6/debian/patches/libstdc++-baseline.dpatch @@ -0,0 +1,42 @@ +#! /bin/sh -e + +# DP: overwrite baseline detection for i386: use the i486 headers + +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/configure.target~ 2003-06-19 19:55:35.000000000 +0200 ++++ libstdc++-v3/configure.target 2003-06-20 09:15:08.000000000 +0200 +@@ -91,6 +91,14 @@ + ;; + esac + ++# Debian adjustments ++echo "LIBSTDCXX TARGET CPU: $target_cpu" ++case "${target_cpu}" in ++ i386) ++ # we use the i486 ABI ... ++ try_cpu=i486 ++ ;; ++esac + + # Now look for the file(s) usually tied to a CPU model, and make + # default choices for those if they haven't been explicitly set --- gcc-3.4-3.4.6.orig/debian/patches/ada-link-lib.dpatch +++ gcc-3.4-3.4.6/debian/patches/ada-link-lib.dpatch @@ -0,0 +1,64 @@ +#! /bin/sh -e + +# DP: - Install the shared Ada libraries as '.so.1', not '.so' to conform +# DP: to the Debian policy. +# DP: - Don't include a runtime link path (-rpath), when linking binaries. +# DP: - Build the shared libraries on hppa-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 -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/gcc/ada/Makefile.in~ Fri Apr 5 19:03:14 2002 ++++ src/gcc/ada/Makefile.in Sun Feb 15 16:30:14 2002 +@@ -133,7 +133,7 @@ + objext = .o + exeext = + arext = .a +-soext = .so ++soext = .so.1 + shext = + + HOST_CC=$(CC) +@@ -750,6 +750,11 @@ + LIBRARY_VERSION := $(strip $(shell grep Library_Version $(fsrcpfx)gnatvsn.ads | sed -e 's/.*GNAT Lib v\(.*\)[ "].*/\1/')) + endif + ++ifeq ($(strip $(filter-out hppa% unknown linux gnu,$(targ))),) ++ GNATLIB_SHARED = gnatlib-shared-dual ++ LIBRARY_VERSION := $(LIB_VERSION) ++endif ++ + ifeq ($(strip $(filter-out hppa% hp hpux10%,$(targ))),) + LIBGNAT_TARGET_PAIRS = \ + a-excpol.adb<4wexcpol.adb \ +--- src/gcc/ada/link.c~ 2004-03-26 00:14:55.000000000 +0100 ++++ src/gcc/ada/link.c 2004-03-26 00:17:13.000000000 +0100 +@@ -165,8 +165,8 @@ + + #elif defined (linux) + const char *object_file_option = ""; +-const char *run_path_option = "-Wl,-rpath,"; +-char shared_libgnat_default = STATIC; ++const char *run_path_option = ""; ++char shared_libgnat_default = SHARED; + int link_max = 8192; + unsigned char objlist_file_supported = 1; + unsigned char using_gnu_linker = 1; --- gcc-3.4-3.4.6.orig/debian/patches/disable-gnat-testsuite.dpatch +++ gcc-3.4-3.4.6/debian/patches/disable-gnat-testsuite.dpatch @@ -0,0 +1,39 @@ +#! /bin/sh -e + +# DP: disable the gnat testsuite. on ia64 the kernel "hangs" for unaligned +# DP: memory accesses. + +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/ada/Make-lang.in~ 2004-09-01 22:07:42.000000000 +0200 ++++ gcc/ada/Make-lang.in 2004-10-12 05:42:39.000000000 +0200 +@@ -915,9 +915,7 @@ + ACATSDIR = $(TESTSUITEDIR)/ada/acats + + check-gnat: +- test -d $(ACATSDIR) || mkdir -p $(ACATSDIR) +- testdir=`cd ${srcdir}/${ACATSDIR}; ${PWD_COMMAND}`; \ +- export testdir; cd $(ACATSDIR); $${testdir}/run_acats $(CHAPTERS) ++ echo "gnat testsuite disabled" + + .PHONY: check-gnat + --- gcc-3.4-3.4.6.orig/debian/patches/gpc-range-check.dpatch +++ gcc-3.4-3.4.6/debian/patches/gpc-range-check.dpatch @@ -0,0 +1,45 @@ +#! /bin/sh -e + +# DP: Fix spurious range-check failure in the gpc runtime. + +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/p/rts/move.pas.orig 2005-05-06 19:24:26.188617784 +0000 ++++ gcc/p/rts/move.pas 2005-05-06 18:43:23.418015824 +0000 +@@ -58,6 +58,7 @@ + PWords = ^TWords; + PConstWords = ^const TWords; + ++{$R-} + function Merge (w1, w2: TWord; Shift1, Shift2: Integer): TWord; attribute (inline); + begin + if BytesBigEndian then +@@ -66,7 +67,7 @@ + Merge := (w1 shr Shift1) or (w2 shl Shift2) + end; + +-{$pointer-arithmetic,R-} ++{$pointer-arithmetic} + + procedure MoveLeft (const Source; var Dest; Count: SizeType); + var + --- gcc-3.4-3.4.6.orig/debian/patches/autoreconf.dpatch +++ gcc-3.4-3.4.6/debian/patches/autoreconf.dpatch @@ -0,0 +1,40 @@ +#! /bin/sh -e + +# DP: autoreconf several directories for proper mipsen libtool support + +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 + for i in libf2c libjava/libltdl libobjc libstdc++-v3 zlib; do + (cd ${dir}/${i} ; autoreconf --force) + done + ;; + -unpatch) + patch $pdir -f --no-backup-if-mismatch -R -p0 < $0 + echo unable to unpatch autoreconf. + ;; + *) + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1 +esac +exit 0 + +--- libtool.m4~ 2004-09-09 19:06:00.000000000 +0900 ++++ libtool.m4 2004-09-09 19:10:12.000000000 +0900 +@@ -680,7 +680,7 @@ + # This must be Linux ELF. + linux-gnu*) + case $host_cpu in +- alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* ) ++ alpha* | m32r* | mips* | hppa* | i*86 | ia64* | powerpc* | sh* | sparc* ) + lt_cv_deplibs_check_method=pass_all ;; + *) + # glibc up to 2.1.1 does not perform some relocations on ARM --- gcc-3.4-3.4.6.orig/debian/patches/template.dpatch +++ gcc-3.4-3.4.6/debian/patches/template.dpatch @@ -0,0 +1,33 @@ +#! /bin/sh -e + +# All lines beginning with `# DPATCH:' are a description of the patch. +# DP: + +# remove the next line +exit 0 + +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 + +# append the patch here and adjust the -p? flag in the patch calls. + --- gcc-3.4-3.4.6.orig/debian/patches/gccbug-posix.dpatch +++ gcc-3.4-3.4.6/debian/patches/gccbug-posix.dpatch @@ -0,0 +1,84 @@ +#! /bin/sh -e + +# DP: Make gccbug POSIX compliant (patch by David Weinehall) +# DP: http://www.opengroup.org/onlinepubs/009695399/utilities/test.html + +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~ 2004-06-15 04:43:16.000000000 +0200 ++++ gcc/gccbug.in 2004-07-04 23:51:38.000000000 +0200 +@@ -165,7 +165,7 @@ + ;; + -f | --file) if [ $# -eq 1 ]; then echo "$USAGE"; $REMOVE_TEMP; exit 1; fi + shift ; IN_FILE="$1" +- if [ "$IN_FILE" != "-" -a ! -r "$IN_FILE" ]; then ++ if [ "$IN_FILE" != "-" ] && [ ! -r "$IN_FILE" ]; then + echo "$COMMAND: cannot read $IN_FILE" + $REMOVE_TEMP + exit 1 +@@ -237,7 +237,7 @@ + # Catch some signals. ($xs kludge needed by Sun /bin/sh) + xs=0 + trap '$REMOVE_TEMP; exit $xs' 0 +-trap 'echo "$COMMAND: Aborting ..."; $REMOVE_TEMP; xs=1; exit' 1 3 13 15 ++trap 'echo "$COMMAND: Aborting ..."; $REMOVE_TEMP; xs=1; exit' HUP QUIT PIPE TERM + + # If they told us to use a specific file, then do so. + if [ -n "$IN_FILE" ]; then +@@ -258,16 +258,16 @@ + fi + else + +- if [ -n "$PR_FORM" -a -z "$PRINT_INTERN" ]; then ++ if [ -n "$PR_FORM" ] && [ -z "$PRINT_INTERN" ]; then + # If their PR_FORM points to a bogus entry, then bail. +- if [ ! -f "$PR_FORM" -o ! -r "$PR_FORM" -o ! -s "$PR_FORM" ]; then ++ if [ ! -f "$PR_FORM" ] || [ ! -r "$PR_FORM" ] || [ ! -s "$PR_FORM" ]; then + echo "$COMMAND: can't seem to read your template file (\`$PR_FORM'), ignoring PR_FORM" + sleep 1 + PRINT_INTERN=bad_prform + fi + fi + +- if [ -n "$PR_FORM" -a -z "$PRINT_INTERN" ]; then ++ if [ -n "$PR_FORM" ] && [ -z "$PRINT_INTERN" ]; then + cp $PR_FORM $TEMP || + ( echo "$COMMAND: could not copy $PR_FORM" ; xs=1; exit ) + else +@@ -359,7 +359,7 @@ + done + fi + +- if [ "$PRINT" = true -o "$PRINT_INTERN" = true ]; then ++ if [ "$PRINT" = true ] || [ "$PRINT_INTERN" = true ]; then + cat $TEMP + xs=0; exit + fi +@@ -467,7 +467,7 @@ + CNT=`expr $CNT + 1` + fi + +- [ $CNT -lt 6 -a -z "$BATCH" ] && ++ [ $CNT -lt 6 ] && [ -z "$BATCH" ] && + echo "Errors were found with the problem report." + + while true; do --- gcc-3.4-3.4.6.orig/debian/patches/netbsd-all-gcc.dpatch +++ gcc-3.4-3.4.6/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 . */ ++ ++#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-3.4-3.4.6.orig/debian/patches/boehm-gc-nocheck.dpatch +++ gcc-3.4-3.4.6/debian/patches/boehm-gc-nocheck.dpatch @@ -0,0 +1,37 @@ +#! /bin/sh -e + +# DP: Disable the boehm-gc testsuite. Hangs forever on this architecture + +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-3.4-3.4.6.orig/debian/patches/configure-deplibs_check_method.dpatch +++ gcc-3.4-3.4.6/debian/patches/configure-deplibs_check_method.dpatch @@ -0,0 +1,145 @@ +#! /bin/sh -e + +# DP: In all configure scripts for libraries, generated with autoconf2.13, use +# DP: deplibs_check_method=pass_all unconditionally for all linux architectures. + +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 + +--- ./boehm-gc/configure~ 2005-05-11 01:22:34.000000000 +0200 ++++ ./boehm-gc/configure 2005-05-11 16:09:05.563271432 +0200 +@@ -1937,13 +1937,7 @@ + + # This must be Linux ELF. + linux-gnu*) +- case $host_cpu in +- alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* ) +- lt_cv_deplibs_check_method=pass_all ;; +- *) +- # glibc up to 2.1.1 does not perform some relocations on ARM +- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; +- esac ++ lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +--- ./libf2c/configure~ 2004-05-18 11:08:39.000000000 +0200 ++++ ./libf2c/configure 2005-05-11 16:11:20.281791104 +0200 +@@ -1607,13 +1607,7 @@ + + # This must be Linux ELF. + linux-gnu*) +- case $host_cpu in +- alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* ) +- lt_cv_deplibs_check_method=pass_all ;; +- *) +- # glibc up to 2.1.1 does not perform some relocations on ARM +- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; +- esac ++ lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +--- ./libffi/configure~ 2004-05-18 11:08:39.000000000 +0200 ++++ ./libffi/configure 2005-05-11 16:14:41.595186816 +0200 +@@ -1322,13 +1322,7 @@ + + # This must be Linux ELF. + linux-gnu*) +- case $host_cpu in +- alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* ) +- lt_cv_deplibs_check_method=pass_all ;; +- *) +- # glibc up to 2.1.1 does not perform some relocations on ARM +- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; +- esac ++ lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +--- ./libjava/libltdl/configure~ 2005-05-11 01:22:34.000000000 +0200 ++++ ./libjava/libltdl/configure 2005-05-11 16:16:17.684579008 +0200 +@@ -3619,13 +3619,7 @@ + + # This must be Linux ELF. + linux*) +- case $host_cpu in +- alpha* | hppa* | i*86 | ia64* | m68* | mips | mipsel | powerpc* | sparc* | s390* | sh*) +- lt_cv_deplibs_check_method=pass_all ;; +- *) +- # glibc up to 2.1.1 does not perform some relocations on ARM +- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; +- esac ++ lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +--- ./libjava/configure~ 2005-05-11 01:22:34.000000000 +0200 ++++ ./libjava/configure 2005-05-11 16:15:22.253005888 +0200 +@@ -2033,13 +2033,7 @@ + + # This must be Linux ELF. + linux-gnu*) +- case $host_cpu in +- alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* ) +- lt_cv_deplibs_check_method=pass_all ;; +- *) +- # glibc up to 2.1.1 does not perform some relocations on ARM +- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; +- esac ++ lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +--- ./libobjc/configure~ 2004-05-18 11:08:42.000000000 +0200 ++++ ./libobjc/configure 2005-05-11 16:16:59.467227080 +0200 +@@ -1612,13 +1612,7 @@ + + # This must be Linux ELF. + linux-gnu*) +- case $host_cpu in +- alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* ) +- lt_cv_deplibs_check_method=pass_all ;; +- *) +- # glibc up to 2.1.1 does not perform some relocations on ARM +- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; +- esac ++ lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +--- ./zlib/configure~ 2004-05-18 11:09:14.000000000 +0200 ++++ ./zlib/configure 2005-05-11 16:17:57.642383112 +0200 +@@ -1579,13 +1579,7 @@ + + # This must be Linux ELF. + linux-gnu*) +- case $host_cpu in +- alpha* | mips* | hppa* | i*86 | powerpc* | sparc* | ia64* | sh* ) +- lt_cv_deplibs_check_method=pass_all ;; +- *) +- # glibc up to 2.1.1 does not perform some relocations on ARM +- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; +- esac ++ lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + --- gcc-3.4-3.4.6.orig/debian/patches/libstdc++-disable-run-check.dpatch +++ gcc-3.4-3.4.6/debian/patches/libstdc++-disable-run-check.dpatch @@ -0,0 +1,48 @@ +#! /bin/sh -e + +# DP: don't bogusly check if the ppc64 binaries also work, which did break on ppc32. + +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/configure.orig 2005-05-26 21:03:35.000000000 +0200 ++++ libstdc++-v3/configure 2005-05-26 21:04:38.000000000 +0200 +@@ -2485,7 +2485,8 @@ + echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 + # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 + # If not cross compiling, check that we can run a simple program. ++# Check disabled as it didn't catch building ppc64 biarch on ppc32. +-if test "$cross_compiling" != yes; then ++if false && test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 +--- libiberty/configure~ 2003-10-01 19:11:29.000000000 +0200 ++++ libiberty/configure 2005-11-28 21:43:46.157800992 +0100 +@@ -2145,7 +2145,7 @@ + echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 + # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 + # If not cross compiling, check that we can run a simple program. +-if test "$cross_compiling" != yes; then ++if false && test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 --- gcc-3.4-3.4.6.orig/debian/patches/biarch-include.dpatch +++ gcc-3.4-3.4.6/debian/patches/biarch-include.dpatch @@ -0,0 +1,217 @@ +#! /bin/sh -e + +# DP: biarch-include.dpatch +# DP: +# DP: Adds biarch include directories +# DP: /usr/include/c++//-linux-gnu +# DP: /usr/local/include/-linux-gnu +# DP: /usr/include/-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 + +--- gcc/cppdefault.h.orig 2005-08-20 16:47:56.400240680 +0000 ++++ gcc/cppdefault.h 2005-08-20 16:49:22.777109400 +0000 +@@ -43,6 +43,7 @@ + C++. */ + const char add_sysroot; /* FNAME should be prefixed by + cpp_SYSROOT. */ ++ const char biarch; /* 32/64 bit biarch include */ + }; + + extern const struct default_include cpp_include_defaults[]; +--- gcc/c-incpath.c.orig 2005-08-20 16:47:56.401240528 +0000 ++++ gcc/c-incpath.c 2005-08-20 16:49:22.877094200 +0000 +@@ -137,6 +137,13 @@ + now. */ + if (sysroot && p->add_sysroot) + continue; ++ if (p->biarch) ++ { ++ if (p->biarch == 64 && !(target_flags & MASK_64BIT)) ++ continue; ++ if (p->biarch == 32 && (target_flags & MASK_64BIT)) ++ continue; ++ } + if (!strncmp (p->fname, cpp_GCC_INCLUDE_DIR, len)) + { + char *str = concat (iprefix, p->fname + len, NULL); +@@ -148,6 +155,14 @@ + + for (p = cpp_include_defaults; p->fname; p++) + { ++ if (p->biarch) ++ { ++ if (p->biarch == 64 && !(target_flags & MASK_64BIT)) ++ continue; ++ if (p->biarch == 32 && (target_flags & MASK_64BIT)) ++ continue; ++ } ++ + if (!p->cplusplus || cxx_stdinc) + { + char *str; +--- gcc/cppdefault.c.orig 2005-08-20 16:47:56.454232472 +0000 ++++ gcc/cppdefault.c 2005-08-20 16:52:11.278493296 +0000 +@@ -29,6 +29,22 @@ + #define STANDARD_INCLUDE_DIR "/usr/include" + #endif + ++#ifndef STANDARD32_INCLUDE_DIR ++#define STANDARD32_INCLUDE_DIR STANDARD_INCLUDE_DIR "/" TARGET32_MACHINE ++#endif ++ ++#ifndef LOCAL32_INCLUDE_DIR ++#define LOCAL32_INCLUDE_DIR LOCAL_INCLUDE_DIR "/" TARGET32_MACHINE ++#endif ++ ++#ifndef STANDARD64_INCLUDE_DIR ++#define STANDARD64_INCLUDE_DIR STANDARD_INCLUDE_DIR "/" TARGET64_MACHINE ++#endif ++ ++#ifndef LOCAL64_INCLUDE_DIR ++#define LOCAL64_INCLUDE_DIR LOCAL_INCLUDE_DIR "/" TARGET64_MACHINE ++#endif ++ + #ifndef STANDARD_INCLUDE_COMPONENT + #define STANDARD_INCLUDE_COMPONENT 0 + #endif +@@ -37,6 +53,10 @@ + # undef LOCAL_INCLUDE_DIR + # undef SYSTEM_INCLUDE_DIR + # undef STANDARD_INCLUDE_DIR ++# undef STANDARD32_INCLUDE_DIR ++# undef LOCAL32_INCLUDE_DIR ++# undef STANDARD64_INCLUDE_DIR ++# undef LOCAL64_INCLUDE_DIR + #else + # undef CROSS_INCLUDE_DIR + #endif +@@ -52,12 +72,21 @@ + #endif + #ifdef GPLUSPLUS_TOOL_INCLUDE_DIR + /* Pick up GNU C++ target-dependent include files. */ +- { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, 0 }, ++ { GPLUSPLUS_INCLUDE_DIR "/" TARGET32_MACHINE, "G++", 1, 1, 0, 32 }, ++ { GPLUSPLUS_INCLUDE_DIR "/" TARGET64_MACHINE, "G++", 1, 1, 0, 64 }, + #endif + #ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR + /* Pick up GNU C++ backward and deprecated include files. */ + { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, 0 }, + #endif ++#ifdef LOCAL32_INCLUDE_DIR ++ /* /usr/local/include/$target_alias comes before the fixincluded header files. */ ++ { LOCAL32_INCLUDE_DIR, 0, 0, 1, 1, 32 }, ++#endif ++#ifdef LOCAL64_INCLUDE_DIR ++ /* /usr/local/include/$target_alias comes before the fixincluded header files. */ ++ { LOCAL64_INCLUDE_DIR, 0, 0, 1, 1, 64 }, ++#endif + #ifdef LOCAL_INCLUDE_DIR + /* /usr/local/include comes before the fixincluded header files. */ + { LOCAL_INCLUDE_DIR, 0, 0, 1, 1 }, +@@ -73,7 +102,7 @@ + /* One place the target system's headers might be. */ + { CROSS_INCLUDE_DIR, "GCC", 0, 0, 0 }, + #endif +-#ifdef TOOL_INCLUDE_DIR ++#if defined(TOOL_INCLUDE_DIR) && !defined(STANDARD32_INCLUDE_DIR) && !defined(STANDARD64_INCLUDE_DIR) + /* Another place the target system's headers might be. */ + { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0 }, + #endif +@@ -81,6 +110,14 @@ + /* Some systems have an extra dir of include files. */ + { SYSTEM_INCLUDE_DIR, 0, 0, 0, 1 }, + #endif ++#ifdef STANDARD32_INCLUDE_DIR ++ /* /usr/include/$target_alias comes before the fixincluded header files. */ ++ { STANDARD32_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 1, 1, 32 }, ++#endif ++#ifdef STANDARD64_INCLUDE_DIR ++ /* /usr/include/$target_alias comes before the fixincluded header files. */ ++ { STANDARD64_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 1, 1, 64 }, ++#endif + #ifdef STANDARD_INCLUDE_DIR + /* /usr/include comes dead last. */ + { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1 }, +--- gcc/Makefile.in.orig 2005-08-20 16:47:56.559216512 +0000 ++++ gcc/Makefile.in 2005-08-20 16:49:23.040069424 +0000 +@@ -2353,6 +2353,13 @@ + -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \ + @TARGET_SYSTEM_ROOT_DEFINE@ + ++ifneq (,$(TARGET32_MACHINE)) ++ PREPROCESSOR_DEFINES += -DTARGET32_MACHINE=\"$(strip $(TARGET32_MACHINE))\" ++endif ++ifneq (,$(TARGET64_MACHINE)) ++ PREPROCESSOR_DEFINES += -DTARGET64_MACHINE=\"$(strip $(TARGET64_MACHINE))\" ++endif ++ + LIBCPP_OBJS = cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o cpptrad.o \ + cpphash.o cpperror.o cppinit.o cppcharset.o \ + hashtable.o line-map.o mkdeps.o cpppch.o +--- libstdc++-v3/include/Makefile.am.orig 2004-09-27 19:26:45.000000000 +0200 ++++ libstdc++-v3/include/Makefile.am 2005-11-16 20:29:35.334986776 +0100 +@@ -335,6 +335,7 @@ + + host_srcdir = ${glibcxx_srcdir}/$(OS_INC_SRCDIR) + host_builddir = ./${host_alias}/bits ++host_installdir = ./${host_alias}/bits + host_headers = \ + ${host_srcdir}/ctype_base.h \ + ${host_srcdir}/ctype_inline.h \ +@@ -601,10 +602,10 @@ + $(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)${gxx_include_dir}/${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)${gxx_include_dir}/${host_installddir}; done + + install-pch: + $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${pch_output_builddir} +--- libstdc++-v3/include/Makefile.in.orig 2004-09-27 19:26:45.000000000 +0200 ++++ libstdc++-v3/include/Makefile.in 2005-11-16 20:29:35.335986624 +0100 +@@ -534,6 +534,7 @@ + + host_srcdir = ${glibcxx_srcdir}/$(OS_INC_SRCDIR) + host_builddir = ./${host_alias}/bits ++host_installdir = ./${host_alias}/bits + host_headers = \ + ${host_srcdir}/ctype_base.h \ + ${host_srcdir}/ctype_inline.h \ +@@ -953,10 +954,10 @@ + $(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)${gxx_include_dir}/${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)${gxx_include_dir}/${host_installdir}; done + + install-pch: + $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${pch_output_builddir} --- gcc-3.4-3.4.6.orig/debian/patches/gcc-version.dpatch +++ gcc-3.4-3.4.6/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 '/version_string/s/"\([^"]*\)"/"\1 ('"$dist$pkgversion"')"/' \ + $dir/version.c > $dir/version.c.new \ + && mv -f $dir/version.c.new $dir/version.c + ;; + -unpatch) + sed -e "s/ *($dist.*)//g" -e "s/$dist *//" \ + $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-3.4-3.4.6.orig/debian/patches/hppa-libffi.dpatch +++ gcc-3.4-3.4.6/debian/patches/hppa-libffi.dpatch @@ -0,0 +1,1132 @@ +#! /bin/sh -e + +# DP: libffi support for 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 + cd ${dir}libffi && autoconf + ;; + -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 + +2004-03-13 Matthias Klose + + * Makefile.am: Update + * Makefile.in: Regenerate. + * src/pa/ffi.h.in: Remove. + * src/pa/ffitarget.h: New file. + +2004-02-10 Randolph Chung + + * Makefile.am: Add PA support. + * Makefile.in: Regenerate. + * include/Makefile.in: Regenerate. + * configure.in: Add PA target. + * configure: Regenerate. + * src/pa/ffi.c: New file. + * src/pa/ffi.h.in: Add PA support. + * src/pa/linux.S: New file. + * prep_cif.c: Add PA support. + +diff -urN libffi.old/Makefile.am libffi/Makefile.am +--- libffi.old/Makefile.am 2004-03-20 19:32:43.000000000 +0100 ++++ libffi/Makefile.am 2004-03-20 19:38:44.000000000 +0100 +@@ -10,6 +10,7 @@ + src/mips/ffi.c src/mips/n32.S src/mips/o32.S \ + src/mips/ffitarget.h \ + src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \ ++ src/pa/ffi.c src/pa/linux.S src/pa/ffitarget.h \ + src/powerpc/ffi.c src/powerpc/sysv.S \ + src/powerpc/linux64.S src/powerpc/linux64_closure.S \ + src/powerpc/ppc_closure.S src/powerpc/asm.h \ +@@ -95,6 +96,7 @@ + TARGET_SRC_ALPHA = src/alpha/ffi.c src/alpha/osf.S + TARGET_SRC_IA64 = src/ia64/ffi.c src/ia64/unix.S + TARGET_SRC_M68K = src/m68k/ffi.c src/m68k/sysv.S ++TARGET_SRC_PA = src/pa/ffi.c src/pa/linux.S + TARGET_SRC_POWERPC = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S + TARGET_SRC_POWERPC_AIX = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S + TARGET_SRC_POWERPC_DARWIN = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S +@@ -172,6 +174,10 @@ + libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_SH64) + libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_SH64) + endif ++if PA ++libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_PA) ++libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_PA) ++endif + + AM_CFLAGS = -Wall -g -fexceptions + +diff -urN libffi.old/Makefile.in libffi/Makefile.in +--- libffi.old/Makefile.in 2003-11-24 00:52:28.000000000 +0100 ++++ libffi/Makefile.in 2004-03-20 19:47:00.000000000 +0100 +@@ -101,6 +101,7 @@ + src/mips/ffi.c src/mips/n32.S src/mips/o32.S \ + src/mips/ffitarget.h \ + src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \ ++ src/pa/ffi.c src/pa/linux.S src/pa/ffitarget.h \ + src/powerpc/ffi.c src/powerpc/sysv.S \ + src/powerpc/linux64.S src/powerpc/linux64_closure.S \ + src/powerpc/ppc_closure.S src/powerpc/asm.h \ +@@ -179,6 +180,7 @@ + TARGET_SRC_ALPHA = src/alpha/ffi.c src/alpha/osf.S + TARGET_SRC_IA64 = src/ia64/ffi.c src/ia64/unix.S + TARGET_SRC_M68K = src/m68k/ffi.c src/m68k/sysv.S ++TARGET_SRC_PA = src/pa/ffi.c src/pa/linux.S + TARGET_SRC_POWERPC = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S + TARGET_SRC_POWERPC_AIX = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S + TARGET_SRC_POWERPC_DARWIN = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S +@@ -199,6 +201,7 @@ + @ALPHA_TRUE@libffi_la_SOURCES = @ALPHA_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_ALPHA) + @IA64_TRUE@libffi_la_SOURCES = @IA64_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_IA64) + @M68K_TRUE@libffi_la_SOURCES = @M68K_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_M68K) ++@PA_TRUE@libffi_la_SOURCES = @PA_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_PA) + @POWERPC_TRUE@libffi_la_SOURCES = @POWERPC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC) + @POWERPC_AIX_TRUE@libffi_la_SOURCES = @POWERPC_AIX_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC_AIX) + @POWERPC_DARWIN_TRUE@libffi_la_SOURCES = @POWERPC_DARWIN_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC_DARWIN) +@@ -215,6 +218,7 @@ + @ALPHA_TRUE@libffi_convenience_la_SOURCES = @ALPHA_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_ALPHA) + @IA64_TRUE@libffi_convenience_la_SOURCES = @IA64_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_IA64) + @M68K_TRUE@libffi_convenience_la_SOURCES = @M68K_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_M68K) ++@PA_TRUE@libffi_convenience_la_SOURCES = @PA_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_PA) + @POWERPC_TRUE@libffi_convenience_la_SOURCES = @POWERPC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC) + @POWERPC_AIX_TRUE@libffi_convenience_la_SOURCES = @POWERPC_AIX_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC_AIX) + @POWERPC_DARWIN_TRUE@libffi_convenience_la_SOURCES = @POWERPC_DARWIN_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC_DARWIN) +@@ -260,6 +264,9 @@ + @ARM_TRUE@libffi_convenience_la_OBJECTS = src/debug.lo src/prep_cif.lo \ + @ARM_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \ + @ARM_TRUE@src/arm/sysv.lo src/arm/ffi.lo ++@PA_TRUE@libffi_convenience_la_OBJECTS = src/debug.lo src/prep_cif.lo \ ++@PA_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \ ++@PA_TRUE@src/pa/ffi.lo src/pa/linux.lo + @POWERPC_AIX_TRUE@libffi_convenience_la_OBJECTS = src/debug.lo \ + @POWERPC_AIX_TRUE@src/prep_cif.lo src/types.lo src/raw_api.lo \ + @POWERPC_AIX_TRUE@src/java_raw_api.lo src/powerpc/ffi_darwin.lo \ +@@ -316,6 +323,9 @@ + @ARM_TRUE@libffi_la_OBJECTS = src/debug.lo src/prep_cif.lo src/types.lo \ + @ARM_TRUE@src/raw_api.lo src/java_raw_api.lo src/arm/sysv.lo \ + @ARM_TRUE@src/arm/ffi.lo ++@PA_TRUE@libffi_la_OBJECTS = src/debug.lo src/prep_cif.lo src/types.lo \ ++@PA_TRUE@src/raw_api.lo src/java_raw_api.lo src/pa/linux.lo \ ++@PA_TRUE@src/pa/ffi.lo + @POWERPC_AIX_TRUE@libffi_la_OBJECTS = src/debug.lo src/prep_cif.lo \ + @POWERPC_AIX_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \ + @POWERPC_AIX_TRUE@src/powerpc/ffi_darwin.lo src/powerpc/aix.lo \ +@@ -608,7 +618,7 @@ + mkdir $(distdir) + -chmod 777 $(distdir) + $(mkinstalldirs) $(distdir)/src/alpha $(distdir)/src/arm \ +- $(distdir)/src/m68k $(distdir)/src/mips \ ++ $(distdir)/src/m68k $(distdir)/src/mips $(distdir)/src/pa \ + $(distdir)/src/powerpc $(distdir)/src/s390 $(distdir)/src/sh \ + $(distdir)/src/sh64 $(distdir)/src/sparc $(distdir)/src/x86 + @for file in $(DISTFILES); do \ +diff -urN libffi.old/configure.in libffi/configure.in +--- libffi.old/configure.in 2004-03-20 19:32:43.000000000 +0100 ++++ libffi/configure.in 2004-03-20 19:33:57.000000000 +0100 +@@ -85,6 +85,7 @@ + x86_64-*-linux*) TARGET=X86_64; TARGETDIR=x86;; + sh-*-linux* | sh[[34]]*-*-linux*) TARGET=SH; TARGETDIR=sh;; + sh64-*-linux* | sh5*-*-linux*) TARGET=SH64; TARGETDIR=sh64;; ++hppa-*-linux* | parisc-*-linux*) TARGET=PA; TARGETDIR=pa;; + esac + + AC_SUBST(AM_RUNTESTFLAGS) +@@ -109,6 +110,7 @@ + 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) + + case x$TARGET in + xMIPS*) TARGET=MIPS ;; +diff -urN libffi.old/src/pa/ffi.c libffi/src/pa/ffi.c +--- libffi.old/src/pa/ffi.c 1970-01-01 01:00:00.000000000 +0100 ++++ libffi/src/pa/ffi.c 2004-03-20 19:33:57.000000000 +0100 +@@ -0,0 +1,603 @@ ++/* ----------------------------------------------------------------------- ++ ffi.c - (c) 2003-2004 Randolph Chung ++ ++ HPPA 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 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 ++#include ++ ++#include ++ ++#define ROUND_UP(v, a) (((size_t)(v) + (a) - 1) & ~((a) - 1)) ++#define ROUND_DOWN(v, a) (((size_t)(v) - (a) + 1) & ~((a) - 1)) ++#define MIN_STACK_SIZE 64 ++#define FIRST_ARG_SLOT 9 ++#define DEBUG_LEVEL 0 ++ ++#define fldw(addr, fpreg) asm volatile ("fldw 0(%0), %%" #fpreg "L" : : "r"(addr) : #fpreg) ++#define fstw(fpreg, addr) asm volatile ("fstw %%" #fpreg "L, 0(%0)" : : "r"(addr)) ++#define fldd(addr, fpreg) asm volatile ("fldd 0(%0), %%" #fpreg : : "r"(addr) : #fpreg) ++#define fstd(fpreg, addr) asm volatile ("fstd %%" #fpreg "L, 0(%0)" : : "r"(addr)) ++ ++#define debug(lvl, x...) do { if (lvl <= DEBUG_LEVEL) { printf(x); } } while (0) ++ ++static inline int ffi_struct_type(ffi_type *t) ++{ ++ size_t sz = t->size; ++ ++ /* Small structure results are passed in registers, ++ larger ones are passed by pointer. */ ++ ++ if (sz <= 1) ++ return FFI_TYPE_UINT8; ++ else if (sz == 2) ++ return FFI_TYPE_UINT16; ++ else if (sz == 3) ++ return FFI_TYPE_SMALL_STRUCT1; ++ else if (sz == 4) ++ return FFI_TYPE_UINT32; ++ else if (sz <= 6) ++ return FFI_TYPE_SMALL_STRUCT2; ++ else if (sz <= 8) ++ return FFI_TYPE_UINT64; ++ else ++ return FFI_TYPE_STRUCT; /* else, we pass it by pointer. */ ++} ++ ++/* PA has a downward growing stack, which looks like this: ++ ++ Offset ++ [ Variable args ] ++ SP = (4*(n+9)) arg word N ++ ... ++ SP-52 arg word 4 ++ [ Fixed args ] ++ SP-48 arg word 3 ++ SP-44 arg word 2 ++ SP-40 arg word 1 ++ SP-36 arg word 0 ++ [ Frame marker ] ++ ... ++ SP-20 RP ++ SP-4 previous SP ++ ++ First 4 non-FP 32-bit args are passed in gr26, gr25, gr24 and gr23 ++ First 2 non-FP 64-bit args are passed in register pairs, starting ++ on an even numbered register (i.e. r26/r25 and r24+r23) ++ First 4 FP 32-bit arguments are passed in fr4L, fr5L, fr6L and fr7L ++ First 2 FP 64-bit arguments are passed in fr5 and fr7 ++ The rest are passed on the stack starting at SP-52, but 64-bit ++ arguments need to be aligned to an 8-byte boundary ++ ++ This means we can have holes either in the register allocation, ++ or in the stack. */ ++ ++/* ffi_prep_args is called by the assembly routine once stack space ++ has been allocated for the function's arguments ++ ++ The following code will put everything into the stack frame ++ (which was allocated by the asm routine), and on return ++ the asm routine will load the arguments that should be ++ passed by register into the appropriate registers ++ ++ NOTE: We load floating point args in this function... that means we ++ assume gcc will not mess with fp regs in here. */ ++ ++/*@-exportheader@*/ ++void ffi_prep_args_LINUX(UINT32 *stack, extended_cif *ecif, unsigned bytes) ++/*@=exportheader@*/ ++{ ++ register unsigned int i; ++ register ffi_type **p_arg; ++ register void **p_argv; ++ unsigned int slot = FIRST_ARG_SLOT - 1; ++ char *dest_cpy; ++ ++ debug(1, "%s: stack = %p, ecif = %p, bytes = %u\n", __FUNCTION__, stack, ecif, bytes); ++ ++ p_arg = ecif->cif->arg_types; ++ p_argv = ecif->avalue; ++ ++ for (i = 0; i < ecif->cif->nargs; i++) ++ { ++ int type = (*p_arg)->type; ++ ++ switch (type) ++ { ++ case FFI_TYPE_SINT8: ++ slot++; ++ *(SINT32 *)(stack - slot) = *(SINT8 *)(*p_argv); ++ break; ++ ++ case FFI_TYPE_UINT8: ++ slot++; ++ *(UINT32 *)(stack - slot) = *(UINT8 *)(*p_argv); ++ break; ++ ++ case FFI_TYPE_SINT16: ++ slot++; ++ *(SINT32 *)(stack - slot) = *(SINT16 *)(*p_argv); ++ break; ++ ++ case FFI_TYPE_UINT16: ++ slot++; ++ *(UINT32 *)(stack - slot) = *(UINT16 *)(*p_argv); ++ break; ++ ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_POINTER: ++ slot++; ++ debug(3, "Storing UINT32 %u in slot %u\n", *(UINT32 *)(*p_argv), slot); ++ *(UINT32 *)(stack - slot) = *(UINT32 *)(*p_argv); ++ break; ++ ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ slot += 2; ++ if (slot & 1) ++ slot++; ++ ++ *(UINT32 *)(stack - slot) = (*(UINT64 *)(*p_argv)) >> 32; ++ *(UINT32 *)(stack - slot + 1) = (*(UINT64 *)(*p_argv)) & 0xffffffffUL; ++ break; ++ ++ case FFI_TYPE_FLOAT: ++ /* First 4 args go in fr4L - fr7L */ ++ slot++; ++ switch (slot - FIRST_ARG_SLOT) ++ { ++ case 0: fldw(*p_argv, fr4); break; ++ case 1: fldw(*p_argv, fr5); break; ++ case 2: fldw(*p_argv, fr6); break; ++ case 3: fldw(*p_argv, fr7); break; ++ default: ++ /* Other ones are just passed on the stack. */ ++ debug(3, "Storing UINT32(float) in slot %u\n", slot); ++ *(UINT32 *)(stack - slot) = *(UINT32 *)(*p_argv); ++ break; ++ } ++ break; ++ ++ case FFI_TYPE_DOUBLE: ++ slot += 2; ++ if (slot & 1) ++ slot++; ++ switch (slot - FIRST_ARG_SLOT + 1) ++ { ++ /* First 2 args go in fr5, fr7 */ ++ case 2: fldd(*p_argv, fr5); break; ++ case 4: fldd(*p_argv, fr7); break; ++ default: ++ debug(3, "Storing UINT64(double) at slot %u\n", slot); ++ *(UINT64 *)(stack - slot) = *(UINT64 *)(*p_argv); ++ break; ++ } ++ break; ++ ++ case FFI_TYPE_STRUCT: ++ ++ /* Structs smaller or equal than 4 bytes are passed in one ++ register. Structs smaller or equal 8 bytes are passed in two ++ registers. Larger structures are passed by pointer. */ ++ ++ if((*p_arg)->size <= 4) ++ { ++ slot++; ++ dest_cpy = (char *)(stack - slot); ++ dest_cpy += 4 - (*p_arg)->size; ++ memcpy((char *)dest_cpy, (char *)*p_argv, (*p_arg)->size); ++ } ++ else if ((*p_arg)->size <= 8) ++ { ++ slot += 2; ++ if (slot & 1) ++ slot++; ++ dest_cpy = (char *)(stack - slot); ++ dest_cpy += 8 - (*p_arg)->size; ++ memcpy((char *)dest_cpy, (char *)*p_argv, (*p_arg)->size); ++ } ++ else ++ { ++ slot++; ++ *(UINT32 *)(stack - slot) = (UINT32)(*p_argv); ++ } ++ break; ++ ++ default: ++ FFI_ASSERT(0); ++ } ++ ++ p_arg++; ++ p_argv++; ++ } ++ ++ /* Make sure we didn't mess up and scribble on the stack. */ ++ { ++ int n; ++ ++ debug(5, "Stack setup:\n"); ++ for (n = 0; n < (bytes + 3) / 4; n++) ++ { ++ if ((n%4) == 0) { debug(5, "\n%08x: ", (unsigned int)(stack - n)); } ++ debug(5, "%08x ", *(stack - n)); ++ } ++ debug(5, "\n"); ++ } ++ ++ FFI_ASSERT(slot * 4 <= bytes); ++ ++ return; ++} ++ ++static void ffi_size_stack_LINUX(ffi_cif *cif) ++{ ++ ffi_type **ptr; ++ int i; ++ int z = 0; /* # stack slots */ ++ ++ for (ptr = cif->arg_types, i = 0; i < cif->nargs; ptr++, i++) ++ { ++ int type = (*ptr)->type; ++ ++ switch (type) ++ { ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ z += 2 + (z & 1); /* must start on even regs, so we may waste one */ ++ break; ++ ++ case FFI_TYPE_STRUCT: ++ z += 1; /* pass by ptr, callee will copy */ ++ break; ++ ++ default: /* <= 32-bit values */ ++ z++; ++ } ++ } ++ ++ /* We can fit up to 6 args in the default 64-byte stack frame, ++ if we need more, we need more stack. */ ++ if (z <= 6) ++ cif->bytes = MIN_STACK_SIZE; /* min stack size */ ++ else ++ cif->bytes = 64 + ROUND_UP((z - 6) * sizeof(UINT32), MIN_STACK_SIZE); ++ ++ debug(3, "Calculated stack size is %u bytes\n", cif->bytes); ++} ++ ++/* Perform machine dependent cif processing. */ ++ffi_status ffi_prep_cif_machdep(ffi_cif *cif) ++{ ++ /* Set the return type flag */ ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_VOID: ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ cif->flags = (unsigned) cif->rtype->type; ++ break; ++ ++ 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 ++ in one register. If the size is smaller or equal 8 bytes than we ++ return the result in two registers. But if the size is bigger than ++ 8 bytes, we work with pointers. */ ++ cif->flags = ffi_struct_type(cif->rtype); ++ break; ++ ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ cif->flags = FFI_TYPE_UINT64; ++ break; ++ ++ default: ++ cif->flags = FFI_TYPE_INT; ++ break; ++ } ++ ++ /* Lucky us, because of the unique PA ABI we get to do our ++ own stack sizing. */ ++ switch (cif->abi) ++ { ++ case FFI_LINUX: ++ ffi_size_stack_LINUX(cif); ++ break; ++ ++ default: ++ FFI_ASSERT(0); ++ break; ++ } ++ ++ return FFI_OK; ++} ++ ++/*@-declundef@*/ ++/*@-exportheader@*/ ++extern void ffi_call_LINUX(void (*)(UINT32 *, extended_cif *, unsigned), ++ /*@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) ++{ ++ extended_cif ecif; ++ ++ ecif.cif = cif; ++ ecif.avalue = avalue; ++ ++ /* 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)) ++ { ++ /*@-sysunrecog@*/ ++ ecif.rvalue = alloca(cif->rtype->size); ++ /*@=sysunrecog@*/ ++ } ++ else ++ ecif.rvalue = rvalue; ++ ++ ++ switch (cif->abi) ++ { ++ case FFI_LINUX: ++ /*@-usedef@*/ ++ debug(2, "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, ++ cif->flags, ecif.rvalue, fn); ++ /*@=usedef@*/ ++ break; ++ ++ default: ++ FFI_ASSERT(0); ++ break; ++ } ++} ++ ++#if FFI_CLOSURES ++/* This is more-or-less an inverse of ffi_call -- we have arguments on ++ 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. */ ++UINT32 ffi_closure_inner_LINUX(ffi_closure *closure, UINT32 *stack) ++{ ++ ffi_cif *cif; ++ void **avalue; ++ void *rvalue; ++ UINT32 ret[2]; /* function can return up to 64-bits in registers */ ++ ffi_type **p_arg; ++ char *tmp; ++ int i, avn, slot = FIRST_ARG_SLOT - 1; ++ register UINT32 r28 asm("r28"); ++ ++ cif = closure->cif; ++ ++ /* If returning via structure, callee will write to our pointer. */ ++ if (cif->flags == FFI_TYPE_STRUCT) ++ rvalue = (void *)r28; ++ else ++ rvalue = &ret[0]; ++ ++ avalue = (void **)alloca(cif->nargs * FFI_SIZEOF_ARG); ++ avn = cif->nargs; ++ p_arg = cif->arg_types; ++ ++ for (i = 0; i < avn; i++) ++ { ++ int type = (*p_arg)->type; ++ ++ switch (type) ++ { ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_POINTER: ++ slot++; ++ avalue[i] = (char *)(stack - slot) + sizeof(UINT32) - (*p_arg)->size; ++ break; ++ ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ slot += 2; ++ if (slot & 1) ++ slot++; ++ avalue[i] = (void *)(stack - slot); ++ break; ++ ++ case FFI_TYPE_FLOAT: ++ slot++; ++ switch (slot - FIRST_ARG_SLOT) ++ { ++ case 0: fstw(fr4, (void *)(stack - slot)); break; ++ case 1: fstw(fr5, (void *)(stack - slot)); break; ++ case 2: fstw(fr6, (void *)(stack - slot)); break; ++ case 3: fstw(fr7, (void *)(stack - slot)); break; ++ } ++ avalue[i] = (void *)(stack - slot); ++ break; ++ ++ case FFI_TYPE_DOUBLE: ++ slot += 2; ++ if (slot & 1) ++ slot++; ++ switch (slot - FIRST_ARG_SLOT + 1) ++ { ++ case 2: fstd(fr5, (void *)(stack - slot)); break; ++ case 4: fstd(fr7, (void *)(stack - slot)); break; ++ } ++ avalue[i] = (void *)(stack - slot); ++ break; ++ ++ case FFI_TYPE_STRUCT: ++ /* Structs smaller or equal than 4 bytes are passed in one ++ register. Structs smaller or equal 8 bytes are passed in two ++ registers. Larger structures are passed by pointer. */ ++ if((*p_arg)->size <= 4) { ++ slot++; ++ avalue[i] = (void *)(stack - slot) + sizeof(UINT32) - ++ (*p_arg)->size; ++ } else if ((*p_arg)->size <= 8) { ++ slot += 2; ++ if (slot & 1) ++ slot++; ++ avalue[i] = (void *)(stack - slot) + sizeof(UINT64) - ++ (*p_arg)->size; ++ } else { ++ slot++; ++ avalue[i] = (void *) *(stack - slot); ++ } ++ break; ++ ++ default: ++ FFI_ASSERT(0); ++ } ++ ++ p_arg++; ++ } ++ ++ /* Invoke the closure. */ ++ (closure->fun) (cif, rvalue, avalue, closure->user_data); ++ ++ debug(3, "after calling function, ret[0] = %d, ret[1] = %d\n", ret[0], ret[1]); ++ ++ /* Store the result */ ++ switch (cif->flags) ++ { ++ case FFI_TYPE_UINT8: ++ *(stack - FIRST_ARG_SLOT) = *(UINT8 *)&ret[0]; ++ break; ++ case FFI_TYPE_SINT8: ++ *(stack - FIRST_ARG_SLOT) = *(SINT8 *)&ret[0]; ++ break; ++ case FFI_TYPE_UINT16: ++ *(stack - FIRST_ARG_SLOT) = *(UINT16 *)&ret[0]; ++ break; ++ case FFI_TYPE_SINT16: ++ *(stack - FIRST_ARG_SLOT) = *(SINT16 *)&ret[0]; ++ break; ++ case FFI_TYPE_INT: ++ case FFI_TYPE_UINT32: ++ *(stack - FIRST_ARG_SLOT) = *(UINT32 *)&ret[0]; ++ break; ++ case FFI_TYPE_SINT32: ++ *(stack - FIRST_ARG_SLOT) = *(SINT32 *)&ret[0]; ++ break; ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ *(stack - FIRST_ARG_SLOT) = *(UINT32 *)&ret[0]; ++ *(stack - FIRST_ARG_SLOT - 1) = *(UINT32 *)&ret[1]; ++ break; ++ ++ case FFI_TYPE_DOUBLE: ++ fldd(rvalue, fr4); ++ break; ++ ++ case FFI_TYPE_FLOAT: ++ fldw(rvalue, fr4); ++ break; ++ ++ case FFI_TYPE_STRUCT: ++ /* Don't need a return value, done by caller. */ ++ break; ++ ++ case FFI_TYPE_SMALL_STRUCT1: ++ tmp = (void*)(stack - FIRST_ARG_SLOT); ++ tmp += 4 - cif->rtype->size; ++ memcpy((void*)tmp, &ret[0], cif->rtype->size); ++ break; ++ ++ case FFI_TYPE_SMALL_STRUCT2: ++ *(stack - FIRST_ARG_SLOT) = ret[0]; ++ *(stack - FIRST_ARG_SLOT - 1) = ret[1]; ++ break; ++ ++ case FFI_TYPE_POINTER: ++ case FFI_TYPE_VOID: ++ break; ++ ++ default: ++ debug(0, "assert with cif->flags: %d\n",cif->flags); ++ FFI_ASSERT(0); ++ break; ++ } ++ return FFI_OK; ++} ++ ++/* Fill in a closure to refer to the specified fun and user_data. ++ cif specifies the argument and result types for fun. ++ The cif must already be prep'ed. */ ++ ++void ffi_closure_LINUX(void); ++ ++ffi_status ++ffi_prep_closure (ffi_closure* closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data) ++{ ++ UINT32 *tramp = (UINT32 *)(closure->tramp); ++ ++ FFI_ASSERT (cif->abi == FFI_LINUX); ++ ++ /* Make a small trampoline that will branch to our ++ handler function. Use PC-relative addressing. */ ++ ++ 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 */ ++ tramp[3] = 0x36b53ff1; /* ldo -8(%r21), %r21 ; get closure addr */ ++ 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); ++ ++ /* Flush d/icache -- have to flush up 2 two lines because of ++ alignment. */ ++ asm volatile ( ++ "fdc 0(%0)\n" ++ "fdc %1(%0)\n" ++ "fic 0(%%sr4, %0)\n" ++ "fic %1(%%sr4, %0)\n" ++ "sync\n" ++ : : "r"((unsigned long)tramp & ~31), "r"(32 /* stride */)); ++ ++ closure->cif = cif; ++ closure->user_data = user_data; ++ closure->fun = fun; ++ ++ return FFI_OK; ++} ++#endif +diff -urN libffi.old/src/pa/ffitarget.h libffi/src/pa/ffitarget.h +--- libffi.old/src/pa/ffitarget.h 1970-01-01 01:00:00.000000000 +0100 ++++ libffi/src/pa/ffitarget.h 2004-03-20 19:33:57.000000000 +0100 +@@ -0,0 +1,57 @@ ++/* -----------------------------------------------------------------*-C-*- ++ ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. ++ Target configuration macros for hppa. ++ ++ 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. ++ ++ ----------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H ++ ++/* ---- System specific configurations ----------------------------------- */ ++ ++#ifndef LIBFFI_ASM ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++ ++typedef enum ffi_abi { ++ FFI_FIRST_ABI = 0, ++ ++#ifdef PA ++ FFI_LINUX, ++ FFI_DEFAULT_ABI = FFI_LINUX, ++#endif ++ ++ FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 ++} ffi_abi; ++#endif ++ ++/* ---- Definitions for closures ----------------------------------------- */ ++ ++#define FFI_CLOSURES 1 ++#define FFI_NATIVE_RAW_API 0 ++ ++#define FFI_TRAMPOLINE_SIZE 32 ++ ++#define FFI_TYPE_SMALL_STRUCT1 -1 ++#define FFI_TYPE_SMALL_STRUCT2 -2 ++#endif ++ +diff -urN libffi.old/src/pa/linux.S libffi/src/pa/linux.S +--- libffi.old/src/pa/linux.S 1970-01-01 01:00:00.000000000 +0100 ++++ libffi/src/pa/linux.S 2004-03-20 19:33:57.000000000 +0100 +@@ -0,0 +1,281 @@ ++/* ----------------------------------------------------------------------- ++ linux.S - (c) 2003-2004 Randolph Chung ++ ++ HPPA 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 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. ++ ----------------------------------------------------------------------- */ ++ ++#define LIBFFI_ASM ++#include ++#include ++ ++ .text ++ .align 4 ++ ++ /* void ffi_call_LINUX(void (*)(char *, extended_cif *), ++ extended_cif *ecif, ++ unsigned bytes, ++ unsigned flags, ++ unsigned *rvalue, ++ void (*fn)()); ++ */ ++ ++ .export ffi_call_LINUX,code ++ .import ffi_prep_args_LINUX,code ++ ++ .type ffi_call_LINUX, @function ++.LFB1: ++ffi_call_LINUX: ++ .proc ++ .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4 ++ .entry ++ stw %rp, -20(%sp) ++ copy %r3, %r1 ++.LCFI11: ++ ++ copy %sp, %r3 ++.LCFI12: ++ ++ /* 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_LINUX ] ++ ++ [ Stack for calling prep_args ] <- %sp ++ */ ++ ++ stwm %r1, 64(%sp) ++ stw %r4, 12(%r3) ++.LCFI13: ++ 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_LINUX,%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 were 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. */ ++ ++checksmst1: ++ comib,<>,n FFI_TYPE_SMALL_STRUCT1, %r21, checksmst2 ++ /* There is maybe a better way to handle 3 byte structs. */ ++ sh2add %ret0,0,%ret0 ++ sh2add %ret0,0,%ret0 ++ sh2add %ret0,0,%ret0 ++ sh2add %ret0,0,%ret0 ++ b done ++ stw %ret0, 0(%r20) ++ ++checksmst2: ++ comib,<>,n FFI_TYPE_SMALL_STRUCT2, %r21, checkint8 ++ /* Up to now I don't have a way to handle 6/7 byte structs. ++ The values are left bounded in the registers. In the struct ++ itself they are left bounded. */ ++ stw %ret0, 0(%r20) ++ b done ++ stw %ret1, 4(%r20) ++ ++checkint8: ++ comib,<>,n FFI_TYPE_UINT8, %r21, checkint16 ++ b done ++ stb %ret0, 0(%r20) ++ ++checkint16: ++ comib,<>,n FFI_TYPE_UINT16, %r21, checkint32 ++ b done ++ sth %ret0, 0(%r20) ++ ++checkint32: ++ comib,<>,n FFI_TYPE_UINT32, %r21, checkint ++ b done ++ stw %ret0, 0(%r20) ++ ++checkint: ++ comib,<>,n FFI_TYPE_INT, %r21, checkll ++ b done ++ stw %ret0, 0(%r20) ++ ++checkll: ++ comib,<>,n FFI_TYPE_UINT64, %r21, checkdbl ++ stw %ret0, 0(%r20) ++ b done ++ stw %ret1, 4(%r20) ++ ++checkdbl: ++ comib,<>,n FFI_TYPE_DOUBLE, %r21, checkfloat ++ b done ++ fstd %fr4,0(%r20) ++ ++checkfloat: ++ comib,<>,n FFI_TYPE_FLOAT, %r21, done ++ fstw %fr4L,0(%r20) ++ ++ /* structure returns are either handled by one of the ++ INT/UINT64 cases above, or, if passed by pointer, ++ is handled by the callee. */ ++ ++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 ++.LFE1: ++ ++ /* void ffi_closure_LINUX(void); ++ Called with closure argument in %r21 */ ++ .export ffi_closure_LINUX,code ++ .import ffi_closure_inner_LINUX,code ++ ++ .type ffi_closure_LINUX, @function ++.LFB2: ++ffi_closure_LINUX: ++ .proc ++ .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3 ++ .entry ++ ++ stw %rp, -20(%sp) ++.LCFI20: ++ copy %r3, %r1 ++.LCFI21: ++ copy %sp, %r3 ++.LCFI22: ++ 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_LINUX, %r2 ++ copy %r3, %arg1 ++ ++ ldwm -64(%sp), %r3 ++ ldw -20(%sp), %rp ++ ldw -36(%sp), %ret0 ++ bv %r0(%r2) ++ ldw -40(%sp), %ret1 ++ ++ .exit ++ .procend ++.LFE2: ++ ++ .section ".eh_frame",EH_FRAME_FLAGS,@progbits ++.Lframe1: ++ .word .LECIE1-.LSCIE1 ;# Length of Common Information Entry ++.LSCIE1: ++ .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 ++.LECIE1: ++.LSFDE1: ++ .word .LEFDE1-.LASFDE1 ;# FDE Length ++.LASFDE1: ++ .word .LASFDE1-.Lframe1 ;# FDE CIE offset ++ .word .LFB1 ;# FDE initial location ++ .word .LFE1-.LFB1 ;# FDE address range ++ ++ .byte 0x4 ;# DW_CFA_advance_loc4 ++ .word .LCFI11-.LFB1 ++ .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 .LCFI12-.LCFI11 ++ .byte 0xd ;# DW_CFA_def_cfa_register = r3 ++ .uleb128 0x3 ++ ++ .byte 0x4 ;# DW_CFA_advance_loc4 ++ .word .LCFI13-.LCFI12 ++ .byte 0x84 ;# DW_CFA_offset, column 0x4 ++ .uleb128 0x3 ++ ++ .align 4 ++.LEFDE1: ++ ++.LSFDE2: ++ .word .LEFDE2-.LASFDE2 ;# FDE Length ++.LASFDE2: ++ .word .LASFDE2-.Lframe1 ;# FDE CIE offset ++ .word .LFB2 ;# FDE initial location ++ .word .LFE2-.LFB2 ;# FDE address range ++ .byte 0x4 ;# DW_CFA_advance_loc4 ++ .word .LCFI21-.LFB2 ++ .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 .LCFI12-.LCFI11 ++ .byte 0xd ;# DW_CFA_def_cfa_register = r3 ++ .uleb128 0x3 ++ ++ .align 4 ++.LEFDE2: +diff -urN libffi.old/src/prep_cif.c libffi/src/prep_cif.c +--- libffi.old/src/prep_cif.c 2004-03-20 19:32:43.000000000 +0100 ++++ libffi/src/prep_cif.c 2004-03-20 19:33:57.000000000 +0100 +@@ -113,7 +113,7 @@ + FFI_ASSERT_VALID_TYPE(cif->rtype); + + /* x86-64 and s390 stack space allocation is handled in prep_machdep. */ +-#if !defined M68K && !defined __x86_64__ && !defined S390 ++#if !defined M68K && !defined __x86_64__ && !defined S390 && !defined PA + /* Make space for the return structure pointer */ + if (cif->rtype->type == FFI_TYPE_STRUCT + #ifdef SPARC +@@ -134,7 +134,7 @@ + check after the initialization. */ + FFI_ASSERT_VALID_TYPE(*ptr); + +-#if !defined __x86_64__ && !defined S390 ++#if !defined __x86_64__ && !defined S390 && !defined PA + #ifdef SPARC + if (((*ptr)->type == FFI_TYPE_STRUCT + && ((*ptr)->size > 16 || cif->abi != FFI_V9)) --- gcc-3.4-3.4.6.orig/debian/patches/ppc64-biarch.dpatch +++ gcc-3.4-3.4.6/debian/patches/ppc64-biarch.dpatch @@ -0,0 +1,131 @@ +#! /bin/sh -e + +# DP: biarch patches for powerpc/ppc64 + +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 + + +diff -urN tmp/gcc/config/rs6000/t-linux64 src/gcc/config/rs6000/t-linux64 +--- tmp/gcc/config/rs6000/t-linux64 2004-03-17 15:16:48.000000000 +0000 ++++ src/gcc/config/rs6000/t-linux64 2004-11-22 07:56:52.681533760 +0000 +@@ -11,9 +11,9 @@ +-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 ../lib nof +-MULTILIB_MATCHES = $(MULTILIB_MATCHES_FLOAT) ++#MULTILIB_EXCEPTIONS = m64/msoft-float ++#MULTILIB_EXCLUSIONS = m64/!m32/msoft-float ++MULTILIB_OSDIRNAMES = ../lib ../lib32 ++#MULTILIB_MATCHES = $(MULTILIB_MATCHES_FLOAT) + + # We want fine grained libraries, so use the new code to build the +@@ -37,8 +37,11 @@ + mklibgcc: bispecs + + bispecs: specs +- if [ x`$(GCC_FOR_TARGET) -print-multi-os-directory` = x../lib ]; then \ ++ touch f-test.c; \ ++ $(GCC_FOR_TARGET) -c f-test.c -o f-test.o; \ ++ if [ "x`file f-test.o | grep 64-bit`" = "x" ]; then \ + sed -e '/cc1_options/{ n; s/$$/ %{m64:-mlong-double-128}/; }' < specs > $@; \ + else \ + sed -e '/cc1_options/{ n; s/$$/ %{!m32:-mlong-double-128}/; }' < specs > $@; \ +- fi ++ fi; \ ++ rm f-test.c f-test.o; +diff -urN tmp/libjava/configure.host src/libjava/configure.host +--- tmp/libjava/configure.host 25 Nov 2004 03:46:56 -0000 ++++ src/libjava/configure.host 15 Dec 2004 15:45:22 -0000 +@@ -123,10 +123,13 @@ + powerpc64*-*) + sysdeps_dir=powerpc + libgcj_interpreter=yes +- if [ x`$CC -print-multi-os-directory` = x../lib64 ]; then ++ touch f-test.c ++ $CC -c f-test.c -o f-test.o ++ if [ "x`file f-test.o | grep 32-bit`" = "x" ]; then + libgcj_flags="${libgcj_flags} -mminimal-toc" + fi + enable_hash_synchronization_default=yes + slow_pthread_self=yes ++ rm f-test.c f-test.o + ;; + powerpc*-*) +diff -urN gcc-3.4.3/config-ml.in src/config-ml.in +--- gcc-3.4.3/config-ml.in 2004-01-05 00:41:14.000000000 +0000 ++++ src/config-ml.in 2004-12-10 18:59:35.651141848 +0000 +@@ -400,7 +400,47 @@ + ;; + esac + ;; +-powerpc*-*-* | rs6000*-*-*) ++powerpc64-*-*) ++ case " $multidirs " in ++ *" 32 "*) ++ # We will not be able to create libraries with -m32 if ++ # we cannot even link a trivial program. It usually ++ # indicates the 32bit libraries are missing. ++ if echo 'main() {}' > conftest.c && ++ ${CC-gcc} -m32 conftest.c -o conftest; then ++ echo Enable only libstdc++. ++ old_multidirs="${multidirs}" ++ multidirs="" ++ for x in ${old_multidirs}; do ++ case "$x" in ++ *32* ) case ${ml_realsrcdir} in ++ *"libstdc++-v3" ) multidirs="${multidirs} ${x}" ;; ++ *"libf2c" ) multidirs="${multidirs} ${x}" ;; ++ *"libobjc" ) multidirs="${multidirs} ${x}" ;; ++ *"libiberty" ) multidirs="${multidirs} ${x}" ;; ++ *"zlib" ) multidirs="${multidirs} ${x}" ;; ++ *) : ;; ++ esac ++ ;; ++ *) multidirs="${multidirs} ${x}" ;; ++ esac ++ done ++ else ++ echo Could not link program with -m32, disabling it. ++ old_multidirs="${multidirs}" ++ multidirs="" ++ for x in ${old_multidirs}; do ++ case "$x" in ++ *m32* ) : ;; ++ *) multidirs="${multidirs} ${x}" ;; ++ esac ++ done ++ fi ++ rm -f conftest.c conftest ++ ;; ++ esac ++ ;; ++powerpc-*-* | rs6000*-*-*) + if [ x$enable_aix64 = xno ] + then + old_multidirs="${multidirs}" --- gcc-3.4-3.4.6.orig/debian/patches/m32r-libffi.dpatch +++ gcc-3.4-3.4.6/debian/patches/m32r-libffi.dpatch @@ -0,0 +1,580 @@ +#! /bin/sh -e +# +# +# DP: Author: Kazuhiro Inaoka +# DP: libffi implementation + +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 -p1 < $0 + cd ${dir}libffi && autoconf + ;; + -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 + +--- gcc-3.4.1/libffi/Makefile.am.orig 2004-11-02 22:25:42.000000000 +0900 ++++ gcc-3.4.1/libffi/Makefile.am 2004-11-12 12:20:22.000000000 +0900 +@@ -9,6 +9,7 @@ EXTRA_DIST = LICENSE ChangeLog.v1 \ + src/arm/ffi.c src/arm/sysv.S src/arm/ffitarget.h \ + src/mips/ffi.c src/mips/n32.S src/mips/o32.S \ + src/mips/ffitarget.h \ ++ src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \ + src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \ + src/pa/ffi.c src/pa/linux.S src/pa/ffitarget.h \ + src/powerpc/ffi.c src/powerpc/sysv.S \ +@@ -25,7 +26,6 @@ EXTRA_DIST = LICENSE ChangeLog.v1 \ + src/x86/ffi.c src/x86/sysv.S src/x86/win32.S \ + src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h + +- + VPATH = @srcdir@:@srcdir@/src:@srcdir@/src/@TARGETDIR@ + + ## ################################################################ +@@ -105,6 +105,7 @@ TARGET_SRC_S390 = src/s390/sysv.S src/s + TARGET_SRC_X86_64 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S + TARGET_SRC_SH = src/sh/sysv.S src/sh/ffi.c + TARGET_SRC_SH64 = src/sh64/sysv.S src/sh64/ffi.c ++TARGET_SRC_M32R = src/m32r/sysv.S src/m32r/ffi.c + + ##libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c $(TARGET_SRC_@TARGET@) + ## Work around automake deficiency +@@ -178,6 +179,10 @@ if PA + libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_PA) + libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_PA) + endif ++if M32R ++libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_M32R) ++libffi_convenience_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_M32R) ++endif + + AM_CFLAGS = -Wall -g -fexceptions + +--- gcc-3.4.1/libffi/Makefile.in.orig 2004-11-12 16:52:34.000000000 +0900 ++++ gcc-3.4.1/libffi/Makefile.in 2004-11-12 16:57:15.000000000 +0900 +@@ -98,6 +98,7 @@ + EXTRA_DIST = LICENSE ChangeLog.v1 \ + src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \ + src/arm/ffi.c src/arm/sysv.S src/arm/ffitarget.h \ ++ src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \ + src/mips/ffi.c src/mips/n32.S src/mips/o32.S \ + src/mips/ffitarget.h \ + src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \ +@@ -187,6 +188,7 @@ + TARGET_SRC_X86_64 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S + TARGET_SRC_SH = src/sh/sysv.S src/sh/ffi.c + TARGET_SRC_SH64 = src/sh64/sysv.S src/sh64/ffi.c ++TARGET_SRC_M32R = src/m32r/sysv.S src/m32r/ffi.c + + libffi_la_common_SOURCES = src/debug.c src/prep_cif.c src/types.c \ + src/raw_api.c src/java_raw_api.c +@@ -207,6 +209,7 @@ + @X86_64_TRUE@libffi_la_SOURCES = @X86_64_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_X86_64) + @SH_TRUE@libffi_la_SOURCES = @SH_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_SH) + @SH64_TRUE@libffi_la_SOURCES = @SH64_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_SH64) ++@M32R_TRUE@libffi_la_SOURCES = @M32R_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_M32R) + @MIPS_IRIX_TRUE@libffi_convenience_la_SOURCES = @MIPS_IRIX_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_IRIX) + @MIPS_LINUX_TRUE@libffi_convenience_la_SOURCES = @MIPS_LINUX_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_LINUX) + @X86_TRUE@libffi_convenience_la_SOURCES = @X86_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_X86) +@@ -223,6 +226,7 @@ + @X86_64_TRUE@libffi_convenience_la_SOURCES = @X86_64_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_X86_64) + @SH_TRUE@libffi_convenience_la_SOURCES = @SH_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_SH) + @SH64_TRUE@libffi_convenience_la_SOURCES = @SH64_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_SH64) ++@M32R_TRUE@libffi_convenience_la_SOURCES = @M32R_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_M32R) + + AM_CFLAGS = -Wall -g -fexceptions + +@@ -242,6 +246,9 @@ + LIBS = @LIBS@ + libffi_convenience_la_LDFLAGS = + libffi_convenience_la_LIBADD = ++@M32R_TRUE@libffi_convenience_la_OBJECTS = src/debug.lo src/prep_cif.lo \ ++@M32R_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \ ++@M32R_TRUE@src/m32r/ffi.lo src/m32r/sysv.lo \ + @X86_64_TRUE@libffi_convenience_la_OBJECTS = src/debug.lo \ + @X86_64_TRUE@src/prep_cif.lo src/types.lo src/raw_api.lo \ + @X86_64_TRUE@src/java_raw_api.lo src/x86/ffi64.lo src/x86/unix64.lo \ +@@ -299,6 +306,9 @@ + @IA64_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \ + @IA64_TRUE@src/ia64/ffi.lo src/ia64/unix.lo + libffi_la_LIBADD = ++@M32R_TRUE@libffi_la_OBJECTS = src/debug.lo src/prep_cif.lo \ ++@M32R_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \ ++@M32R_TRUE@src/m32r/ffi.lo src/m32r/sysv.lo \ + @X86_64_TRUE@libffi_la_OBJECTS = src/debug.lo src/prep_cif.lo \ + @X86_64_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \ + @X86_64_TRUE@src/x86/ffi64.lo src/x86/unix64.lo src/x86/ffi.lo \ +--- gcc-3.4.1/libffi/configure.in.orig 2004-11-02 22:25:28.000000000 +0900 ++++ gcc-3.4.1/libffi/configure.in 2004-11-12 12:14:04.000000000 +0900 +@@ -88,6 +88,7 @@ x86_64-*-linux*) TARGET=X86_64; TARGETDI + sh-*-linux* | sh[[34]]*-*-linux*) TARGET=SH; TARGETDIR=sh;; + sh64-*-linux* | sh5*-*-linux*) TARGET=SH64; TARGETDIR=sh64;; + hppa-*-linux* | parisc-*-linux*) TARGET=PA; TARGETDIR=pa;; ++m32r*-*-linux* ) TARGET=M32R; TARGETDIR=m32r;; + esac + + AC_SUBST(AM_RUNTESTFLAGS) +@@ -113,6 +114,7 @@ AM_CONDITIONAL(X86_64, test x$TARGET = x + AM_CONDITIONAL(SH, test x$TARGET = xSH) + AM_CONDITIONAL(SH64, test x$TARGET = xSH64) + AM_CONDITIONAL(PA, test x$TARGET = xPA) ++AM_CONDITIONAL(M32R, test x$TARGET = xM32R) + + case x$TARGET in + xMIPS*) TARGET=MIPS ;; +--- gcc-3.4.1/libffi/src/m32r/ffi.c 1970-01-01 09:00:00.000000000 +0900 ++++ gcc-3.4.1/libffi/src/m32r/ffi.c 2004-10-22 11:16:10.000000000 +0900 +@@ -0,0 +1,246 @@ ++/* ----------------------------------------------------------------------- ++ ffi.c - Copyright (c) 2004 Renesas Technology ++ ++ M32R 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 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 ++#include ++ ++#include ++ ++/* 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; ++ register unsigned int avn; ++ register void **p_argv; ++ register char *argp; ++ register ffi_type **p_arg; ++ ++ tmp = 0; ++ argp = stack; ++ ++ if ( ecif->cif->rtype->type == FFI_TYPE_STRUCT && ecif->cif->rtype->size > 8 ) { ++ *(void **) argp = ecif->rvalue; ++ argp += 4; ++ } ++ ++ avn = ecif->cif->nargs; ++ p_argv = ecif->avalue; ++ ++ for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; ++ (i != 0) && (avn != 0); ++ i--, p_arg++) ++ { ++ size_t z; ++ ++ /* Align if necessary */ ++ if (((*p_arg)->alignment - 1) & (unsigned) argp) { ++ argp = (char *) ALIGN(argp, (*p_arg)->alignment); ++ } ++ ++ if (avn != 0) ++ { ++ avn--; ++ z = (*p_arg)->size; ++ if (z < sizeof(int)) ++ { ++ z = sizeof(int); ++ switch ((*p_arg)->type) ++ { ++ case FFI_TYPE_SINT8: ++ *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); ++ break; ++ ++ case FFI_TYPE_UINT8: ++ *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); ++ break; ++ ++ case FFI_TYPE_SINT16: ++ *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); ++ break; ++ ++ case FFI_TYPE_UINT16: ++ *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); ++ break; ++ ++ case FFI_TYPE_STRUCT: ++ z = (*p_arg)->size; ++ if ( (*p_arg)->alignment != 1 ) ++ memcpy(argp, *p_argv, z); ++ else ++ memcpy(argp + 4 - z, *p_argv, z); ++ z = sizeof(int); ++ break; ++ ++ default: ++ FFI_ASSERT(0); ++ } ++ } ++ else if (z == sizeof(int)) ++ { ++ *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); ++ } ++ else ++ { ++ if ( (*p_arg)->type == FFI_TYPE_STRUCT ) ++ { ++ if ( z > 8 ) ++ { ++ *(unsigned int *) argp = (unsigned int)(void *)(* p_argv); ++ z = sizeof(void *); ++ } ++ else ++ { ++ memcpy(argp, *p_argv, z); ++ z = 8; ++ } ++ } ++ else ++ { /* double or long long 64bit */ ++ memcpy(argp, *p_argv, z); ++ } ++ } ++ p_argv++; ++ argp += z; ++ } ++ } ++ ++ return; ++} ++ ++/* Perform machine dependent cif processing */ ++ffi_status ffi_prep_cif_machdep(ffi_cif *cif) ++{ ++ /* Set the return type flag */ ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_VOID: ++ cif->flags = (unsigned) cif->rtype->type; ++ break; ++ ++ case FFI_TYPE_STRUCT: ++ if (cif->rtype->size <= 4) ++ { ++ cif->flags = FFI_TYPE_INT; ++ } ++ else if (cif->rtype->size <= 8) ++ { ++ cif->flags = FFI_TYPE_DOUBLE; ++ } ++ else ++ { ++ cif->flags = (unsigned) cif->rtype->type; ++ } ++ break; ++ ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_DOUBLE: ++ cif->flags = FFI_TYPE_DOUBLE; ++ break; ++ ++ case FFI_TYPE_FLOAT: ++ default: ++ cif->flags = FFI_TYPE_INT; ++ break; ++ } ++ ++ 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) ++{ ++ extended_cif ecif; ++ ++ ecif.cif = cif; ++ ecif.avalue = avalue; ++ ++ /* 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)) ++ { ++ /*@-sysunrecog@*/ ++ ecif.rvalue = alloca(cif->rtype->size); ++ /*@=sysunrecog@*/ ++ } ++ else ++ ecif.rvalue = rvalue; ++ ++ ++ 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 ) ++ { ++ int size = cif->rtype->size; ++ int align = cif->rtype->alignment; ++ if (size < 4) ++ { ++ if ( align == 1 ) ++ *(unsigned long *)(ecif.rvalue) <<= (4 - size)*8; ++ } ++ else if ( 4 < size && size < 8 ) ++ { ++ if ( align == 1 ) ++ { ++ memcpy(ecif.rvalue, ecif.rvalue + 8-size, size); ++ } ++ else if (align == 2) ++ { ++ if (size & 1) size += 1; ++ if (size != 8) ++ memcpy(ecif.rvalue, ecif.rvalue + 8-size, size); ++ } ++ } ++ } ++ /*@=usedef@*/ ++ break; ++ default: ++ FFI_ASSERT(0); ++ break; ++ } ++} +--- gcc-3.4.1/libffi/src/m32r/ffitarget.h 1970-01-01 09:00:00.000000000 +0900 ++++ gcc-3.4.1/libffi/src/m32r/ffitarget.h 2004-10-22 10:22:24.000000000 +0900 +@@ -0,0 +1,48 @@ ++/* -----------------------------------------------------------------*-C-*- ++ ffitarget.h - Copyright (c) 2004 Renesas Technology. ++ Target configuration macros for M32R. ++ ++ 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. ++ ++ ----------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H ++ ++/* ---- Generic type definitions ----------------------------------------- */ ++ ++#ifndef LIBFFI_ASM ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++ ++typedef enum ffi_abi { ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV, ++ FFI_DEFAULT_ABI = FFI_SYSV, ++ FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 ++} ffi_abi; ++#endif ++ ++#define FFI_CLOSURES 0 ++#define FFI_TRAMPOLINE_SIZE 24 ++#define FFI_NATIVE_RAW_API 0 ++ ++#endif ++ +--- gcc-3.4.1/libffi/src/m32r/sysv.S 1970-01-01 09:00:00.000000000 +0900 ++++ gcc-3.4.1/libffi/src/m32r/sysv.S 2004-10-22 10:22:24.000000000 +0900 +@@ -0,0 +1,122 @@ ++/* ----------------------------------------------------------------------- ++ sysv.S - Copyright (c) 2004 Renesas Technology ++ ++ M32R 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 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. ++ ----------------------------------------------------------------------- */ ++ ++#define LIBFFI_ASM ++#include ++#include ++#ifdef HAVE_MACHINE_ASM_H ++#include ++#else ++/* XXX these lose for some platforms, I'm sure. */ ++#define CNAME(x) x ++#define ENTRY(x) .globl CNAME(x)! .type CNAME(x),%function! CNAME(x): ++#endif ++ ++.text ++ ++ /* R0: ffi_prep_args */ ++ /* R1: &ecif */ ++ /* R2: cif->bytes */ ++ /* R3: fig->flags */ ++ /* sp+0: ecif.rvalue */ ++ /* sp+4: fn */ ++ ++ /* This assumes we are using gas. */ ++ENTRY(ffi_call_SYSV) ++ /* Save registers */ ++ push fp ++ push lr ++ push r3 ++ push r2 ++ push r1 ++ push r0 ++ mv fp, sp ++ ++ /* Make room for all of the new args. */ ++ sub sp, r2 ++ ++ /* Place all of the ffi_prep_args in position */ ++ mv lr, r0 ++ mv r0, sp ++ /* R1 already set */ ++ ++ /* And call */ ++ jl lr ++ ++ /* move first 4 parameters in registers */ ++ ld r0, @(0,sp) ++ ld r1, @(4,sp) ++ ld r2, @(8,sp) ++ ld r3, @(12,sp) ++ ++ /* and adjust stack */ ++ ld lr, @(8,fp) ++ cmpi lr, #16 ++ bc adjust_stack ++ ldi lr, #16 ++adjust_stack: ++ add sp, lr ++ ++ /* call function */ ++ ld lr, @(28,fp) ++ jl lr ++ ++ /* Remove the space we pushed for the args */ ++ mv sp, fp ++ ++ /* Load R2 with the pointer to storage for the return value */ ++ ld r2, @(24,sp) ++ ++ /* Load R3 with the return type code */ ++ ld r3, @(12,sp) ++ ++ /* If the return value pointer is NULL, assume no return value. */ ++ beqz r2, epilogue ++ ++/* return INT */ ++ ldi r4, #FFI_TYPE_INT ++ bne r3, r4, return_double ++ st r0, @r2 ++ bra epilogue ++ ++return_double: ++/* return DOUBLE or LONGDOUBLE */ ++ ldi r4, #FFI_TYPE_DOUBLE ++ bne r3, r4, epilogue ++ st r0, @r2 ++ st r1, @(4,r2) ++ ++epilogue: ++ pop r0 ++ pop r1 ++ pop r2 ++ pop r3 ++ pop lr ++ pop fp ++ jmp lr ++ ++.ffi_call_SYSV_end: ++ .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) ++ +--- gcc-3.4.1/libffi/src/types.c 2004-03-12 10:35:31.000000000 +0900 ++++ gcc-3.4.1/libffi/src/types.c 2004-10-22 10:22:24.000000000 +0900 +@@ -53,7 +53,7 @@ FFI_INTEGRAL_TYPEDEF(pointer, 4, 4, FFI_ + + #endif + +-#if defined X86 || defined X86_WIN32 || defined ARM || defined M68K ++#if defined X86 || defined X86_WIN32 || defined ARM || defined M68K || defined M32R + + FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); + FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); +@@ -76,7 +76,7 @@ FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_T + FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); + FFI_INTEGRAL_TYPEDEF(longdouble, 12, 4, FFI_TYPE_LONGDOUBLE); + +-#elif defined ARM || defined SH || defined POWERPC_AIX || defined POWERPC_DARWIN ++#elif defined ARM || defined SH || defined M32R || defined POWERPC_AIX || defined POWERPC_DARWIN + + FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); + FFI_INTEGRAL_TYPEDEF(longdouble, 8, 4, FFI_TYPE_LONGDOUBLE); --- gcc-3.4-3.4.6.orig/debian/patches/arm-bigendian.dpatch +++ gcc-3.4-3.4.6/debian/patches/arm-bigendian.dpatch @@ -0,0 +1,86 @@ +#! /bin/sh -e + +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 -p0 --fuzz 10 < $0 + ;; + -unpatch) + patch $pdir -f --no-backup-if-mismatch -R -p0 --fuzz 10 < $0 + ;; + *) + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1 +esac +exit 0 + +--- gcc/config/arm/linux-elf.h 2004-01-31 07:18:11.000000000 +0100 ++++ gcc/config/arm/linux-elf.h 2004-07-02 14:46:29.225443757 +0200 +@@ -30,17 +30,34 @@ + /* Do not assume anything about header files. */ + #define NO_IMPLICIT_EXTERN_C + ++/* ++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-* ++ * (big endian) configurations. ++ */ ++#if TARGET_BIG_ENDIAN_DEFAULT ++#define TARGET_ENDIAN_DEFAULT ARM_FLAG_BIG_END ++#define TARGET_ENDIAN_OPTION "mbig-endian" ++#define TARGET_LINKER_EMULATION "armelfb_linux" ++#else ++#define TARGET_ENDIAN_DEFAULT 0 ++#define TARGET_ENDIAN_OPTION "mlittle-endian" ++#define TARGET_LINKER_EMULATION "armelf_linux" ++#endif ++ + /* Default is to use APCS-32 mode. */ + #undef TARGET_DEFAULT +-#define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS) ++#define TARGET_DEFAULT \ ++ ( ARM_FLAG_APCS_32 | \ ++ ARM_FLAG_MMU_TRAPS | \ ++ TARGET_ENDIAN_DEFAULT ) + + #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6 + +-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p" ++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p" + + #undef MULTILIB_DEFAULTS + #define MULTILIB_DEFAULTS \ +- { "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" } ++ { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" } + + #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__" + +@@ -89,7 +106,7 @@ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \ + -X \ +- %{mbig-endian:-EB}" \ ++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \ + SUBTARGET_EXTRA_LINK_SPEC + + #define TARGET_OS_CPP_BUILTINS() LINUX_TARGET_OS_CPP_BUILTINS() +--- gcc/config.gcc 2004-04-17 04:28:24.000000000 +0200 ++++ gcc/config.gcc 2004-07-02 14:44:40.045822542 +0200 +@@ -666,6 +666,11 @@ + ;; + arm*-*-linux*) # ARM GNU/Linux with ELF + tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h" ++ case $target in ++ arm*b-*) ++ tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines" ++ ;; ++ esac + tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux" + extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" + gnu_ld=yes --- gcc-3.4-3.4.6.orig/debian/patches/svn-updates.dpatch +++ gcc-3.4-3.4.6/debian/patches/svn-updates.dpatch @@ -0,0 +1,34 @@ +#! /bin/sh -e + +# DP: SVN updates from the 3.4 branch upto 2006xxxx + +last_updated() +{ + cat > ${dir}LAST_UPDATED <&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 + last_updated + ;; + -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 + --- gcc-3.4-3.4.6.orig/debian/patches/config-ml.dpatch +++ gcc-3.4-3.4.6/debian/patches/config-ml.dpatch @@ -0,0 +1,220 @@ +#! /bin/sh -e + +# DP: disable some biarch libraries for biarch builds + +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;; + -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 + +--- config-ml.in.orig 2005-11-22 14:42:01.208516952 +0100 ++++ config-ml.in 2005-11-22 14:46:39.072275240 +0100 +@@ -215,6 +215,13 @@ + fi + done + ++if [ -z "$biarch_multidir_names" ]; then ++ biarch_multidir_names="libiberty libstdc++-v3 libgfortran libmudflap libssp libffi libobjc" ++ echo "WARNING: biarch_multidir_names is unset. Use default value:" ++ echo " $biarch_multidir_names" ++fi ++ml_srcbase=`basename $ml_realsrcdir` ++ + # Target libraries are configured for the host they run on, so we check + # $host here, not $target. + +@@ -301,6 +308,26 @@ + done + fi + ;; ++i[34567]86-*-*) ++ case " $multidirs " in ++ *" 64 "*) ++ ac_configure_args="${ac_configure_args} --host=x86_64-linux" ++ # Setting $host this late is a hack. Some directories can't ++ # handle it, so disable them for now. ++ old_multidirs="${multidirs}" ++ multidirs="" ++ for x in ${old_multidirs}; do ++ case "$x" in ++ *64* ) case "$biarch_multidir_names" in ++ *"$ml_srcbase"*) multidirs="${multidirs} ${x}" ;; ++ esac ++ ;; ++ *) multidirs="${multidirs} ${x}" ;; ++ esac ++ done ++ ;; ++ esac ++ ;; + m68*-*-*) + if [ x$enable_softfloat = xno ] + then +@@ -494,16 +521,56 @@ + esac + done + fi ++ case " $multidirs " in ++ *" 64 "*) ++ # We will not be able to create libraries with -m64 if ++ # we cannot even link a trivial program. It usually ++ # indicates the 64bit libraries are missing. ++ if echo 'main() {}' > conftest.c && ++ ${CC-gcc} -m64 conftest.c -o conftest; then ++ old_multidirs="${multidirs}" ++ multidirs="" ++ for x in ${old_multidirs}; do ++ case "$x" in ++ *64* ) case "$biarch_multidir_names" in ++ *"$ml_srcbase"*) multidirs="${multidirs} ${x}" ;; ++ esac ;; ++ *) multidirs="${multidirs} ${x}" ;; ++ esac ++ done ++ else ++ echo Could not link program with -m64, disabling it. ++ old_multidirs="${multidirs}" ++ multidirs="" ++ for x in ${old_multidirs}; do ++ case "$x" in ++ *m64* ) : ;; ++ *) multidirs="${multidirs} ${x}" ;; ++ esac ++ done ++ fi ++ rm -f conftest.c conftest ++ ;; ++ esac + ;; + sparc*-*-*) + case " $multidirs " in +- *" m64 "*) ++ *" 64 "*) + # We will not be able to create libraries with -m64 if + # we cannot even link a trivial program. It usually + # indicates the 64bit libraries are missing. + if echo 'main() {}' > conftest.c && + ${CC-gcc} -m64 conftest.c -o conftest; then +- : ++ old_multidirs="${multidirs}" ++ multidirs="" ++ for x in ${old_multidirs}; do ++ case "$x" in ++ *64* ) case "$biarch_multidir_names" in ++ *"$ml_srcbase"*) multidirs="${multidirs} ${x}" ;; ++ esac ;; ++ *) multidirs="${multidirs} ${x}" ;; ++ esac ++ done + else + echo Could not link program with -m64, disabling it. + old_multidirs="${multidirs}" +@@ -519,6 +586,74 @@ + ;; + esac + ;; ++x86_64*-*-*) ++ case " $multidirs " in ++ *" 32 "*) ++ # We will not be able to create libraries with -m32 if ++ # we cannot even link a trivial program. It usually ++ # indicates the 32bit libraries are missing. ++ if echo 'main() {}' > conftest.c && ++ ${CC-gcc} -m32 conftest.c -o conftest; then ++ old_multidirs="${multidirs}" ++ multidirs="" ++ for x in ${old_multidirs}; do ++ case "$x" in ++ *32* ) case "$biarch_multidir_names" in ++ *"$ml_srcbase"*) multidirs="${multidirs} ${x}" ;; ++ esac ;; ++ *) multidirs="${multidirs} ${x}" ;; ++ esac ++ done ++ else ++ echo Could not link program with -m32, disabling it. ++ old_multidirs="${multidirs}" ++ multidirs="" ++ for x in ${old_multidirs}; do ++ case "$x" in ++ *m32* ) : ;; ++ *) multidirs="${multidirs} ${x}" ;; ++ esac ++ done ++ fi ++ rm -f conftest.c conftest ++ ;; ++ esac ++ ;; ++s390-*-*) ++ ac_configure_args="${ac_configure_args} --host=s390x-linux" ++ ++ case " $multidirs " in ++ *" 64 "*) ++ # We will not be able to create libraries with -m64 if ++ # we cannot even link a trivial program. It usually ++ # indicates the 64bit libraries are missing. ++ if echo 'main() {}' > conftest.c && ++ ${CC-gcc} -m64 conftest.c -o conftest; then ++ old_multidirs="${multidirs}" ++ multidirs="" ++ for x in ${old_multidirs}; do ++ case "$x" in ++ *64* ) case "$biarch_multidir_names" in ++ *"$ml_srcbase"*) multidirs="${multidirs} ${x}" ;; ++ esac ;; ++ *) multidirs="${multidirs} ${x}" ;; ++ esac ++ done ++ else ++ echo Could not link program with -m64, disabling it. ++ old_multidirs="${multidirs}" ++ multidirs="" ++ for x in ${old_multidirs}; do ++ case "$x" in ++ *64* ) : ;; ++ *) multidirs="${multidirs} ${x}" ;; ++ esac ++ done ++ fi ++ rm -f conftest.c conftest ++ ;; ++ esac ++ ;; + esac + + # Remove extraneous blanks from multidirs. +@@ -892,9 +1027,20 @@ + fi + fi + ++ ml_configure_args= ++ for arg in ${ac_configure_args} ++ do ++ case $arg in ++ *CC=*) ml_configure_args=${ml_config_env} ;; ++ *CXX=*) ml_configure_args=${ml_config_env} ;; ++ *GCJ=*) ml_configure_args=${ml_config_env} ;; ++ *) ;; ++ esac ++ done ++ + if eval ${ml_config_env} ${ml_config_shell} ${ml_recprog} \ + --with-multisubdir=${ml_dir} --with-multisrctop=${multisrctop} \ +- ${ac_configure_args} ${ml_srcdiroption} ; then ++ ${ac_configure_args} ${ml_configure_args} ${ml_srcdiroption} ; then + true + else + exit 1 --- gcc-3.4-3.4.6.orig/debian/patches/i386-biarch.dpatch +++ gcc-3.4-3.4.6/debian/patches/i386-biarch.dpatch @@ -0,0 +1,329 @@ +#! /bin/sh -e + +# DP: biarch patches for i386/x86_64 + +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}libjava && autoconf + ;; + -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 -Nurp src.orig/gcc/config/i386/biarch.h src/gcc/config/i386/biarch.h +--- src.orig/gcc/config/i386/biarch.h 1969-12-31 19:00:00.000000000 -0500 ++++ src/gcc/config/i386/biarch.h 2004-08-03 22:01:00.000000000 -0400 +@@ -0,0 +1,26 @@ ++/* Make configure files to produce biarch compiler defaulting to 32bit mode. ++ This file must be included very first, while the OS specific file later ++ to overwrite otherwise wrong defaults. ++ Copyright (C) 2001, 2004 Free Software Foundation, Inc. ++ Contributed by Bo Thorsen . ++ ++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, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. */ ++ ++#define TARGET_64BIT_DEFAULT 0 ++#define TARGET_BI_ARCH 1 ++#define DRIVER_SELF_SPECS "%{m64:%{!mtune:-mtune=x86-64}}" +diff -Nurp src.orig/gcc/config/i386/linux.h src/gcc/config/i386/linux.h +--- src.orig/gcc/config/i386/linux.h 2004-08-03 22:07:21.000000000 -0400 ++++ src/gcc/config/i386/linux.h 2004-08-03 22:01:00.000000000 -0400 +@@ -182,6 +182,7 @@ Boston, MA 02111-1307, USA. */ + } \ + } while (0) + ++#ifdef __i386__ + /* Used by crtstuff.c to initialize the base of data-relative relocations. + These are GOT relative on x86, so return the pic register. */ + #ifdef __PIC__ +@@ -201,6 +202,7 @@ Boston, MA 02111-1307, USA. */ + "addl\t$_GLOBAL_OFFSET_TABLE_+[.-.LPR%=],%0" \ + : "=d"(BASE)) + #endif ++#endif + + #undef NEED_INDICATE_EXEC_STACK + #define NEED_INDICATE_EXEC_STACK 1 +diff -Nurp src.orig/gcc/config/i386/linux64.h src/gcc/config/i386/linux64.h +--- src.orig/gcc/config/i386/linux64.h 2004-08-03 22:07:21.000000000 -0400 ++++ src/gcc/config/i386/linux64.h 2004-08-03 22:09:04.000000000 -0400 +@@ -19,8 +19,11 @@ along with GCC; see the file COPYING. I + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + ++#ifndef TARGET_VERSION + #define TARGET_VERSION fprintf (stderr, " (x86-64 Linux/ELF)"); ++#endif + ++#undef TARGET_OS_CPP_BUILTINS + #define TARGET_OS_CPP_BUILTINS() \ + do \ + { \ +@@ -55,6 +58,7 @@ Boston, MA 02111-1307, USA. */ + done. */ + + #undef LINK_SPEC ++#if TARGET_64BIT_DEFAULT + #define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \ + %{shared:-shared} \ + %{!shared: \ +@@ -63,8 +67,22 @@ Boston, MA 02111-1307, USA. */ + %{m32:%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \ + %{!m32:%{!dynamic-linker:-dynamic-linker /lib64/ld-linux-x86-64.so.2}}} \ + %{static:-static}}" ++#else ++#define LINK_SPEC "%{m64:-m elf_x86_64} %{!m64:-m elf_i386} \ ++ %{shared:-shared} \ ++ %{!shared: \ ++ %{!static: \ ++ %{rdynamic:-export-dynamic} \ ++ %{!m64:%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \ ++ %{m64:%{!dynamic-linker:-dynamic-linker /lib64/ld-linux-x86-64.so.2}}} \ ++ %{static:-static}}" ++#endif + ++#if TARGET_64BIT_DEFAULT + #define MULTILIB_DEFAULTS { "m64" } ++#else ++#define MULTILIB_DEFAULTS { "m32" } ++#endif + + #undef NEED_INDICATE_EXEC_STACK + #define NEED_INDICATE_EXEC_STACK 1 +@@ -79,6 +97,7 @@ Boston, MA 02111-1307, USA. */ + #include + #endif + ++#undef MD_FALLBACK_FRAME_STATE_FOR + #ifdef __x86_64__ + #define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS, SUCCESS) \ + do { \ +diff -Nurp src.orig/gcc/config/i386/x86-64.h src/gcc/config/i386/x86-64.h +--- src.orig/gcc/config/i386/x86-64.h 2004-08-03 22:07:21.000000000 -0400 ++++ src/gcc/config/i386/x86-64.h 2004-08-03 22:01:00.000000000 -0400 +@@ -47,9 +47,15 @@ Boston, MA 02111-1307, USA. */ + #undef CC1_SPEC + #define CC1_SPEC "%(cc1_cpu) %{profile:-p}" + ++#if TARGET_64BIT_DEFAULT + #undef ASM_SPEC + #define ASM_SPEC "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} \ + %{Wa,*:%*} %{m32:--32} %{!m32:--64}" ++#else ++#undef ASM_SPEC ++#define ASM_SPEC "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} \ ++ %{Wa,*:%*} %{!m64:--32} %{m64:--64}" ++#endif + + #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ + asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) +diff -Nurp src.orig/gcc/config.gcc src/gcc/config.gcc +--- src.orig/gcc/config.gcc 2004-08-03 22:07:21.000000000 -0400 ++++ src/gcc/config.gcc 2004-08-03 22:07:53.000000000 -0400 +@@ -991,8 +991,10 @@ i[34567]86-*-linux*libc1) # Intel 80386' + i[34567]86-*-linux*) # Intel 80386's running GNU/Linux + # with ELF format using glibc 2 + # aka GNU/Linux C library 6 +- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h" +- tmake_file="t-slibgcc-elf-ver t-linux i386/t-crtstuff" ++ tm_file="i386/biarch.h ${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h \ ++ svr4.h linux.h i386/linux.h i386/x86-64.h i386/linux64.h" ++ tmake_file="t-slibgcc-elf-ver t-linux i386/t-linux64" ++ need_64bit_hwint=yes + ;; + x86_64-*-linux*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h \ +diff -Nurp src.orig/libffi/Makefile.am src/libffi/Makefile.am +--- src.orig/libffi/Makefile.am 2004-08-03 22:07:21.000000000 -0400 ++++ src/libffi/Makefile.am 2004-08-03 22:01:00.000000000 -0400 +@@ -90,7 +90,7 @@ noinst_LTLIBRARIES = libffi_convenience. + + TARGET_SRC_MIPS_IRIX = src/mips/ffi.c src/mips/o32.S src/mips/n32.S + TARGET_SRC_MIPS_LINUX = src/mips/ffi.c src/mips/o32.S +-TARGET_SRC_X86 = src/x86/ffi.c src/x86/sysv.S ++TARGET_SRC_X86 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S + TARGET_SRC_X86_WIN32 = src/x86/ffi.c src/x86/win32.S + TARGET_SRC_SPARC = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S + TARGET_SRC_ALPHA = src/alpha/ffi.c src/alpha/osf.S +diff -Nurp src.orig/libffi/Makefile.in src/libffi/Makefile.in +--- src.orig/libffi/Makefile.in 2004-08-03 22:07:21.000000000 -0400 ++++ src/libffi/Makefile.in 2004-08-03 22:01:00.000000000 -0400 +@@ -174,7 +174,7 @@ noinst_LTLIBRARIES = libffi_convenience. + + TARGET_SRC_MIPS_IRIX = src/mips/ffi.c src/mips/o32.S src/mips/n32.S + TARGET_SRC_MIPS_LINUX = src/mips/ffi.c src/mips/o32.S +-TARGET_SRC_X86 = src/x86/ffi.c src/x86/sysv.S ++TARGET_SRC_X86 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S + TARGET_SRC_X86_WIN32 = src/x86/ffi.c src/x86/win32.S + TARGET_SRC_SPARC = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S + TARGET_SRC_ALPHA = src/alpha/ffi.c src/alpha/osf.S +@@ -301,7 +301,7 @@ libffi_convenience_la_LIBADD = + @MIPS_IRIX_TRUE@src/mips/n32.lo + @X86_TRUE@libffi_convenience_la_OBJECTS = src/debug.lo src/prep_cif.lo \ + @X86_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \ +-@X86_TRUE@src/x86/ffi.lo src/x86/sysv.lo ++@X86_TRUE@src/x86/ffi64.lo src/x86/unix64.lo src/x86/ffi.lo src/x86/sysv.lo + @IA64_TRUE@libffi_convenience_la_OBJECTS = src/debug.lo src/prep_cif.lo \ + @IA64_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \ + @IA64_TRUE@src/ia64/ffi.lo src/ia64/unix.lo +@@ -357,8 +357,8 @@ libffi_la_LIBADD = + @MIPS_IRIX_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \ + @MIPS_IRIX_TRUE@src/mips/ffi.lo src/mips/o32.lo src/mips/n32.lo + @X86_TRUE@libffi_la_OBJECTS = src/debug.lo src/prep_cif.lo src/types.lo \ +-@X86_TRUE@src/raw_api.lo src/java_raw_api.lo src/x86/ffi.lo \ +-@X86_TRUE@src/x86/sysv.lo ++@X86_TRUE@src/raw_api.lo src/java_raw_api.lo src/x86/ffi64.lo src/x86/unix64.lo \ ++@X86_TRUE@src/x86/ffi.lo src/x86/sysv.lo + @IA64_TRUE@libffi_la_OBJECTS = src/debug.lo src/prep_cif.lo \ + @IA64_TRUE@src/types.lo src/raw_api.lo src/java_raw_api.lo \ + @IA64_TRUE@src/ia64/ffi.lo src/ia64/unix.lo +diff -Nurp src.orig/libffi/Makefile.am src/libffi/Makefile.am +--- src.orig/libffi/src/x86/ffitarget.h 2004-08-03 22:07:21.000000000 -0400 ++++ src/libffi/src/x86/ffitarget.h 2004-08-03 22:01:00.000000000 -0400 +@@ -33,6 +33,11 @@ + #define X86 + #endif + ++#if defined (X86) && defined (__x86_64__) ++#undef X86 ++#define X86_64 ++#endif ++ + /* ---- Generic type definitions ----------------------------------------- */ + + #ifndef LIBFFI_ASM +diff -Nurp src.orig/libjava/configure.in src/libjava/configure.in +--- src.orig/libjava/configure.in 2004-08-03 22:07:21.000000000 -0400 ++++ src/libjava/configure.in 2004-08-03 22:01:00.000000000 -0400 +@@ -674,16 +674,17 @@ else + AC_DEFINE(HAVE_DLADDR, 1, [Define if you have dladdr()]) + fi + ]) +- if test x"$build" = x"$host"; then +- AC_CHECK_FILES(/proc/self/exe, [ +- AC_DEFINE(HAVE_PROC_SELF_EXE, 1, [Define if you have /proc/self/exe])]) +- else +- case $host in +- *-linux*) +- AC_DEFINE(HAVE_PROC_SELF_EXE, 1, [Define if you have /proc/self/exe]) +- ;; +- esac +- fi ++ case $host in ++ *-linux*) ++ AC_DEFINE(HAVE_PROC_SELF_EXE, 1, [Define if you have /proc/self/exe]) ++ ;; ++ *) ++ if test x"$build" = x"$host"; then ++ AC_CHECK_FILES(/proc/self/exe, [ ++ AC_DEFINE(HAVE_PROC_SELF_EXE, 1, [Define if you have /proc/self/exe])]) ++ fi ++ ;; ++ esac + + AM_ICONV + AM_LC_MESSAGES +diff -Nurp src.orig/libjava/include/i386-signal.h src/libjava/include/i386-signal.h +--- src.orig/libjava/include/i386-signal.h 2004-08-03 22:07:21.000000000 -0400 ++++ src/libjava/include/i386-signal.h 2004-08-03 22:01:00.000000000 -0400 +@@ -11,6 +11,10 @@ details. */ + + + #ifndef JAVA_SIGNAL_H ++#ifdef __x86_64__ ++#include "x86_64-signal.h" ++#else ++ + #define JAVA_SIGNAL_H 1 + + #include +@@ -163,6 +167,6 @@ while (0) + * Also, there is at the present time no unwind info in the + * linuxthreads library's signal handlers and so we can't unwind + * through them anyway. */ +- ++#endif /* ! __x86_64__ */ + #endif /* JAVA_SIGNAL_H */ + +diff -Nurp src.orig/libjava/sysdep/i386/locks.h src/libjava/sysdep/i386/locks.h +--- src.orig/libjava/sysdep/i386/locks.h 2004-08-03 22:07:21.000000000 -0400 ++++ src/libjava/sysdep/i386/locks.h 2004-08-03 22:01:00.000000000 -0400 +@@ -24,10 +24,17 @@ compare_and_swap(volatile obj_addr_t *ad + obj_addr_t new_val) + { + char result; +- __asm__ __volatile__("lock; cmpxchgl %2, %0; setz %1" +- : "=m"(*addr), "=q"(result) ++#ifdef __x86_64__ ++ __asm__ __volatile__("lock; cmpxchgq %2, %0; setz %1" ++ : "=m"(*(addr)), "=q"(result) + : "r" (new_val), "a"(old), "m"(*addr) + : "memory"); ++#else ++ __asm__ __volatile__("lock; cmpxchgl %2, %0; setz %1" ++ : "=m"(*(addr)), "=q"(result) ++ : "r" (new_val), "a"(old), "m"(*addr) ++ : "memory"); ++#endif + return (bool) result; + } + +diff -Nurp src.orig/libtool.m4 src/libtool.m4 +--- src.orig/libtool.m4 2004-08-03 22:07:21.000000000 -0400 ++++ src/libtool.m4 2004-08-03 22:01:00.000000000 -0400 +@@ -189,14 +189,14 @@ ia64-*-hpux*) + rm -rf conftest* + ;; + +-x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) ++i[[3456]]86-*-linux*|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + case $host in +- x86_64-*linux*) ++ i[[3456]]86-*-linux*|x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) +@@ -212,7 +212,7 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*li + ;; + *64-bit*) + case $host in +- x86_64-*linux*) ++ i[[3456]]86-*-linux*|x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) --- gcc-3.4-3.4.6.orig/debian/patches/m32r-pie.dpatch +++ gcc-3.4-3.4.6/debian/patches/m32r-pie.dpatch @@ -0,0 +1,77 @@ +#! /bin/sh -e +# +# +# DP: Author: Kazuhiro Inaoka +# DP: Status: in CVS 4.0-branch +# DP: PIE 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 -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 + +--- gcc-3.4.4/gcc/config.gcc.org 2005-07-29 19:31:19.000000000 +0900 ++++ gcc-3.4.4/gcc/config.gcc 2005-07-29 19:30:07.000000000 +0900 +@@ -1313,7 +1313,6 @@ + ;; + m32r-*-linux*) + tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} m32r/linux.h" +- extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" + tmake_file="t-slibgcc-elf-ver m32r/t-linux" + gnu_ld=yes + use_fixproto=yes +@@ -1323,7 +1322,6 @@ + ;; + m32rle-*-linux*) + tm_file="dbxelf.h elfos.h svr4.h linux.h m32r/little.h ${tm_file} m32r/linux.h" +- extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" + tmake_file="t-slibgcc-elf-ver m32r/t-linux" + gnu_ld=yes + use_fixproto=yes +--- gcc-3.4.4/gcc/config/m32r/m32r.h.org 2005-07-29 19:22:12.000000000 +0900 ++++ gcc-3.4.4/gcc/config/m32r/m32r.h 2005-07-29 19:24:34.000000000 +0900 +@@ -191,7 +191,7 @@ + + /* Options to pass on to the assembler. */ + #undef ASM_SPEC +-#define ASM_SPEC "%{v} %(asm_cpu) %(relax) %{fpic:-K PIC} %{fPIC:-K PIC}" ++#define ASM_SPEC "%{v} %(asm_cpu) %(relax) %{fpic|fpie:-K PIC} %{fPIC|fPIE:-K PIC}" + + #define LINK_SPEC "%{v} %(link_cpu) %(relax)" + +--- gcc-3.4.4/gcc/config/m32r/linux.h.org 2005-07-29 19:22:21.000000000 +0900 ++++ gcc-3.4.4/gcc/config/m32r/linux.h 2005-07-29 19:24:50.000000000 +0900 +@@ -85,14 +85,20 @@ + %{profile:-lc_p} %{!profile: -lc}}" + + #undef STARTFILE_SPEC ++#if defined HAVE_LD_PIE ++#define STARTFILE_SPEC \ ++ "%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \ ++ crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" ++#else + #define STARTFILE_SPEC \ + "%{!shared: \ + %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\ + crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" ++#endif + + #undef ENDFILE_SPEC + #define ENDFILE_SPEC \ +- "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" ++ "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" + + #undef SUBTARGET_CPP_SPEC + #define SUBTARGET_CPP_SPEC "\ --- gcc-3.4-3.4.6.orig/debian/patches/gpc-3.x.dpatch +++ gcc-3.4-3.4.6/debian/patches/gpc-3.x.dpatch @@ -0,0 +1,41 @@ +#! /bin/sh -e + +# DP: The gpc patch from the gpc tarball. + +if [ "x$gpc_gcc_patch" = "x" ] +then + gpc_gcc_patch=gcc-3.4.3.diff +fi + +pdir=gcc +if [ $# -eq 3 -a "$2" = '-d' ]; then + pdir="$3/gcc" +elif [ $# -ne 1 ]; then + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1 +fi + +gpc_gcc_patch=$pdir/p/diffs/gcc-3.4.5.diff + +case "$1" in + -patch) + # keep the backup files ... to regenerate p/diffs/${gpc_gcc_patch} + # dan@debian.org: no, don't. Apply it by hand if you need to regen. + # get the patch from the gpc source + echo Using patch file ${gpc_gcc_patch} + patch -d $pdir -f -p1 < ${gpc_gcc_patch} + #pf=`echo $0 | sed 's/\.dpatch/.diff/'` + #patch -d $pdir -f -p1 < $pf + ;; + -unpatch) + # get the patch from the gpc source + echo Using patch file ${gpc_gcc_patch} + patch -d $pdir -f -R -p1 < ${gpc_gcc_patch} + #pf=`echo $0 | sed 's/\.dpatch/.diff/'` + #patch -d $pdir -f -R -p1 < $pf + ;; + *) + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1 +esac +exit 0 --- gcc-3.4-3.4.6.orig/debian/patches/kbsd-gnu-ada.dpatch +++ gcc-3.4-3.4.6/debian/patches/kbsd-gnu-ada.dpatch @@ -0,0 +1,581 @@ +#! /bin/sh -e + +# Description: Ada support for GNU/k*BSD +# Author: Aurelien Jarno +# 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-3.4.4.old/gcc/ada/Makefile.in 2005-06-25 01:07:05.000000000 +0200 ++++ gcc-3.4.4/gcc/ada/Makefile.in 2005-06-25 01:07:33.000000000 +0200 +@@ -851,6 +851,32 @@ + endif + endif + ++ifeq ($(strip $(filter-out %86 kfreebsd%,$(arch) $(osys))),) ++ LIBGNAT_TARGET_PAIRS = \ ++ a-intnam.ads<45intnam.ads \ ++ g-soccon.ads<35soccon.ads \ ++ a-numaux.adb<86numaux.adb \ ++ a-numaux.ads<86numaux.ads \ ++ s-inmaop.adb<7sinmaop.adb \ ++ s-intman.adb<7sintman.adb \ ++ s-mastop.adb<5omastop.adb \ ++ s-osinte.adb<5iosinte.adb \ ++ s-osinte.ads<57osinte.ads \ ++ s-osprim.adb<7sosprim.adb \ ++ s-taprop.adb<5itaprop.adb \ ++ s-taspri.ads<5itaspri.ads \ ++ s-tpopsp.adb<5atpopsp.adb \ ++ system.ads<56system.ads ++ ++ TOOLS_TARGET_PAIRS = mlib-tgt.adb<5lml-tgt.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<45intnam.ads \ +--- gcc-3.4.4.old/gcc/ada/57osinte.ads 2005-06-25 01:06:36.000000000 +0200 ++++ gcc-3.4.4/gcc/ada/57osinte.ads 2005-06-25 01:06:03.000000000 +0200 +@@ -0,0 +1,514 @@ ++------------------------------------------------------------------------------ ++-- -- ++-- 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) 1992-2003 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, 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. -- ++-- -- ++-- 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 Elaborate_Body. ++-- It is designed to be a bottom-level (leaf) package. ++ ++with Interfaces.C; ++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; ++ type pthread_t is private; ++ subtype Thread_Id is 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 pthread_t is new unsigned_long; ++ ++ 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-3.4-3.4.6.orig/debian/patches/cpu-default-i486.dpatch +++ gcc-3.4-3.4.6/debian/patches/cpu-default-i486.dpatch @@ -0,0 +1,55 @@ +#! /bin/sh -e + +# DP: set default 32bit ix86 architecture to i486 + +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/i386.c.orig 2006-01-14 09:37:05.449714448 +0100 ++++ gcc/config/i386/i386.c 2006-01-14 09:41:48.031755448 +0100 +@@ -1232,7 +1232,7 @@ + ix86_tune_defaulted = 1; + } + if (!ix86_arch_string) +- ix86_arch_string = TARGET_64BIT ? "x86-64" : "i386"; ++ ix86_arch_string = TARGET_64BIT ? "x86-64" : "i486"; + + if (ix86_cmodel_string != 0) + { +--- gcc/config/i386/i386.h.orig 2005-05-10 03:16:52.000000000 +0200 ++++ gcc/config/i386/i386.h 2006-01-14 10:54:57.033525760 +0100 +@@ -94,13 +94,13 @@ + + /* Macros used in the machine description to test the flags. */ + +-/* configure can arrange to make this 2, to force a 486. */ ++/* configure can arrange to make this 1, 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 ++#define TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT_i486 + #endif + #endif + --- gcc-3.4-3.4.6.orig/debian/patches/m32r-auto.dpatch +++ gcc-3.4-3.4.6/debian/patches/m32r-auto.dpatch @@ -0,0 +1,97 @@ +#! /bin/sh -e +# +# +# DP: Author: Kazuhiro Inaoka +# DP: Fixed PR target/26775 target/26776 + +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 -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 + +--- gcc/gcc/config/m32r/m32r.c.orig 2006-03-01 16:28:44.000000000 +0900 ++++ gcc/gcc/config/m32r/m32r.c 2006-03-21 15:33:53.894564698 +0900 +@@ -2087,11 +2087,19 @@ m32r_output_function_epilogue (FILE * fi + else if (reg_offset < 32768) + fprintf (file, "\tadd3 %s,%s,%s%d\n", + sp_str, sp_str, IMMEDIATE_PREFIX, reg_offset); +- else ++ else if (reg_offset <= 0xffffff) + fprintf (file, "\tld24 %s,%s%d\n\tadd %s,%s\n", + reg_names[PROLOGUE_TMP_REGNUM], + IMMEDIATE_PREFIX, reg_offset, + sp_str, reg_names[PROLOGUE_TMP_REGNUM]); ++ else ++ fprintf (file, "\tseth %s,%shigh(%d)\n\tor3 %s,%s,%slow(%d)\n\tadd %s,%s\n", ++ reg_names[PROLOGUE_TMP_REGNUM], ++ IMMEDIATE_PREFIX, reg_offset, ++ reg_names[PROLOGUE_TMP_REGNUM], ++ reg_names[PROLOGUE_TMP_REGNUM], ++ IMMEDIATE_PREFIX, reg_offset, ++ sp_str, reg_names[PROLOGUE_TMP_REGNUM]); + } + else if (frame_pointer_needed) + { +@@ -2102,10 +2110,20 @@ m32r_output_function_epilogue (FILE * fi + else if (reg_offset < 32768) + fprintf (file, "\tadd3 %s,%s,%s%d\n", + sp_str, fp_str, IMMEDIATE_PREFIX, reg_offset); ++ else if (reg_offset <= 0xffffff) ++ fprintf (file, "\tld24 %s,%s%d\n\tadd %s,%s\n\tmv %s,%s\n", ++ reg_names[PROLOGUE_TMP_REGNUM], ++ IMMEDIATE_PREFIX, reg_offset, ++ reg_names[PROLOGUE_TMP_REGNUM], fp_str, ++ sp_str, reg_names[PROLOGUE_TMP_REGNUM]); + else +- fprintf (file, "\tld24 %s,%s%d\n\tadd %s,%s\n", ++ fprintf (file, "\tseth %s,%shigh(%d)\nor3 %s,%s,%slow(%d)\n\tadd %s,%s\n\tmv %s,%s\n", ++ reg_names[PROLOGUE_TMP_REGNUM], ++ IMMEDIATE_PREFIX, reg_offset, ++ reg_names[PROLOGUE_TMP_REGNUM], + reg_names[PROLOGUE_TMP_REGNUM], + IMMEDIATE_PREFIX, reg_offset, ++ reg_names[PROLOGUE_TMP_REGNUM], fp_str, + sp_str, reg_names[PROLOGUE_TMP_REGNUM]); + } + else +@@ -2127,8 +2145,26 @@ m32r_output_function_epilogue (FILE * fi + + /* Remove varargs area if present. */ + if (current_frame_info.pretend_size != 0) +- fprintf (file, "\taddi %s,%s%d\n", +- sp_str, IMMEDIATE_PREFIX, current_frame_info.pretend_size); ++ if (current_frame_info.pretend_size < 128) ++ fprintf (file, "\taddi %s,%s%d\n", ++ sp_str, IMMEDIATE_PREFIX, current_frame_info.pretend_size); ++ else if (current_frame_info.pretend_size < 32768) ++ fprintf (file, "\tadd3 %s,%s,%s%d\n", ++ sp_str, sp_str, IMMEDIATE_PREFIX, ++ current_frame_info.pretend_size); ++ else if (current_frame_info.pretend_size <= 0xffffff) ++ fprintf (file, "\tld24 %s,%s%d\n\tadd %s,%s\n", ++ reg_names[PROLOGUE_TMP_REGNUM], ++ IMMEDIATE_PREFIX, current_frame_info.pretend_size, ++ sp_str, reg_names[PROLOGUE_TMP_REGNUM]); ++ else ++ fprintf (file, "\tseth %s,%shigh(%d)\n\tor3 %s,%s,%slow(%d)\n\tadd %s,%s\n", ++ reg_names[PROLOGUE_TMP_REGNUM], ++ IMMEDIATE_PREFIX, current_frame_info.pretend_size, ++ reg_names[PROLOGUE_TMP_REGNUM], ++ reg_names[PROLOGUE_TMP_REGNUM], ++ IMMEDIATE_PREFIX, current_frame_info.pretend_size, ++ sp_str, reg_names[PROLOGUE_TMP_REGNUM]); + + /* Emit the return instruction. */ + if (M32R_INTERRUPT_P (fn_type)) --- gcc-3.4-3.4.6.orig/debian/patches/m32r-remove-addsi3.dpatch +++ gcc-3.4-3.4.6/debian/patches/m32r-remove-addsi3.dpatch @@ -0,0 +1,134 @@ +#! /bin/sh -e +# +# +# DP: Author: Kazuhiro Inaoka +# DP: Fixed FAIL gcc.dg/2004013-1.c. + +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 -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 + +--- gcc-3.4.4/gcc/config/m32r/m32r.c (revision 109855) ++++ gcc-3.4.4/gcc/config/m32r/m32r.c (working copy) +@@ -1028,6 +1028,20 @@ + { + case EQ: + if (GET_CODE (y) == CONST_INT ++ && UINT16_P (INTVAL (y)) /* Reg equal to small const. */ ++ && y != const0_rtx) ++ { ++ rtx tmp = gen_reg_rtx (SImode); ++ ++ emit_insn (gen_xorsi3 (tmp, x, GEN_INT (INTVAL (y)))); ++ x = tmp; ++ y = const0_rtx; ++ } ++#if 0 ++ /* ++ * Removed for miss optimizing at simplify_relational_operation(). ++ */ ++ else if (GET_CODE (y) == CONST_INT + && CMP_INT16_P (INTVAL (y)) /* Reg equal to small const. */ + && y != const0_rtx) + { +@@ -1037,6 +1051,7 @@ + x = tmp; + y = const0_rtx; + } ++#endif + else if (CONSTANT_P (y)) /* Reg equal to const. */ + { + rtx tmp = force_reg (GET_MODE (x), y); +@@ -1151,6 +1166,20 @@ + /* Reg/smallconst equal comparison. */ + if (compare_code == EQ + && GET_CODE (y) == CONST_INT ++ && UINT16_P (INTVAL (y))) ++ { ++ rtx tmp = gen_reg_rtx (SImode); ++ ++ emit_insn (gen_xorsi3 (tmp, x, GEN_INT (INTVAL (y)))); ++ return gen_rtx (code, CCmode, tmp, const0_rtx); ++ } ++ ++#if 0 ++ /* ++ * Removed for miss optimizing at simplify_relational_operation(). ++ */ ++ if (compare_code == EQ ++ && GET_CODE (y) == CONST_INT + && CMP_INT16_P (INTVAL (y))) + { + rtx tmp = gen_reg_rtx (SImode); +@@ -1158,6 +1187,7 @@ + emit_insn (gen_addsi3 (tmp, x, GEN_INT (-INTVAL (y)))); + return gen_rtx (code, CCmode, tmp, const0_rtx); + } ++#endif + + /* Reg/const equal comparison. */ + if (compare_code == EQ +Index: m32r.md +=================================================================== +--- gcc-3.4.4/gcc/config/m32r/m32r.md (revision 109855) ++++ gcc-3.4.4/gcc/config/m32r/m32r.md (working copy) +@@ -1690,7 +1691,7 @@ + DONE; + } + +- if (! reg_or_eq_int16_operand (op2, mode)) ++ if (! reg_or_uint16_operand (op2, mode)) + op2 = force_reg (mode, op2); + + emit_insn (gen_seq_insn (op0, op1, op2)); +@@ -1752,7 +1753,7 @@ + (define_insn "seq_insn" + [(set (match_operand:SI 0 "register_operand" "=r,r,??r,r") + (eq:SI (match_operand:SI 1 "register_operand" "r,r,r,r") +- (match_operand:SI 2 "reg_or_eq_int16_operand" "r,r,r,PK"))) ++ (match_operand:SI 2 "reg_or_uint16_operand" "r,r,r,K"))) + (clobber (reg:CC 17)) + (clobber (match_scratch:SI 3 "=1,2,&r,r"))] + "TARGET_M32R" +@@ -1763,7 +1764,7 @@ + (define_split + [(set (match_operand:SI 0 "register_operand" "") + (eq:SI (match_operand:SI 1 "register_operand" "") +- (match_operand:SI 2 "reg_or_eq_int16_operand" ""))) ++ (match_operand:SI 2 "reg_or_uint16_operand" ""))) + (clobber (reg:CC 17)) + (clobber (match_scratch:SI 3 ""))] + "TARGET_M32R && reload_completed" +@@ -1791,10 +1792,15 @@ + op1 = op3; + } + +- if (GET_CODE (op2) == CONST_INT && (value = INTVAL (op2)) != 0 +- && CMP_INT16_P (value)) +- emit_insn (gen_addsi3 (op3, op1, GEN_INT (-value))); +- else ++/* ++ * Removed for miss optimizing at simplify_relational_operation(). ++ * ++ * if (GET_CODE (op2) == CONST_INT && (value = INTVAL (op2)) != 0 ++ * && !(GET_CODE (op1) == REG && REG_POINTER (op1)) ++ * && CMP_INT16_P (value)) ++ * emit_insn (gen_addsi3 (op3, op1, GEN_INT (-value))); ++ * else ++ */ + emit_insn (gen_xorsi3 (op3, op1, op2)); + + emit_insn (gen_cmp_ltusi_insn (op3, GEN_INT (1))); --- gcc-3.4-3.4.6.orig/debian/patches/gpc-updates.dpatch +++ gcc-3.4-3.4.6/debian/patches/gpc-updates.dpatch @@ -0,0 +1,73 @@ +#! /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 + +From: Waldek Hebisch +Sender: gpc-owner@gnu.de +To: gpc@gnu.de +Subject: Re: New (20060215) snapshot +Date: Sat, 25 Feb 2006 13:43:33 +0100 (CET) + + +Investigating Chief's report I have found that GPC parser may crash +due to undetected parser stack overflow. To avoid the problem you +can either apply the following patch to `parse.c' or patch `parse.y' +and `glr.c' from bison distribution. The second way is "better", +but requires you to have bison-2.1 and to patch its installotion. +If you do not want to mess with bison patch to `parse.c' should be +enough to avoid problems with GPC. Patches to `parse.y' and `glr.c' +are in attachement. Both patches increase size of GPC parser stack. + + +--- ../../../rr/gpc/p/parse.c 2006-02-15 03:05:20.000000000 +0100 ++++ gcc/p/parse.c 2006-02-25 14:06:37.639531864 +0100 +@@ -287,6 +287,7 @@ + /* Copy the first part of user declarations. */ + #line 63 "parse.y" + ++#define YYMAXDEPTH 200000 + #include "gpc.h" + + /* A few keywords of some dialects can be parsed as regular identifiers +@@ -8277,7 +8278,7 @@ + size_t yysize, yynewSize; + size_t yyn; + yysize = yystack->yynextFree - yystack->yyitems; +- if (YYMAXDEPTH <= yysize) ++ if (YYMAXDEPTH < yysize + YYHEADROOM) + yyMemoryExhausted (yystack); + yynewSize = 2*yysize; + if (YYMAXDEPTH < yynewSize) + +--- gcc/p/predef.def~ 2006-02-14 08:14:19.000000000 +0100 ++++ gcc/p/predef.def 2006-02-28 18:24:42.585086192 +0100 +@@ -33,6 +33,10 @@ + The identifiers that are only attributes don't have separate + comments and are documented under `attribute'. */ + ++#if defined(noinline) ++#undef noinline ++#endif ++ + PREDEF_ID (all, GNU_PASCAL) /* extension (`export foo = all') */ + PREDEF_ID (export, E_O_PASCAL) /* module interface export */ + PREDEF_ID (ignorable, GNU_PASCAL) --- gcc-3.4-3.4.6.orig/debian/patches/gpc-bison-2.2.dpatch +++ gcc-3.4-3.4.6/debian/patches/gpc-bison-2.2.dpatch @@ -0,0 +1,162 @@ +#! /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: gpc fixes for bison-2.2 + +--- gcc/p/ChangeLog.orig Fri Mar 24 02:47:15 2006 ++++ gcc/p/ChangeLog Sat May 20 02:55:11 2006 +@@ -1,5 +1,22 @@ + ChangeLog -- Edit History for GPC, the GNU Pascal Compiler, since version 2.1 + ============================================================================= ++ ++2006-05-19 Frank Heckenbach ++ ++ * gpc.h: correct conditional check for including "parse.h" ++ (recent Bison versions output tokens as enum values, not ++ as #defines anymore) ++ ++ * parse.y: move most of the first section of C code below ++ the token declarations, so it doesn't appear in parse.h ++ with Bison 2.2, as it is parser-private stuff which would ++ cause some unused-warnings otherwise; correct "%expect-rr" ++ number as Bison 2.2 gives errors instead of warnings on ++ mismatch ++ ++ * utils/mk-t-inc: minor portability fix (some sed versions ++ require ";" before "}") ++ + 2006-03-09 Waldek Hebisch + + * predef.c: build_predef_call (): handle named exit from a method +--- gcc/p/gpc.h.orig Sat May 20 02:09:15 2006 ++++ gcc/p/gpc.h Sat May 20 02:12:07 2006 +@@ -887,7 +887,7 @@ + #define YYLTYPE_IS_DECLARED + + /* parse.c contains the same declarations again */ +-#ifndef LEX_ID ++#ifndef YYTOKENTYPE + #include "parse.h" + #endif + +--- gcc/p/parse.y.orig Fri Mar 24 02:47:15 2006 ++++ gcc/p/parse.y Sat May 20 02:37:44 2006 +@@ -66,38 +66,6 @@ + #ifdef GCC_4_0 + #include "cgraph.h" + #endif +- +-/* A few keywords of some dialects can be parsed as regular identifiers +- and checked from the parser actions => fewer special tokens. */ +-#define ASSERT_ID(id, location, pseudo_keyword) \ +- do if (!IDENTIFIER_IS_BUILT_IN (id, pseudo_keyword) || !PD_ACTIVE (IDENTIFIER_BUILT_IN_VALUE (id))) \ +- { yyerror_id (id, &location); YYERROR; } while (0) +- +-enum { od_none, od_uses, od_label, od_const, od_type, od_var, od_routine }; +-static int check_decl_order (int, int); +- +-extern int main_yyparse (void); +-#define yyparse main_yyparse +- +-union yyGLRStackItem; +-static void locations (YYLTYPE *, const union yyGLRStackItem *, int); +-#define YYLLOC_DEFAULT(DEST, SRC, N) locations (&DEST, SRC, N) +-#ifndef GCC_3_4 +-#define LOCATION_NOTE(LOC) if (current_function_decl) emit_line_note ((LOC).first_file, (LOC).first_line) +-#else +-#define LOCATION_NOTE(LOC) if (current_function_decl) \ +- { \ +- location_t loc_aux; \ +- loc_aux.file = (LOC).first_file; \ +- loc_aux.line = (LOC).first_line; \ +- emit_line_note (loc_aux); \ +- } +-#endif +-#define COPYLOC(D, S) /* @@ ? (* (YYLTYPE *) memcpy (&(D), &(S), sizeof (YYLTYPE))) */ (S) +- +-#define YYASSERT gcc_assert +-#define YYMALLOC (void *) xmalloc +-#define YYREALLOC (void *) xrealloc + %} + + %debug +@@ -106,7 +74,7 @@ + %glr-parser + %no-default-prec + %expect 62 +-%expect-rr 24 ++%expect-rr 25 + + /* The semantic values */ + %union { +@@ -206,6 +174,40 @@ + array_index_list remote_directive operator_symbol string_constant variant_list + rest_of_variant new_pointer_type conformant_array enumerated_type id_list1 err + optional_rename attrib id_list id optional_formal_parameter_list0 ++ ++%{ ++/* A few keywords of some dialects can be parsed as regular identifiers ++ and checked from the parser actions => fewer special tokens. */ ++#define ASSERT_ID(id, location, pseudo_keyword) \ ++ do if (!IDENTIFIER_IS_BUILT_IN (id, pseudo_keyword) || !PD_ACTIVE (IDENTIFIER_BUILT_IN_VALUE (id))) \ ++ { yyerror_id (id, &location); YYERROR; } while (0) ++ ++enum { od_none, od_uses, od_label, od_const, od_type, od_var, od_routine }; ++static int check_decl_order (int, int); ++ ++extern int main_yyparse (void); ++#define yyparse main_yyparse ++ ++union yyGLRStackItem; ++static void locations (YYLTYPE *, const union yyGLRStackItem *, int); ++#define YYLLOC_DEFAULT(DEST, SRC, N) locations (&DEST, SRC, N) ++#ifndef GCC_3_4 ++#define LOCATION_NOTE(LOC) if (current_function_decl) emit_line_note ((LOC).first_file, (LOC).first_line) ++#else ++#define LOCATION_NOTE(LOC) if (current_function_decl) \ ++ { \ ++ location_t loc_aux; \ ++ loc_aux.file = (LOC).first_file; \ ++ loc_aux.line = (LOC).first_line; \ ++ emit_line_note (loc_aux); \ ++ } ++#endif ++#define COPYLOC(D, S) /* @@ ? (* (YYLTYPE *) memcpy (&(D), &(S), sizeof (YYLTYPE))) */ (S) ++ ++#define YYASSERT gcc_assert ++#define YYMALLOC (void *) xmalloc ++#define YYREALLOC (void *) xrealloc ++%} + + %% + +--- gcc/p/utils/mk-t-inc.orig Sat May 20 02:48:14 2006 ++++ gcc/p/utils/mk-t-inc Sat May 20 02:48:16 2006 +@@ -71,6 +71,6 @@ + { + cat "$GCCDIR/tree.def" + echo 'DEFTREECODE (LAST_AND_UNUSED_C_TREE_CODE, "unused", '"'x', 0)" +- sed -e '/#ifdef EGCS/,${/#ifdef EGCS/d;/#else/,/#endif/d}' "$GCCDIR/p/p-tree.def" ++ sed -e '/#ifdef EGCS/,${/#ifdef EGCS/d;/#else/,/#endif/d;}' "$GCCDIR/p/p-tree.def" + } | sed -ne ':loop;/\\$/{N;b loop};/^DEFTREECODE/{s,/\*.*\*/,,;s/["'"'"']x["'"'"'].*/'"'x', 0)/;p;};/^#/p" + } > "$2" || { rm -f "$2"; false; } --- gcc-3.4-3.4.6.orig/debian/patches/gpc-20060215-20060322.dpatch +++ gcc-3.4-3.4.6/debian/patches/gpc-20060215-20060322.dpatch @@ -0,0 +1,5067 @@ +#! /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: gpc update 20060215-20060322 + +diff -urN gcc/p.old/ChangeLog gcc/p/ChangeLog +--- gcc/p.old/ChangeLog 2006-06-10 17:45:38.383386000 +0000 ++++ gcc/p/ChangeLog 2006-06-10 17:46:10.403386000 +0000 +@@ -1,5 +1,34 @@ + ChangeLog -- Edit History for GPC, the GNU Pascal Compiler, since version 2.1 + ============================================================================= ++2006-03-09 Waldek Hebisch ++ ++ * predef.c: build_predef_call (): handle named exit from a method ++ parse.y: allow qualified name as an argument for `Exit' ++ ++2006-03-05 Waldek Hebisch ++ ++ * parse.y: remove reduce-reduce conflict in `object_field_list' ++ ++2006-03-04 Waldek Hebisch ++ ++ * types.c: is_of_string_type (): check more strictly ++ ++2006-02-28 Waldek Hebisch ++ ++ * units/crtc.c: crt_Read (): add casts between `Char *' and ++ `char *'. ++ ++2006-02-28 Frank Heckenbach ++ ++ * types.c: select_integer_type (): Use at least integer ++ precision for arithmetic ++ ++2006-02-25 Waldek Hebisch ++ ++ * parse.y: increase YYMAXDEPTH ++ ++ * types.c: find_field (): remove `gcc_unreachable' ++ + 2006-02-14 Waldek Hebisch + + * predef.c: build_read (): in ISO mode require second argument +diff -urN gcc/p.old/Make-lang.in gcc/p/Make-lang.in +--- gcc/p.old/Make-lang.in 2006-06-10 17:45:38.383386000 +0000 ++++ gcc/p/Make-lang.in 2006-06-10 17:46:10.403386000 +0000 +@@ -52,14 +52,22 @@ + # `' for gcc-3.[0-3].x + # GCC_VERSION_FOR_GPC34 yields additionally: + # `34' for gcc-3.[4-9].x ++# GCC_VERSION_FOR_GPC40 yields additionally: ++# `40' for gcc-4.x + GPC_GCC_2_=2 + GPC_GCC_28_=8 + GPC_GCC_34_PPQ_=foo + GPC_GCC_34_PPP=$(GPC_GCC_34_PPQ_$(target_noncanonical)) + GPC_GCC_34_PP_=34 + GPC_GCC_34_=$(GPC_GCC_34_PP_$(GPC_GCC_34_PPP)) ++GPC_GCC_40_PPQ_=fallback_to_34 ++GPC_GCC_40_PPP=$(GPC_GCC_40_PPQ_$(TREE_GIMPLE_H)) ++GPC_GCC_40_PP_=40 ++GPC_GCC_40_PP_fallback_to_34=$(GPC_GCC_34_) ++GPC_GCC_40_=$(GPC_GCC_40_PP_$(GPC_GCC_40_PPP)) + GCC_VERSION_FOR_GPC=$(GPC_GCC_2_$(BACKEND))$(GPC_GCC_28_$(gcc_version)) + GCC_VERSION_FOR_GPC34=$(GCC_VERSION_FOR_GPC)$(GPC_GCC_34_) ++GCC_VERSION_FOR_GPC40=$(GCC_VERSION_FOR_GPC)$(GPC_GCC_40_) + GPC_GCC_VERSION_28=$(version) + GPC_GCC_VERSION_2=$(gcc_version) + GPC_GCC_VERSION_=$(gcc_version) +@@ -67,6 +75,8 @@ + GPC_GCC_VERSION_OBJS_28=pexecute.o + GPC_GCC_VERSION_OBJS_=intl.o + GPC_GCC_VERSION_OBJS=$(GPC_GCC_VERSION_OBJS_$(GCC_VERSION_FOR_GPC)) ++GPC_OBJS_FOR_40=p/gimplify.o ++GPC_OBJS_40=$(GPC_OBJS_FOR_$(GCC_VERSION_FOR_GPC40)) + GPC_GCC_VERSION_LINK_=p/diagnostic.o attribs.o main.o libbackend.a ../libiberty/libiberty.a + GPC_GCC_VERSION_LINK_2=`cat p/stamp-gbe` + GPC_GCC_VERSION_LINK_28=`cat p/stamp-gbe` choose-temp.o pexecute.o +@@ -575,7 +585,8 @@ + # Headers and flags for GPC specific files. + GPC_GBE_H=$(CONFIG_H) system.h tree.h input.h rtl.h flags.h output.h expr.h \ + except.h function.h convert.h toplev.h $(GPC_GCC_VERSION_H) +-P_H=$(GPC_GBE_H) p/gpc.h p/p-tree.def p/predef.def $(srcdir)/p/parse.h p/gbe.h ++P_H=$(GPC_GBE_H) p/gpc.h p/plant.h p/p-tree.def p/predef.def \ ++ $(srcdir)/p/parse.h p/gbe.h + ALL_GPC_FLAGS=$(ALL_CFLAGS) $(ALL_CPPFLAGS) $(GPC_ALL_WARNINGS) $(INCLUDES) \ + -DGPC -DGPC_UNITS_DIR=\"$(unitsubdir)\" -I$(srcdir)/p + +@@ -597,7 +608,7 @@ + p/typecheck.o p/types.o p/convert.o p/dbxout.o p/dwarf2out.o \ + p/expr.o p/fold-const.o p/function.o p/integrate.o p/optabs.o \ + p/stor-layout.o p/toplev.o p/tree.o p/stmt.o p/emit-rtl.o \ +- p/varasm.o p/version.o p/gpcpp.o ++ p/varasm.o p/version.o p/gpcpp.o p/plant.o $(GPC_OBJS_40) + + # Exclude patched files from language-independent object file list. + # Not necessary for gcc-3 since for a library (libbackend.a), the linker does this automatically. +@@ -620,7 +631,7 @@ + s: version.o::g;' "$<" > "$@" || { rm -f "$@"; false; } + + gpc1$(exeext): $(P) $(GPC_GCC_VERSION_DEPS) $(GPC_OBJS) $(LIBDEPS) +- @grep "@@ PATCHED FOR GPC 20051114 @@" $(srcdir)/stor-layout.c > /dev/null || \ ++ @grep "@@ PATCHED FOR GPC 20060322 @@" $(srcdir)/stor-layout.c > /dev/null || \ + { echo "*** There have been changes in the patch for GCC. Please start with a fresh"; \ + echo "*** copy of the GCC sources and do a new build, including configure."; \ + exit 1; } >&2 +@@ -657,6 +668,9 @@ + p/parse.o: $(srcdir)/p/parse.c $(P_H) + $(CC) -o $@ -c $(ALL_GPC_FLAGS) $(BIG_SWITCHFLAG) $< + ++p/plant.o: $(srcdir)/p/plant.c $(P_H) ++ $(CC) -o $@ -c $(ALL_GPC_FLAGS) $< ++ + p/predef.o: p/predef.c $(P_H) $(RTSSRCDIR)/constants.def + $(CC) -o $@ -c $(ALL_GPC_FLAGS) $< + +@@ -693,6 +707,9 @@ + p/function.o: function.c $(GPC_BE_H) + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + ++p/gimplify.o: gimplify.c $(GPC_BE_H) ++ $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< ++ + p/integrate.o: integrate.c $(GPC_BE_H) + $(CC) -o $@ -c $(ALL_GPC_GBE_FLAGS) $< + +diff -urN gcc/p.old/config-lang.in gcc/p/config-lang.in +--- gcc/p.old/config-lang.in 2006-06-10 17:45:38.383386000 +0000 ++++ gcc/p/config-lang.in 2006-06-10 17:46:10.403386000 +0000 +@@ -26,7 +26,7 @@ + language="pascal" + compilers="gpc1\$(exeext)" + stagestuff="gpc\$(exeext) gpc-cross\$(exeext) gpc1\$(exeext) gpcpp\$(exeext) libgpc.a" +-gtfiles="\$(srcdir)/p/gpc.h \$(srcdir)/p/declarations.c \$(srcdir)/p/module.c \$(srcdir)/p/predef.c" ++gtfiles="\$(srcdir)/p/gpc.h \$(srcdir)/p/declarations.c \$(srcdir)/p/module.c \$(srcdir)/p/predef.c \$(srcdir)/p/plant.c" + + #echo "in p/config-lang.in" + #echo "srcdir=$srcdir" +@@ -51,33 +51,45 @@ + + srcdir="$MY_SRCDIR" + +-version=`grep version_string "$srcdir/version.c" | sed -e 's/[^"]*"//;s/[ "].*//'` ++if [ -r "$srcdir/BASE-VER" ]; then ++ version=`cat "$srcdir/BASE-VER"` ++else ++ version=`grep version_string "$srcdir/version.c" | sed -e 's/[^"]*"//;s/[ "].*//'` ++fi ++ + mainversion="$version" + gcc281=y + gcc3=n +-if echo $version | grep '^2\.9' > /dev/null || echo $version | grep '^3\.[1-9]' > /dev/null; then ++if echo $version | grep '^2\.9' > /dev/null || echo $version | grep '^3\.[1-9]' > /dev/null || echo $version | grep '^4\.[0-9]' > /dev/null; then + gcc281=n + echo '#define EGCS' > "$gcc_version_h" +- if echo $version | grep '^2\.95\.[3-9]' > /dev/null || echo $version | grep '^3\.[1-9]' > /dev/null; then ++ if echo $version | grep '^2\.95\.[3-9]' > /dev/null || echo $version | grep '^3\.[1-9]' > /dev/null || echo $version | grep '^4\.[0-9]' > /dev/null; then + echo '#define GCC_2_95_3' >> "$gcc_version_h" + fi +- if echo $version | grep '^2\.9[6-9]' > /dev/null || echo $version | grep '^3\.[1-9]' > /dev/null; then ++ if echo $version | grep '^2\.9[6-9]' > /dev/null || echo $version | grep '^3\.[1-9]' > /dev/null || echo $version | grep '^4\.[0-9]' > /dev/null; then + gcc3=y + echo '#define EGCS97' >> "$gcc_version_h" +- if echo $version | grep '^3\.[3-9]' > /dev/null; then ++ if echo $version | grep '^3\.[3-9]' > /dev/null || echo $version | grep '^4\.[0-9]' > /dev/null; then + echo '#define GCC_3_3' >> "$gcc_version_h" +- if echo $version | grep '^3\.[4-9]' > /dev/null; then ++ if echo $version | grep '^3\.[4-9]' > /dev/null || echo $version | grep '^4\.[0-9]' > /dev/null; then + echo '#define GCC_3_4' >> "$gcc_version_h" +- if echo $version | grep '^3\.[5-9]' > /dev/null; then +- echo '#define GCC_3_5' >> "$gcc_version_h" ++ if echo $version | grep '^4\.[0-9]' > /dev/null; then ++ echo '#define GCC_4_0' >> "$gcc_version_h" + echo "" >&2 + echo "***" >&2 + echo "*** Detected GCC version $mainversion." >&2 +- echo "*** The GPC port for GCC > 3.4.x is still in an early state." >&2 ++ if echo $version | grep '^4\.[1-9]' > /dev/null; then ++ echo '#define GCC_4_1' >> "$gcc_version_h" ++ ++ echo "*** The GPC port for GCC > 4.0.x does not work." >&2 + echo "*** You can proceed now if you want to work on it." >&2 + echo "***" >&2 ++ else ++ echo "*** The GPC port for GCC 4.0.x is still in an early state." >&2 ++ echo "*** You can proceed now if you want to test it." >&2 ++ fi + echo "*** For a \"production compiler\" we currently still" >&2 +- echo "*** recommend GPC based on gcc 2.95.x, 3.2.x or 3.3.x" >&2 ++ echo "*** recommend GPC based on gcc 3.3.x or gcc 3.4.x" >&2 + echo "***" >&2 + echo "*** Press ENTER to continue, Ctrl-C to abort." >&2 + echo "***" >&2 +@@ -90,6 +102,17 @@ + echo "/* empty */" > "$gcc_version_h" + fi + ++if echo $version | grep '^2\.[89]' > /dev/null || echo $version | grep '^3\.[1-2]' > /dev/null; then ++ echo "*** Detected GCC version $mainversion." >&2 ++ echo "*** Using GPC with 2.x or 3.2.x backends is depreciated." >&2 ++ echo "*** In the future support for those backends will be dropped." >&2 ++ echo "*** We encourage you to try GPC based on gcc 3.3.x or gcc 3.4.x" >&2 ++ echo "***" >&2 ++ echo "*** Press ENTER to continue, Ctrl-C to abort." >&2 ++ echo "***" >&2 ++ read junk ++fi ++ + for x in 2.95.1 2.95.2 2.95.3 2.95.3-5 2.95.3-6 2.95.3-8 2.95.4; do + if [ ! -r "$srcdir/p/diffs/gcc-$x.diff" ]; then + (cd "$srcdir/p/diffs"; ln -s "gcc-2.95.diff" "gcc-$x.diff") +@@ -106,8 +129,11 @@ + if [ ! -r "$srcdir/p/diffs/gcc-3.4.5.diff" ]; then + (cd "$srcdir/p/diffs"; ln -s "gcc-3.4.4.diff" "gcc-3.4.5.diff") + fi ++if [ ! -r "$srcdir/p/diffs/gcc-3.4.6.diff" ]; then ++ (cd "$srcdir/p/diffs"; ln -s "gcc-3.4.4.diff" "gcc-3.4.6.diff") ++fi + +-if grep "@@ PATCHED FOR GPC 20051114 @@" "$srcdir/stor-layout.c" > /dev/null; then ++if grep "@@ PATCHED FOR GPC 20060322 @@" "$srcdir/stor-layout.c" > /dev/null; then + : + elif grep "@@ PATCHED FOR GPC" "$srcdir/stor-layout.c" > /dev/null; then + echo "" >&2 +diff -urN gcc/p.old/declarations.c gcc/p/declarations.c +--- gcc/p.old/declarations.c 2006-06-10 17:45:38.383386000 +0000 ++++ gcc/p/declarations.c 2006-06-10 17:46:10.403386000 +0000 +@@ -59,7 +59,7 @@ + tree current_function_decl; + #endif + +-tree pascal_global_trees[PTI_MAX]; ++tree pascal_global_trees[PTI_MAX] = {0}; + + /* Nonzero while defining an explicitly `packed' record. */ + int defining_packed_type = 0; +@@ -240,7 +240,8 @@ + static int resolve_forward_decl (tree); + static tree lookup_c_type (const char *); + static tree make_real (double); +-static tree gpc_builtin_routine (const char *, const char *, int, tree, tree); ++static tree gpc_builtin_routine (const char *, const char *, int, tree, ++ tree, tree); + #if defined (EGCS97) && !defined (GCC_3_3) + static void mark_binding_level (void *); + #endif +@@ -399,6 +400,8 @@ + + /* Output any nested inline functions within this block if not done yet. */ + for (t = decls; t; t = TREE_CHAIN (t)) ++ /* @@@@@@@@@@@@@@ */ ++#ifndef GCC_4_0 + if (TREE_CODE (t) == FUNCTION_DECL + && !TREE_ASM_WRITTEN (t) + && DECL_INITIAL (t) +@@ -415,8 +418,11 @@ + #endif + pop_function_context (); + } +- else if (TREE_CODE (t) == LABEL_DECL) ++ else ++#endif ++ if (TREE_CODE (t) == LABEL_DECL) + { ++ gcc_assert (DECL_CONTEXT (t)); + if (!PASCAL_LABEL_SET (t)) + { + error_with_decl (t, "label `%s' not set"); +@@ -488,6 +494,11 @@ + free (level); + #endif + ++#ifdef GCC_4_0 ++ if (current_function_decl) ++ plant_bind_block (block); ++#endif ++ + return block; + } + +@@ -571,7 +582,9 @@ + { + pushlevel (1); + current_binding_level->implicit = implicit; ++#ifndef GCC_4_0 + clear_last_expr (); ++#endif + expand_start_bindings (0); + } + +@@ -933,8 +946,10 @@ + TREE_THIS_VOLATILE (decl) |= TYPE_VOLATILE (type); + prediscriminate_schema (decl); + DECL_ARG_TYPE (decl) = TREE_TYPE (decl); ++#ifndef GCC_4_0 + if (PROMOTE_PROTOTYPES && ORDINAL_TYPE (TREE_CODE (type)) && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)) + DECL_ARG_TYPE (decl) = integer_type_node; ++#endif + TREE_CHAIN (decl) = list; + return decl; + } +@@ -1091,7 +1106,12 @@ + if (!DECL_INITIAL (x)) + { + DECL_RESULT (x) = DECL_RESULT (t); ++#ifndef GCC_4_0 ++ /* @@@@@@@@@@@@@@@@@@@@@@ */ + DECL_SAVED_INSNS (x) = DECL_SAVED_INSNS (t); ++#else ++ DECL_STRUCT_FUNCTION (x) = DECL_STRUCT_FUNCTION (t); ++#endif + DECL_ARGUMENTS (x) = DECL_ARGUMENTS (t); + #ifndef EGCS97 + DECL_FRAME_SIZE (x) = DECL_FRAME_SIZE (t); +@@ -1130,7 +1150,8 @@ + if (p && (p->kind == bk_const || p->kind == bk_type || p->kind == bk_var)) + t2 = p->decl; + } +- if (t2 && TREE_CODE_CLASS (TREE_CODE (t2)) == 'd' && DECL_LANG_SPECIFIC (t2) ++ if (t2 && TREE_CODE_CLASS (TREE_CODE (t2)) == tcc_declaration ++ && DECL_LANG_SPECIFIC (t2) + && DECL_LANG_SPECIFIC (t2)->used_in_scope >= current_binding_level->scope) + error ("identifier `%s' redeclared in a scope where an outer value was used", IDENTIFIER_NAME (name)); + +@@ -1253,15 +1274,27 @@ + { + tree label = pushdecl (build_decl (LABEL_DECL, id, void_type_node)); + gcc_assert (!EM (label)); ++// fprintf(stderr, "declare_label\n"); + if (!current_function_decl || co->longjmp_all_nonlocal_labels) + /* Create a jmp_buf variable for non-local gotos to this label. + `jmp_buf' is in fact `unsigned[5]' (see ../builtins.c). */ +- DECL_LANG_LABEL_JMPBUF (label) = make_new_variable ("jmpbuf", +- build_simple_array_type (unsigned_type_node, build_index_type (build_int_2 (5, 0)))); ++ { ++ tree d = make_new_variable ("jmpbuf", ++ build_simple_array_type (ptr_type_node, ++ build_index_type (build_int_2 (5, 0)))); ++ DECL_LANG_LABEL_JMPBUF (label) = d; ++ TREE_SIDE_EFFECTS (d) = TREE_THIS_VOLATILE (d) = 1; ++// fprintf(stderr, "make_new_variable: jmpbuf\n"); ++ } + else + { ++#ifndef GCC_4_0 + label_rtx (label); + declare_nonlocal_label (label); ++#else ++// fprintf(stderr, "declare_nonlocal_label\n"); ++ // gcc_assert (0); ++#endif + } + return label; + } +@@ -1310,7 +1343,12 @@ + } + TREE_USED (decl) = 1; + if (DECL_CONTEXT (decl) != current_function_decl) +- PASCAL_LABEL_NONLOCAL (decl) = 1; ++ { ++ PASCAL_LABEL_NONLOCAL (decl) = 1; ++#ifdef GCC_4_0 ++ mark_decl_referenced (decl); ++#endif ++ } + else + { + struct binding_level *b; +@@ -1334,7 +1372,12 @@ + } + } + } ++#ifndef GCC_4_0 + if (DECL_RTL_SET_P (decl)) ++#else ++ if (DECL_CONTEXT (decl) == current_function_decl ++ || !DECL_LANG_LABEL_JMPBUF (decl)) ++#endif + expand_goto (decl); + else if (DECL_CONTEXT (decl) || current_module->main_program) + { +@@ -1379,11 +1422,21 @@ + b->names_end = tree_last (b->names); + } + for (d = current_binding_level->names; d; d = TREE_CHAIN (d)) +- if (TREE_CODE (d) == LABEL_DECL && !DECL_RTL_SET_P (d)) ++ if (TREE_CODE (d) == LABEL_DECL ++#ifndef GCC_4_0 ++ && !DECL_RTL_SET_P (d) ++#endif ++ ) + { ++#ifndef GCC_4_0 + label_rtx (d); ++#endif + /* Avoid calling `setjmp' for labels that are only used locally */ +- if (TREE_USED (DECL_LANG_LABEL_JMPBUF (d))) ++ if (DECL_LANG_LABEL_JMPBUF (d) ++#ifndef GCC_4_0 ++ && TREE_USED (DECL_LANG_LABEL_JMPBUF (d)) ++#endif ++ ) + { + expand_start_cond (build_routine_call (setjmp_routine_node, + build_tree_list (NULL_TREE, build_unary_op (ADDR_EXPR, DECL_LANG_LABEL_JMPBUF (d), 0))), 0); +@@ -1451,7 +1504,7 @@ + lookup_name (tree name) + { + tree t = peek_name (name); +- if (t && TREE_CODE_CLASS (TREE_CODE (t)) == 'd') ++ if (t && TREE_CODE_CLASS (TREE_CODE (t)) == tcc_declaration) + { + /* Record that the declaration was used in the current scope, thus the + identifier may not be redefined there. Ideally, we'd store the scope +@@ -1788,7 +1841,11 @@ + global_binding_level = current_binding_level; + + #ifdef EGCS97 ++#ifdef GCC_4_0 ++ build_common_tree_nodes (0, 0); ++#else + build_common_tree_nodes (0); ++#endif + #else + error_mark_node = make_node (ERROR_MARK); + TREE_TYPE (error_mark_node) = error_mark_node; +@@ -1930,8 +1987,13 @@ + long_long_boolean_type_node = build_boolean_type (TYPE_PRECISION (long_long_unsigned_type_node)); + cboolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE); + TREE_SET_CODE (cboolean_type_node, BOOLEAN_TYPE); ++#ifndef GCC_4_0 + TYPE_MAX_VALUE (cboolean_type_node) = build_int_2 (1, 0); + TREE_TYPE (TYPE_MAX_VALUE (cboolean_type_node)) = cboolean_type_node; ++#else ++ TYPE_MAX_VALUE (cboolean_type_node) = ++ build_int_cst_wide (cboolean_type_node, 1, 0); ++#endif + TYPE_PRECISION (cboolean_type_node) = 1; + + /* Set alignment. */ +@@ -1961,8 +2023,12 @@ + TYPE_MODE (long_double_type_node))); + char_max_node = convert (char_type_node, TYPE_MAX_VALUE (char_type_node)); + complex_zero_node = build_complex (TREE_TYPE (real_zero_node), real_zero_node, real_zero_node); ++#ifndef GCC_4_0 + null_pointer_node = build_int_2 (0, 0); + TREE_TYPE (null_pointer_node) = ptr_type_node; ++#else ++ null_pointer_node = build_int_cst(ptr_type_node, 0); ++#endif + null_pseudo_const_node = build_indirect_ref (null_pointer_node, NULL); + + cstring_type_node = build_pointer_type (char_type_node); +@@ -1978,20 +2044,33 @@ + + #define dopar(type, next) tree_cons (NULL_TREE, type, next) + +- memcpy_routine_node = gpc_builtin_routine ("__builtin_memcpy", "memcpy", BUILT_IN_MEMCPY, +- ptr_type_node, dopar (ptr_type_node, dopar (const_ptr_type_node, dopar (sizetype, void_list_node)))); ++#define ATTR_NULL NULL_TREE ++#define ATTR_NORETURN_NOTHROW_LIST \ ++ tree_cons (get_identifier ("noreturn"), NULL_TREE, NULL_TREE) ++ /* tree_cons (get_identifier ("nothrow"), NULL_TREE, NULL_TREE) */ ++ ++ memcpy_routine_node = gpc_builtin_routine ("__builtin_memcpy", "memcpy", ++ BUILT_IN_MEMCPY, ++ ptr_type_node, dopar (ptr_type_node, dopar (const_ptr_type_node, dopar (sizetype, void_list_node))), ATTR_NULL); + memset_routine_node = gpc_builtin_routine ("__builtin_memset", "memset", BUILT_IN_MEMSET, +- ptr_type_node, dopar (ptr_type_node, dopar (integer_type_node, dopar (sizetype, void_list_node)))); ++ ptr_type_node, dopar (ptr_type_node, dopar (integer_type_node, dopar (sizetype, void_list_node))), ATTR_NULL); + strlen_routine_node = gpc_builtin_routine ("__builtin_strlen", "strlen", BUILT_IN_STRLEN, +- sizetype, dopar (build_pointer_type (p_build_type_variant (char_type_node, 1, 0)), void_list_node)); ++ sizetype, dopar (build_pointer_type (p_build_type_variant (char_type_node, 1, 0)), void_list_node), ATTR_NULL); + setjmp_routine_node = gpc_builtin_routine ("__builtin_setjmp", "setjmp", BUILT_IN_SETJMP, +- integer_type_node, dopar (ptr_type_node, void_list_node)); ++ integer_type_node, dopar (ptr_type_node, void_list_node), ATTR_NULL); + longjmp_routine_node = gpc_builtin_routine ("__builtin_longjmp", "longjmp", BUILT_IN_LONGJMP, +- void_type_node, dopar (ptr_type_node, dopar (integer_type_node, void_list_node))); ++ void_type_node, dopar (ptr_type_node, dopar (integer_type_node, void_list_node)), ATTR_NORETURN_NOTHROW_LIST); + return_address_routine_node = gpc_builtin_routine ("__builtin_return_address", NULL, BUILT_IN_RETURN_ADDRESS, +- ptr_type_node, dopar (unsigned_type_node, void_list_node)); ++ ptr_type_node, dopar (unsigned_type_node, void_list_node), ATTR_NULL); + frame_address_routine_node = gpc_builtin_routine ("__builtin_frame_address", NULL, BUILT_IN_FRAME_ADDRESS, +- ptr_type_node, dopar (unsigned_type_node, void_list_node)); ++ ptr_type_node, dopar (unsigned_type_node, void_list_node), ATTR_NULL); ++ ++#ifdef GCC_4_0 ++ build_common_builtin_nodes (); ++ (*targetm.init_builtins) (); ++ ++ main_identifier_node = get_identifier ("main"); ++#endif + + pedantic_lvalues = pedantic; + +@@ -2008,7 +2087,7 @@ + If LIBRARY_NAME is nonzero, use that as the name to be called if we + can't opencode the function. */ + static tree +-gpc_builtin_routine (const char *name, const char *library_name, int function_code, tree resulttype, tree args) ++gpc_builtin_routine (const char *name, const char *library_name, int function_code, tree resulttype, tree args, tree attributes) + { + tree decl = build_decl (FUNCTION_DECL, get_identifier (name), build_function_type (resulttype, args)); + DECL_EXTERNAL (decl) = 1; +@@ -2016,10 +2095,12 @@ + if (library_name) + SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name)); + #ifdef EGCS97 ++#ifndef GCC_4_0 + make_decl_rtl (decl, NULL); ++#endif + DECL_BUILT_IN_CLASS (decl) = BUILT_IN_NORMAL; + DECL_FUNCTION_CODE (decl) = function_code; +- decl_attributes (&decl, NULL_TREE, 0); ++ decl_attributes (&decl, attributes, 0); + #else + make_decl_rtl (decl, NULL, 1); + DECL_BUILT_IN (decl) = 1; +@@ -2031,13 +2112,19 @@ + #ifdef EGCS97 + tree + #ifdef GCC_3_3 +-builtin_function (const char *name, tree type, int function_code, enum built_in_class class ATTRIBUTE_UNUSED, const char *library_name, tree dummy ATTRIBUTE_UNUSED) ++builtin_function (const char *name, tree type, int function_code, enum built_in_class class ATTRIBUTE_UNUSED, const char *library_name, tree attributes) + #else + builtin_function (const char *name, tree type, int function_code, enum built_in_class class ATTRIBUTE_UNUSED, const char *library_name) + #endif + { + return gpc_builtin_routine (name, library_name, function_code, +- TREE_TYPE (type), TYPE_ARG_TYPES (type)); ++ TREE_TYPE (type), TYPE_ARG_TYPES (type), ++#ifdef GCC_3_3 ++ attributes ++#else ++ NULL_TREE ++#endif ++ ); + } + #endif + +@@ -2212,7 +2299,7 @@ + check_id_redeclaration (tree name, const char * msg) + { + tree t = peek_name (name); +- if (t && TREE_CODE_CLASS (TREE_CODE (t)) == 'd' ++ if (t && TREE_CODE_CLASS (TREE_CODE (t)) == tcc_declaration + && DECL_LANG_SPECIFIC (t) + && DECL_LANG_SPECIFIC (t)->used_in_scope >= current_binding_level->scope) + { +@@ -2312,18 +2399,30 @@ + if (bits) + { + /* Explicit `packed' record, ordinal field (which can be bit-packed) */ ++#if 1 + if (uns != TYPE_UNSIGNED (type)) + { + TREE_TYPE (x) = type = build_type_copy (type); + new_main_variant (type); + TYPE_UNSIGNED (type) = uns; + } ++#else ++ /* @@@@ In principle we should do this, but it causes problems ++ in inipak1[lm].pas and sam9.pas */ ++ TREE_TYPE (x) = type = build_type_copy (type); ++ new_main_variant (type); ++ TYPE_UNSIGNED (type) = uns; ++ TYPE_PRECISION (type) = TREE_INT_CST_LOW (bits); ++#endif + #ifdef EGCS97 + DECL_SIZE (x) = bitsize_int (TREE_INT_CST_LOW (bits)); + #else + DECL_FIELD_SIZE (x) = TREE_INT_CST_LOW (bits); + #endif + DECL_BIT_FIELD (x) = 1; ++#ifdef GCC_4_0 ++ DECL_NONADDRESSABLE_P (x) = 1; ++#endif + #if 0 + DECL_PACKED (x) = 0; /* suppress warning with `-Wpacked' */ + #endif +@@ -2623,7 +2722,9 @@ + else + SET_DECL_ASSEMBLER_NAME (d, mangle_name (name)); + ++#ifndef GCC_4_0 + rest_of_decl_compilation (d, 0, !DECL_CONTEXT (d), 1 /* for GPC */); ++#endif + + /* Prevent the optimizer from removing it if it is public. */ + if (TREE_PUBLIC (d)) +@@ -2656,7 +2757,9 @@ + if (attributes & ER_CONST) + TREE_READONLY (d) = 1; + mark_addressable (d); ++#ifndef GCC_4_0 + rest_of_decl_compilation (d, NULL, 1, 1); ++#endif + return d; + } + +@@ -2979,8 +3082,10 @@ + #ifndef EGCS97 + make_function_rtl (decl); + #else ++#ifndef GCC_4_0 + make_decl_rtl (decl, NULL); + #endif ++#endif + immediate_size_expand = 0; + DECL_RESULT (decl) = build_decl (RESULT_DECL, NULL_TREE, + PROMOTING_INTEGER_TYPE (type) ? integer_type_node : type); +@@ -3119,8 +3224,10 @@ + make_function_rtl (decl); + temporary_allocation (); + #else ++#ifndef GCC_4_0 + make_decl_rtl (decl, NULL); + #endif ++#endif + #ifndef GCC_3_4 + init_function_start (decl, input_filename, lineno); + #else +@@ -3178,8 +3285,10 @@ + /* Obey `register' declarations if `setjmp' is called in this fn. */ + if (current_function_calls_setjmp) + { ++#ifndef GCC_4_0 + setjmp_protect (DECL_INITIAL (fndecl)); + setjmp_protect_args (); ++#endif + } + + /* Generate rtl for function exit. */ +@@ -3196,8 +3305,11 @@ + ggc_push_context (); + #endif + ++ + /* Run the optimizers and output the assembler code for this function. */ ++#ifndef GCC_4_0 + rest_of_compilation (fndecl); ++#endif + + if (DECL_LANG_RESULT_VARIABLE (fndecl)) + DECL_LANG_RESULT_VARIABLE (fndecl) = DECL_NAME (DECL_LANG_RESULT_VARIABLE (fndecl)); +@@ -3211,7 +3323,12 @@ + ggc_pop_context (); + #endif + ++#ifndef GCC_4_0 ++#ifndef GCC_4_0 + if (!DECL_SAVED_INSNS (fndecl)) ++#else ++ if (!DECL_STRUCT_FUNCTION (fndecl)) ++#endif + { + /* Stop pointing to the local nodes about to be freed. But DECL_INITIAL + must remain nonzero (unless rest_of_compilation set this to 0), +@@ -3220,6 +3337,7 @@ + DECL_INITIAL (fndecl) = error_mark_node; + DECL_ARGUMENTS (fndecl) = NULL_TREE; + } ++#endif + if (outer_function_chain) + pop_function_context (); + else +@@ -3373,7 +3491,9 @@ + tree type = TREE_TYPE (TREE_PURPOSE (scan)); + tree decl = pushdecl (TREE_PURPOSE (scan)); + gcc_assert (!EM (decl)); ++#ifndef GCC_4_0 + rest_of_decl_compilation (decl, NULL, !DECL_CONTEXT (decl), 0); ++#endif + handle_autoexport (TREE_VALUE (scan)); + if (TYPE_STUB_DECL (type)) + rest_of_type_compilation (type, current_binding_level == global_binding_level); +@@ -3515,14 +3635,21 @@ + && TREE_CODE (value) != FIX_TRUNC_EXPR) + error ("constant has non-constant value"); + if (!TREE_CONSTANT (value)) /* @@ Better: if contains SAVE_EXPR ... */ ++#ifndef GCC_4_0 + value = unsave_expr (value); ++#else ++ if (pascal_global_bindings_p () && !EM (TREE_TYPE (value))) ++ value = save_nonconstants (value); ++#endif + + value = set_exp_original_code (value, ERROR_MARK); + d = build_decl (CONST_DECL, name, TREE_TYPE (value)); + DECL_INITIAL (d) = value; + pushdecl (d); + handle_autoexport (name); ++#ifndef GCC_4_0 + rest_of_decl_compilation (d, NULL, pascal_global_bindings_p (), 0); ++#endif + return d; + } + +@@ -3845,17 +3972,25 @@ + + if (!DECL_ARTIFICIAL (d)) + d = pushdecl (d); ++#ifdef GCC_4_0 ++ else ++ pushdecl_nocheck (d); ++#endif + gcc_assert (!EM (d)); + + if (local_static) + DECL_CONTEXT (d) = NULL_TREE; /* for deferred initializers */ + + /* Output the assembler code and/or RTL code. */ ++#ifndef GCC_4_0 + rest_of_decl_compilation (d, NULL, !DECL_CONTEXT (d), 1 /* for GPC */); ++#endif + ++#ifndef GCC_4_0 + /* Compute and store the initial value. */ + if (DECL_CONTEXT (d)) + expand_decl_init (d); ++#endif + + /* d might be a pointer to an undiscriminated schema. At this point, + we can pre-discriminate it using its own contents. */ +@@ -3926,9 +4061,21 @@ + if (!model || PASCAL_TYPE_UNDISCRIMINATED_STRING (model)) + { + int isstring = is_string_compatible_type (data, 1); ++ tree slen, olen; + gcc_assert (isstring); ++ olen = PASCAL_STRING_LENGTH (data); ++#if 0 ++ /* @@@@@ this caused problem with cstrassign.pas */ ++ if (copy) ++ { ++ slen = make_new_variable ("string_len", TREE_TYPE (olen)); ++ expand_expr_stmt1 (build_modify_expr (slen, NOP_EXPR, olen)); ++ } ++ else ++#endif ++ slen = save_expr (olen); + type = build_pascal_string_schema ( +- build_pascal_binary_op (MAX_EXPR, integer_one_node, save_expr (PASCAL_STRING_LENGTH (data)))); ++ build_pascal_binary_op (MAX_EXPR, integer_one_node, slen)); + } + else + type = TYPE_MAIN_VARIANT (model); +diff -urN gcc/p.old/doc/en/news.texi gcc/p/doc/en/news.texi +--- gcc/p.old/doc/en/news.texi 2006-06-10 17:45:38.423386000 +0000 ++++ gcc/p/doc/en/news.texi 2006-06-10 17:46:10.433386000 +0000 +@@ -39,6 +39,10 @@ + @samp{(@@)}. + + @itemize @bullet ++@item preliminary support for gcc-4.0.x ++@item handle named exit from a method ++@item check string parameters more strictly (@@) ++@item use at least integer precision for arithmetic (@@) + @item refuse @samp{--executable-file-name} on names without a suffix + @item do not create @samp{.gpi} files from incorrect input + @item @samp{CWordBool} type +diff -urN gcc/p.old/doc/en/todo.texi gcc/p/doc/en/todo.texi +--- gcc/p.old/doc/en/todo.texi 2006-06-10 17:45:38.423386000 +0000 ++++ gcc/p/doc/en/todo.texi 2006-06-10 17:46:10.433386000 +0000 +@@ -197,6 +197,12 @@ + @ref{News}. + + @itemize @bullet ++@item 20060304: Do not allow passing strings to parameters of type array of ++char subrange (avoids passing out of range values). ++@item 20060228: Use at least integer precision for arithmetic (avoids ++loss of precision due to overflow) ++@item 20060225: Avoid ICE on some record types ++@item 20060225: Avoid segfault in bison parser + @item 20060214: Avoid ICE on unimplemented operators (ice4.pas) + @item 20060214: Avoid ICE on bad forward declaration (ice3.pas) + @item 20060214: ISO-10206 requires at least one output parameter +diff -urN gcc/p.old/expressions.c gcc/p/expressions.c +--- gcc/p.old/expressions.c 2006-06-10 17:45:38.393386000 +0000 ++++ gcc/p/expressions.c 2006-06-10 17:46:10.403386000 +0000 +@@ -28,6 +28,11 @@ + + #include "gpc.h" + ++#ifdef GCC_4_0 ++#include "tree-gimple.h" ++#endif ++ ++ + static int implicit_comparison = 0; + int operators_defined = 0; + +@@ -55,6 +60,7 @@ + set_string_length (tree value, int wide_flag, int length) + { + gcc_assert (length >= 0); ++// length ++; + TREE_TYPE (value) = build_simple_array_type (p_build_type_variant ( + wide_flag ? wchar_type_node : char_type_node, 1, 0), + build_range_type (pascal_integer_type_node, integer_one_node, +@@ -196,9 +202,14 @@ + *q++ = 0; + else + *q = 0; ++#ifdef GCC_4_0 ++ value = build_string (length, p); ++ free (p); ++#else + value = make_node (STRING_CST); + TREE_STRING_POINTER (value) = p; + TREE_STRING_LENGTH (value) = length; ++#endif + PASCAL_CST_FRESH (value) = !!mode; + set_string_length (value, wide_flag, wide_flag ? length / wchar_bytes : length - 1); + return value; +@@ -217,7 +228,7 @@ + } + + tree +-build_range_check(tree min, tree max, tree expr, int is_io) ++build_range_check (tree min, tree max, tree expr, int is_io, int gimplifying) + { + int chklo = min != NULL_TREE; + int chkhi = max != NULL_TREE; +@@ -238,7 +249,15 @@ + #else + int side_effects = TREE_SIDE_EFFECTS (expr); + tree cond, tv, t; +- tree tmpvar = make_new_variable ("range_check", TREE_TYPE (expr)); ++ tree tmpvar = ++#ifdef GCC_4_0 ++ gimplifying ? ++ create_tmp_var (TREE_TYPE (expr), "range_check") : ++#endif ++ make_new_variable ("range_check", TREE_TYPE (expr)); ++#ifndef GCC_4_0 ++ gcc_assert(!gimplifying); ++#endif + tv = build (MODIFY_EXPR, TREE_TYPE (expr), tmpvar, expr); + TREE_SIDE_EFFECTS (tv) = 1; + PASCAL_VALUE_ASSIGNED (tmpvar) = 1; +@@ -250,7 +269,7 @@ + } + t = build (COMPOUND_EXPR, TREE_TYPE (tmpvar), + build_predef_call (is_io ? p_IORangeCheckError : p_RangeCheckError, +- NULL_TREE), tmpvar); ++ NULL_TREE), tmpvar /* min? min : max */); + t = build (COND_EXPR, TREE_TYPE (tmpvar), cond, t, tmpvar); + t = build (COMPOUND_EXPR, TREE_TYPE (t), tv, t); + return t; +@@ -309,7 +328,7 @@ + max = NULL_TREE; + + if (TREE_SIDE_EFFECTS (expr)) +- return build_range_check(min, max, expr, co->range_checking>1); ++ return build_range_check(min, max, expr, co->range_checking>1, 0); + else if (co->range_checking>1) + code = IO_RANGE_CHECK_EXPR; + else +@@ -374,8 +393,8 @@ + check_discriminants (tree x, tree y) + { + tree fx, fy, cond = NULL_TREE; +- tree tx = TREE_CODE_CLASS (TREE_CODE (x)) == 't' ? x : TREE_TYPE (x); +- tree ty = TREE_CODE_CLASS (TREE_CODE (y)) == 't' ? y : TREE_TYPE (y); ++ tree tx = TREE_CODE_CLASS (TREE_CODE (x)) == tcc_type ? x : TREE_TYPE (x); ++ tree ty = TREE_CODE_CLASS (TREE_CODE (y)) == tcc_type ? y : TREE_TYPE (y); + if (PASCAL_TYPE_SCHEMA (tx) && PASCAL_TYPE_SCHEMA (ty) + && TYPE_LANG_BASE (tx) == TYPE_LANG_BASE (ty)) + { +@@ -498,7 +517,8 @@ + + /* For "fresh" constants try the most basic and the longest type. + For Char constants try Char and String. */ +- if (TREE_CODE_CLASS (TREE_CODE (arg1)) == 'c' && PASCAL_CST_FRESH (arg1)) ++ if (TREE_CODE_CLASS (TREE_CODE (arg1)) == tcc_constant ++ && PASCAL_CST_FRESH (arg1)) + { + if (TREE_CODE (arg1) == INTEGER_CST && TREE_CODE (TREE_TYPE (arg1)) == INTEGER_TYPE) + { +@@ -518,13 +538,15 @@ + if (found) + return found; + } +- if (TREE_CODE_CLASS (TREE_CODE (arg1)) != 't' && is_string_compatible_type (arg1, 0)) ++ if (TREE_CODE_CLASS (TREE_CODE (arg1)) != tcc_type ++ && is_string_compatible_type (arg1, 0)) + { + found = get_operator (op_id, op_name, string_schema_proto_type, arg2, new); + if (found) + return found; + } +- if (TREE_CODE_CLASS (TREE_CODE (arg2)) == 'c' && PASCAL_CST_FRESH (arg2)) ++ if (TREE_CODE_CLASS (TREE_CODE (arg2)) == tcc_constant ++ && PASCAL_CST_FRESH (arg2)) + { + if (TREE_CODE (arg2) == INTEGER_CST && TREE_CODE (TREE_TYPE (arg2)) == INTEGER_TYPE) + { +@@ -544,7 +566,8 @@ + if (found) + return found; + } +- if (TREE_CODE_CLASS (TREE_CODE (arg2)) != 't' && is_string_compatible_type (arg2, 0)) ++ if (TREE_CODE_CLASS (TREE_CODE (arg2)) != tcc_type ++ && is_string_compatible_type (arg2, 0)) + { + found = get_operator (op_id, op_name, arg1, string_schema_proto_type, new); + if (found) +@@ -734,7 +757,8 @@ + } + + /* Flag constants in parentheses for ISO 7185. */ +- if ((TREE_CODE_CLASS (TREE_CODE (t)) == 'c' || TREE_CODE (t) == NON_LVALUE_EXPR) ++ if ((TREE_CODE_CLASS (TREE_CODE (t)) == tcc_constant ++ || TREE_CODE (t) == NON_LVALUE_EXPR) + && PASCAL_CST_PARENTHESES (t) != (code == NOP_EXPR)) + { + t = copy_node (t); +@@ -1059,7 +1083,8 @@ + } + + result = build_pascal_binary_op (code, exp1, exp2); +- if (TREE_CODE_CLASS (TREE_CODE (result)) == 'c' && TREE_OVERFLOW (result)) ++ if (TREE_CODE_CLASS (TREE_CODE (result)) == tcc_constant ++ && TREE_OVERFLOW (result)) + { + TREE_OVERFLOW (result) = 0; + error ("constant overflow in expression"); +@@ -1593,7 +1618,8 @@ + } + + result = build_binary_op (code, exp1, exp2); +- if (TREE_CODE_CLASS (TREE_CODE (result)) == 'c' && TREE_OVERFLOW (result)) ++ if (TREE_CODE_CLASS (TREE_CODE (result)) == tcc_constant ++ && TREE_OVERFLOW (result)) + error ("arithmetical overflow"); + return result; + } +@@ -1662,8 +1688,8 @@ + + /* -42 is still a simple constant, but -(42) is not. */ + if ((code == NEGATE_EXPR || code == CONVERT_EXPR) +- && TREE_CODE_CLASS (TREE_CODE (t)) == 'c' +- && TREE_CODE_CLASS (TREE_CODE (xarg)) == 'c') ++ && TREE_CODE_CLASS (TREE_CODE (t)) == tcc_constant ++ && TREE_CODE_CLASS (TREE_CODE (xarg)) == tcc_constant) + { + PASCAL_CST_FRESH (t) = PASCAL_CST_FRESH (xarg); + PASCAL_CST_PARENTHESES (t) = PASCAL_CST_PARENTHESES (xarg); +@@ -1820,10 +1846,14 @@ + { + tree length = convert (pascal_integer_type_node, + build_int_2 (TREE_STRING_LENGTH (factor) - 1, 0)); ++ tree st = build_pascal_string_schema (length); ++ tree capf = TYPE_FIELDS (st); ++ tree lenf = TREE_CHAIN (capf); ++ tree schf = TREE_CHAIN (lenf); + factor = build_constructor (build_pascal_string_schema (length), +- tree_cons (NULL_TREE, length, +- tree_cons (NULL_TREE, length, +- build_tree_list (NULL_TREE, factor)))); ++ tree_cons (capf, length, ++ tree_cons (lenf, length, ++ build_tree_list (schf, factor)))); + /* Make this a valid lvalue for taking addresses. */ + TREE_CONSTANT (factor) = 1; + TREE_STATIC (factor) = 1; +@@ -1839,7 +1869,7 @@ + if (TREE_CODE (t) == VAR_DECL) + PASCAL_VALUE_ASSIGNED (t) = 1; + +- if (TREE_CODE_CLASS (TREE_CODE (t)) == 'c') ++ if (TREE_CODE_CLASS (TREE_CODE (t)) == tcc_constant) + { + error ("trying to take the address of a constant"); + return error_mark_node; +@@ -2194,6 +2224,8 @@ + truthvalue_conversion (tree expr) + { + CHK_EM (expr); ++ /* @@@@@@@@@ Gimplifier puts error_mark_node as a type */ ++ CHK_EM (TREE_TYPE (expr)); + switch (TREE_CODE (expr)) + { + case EQ_EXPR: +@@ -2202,13 +2234,19 @@ + case GE_EXPR: + case LT_EXPR: + case GT_EXPR: ++ return convert (boolean_type_node, expr); ++ + case TRUTH_ANDIF_EXPR: + case TRUTH_ORIF_EXPR: + case TRUTH_AND_EXPR: + case TRUTH_OR_EXPR: + case TRUTH_XOR_EXPR: + case TRUTH_NOT_EXPR: +- gcc_assert (TREE_TYPE (expr) == boolean_type_node); ++ if (TREE_TYPE (expr) != boolean_type_node) ++ return fold (build (TREE_CODE (expr), boolean_type_node, ++ truthvalue_conversion (TREE_OPERAND (expr, 0)), ++ truthvalue_conversion (TREE_OPERAND (expr, 1)))); ++// gcc_assert (TREE_TYPE (expr) == boolean_type_node); + return expr; + + case INTEGER_CST: +@@ -2675,7 +2713,9 @@ + + /* dead code was here */ + case IN_EXPR: ++#ifndef GCC_4_0 + case CARD_EXPR: ++#endif + gcc_unreachable (); + + default: +@@ -2929,7 +2969,12 @@ + #else + t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type), size_int (BITS_PER_UNIT)); + #endif ++#ifdef GCC_4_0 ++ if (TREE_CODE (t) == INTEGER_CST) ++ force_fit_type (t, 0, 0, 0); ++#else + force_fit_type (t, 0); ++#endif + return t; + } + +@@ -3152,7 +3197,7 @@ + to which the address will point. Note that you can't get a + restricted pointer by taking the address of something, so we + only have to deal with `const' and `volatile' here. */ +- if ((DECL_P (arg) || TREE_CODE_CLASS (TREE_CODE (arg)) == 'r') ++ if ((DECL_P (arg) || TREE_CODE_CLASS (TREE_CODE (arg)) == tcc_reference) + && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg))) + argtype = c_build_type_variant (argtype, TREE_READONLY (arg), TREE_THIS_VOLATILE (arg)); + +@@ -3162,8 +3207,11 @@ + return error_mark_node; + + if (TREE_CODE (arg) == BIT_FIELD_REF && PASCAL_TYPE_PACKED (TREE_TYPE (TREE_OPERAND (arg, 0)))) +- error ("invalid use of component of packed array `%s'", ++ { ++ error ("invalid use of component of packed array `%s'", + IDENTIFIER_NAME (DECL_NAME (TREE_OPERAND (arg, 0)))); ++ return error_mark_node; ++ } + + if (TREE_CODE (arg) == COMPONENT_REF) + { +@@ -3239,7 +3287,8 @@ + + if (type == TREE_TYPE (value)) + { +- if (TREE_CODE_CLASS (TREE_CODE (value)) == 'c' && PASCAL_CST_FRESH (value)) ++ if (TREE_CODE_CLASS (TREE_CODE (value)) == tcc_constant ++ && PASCAL_CST_FRESH (value)) + { + value = copy_node (value); + PASCAL_CST_FRESH (value) = 0; +@@ -3767,8 +3816,15 @@ + } + lastfield = tree_last (field); + return build_memcpy ( ++#ifndef GCC_4_0 + build_unary_op (ADDR_EXPR, build (COMPONENT_REF, TREE_TYPE (field), lhs, field), 1), + build_unary_op (ADDR_EXPR, build (COMPONENT_REF, TREE_TYPE (field2), rhs, field2), 2), ++#else ++ build_unary_op (ADDR_EXPR, build3 (COMPONENT_REF, TREE_TYPE (field), ++ lhs, field, NULL_TREE), 1), ++ build_unary_op (ADDR_EXPR, build3 (COMPONENT_REF, TREE_TYPE (field2), ++ rhs, field2, NULL_TREE), 2), ++#endif + size_binop (CEIL_DIV_EXPR, + size_binop (MINUS_EXPR, size_binop (PLUS_EXPR, bit_position (lastfield), DECL_SIZE (lastfield)), bit_position (field)), + bitsize_int (TYPE_PRECISION (byte_integer_type_node)))); +diff -urN gcc/p.old/gbe.h gcc/p/gbe.h +--- gcc/p.old/gbe.h 2006-06-10 17:45:38.393386000 +0000 ++++ gcc/p/gbe.h 2006-06-10 17:46:10.403386000 +0000 +@@ -44,11 +44,15 @@ + + #include "config.h" + +-#ifndef GCC_4 ++#ifndef GCC_4_0 + #define TYPE_UNSIGNED TREE_UNSIGNED + #define BIT_FIELD_REF_UNSIGNED TREE_UNSIGNED + #endif + ++#ifdef GCC_4_0 ++extern int immediate_size_expand; ++#endif ++ + #ifndef GCC_3_4 + #define build_constructor(type, elements) (build (CONSTRUCTOR, (type), NULL_TREE, (elements))) + #endif +diff -urN gcc/p.old/gpc-lex.c gcc/p/gpc-lex.c +--- gcc/p.old/gpc-lex.c 2006-06-10 17:45:38.393386000 +0000 ++++ gcc/p/gpc-lex.c 2006-06-10 17:46:10.403386000 +0000 +@@ -512,7 +512,13 @@ + type = long_long_integer_type_node; + else + type = long_long_unsigned_type_node; ++#ifdef GCC_4_0 ++ t = build_int_cst_wide (type, ++ TREE_INT_CST_LOW (t), ++ TREE_INT_CST_HIGH (t)); ++#else + TREE_TYPE (t) = type; ++#endif + PASCAL_CST_FRESH (t) = 1; + yylval.ttype = t; + break; +diff -urN gcc/p.old/gpc.c gcc/p/gpc.c +--- gcc/p.old/gpc.c 2006-06-10 17:45:38.393386000 +0000 ++++ gcc/p/gpc.c 2006-06-10 17:46:10.413386000 +0000 +@@ -207,7 +207,10 @@ + extern void pfatal_with_name (const char *) ATTRIBUTE_NORETURN; + extern void fatal (const char *, ...) ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; + extern void error (const char *, ...); ++#ifndef GCC_4_0 + void fancy_abort (void); ++#endif ++ + #ifndef EGCS + static char *concat (const char *, ...); + extern char *xmalloc (size_t); +@@ -869,12 +872,23 @@ + /* config.h can define LIBGCC_SPEC to override how and when libgcc.a is + included. */ + #ifndef LIBGCC_SPEC ++#ifndef GCC_4_0 + #if defined(LINK_LIBGCC_SPECIAL) || defined(LINK_LIBGCC_SPECIAL_1) + /* Have gcc do the search for libgcc.a. */ + #define LIBGCC_SPEC "libgcc.a%s" + #else + #define LIBGCC_SPEC "-lgcc" + #endif ++#else ++#if defined(REAL_LIBGCC_SPEC) ++#define LIBGCC_SPEC REAL_LIBGCC_SPEC ++#elif defined(LINK_LIBGCC_SPECIAL_1) ++/* Have gcc do the search for libgcc.a. */ ++#define LIBGCC_SPEC "libgcc.a%s" ++#else ++#define LIBGCC_SPEC "-lgcc" ++#endif ++#endif + #endif + + /* config.h can define STARTFILE_SPEC to override the default crt0 files. */ +@@ -954,6 +968,7 @@ + #endif + + #ifndef LINK_LIBGCC_SPEC ++#ifndef GCC_4_0 + # ifdef LINK_LIBGCC_SPECIAL + /* Don't generate -L options for startfile prefix list. */ + # define LINK_LIBGCC_SPEC "" +@@ -961,6 +976,9 @@ + /* Do generate them. */ + # define LINK_LIBGCC_SPEC "%D" + # endif ++#else ++# define LINK_LIBGCC_SPEC "%D" ++#endif + #endif + + #ifndef STARTFILE_PREFIX_SPEC +@@ -1137,6 +1155,7 @@ + + /* This defines which multi-letter switches take arguments. */ + ++#ifndef DEFAULT_WORD_SWITCH_TAKES_ARG + #define DEFAULT_WORD_SWITCH_TAKES_ARG(STR) \ + (!strcmp (STR, "Tdata") || !strcmp (STR, "Ttext") \ + || !strcmp (STR, "Tbss") || !strcmp (STR, "include") \ +@@ -1146,6 +1165,7 @@ + || !strcmp (STR, "isystem") || !strcmp (STR, "-param") \ + || !strcmp (STR, "specs") \ + || !strcmp (STR, "MF") || !strcmp (STR, "MT") || !strcmp (STR, "MQ")) ++#endif + + #ifndef WORD_SWITCH_TAKES_ARG + #define WORD_SWITCH_TAKES_ARG(STR) DEFAULT_WORD_SWITCH_TAKES_ARG (STR) +@@ -5191,9 +5211,11 @@ + if (is_directory (buffer, multilib_dir, 1)) + { + do_spec_1 ("-L", 0, NULL); ++#ifndef GCC_4_0 + #ifdef SPACE_AFTER_L_OPTION + do_spec_1 (" ", 0, NULL); + #endif ++#endif + do_spec_1 (buffer, 1, NULL); + do_spec_1 (multilib_dir, 1, NULL); + /* Make this a separate argument. */ +@@ -5205,9 +5227,11 @@ + if (is_directory (pl->prefix, multi_dir, 1)) + { + do_spec_1 ("-L", 0, NULL); ++#ifndef GCC_4_0 + #ifdef SPACE_AFTER_L_OPTION + do_spec_1 (" ", 0, NULL); + #endif ++#endif + do_spec_1 (pl->prefix, 1, NULL); + do_spec_1 (multi_dir, 1, NULL); + /* Make this a separate argument. */ +@@ -5220,9 +5244,11 @@ + if (is_directory (pl->prefix, machine_suffix, 1)) + { + do_spec_1 ("-L", 0, NULL); ++#ifndef GCC_4_0 + #ifdef SPACE_AFTER_L_OPTION + do_spec_1 (" ", 0, NULL); + #endif ++#endif + do_spec_1 (pl->prefix, 1, NULL); + /* Remove slash from machine_suffix. */ + if (strlen (machine_suffix) >= bufsize) +@@ -5242,9 +5268,11 @@ + if (is_directory (pl->prefix, "", 1)) + { + do_spec_1 ("-L", 0, NULL); ++#ifndef GCC_4_0 + #ifdef SPACE_AFTER_L_OPTION + do_spec_1 (" ", 0, NULL); + #endif ++#endif + /* Remove slash from pl->prefix. */ + if (strlen (pl->prefix) >= bufsize) + bufsize = strlen (pl->prefix) * 2 + 1; +@@ -7560,10 +7588,15 @@ + pfatal_with_name (errmsg_fmt); + } + +-/* Output an error message and exit. */ + ++/* Output an error message and exit. */ ++#ifdef GCC_4_0 ++void ++fancy_abort (const char * file_name, int line_number, const char * fun_name) ++#else + void + fancy_abort (void) ++#endif + { + fatal ("internal gpc abort"); + } +diff -urN gcc/p.old/gpc.h gcc/p/gpc.h +--- gcc/p.old/gpc.h 2006-06-10 17:45:38.393386000 +0000 ++++ gcc/p/gpc.h 2006-06-10 17:46:10.413386000 +0000 +@@ -26,7 +26,7 @@ + #ifndef _GPC_H_ + #define _GPC_H_ + +-/*#define PG__NEW_STRINGS*/ ++#define PG__NEW_STRINGS + + /* GPC compile time configuration switches */ + +@@ -49,6 +49,40 @@ + + #include "gbe.h" + ++#ifdef GCC_4_0 ++extern tree xnon_lvalue (tree x); ++// #define non_lvalue(x) (build1 (NON_LVALUE_EXPR, TREE_TYPE (x), x)) ++#define non_lvalue(x) (xnon_lvalue (x)) ++#define PASCAL_BIT_FIELD_REF_UNSIGNED(x) \ ++ (TREE_CHECK2(x, BIT_FIELD_REF, PASCAL_BIT_FIELD_REF)->common.unsigned_flag) ++#define fold(x) (pascal_fold1 (x)) ++#define build_int_cst_wide(x, y, z) (pascal_build_int_cst ((x), (y), (z))) ++#define usizetype sizetype ++#define ubitsizetype bitsizetype ++#define build_int_2(x, y) (build_int_cst_wide (integer_type_node, x, y)) ++#define build_type_copy(x) (build_variant_type_copy (x)) ++ ++extern tree ++pascal_build_int_cst (tree type, unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi); ++extern tree pascal_fold1 (tree t); ++ ++extern int lvalue_or_else (tree ref, const char *string); ++extern tree builtin_function (const char *name, tree type, int function_code, ++ enum built_in_class class, const char *library_name, tree dummy); ++#include "plant.h" ++#else ++#define PASCAL_BIT_FIELD_REF_UNSIGNED(x) TREE_UNSIGNED (x) ++#define tcc_exceptional 'x' ++#define tcc_constant 'c' ++#define tcc_type 't' ++#define tcc_declaration 'd' ++#define tcc_reference 'r' ++#define tcc_comparison '<' ++#define tcc_unary '1' ++#define tcc_binary '2' ++#define tcc_expression 'e' ++#endif ++ + #undef abort + #define abort() USE_GCC_ASSERT_RATHER_THAN_ABORT + #undef assert +@@ -57,7 +91,7 @@ + /* GCC 4.0.0 and up have gcc_assert and gcc_unreachable. Timing data shows + that removing asserts, but keeping gcc_unreachable's speeds up the compile. + gcc_assert does not evaluate the expression if assertions are disabled. */ +-#ifndef GCC_4 ++#ifndef GCC_4_0 + #ifndef __GNUC__ + #define __PRETTY_FUNCTION__ NULL + #endif +@@ -101,10 +135,11 @@ + #define sbitsizetype ssizetype + #define ubitsizetype usizetype + #define TREE_CHECK(t, code) (t) +-#define TYPE_P(TYPE) (TREE_CODE_CLASS (TREE_CODE (TYPE)) == 't') +-#define DECL_P(DECL) (TREE_CODE_CLASS (TREE_CODE (DECL)) == 'd') ++#define TYPE_P(TYPE) (TREE_CODE_CLASS (TREE_CODE (TYPE)) == tcc_type) ++#define DECL_P(DECL) (TREE_CODE_CLASS (TREE_CODE (DECL)) == tcc_declaration) + #define IS_EXPR_CODE_CLASS(CLASS) \ +- (CLASS == '<' || CLASS == '1' || CLASS == '2' || CLASS == 'e') ++ (CLASS == tcc_comparison || CLASS == tcc_unary || \ ++ CLASS == tcc_binary || CLASS == tcc_expression) + #define IDENTIFIER_NODE_CHECK(NODE) (TREE_CHECK (NODE, IDENTIFIER_NODE)) + #define INTERFACE_NAME_NODE_CHECK(NODE) (TREE_CHECK (NODE, INTERFACE_NAME_NODE)) + #define IMPORT_NODE_CHECK(NODE) (TREE_CHECK (NODE, IMPORT_NODE)) +@@ -349,7 +384,8 @@ + #define HAS_EXP_ORIGINAL_CODE_FIELD(exp) \ + (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (exp))) && TREE_CODE (exp) != CONSTRUCTOR) + +-#define IS_EXPR_OR_REF_CODE_CLASS(c) (IS_EXPR_CODE_CLASS (c) || c == 'r') ++#define IS_EXPR_OR_REF_CODE_CLASS(c) (IS_EXPR_CODE_CLASS (c) || \ ++ c == tcc_reference) + + #define PROMOTING_INTEGER_TYPE(t) \ + (TREE_CODE (t) == INTEGER_TYPE && TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node)) +@@ -1296,7 +1332,7 @@ + extern tree build_caret_string_constant (int); + extern tree combine_strings (tree, int); + extern void constant_expression_warning (tree); +-extern tree build_range_check (tree min, tree max, tree expr, int is_io); ++extern tree build_range_check (tree min, tree max, tree expr, int is_io, int gimplifying); + extern tree range_check_2 (tree, tree, tree); + extern tree range_check (tree, tree); + extern tree convert_and_check (tree, tree); +@@ -1350,6 +1386,7 @@ + + /* typecheck.c */ + ++extern tree copy_expr (tree); + extern void cstring_inform (void); + extern void ptrarith_inform (void); + extern tree require_complete_type (tree); +@@ -1380,6 +1417,7 @@ + extern tree digest_init (tree, tree, int); + extern tree build_pascal_initializer (tree, tree, const char *, int); + extern tree find_variant (tree, tree); ++// extern int allow_packed_addresses; + + /* types.c */ + +@@ -1403,9 +1441,9 @@ + extern int is_string_type (tree, int); + extern int is_of_string_type (tree, int); + extern int is_variable_string_type (tree); +-extern tree build_discriminants (tree, tree); ++extern tree build_discriminants (tree, tree, tree); + extern tree maybe_schema_discriminant (tree); +-extern tree build_schema_type (tree, tree, tree); ++extern tree build_schema_type (tree, tree, tree, tree); + extern int number_of_schema_discriminants (tree); + extern void prediscriminate_schema (tree); + extern tree base_type (tree); +@@ -1647,42 +1685,55 @@ + #define return_address_routine_node PGT(57) + #define frame_address_routine_node PGT(58) + #define checkinoutres_routine_node PGT(59) ++#define setbits_routine_node PGT(60) + + /* Identifiers */ +-#define self_id PGT(60) +-#define schema_id PGT(61) +-#define vmt_id PGT(62) ++#define self_id PGT(61) ++#define schema_id PGT(62) ++#define vmt_id PGT(63) + + /* All the nodes above are once initialized and should not change afterwards. */ + + /* A list of all exported names in all modules seen so far. + TREE_VALUE is an IDENTIFIER_NODE of an exported interface name, TREE_PURPOSE + is a TREE_LIST of the names exported by this interface. */ +-#define exported_interface_list PGT(63) ++#define exported_interface_list PGT(64) + + /* A list of all initializers that were deferred. */ +-#define deferred_initializers PGT(64) ++#define deferred_initializers PGT(65) + + /* The types in the current `type' declaration part. */ +-#define current_type_list PGT(65) ++#define current_type_list PGT(66) + + /* While in a `case' statement, a TREE_LIST: + TREE_VALUE: current case expression + TREE_PURPOSE: list of case ranges seen (if needed) */ +-#define current_case_values PGT(66) ++#define current_case_values PGT(67) ++ ++/* While in a schema definition, (incomplete) type of the schema */ ++#define current_schema PGT(68) ++ ++#define cword_boolean_type_node PGT(69) + +-#define cword_boolean_type_node PGT(67) ++#define global_save_list PGT(70) ++ ++#define current_statement_list PGT(71) ++ ++/* #define global_var_type_list (72) */ ++ ++#define PTI_MAX 72 + +-#define PTI_MAX 68 + extern GTY(()) tree pascal_global_trees[PTI_MAX]; + + #define pascal_integer_type_node ptrsize_integer_type_node + #define pascal_cardinal_type_node ptrsize_unsigned_type_node + ++#ifndef GCC_3_3 + /* @@ gcc>3.2 defines size_type_node in tree.h. After dropping support for + gcc-3.2.x, we can remove pascal_size_type_node (or make it #ifndef EGCS97 + if gcc-2 support is still wanted), and remove the following definition. */ + #undef size_type_node + #define size_type_node pascal_size_type_node ++#endif + + #endif /* _GPC_H_ */ +diff -urN gcc/p.old/lang.c gcc/p/lang.c +--- gcc/p.old/lang.c 2006-06-10 17:45:38.393386000 +0000 ++++ gcc/p/lang.c 2006-06-10 17:46:10.413386000 +0000 +@@ -35,6 +35,10 @@ + #include "gtype-p.h" + #endif + ++#ifdef GCC_4_0 ++#include "tree-gimple.h" ++#endif ++ + /* The following functions are not called from GPC, but needed by + the backend. Depending on the GCC version, they're simply called + as extern, so we can't make them static (yet). */ +@@ -102,6 +106,7 @@ + #endif + #endif + { ++#ifndef GCC_4_0 + enum tree_code code = TREE_CODE (t); + if (code == PASCAL_BIT_FIELD_REF) + return expand_expr ( +@@ -117,8 +122,8 @@ + TREE_OPERAND (t, 0), + TREE_OPERAND (t, 1), + TREE_OPERAND (t, 2), +- code == IO_RANGE_CHECK_EXPR), +- r, mm, em); ++ code == IO_RANGE_CHECK_EXPR, 0), ++ r, mm, em); + else if (code == PASCAL_CONSTRUCTOR_CALL) + return expand_expr ( + build_predef_call (p_New, TREE_OPERAND (t, 0)), +@@ -132,9 +137,152 @@ + } + #endif + else ++#endif + gcc_unreachable (); + } + ++#ifdef GCC_4_0 ++int ++pascal_gimplify_expr (tree *expr_p, tree *pre_p ATTRIBUTE_UNUSED, ++ tree *post_p ATTRIBUTE_UNUSED) ++{ ++ tree t = *expr_p; ++ enum tree_code code = TREE_CODE (t); ++ tree res; ++ switch (code) ++ { ++ case PASCAL_BIT_FIELD_REF: ++ res = build_pascal_packed_array_ref ( ++ TREE_OPERAND (t, 0), ++ TREE_OPERAND (t, 1), ++ TREE_OPERAND (t, 2), ++ 1); ++ res = unshare_expr (res); ++ break; ++ ++ case RANGE_CHECK_EXPR: ++ case IO_RANGE_CHECK_EXPR: ++ res = build_range_check ( ++ TREE_OPERAND (t, 0), ++ TREE_OPERAND (t, 1), ++ TREE_OPERAND (t, 2), ++ code == IO_RANGE_CHECK_EXPR, 1); ++ res = unshare_expr (res); ++ break; ++ ++ case PASCAL_CONSTRUCTOR_CALL: ++ { ++ tree save_statement_list = current_statement_list; ++ current_statement_list = NULL_TREE; ++ res = build_predef_call (p_New, TREE_OPERAND (t, 0)); ++ res = build (COMPOUND_EXPR, TREE_TYPE (res), ++ current_statement_list, res); ++ current_statement_list = save_statement_list; ++ unshare_all_trees (res); ++ } ++ break; ++ ++ case ADDR_EXPR: ++ /* Case taken for Ada front end */ ++ /* If we're taking the address of a constant CONSTRUCTOR, force it to ++ be put into static memory. We know it's going to be readonly given ++ the semantics we have and it's required to be static memory in ++ the case when the reference is in an elaboration procedure. */ ++ if (TREE_CODE (TREE_OPERAND (t, 0)) == CONSTRUCTOR ++ && TREE_CONSTANT (TREE_OPERAND (t, 0))) ++ { ++ tree new_var ++ = create_tmp_var (TREE_TYPE (TREE_OPERAND (t, 0)), "constructor"); ++ ++ TREE_READONLY (new_var) = 1; ++ TREE_STATIC (new_var) = 1; ++ TREE_ADDRESSABLE (new_var) = 1; ++ DECL_INITIAL (new_var) = TREE_OPERAND (t, 0); ++ ++ TREE_OPERAND (t, 0) = new_var; ++ return GS_ALL_DONE; ++ } ++ return GS_UNHANDLED; ++ ++ case CONSTRUCTOR: ++ if (TREE_CODE (TREE_TYPE (t)) == SET_TYPE) ++ { ++ tree type = TREE_TYPE (t); ++ tree elt = CONSTRUCTOR_ELTS (t); ++ tree domain = TYPE_DOMAIN (type); ++ tree domain_min = convert (sbitsizetype, TYPE_MIN_VALUE (domain)); ++ tree domain_max = convert (sbitsizetype, TYPE_MAX_VALUE (domain)); ++ tree bitlength; ++ tree st; ++ tree dest; ++ res = create_tmp_var (type, "set_constructor"); ++ dest = build_unary_op (ADDR_EXPR, res, 0); ++ ++ /* Align the set. */ ++ if (set_alignment) ++ domain_min = size_binop (BIT_AND_EXPR, domain_min, sbitsize_int (-(int) ++set_alignment)); ++ ++ bitlength = size_binop (PLUS_EXPR, ++ size_binop (MINUS_EXPR, domain_max, domain_min), ++ sbitsize_int (1)); ++ ++ ++ if (TREE_INT_CST_HIGH (bitlength)) { ++ error ("set size too big for host integers"); ++ return GS_ERROR; ++ } ++ bitlength = convert (sizetype, bitlength); ++ ++ /* Clear storage */ ++ st = build_memset (dest, TYPE_SIZE_UNIT (type), integer_zero_node); ++ gimplify_and_add (st, pre_p); ++ /* Set bits */ ++ for (; elt != NULL_TREE; elt = TREE_CHAIN (elt)) ++ { ++ tree startbit = TREE_PURPOSE (elt); ++ tree endbit = TREE_VALUE (elt); ++ if (startbit == NULL_TREE) ++ { ++ startbit = save_expr (endbit); ++ endbit = startbit; ++ } ++ ++ startbit = convert (sizetype, startbit); ++ endbit = convert (sizetype, endbit); ++ if (! integer_zerop (domain_min)) ++ { ++ startbit = convert (sbitsizetype, startbit); ++ endbit = convert (sbitsizetype, endbit); ++ startbit = size_binop (MINUS_EXPR, startbit, domain_min); ++ endbit = size_binop (MINUS_EXPR, endbit, domain_min); ++ } ++ startbit = convert (sizetype, startbit); ++ endbit = convert (sizetype, endbit); ++ ++ st = build_routine_call (setbits_routine_node, ++ tree_cons (NULL_TREE, dest, ++ tree_cons (NULL_TREE, bitlength, ++ tree_cons (NULL_TREE, startbit, ++ build_tree_list (NULL_TREE, endbit))))); ++ gimplify_and_add (st, pre_p); ++ } ++ break; ++ } ++ else ++ { ++// fprintf(stderr, "pascal_gimplify_expr"); ++// debug_tree (t); ++ } ++ /* Falltrough */ ++ default: ++ return GS_UNHANDLED; ++ } ++ *expr_p = res; ++ return GS_OK; ++} ++#endif ++ + const char * + pascal_decl_name (tree decl, int verbosity ATTRIBUTE_UNUSED) + { +@@ -404,12 +552,19 @@ + + /* Tree code classes. */ + #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE, +- ++#ifdef GCC_4_0 ++const enum tree_code_class tree_code_type[] = { ++#include "tree.def" ++ tcc_exceptional, ++#include "p-tree.def" ++}; ++#else + const char tree_code_type[] = { + #include "tree.def" + 'x', + #include "p-tree.def" + }; ++#endif + #undef DEFTREECODE + + /* Table indexed by tree code giving number of expression +@@ -502,19 +657,23 @@ + return 0; + } + +-extern void cpp_define (void *, const char *); ++extern void gpc_cpp_define (void *, const char *); + void +-cpp_define (void *r ATTRIBUTE_UNUSED, const char *s) ++gpc_cpp_define (void *r ATTRIBUTE_UNUSED, const char *s) + { + builtin_define_std (s); + } + +-extern void cpp_assert (void *, const char *); ++#define cpp_define(r, s) gpc_cpp_define(r, s) ++ ++extern void gpc_cpp_assert (void *, const char *); + void +-cpp_assert (void *pfile ATTRIBUTE_UNUSED, const char *str ATTRIBUTE_UNUSED) ++gpc_cpp_assert (void *pfile ATTRIBUTE_UNUSED, const char *str ATTRIBUTE_UNUSED) + { + } + ++#define cpp_assert(pfile, str) gpc_cpp_assert(pfile, str) ++ + #define preprocessing_asm_p() 0 + #define preprocessing_trad_p() 0 + /* @@ Backend bug: TARGET_OS_CPP_BUILTINS on some targets uses them +@@ -591,9 +750,18 @@ + static int + pascal_handle_option (size_t scode, const char *arg, int value) + { ++#ifdef GCC_4_0 ++ if ((enum opt_code) scode == OPT_Werror) ++ { ++ global_dc->warning_as_error_requested = value; ++ return 1; ++ } ++#endif ++ + switch ((enum opt_code) scode) + { + #include "handle-opts.c" ++ + default: + break; + } +@@ -679,7 +847,9 @@ + (gcc-2 only), and it seems to cause a hard to reproduce memory management + problem (gcc-3 only, reported by David Wood ). + So we just turn it off here. */ ++#ifndef GCC_4_0 + debug_no_type_hash = 1; ++#endif + + #ifndef EGCS + init_gpc_lex (input_filename); +@@ -1354,8 +1524,12 @@ + #undef LANG_HOOKS_POST_OPTIONS + #define LANG_HOOKS_POST_OPTIONS pascal_post_options + #endif ++ ++#ifndef GCC_4_0 + #undef LANG_HOOKS_CLEAR_BINDING_STACK + #define LANG_HOOKS_CLEAR_BINDING_STACK pascal_clear_binding_stack ++#endif ++ + #undef LANG_HOOKS_DECODE_OPTION + #define LANG_HOOKS_DECODE_OPTION lang_decode_option + #undef LANG_HOOKS_INIT_OPTIONS +@@ -1388,7 +1562,7 @@ + #define LANG_HOOKS_TYPE_FOR_SIZE type_for_size + #define LANG_HOOKS_TYPE_FOR_MODE type_for_mode + +-#define LANG_HOOKS_MARK_ADDRESSABLE mark_addressable ++#define LANG_HOOKS_MARK_ADDRESSABLE pascal_mark_addressable + #define LANG_HOOKS_TRUTHVALUE_CONVERSION truthvalue_conversion + + #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL +@@ -1403,6 +1577,62 @@ + #undef LANG_HOOKS_HASH_TYPES + #define LANG_HOOKS_HASH_TYPES false + ++ ++#ifdef GCC_4_0 ++#undef LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION ++#define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION pascal_expand_function ++ ++#undef LANG_HOOKS_GIMPLIFY_EXPR ++#define LANG_HOOKS_GIMPLIFY_EXPR pascal_gimplify_expr ++ ++#undef LANG_HOOKS_TYPES_COMPATIBLE_P ++#define LANG_HOOKS_TYPES_COMPATIBLE_P pascal_types_compatible_p ++ ++int ++pascal_types_compatible_p (tree t1, tree t2) ++{ ++ if (TREE_CODE (t1) == POINTER_TYPE && TREE_CODE (t2) == POINTER_TYPE) ++ { ++ t1 = TREE_TYPE (t1); ++ t2 = TREE_TYPE (t2); ++ } ++ if (PASCAL_TYPE_STRING (t1) && PASCAL_TYPE_STRING (t2)) ++ return 1; ++ else if (PASCAL_TYPE_SCHEMA (t1) && PASCAL_TYPE_SCHEMA (t2)) ++ { ++ tree base1 = t1, base2 = t2; ++ if (TYPE_LANG_BASE (t1)) ++ base1 = TYPE_LANG_BASE (t1); ++ if (TYPE_LANG_BASE (t2)) ++ base2 = TYPE_LANG_BASE (t2); ++ base1 = TYPE_MAIN_VARIANT (base1); ++ base2 = TYPE_MAIN_VARIANT (base2); ++ if (base1 == base2) ++ return 1; ++ } ++ return strictly_comp_types (TYPE_MAIN_VARIANT (t1), TYPE_MAIN_VARIANT (t2)); ++} ++ ++static void ++pascal_expand_function (tree fndecl) ++{ ++ /* We have nothing special to do while expanding functions for Pascal. */ ++ tree_rest_of_compilation (fndecl); ++} ++#endif ++ ++#ifdef GCC_3_3 ++bool ++#else ++int ++#endif ++pascal_mark_addressable (tree exp) ++{ ++ return mark_addressable2 (exp, 1); ++} ++ ++ ++ + static void + pascal_parse (int debug) + { +diff -urN gcc/p.old/module.c gcc/p/module.c +--- gcc/p.old/module.c 2006-06-10 17:45:38.403386000 +0000 ++++ gcc/p/module.c 2006-06-10 17:46:10.413386000 +0000 +@@ -28,6 +28,9 @@ + + #include "gpc.h" + #include "p/p-version.h" ++#ifdef GCC_4_0 ++#include "version.h" ++#endif + + #ifdef EGCS + #define HOST_PTR_PRINTF_CAST_TYPE PTR +@@ -1816,6 +1819,8 @@ + STORE_ANY (n); + } + ++static int loading_module_interface; ++ + static tree + load_tree (MEMFILE *s, gpi_int start_of_nodes, gpi_int size_of_offsets, int module_interface) + { +@@ -1850,13 +1855,17 @@ + push_obstacks_nochange (); + end_temporary_allocation (); + #endif ++ loading_module_interface = module_interface ; + result = load_node (); + /* Do this here after all nodes have been loaded and are thus complete. */ + for (n = NUM_SPECIAL_NODES; n < nodes_count; n++) + { + tree t = rb.nodes[n]; + if (t && (TREE_CODE (t) == FUNCTION_DECL || (TREE_CODE (t) == VAR_DECL)) +- && !DECL_RTL_SET_P (t)) ++/* #ifndef GCC_4_0 */ ++ && !DECL_RTL_SET_P (t) ++/* #endif */ ++ ) + { + if (!module_interface) + { +@@ -1864,10 +1873,34 @@ + PASCAL_FORWARD_DECLARATION (t) = 0; + else + DECL_EXTERNAL (t) = 1; /* not for module interface so init_any won't ignore it */ ++#if 0 ++ if (TREE_CODE (t) == VAR_DECL) ++ DECL_INITIAL (t) = NULL_TREE; ++#endif + } ++#if 0 ++ else ++ { ++ mark_decl_referenced (t); ++ } ++#endif + PASCAL_DECL_WEAK (t) = 0; + PASCAL_DECL_IMPORTED (t) = 1; ++ if (module_interface && TREE_CODE (t) == VAR_DECL ++ && DECL_INITIAL (t)) ++ { ++#if 0 ++ fprintf (stderr, "DECL_INITIAL (%p)\n", t); ++ debug_tree (t); ++ debug_tree (DECL_INITIAL (t)); ++#endif ++ } ++#ifdef GCC_4_0 ++ /* @@@@@@@ Otherwise we have problems with vmt */ ++ rest_of_decl_compilation (t, 1, 0); ++#else + rest_of_decl_compilation (t, NULL, 1, 1); ++#endif + } + /* Support `private' for object fields/methods */ + if (!module_interface +@@ -1930,7 +1963,11 @@ + + /* Storing/loading a node's flags. @@@@ Very much GCC version dependent. */ + #ifdef EGCS97 ++#ifdef GCC_4_0 ++#define DECL_FLAGS_SIZE 8 ++#else + #define DECL_FLAGS_SIZE 6 ++#endif + #define DECL_EXTRA_STORED(t) (t->decl.u1.i) + #else + #ifdef EGCS +@@ -1940,6 +1977,12 @@ + #endif + #define DECL_EXTRA_STORED(t) DECL_FRAME_SIZE (t) + #endif ++#ifndef GCC_4_0 ++#define FLAGS_OFFSET 2 ++#else ++#define FLAGS_OFFSET 3 ++#endif ++ + static void + store_flags (tree t) + { +@@ -1948,10 +1991,10 @@ + where it refers to debug info (see ../tree.h). */ + if (TYPE_P (t)) + TREE_ASM_WRITTEN (t) = 0; +- store_length ((tree *) t + 2, 4); ++ store_length ((tree *) t + FLAGS_OFFSET, 4); + TREE_ASM_WRITTEN (t) = save; + } +-#define load_flags(t) LOAD_LENGTH ((tree *) t + 2, 4) ++#define load_flags(t) LOAD_LENGTH ((tree *) t + FLAGS_OFFSET, 4) + + /* Store the fields of a node in a stream. */ + static void +@@ -2019,7 +2062,7 @@ + store_flags (t); + switch (TREE_CODE_CLASS (code)) + { +- case 't': ++ case tcc_type: + store_length (&TYPE_UID (t) + 1, 4 + sizeof (TYPE_ALIGN (t))); + store_node (TYPE_NAME (t)); + store_node (TYPE_SIZE (t)); +@@ -2030,7 +2073,7 @@ + store_node (TYPE_GET_INITIALIZER (t)); + store_node (TYPE_MAIN_VARIANT (t) == t ? NULL_TREE : TYPE_MAIN_VARIANT (t)); + break; +- case 'd': ++ case tcc_declaration: + { + gpi_int n; + store_length ((&DECL_SIZE (t)) + 1, DECL_FLAGS_SIZE); +@@ -2049,15 +2092,17 @@ + STORE_ANY (n); + break; + } +- case 'c': ++ case tcc_constant: + store_node (TREE_TYPE (t)); + break; +- case '1': +- case '2': ++ case tcc_unary: ++ case tcc_binary: ++#ifndef GCC_4_0 + case '3': +- case '<': +- case 'e': +- case 'r': ++#endif ++ case tcc_comparison: ++ case tcc_expression: ++ case tcc_reference: + { + int i, l = NUMBER_OF_OPERANDS (code); + store_node (TREE_TYPE (t)); +@@ -2282,7 +2327,11 @@ + + case VAR_DECL: + store_node (TREE_TYPE (t)); +- /* No need to store DECL_INITIAL. */ ++#if 1 ++ /* We need to store DECL_INITIAL to pass initial value from ++ interface to the implementation */ ++ store_node (DECL_INITIAL (t)); ++#endif + store_string (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (t))); + break; + +@@ -2295,7 +2344,11 @@ + break; + + default: ++#ifdef GCC_4_0 ++ gcc_assert (class_done); ++#else + gcc_assert (class_done && code != RTL_EXPR); ++#endif + } + } + +@@ -2475,16 +2528,33 @@ + t = get_identifier (id); + free (id); + } ++ else if (code == STRING_CST) ++ { ++ char *s; ++ struct {char c[4];} pp; ++ gpi_int l; ++ tree ty; ++ LOAD_ANY(pp); ++ ty = load_node (); ++ LOAD_ANY(l); ++ s = xmalloc (l + 1); ++ LOAD_LENGTH (s, l); ++ t = build_string (l, s); ++ memcpy ((tree *) t + FLAGS_OFFSET, &pp, 4); ++ TREE_TYPE (t) = ty; ++ free (s); ++ } + else + t = make_node (code); + itab_store_node (itab, original_uid, t); + gcc_assert (!rb.nodes[uid]); + rb.nodes[uid] = t; +- if (code != IDENTIFIER_NODE && code != INTERFACE_NAME_NODE) ++ if (code != IDENTIFIER_NODE && code != INTERFACE_NAME_NODE ++ && code != STRING_CST) + load_flags (t); + switch (TREE_CODE_CLASS (code)) + { +- case 't': ++ case tcc_type: + { + tree tmp; + LOAD_LENGTH (&TYPE_UID (t) + 1, 4 + sizeof (TYPE_ALIGN (t))); +@@ -2494,6 +2564,10 @@ + TYPE_SIZE_UNIT (t) = load_node (); + #endif + TYPE_POINTER_TO (t) = load_node (); ++#ifdef GCC_4_0 ++ TYPE_CACHED_VALUES_P (t) = 0; ++ TYPE_CACHED_VALUES (t) = NULL_TREE; ++#endif + tmp = load_node (); + if (tmp) + { +@@ -2510,7 +2584,7 @@ + } + break; + } +- case 'd': ++ case tcc_declaration: + { + gpi_int n; + char *s; +@@ -2533,15 +2607,18 @@ + DECL_IN_SYSTEM_HEADER (t) = 1; + break; + } +- case 'c': +- TREE_TYPE (t) = load_node (); ++ case tcc_constant: ++ if (code != STRING_CST) ++ TREE_TYPE (t) = load_node (); + break; +- case '1': +- case '2': ++ case tcc_unary: ++ case tcc_binary: ++#ifndef GCC_4_0 + case '3': +- case '<': +- case 'e': +- case 'r': ++#endif ++ case tcc_comparison: ++ case tcc_expression: ++ case tcc_reference: + { + int i, l = NUMBER_OF_OPERANDS (code); + TREE_TYPE (t) = load_node (); +@@ -2730,22 +2807,6 @@ + TREE_IMAGPART (t) = load_node (); + break; + +- case STRING_CST: +- { +- char *s; +- gpi_int l; +- LOAD_ANY(l); +- TREE_STRING_LENGTH (t) = l; +-#ifdef EGCS97 +- s = xmalloc (l + 1); +-#else +- s = oballoc (l + 1); +-#endif +- LOAD_LENGTH (s, l); +- TREE_STRING_POINTER (t) = s; +- break; +- } +- + case FUNCTION_DECL: + { + char *assembler_name_str; +@@ -2812,7 +2873,13 @@ + case VAR_DECL: + { + char *assembler_name_str; ++ tree init; + TREE_TYPE (t) = load_node (); ++#if 1 ++ init = load_node (); ++ if (loading_module_interface && itab == current_interface_table) ++ DECL_INITIAL (t) = init; ++#endif + assembler_name_str = load_string (rb.infile); + gcc_assert (*assembler_name_str); + SET_DECL_ASSEMBLER_NAME (t, get_identifier (assembler_name_str)); +diff -urN gcc/p.old/objects.c gcc/p/objects.c +--- gcc/p.old/objects.c 2006-06-10 17:45:38.403386000 +0000 ++++ gcc/p/objects.c 2006-06-10 17:46:10.413386000 +0000 +@@ -67,7 +67,12 @@ + return build (COMPOUND_EXPR, TREE_TYPE (value), TREE_OPERAND (obj, 0), value); + } + vmt_field = TYPE_LANG_VMT_FIELD (TREE_TYPE (obj)); ++#ifndef GCC_4_0 + return build (COMPONENT_REF, TREE_TYPE (vmt_field), obj, vmt_field); ++#else ++ return build3 (COMPONENT_REF, TREE_TYPE (vmt_field), obj, vmt_field, ++ NULL_TREE); ++#endif + } + + static tree +@@ -199,7 +204,12 @@ + char *n = ACONCAT (("method_", IDENTIFIER_POINTER (DECL_NAME (fun)), NULL)); + method = simple_get_field (get_identifier (n), TREE_TYPE (TREE_TYPE (TYPE_LANG_VMT_FIELD (TREE_TYPE (obj)))), NULL); + type_save = TREE_TYPE (fun); ++#ifndef GCC_4_0 + fun = build (COMPONENT_REF, TREE_TYPE (method), vmt_deref, method); ++#else ++ fun = build3 (COMPONENT_REF, TREE_TYPE (method), vmt_deref, ++ method, NULL_TREE); ++#endif + /* In the VMT, only generic pointers are stored to avoid + confusion in GPI files. Repair them here. */ + TREE_TYPE (fun) = build_pointer_type (type_save); +@@ -510,7 +520,9 @@ + /* Push also abstract methods (for better error messages on attempts to implement them). */ + method = pushdecl (method); + gcc_assert (!EM (method)); ++#ifndef GCC_4_0 + rest_of_decl_compilation (method, 0, 1, 1); ++#endif + if (PASCAL_FORWARD_DECLARATION (method)) + { + set_forward_decl (method, 1); +@@ -801,8 +813,16 @@ + from being pushed as a regular declaration (which is unnecessary). */ + n = ACONCAT (("vmt_", IDENTIFIER_POINTER (object_type_name), NULL)); + TYPE_LANG_VMT_VAR (type) = declare_variable (get_identifier (n), vmt_type, +- build_tree_list (NULL_TREE, vmt_entry), VQ_IMPLICIT | VQ_CONST | (current_module->implementation ? VQ_STATIC : 0)); ++ build_tree_list (NULL_TREE, vmt_entry), VQ_IMPLICIT | VQ_CONST | ++ (current_module->implementation ? VQ_STATIC : 0)); + ++#ifdef GCC_4_0 ++ if (current_module->implementation || !(co->interface_only)) ++ { ++ mark_decl_referenced (TYPE_LANG_VMT_VAR (type)); ++ make_decl_rtl (TYPE_LANG_VMT_VAR (type)); ++ } ++#endif + /* Attach VMT_TYPE to the implicit VMT field of the object. + (Until here it still has the inherited type or ^void type.) + We also need this for abstract types because their methods +diff -urN gcc/p.old/options.c gcc/p/options.c +--- gcc/p.old/options.c 2006-06-10 17:45:38.403386000 +0000 ++++ gcc/p/options.c 2006-06-10 17:46:10.413386000 +0000 +@@ -26,6 +26,10 @@ + #include "gpc.h" + #include "gpc-options.h" + #include "p/p-version.h" ++#ifdef GCC_4_0 ++#include "version.h" ++#endif ++ + + #ifdef GCC_3_4 + #include "options.h" +diff -urN gcc/p.old/opts.sum gcc/p/opts.sum +--- gcc/p.old/opts.sum 2006-06-10 17:45:38.403386000 +0000 ++++ gcc/p/opts.sum 2006-06-10 17:46:10.413386000 +0000 +@@ -9,6 +9,7 @@ + U:Joined Separate:-U Undefine + Wall:: + Wcomment:: ++Werror:: + Wmissing-declarations:: + Wmissing-prototypes:: + Wpointer-arith:: +diff -urN gcc/p.old/p-tree.def gcc/p/p-tree.def +--- gcc/p.old/p-tree.def 2006-06-10 17:45:38.403386000 +0000 ++++ gcc/p/p-tree.def 2006-06-10 17:46:10.413386000 +0000 +@@ -22,6 +22,21 @@ + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + ++#ifdef GCC_4_0 ++DEFTREECODE (OPERATOR_DECL, "operator_decl", tcc_declaration, 0) ++/* The field `gpi_int checksum' might be larger than a pointer, so ++ reserve two pointer sizes for it. */ ++DEFTREECODE (INTERFACE_NAME_NODE, "interface_name_node", tcc_exceptional, 3) ++DEFTREECODE (IMPORT_NODE, "import_node", tcc_exceptional, 4) ++DEFTREECODE (PASCAL_BIT_FIELD_REF, "pascal_bit_field_ref", tcc_reference, 3) ++DEFTREECODE (PASCAL_CONSTRUCTOR_CALL, "pascal_constructor_call", tcc_binary, 2) ++DEFTREECODE (POWER_EXPR, "power_expr", tcc_binary, 2) ++DEFTREECODE (POW_EXPR, "pow_expr", tcc_binary, 2) ++DEFTREECODE (SYMDIFF_EXPR, "symdiff_expr", tcc_binary, 2) ++DEFTREECODE (RANGE_CHECK_EXPR, "range_check_expr", tcc_expression, 3) ++DEFTREECODE (IO_RANGE_CHECK_EXPR, "io_range_check_expr", tcc_expression, 3) ++DEFTREECODE (IN_EXPR, "in_expr", tcc_binary, 2) ++#else + #ifdef EGCS + DEFTREECODE (OPERATOR_DECL, "operator_decl", 'd', 0) + /* The field `gpi_int checksum' might be larger than a pointer, so +@@ -48,3 +63,4 @@ + DEFTREECODE (RANGE_CHECK_EXPR, "range_check_expr", "e", 3) + DEFTREECODE (IO_RANGE_CHECK_EXPR, "io_range_check_expr", "e", 3) + #endif ++#endif +diff -urN gcc/p.old/p-version.h gcc/p/p-version.h +--- gcc/p.old/p-version.h 2006-06-10 17:45:38.403386000 +0000 ++++ gcc/p/p-version.h 2006-06-10 17:46:10.413386000 +0000 +@@ -3,5 +3,5 @@ + + #define GPC_MAJOR "2" + #define GPC_MINOR "1" +-#define GPC_VERSION_STRING "20060215" ++#define GPC_VERSION_STRING "20060325" + #define GPC_RELEASE_STRING GPC_VERSION_STRING +diff -urN gcc/p.old/parse.y gcc/p/parse.y +--- gcc/p.old/parse.y 2006-06-10 17:45:38.403386000 +0000 ++++ gcc/p/parse.y 2006-06-10 17:46:10.413386000 +0000 +@@ -61,7 +61,11 @@ + token LEX_CONST_EQUAL. */ + + %{ ++#define YYMAXDEPTH 200000 + #include "gpc.h" ++#ifdef GCC_4_0 ++#include "cgraph.h" ++#endif + + /* A few keywords of some dialects can be parsed as regular identifiers + and checked from the parser actions => fewer special tokens. */ +@@ -102,7 +106,7 @@ + %glr-parser + %no-default-prec + %expect 62 +-%expect-rr 189 ++%expect-rr 24 + + /* The semantic values */ + %union { +@@ -722,7 +726,9 @@ + build_type_decl ($1, $4, $5); + } + } +- | new_identifier formal_schema_discriminants equals ++ | new_identifier ++ { current_schema = start_struct (RECORD_TYPE); } ++ formal_schema_discriminants equals + { + $$ = immediate_size_expand; + immediate_size_expand = 0; +@@ -730,35 +736,48 @@ + } + type_denoter_with_attributes optional_value_specification + { +- build_type_decl ($1, build_schema_type ($5, $2, $6), NULL_TREE); +- immediate_size_expand = $4; ++ build_type_decl ($1, build_schema_type ($6, $3, $7, current_schema), ++ NULL_TREE); ++ immediate_size_expand = $5; + size_volatile--; ++ current_schema = NULL_TREE; ++ } ++ | new_identifier ++ { current_schema = start_struct (RECORD_TYPE); } ++ formal_schema_discriminants error ++ { build_schema_type (error_mark_node, $3, NULL_TREE, current_schema); ++ current_schema = NULL_TREE; + } +- | new_identifier formal_schema_discriminants error +- { build_schema_type (error_mark_node, $2, NULL_TREE); } + | new_identifier enable_lce equals + { $$ = start_object_type ($1, 0); } +- optional_abstract p_object object_parent object_field_list p_end ++ optional_abstract p_object object_parent ++ { push_scope (); } ++ object_field_list p_end + { + lex_const_equal = -1; +- finish_object_type ($4, $7, $8, $5 != NULL_TREE); ++ finish_object_type ($4, $7, $9, $5 != NULL_TREE); + pop_record_level ($4); + yyerrok; + } ++ + | new_identifier enable_lce equals + { $$ = start_object_type ($1, 1); } +- optional_abstract p_class object_parent object_field_list p_end ++ optional_abstract p_class object_parent ++ { push_scope (); } ++ object_field_list p_end + { + lex_const_equal = -1; +- finish_object_type ($4, $7, $8, $5 != NULL_TREE); ++ finish_object_type ($4, $7, $9, $5 != NULL_TREE); + pop_record_level ($4); + yyerrok; + } +- | new_identifier enable_lce equals +- p_view p_of typename object_parent object_field_list p_end ++ ++ | new_identifier enable_lce equals p_view p_of typename object_parent ++ { push_scope (); } ++ object_field_list p_end + { + lex_const_equal = -1; +- finish_view_type ($1, $6, $7, $8); ++ finish_view_type ($1, $6, $7, $9); + pop_record_level (NULL_TREE); + yyerrok; + } +@@ -803,7 +822,7 @@ + + discriminant_specification: + id_list ':' typename +- { $$ = build_discriminants ($1, $3); } ++ { $$ = build_discriminants ($1, $3, current_schema); } + ; + + type_denoter_with_attributes: +@@ -1068,10 +1087,9 @@ + ; + + object_field_list: +- { push_scope (); } object_field_list_1 { $$ = $2; } +- | { push_scope (); } object_field_list_1 object_section +- { $$ = chainon ($2, $3); } +- | { push_scope (); } error ++ object_field_list_1 { $$ = $1; } ++ | object_field_list_1 object_section { $$ = chainon ($1, $2); } ++ | error + { $$ = error_mark_node; } + ; + +@@ -1497,6 +1515,8 @@ + { build_predef_call (p_Exit, build_tree_list (NULL_TREE, void_type_node)); } + | p_Exit '(' id ')' + { build_predef_call (p_Exit, build_tree_list (NULL_TREE, $3)); } ++ | p_Exit '(' id '.' id ')' ++ { build_predef_call (p_Exit, build_tree_list ($3, $5)); } + | builtin_procedure_statement + | p_with with_list p_do pushlevel optional_statement poplevel + { restore_identifiers ($2); } +@@ -1741,7 +1761,7 @@ + if (PEDANTIC (NOT_CLASSIC_PASCAL) + && ( PASCAL_CST_PARENTHESES ($$) + || !(TREE_CODE ($$) == STRING_CST +- || (TREE_CODE_CLASS (TREE_CODE ($$)) == 'c' ++ || (TREE_CODE_CLASS (TREE_CODE ($$)) == tcc_constant + && PASCAL_CST_FRESH ($$))))) + error ("ISO 7185 Pascal allows only simple constants"); + } +@@ -2475,6 +2495,23 @@ + int + yyparse (void) + { ++ int res; + init_predef (); +- return main_yyparse (); ++ res = main_yyparse (); ++#ifdef GCC_4_0 ++ /* @@@@@ cgraphunit do not notice if address of a routine is ++ referenced from static global variable */ ++ { ++ tree decl = getdecls(); ++ while (decl) ++ { ++ if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ADDRESSABLE (decl)) ++ mark_decl_referenced (decl); ++ decl = TREE_CHAIN (decl); ++ } ++ } ++ cgraph_finalize_compilation_unit (); ++ cgraph_optimize (); ++#endif ++ return res; + } +diff -urN gcc/p.old/pascal-lex.l gcc/p/pascal-lex.l +--- gcc/p.old/pascal-lex.l 2006-06-10 17:45:38.403386000 +0000 ++++ gcc/p/pascal-lex.l 2006-06-10 17:46:10.413386000 +0000 +@@ -347,13 +347,13 @@ + else + switch (*++c) + { +- case 'n': *d++ = TARGET_NEWLINE; break; +- case 't': *d++ = TARGET_TAB; break; +- case 'r': *d++ = TARGET_CR; break; +- case 'f': *d++ = TARGET_FF; break; +- case 'b': *d++ = TARGET_BS; break; +- case 'v': *d++ = TARGET_VT; break; +- case 'a': *d++ = TARGET_BELL; break; ++ case 'n': *d++ = '\n' /* TARGET_NEWLINE */; break; ++ case 't': *d++ = '\t' /* TARGET_TAB */; break; ++ case 'r': *d++ = '\r' /* TARGET_CR */; break; ++ case 'f': *d++ = '\f' /* TARGET_FF */; break; ++ case 'b': *d++ = '\b' /* TARGET_BS */; break; ++ case 'v': *d++ = '\v' /* TARGET_VT */; break; ++ case 'a': *d++ = '\a' /* TARGET_BELL */; break; + case 'e': + case 'E': *d++ = 27; break; + case 'x': { +diff -urN gcc/p.old/plant.c gcc/p/plant.c +--- gcc/p.old/plant.c 1970-01-01 00:00:00.000000000 +0000 ++++ gcc/p/plant.c 2006-06-10 11:22:38.000000000 +0000 +@@ -0,0 +1,795 @@ ++/* Emulate old expand_* routines using Tree-SSA infrastructure. ++ ++ Copyright (C) 2006 Free Software Foundation, Inc. ++ ++ Authors: Waldek Hebisch ++ ++ 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 ++ ++#ifdef GCC_3_3 ++#include ++ ++/* Made unconditional for 3.3 to avoid Makefile tricks */ ++typedef struct plant_nesting GTY(()) { ++ enum tree_code code; ++ int flags; ++ struct plant_nesting * next; ++ tree arg0; ++ tree arg1; ++ tree arg2; ++ tree statement_list; ++ location_t locus; ++} plant_nesting; ++ ++ ++/* static GGTY(()) tree current_statement_list = NULL_TREE; */ ++ ++static GTY(()) plant_nesting * plant_stack = NULL; ++ ++static GTY(()) varray_type gimplified_types = 0; ++static GTY(()) varray_type gimplified_sizes = 0; ++static GTY(()) varray_type gimplified_size_addrs = 0; ++#endif ++ ++#ifdef GCC_4_0 ++#include "cgraph.h" ++#include "tree-gimple.h" ++#include "tree-dump.h" ++ ++/* @@@@@@@@@@@@@@@@@@@@@@@@@@ */ ++int immediate_size_expand; ++#if 0 ++int set_words_big_endian; ++int set_word_size; ++#endif ++ ++location_t plant_locus; ++int plant_locus_initialized = 0; ++ ++#define LOOP_HAS_CONTINUE 1 ++ ++void ++clear_last_expr (void) ++{ ++ gcc_assert (0); ++} ++ ++void ++plant_decl_init (tree decl) ++{ ++ gcc_assert (0); ++} ++ ++void ++plant_decl (tree decl) ++{ ++ tree de = build (DECL_EXPR, void_type_node, decl); ++ { ++ tree id = DECL_NAME (decl); ++ const char * n = IDENTIFIER_POINTER (id); ++// fprintf(stderr, "var %s\n", n? n : "???"); ++ } ++ ++ plant_expr_stmt (de); ++} ++ ++void ++plant_line_note (location_t loc) ++{ ++ plant_locus = loc; ++ plant_locus_initialized = 1; ++} ++ ++void ++plant_asm (tree string, int vol) ++{ ++ gcc_assert (0); ++} ++ ++void ++plant_nop (void) ++{ ++ // gcc_assert (0); ++} ++ ++void ++plant_asm_operands (tree string, tree outputs, ++ tree inputs, tree clobbers, int vol, location_t loc_aux) ++{ ++// gcc_assert (0); ++ tree ae = build (ASM_EXPR, void_type_node, string, outputs, inputs, clobbers); ++ plant_expr_stmt (ae); ++} ++ ++void ++plant_function_start (tree decl, int i) ++{ ++ // gcc_assert (0); ++// fprintf (stderr, "plant_function_start\n"); ++ struct plant_nesting * nest = ggc_alloc (sizeof (*nest)); ++ nest->code = FUNCTION_DECL; ++ nest->arg0 = nest->arg1 = nest->arg2 = NULL_TREE; ++ nest->next = plant_stack; ++ nest->statement_list = current_statement_list; ++ nest->locus = plant_locus; ++ current_statement_list = NULL_TREE; ++ plant_stack = nest; ++} ++ ++static void ++pascal_remember_gimplified_type (tree t) ++{ ++ VARRAY_PUSH_TREE (gimplified_types, t); ++} ++ ++static void ++pascal_remember_gimplified_sizepos (tree * exp) ++{ ++ VARRAY_PUSH_TREE (gimplified_sizes, * exp); ++ VARRAY_PUSH_TREE_PTR (gimplified_size_addrs, exp); ++} ++ ++extern void (*lang_remember_gimplified_type)(tree); ++extern void (*lang_remember_gimplified_sizepos)(tree *); ++ ++static void ++pascal_gimplify_function (tree fndecl) ++{ ++ struct cgraph_node *cgn; ++ static long gimplifying = 0; ++ if (!gimplifying) ++ { ++ VARRAY_TREE_INIT (gimplified_types, 32, "gimplified_types"); ++ VARRAY_TREE_INIT (gimplified_sizes, 64, "gimplified_sizes"); ++ VARRAY_TREE_PTR_INIT (gimplified_size_addrs, 64, ++ "gimplified_size_addrs"); ++ lang_remember_gimplified_type = pascal_remember_gimplified_type; ++ lang_remember_gimplified_sizepos = pascal_remember_gimplified_sizepos; ++ } ++ gimplifying ++; ++ dump_function (TDI_original, fndecl); ++ gimplify_function_tree (fndecl); ++ dump_function (TDI_generic, fndecl); ++ ++ /* Convert all nested functions to GIMPLE now. We do things in this order ++ so that items like VLA sizes are expanded properly in the context of the ++ correct function. */ ++ cgn = cgraph_node (fndecl); ++ for (cgn = cgn->nested; cgn; cgn = cgn->next_nested) ++ pascal_gimplify_function (cgn->decl); ++ gimplifying --; ++ if (!gimplifying) ++ { ++ size_t i; ++#if 0 ++ /* Restore sizes */ ++ i = VARRAY_ACTIVE_SIZE (gimplified_sizes); ++ while (i > 0) ++ { ++ i--; ++ *VARRAY_TREE_PTR (gimplified_size_addrs, i) = ++ VARRAY_TREE (gimplified_sizes, i); ++ } ++ /* Restore types */ ++ i = VARRAY_ACTIVE_SIZE (gimplified_types); ++ while (i > 0) ++ { ++ tree type = VARRAY_TREE (gimplified_types, i - 1); ++ tree t = TYPE_NEXT_VARIANT (type); ++ i--; ++ TYPE_SIZES_GIMPLIFIED (type) = 0; ++ for (; t; t = TYPE_NEXT_VARIANT (t)) ++ { ++ TYPE_SIZE (t) = TYPE_SIZE (type); ++ TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (type); ++ TYPE_SIZES_GIMPLIFIED (t) = 0; ++ switch (TREE_CODE (type)) ++ { ++ case INTEGER_TYPE: ++ case ENUMERAL_TYPE: ++ case BOOLEAN_TYPE: ++ case CHAR_TYPE: ++ case REAL_TYPE: ++ TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (type); ++ TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (type); ++ break; ++ ++ default: ++ break; ++ } ++ } ++ } ++#endif ++ varray_type gimplified_types = 0; ++ varray_type gimplified_sizes = 0; ++ varray_type gimplified_size_addrs = 0; ++ } ++} ++ ++static void ++pascal_dump_tree (tree t, int indent) ++{ ++ int i; ++ enum tree_code code; ++ ++ for (i=0; i\n"); ++ return; ++ } ++ code = TREE_CODE (t); ++ fprintf(stdout, "<%s %p>\n", tree_code_name[code], t); ++ switch (code) { ++ case VAR_DECL: ++ case CONST_DECL: ++ case FUNCTION_DECL: ++ return; ++ case BIND_EXPR: ++ pascal_dump_tree (BIND_EXPR_BODY (t), indent+2); ++ return; ++ } ++ if (IS_EXPR_OR_REF_CODE_CLASS (TREE_CODE_CLASS (code))) ++ { ++ int i, l = NUMBER_OF_OPERANDS (code); ++ for (i = FIRST_OPERAND (code); i < l; i++) ++ pascal_dump_tree (TREE_OPERAND (t, i), indent+2); ++ } ++} ++ ++void ++plant_function_end (void) ++{ ++ // gcc_assert (0); ++ location_t loc_aux; ++ tree the_fun = current_function_decl; ++ loc_aux.file = input_filename; ++ loc_aux.line = lineno; ++ ++// fprintf (stderr, "plant_function_end\n"); ++// fflush (0); ++#if 1 ++ gcc_assert (plant_stack && plant_stack->code == FUNCTION_DECL ++ && current_statement_list && the_fun ++ && TREE_CODE (current_statement_list) == BIND_EXPR); ++#endif ++// pascal_dump_tree (current_statement_list, 0); ++ DECL_SAVED_TREE (current_function_decl) = current_statement_list; ++/* DECL_SOURCE_LOCATION (current_function_decl) = loc_aux; */ ++ cfun->function_end_locus = loc_aux; ++#if 0 ++ gimplify_function_tree (the_fun); ++ current_function_decl = NULL_TREE; ++ cfun = NULL; ++ (void)cgraph_node (the_fun); ++ cgraph_finalize_function (the_fun, false); ++#else ++ current_function_decl = DECL_CONTEXT (the_fun); ++ cfun = NULL; ++ ++ if (!DECL_CONTEXT (the_fun) ++ || TREE_CODE (DECL_CONTEXT (the_fun)) != FUNCTION_DECL ++ /* PASCAL_METHOD (the_fun) */) ++ { ++// current_function_decl = NULL_TREE; ++ current_function_decl = the_fun; ++// allow_packed_addresses = 1; ++ pascal_gimplify_function (the_fun); ++// allow_packed_addresses = 0; ++ cgraph_finalize_function (the_fun, false); ++ current_function_decl = NULL_TREE; ++ } ++ else ++ /* Register this function with cgraph just far enough to get it ++ added to our parent's nested function list. */ ++ (void) cgraph_node (the_fun); ++#endif ++ current_statement_list = plant_stack->statement_list; ++ plant_stack = plant_stack->next; ++} ++ ++void ++plant_return (tree result) ++{ ++ tree type = result? TREE_TYPE (result) : void_type_node; ++// fprintf (stderr, "plant_return_statement\n"); ++// fflush (0); ++ plant_expr_stmt (build1 (RETURN_EXPR, type, result)); ++} ++ ++void ++plant_null_return (void) ++{ ++ plant_return (NULL_TREE); ++} ++ ++void ++plant_start_cond (tree condition, int i) ++{ ++ // gcc_assert (0); ++ struct plant_nesting * nest = ggc_alloc (sizeof (*nest)); ++ nest->code = COND_EXPR; ++ nest->arg0 = condition; ++ nest->arg1 = nest->arg2 = NULL_TREE; ++ nest->next = plant_stack; ++ nest->statement_list = current_statement_list; ++ nest->locus = plant_locus; ++ current_statement_list = NULL_TREE; ++ plant_stack = nest; ++// fprintf (stderr, "plant_start_cond\n"); ++// fflush (0); ++} ++ ++void ++plant_end_cond (void) ++{ ++ // gcc_assert (0); ++ tree st1, st2; ++// fprintf (stderr, "plant_end_cond\n"); ++// fflush (0); ++ gcc_assert (plant_stack && plant_stack->code == COND_EXPR); ++ if (!current_statement_list) ++ current_statement_list = build_empty_stmt (); ++ if (plant_stack->arg1) ++ { ++ st1 = plant_stack->arg1; ++ st2 = current_statement_list; ++ } ++ else ++ { ++ st1 = current_statement_list; ++ st2 = build_empty_stmt (); ++ } ++ st1 = build3 (COND_EXPR, void_type_node, plant_stack->arg0, st1, st2); ++ SET_EXPR_LOCATION (st1, plant_stack->locus); ++ current_statement_list = plant_stack->statement_list; ++ plant_stack = plant_stack->next; ++ plant_expr_stmt (st1); ++} ++ ++void ++plant_start_else (void) ++{ ++ // gcc_assert (0); ++// fprintf (stderr, "plant_start_else\n"); ++// fflush (0); ++ gcc_assert (plant_stack && plant_stack->code == COND_EXPR); ++ gcc_assert (!plant_stack->arg1); ++ if (current_statement_list) ++ { ++ plant_stack->arg1 = current_statement_list; ++ current_statement_list = NULL_TREE; ++ } ++ else ++ plant_stack->arg1 = build_empty_stmt (); ++} ++ ++void ++plant_label (tree label) ++{ ++ tree st = build1 (LABEL_EXPR, void_type_node, label); ++ gcc_assert (DECL_CONTEXT (label) ++ && DECL_CONTEXT (label) == current_function_decl); ++// gcc_assert (0); ++ plant_expr_stmt (st); ++} ++ ++void ++plant_goto (tree label) ++{ ++ tree st = build1 (GOTO_EXPR, void_type_node, label); ++// gcc_assert (0); ++ plant_expr_stmt (st); ++} ++ ++/* pushcase */ ++void ++plant_exit_something (void) ++{ ++// gcc_assert (0); ++ tree jump_stmt; ++// fprintf (stderr, "plant_exit_something\n"); ++// fflush (0); ++ /* david3.pas, gale2a.pas */ ++ if (!plant_stack || plant_stack->code != SWITCH_EXPR) ++ return; ++ gcc_assert (plant_stack && (plant_stack->code == SWITCH_EXPR ++ /* || plant_stack->code == LOOP_EXPR */)); ++ if (!plant_stack->arg2) ++ { ++ tree id = get_unique_identifier ("exit_something"); ++ tree label = build_decl (LABEL_DECL, id, void_type_node); ++ plant_stack->arg2 = build1 (LABEL_EXPR, void_type_node, label); ++ } ++ gcc_assert (TREE_CODE (plant_stack->arg2) == LABEL_EXPR); ++ jump_stmt = build_and_jump (&LABEL_EXPR_LABEL (plant_stack->arg2)); ++ plant_expr_stmt (jump_stmt); ++} ++ ++ ++void ++plant_start_case (int exit_flag, tree expr, tree type, ++ const char *printname) ++{ ++// gcc_assert (0); ++ struct plant_nesting * nest = ggc_alloc (sizeof (*nest)); ++ nest->code = SWITCH_EXPR; ++ nest->arg0 = expr; ++ nest->arg1 = type; ++ nest->arg2 = NULL_TREE; ++ nest->next = plant_stack; ++ nest->statement_list = current_statement_list; ++ nest->locus = plant_locus; ++ current_statement_list = NULL_TREE; ++ plant_stack = nest; ++// fprintf (stderr, "plant_start_case\n"); ++// fflush (0); ++} ++ ++ ++void ++plant_end_case (tree expr) ++{ ++// gcc_assert (0); ++ tree st; ++ tree body = current_statement_list; ++ gcc_assert (plant_stack); ++ if (plant_stack->code != SWITCH_EXPR) ++ { ++ error ("unexpected end of case"); ++ return; ++ } ++ if (plant_stack->arg2) ++ { ++ tree label = LABEL_EXPR_LABEL (plant_stack->arg2); ++// body = build (COMPOUND_EXPR, void_type_node, plant_stack->arg2, body); ++ body = build (COMPOUND_EXPR, void_type_node, body, plant_stack->arg2); ++ pushdecl_nocheck (label); ++ PASCAL_LABEL_SET (label) = 1; ++ TREE_USED (label) = 1; ++ DECL_CONTEXT (label) = current_function_decl; ++// st = build1 (DECL_EXPR, void_type_node, ++// LABEL_EXPR_LABEL (plant_stack->arg2)); ++// body = build (COMPOUND_EXPR, void_type_node, st, body); ++ } ++ st = build3 (SWITCH_EXPR, void_type_node, plant_stack->arg0, ++ body, NULL_TREE); ++ SET_EXPR_LOCATION (st, plant_stack->locus); ++ current_statement_list = plant_stack->statement_list; ++ plant_stack = plant_stack->next; ++ plant_expr_stmt (st); ++// fprintf(stderr, "plant_end_case\n"); ++} ++ ++static void ++plant_case_label (tree low, tree high, tree label) ++{ ++ tree st = build3 (CASE_LABEL_EXPR, ++ void_type_node, ++ low, ++ high, ++ label); ++ if (!DECL_CONTEXT (label)) ++ DECL_CONTEXT (label) = current_function_decl; ++ plant_expr_stmt (st); ++// fprintf(stderr, "plant_case_label\n"); ++} ++ ++int ++pushcase (tree value, tree (*converter) (tree, tree), tree label, ++ tree *duplicate) ++{ ++// gcc_assert (0); ++ tree index_type; ++ tree nominal_type; ++ gcc_assert (plant_stack); ++ if (plant_stack->code != SWITCH_EXPR) ++ { ++ error("unexpected case label"); ++ return 0; ++ } ++ index_type = TREE_TYPE (plant_stack->arg0); ++ nominal_type = plant_stack->arg1; ++ if (index_type == error_mark_node) ++ return 0; ++ ++ /* Convert VALUE to the type in which the comparisons are nominally done. */ ++ if (value != 0) ++ value = (*converter) (nominal_type, value); ++ ++ plant_case_label (value, NULL_TREE, label); ++// plant_case_label (value, value, label); ++ return 0; ++} ++ ++int ++pushcase_range (tree value1, tree value2, tree (*converter) (tree, tree), ++ tree label, tree *duplicate) ++{ ++// gcc_assert (0); ++ tree index_type; ++ tree nominal_type; ++ gcc_assert (plant_stack); ++ if (plant_stack->code != SWITCH_EXPR) ++ { ++ error("unexpected case label"); ++ return 0; ++ } ++ index_type = TREE_TYPE (plant_stack->arg0); ++ nominal_type = plant_stack->arg1; ++ if (index_type == error_mark_node) ++ return 0; ++ ++ /* Convert VALUEs to type in which the comparisons are nominally done ++ and replace any unspecified value with the corresponding bound. */ ++ ++ if (value1 == 0) ++ value1 = TYPE_MIN_VALUE (index_type); ++ if (value2 == 0) ++ value2 = TYPE_MAX_VALUE (index_type); ++ ++ /* Fail if the range is empty. Do this before any conversion since ++ we want to allow out-of-range empty ranges. */ ++ if (value2 != 0 && tree_int_cst_lt (value2, value1)) ++ return 4; ++ ++ /* If the max was unbounded, use the max of the nominal_type we are ++ converting to. Do this after the < check above to suppress false ++ positives. */ ++ if (value2 == 0) ++ value2 = TYPE_MAX_VALUE (nominal_type); ++ ++ value1 = (*converter) (nominal_type, value1); ++ value2 = (*converter) (nominal_type, value2); ++ ++ plant_case_label (value1, value2, label); ++ ++ return 0; ++} ++ ++ ++ ++struct plant_nesting * ++plant_start_loop (int i) ++{ ++ // gcc_assert (0); ++ struct plant_nesting * nest = ggc_alloc (sizeof (*nest)); ++// fprintf (stderr, "plant_start_loop_continue_elsewhere(%d)\n", i); ++// fflush (0); ++ ++ nest->code = LOOP_EXPR; ++ nest->flags = 0; ++ nest->arg0 = nest->arg1 = nest->arg2 = NULL_TREE; ++ nest->next = plant_stack; ++ nest->statement_list = current_statement_list; ++ nest->locus = plant_locus; ++ current_statement_list = NULL_TREE; ++ plant_stack = nest; ++ return nest; ++} ++ ++void ++plant_loop_continue_here (void) ++{ ++ // gcc_assert (0); ++// fprintf (stderr, "plant_loop_continue_here\n"); ++// fflush (0); ++ plant_nesting * ll = plant_stack; ++ while (ll && ll->code == BIND_EXPR) ++ ll = ll->next; ++ gcc_assert (ll && ll->code == LOOP_EXPR); ++ gcc_assert (!(LOOP_HAS_CONTINUE & ll->flags)); ++ if (!ll->arg0) ++ ll->arg0 = build1 (LABEL_EXPR, void_type_node, NULL_TREE); ++ gcc_assert (TREE_CODE (ll->arg0) == LABEL_EXPR); ++ plant_expr_stmt (ll->arg0); ++ ll->flags |= LOOP_HAS_CONTINUE; ++} ++ ++int ++plant_continue_loop (struct plant_nesting * loop) ++{ ++ // gcc_assert (0); ++ tree jump_stmt; ++// fprintf (stderr, "plant_continue_loop\n"); ++// fflush (0); ++ if (!loop) ++ { ++ loop = plant_stack; ++ while (loop && loop->code != LOOP_EXPR) ++ loop = loop->next; ++ } ++ gcc_assert (loop && loop->code == LOOP_EXPR); ++ if (!loop->arg0) ++ loop->arg0 = build1 (LABEL_EXPR, void_type_node, NULL_TREE); ++ gcc_assert (TREE_CODE (loop->arg0) == LABEL_EXPR); ++ jump_stmt = build_and_jump (&LABEL_EXPR_LABEL (loop->arg0)); ++ plant_expr_stmt (jump_stmt); ++ return 1; ++} ++ ++int ++plant_exit_loop (struct plant_nesting * loop) ++{ ++ // gcc_assert (0); ++ tree exit_st; ++ gcc_assert (!loop); ++// fprintf (stderr, "plant_exit_loop\n"); ++// fflush (0); ++ if (!loop) ++ { ++ loop = plant_stack; ++ while (loop && loop->code != LOOP_EXPR) ++ loop = loop->next; ++ } ++ gcc_assert (loop && loop->code == LOOP_EXPR); ++ exit_st = build1 (EXIT_EXPR, void_type_node, boolean_true_node); ++ plant_expr_stmt (exit_st); ++ return 1; ++} ++ ++int ++plant_exit_loop_if_false (struct plant_nesting * loop, tree condition) ++{ ++ // gcc_assert (0); ++ tree exit_st; ++ gcc_assert (!loop); ++// fprintf (stderr, "plant_exit_loop_if_false\n"); ++// fflush (0); ++ condition = build1 (TRUTH_NOT_EXPR, TREE_TYPE (condition), condition); ++ exit_st = build1 (EXIT_EXPR, void_type_node, condition); ++ plant_expr_stmt (exit_st); ++ return 1; ++} ++ ++void ++plant_end_loop (void) ++{ ++ // gcc_assert (0); ++ tree body = current_statement_list; ++// fprintf (stderr, "plant_end_loop\n"); ++// fflush (0); ++ gcc_assert (plant_stack && plant_stack->code == LOOP_EXPR); ++ if (plant_stack->arg0 && LABEL_EXPR_LABEL (plant_stack->arg0) ++ && !(LOOP_HAS_CONTINUE & plant_stack->flags)) ++ body = build (COMPOUND_EXPR, void_type_node, plant_stack->arg0, body); ++ if (plant_stack->arg0 && !LABEL_EXPR_LABEL (plant_stack->arg0)) ++ LABEL_EXPR_LABEL (plant_stack->arg0) = create_artificial_label (); ++ body = build1 (LOOP_EXPR, void_type_node, body); ++ SET_EXPR_LOCATION (body, plant_stack->locus); ++ current_statement_list = plant_stack->statement_list; ++ plant_stack = plant_stack->next; ++ plant_expr_stmt (body); ++} ++ ++ ++void ++plant_start_bindings (int flags) ++{ ++#if 1 ++ // gcc_assert (0); ++ struct plant_nesting * nest = ggc_alloc (sizeof (*nest)); ++ nest->code = BIND_EXPR; ++ nest->arg0 = nest->arg1 = nest->arg2 = NULL_TREE; ++ nest->next = plant_stack; ++ nest->statement_list = current_statement_list; ++ nest->locus = plant_locus; ++ current_statement_list = NULL_TREE; ++ plant_stack = nest; ++ ++// fprintf (stderr, "plant_start_bindings\n"); ++ fflush (0); ++#endif ++} ++ ++void ++plant_end_bindings (tree vars, int mark_ends, int dont_jump_in) ++{ ++#if 1 ++ // gcc_assert (0); ++// fprintf (stderr, "plant_end_bindings\n"); ++// if (!vars) ++// fprintf (stderr, " no vars\n"); ++// else ++// debug_tree (vars); ++ fflush (0); ++#endif ++} ++ ++ ++void ++plant_expr_stmt (tree expr) ++{ ++// fprintf (stderr, "plant_expr_stmt\n"); ++// fflush (0); ++ if (EM (expr)) ++ return; ++ if (!EXPR_HAS_LOCATION (expr) ++ && TREE_CODE (expr) != LABEL_EXPR ++ && TREE_CODE (expr) != COMPOUND_EXPR ++ && plant_locus_initialized) ++ SET_EXPR_LOCATION (expr, plant_locus); ++ if (current_statement_list) ++ current_statement_list = build (COMPOUND_EXPR, ++ TREE_TYPE (expr), ++ current_statement_list, ++ expr); ++ else ++ current_statement_list = expr; ++} ++ ++ ++void ++plant_bind_block (tree block) ++{ ++ tree statement_list; ++#if 0 ++ fprintf (stderr, "plant_bind_block\n"); ++ if (block) ++ debug_tree(block); ++ else ++ fprintf (stderr, " no block\n"); ++ fflush (0); ++#endif ++ if (errorcount && !(plant_stack->code == BIND_EXPR ++ || plant_stack->code == FUNCTION_DECL)) ++ { ++ exit_compilation (); ++ } ++ gcc_assert (plant_stack->code == BIND_EXPR ++ || plant_stack->code == FUNCTION_DECL); ++ statement_list = current_statement_list; ++ if (block) ++ { ++ tree t; ++#if 0 ++ for (t = BLOCK_VARS (block); t ; t = TREE_CHAIN (t)) ++ { ++ tree id = DECL_NAME (t); ++ const char * n = IDENTIFIER_POINTER (id); ++ fprintf(stderr, "block var %s\n", n? n : "???"); ++ } ++#endif ++ ++ if (!statement_list) ++ statement_list = build_empty_stmt (); ++#if 1 ++ statement_list = build3 (BIND_EXPR, ++ void_type_node, ++ BLOCK_VARS (block), ++ statement_list, ++ block); ++#endif ++ } ++ if (plant_stack->code != FUNCTION_DECL) ++ { ++ current_statement_list = plant_stack->statement_list; ++ if (statement_list) ++ plant_expr_stmt (statement_list); ++ plant_stack = plant_stack->next; ++ } ++ else ++ current_statement_list = statement_list; ++} ++#endif ++#ifdef GCC_3_3 ++#include "gt-p-plant.h" ++#endif +diff -urN gcc/p.old/plant.h gcc/p/plant.h +--- gcc/p.old/plant.h 1970-01-01 00:00:00.000000000 +0000 ++++ gcc/p/plant.h 2006-03-03 02:36:35.000000000 +0000 +@@ -0,0 +1,127 @@ ++/* Compatibility macros: redirect expand_* calls to plant.c. ++ ++ Copyright (C) 2006 Free Software Foundation, Inc. ++ ++ Authors: Waldek Hebisch ++ ++ 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. */ ++ ++#define expand_goto(x) plant_goto (x) ++#define expand_label(x) plant_label (x) ++#define expand_decl(x) plant_decl (x) ++#define label_rtx(x) 0 ++#define emit_line_note(x) plant_line_note (x) ++#define emit_nop() plant_nop() ++#define expand_decl_init(x) plant_decl_init(x) ++#define expand_function_start(x, y) plant_function_start (x, y) ++#define expand_function_end() plant_function_end () ++#define expand_return(x) plant_return (x) ++#define expand_null_return() plant_null_return () ++#define expand_start_cond(x, y) plant_start_cond (x, y) ++#define expand_end_cond() plant_end_cond () ++#define expand_start_else() plant_start_else () ++#define expand_exit_something() plant_exit_something () ++#define expand_start_case(x, y, z, w) plant_start_case(x, y, z, w) ++#define expand_end_case(x) plant_end_case (x) ++#define expand_start_loop_continue_elsewhere(x) plant_start_loop (x) ++#define expand_loop_continue_here() plant_loop_continue_here () ++#define expand_continue_loop(x) plant_continue_loop(x) ++#define expand_exit_loop(x) plant_exit_loop(x) ++#define expand_exit_loop_if_false(x, y) plant_exit_loop_if_false (x, y) ++#define expand_end_loop() plant_end_loop () ++#define expand_start_loop(x) plant_start_loop (x) ++#define expand_start_bindings(x) plant_start_bindings (x) ++#define expand_end_bindings(x, y, z) plant_end_bindings (x, y, z) ++#define expand_expr_stmt(x) plant_expr_stmt (x) ++#define expand_asm plant_asm ++#define expand_asm_operands(x, y, z, u, v, w) plant_asm_operands(x, y, z, u, v, w) ++ ++/* #define pushcase(x, y, z, w) plant_case(x, y, z, w) */ ++ ++ ++extern void clear_last_expr (void); ++ ++extern int ++pushcase (tree value, tree (*converter) (tree, tree), tree label, ++ tree *duplicate); ++ ++extern int ++pushcase_range (tree value1, tree value2, tree (*converter) (tree, tree), ++ tree label, tree *duplicate); ++ ++extern void plant_line_note (location_t loc); ++ ++extern void plant_decl (tree decl); ++ ++extern void plant_decl_init (tree decl); ++ ++extern void plant_nop (void); ++ ++extern void plant_goto (tree label); ++ ++extern void plant_label (tree label); ++ ++/* extern void plant_decl (tree decl); */ ++ ++extern void plant_asm (tree string, int vol); ++ ++extern void plant_asm_operands (tree string, tree outputs, ++ tree inputs, tree clobbers, int vol, location_t loc_aux); ++ ++extern void plant_function_start (tree decl, int i); ++ ++extern void plant_function_end (void); ++ ++extern void plant_return (tree result); ++ ++extern void plant_null_return (void); ++ ++extern void plant_start_cond (tree condition, int i); ++ ++extern void plant_end_cond (void); ++ ++extern void plant_start_else (void); ++ ++extern void plant_exit_something (void); ++ ++extern void plant_start_case (int exit_flag, tree expr, tree type, ++ const char *printname); ++ ++extern void plant_end_case (tree expr); ++ ++extern struct plant_nesting * plant_start_loop_continue_elsewhere (int i); ++ ++extern struct plant_nesting * plant_start_loop (int i); ++ ++extern void plant_loop_continue_here (void); ++ ++extern int plant_continue_loop (struct plant_nesting * loop); ++ ++extern int plant_exit_loop (struct plant_nesting * loop); ++ ++extern int plant_exit_loop_if_false (struct plant_nesting * loop, tree condition); ++ ++extern void plant_end_loop (void); ++ ++extern void plant_start_bindings (int flags); ++ ++extern void plant_end_bindings (tree vars, int mark_ends, int dont_jump_in); ++ ++extern void plant_expr_stmt (tree expr); ++ ++extern void plant_bind_block (tree block); +diff -urN gcc/p.old/predef.c gcc/p/predef.c +--- gcc/p.old/predef.c 2006-06-10 17:45:38.403386000 +0000 ++++ gcc/p/predef.c 2006-06-10 17:46:10.413386000 +0000 +@@ -35,14 +35,16 @@ + /* Implementation-defined length of the `Name' field of `BindingType'. */ + #define BINDING_NAME_LENGTH 2048 + +-#ifndef EGCS +-static tree ++// #ifndef EGCS ++tree + xnon_lvalue (tree x) + { +- return TREE_CODE (x) == INTEGER_CST ? x : non_lvalue (x); ++ return TREE_CODE (x) == INTEGER_CST ? x : ++ build1 (NON_LVALUE_EXPR, TREE_TYPE (x), x); + } +-#define non_lvalue xnon_lvalue +-#endif ++// #undef non_lvalue ++// #define non_lvalue xnon_lvalue ++// #endif + + #undef EOF + #undef asm +@@ -279,6 +281,19 @@ + paramstr_variable_node = declare_variable (get_identifier ("_p_CParameters"), + build_pointer_type (cstring_type_node), NULL_TREE, VQ_EXTERNAL | VQ_IMPLICIT); + ++ /* routine to set bits to 1. Used in set constructors */ ++ temp = build_implicit_routine_decl (get_identifier ("__setbits"), ++ void_type_node, tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, long_integer_type_node, ++ tree_cons (NULL_TREE, long_integer_type_node, ++ tree_cons (NULL_TREE, long_integer_type_node, void_list_node)))), ++ ER_EXTERNAL); ++ DECL_ARTIFICIAL (temp) = 1; ++ setbits_routine_node = temp; ++/* ++build1 (ADDR_EXPR, build_pointer_type ( ++ p_build_type_variant (TREE_TYPE (temp), TREE_READONLY (temp), TREE_THIS_VOLATILE (temp))), temp); ++*/ + /* This procedure may return if InOutRes = 0. But it is called automatically + only if InOutRes <> 0 (more efficient, to save function calls in the + normal case). Declaring it noreturn here is thus correct in this +@@ -320,7 +335,7 @@ + tree v = *predef_table[i].value; + decl = build_decl (CONST_DECL, id, TREE_TYPE (v)); + DECL_INITIAL (decl) = v; +- if (TREE_CODE_CLASS (TREE_CODE (v)) == 'c') ++ if (TREE_CODE_CLASS (TREE_CODE (v)) == tcc_constant) + PASCAL_CST_FRESH (v) = 1; + } + if (kind == bk_type) +@@ -331,7 +346,9 @@ + TYPE_NAME (type) = decl = build_decl (TYPE_DECL, id, type); + DECL_ORIGINAL_TYPE (decl) = NULL_TREE /* orig @@ dwarf-2 and gcc-3.3 */; + /* necessary to get debug info (e.g. fjf910.pas, tested with gcc-2.8.1, stabs) */ ++#ifndef GCC_4_0 + rest_of_decl_compilation (decl, NULL, 1, 1); ++#endif + } + if (kind == bk_var) + decl = *predef_table[i].value; +@@ -492,7 +509,11 @@ + if (is_string_compatible_type (*str, 1)) + { + tree t = save_expr_string (*str); +- *str = build1 (ADDR_EXPR, cstring_type_node, PASCAL_STRING_VALUE (t)); ++ tree ptype = cstring_type_node; ++ if (TREE_CODE (TREE_TYPE (t)) == CHAR_TYPE) ++ ptype = build_pointer_type (TREE_TYPE (t)); ++ *str = build1 (ADDR_EXPR, ptype, PASCAL_STRING_VALUE (t)); ++ *str = convert (cstring_type_node, *str); + return PASCAL_STRING_LENGTH (t); + } + else if ((co->cstrings_as_strings || (co->pascal_dialect & B_D_M_PASCAL)) +@@ -621,12 +642,14 @@ + p = save_expr_string (p); + expand_expr_stmt (build_modify_expr (PASCAL_STRING_LENGTH (p), NOP_EXPR, + build_predef_call (p_Read_String, tree_cons (NULL_TREE, file, +- tree_cons (NULL_TREE, build1 (ADDR_EXPR, ptr_type_node, PASCAL_STRING_VALUE (p)), ++ tree_cons (NULL_TREE, convert (ptr_type_node, ++ build_unary_op (ADDR_EXPR, PASCAL_STRING_VALUE (p), 1)), + build_tree_list (NULL_TREE, PASCAL_STRING_CAPACITY (p))))))); + } + else + expand_expr_stmt (build_predef_call (p_Read_FixedString, +- tree_cons (NULL_TREE, file, tree_cons (NULL_TREE, build1 (ADDR_EXPR, ptr_type_node, p), ++ tree_cons (NULL_TREE, file, tree_cons (NULL_TREE, ++ convert (ptr_type_node, build_unary_op (ADDR_EXPR, p, 1)), + build_tree_list (NULL_TREE, pascal_array_type_nelts (type)))))); + continue; + } +@@ -1216,18 +1239,44 @@ + if (r_num == p_Exit && apar) + { + tree id = TREE_VALUE (apar); ++ tree obn = TREE_PURPOSE (apar); + apar = NULL_TREE; +- chk_dialect ("`Exit' with an argument is", U_M_PASCAL); ++ if (obn) ++ chk_dialect ("`Exit' with a qualified identifier as an argument is", ++ GNU_PASCAL); ++ else ++ chk_dialect ("`Exit' with an argument is", U_M_PASCAL); + if (id == void_type_node || (current_module->main_program && id == current_module->name)) + r_num = p_Halt; +- else if (!(current_function_decl && id == DECL_NAME (current_function_decl))) ++ else if (!(current_function_decl && !obn ++ && id == DECL_NAME (current_function_decl))) + { +- struct function *p; ++ struct function *p = outer_function_chain; ++ while (p) ++ { ++ if (!obn && DECL_NAME (p->decl) == id) ++ break; ++ if (PASCAL_METHOD (p->decl)) ++ { ++ tree ot = DECL_CONTEXT (p->decl); ++ tree on, mn; ++ gcc_assert (ot && PASCAL_TYPE_OBJECT (ot)); ++ if (TYPE_POINTER_TO (ot) && ++ PASCAL_TYPE_CLASS (TYPE_POINTER_TO (ot))) ++ ot = TYPE_POINTER_TO (ot); ++ on = DECL_NAME (TYPE_NAME (TYPE_MAIN_VARIANT (ot))); ++ if (obn && on != obn) ++ continue; ++ mn = get_method_name (on, id); ++ if (mn == DECL_NAME (p->decl)) ++ break; ++ } + #ifdef EGCS97 +- for (p = outer_function_chain; p && DECL_NAME (p->decl) != id; p = p->outer) ; ++ p = p->outer; + #else +- for (p = outer_function_chain; p && DECL_NAME (p->decl) != id; p = p->next) ; ++ p = p->next; + #endif ++ } + if (!p) + error ("invalid argument `%s' to `Exit'", IDENTIFIER_NAME (id)); + else if (DECL_LANG_SPECIFIC (p->decl) && DECL_LANG_NONLOCAL_EXIT_LABEL (p->decl)) +@@ -1938,7 +1987,28 @@ + schema_type = TYPE_LANG_BASE (schema_type); + gcc_assert (TREE_CODE (schema_type) != TYPE_DECL); + for (tmp = tags; tmp; tmp = TREE_CHAIN (tmp)) +- TREE_VALUE (tmp) = save_expr (TREE_VALUE (tmp)); ++ { ++ tree v1 = TREE_VALUE (tmp); ++ if (TREE_CODE (v1) == NON_LVALUE_EXPR) ++ v1 = TREE_OPERAND (v1, 0); ++ ++/* @@@@@@@@@@@@@@@@ ?????? ++ if (TREE_SIDE_EFFECTS (v1)) ++ var ++ else ++ save_expr ++*/ ++ if (TREE_CODE (v1) != INTEGER_CST ++ && TREE_CODE (v1) != STRING_CST) ++ { ++ tree v2 = make_new_variable ("new_disc", TREE_TYPE (v1)); ++ expand_expr_stmt (build_modify_expr (v2, NOP_EXPR, v1)); ++ TREE_VALUE (tmp) = v2; ++// TREE_VALUE (tmp) = save_expr (TREE_VALUE (tmp)); ++ } ++ else ++ TREE_VALUE (tmp) = v1; ++ } + type = build_discriminated_schema_type (schema_type, tags, 1); + CHK_EM (type); + type = build_pointer_type (type); +@@ -1963,6 +2033,11 @@ + chk_dialect_1 ("function-style `%s' call is", B_D_M_PASCAL, r_name); + result = make_new_variable ("new", type); + expand_expr_stmt (build_modify_expr (result, NOP_EXPR, retval)); ++#if 0 ++ result = build (COMPOUND_EXPR, type, ++ build_modify_expr (result, NOP_EXPR, retval), ++ result); ++#endif + retval = result; + /* @@ This would be easier (fjf226k.pas), but then init_any below must + return an expression and we have to use COMPOUND_EXPR's here +@@ -2422,7 +2497,8 @@ + /* If 3rd parameter is missing, pass MaxInt and let the RTS truncate */ + if (argcount == 2) + apar = chainon (apar, build_tree_list (NULL_TREE, pascal_maxint_node)); +- apar = tree_cons (NULL_TREE, build1 (ADDR_EXPR, ptr_type_node, PASCAL_STRING_VALUE (val)), ++ apar = tree_cons (NULL_TREE, convert (ptr_type_node, ++ build_unary_op (ADDR_EXPR, PASCAL_STRING_VALUE (val), 1)), + tree_cons (NULL_TREE, PASCAL_STRING_LENGTH (val), TREE_CHAIN (apar))); + apar = chainon (apar, tree_cons (NULL_TREE, actual_result, build_tree_list (NULL_TREE, + r_num == p_Copy ? integer_zero_node : argcount == 2 ? integer_one_node : build_int_2 (2, 0)))); +@@ -2624,8 +2700,15 @@ + else if (!integer_onep (val)) + errstr = "first argument to `%s' is False"; + if (argcount == 2) +- retval = val2; +- else ++ { ++ if (TREE_CODE (val2) == FUNCTION_DECL ++ || (TREE_CODE (TREE_TYPE (val2)) == REFERENCE_TYPE && ++ TREE_CODE (TREE_TYPE (TREE_TYPE (val2))) == FUNCTION_TYPE)) ++ errstr = "`%s' can not return a routine"; ++ else ++ retval = val2; ++ } ++ else + { + retval = copy_node (boolean_true_node); + PASCAL_CST_FRESH (retval) = 0; +@@ -2734,14 +2817,22 @@ + } + else if (r_num == p_SizeOf) + { ++#if 0 + #ifdef PG__NEW_STRINGS + /* @@@@@@ what if val is a TYPE_DECL ??? */ + if (PASCAL_TYPE_PREDISCRIMINATED_STRING (type)) ++#if 1 ++ // gcc_assert (0); ++ 0; ++// retval = SUBSTITUTE_PLACEHOLDER_IN_EXPR (retval, val); ++#else + retval = fold (non_lvalue ( + build (WITH_RECORD_EXPR, size_type_node, + convert (size_type_node, retval), val))); ++#endif + else + #endif ++#endif + #ifdef EGCS97 + retval = non_lvalue (build_pascal_binary_op (CEIL_DIV_EXPR, convert (size_type_node, TYPE_SIZE_UNIT (type)), + build_int_2 (TYPE_PRECISION (byte_integer_type_node) / BITS_PER_UNIT, 0))); +@@ -2749,6 +2840,13 @@ + retval = non_lvalue (build_pascal_binary_op (CEIL_DIV_EXPR, convert (size_type_node, TYPE_SIZE (type)), + build_int_2 (TYPE_PRECISION (byte_integer_type_node), 0))); + #endif ++ if (PASCAL_TYPE_PREDISCRIMINATED_STRING (type)) ++#ifdef GCC_4_0 ++ retval = SUBSTITUTE_PLACEHOLDER_IN_EXPR (retval, val); ++#else ++ retval = fold (non_lvalue (build (WITH_RECORD_EXPR, size_type_node, ++ convert (size_type_node, retval), val))); ++#endif + } + else if (r_num == p_BitSizeOf) + retval = non_lvalue (convert (long_long_integer_type_node, TYPE_SIZE (type))); +diff -urN gcc/p.old/rts/rts-version gcc/p/rts/rts-version +--- gcc/p.old/rts/rts-version 2006-06-10 17:45:38.423386000 +0000 ++++ gcc/p/rts/rts-version 2006-06-10 17:46:10.433386000 +0000 +@@ -1 +1 @@ +-20060215 ++20060325 +diff -urN gcc/p.old/statements.c gcc/p/statements.c +--- gcc/p.old/statements.c 2006-06-10 17:45:38.413386000 +0000 ++++ gcc/p/statements.c 2006-06-10 17:46:10.423386000 +0000 +@@ -743,8 +743,13 @@ + tree comp_ref; + if (PASCAL_FIELD_SHADOWED (field)) + /* No need to recurse. Avoid `find_field' */ ++#ifndef GCC_4_0 + comp_ref = fold (build (COMPONENT_REF, TREE_TYPE (field), + base, field)); ++#else ++ comp_ref = fold (build3 (COMPONENT_REF, TREE_TYPE (field), ++ base, field, NULL_TREE)); ++#endif + else + comp_ref = build_component_ref_no_schema_dereference (base, + DECL_NAME (field), 1); +@@ -994,9 +999,9 @@ + { + tree field = TREE_VALUE (variant), init = TYPE_GET_INITIALIZER (TREE_TYPE (field)); + tree c = TREE_PURPOSE (variant); +- tree label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); + if (!c) /* otherwise */ + { ++ tree label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); + int r = pushcase (NULL_TREE, NULL, label, &duplicate); + gcc_assert (!r); + have_otherwise = 1; +@@ -1004,6 +1009,7 @@ + else + for (; c; c= TREE_CHAIN (c)) + { ++ tree label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); + int r = TREE_PURPOSE (c) + ? pushcase_range (TREE_VALUE (c), TREE_PURPOSE (c), convert_and_check, label, &duplicate) + : pushcase (TREE_VALUE (c), convert_and_check, label, &duplicate); +@@ -1062,7 +1068,12 @@ + if (TREE_CODE (t) == VAR_DECL && !DECL_EXTERNAL (t)) + { + if (global || !TREE_STATIC (t)) +- init_any (t, the_end, 1); ++ { ++ gcc_assert (the_end || !DECL_ARTIFICIAL (t) ++ || !PASCAL_TYPE_FILE (TREE_TYPE (t))); ++ if (!DECL_ARTIFICIAL (t) || !PASCAL_TYPE_FILE (TREE_TYPE (t))) ++ init_any (t, the_end, 1); ++ } + else if (!the_end) + #ifndef EGCS97 + { +@@ -1112,13 +1123,19 @@ + { + if (PASCAL_TREE_IGNORABLE (t)) + { +- if (TREE_CODE_CLASS (TREE_CODE (t)) == 'c') +- t = convert (void_type_node, t); ++ if (TREE_CODE_CLASS (TREE_CODE (t)) == tcc_constant) ++ return; + } + else if (!function_called) +- error ("expression used as a statement"); ++ { ++ error ("expression used as a statement"); ++ return; ++ } + else if (TREE_CODE (t) == FUNCTION_DECL) +- error ("missing arguments in routine call"); ++ { ++ error ("missing arguments in routine call"); ++ return; ++ } + else if (TREE_TYPE (t) != void_type_node + && !(TREE_CODE (t) == CALL_EXPR + && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR +@@ -1196,6 +1213,8 @@ + schema_target = undo_schema_dereference (target); + DEREFERENCE_SCHEMA (source); + DEREFERENCE_SCHEMA (target); ++ CHK_EM (source); ++ CHK_EM (target); + + /* Restricted types. @@@@ Maybe this needs further checking */ + if (TREE_CODE (source) == CALL_EXPR && PASCAL_TYPE_RESTRICTED (TREE_TYPE (source))) +@@ -1233,7 +1252,8 @@ + { + if (!lvalue_or_else (schema_target, "assignment") || !mark_lvalue (schema_target, "assignment", 1)) + return; +- stmt = build (MODIFY_EXPR, TREE_TYPE (schema_target), schema_target, schema_source); ++ stmt = build (MODIFY_EXPR, TREE_TYPE (schema_target), ++ schema_target, schema_source); + TREE_SIDE_EFFECTS (stmt) = 1; + if (TREE_CODE (schema_check) != INTEGER_CST) + stmt = build (COMPOUND_EXPR, TREE_TYPE (stmt), schema_check, stmt); +@@ -1343,6 +1363,7 @@ + length = integer_zero_node; + else + { ++#if 0 + /* Use save_expr, so the length is not computed twice (for the + number of chars to move and the assignment to the target length). */ + length = save_expr (fold (build_pascal_binary_op (MIN_EXPR, PASCAL_STRING_LENGTH (source), capacity))); +@@ -1350,6 +1371,21 @@ + be e.g. an array returned by a function or whatever. */ + expr1 = build_memcpy (build_unary_op (ADDR_EXPR, PASCAL_STRING_VALUE (target), 1), + build1 (ADDR_EXPR, cstring_type_node, PASCAL_STRING_VALUE (source)), length); ++#else ++ /* save_expr would cause problems */ ++ tree olen = PASCAL_STRING_LENGTH (source); ++ tree las; ++ length = make_new_variable ("str_len", TREE_TYPE (olen)); ++ las = build_pascal_binary_op (MIN_EXPR, olen, capacity); ++ las = build_modify_expr (length, NOP_EXPR, fold (las)); ++ expr1 = build_memcpy ( ++ build_unary_op (ADDR_EXPR, ++ PASCAL_STRING_VALUE (target), 1), ++ build1 (ADDR_EXPR, cstring_type_node, ++ PASCAL_STRING_VALUE (source)), ++ length); ++ expr1 = build (COMPOUND_EXPR, TREE_TYPE (expr1), las, expr1); ++#endif + } + } + break; +@@ -1505,6 +1541,8 @@ + tree decl_argv = add_parm_decl (decl_argc, cstring_ptr_type_node, get_identifier ("argv")); + tree decl_envp = add_parm_decl (decl_argv, cstring_ptr_type_node, get_identifier ("envp")); + start_implicit_routine (NULL_TREE, get_identifier (name), integer_type_node, decl_envp); ++ ++ TREE_USED (decl_argc) = TREE_USED (decl_argv) = TREE_USED (decl_envp) = 1; + + /* If it is called `main', let the backend do any necessary magic. */ + if (!strcmp (name, "main")) +@@ -1650,10 +1688,15 @@ + un_initialize_block (decls, 0, 1); + + if (!implicit || DECL_INITIAL (current_module->finalizer)) ++ { + expand_expr_stmt (build_routine_call ( + build_implicit_routine_decl (get_identifier ("_p_AtExit"), void_type_node, + tree_cons (NULL_TREE, ptr_type_node, void_list_node), ER_EXTERNAL), +- build_tree_list (NULL_TREE, build1 (ADDR_EXPR, ptr_type_node, current_module->finalizer)))); ++ build_tree_list (NULL_TREE, convert(ptr_type_node, ++ build_unary_op (ADDR_EXPR, current_module->finalizer, 0))) ++ )); ++// TREE_USED (current_module->finalizer) = 1; ++ } + if (current_module->main_program) + call_no_args (get_identifier ("_p_DoInitProc"), 1); + } +@@ -1684,7 +1727,7 @@ + implicit_module_structors (void) + { + const char *save_filename = start_dummy_file_name (); +- if (TREE_USED (current_module->finalizer) && !DECL_INITIAL (current_module->finalizer)) ++ if (/* 1 TREE_USED (current_module->finalizer) && */ !DECL_INITIAL (current_module->finalizer) ) + { + start_destructor (); + finish_destructor (); +diff -urN gcc/p.old/test/fjf597.pas gcc/p/test/fjf597.pas +--- gcc/p.old/test/fjf597.pas 2006-06-10 17:45:38.423386000 +0000 ++++ gcc/p/test/fjf597.pas 2006-06-10 17:46:10.433386000 +0000 +@@ -3,7 +3,7 @@ + This test didn't reproduce the crash per se, but (before the fix) + it could be used to show with debug_tree() some obstack problems + (in finish_function() at the end of function f). } +- ++{$W-} + program fjf597; + + type +diff -urN gcc/p.old/test/fjf904j.pas gcc/p/test/fjf904j.pas +--- gcc/p.old/test/fjf904j.pas 2006-06-10 17:45:38.423386000 +0000 ++++ gcc/p/test/fjf904j.pas 2006-06-10 17:46:10.433386000 +0000 +@@ -1,4 +1,4 @@ + program fjf904j; + begin +- CompilerAssert (True, 42) { WARN } ++ CompilerAssert (True, 42) { WRONG } + end. +diff -urN gcc/p.old/test/test_run gcc/p/test/test_run +--- gcc/p.old/test/test_run 2006-06-10 17:45:38.423386000 +0000 ++++ gcc/p/test/test_run 2006-06-10 17:46:10.433386000 +0000 +@@ -93,14 +93,8 @@ + echo "program Dummy (Output); begin WriteLn ('1723') end." > dummy.pas + + if [ x"$GP" = x ]; then +- NEEDED_OPTIONS="`$PC $PFLAGS --print-needed-options dummy.pas 3>&2 2>&1 1>&3`" +- if $echon "$NEEDED_OPTIONS" | grep '^[^-]' > /dev/null; then +- echo "$0: fatal: \`--print-needed-options' yields:" >&2 +- echo "$NEEDED_OPTIONS" >&2 +- exit 1 +- fi + DEFAULT_UNIT_DIR="`$PC $PFLAGS --print-file-name=units`" +- INVOKE_PC1="$PC $NEEDED_OPTIONS --unit-path=$DEFAULT_UNIT_DIR -I $DEFAULT_UNIT_DIR" ++ INVOKE_PC1="$PC --unit-path=$DEFAULT_UNIT_DIR -I $DEFAULT_UNIT_DIR" + INVOKE_PC="$INVOKE_PC1" + PC_WITHOUT_GP="" + else +diff -urN gcc/p.old/typecheck.c gcc/p/typecheck.c +--- gcc/p.old/typecheck.c 2006-06-10 17:45:38.413386000 +0000 ++++ gcc/p/typecheck.c 2006-06-10 17:46:10.423386000 +0000 +@@ -33,8 +33,8 @@ + static tree decl_constant_value (tree); + static int is_discriminant_of (tree, tree); + static tree pascal_fold (tree); +-static tree re_fold (tree, tree, int *); +-static tree re_layout_type (tree, tree); ++static tree re_fold (tree, tree, tree, int *); ++static tree re_layout_type (tree, tree, tree); + static void assignment_error_or_warning (const char *, const char *, tree, int, int); + static void push_string (const char *); + static void push_member_name (tree); +@@ -59,6 +59,8 @@ + static void output_pending_init_elements (int); + static void process_init_element (tree); + ++int allow_packed_addresses = 0; ++ + void + cstring_inform (void) + { +@@ -623,7 +625,7 @@ + int constp = TYPE_READONLY (type), volatilep = TYPE_VOLATILE (type); + gcc_assert (TREE_CODE (type) == ARRAY_TYPE); + +- if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'r' || DECL_P (exp)) ++ if (TREE_CODE_CLASS (TREE_CODE (exp)) == tcc_reference || DECL_P (exp)) + { + constp |= TREE_READONLY (exp); + volatilep |= TREE_THIS_VOLATILE (exp); +@@ -665,7 +667,7 @@ + adr = build1 (ADDR_EXPR, ptrtype, exp); + if (!mark_addressable (exp)) + return error_mark_node; +- TREE_CONSTANT (adr) = staticp (exp); ++ TREE_CONSTANT (adr) = staticp (exp) != 0; + TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */ + return adr; + } +@@ -1279,9 +1281,11 @@ + + parmval = convert_for_assignment (type, val, NULL, /* arg passing */ errc->fundecl, errc->parmnum); + ++#ifndef GCC_4_0 + if (PROMOTE_PROTOTYPES && ORDINAL_TYPE (TREE_CODE (type)) + && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))) + parmval = default_conversion (parmval); ++#endif + } + return parmval; + } +@@ -1748,10 +1752,22 @@ + } + if (t && TREE_CODE (t) == IDENTIFIER_NODE) + t = TREE_PURPOSE (index) = check_identifier (t); +- if (t) +- t = probably_call_function (t); +- if (t2) +- t2 = probably_call_function (t2); ++ ++ /* @@@@@ We should use only one piece of code to verify ++ case-constant-list, so the code below should be common ++ to initializers, variant records and case instruction. */ ++ ++ if (t && TREE_CODE (t) == NON_LVALUE_EXPR) ++ t = TREE_OPERAND (t, 0); ++ if (t2 && TREE_CODE (t2) == NON_LVALUE_EXPR) ++ t2 = TREE_OPERAND (t2, 0); ++ ++ if ((t && TREE_CODE (t) != INTEGER_CST) ++ || (t2 && TREE_CODE (t2) != INTEGER_CST)) ++ { ++ error ("array indices in initializers must be constant"); ++ return 1; ++ } + if ((t && EM (t)) || (t2 && EM (t2))) + return 1; + if ((t && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (t)), domain)) +@@ -2058,6 +2074,9 @@ + return TREE_CODE (TREE_TYPE (TREE_VALUE (init))) != TREE_CODE (type); + } + ++/* Schema handling */ ++#if 0 ++ + /* Returns 1 if expr is the CONVERT_EXPR representing an unresolved + schema discriminant belonging to one of the given fields. */ + static int +@@ -2071,6 +2090,7 @@ + return 1; + return 0; + } ++#endif + + /* Returns 1 if type_or_expr contains somewhere in it an unresolved + schema discriminant. If fields is NULL, any discriminant is +@@ -2079,12 +2099,24 @@ + contains_discriminant (tree type_or_expr, tree fields) + { + enum tree_code code = TREE_CODE (type_or_expr); ++ gcc_assert (!fields || TREE_CODE_CLASS TREE_CODE ((fields)) == tcc_type); + switch (code) + { + case ERROR_MARK: + return 0; + ++ case COMPONENT_REF: ++ { ++ tree op0 = TREE_OPERAND (type_or_expr, 0); ++ if (TREE_CODE (op0) == PLACEHOLDER_EXPR) ++ return !fields || TREE_TYPE (op0) == fields; ++ break; /* Check operand below */ ++ } ++ + case VAR_DECL: ++#if 1 ++ return 0; ++#else + if (PASCAL_TREE_DISCRIMINANT (type_or_expr)) + { + tree field; +@@ -2101,6 +2133,7 @@ + && (!fields || is_discriminant_of (type_or_expr, fields))) + return 1; + break; /* Check operand below */ ++#endif + + case BOOLEAN_TYPE: + case CHAR_TYPE: +@@ -2139,8 +2172,10 @@ + } + break; + ++#ifndef GCC_4_0 + case RTL_EXPR: + return 0; ++#endif + + case TREE_LIST: + { +@@ -2166,12 +2201,14 @@ + return 0; + } + ++#if 1 + /* fold() doesn't know about our Boolean constants and constant array references. + Important: Do this *after* folding the operands! */ + static tree + pascal_fold (tree expr) + { + enum tree_code code = TREE_CODE (expr); ++ tree res; + if ((code == NON_LVALUE_EXPR || code == CONVERT_EXPR || code == NOP_EXPR) + && TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE) + { +@@ -2181,9 +2218,21 @@ + else if (integer_onep (op)) + return boolean_true_node; + } ++#if 0 + if (TREE_CODE (expr) == ARRAY_REF) + return fold_array_ref (expr); + return fold (expr); ++#else ++ if (TREE_CODE (expr) == ARRAY_REF) ++ res = fold_array_ref (expr); ++ else ++ res = fold (expr); ++ if (TREE_CODE (res) == INTEGER_CST) ++ { ++ res = copy_node (res); ++ } ++ return res; ++#endif + } + + /* fold() doesn't fold constants below (one or several) CONVERT_EXPR's +@@ -2199,12 +2248,38 @@ + prevents this!). p_foreign_discr can be NULL, otherwise the variable it + points to must have been initialized. + This function is slightly tricky. ;-) */ ++#endif ++ + static tree +-re_fold (tree expr, tree fields, int *p_foreign_discr) ++re_fold (tree expr, tree stype, tree fields, int *p_foreign_discr) + { + enum tree_code code = TREE_CODE (expr); +- int foreign_discr = 0; ++// int foreign_discr = 0; + CHK_EM (expr); ++ ++ if (code == COMPONENT_REF) ++ { ++ tree op0 = TREE_OPERAND (expr, 0); ++ tree field = TREE_OPERAND (expr, 1); ++ tree nf = fields; ++ if (TREE_CODE (op0) == PLACEHOLDER_EXPR && TREE_TYPE (op0) == stype) ++ /* Substitute value */ ++ { ++ tree val; ++ while (nf && TREE_PURPOSE (nf) != field) ++ nf = TREE_CHAIN (nf); ++ gcc_assert (nf); ++ val = TREE_VALUE (nf); ++ gcc_assert (TREE_CODE (val) != FUNCTION_DECL); ++ if (TREE_CODE (val) != VAR_DECL) ++ val = copy_node (val); ++ return pascal_fold (re_fold (val, ++ stype, fields, p_foreign_discr)); ++ } ++ if (TREE_CODE (op0) == PLACEHOLDER_EXPR && p_foreign_discr) ++ *p_foreign_discr = 1; ++ } ++#if 0 + if (code == CONVERT_EXPR && PASCAL_TREE_DISCRIMINANT (expr)) + { + if (!is_discriminant_of (expr, fields)) +@@ -2229,20 +2304,24 @@ + return pascal_fold (expr); + } + } +- else if (code == SAVE_EXPR) ++ else ++#endif ++ if (code == SAVE_EXPR) + /* Copying a SAVE_EXPR is no good idea. ;-) Therefore, we can't + modify its fields, i.e., we can't fold below it. This should only + happen in `New' (hopefully) when it doesn't matter that the type + can't be folded completely. */ +- ; ++ { ++ if (contains_discriminant (expr, stype)) ++ gcc_unreachable (); ++ } + else if (IS_EXPR_OR_REF_CODE_CLASS (TREE_CODE_CLASS (code))) + { + int i, l = NUMBER_OF_OPERANDS (code); + expr = copy_node (expr); + for (i = FIRST_OPERAND (code); i < l; i++) + if (TREE_OPERAND (expr, i)) +- CHK_EM (TREE_OPERAND (expr, i) = re_fold (TREE_OPERAND (expr, i), fields, &foreign_discr)); +- if (!foreign_discr) ++ CHK_EM (TREE_OPERAND (expr, i) = re_fold (TREE_OPERAND (expr, i), stype, fields, p_foreign_discr)); + return pascal_fold (expr); + } + else if (code == TREE_LIST) +@@ -2252,20 +2331,26 @@ + for (t = expr; t; t = TREE_CHAIN (t)) + { + if (TREE_VALUE (t)) +- CHK_EM (TREE_VALUE (t) = re_fold (TREE_VALUE (t), fields, &foreign_discr)); ++ CHK_EM (TREE_VALUE (t) = re_fold (TREE_VALUE (t), stype, fields, p_foreign_discr)); + if (TREE_PURPOSE (t)) +- CHK_EM (TREE_PURPOSE (t) = re_fold (TREE_PURPOSE (t), fields, &foreign_discr)); ++ CHK_EM (TREE_PURPOSE (t) = re_fold (TREE_PURPOSE (t), stype, fields, p_foreign_discr)); + } + } +- if (foreign_discr && p_foreign_discr) +- *p_foreign_discr = 1; + return expr; + } + ++tree ++copy_expr (tree expr) ++{ ++ return re_fold (expr, void_type_node, NULL_TREE, 0); ++} ++ ++#if 1 ++ + /* Recursive subroutine of build_discriminated_schema_type: + Re-build a type with actual discriminants replacing the formal ones. */ + static tree +-re_layout_type (tree type, tree fields) ++re_layout_type (tree type, tree stype, tree fields) + { + int was_packed = PASCAL_TYPE_PACKED (type); + +@@ -2273,7 +2358,7 @@ + that don't depend on the discriminants) is not only made for + efficiency, it also prevents the creation of incompatible types + (fjf590.pas). */ +- if (!contains_discriminant (type, fields)) ++ if (!contains_discriminant (type, stype)) + return build_type_copy (type); + + CHK_EM (type); +@@ -2289,8 +2374,8 @@ + copy_type_lang_specific (type); + new_main_variant (type); + +- CHK_EM (TYPE_MIN_VALUE (type) = re_fold (TYPE_MIN_VALUE (type), fields, &foreign_discr_min)); +- CHK_EM (TYPE_MAX_VALUE (type) = re_fold (TYPE_MAX_VALUE (type), fields, &foreign_discr_max)); ++ CHK_EM (TYPE_MIN_VALUE (type) = re_fold (TYPE_MIN_VALUE (type), stype, fields, &foreign_discr_min)); ++ CHK_EM (TYPE_MAX_VALUE (type) = re_fold (TYPE_MAX_VALUE (type), stype, fields, &foreign_discr_max)); + + /* size_volatile >= 2: prediscriminating (kludge?) */ + if (size_volatile < 2 && !foreign_discr_min && !foreign_discr_max && !check_subrange (TYPE_MIN_VALUE (type), TYPE_MAX_VALUE (type))) +@@ -2309,17 +2394,22 @@ + + /* Subrange type. */ + if (TREE_TYPE (type)) +- CHK_EM (TREE_TYPE (type) = re_layout_type (TREE_TYPE (type), fields)); ++ CHK_EM (TREE_TYPE (type) = re_layout_type (TREE_TYPE (type), stype, fields)); + + if (TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (TYPE_MAX_VALUE (type)))) + TYPE_PRECISION (type) = TYPE_PRECISION (TREE_TYPE (TYPE_MAX_VALUE (type))); + if (TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (TYPE_MIN_VALUE (type)))) + TYPE_PRECISION (type) = TYPE_PRECISION (TREE_TYPE (TYPE_MIN_VALUE (type))); ++#ifdef GCC_4_0 ++ TYPE_CACHED_VALUES_P (type) = 0; ++ TYPE_CACHED_VALUES (type) = NULL_TREE; ++#endif + break; + } + case ARRAY_TYPE: +- type = build_simple_array_type (re_layout_type (TREE_TYPE (type), fields), +- re_layout_type (TYPE_DOMAIN (type), fields)); ++ type = build_simple_array_type ( ++ re_layout_type (TREE_TYPE (type), stype, fields), ++ re_layout_type (TYPE_DOMAIN (type), stype, fields)); + CHK_EM (type); + break; + case RECORD_TYPE: +@@ -2327,13 +2417,17 @@ + if (PASCAL_TYPE_STRING (type)) + { + tree capacity = TYPE_LANG_DECLARED_CAPACITY (type); ++ int dummy = 0; + if (capacity) +- CHK_EM (type = build_pascal_string_schema (re_fold (capacity, fields, NULL))); ++ CHK_EM (type = build_pascal_string_schema ( ++ re_fold (capacity, stype, fields, &dummy))); + break; + } + else + { +- tree field, new_field, old_fields = TYPE_FIELDS (type), new_fields = NULL_TREE; ++ tree field, new_field, old_fields = TYPE_FIELDS (type); ++ tree new_fields = NULL_TREE; ++ tree old_type = type; + struct lang_type *lang_specific = TYPE_LANG_SPECIFIC (type); + int iv = PASCAL_TYPE_INITIALIZER_VARIANTS (type); + #ifndef EGCS97 +@@ -2342,7 +2436,8 @@ + int save_defining_packed_type; + for (field = old_fields; field; field = TREE_CHAIN (field)) + { +- tree f = build_field (DECL_NAME (field), re_layout_type (TREE_TYPE (field), fields)); ++ tree f = build_field (DECL_NAME (field), ++ re_layout_type (TREE_TYPE (field), stype, fields)); + CHK_EM (f); + new_fields = chainon (new_fields, f); + } +@@ -2364,7 +2459,8 @@ + tree tag = TYPE_LANG_VARIANT_TAG (type), t = TREE_VALUE (TREE_PURPOSE (tag)); + if (t) + { +- t = re_fold (t, fields, NULL); ++ int dummy; ++ t = re_fold (t, stype, fields, &dummy); + CHK_EM (t); + TYPE_LANG_VARIANT_TAG (type) = build_tree_list ( + build_tree_list (TREE_PURPOSE (TREE_PURPOSE (tag)), t), TREE_VALUE (tag)); +@@ -2382,7 +2478,12 @@ + the fields parameter which refers to the main record's fields, + but is actually passed for other purposes. But doing it like this + saves us from passing another parameter through the recursion. */ ++#if 0 + if (old_fields != fields && PASCAL_TYPE_SCHEMA (type)) ++#else ++ if (TYPE_MAIN_VARIANT (old_type) != stype ++ && PASCAL_TYPE_SCHEMA (type)) ++#endif + for (field = old_fields, new_field = TYPE_FIELDS (type); + field && new_field; + field = TREE_CHAIN (field), new_field = TREE_CHAIN (new_field)) +@@ -2391,12 +2492,14 @@ + /* Inner schemata must have been (formally) discriminated + before, i.e. PASCAL_TREE_DISCRIMINANT contains the + discriminant's initializer now. */ ++ int dummy; + tree fixup = DECL_LANG_FIXUPLIST (field); + gcc_assert (fixup && TREE_CODE (fixup) != TREE_LIST); + PASCAL_TREE_DISCRIMINANT (new_field) = 1; + gcc_assert (!DECL_LANG_SPECIFIC (new_field)); + allocate_decl_lang_specific (new_field); +- CHK_EM (DECL_LANG_FIXUPLIST (new_field) = re_fold (fixup, fields, NULL)); ++ CHK_EM (DECL_LANG_FIXUPLIST (new_field) = ++ re_fold (fixup, stype, fields, &dummy)); + } + break; + } +@@ -2417,6 +2520,7 @@ + + return type; + } ++#endif + + /* Return a discriminated schema type derived from TYPE (which must + be a schema type as returned by build_schema_type) using the +@@ -2425,6 +2529,7 @@ + build_discriminated_schema_type (tree type, tree discriminants, int prediscriminating) + { + tree type_template = type, field, disc, fix; ++ tree fix_list = NULL_TREE; + #ifndef EGCS97 + struct obstack *ambient_obstack; + #endif +@@ -2466,6 +2571,7 @@ + TREE_VALUE (disc) = val; + val = convert_for_assignment (TREE_TYPE (field), val, "schema discrimination", NULL_TREE, 0); + ++#if 0 + for (fix = DECL_LANG_FIXUPLIST (field); fix; fix = TREE_CHAIN (fix)) + { + tree target = TREE_VALUE (fix); +@@ -2479,11 +2585,16 @@ + TREE_PURPOSE (fix) = TREE_OPERAND (target, 0); + TREE_OPERAND (target, 0) = val; + } +- } ++#else ++ fix_list = tree_cons (field, val, fix_list); ++#endif ++ } ++ fix_list = nreverse (fix_list); ++ + if (!field || DECL_NAME (field) != schema_id || disc) + error ("number of discriminants does not match schema declaration"); + +- type = re_layout_type (type, TYPE_FIELDS (type)); ++ type = re_layout_type (type, TYPE_MAIN_VARIANT (type), fix_list); + CHK_EM (type); + + TYPE_LANG_SPECIFIC (type) = TYPE_LANG_SPECIFIC (type_template); +@@ -2492,7 +2603,9 @@ + + if (TYPE_LANG_INITIAL (type)) + { +- tree t = re_fold (TYPE_LANG_INITIAL (type), TYPE_FIELDS (type_template), NULL); ++ int dummy; ++ tree t = re_fold (TYPE_LANG_INITIAL (type), ++ TYPE_MAIN_VARIANT (type_template), fix_list, &dummy); + CHK_EM (t); + if (check_pascal_initializer (type, t)) + { +@@ -2509,6 +2622,7 @@ + if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (type_template)) + new_main_variant (type); + ++#if 0 + /* Restore the type template for future use. */ + for (field = TYPE_FIELDS (type_template); field; field = TREE_CHAIN (field)) + if (PASCAL_TREE_DISCRIMINANT (field)) +@@ -2517,6 +2631,7 @@ + TREE_OPERAND (TREE_VALUE (fix), 0) = TREE_PURPOSE (fix); + TREE_PURPOSE (fix) = NULL_TREE; + } ++#endif + + CHK_EM (type); + +@@ -2585,8 +2700,10 @@ + return TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE; + + case BIND_EXPR: ++#ifndef GCC_4_0 + case RTL_EXPR: + return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE; ++#endif + + case NOP_EXPR: + { +@@ -2689,11 +2806,14 @@ + error ("address of register variable `%s' requested", IDENTIFIER_NAME (DECL_NAME (x))); + return 0; + } ++ /* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */ ++#ifndef GCC_4_0 + #ifdef GCC_3_3 + put_var_into_stack (x, true); + #else + put_var_into_stack (x); + #endif ++#endif + /* FALLTHROUGH */ + case FUNCTION_DECL: + TREE_ADDRESSABLE (x) = 1; +@@ -2925,6 +3045,18 @@ + return error_mark_node; + } + ++#if 0 ++tree ++convert_for_assignment (tree type, tree rhs, const char *errtype, tree fundecl, int parmnum) ++{ ++ tree res = convert_for_assignment0 (type, rhs, errtype, fundecl, parmnum); ++ CHK_EM (res); ++ if (TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (TREE_TYPE (res))) ++ res = build (NOP_EXPR, type, res); ++ return res; ++} ++#endif ++ + /* Same as warn_for_assignment(), but as an error message. */ + static void + assignment_error_or_warning (const char *msg, const char *errtype, tree fundecl, int argnum, int error_flag) +@@ -3836,7 +3968,12 @@ + { + tree constructor = build_constructor (type, nreverse (el)); + if (constructor_constant) +- TREE_CONSTANT (constructor) = 1; ++ { ++ TREE_CONSTANT (constructor) = 1; ++#ifdef GCC_4_0 ++ TREE_INVARIANT (constructor) = 1; ++#endif ++ } + if (constructor_constant && constructor_simple) + TREE_STATIC (constructor) = 1; + return constructor; +@@ -4004,7 +4141,12 @@ + else + constructor = build_constructor (constructor_type, nreverse (constructor_elements)); + if (constructor_constant) +- TREE_CONSTANT (constructor) = 1; ++ { ++ TREE_CONSTANT (constructor) = 1; ++#ifdef GCC_4_0 ++ TREE_INVARIANT (constructor) = 1; ++#endif ++ } + if (constructor_constant && constructor_simple) + TREE_STATIC (constructor) = 1; + #ifndef EGCS97 +diff -urN gcc/p.old/types.c gcc/p/types.c +--- gcc/p.old/types.c 2006-06-10 17:45:38.413386000 +0000 ++++ gcc/p/types.c 2006-06-10 17:46:10.423386000 +0000 +@@ -37,6 +37,32 @@ + static int count_unsigned_bits (tree); + static void check_nonconstants (tree); + ++#ifdef GCC_4_0 ++tree ++pascal_build_int_cst (tree type, unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi) ++{ ++ tree t = make_node (INTEGER_CST); ++ ++ TREE_INT_CST_LOW (t) = low; ++ TREE_INT_CST_HIGH (t) = hi; ++ TREE_TYPE (t) = type; ++ return t; ++} ++ ++tree ++pascal_fold1 (tree t) ++{ ++ /* Force call to original fold */ ++ tree res = (fold) (t); ++ if (TREE_CODE (res) == INTEGER_CST) ++ return copy_node (res); ++ else ++ return res; ++} ++ ++#endif ++ ++ + tree + check_result_type (tree type) + { +@@ -316,6 +342,9 @@ + TREE_TYPE (t) = empty_set_type_node; /* real type not yet known */ + CONSTRUCTOR_ELTS (t) = elements; + TREE_CONSTANT (t) = TREE_STATIC (t) = is_constant; ++#ifdef GCC_4_0 ++ TREE_INVARIANT (t) = is_constant; ++#endif + PASCAL_CONSTRUCTOR_INT_CST (t) = is_intcst; + TREE_SIDE_EFFECTS (t) = side_effects; + TREE_ADDRESSABLE (t) = 1; +@@ -625,8 +654,13 @@ + pedwarn ("assignment of empty string to a char yields a space"); + ch = ' '; + } ++#ifndef GCC_4_0 + t = build_int_2 (ch & ((1 << BITS_PER_UNIT) - 1), 0); + TREE_TYPE (t) = char_type_node; ++#else ++ t = build_int_cst_wide (char_type_node, ++ ch & ((1 << BITS_PER_UNIT) - 1), 0); ++#endif + PASCAL_CST_FRESH (t) = PASCAL_CST_FRESH (expr); + return t; + } +@@ -692,12 +726,18 @@ + #ifdef PG__NEW_STRINGS + if (!capacity) + { ++#ifdef GCC_4_0 ++ internal_capacity = build3 (COMPONENT_REF, pascal_cardinal_type_node, ++ build (PLACEHOLDER_EXPR, string), fields, NULL_TREE); ++#else + internal_capacity = build (COMPONENT_REF, pascal_cardinal_type_node, + build (PLACEHOLDER_EXPR, string), fields); ++#endif + #if 0 + capacity = integer_zero_node; + #else + capacity = pascal_maxint_node; /* @@@@ */ ++// capacity = internal_capacity; + #endif + } + size_volatile++; /* @@ Otherwise compilation of 'russ3a.pas' crashes */ +@@ -754,7 +794,8 @@ + if (PASCAL_TYPE_STRING (type)) + return 1; + +- if (TREE_CODE (type) != ARRAY_TYPE || TREE_CODE (TREE_TYPE (type)) != CHAR_TYPE) ++ if (TREE_CODE (type) != ARRAY_TYPE ++ || TYPE_MAIN_VARIANT (TREE_TYPE (type)) != char_type_node) + return 0; + + if (!PASCAL_TYPE_PACKED (type)) +@@ -767,7 +808,12 @@ + + /* String type low index must be one and nonvarying according to ISO */ + if (tree_int_cst_equal (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), integer_one_node)) +- return 1; ++ if ((co->pascal_dialect & CLASSIC_PASCAL) && ++ tree_int_cst_equal (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), ++ integer_one_node)) ++ return 0; ++ else ++ return 1; + + if (co->pascal_dialect & C_E_O_PASCAL) + return 0; +@@ -784,7 +830,7 @@ + } + + tree +-build_discriminants (tree names, tree type) ++build_discriminants (tree names, tree type, tree stype) + { + tree t; + if (!ORDINAL_TYPE (TREE_CODE (type))) +@@ -798,10 +844,23 @@ + Store the previous meanings of the identifiers + in the TREE_PURPOSE fields of the id_list. */ + tree id = TREE_VALUE (t); ++#if 0 + tree decl = TREE_VALUE (t) = build_decl (VAR_DECL, id, type); + SET_DECL_ASSEMBLER_NAME (decl, id); + allocate_decl_lang_specific (decl); + PASCAL_TREE_DISCRIMINANT (decl) = 1; ++#else ++ tree decl = build_decl (CONST_DECL, id, type); ++#endif ++ tree field = build_field (id, type); ++#ifdef GCC_4_0 ++ tree val = build3 (COMPONENT_REF, TREE_TYPE (field), ++ build (PLACEHOLDER_EXPR, stype), field, NULL_TREE); ++#else ++ tree val = build (COMPONENT_REF, TREE_TYPE (field), ++ build (PLACEHOLDER_EXPR, stype), field); ++#endif ++ DECL_INITIAL (decl) = val; + TREE_PURPOSE (t) = IDENTIFIER_VALUE (id); + IDENTIFIER_VALUE (id) = decl; + } +@@ -851,7 +910,7 @@ + has_side_effects (tree t, int had) + { + enum tree_code code = TREE_CODE (t); +- if (TREE_CODE_CLASS (code) == 't') ++ if (TREE_CODE_CLASS (code) == tcc_type) + { + tree i = TYPE_GET_INITIALIZER (t); + if (i && has_side_effects (i, 0)) +@@ -911,7 +970,7 @@ + its TYPE_LANG_CODE set accordingly, having as fields the discriminants plus a + `_p_Schema' field which contains the actual type. */ + tree +-build_schema_type (tree type, tree discriminants, tree init) ++build_schema_type (tree type, tree discriminants, tree init, tree stype) + { + tree fields = NULL_TREE, d, tmp, t; + chk_dialect ("schema types are", E_O_M_PASCAL); +@@ -922,10 +981,29 @@ + } + /* Release the identifiers of the discriminants. We must do this also in case + of a previous error, but check_pascal_initializer still needs them! */ ++#if 0 ++ t = stype; ++#endif + for (d = discriminants; d; d = TREE_CHAIN (d)) + { +- tree id = DECL_NAME (TREE_VALUE (d)); +- fields = chainon (fields, build_field (id, TREE_TYPE (TREE_VALUE (d)))); ++// tree id = DECL_NAME (TREE_VALUE (d)); ++#if 0 ++ tree field = build_field (id, TREE_TYPE (TREE_VALUE (d))); ++ tree val = build3 (COMPONENT_REF, TREE_TYPE (field), ++ build (PLACEHOLDER_EXPR, t), field, NULL_TREE); ++ tree fix = DECL_LANG_FIXUPLIST (TREE_VALUE (d)); ++ for (; fix; fix = TREE_CHAIN (fix)) ++ { ++ tree target = TREE_VALUE (fix); ++ gcc_assert (TREE_CODE (target) == CONVERT_EXPR && PASCAL_TREE_DISCRIMINANT (target)); ++ TREE_OPERAND (target, 0) = val; ++ } ++#else ++ tree id = TREE_VALUE (d); ++ tree val = DECL_INITIAL (IDENTIFIER_VALUE (id)); ++ tree field = TREE_OPERAND (val, 1); ++#endif ++ fields = chainon (fields, field); + IDENTIFIER_VALUE (id) = TREE_PURPOSE (d); + } + /* Do not return before this point! */ +@@ -936,7 +1014,7 @@ + for (t = fields; t && !has_side_effects (TREE_TYPE (t), 0); t = TREE_CHAIN (t)) ; + if (t || (init && has_side_effects (init, 0))) + error ("expressions with side-effects are not allowed in schema types"); +- t = finish_struct (start_struct (RECORD_TYPE), fields, 1); ++ t = finish_struct (stype, fields, 1); + CHK_EM (t); + TREE_USED (t) = TREE_USED (type); + allocate_type_lang_specific (t); +@@ -949,7 +1027,7 @@ + d && tmp; d = TREE_CHAIN (d), tmp = TREE_CHAIN (tmp)) + { + allocate_decl_lang_specific (tmp); +- DECL_LANG_FIXUPLIST (tmp) = DECL_LANG_FIXUPLIST (TREE_VALUE (d)); ++ DECL_LANG_FIXUPLIST (tmp) = NULL_TREE /* DECL_LANG_FIXUPLIST (TREE_VALUE (d)) */; + PASCAL_TREE_DISCRIMINANT (tmp) = 1; + } + return t; +@@ -990,9 +1068,9 @@ + if (PASCAL_TYPE_UNDISCRIMINATED_STRING (TREE_TYPE (TREE_TYPE (decl)))) + { + tree new_type, string_type = TREE_TYPE (TREE_TYPE (decl)); +-#ifndef PG__NEW_STRINGS ++/* #ifndef PG__NEW_STRINGS */ ++#if 1 + tree val = build_component_ref (build_indirect_ref (decl, NULL), get_identifier ("Capacity")); +- + size_volatile++; + new_type = build_pascal_string_schema (val); + size_volatile--; +@@ -1066,7 +1144,21 @@ + t = p_build_type_variant (t, 0, TYPE_VOLATILE (t)); + gcc_assert (!PASCAL_TYPE_UNDISCRIMINATED_STRING (t) && !PASCAL_TYPE_UNDISCRIMINATED_SCHEMA (t)); + if (PASCAL_TYPE_PREDISCRIMINATED_STRING (t)) ++#if 0 + t = build_pascal_string_schema (save_nonconstants (TYPE_LANG_DECLARED_CAPACITY (t))); ++#else ++ { ++// = build_component_ref (build_indirect_ref (decl, NULL), get_identifier ("Capacity")); ++// tree l = TYPE_LANG_DECLARED_CAPACITY (t); ++ tree l = build_component_ref (d, get_identifier ("Capacity")); ++#ifdef GCC_4_0 ++ l = SUBSTITUTE_PLACEHOLDER_IN_EXPR (l, d); ++#else ++ l = build (WITH_RECORD_EXPR, TREE_TYPE (l), l, d); ++#endif ++ t = build_pascal_string_schema (save_nonconstants (l)); ++ } ++#endif + else if (PASCAL_TYPE_PREDISCRIMINATED_SCHEMA (t)) + { + tree field, discr = NULL_TREE; +@@ -1169,8 +1261,17 @@ + if (!selector_field && TREE_CODE (selector_type) == IDENTIFIER_NODE) + { + tree decl = lookup_name (selector_type); ++#if 0 + if (decl && TREE_CODE (decl) == VAR_DECL && PASCAL_TREE_DISCRIMINANT (decl)) + selector_field = maybe_schema_discriminant (decl); ++#endif ++ if (decl && TREE_CODE (decl) == CONST_DECL ++ && TREE_CODE (DECL_INITIAL (decl)) == COMPONENT_REF ++ && TREE_CODE (TREE_OPERAND (DECL_INITIAL (decl), 0)) ++ == PLACEHOLDER_EXPR ++ && TREE_TYPE (TREE_OPERAND (DECL_INITIAL (decl), 0)) ++ == current_schema) ++ selector_field = DECL_INITIAL (decl); + else if (!(decl && TREE_CODE (decl) == TYPE_DECL)) + { + error ("selector type name or discriminant identifier expected, `%s' given", +@@ -1180,6 +1281,11 @@ + selector_type = TREE_TYPE (decl); + } + CHK_EM (selector_type); ++ ++ /* @@@@@ We should use only one piece of code to verify ++ case-constant-list, so the code below should be common ++ to initializers, variant records and case instruction. */ ++ + for (t = variant_list; t; t = TREE_CHAIN (t)) + { + tree f = TREE_VALUE (t), c; +@@ -1322,11 +1428,24 @@ + return type; + } + ++#if 1 + if (uns != TYPE_UNSIGNED (type)) + { + TREE_TYPE (type) = build_type_copy (TREE_TYPE (type)); + TYPE_UNSIGNED (TREE_TYPE (type)) = uns; + } ++#else ++ { ++ tree el_type = build_type_copy (TREE_TYPE (type)); ++ TYPE_UNSIGNED (el_type) = uns; ++ TYPE_PRECISION (el_type) = TREE_INT_CST_LOW (bits); ++ TYPE_SIZE (el_type) = NULL_TREE; ++#ifdef EGCS ++ TYPE_SIZE_UNIT (el_type) = NULL_TREE; ++#endif ++ layout_type (type); ++ } ++#endif + + TYPE_ALIGN (type) = TYPE_PRECISION (packed_array_unsigned_short_type_node); + align = bitsize_int (TYPE_ALIGN (type)); +@@ -1340,6 +1459,11 @@ + TYPE_SIZE_UNIT (type) = convert (sizetype, + size_binop (CEIL_DIV_EXPR, new_size, bitsize_int (BITS_PER_UNIT))); + #endif ++#ifdef GCC_4_0 ++ /* @@@@@@ Maybe */ ++ /* TYPE_NO_FORCE_BLK (type) = 1; */ ++ TYPE_MODE (type) = BLKmode; ++#endif + } + else if (ORDINAL_TYPE (TREE_CODE (type))) + { +@@ -1438,10 +1562,10 @@ + count_bits (tree type, int *punsigned) + { + int positive, lo_bits, hi_bits, bits; +- tree lo = TYPE_MIN_VALUE (type), hi = TYPE_MAX_VALUE (type), result; ++ tree lo, hi, result; + if (!ORDINAL_TYPE (TREE_CODE (type)) +- || !lo || TREE_CODE (lo) != INTEGER_CST +- || !hi || TREE_CODE (hi) != INTEGER_CST) ++ || !(lo = TYPE_MIN_VALUE (type)) || TREE_CODE (lo) != INTEGER_CST ++ || !(hi = TYPE_MAX_VALUE (type)) || TREE_CODE (hi) != INTEGER_CST) + return NULL_TREE; + positive = tree_int_cst_sgn (lo) >= 0 && tree_int_cst_sgn (hi) >= 0; + lo_bits = count_unsigned_bits (lo); +@@ -1558,6 +1682,9 @@ + val1 = val2; + val2 = tmp; + } ++ ++ if (why != NOP_EXPR && MAX (TYPE_PRECISION (TREE_TYPE (val1)), TYPE_PRECISION (TREE_TYPE (val2))) < TYPE_PRECISION (pascal_integer_type_node)) ++ return pascal_integer_type_node; + if (TREE_CODE (val1) == INTEGER_CST + && TREE_CODE (TREE_TYPE (val2)) == INTEGER_TYPE + && TYPE_MIN_VALUE (TREE_TYPE (val2)) +@@ -1566,7 +1693,8 @@ + && TREE_CODE (TYPE_MAX_VALUE (TREE_TYPE (val2))) == INTEGER_CST + && !const_lt (val1, TYPE_MIN_VALUE (TREE_TYPE (val2))) + && !const_lt (TYPE_MAX_VALUE (TREE_TYPE (val2)), val1)) +- return TREE_TYPE (val2); ++ return (why != NOP_EXPR && TYPE_PRECISION (TREE_TYPE (val2)) < TYPE_PRECISION (pascal_integer_type_node)) ++ ? pascal_integer_type_node : TYPE_MAIN_VARIANT (TREE_TYPE (val2)); + return common_type (TREE_TYPE (val1), TREE_TYPE (val2)); + } + +@@ -1583,14 +1711,16 @@ + min_val = val2; + max_val = val1; + } +- if (!(TREE_CODE_CLASS (TREE_CODE (val1)) == 'c' && PASCAL_CST_FRESH (val1))) ++ if (!(TREE_CODE_CLASS (TREE_CODE (val1)) == tcc_constant ++ && PASCAL_CST_FRESH (val1))) + { + if (const_lt (TYPE_MIN_VALUE (TREE_TYPE (val1)), min_val)) + min_val = TYPE_MIN_VALUE (TREE_TYPE (val1)); + if (const_lt (max_val, TYPE_MAX_VALUE (TREE_TYPE (val1)))) + max_val = TYPE_MAX_VALUE (TREE_TYPE (val1)); + } +- if (!(TREE_CODE_CLASS (TREE_CODE (val2)) == 'c' && PASCAL_CST_FRESH (val2))) ++ if (!(TREE_CODE_CLASS (TREE_CODE (val2)) == tcc_constant ++ && PASCAL_CST_FRESH (val2))) + { + if (const_lt (TYPE_MIN_VALUE (TREE_TYPE (val2)), min_val)) + min_val = TYPE_MIN_VALUE (TREE_TYPE (val2)); +@@ -1722,7 +1852,12 @@ + + /* Constant expressions are ok. Discriminants are substituted elsewhere. */ + if (TREE_CONSTANT (expr) ++#if 0 + || ((code == VAR_DECL || code == FIELD_DECL || code == CONVERT_EXPR) && PASCAL_TREE_DISCRIMINANT (expr))) ++#else ++ || (code == COMPONENT_REF ++ && TREE_CODE (TREE_OPERAND (expr, 0)) == PLACEHOLDER_EXPR)) ++#endif + return expr; + + if (code == COMPOUND_EXPR) +@@ -1884,7 +2019,6 @@ + tree field2 = sorted_fields[i], ret; + if (DECL_NAME (field2) == component) + { +- gcc_unreachable (); + field = field2; + break; + } +@@ -2000,11 +2134,22 @@ + { + tree ref1, ftype = TREE_TYPE (TREE_VALUE (field)); + CHK_EM (ftype); ++#ifndef GCC_4_0 + ref1 = build (COMPONENT_REF, ftype, ref, TREE_VALUE (field)); ++#else ++ ref1 = build3 (COMPONENT_REF, ftype, ref, TREE_VALUE (field), ++ NULL_TREE); ++#endif + if (TREE_READONLY (ref) || TREE_READONLY (TREE_VALUE (field))) + TREE_READONLY (ref1) = 1; + if (TREE_THIS_VOLATILE (ref) || TREE_THIS_VOLATILE (TREE_VALUE (field))) + TREE_THIS_VOLATILE (ref1) = 1; ++#if 0 ++ if (DECL_BIT_FIELD (TREE_VALUE (field)) ++ && TREE_INT_CST_LOW (DECL_SIZE (field)) ++ < TYPE_PRECISION (integer_type_node)) ++ ref1 = convert (integer_type_node, ref1); ++#endif + ref = fold (ref1); + } + return ref; +@@ -2045,7 +2190,11 @@ + tree + simple_component_ref (tree expr, tree field) + { ++#ifndef GCC_4_0 + tree ref = build (COMPONENT_REF, TREE_TYPE (field), expr, field); ++#else ++ tree ref = build3 (COMPONENT_REF, TREE_TYPE (field), expr, field, NULL_TREE); ++#endif + if (TREE_CODE (expr) == CONSTRUCTOR) + ref = save_expr (ref); + if (TREE_READONLY (expr) || TREE_READONLY (field)) +@@ -2383,8 +2532,13 @@ + + if (TREE_CODE (array) == STRING_CST && TREE_CODE (index) == INTEGER_CST) + { ++#ifndef GCC_4_0 + array = build_int_2 (TREE_STRING_POINTER (array)[TREE_INT_CST_LOW (index) - 1], 0); + TREE_TYPE (array) = char_type_node; ++#else ++ array = build_int_cst_wide (char_type_node, ++ TREE_STRING_POINTER (array)[TREE_INT_CST_LOW (index) - 1], 0); ++#endif + } + else if (!bits || TREE_INT_CST_LOW (bits) == TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))))) + /* Not packed. Just a normal array reference. */ +@@ -2468,7 +2622,12 @@ + } + else + array = build (PASCAL_BIT_FIELD_REF, TREE_TYPE (array_type), array, bits, index); ++#if 1 ++ PASCAL_BIT_FIELD_REF_UNSIGNED (array) = ++ TYPE_UNSIGNED (TREE_TYPE (array_type)); ++#else + BIT_FIELD_REF_UNSIGNED (array) = TYPE_UNSIGNED (TREE_TYPE (array_type)); ++#endif + } + } + if (EM (array)) +@@ -2489,8 +2648,13 @@ + { + arg1 = range_check_2 (integer_one_node, build_int_2 (TREE_STRING_LENGTH (arg0) - 1, 0), arg1); + CHK_EM (arg1); ++#ifndef GCC_4_0 + t = build_int_2 (TREE_STRING_POINTER (arg0)[TREE_INT_CST_LOW (arg1) - 1], 0); + TREE_TYPE (t) = char_type_node; ++#else ++ t = build_int_cst_wide (char_type_node, ++ TREE_STRING_POINTER (arg0)[TREE_INT_CST_LOW (arg1) - 1], 0); ++#endif + } + else if (TREE_CODE (arg1) == INTEGER_CST && TREE_CODE (arg0) == CONSTRUCTOR) + { +@@ -2564,7 +2728,11 @@ + } + + type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (array))); ++#ifndef GCC_4_0 + rval = build (ARRAY_REF, type, array, index); ++#else ++ rval = build4 (ARRAY_REF, type, array, index, NULL_TREE, NULL_TREE); ++#endif + /* Array ref is const/volatile if the array elements are or if the array is. */ + TREE_READONLY (rval) |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array))) | TREE_READONLY (array)); + TREE_SIDE_EFFECTS (rval) |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array))) | TREE_SIDE_EFFECTS (array)); +@@ -2612,6 +2780,10 @@ + if (type == TREE_TYPE (e) || EM (e) || EM (type)) + return e; + CHK_EM (TREE_TYPE (e)); ++/* ++ if (code = INTEGER_TYPE || code == ENUMERAL_TYPE) ++ e = copy_node (e); ++*/ + if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (TREE_TYPE (e))) + return fold (build1 (NOP_EXPR, type, e)); + if (code == SET_TYPE && TREE_CODE (TREE_TYPE (e)) == SET_TYPE) +@@ -2631,8 +2803,10 @@ + expression here to avoid this bug in case there are other + references to it (as in fact there are in `case', casebool.pas). */ + enum tree_code c = TREE_CODE (e); +- tree e2 = (TREE_CODE_CLASS (c) == '<' || c == TRUTH_AND_EXPR || c == TRUTH_ANDIF_EXPR +- || c == TRUTH_OR_EXPR || c == TRUTH_ORIF_EXPR || c == TRUTH_XOR_EXPR || c == TRUTH_NOT_EXPR) ? copy_node (e) : e; ++ tree e2 = (TREE_CODE_CLASS (c) == tcc_comparison || c == TRUTH_AND_EXPR ++ || c == TRUTH_ANDIF_EXPR || c == TRUTH_OR_EXPR ++ || c == TRUTH_ORIF_EXPR || c == TRUTH_XOR_EXPR ++ || c == TRUTH_NOT_EXPR) ? copy_node (e) : e; + tree result = fold (convert_to_integer (type, e2)); + return result; + } +diff -urN gcc/p.old/units/crtc.c gcc/p/units/crtc.c +--- gcc/p.old/units/crtc.c 2006-06-10 17:45:38.423386000 +0000 ++++ gcc/p/units/crtc.c 2006-06-10 17:46:10.433386000 +0000 +@@ -2614,7 +2614,7 @@ + do + { + errno = 0; +- res = wgetnstr (crt_ActivePanel->w, crt_LineBuf, MAXLENGTH - 1); ++ res = wgetnstr (crt_ActivePanel->w, (char *)crt_LineBuf, MAXLENGTH - 1); + } + while + #ifdef EINTR +@@ -2630,12 +2630,12 @@ + { + do + { +- p = strchr (crt_LineBuf, 26); ++ p = (Char *)strchr ((char *)crt_LineBuf, 26); + if (p) *p = 0; + } + while (p); + } +- crt_LineBufCount = strlen (crt_LineBuf); ++ crt_LineBufCount = strlen ((char *)crt_LineBuf); + crt_LineBuf[crt_LineBufCount++] = '\n'; + } + crt_LineBufPos = crt_LineBuf; +diff -urN gcc/p.old/utils/Makefile gcc/p/utils/Makefile +--- gcc/p.old/utils/Makefile 2006-06-10 17:45:38.433386000 +0000 ++++ gcc/p/utils/Makefile 2006-06-10 17:46:10.433386000 +0000 +@@ -44,20 +44,14 @@ + EXE=binobj$(exeext) gpidump$(exeext) + EXE2=binobj gpidump + DOC=binobj.1 gpidump.1 +-PC_WITH_FLAGS=$(PC) --automake --executable-file-name $(UTILS_WARN) $(CFLAGS) $(PFLAGS) $(PFLAGS1) `cat needed-options` ++PC_WITH_FLAGS=$(PC) --automake --executable-file-name $(UTILS_WARN) $(CFLAGS) $(PFLAGS) $(PFLAGS1) + + all: $(EXE) $(DOC) + +-# The Pascal source is not used, but we have to provide any. +-# `-x Preprocessed-Pascal /dev/null' works as well, except on mingw. +-needed-options: binobj.pas $(GCC_DIR)/p/p-version.h +- $(PC) $(UTILS_WARN) $(CFLAGS) $(PFLAGS) $(PFLAGS1) --print-needed-options "$<" 2> "$@" || true +- if grep '^[^-]' "$@" > /dev/null; then echo "needed-options: `cat "$@"`" >&2; rm -f "$@"; false; else true; fi +- +-binobj$(exeext): binobj.pas needed-options ++binobj$(exeext): binobj.pas + $(PC_WITH_FLAGS) "$<" + +-gpidump$(exeext): gpidump.pas tree.inc needed-options ++gpidump$(exeext): gpidump.pas tree.inc + $(PC_WITH_FLAGS) -I. -I "$(GCC_DIR)/p" "$<" + + binobj.1: binobj +@@ -100,4 +94,4 @@ + done + + clean: +- rm -f *.o *.i *.s *.gpi *.gpd $(EXE) $(EXE2) $(DOC) tree.inc needed-options ++ rm -f *.o *.i *.s *.gpi *.gpd $(EXE) $(EXE2) $(DOC) tree.inc +diff -urN gcc/p.old/utils/gpidump.pas gcc/p/utils/gpidump.pas +--- gcc/p.old/utils/gpidump.pas 2006-06-10 17:45:38.433386000 +0000 ++++ gcc/p/utils/gpidump.pas 2006-06-10 17:46:10.443386000 +0000 +@@ -46,6 +46,17 @@ + + const + ExprClasses = ['e', '1', '2', '<', 's']; ++ tcc_type = 't'; ++ tcc_declaration = 'd'; ++ tcc_constant = 'c'; ++ tcc_unary = '1'; ++ tcc_binary = '2'; ++ tcc_comparison = '<'; ++ tcc_expression = 'e'; ++ tcc_reference = 'r'; ++ tcc_exceptional = 'x'; ++ tcc_statement = 's'; ++ + TreeCodes: array [TTreeCode] of record + Name: ^String; + CodeClass: Char; +@@ -361,7 +372,7 @@ + fprotected, + {$ifdef GCC_3_4} + deprecated, +- unused_flag_1, ++ invariant, + {$elif defined (EGCS97)} + bounded, + deprecated, +@@ -416,7 +427,8 @@ + if f.fprotected then OutputFlag ('protected'); + {$ifdef GCC_3_4} + if f.deprecated then OutputFlag ('!deprecated'); +- if f.unused_flag_1 then OutputFlag ('!unused_flag_1'); ++ if f.invariant then OutputFlag ( ++ {$ifdef GCC_4_0} 'invariant' {$else} '!unused_flag_1' {$endif}); + {$elif defined (EGCS97)} + if f.bounded then OutputFlag ('bounded'); + if f.deprecated then OutputFlag ('!deprecated'); +@@ -630,9 +642,12 @@ + thread_local, + declared_inline_flag: Boolean; + {$endif} ++ {$ifdef GCC_4_0} ++ seen_in_bind_expr: Boolean; ++ {$endif} + {$ifdef GCC_3_4} + visibility: 0 .. 3; +- unused: Boolean; ++ visibility_specified: Boolean; + {$endif} + {$endif} + unused_decl_flag_0, +@@ -643,6 +658,14 @@ + decl_flag_5, + decl_flag_6, + decl_flag_7: Boolean; ++ {$ifdef GCC_4_0} ++ possibly_inlined, ++ preserve_flag, ++ gimple_formal_temp, ++ debug_expr_is_from : Boolean; ++ sp1, sp2, sp3, sp4, sp5, sp6, sp7, ++ sp8, sp9, sp10, sp11 : Boolean; ++ {$endif} + {$if defined (EGCS) and not defined (EGCS97)} + non_addr_const_p, + no_instrument_function_entry_exit, +@@ -652,7 +675,11 @@ + Misc: TDeclMisc + end; + begin +- CompilerAssert (SizeOf (f) = {$ifdef EGCS97} 6 {$elif defined (EGCS)} 5 {$else} 4 {$endif} + SizeOf (TDeclMisc)); ++ CompilerAssert (SizeOf (f) = {$ifdef GCC_4_0} 8 ++ {$elif defined (EGCS97)} 6 ++ {$elif defined (EGCS)} 5 ++ {$else} 4 ++ {$endif} + SizeOf (TDeclMisc)); + GetSize (Pos1, f, SizeOf (f)); + Comma; + Write ('machine_mode ', Number (f.MachineMode, 0)); +@@ -692,7 +719,8 @@ + {$endif} + {$ifdef GCC_3_4} + OutputFlag2 ('visibility', f.visibility); +- if f.unused then OutputFlag ('!unused'); ++ if f.visibility_specified then OutputFlag ( ++ {$ifdef GCC_4_0} 'visibility_specified' {$else} '!unused' {$endif}); + {$endif} + {$endif} + if f.unused_decl_flag_0 then OutputFlag ('!unused_decl_flag_0'); +@@ -725,12 +753,15 @@ + case TreeCode of + VAR_DECL: OutputFlag ('initialized'); + PARM_DECL: OutputFlag ('procedural_parameter'); ++ FUNCTION_DECL: ++ OutputFlag ('reintroduce'); + else OutputFlag ('!lang_decl_flag_6') + end; + if f.decl_flag_7 then + case TreeCode of + FUNCTION_DECL: OutputFlag ('forward'); + CONST_DECL: OutputFlag ('principal'); ++ VAR_DECL: OutputFlag ('for_loop_counter'); + else OutputFlag ('!lang_decl_flag_7') + end; + {$if defined (EGCS) and not defined (EGCS97)} +@@ -1129,12 +1160,15 @@ + TYPE_DECL: Ref ('type'); + VAR_DECL: begin + Ref ('type'); ++ Ref ('initial'); + Discard (OptStr ('linker_name ')) + end; + OPERATOR_DECL: ; + PLACEHOLDER_EXPR: Ref ('type'); + NON_LVALUE_EXPR: if IsPackedAccess then Ref ('packed_info'); +- else if not ClassDone or (TreeCode = RTL_EXPR) then Error ('unknown tree code') ++ else if not ClassDone ++ {$ifndef GCC_4_0} or (TreeCode = RTL_EXPR) {$endif} ++ then Error ('unknown tree code') + end; + if not First then WriteLn; + if Pos1 <= Pos2 then +diff -urN gcc/p.old/utils/mk-t-inc gcc/p/utils/mk-t-inc +--- gcc/p.old/utils/mk-t-inc 2006-06-10 17:45:38.433386000 +0000 ++++ gcc/p/utils/mk-t-inc 2006-06-10 17:46:10.443386000 +0000 +@@ -61,22 +61,9 @@ + {\$define GCC_VERSION '$version'} + EOF + +-# Mostly copied from GPC's config-lang.in +-if echo $version | grep '^2\.9' > /dev/null || echo $version | grep '^3\.[1-9]' > /dev/null || echo $version | grep egcs > /dev/null; then +- echo '{$define EGCS}' +- if echo $version | grep '^2\.95\.[3-9]' > /dev/null || echo $version | grep '^3\.[1-9]' > /dev/null; then +- echo '{$define GCC_2_95_3}' +- fi +- if echo $version | grep '^2\.9[6-9]' > /dev/null || echo $version | grep '^3\.[1-9]' > /dev/null; then +- echo '{$define EGCS97}' +- if echo $version | grep '^3\.[3-9]' > /dev/null; then +- echo '{$define GCC_3_3}' +- if echo $version | grep '^3\.[4-9]' > /dev/null; then +- echo '{$define GCC_3_4}' +- fi +- fi +- fi +-fi ++# Use result of GPC's config-lang.in ++sed -ne 's,#define\(.*\),{$define\1},p' ../../gcc-version.h ++ + sed -ne '/Start GPI info/,/End GPI info/{s,/\*.*\*/,,g;s/0x/$/g;s/#/{$/g;s/[^\]$/&}/;s/\\$//;p;}' "$GCCDIR/p/module.c" + echo '{$endif}' + echo "" +@@ -84,7 +71,6 @@ + { + cat "$GCCDIR/tree.def" + echo 'DEFTREECODE (LAST_AND_UNUSED_C_TREE_CODE, "unused", '"'x', 0)" +- sed -e '/#else/,/#endif/d' "$GCCDIR/p/p-tree.def" +-} | sed -ne '/^DEFTREECODE/{s,/\*.*\*/,,;s/["'"'"']x["'"'"'].*/'"'x', 0)/;p;}" +- ++ sed -e '/#ifdef EGCS/,${/#ifdef EGCS/d;/#else/,/#endif/d}' "$GCCDIR/p/p-tree.def" ++} | sed -ne ':loop;/\\$/{N;b loop};/^DEFTREECODE/{s,/\*.*\*/,,;s/["'"'"']x["'"'"'].*/'"'x', 0)/;p;};/^#/p" + } > "$2" || { rm -f "$2"; false; } +--- gcc/p/diffs/gcc-3.4.4.diff~ 2005-11-16 06:24:39.000000000 +0100 ++++ gcc/p/diffs/gcc-3.4.4.diff 2006-06-10 20:42:27.493386000 +0200 +@@ -496,7 +496,7 @@ + 02111-1307, USA. */ + + +-+ /* @@ PATCHED FOR GPC 20051114 @@ */ +++ /* @@ PATCHED FOR GPC 20060322 @@ */ + + + #include "config.h" + #include "system.h" --- gcc-3.4-3.4.6.orig/debian/patches/multiarch-include.dpatch +++ gcc-3.4-3.4.6/debian/patches/multiarch-include.dpatch @@ -0,0 +1,60 @@ +#! /bin/sh -e + +# DP: multiarch-include.dpatch +# DP: +# DP: Adds multiarch include directories +# DP: /usr/local/include/-linux-gnu +# DP: /usr/include/-linux-gnu +# DP: to the system include paths. + +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/cppdefault.c~ 2006-07-14 13:52:45.873955680 +0000 ++++ gcc/cppdefault.c 2006-07-14 14:00:13.684878072 +0000 +@@ -59,6 +59,8 @@ + { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, 0 }, + #endif + #ifdef LOCAL_INCLUDE_DIR ++ /* /usr/local/include/$target_alias comes before the fixincluded header files. */ ++ { LOCAL_INCLUDE_DIR "/" TARGET_NONCANONICAL, 0, 0, 1, 1 }, + /* /usr/local/include comes before the fixincluded header files. */ + { LOCAL_INCLUDE_DIR, 0, 0, 1, 1 }, + #endif +@@ -82,6 +84,8 @@ + { SYSTEM_INCLUDE_DIR, 0, 0, 0, 1 }, + #endif + #ifdef STANDARD_INCLUDE_DIR ++ /* /usr/include/$target_alias comes before the fixincluded header files. */ ++ { STANDARD_INCLUDE_DIR "/" TARGET_NONCANONICAL, STANDARD_INCLUDE_COMPONENT, 0, 1, 1 }, + /* /usr/include comes dead last. */ + { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1 }, + #endif +--- gcc/Makefile.in~ 2006-07-14 13:52:45.877955072 +0000 ++++ gcc/Makefile.in 2006-07-14 13:58:11.596438336 +0000 +@@ -2351,6 +2351,7 @@ + -DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \ + -DCROSS_INCLUDE_DIR=\"$(CROSS_SYSTEM_HEADER_DIR)\" \ + -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \ ++ -DTARGET_NONCANONICAL=\"$(target_noncanonical)\" \ + @TARGET_SYSTEM_ROOT_DEFINE@ + + LIBCPP_OBJS = cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o cpptrad.o \ --- gcc-3.4-3.4.6.orig/debian/patches/fastjar-doc.dpatch +++ gcc-3.4-3.4.6/debian/patches/fastjar-doc.dpatch @@ -0,0 +1,45 @@ +#! /bin/sh -e + +# DP: fastjar.texi: Directly define the gcctabopt and gccoptlist 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 + +--- fastjar/fastjar.texi~ 2006-02-08 05:55:47.000000000 +0000 ++++ fastjar/fastjar.texi 2006-08-29 19:31:40.590718000 +0000 +@@ -10,7 +10,16 @@ + @c When this manual is copyrighted. + @set copyrights-fastjar 2002 + +-@include gcc-common.texi ++@macro gcctabopt{body} ++@code{\body\} ++@end macro ++@macro gccoptlist{body} ++@smallexample ++\body\ ++@end smallexample ++@end macro ++ ++@include gcc-vers.texi + + @c Versions + @set which-gcj GCC-@value{version-GCC} --- gcc-3.4-3.4.6.orig/debian/gpc-PV-BV-doc.prerm +++ gcc-3.4-3.4.6/debian/gpc-PV-BV-doc.prerm @@ -0,0 +1,10 @@ +#! /bin/sh -e + +if [ -f /usr/share/info/gpc-@PV@-@BV@.info.gz ]; then + install-info --quiet --remove gpc-@PV@-@BV@ +else + # GFDL invariant free + true +fi + +#DEBHELPER# --- gcc-3.4-3.4.6.orig/debian/treelang-BV.prerm +++ gcc-3.4-3.4.6/debian/treelang-BV.prerm @@ -0,0 +1,10 @@ +#! /bin/sh -e + +if [ -f /usr/share/info/treelang-@BV@.info.gz ]; then + install-info --quiet --remove treelang-@BV@ +else + # GFDL invariant free + true +fi + +#DEBHELPER# --- gcc-3.4-3.4.6.orig/debian/gcj-BV.prerm +++ gcc-3.4-3.4.6/debian/gcj-BV.prerm @@ -0,0 +1,12 @@ +#! /bin/sh -e + +update-alternatives --quiet --remove javac /usr/bin/gcj-wrapper-@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-3.4-3.4.6.orig/debian/gij-wrapper +++ gcc-3.4-3.4.6/debian/gij-wrapper @@ -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 +# Based on the original gij-wrapper-3.2 shell script. + +use strict; + +# The real Java runtime: +my $javaRuntime = '/usr/bin/gij-3.4'; + +# 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-3.4-3.4.6.orig/debian/README.Bugs +++ gcc-3.4-3.4.6/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 + #include + + 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 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 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 + +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 +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" : + +> 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-3.4-3.4.6.orig/debian/gcj-BV.doc-base +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/README.treelang +++ gcc-3.4-3.4.6/debian/README.treelang @@ -0,0 +1,11 @@ +Treelang documentation +====================== + +The treelang compiler is called via the `gcc-3.4' command (or via +`gcc', when `gcc-3.4' is the default gcc compiler). + +Documentation for treelang is provided in info format only. You +can read docs in the info format with emacs, xemacs or the info +command: + + info treelang-3.4 --- gcc-3.4-3.4.6.orig/debian/acats-killer.sh +++ gcc-3.4-3.4.6/debian/acats-killer.sh @@ -0,0 +1,34 @@ +#! /bin/sh + +# on ia64 systems, the acats hangs in unaligned memory accesses. +# kill these testcases. + +logfile=$1 +stopfile=$2 +interval=30 + +while true; do + if [ -f "$stopfile" ]; then + echo "`basename $0`: finished." + 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 15 + 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-3.4-3.4.6.orig/debian/g77-BV-doc.postinst +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/gnat-BV-doc.postinst +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/NEWS.sarge +++ gcc-3.4-3.4.6/debian/NEWS.sarge @@ -0,0 +1,38 @@ +gcc-3.4 (3.4.1-1) unstable; urgency=medium + + Notes on GCC 3.4 in the sarge distribution + ------------------------------------------ + + [package maintainers: when using GCC 3.4 for package building, please + check that your packages still work on platforms with GCC changes + specific for these platforms (hppa, m68k, mips, mipsel, sparc). ] + + GCC 3.4 is included in sarge as a newer compiler version, the system + compiler for sarge is GCC 3.3 (the transition to a newer system compiler + is a post sarge issue). Due to some incompatibilities between + 3.3 and 3.4 care should be taken, when some code built by both versions + is linked together (most likely linking against a shared library found + in Debian): + + - C++ code compiled by g++-3.3 and g++-3.4 is not compatible. Applications + using C++ libraries have to make sure that these libraries are rebuilt. + + - On hppa and m68k the exception handling changed from SJLJ to Dwarf2 based + exception handling. This affects C++ and code, which implements it's own + handling. If a library or binary ends up linked against libgcc1 _and_ + libgcc2, something probably won't work. + + - The implementation of the MIPS ABIs has changed. As a result, the code + generated for certain MIPS targets will not be binary compatible with + earlier releases. See http://gcc.gnu.org/gcc-3.4/mips-abi.html + + - The implementation of the SPARC ABIs has changed. As a result, the code + generated will not be binary compatible with earlier releases in certain + cases. See http://gcc.gnu.org/gcc-3.4/sparc-abi.html + + - On i386, the compiler is built as a biarch compiler (can generated code + for amd64). To use it, call gcc-3.4 -m64. Packages containing the 64bit + versions of libraries and library development files need to be installed + separately (i.e. lib64gcc1, amd64-libs, ...). + + -- Matthias Klose Sat, 10 Jul 2004 11:21:26 +0200 --- gcc-3.4-3.4.6.orig/debian/cpp-BV-doc.postinst +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/runcheck.sh +++ gcc-3.4-3.4.6/debian/runcheck.sh @@ -0,0 +1,18 @@ +#! /bin/sh + +mkdir -p build + +cat >build/runcheck.c < +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#* } +else + echo ${m##*:} +fi --- gcc-3.4-3.4.6.orig/debian/gpc-PV-BV-doc.doc-base.gpcs +++ gcc-3.4-3.4.6/debian/gpc-PV-BV-doc.doc-base.gpcs @@ -0,0 +1,23 @@ +Document: gpcs-@PV@-@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-@PV@-@BV@.info.gz +Files: /usr/share/info/gpcs-@PV@-@BV@* --- gcc-3.4-3.4.6.orig/debian/dh_doclink +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/gnat-BV-doc.doc-base.rm +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/libgcj5-common.preinst.in +++ gcc-3.4-3.4.6/debian/libgcj5-common.preinst.in @@ -0,0 +1,13 @@ +#! /bin/sh -e + +# replace libgcjX-common doc dir by symlink + +p=libgcj5-common +if [ -d /usr/share/doc/$p -a ! -h /usr/share/doc/$p ]; then + rm -rf /usr/share/doc/$p + ln -s gcc-3.4-base /usr/share/doc/$p +fi + +#DEBHELPER# + +exit 0 --- gcc-3.4-3.4.6.orig/debian/README.libstdc++-baseline.in +++ gcc-3.4-3.4.6/debian/README.libstdc++-baseline.in @@ -0,0 +1,2 @@ +The libstdc++ baseline file is a list of symbols exported by the +libstdc++ library. --- gcc-3.4-3.4.6.orig/debian/treelang-BV.postinst +++ gcc-3.4-3.4.6/debian/treelang-BV.postinst @@ -0,0 +1,15 @@ +#! /bin/sh -e + +case "$1" in + configure) + if [ -f /usr/share/info/treelang-@BV@.info.gz ]; then + install-info --quiet --section "Development" "Development" \ + --description="The GNU Treelang compiler." \ + /usr/share/info/treelang-@BV@.info + else + # GFDL invariant free + true + fi +esac + +#DEBHELPER# --- gcc-3.4-3.4.6.orig/debian/cpp-BV-doc.doc-base.cppint +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/dummy-man.1 +++ gcc-3.4-3.4.6/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-3.4-3.4.6.orig/debian/gpc-PV-BV-doc.postinst +++ gcc-3.4-3.4.6/debian/gpc-PV-BV-doc.postinst @@ -0,0 +1,12 @@ +#! /bin/sh -e + +if [ -f /usr/share/info/gpc-@PV@-@BV@.info.gz ]; then + install-info --quiet --section "Development" "Development" \ + --description="The GNU Pascal compiler." \ + /usr/share/info/gpc-@PV@-@BV@.info +else + # GFDL invariant free + true +fi + +#DEBHELPER# --- gcc-3.4-3.4.6.orig/debian/README.Debian +++ gcc-3.4-3.4.6/debian/README.Debian @@ -0,0 +1,188 @@ + 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. + + +Notes on GCC 3.4 in the sarge distribution +------------------------------------------ + +[package maintainers: when using GCC 3.4 for package building, please + check that your packages still work on platforms with GCC changes + specific for these platforms (hppa, m68k, mips, mipsel, sparc). ] + +GCC 3.4 is included in sarge as a newer compiler version, the system +compiler for sarge is GCC 3.3 (the transition to a newer system compiler +is a post sarge issue). Due to some incompatibilities between +3.3 and 3.4 care should be taken, when some code built by both versions +is linked together (most likely linking against a shared library found +in Debian): + +- C++ code compiled by g++-3.3 and g++-3.4 is not compatible. Applications + using C++ libraries have to make sure that these libraries are rebuilt. + +- On i386, the compiler is built as a biarch compiler (can generated code + for amd64). To use it, call gcc-3.4 -m64. Packages containing the 64bit + versions of libraries and library development files need to be installed + separately (i.e. lib64gcc1, amd64-libs, ...). + gcc-3.4 -m64 turns on the common subset for all x86-64 architectures, + specifying -march=k8 turns on k8/opteron specific features, -march=nocona + turns on some P4/64 Nocona specific features. + +- On hppa and m68k the exception handling changed from SJLJ to Dwarf2 based + exception handling. This affects C++ and code, which implements it's own + handling. If a library or binary ends up linked against libgcc1 _and_ + libgcc2, something probably won't work. + +- The implementation of the MIPS ABIs has changed. As a result, the code + generated for certain MIPS targets will not be binary compatible with + earlier releases. See http://gcc.gnu.org/gcc-3.4/mips-abi.html + +- The implementation of the SPARC ABIs has changed. As a result, the code + generated will not be binary compatible with earlier releases in certain + cases. See http://gcc.gnu.org/gcc-3.4/sparc-abi.html + +Maintainers of these packages +----------------------------- + +Matthias Klose +Ray Dassen +Jeff Bailey (hurd-i386) +Joel Baker (netbsd-i386) +Philip Blundell (arm-linux) +Ben Collins (sparc-linux) +Randolph Chung (ia64-linux) +Falk Hueffner (alpha-linux) +Dan Jacobowitz (powerpc-linux) +Thiemo Seufer (mips*-linux) +Ryan Murray (mips*-linux) +Matt Taggart (hppa-linux) +Gerhard Tonn (s390-linux) +Roman Zippel (m68k-linux) +Ludovic Brenta (gnat) + +=============================================================================== + +Patches that Debian applied in this version: + +gcc-textdomain: + Set gettext's domain and textdomain to the versioned package name. + +libstdc++-pic: + Build and install libstdc++_pic.a library. + +libstdc++-doclink: + adjust hrefs to point to the local documentation + +libstdc++-doxygen-syntax: + fix doxygen syntax error in header that causes segfaults with some + versions + +amd64-specs: + On x86-64 use 64bits mode assembly except with -m32. + +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 + +hppa-toplevel: + For hppa-linux enable libgcj and dependent libs in the toplevel directory + +hppa-libffi: + libffi support for hppa + +hppa-libjava: + Enable libjava support for hppa + +hppa-libjava-update: + MD_FALLBACK_FRAME_STATE_FOR definition for pa32-linux + +fastjar-update: + Implement fastjar -u (PR 7854). + +fastjar-version: + Append GCC version to the fastjar version string. + +boehm-gc-nocheck: + Disable the boehm-gc testsuite. Hangs forever on this architecture + +libltdl: + * libltdl.dpatch: Search the versioned extension, when loading a shared + library (i.e. gij looks for .so.5 for loading additional libraries + like the GTK based AWT peers. + +m68k-update: + Add two m68k specfic patches backported from 4.0 concerning wrong code + generation (Richard Zidlicky). + +libf2c-mxunit: + libf2c/libI77/fio.c: Set MXUNIT to 1000. + +arm-bigendian: + +cpu-default-i486: + set default 32bit ix86 architecture to i486 + +fastjar-doc: + fastjar.texi: Directly define the gcctabopt and gccoptlist macros. + +libffi-soversion: + Install libffi with soversion 3. + +gpc-20060215-20060322: + gpc update 20060215-20060322 + +gpc-3.x: + The gpc patch from the gpc tarball. + +gpc-doc: + gpc documentation: Fix hyperlinks to the example files. + +gpc-updates: + +gpc-bison-2.2: + gpc fixes for bison-2.2 + +gpc-names: + versioned gpc names + +libffi-mips: + libffi mips update + +libjava-mips: + libjava-mips patch from Thiemo Seufer + +libstdc++-mips-atomic: + Fix libstdc++ atomic ops for mips/mipsel + +biarch-include: + biarch-include.dpatch + + Adds biarch include directories + /usr/include/c++//-linux-gnu + /usr/local/include/-linux-gnu + /usr/include/-linux-gnu + to the system include paths, depending on 32/64 bit mode. + +config-ml: + disable some biarch libraries for biarch builds + +i386-biarch: + biarch patches for i386/x86_64 + +link-libs: + +reporting: + Add Debian URL for bug reporting isntructions. + +gcc-version: + Add package identification to the gcc version string + +configure-deplibs_check_method: + In all configure scripts for libraries, generated with autoconf2.13, use + deplibs_check_method=pass_all unconditionally for all linux architectures. --- gcc-3.4-3.4.6.orig/debian/TODO +++ gcc-3.4-3.4.6/debian/TODO @@ -0,0 +1,19 @@ +#94955: recheck on mips and 3.3 +#177303: clarify and forward +#180486: update info for 3.3.1 and 3.4 and forward + +- 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... + +- 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. + +Help needed for the following reports: + +[Needs to be updated] --- gcc-3.4-3.4.6.orig/debian/locale-gen +++ gcc-3.4-3.4.6/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 < +Uploaders: Matthias Klose , Gerhard Tonn +Standards-Version: 3.6.2 +Build-Depends: dpkg-dev (>= 1.13.9), libc6.1-dev (>= 2.3.5-10) [alpha ia64] | libc0.3-dev (>= 2.3.5-10) [hurd-i386] | libc0.1-dev (>= 2.3.5-10) [kfreebsd-i386 knetbsd-gnu] | libc12-dev (>= 2.3.5-10) [netbsd-elf-gnu] | libc6-dev (>= 2.3.5-10), libc6-dev-amd64 [i386], libc6-dev-sparc64 [sparc], libc6-dev-s390x [s390], libc6-dev-i386 [amd64], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], lib32gcc1 [amd64 ppc64], lib64gcc1 [powerpc i386 sparc s390], libunwind7-dev (>= 0.98.5-7) [ia64], libatomic-ops-dev [ia64], m4, autoconf2.13, autoconf, automake1.4, automake1.7, libtool, autotools-dev, gawk, dejagnu (>= 1.4.3) [!hurd-i386 !knetbsd-gnu], expect-tcl8.3 [!hurd-i386 !knetbsd-gnu], bzip2, binutils (>= 2.16.1-3) | binutils-multiarch (>= 2.16.1-3), binutils-hppa64 (>= 2.16.1-3) [hppa], debhelper (>= 4.1), gperf (>= 2.7-3), bison (>= 1:2.3), flex (>= 2.5.33), gettext, texinfo (>= 4.3), zlib1g-dev, gcc-3.4, locales [!knetbsd-gnu !netbsd-elf-gnu !hurd-i386], procps [!hurd-i386 !knetbsd-gnu], sharutils, libncurses5-dev [!netbsd-elf-gnu], tetex-bin [!netbsd-elf-gnu], libgmp3-dev [!netbsd-elf-gnu], help2man [!netbsd-elf-gnu], realpath (>= 1.9.12), lsb-release +Build-Depends-Indep: doxygen (>= 1.4.2), graphviz (>= 2.2), gsfonts-x11 + +Package: gcc-3.4-base +Architecture: any +Section: devel +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: gcc-3.4 +Architecture: any +Section: devel +Priority: optional +Depends: gcc-3.4-base (= ${gcc:Version}), cpp-3.4 (= ${gcc:Version}), binutils (>= ${binutils:Version}), ${dep:libgcc}, ${dep:libunwinddev}, ${shlibs:Depends} +Recommends: ${dep:libcdev} +Conflicts: gcc-3.2 (<= 1:3.2.3-0pre8) +Suggests: gcc-3.4-doc (>= ${gcc:SoftVersion}), ${dep:libcbiarchdev}, ${dep:libgccbiarch} +Provides: c-compiler +Description: The GNU C compiler + This is the GNU C compiler, a fairly portable optimizing compiler for C. + . + ABIs changed between gcc-3.3 and gcc-3.4 on some architectures (hppa, m68k, + mips, mipsel, sparc). Please read /usr/share/doc/gcc-3.4/README.Debian + for more details. + +Package: gcc-3.4-hppa64 +Architecture: hppa +Section: devel +Priority: optional +Depends: gcc-3.4-base (= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends} +Conflicts: gcc-3.3-hppa64 (<= 1:3.3.4-5), gcc-3.5-hppa64 (<= 3.5-0pre1) +Description: The GNU C compiler (cross compiler for hppa64) + This is the GNU C compiler, a fairly portable optimizing compiler for C. + +Package: cpp-3.4 +Architecture: any +Section: interpreters +Priority: optional +Depends: gcc-3.4-base (= ${gcc:Version}), ${shlibs:Depends} +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: cpp-3.4-doc +Architecture: all +Section: doc +Priority: optional +Depends: gcc-3.4-base (>= ${gcc:SoftVersion}) +Replaces: cpp (<= 1:2.93.12) +Description: Documentation for the GNU C preprocessor (cpp) + Documentation for the GNU C preprocessor in info format. + +Package: g++-3.4 +Architecture: any +Section: devel +Priority: optional +Depends: gcc-3.4-base (= ${gcc:Version}), gcc-3.4 (= ${gcc:Version}), libstdc++6-dev (= ${gcc:Version}), ${shlibs:Depends}, libstdc++6 (>= 4.0.2-4) +Replaces: gcc (<= 2.7.2.3-3) +Provides: c++-compiler, c++abi2-dev +Suggests: gcc-3.4-doc (>= ${gcc:SoftVersion}), ${dep:libcxxbiarch} +Description: The GNU C++ compiler + This is the GNU C++ compiler, a fairly portable optimizing compiler for C++. + . + ABIs changed between gcc-3.3 and gcc-3.4 on some architectures (hppa, m68k, + mips, mipsel, sparc). Please read /usr/share/doc/gcc-3.4/README.Debian + for more details. Do not mix code compiled with g++-3.3 and g++-3.4. + +Package: g77-3.4 +Architecture: any +Priority: optional +Depends: gcc-3.4-base (= ${gcc:Version}), gcc-3.4 (= ${gcc:Version}), libg2c0-dev (>= ${gcc:EpochVersion}), ${shlibs:Depends} +Provides: fortran77-compiler +Suggests: g77-3.4-doc +Conflicts: g77-2.95 (<= 1:2.95.4-19), g77-3.0 (<= 1:3.0.4-16), g77-3.2 (<= 1:3.2.3-9), g77-3.3 (<= 1:3.3.4-3) +Description: The GNU Fortran 77 compiler + This is the GNU g77 Fortran compiler, which compiles + Fortran 77 on platforms supported by the gcc compiler. It uses the + gcc backend to generate optimized code. + +Package: g77-3.4-doc +Architecture: all +Section: doc +Priority: optional +Depends: gcc-3.4-base (>= ${gcc:SoftVersion}) +Replaces: g77 (<= 1:2.91.58-3) +Description: Documentation for the GNU Fortran compiler (g77) + Documentation for the GNU Fortran 77 compiler in info format. + +Package: libg2c0 +Section: libs +Architecture: any +Priority: optional +Depends: gcc-3.4-base (= ${gcc:Version}), ${shlibs:Depends} +Description: Runtime library for GNU Fortran 77 applications + Library needed for GNU Fortran 77 applications linked against the + shared library. + +Package: libg2c0-dev +Section: libdevel +Architecture: any +Priority: optional +Depends: gcc-3.4-base (= ${gcc:Version}), libg2c0 (= ${gcc:EpochVersion}), ${shlibs:Depends} +Conflicts: g77-2.95, g77-2.96, g77-3.0 (<= 1:3.0.4-16), g77-3.2 (<= 1:3.2.3-9), g77-3.3 (<= 1:3.3.3-0pre3) +Description: GNU Fortran 77 library development + Headers and static libraries for g2c. + +Package: lib64g2c0 +Section: libs +Architecture: i386 powerpc sparc s390 +Priority: optional +Depends: gcc-3.4-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends} +Replaces: libg2c0 (<< 1:3.4.4-7) +Description: Runtime library for GNU Fortran 77 applications (64bit) + Library needed for GNU Fortran 77 applications linked against the + shared library. + +Package: lib32g2c0 +Section: libs +Architecture: amd64 ppc64 +Priority: optional +Depends: gcc-3.4-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends} +Replaces: libg2c0 (<< 1:3.4.4-7) +Description: Runtime library for GNU Fortran 77 applications (32bit) + Library needed for GNU Fortran 77 applications linked against the + shared library. + +Package: libstdc++6-dev +Architecture: any +Section: libdevel +Priority: optional +Depends: gcc-3.4-base (= ${gcc:Version}), g++-3.4 (= ${gcc:Version}), libstdc++6 (>= ${gcc:Version}), ${dep:libcdev} +Conflicts: libstdc++6-0-dev, 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 +Replaces: libstdc++6-0-dev +Suggests: libstdc++6-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++. Be advised that this only works + with the GNU C++ compiler (version 3.0), and no earlier library will work it. + . + 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-pic +Architecture: any +Section: libdevel +Priority: extra +Depends: gcc-3.4-base (= ${gcc:Version}), libstdc++6 (>= ${gcc:Version}), libstdc++6-dev (= ${gcc:Version}) +Conflicts: libstdc++6-0-pic +Replaces: libstdc++6-0-pic +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-dbg +Architecture: any +Section: libdevel +Priority: extra +Depends: gcc-3.4-base (= ${gcc:Version}), libstdc++6 (>= ${gcc:Version}) +Recommends: libstdc++6-dev (= ${gcc:Version}) +Conflicts: libstdc++6-0-dbg, libstdc++5-dbg, libstdc++5-3.3-dbg, libstdc++6-4.0-dbg +Replaces: libstdc++6-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-doc +Architecture: all +Section: doc +Priority: optional +Depends: gcc-3.4-base (>= ${gcc:SoftVersion}) +Conflicts: libstdc++5-doc, libstdc++5-3.3-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: gpc-2.1-3.4 +Architecture: any +Priority: optional +Depends: gcc-3.4-base (= ${gcc:Version}), gcc-3.4 (= ${gcc:Version}), ${shlibs:Depends} +Recommends: libgmp3-dev, libncurses5-dev +Suggests: gpc-2.1-3.4-doc (>= ${gcc: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-3.x is still in an experimental + stage. For production use, please use gpc or gpc-2.95. + +Package: gpc-2.1-3.4-doc +Architecture: all +Section: doc +Priority: optional +Depends: gcc-3.4-base (>= ${gcc:SoftVersion}) +Replaces: gpc (<= 2.91.58-3) +Suggests: gpc-2.1-3.4 +Description: Documentation for the GNU Pascal compiler (gpc) + Documentation for the GNU Pascal compiler in info format. + . + WARNING: the integration of gpc into gcc-3.x is still in an experimental + stage. For production use, please use gpc or gpc-2.95. + +Package: gcc-3.4-soft-float +Architecture: arm armeb +Priority: optional +Depends: gcc-3.4-base (= ${gcc:Version}), gcc-3.4 (= ${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: gcc-3.4-doc +Architecture: all +Section: doc +Priority: optional +Depends: gcc-3.4-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. + --- gcc-3.4-3.4.6.orig/debian/libstdc++6-doc.overrides +++ gcc-3.4-3.4.6/debian/libstdc++6-doc.overrides @@ -0,0 +1 @@ +libstdc++6-doc: extra-license-file --- gcc-3.4-3.4.6.orig/debian/libgnat-BV.overrides +++ gcc-3.4-3.4.6/debian/libgnat-BV.overrides @@ -0,0 +1 @@ +libgnat-@BV@: package-name-doesnt-match-sonames --- gcc-3.4-3.4.6.orig/debian/gnat-BV.overrides +++ gcc-3.4-3.4.6/debian/gnat-BV.overrides @@ -0,0 +1 @@ +gnat-@BV@: bad-permissions-for-ali-file --- gcc-3.4-3.4.6.orig/debian/NEWS.gcc +++ gcc-3.4-3.4.6/debian/NEWS.gcc @@ -0,0 +1,2007 @@ + +GCC 3.4 Release Series - Changes, New Features, and Fixes +========================================================= + +The latest release in the 3.4 release series is GCC 3.4.5. + +Caveats +======= + +- GNU Make is now required to build GCC. + +- With -nostdinc the preprocessor used to ignore both standard include + paths and include paths contained in environment variables. It was + neither documented nor intended that environment variable paths be + ignored, so this has been corrected. + +- GCC no longer accepts the options -fvolatile, -fvolatile-global and + -fvolatile-static. It is unlikely that they worked correctly in any + 3.x release. + +- GCC no longer ships . Use instead. + +- Support for all the systems obsoleted in GCC 3.3 has been removed + from GCC 3.4. See below for a list of systems which are obsoleted in + this release. + +- GCC now requires an ISO C90 (ANSI C89) C compiler to build. K&R C + compilers will not work. + +- The implementation of the MIPS ABIs has changed. As a result, the + code generated for certain MIPS targets will not be binary compatible + with earlier releases. + +- In previous releases, the MIPS port had a fake "hilo" register with + the user-visible name accum. This register has been removed. + +- The implementation of the SPARC ABIs has changed. As a result, the + code generated will not be binary compatible with earlier releases in + certain cases. + +- The configure option --enable-threads=pthreads has been removed; use + --enable-threads=posix instead, which should have the same effect. + +- Code size estimates used by inlining heuristics for C, Objective-C, + C++ and Java have been redesigned significantly. As a result the + parameters of -finline-insns, --param max-inline-insns-single and + --param max-inline-insns-auto need to be reconsidered. + +- --param max-inline-slope and --param min-inline-insns have been + removed; they are not needed for the new bottom-up inlining + heuristics. + +- The new unit-at-a-time compilation scheme has several compatibility + issues: + + - The order in which functions, variables, and top-level asm + statements are emitted may have changed. Code relying on some + particular ordering needs to be updated. The majority of such + top-level asm statements can be replaced by section attributes. + + - Unreferenced static variables and functions are removed. This may + result in undefined references when an asm statement refers to the + variable/function directly. In that case either the + variable/function shall be listed in asm statement operand or in the + case of top-level asm statements the attribute used shall be used to + force function/variable to be always output and considered as a + possibly used by unknown code. + + For variables the attribute is accepted only by GCC 3.4 and newer, + while for earlier versions it is sufficient to use unused to silence + warnings about the variables not being referenced. To keep code + portable across different GCC versions, you can use appropriate + preprocessor conditionals. + + - Static functions now can use non-standard passing conventions that + may break asm statements calling functions directly. Again the + attribute used shall be used to prevent this behavior. + + As a temporary workaround, -fno-unit-at-a-time can be used, but this + scheme may not be supported by future releases of GCC. + +- GCC 3.4 automatically places zero-initialized variables in the .bss + section on some operating systems. Versions of GNU Emacs up to (and + including) 21.3 will not work correctly when using this optimization; + you can use -fno-zero-initialized-in-bss to disable it. + + +General Optimizer Improvements +============================== + +- Usability of the profile feedback and coverage testing has been + improved. + + - Performance of profiled programs has been improved by faster + profile merging code. + - Better use of the profile feedback for optimization (loop + unrolling and loop peeling). + - File locking support allowing fork() calls and parallel runs of + profiled programs. + - Coverage file format has been redesigned. + - gcov coverage tool has been improved. + - make profiledbootstrap available to build a faster compiler. + + Experiments made on i386 hardware showed an 11% speedup on -O0 and + a 7.5% speedup on -O2 compilation of a large C++ testcase. + + - New value profiling pass enabled via -fprofile-values + - New value profile transformations pass enabled via -fvpt aims to + optimize some code sequences by exploiting knowledge about value + ranges or other properties of the operands. At the moment a + conversion of expensive divisions into cheaper operations has been + implemented. + - New -fprofile-generate and -fprofile-use command line options to + simplify the use of profile feedback. + +- A new unit-at-a-time compilation scheme for C, Objective-C, C++ and + Java which is enabled via -funit-at-a-time (and implied by -O2). In + this scheme a whole file is parsed first and optimized later. The + following basic inter-procedural optimizations are implemented: + + - Removal of unreachable functions and variables + - Discovery of local functions (functions with static linkage whose + address is never taken) + - On i386, these local functions use register parameter passing + conventions. + - Reordering of functions in topological order of the call graph to + enable better propagation of optimizing hints (such as the stack + alignments needed by functions) in the back end. + - Call graph based out-of-order inlining heuristics which allows to + limit overall compilation unit growth (--param inline-unit-growth). + + Overall, the unit-at-a-time scheme produces a 1.3% improvement for + the SPECint2000 benchmark on the i386 architecture (AMD Athlon CPU). + +- More realistic code size estimates used by inlining for C, + Objective-C, C++ and Java. The growth of large functions can now be + limited via --param large-function-insns and --param + large-function-growth. + +- A new cfg-level loop optimizer pass replaces the old loop unrolling + pass and adds two other loop transformations -- loop peeling and loop + unswitching -- and also uses the profile feedback to limit code + growth. (The three optimizations are enabled by -funroll-loops, + -fpeel-loops and -funswitch-loops flags, respectively). + + The old loop unroller still can be enabled by -fold-unroll-loops and + may produce better code in some cases, especially when the webizer + optimization pass is not run. + +- A new web construction pass enabled via -fweb (and implied by -O3) + improves the quality of register allocation, CSE, first scheduling + pass and some other optimization passes by avoiding re-use of pseudo + registers with non-overlapping live ranges. The pass almost always + improves code quality but does make debugging difficult and thus is + not enabled by default by -O2 + + The pass is especially effective as cleanup after code duplication + passes, such as the loop unroller or the tracer. + +- Experimental implementations of superblock or trace scheduling in + the second scheduling pass can be enabled via -fsched2-use-superblocks + and -fsched2-use-traces, respectively. + + +New Languages and Language specific improvements +================================================ + +Ada +--- + +- The Ada front end has been updated to include numerous bug fixes and + enhancements. These include: + + - Improved project file support + - Additional set of warnings about potential wrong code + - Improved error messages + - Improved code generation + - Improved cross reference information + - Improved inlining + - Better run-time check elimination + - Better error recovery + - More efficient implementation of unbounded strings + - Added features in GNAT.Sockets, + - GNAT.OS_Lib, GNAT.Debug_Pools, ... + - New GNAT.xxxx packages (e.g. GNAT.Strings, + - GNAT.Exception_Action) + - New pragmas + - New -gnatS switch replacing gnatpsta + - Implementation of new Ada features (in particular limited with, + limited aggregates) + + +C/Objective-C/C++ +----------------- + +- Precompiled headers are now supported. Precompiled headers can + dramatically speed up compilation of some projects. There are some + known defects in the current precompiled header implementation that + will result in compiler crashes in relatively rare situations. + Therefore, precompiled headers should be considered a "technology + preview" in this release. Read the manual for details about how to + use precompiled headers. + +- File handling in the preprocessor has been rewritten. GCC no longer + gets confused by symlinks and hardlinks, and now has a correct + implementation of #import and #pragma once. These two directives have + therefore been un-deprecated. + +- The undocumented extension that allowed C programs to have a label + at the end of a compound statement, which has been deprecated since + GCC 3.0, has been removed. + +- The cast-as-lvalue extension has been removed for C++ and deprecated + for C and Objective-C. In particular, code like this: + + int i; + (char) i = 5; + + or this: + + char *p; + ((int *) p)++; + + is no longer accepted for C++ and will not be accepted for C and + Objective-C in a future version. + +- The conditional-expression-as-lvalue extension has been deprecated + for C and Objective-C. In particular, code like this: + + int a, b, c; + (a ? b : c) = 2; + + will not be accepted for C and Objective-C in a future version. + +- The compound-expression-as-lvalue extension has been deprecated for + C and Objective-C. In particular, code like this: + + int a, b; + (a, b) = 2; + + will not be accepted for C and Objective-C in a future version. A + possible non-intrusive workaround is the following: + + (*(a, &b)) = 2; + +- Several built-in functions such as __builtin_popcount for counting + bits, finding the highest and lowest bit in a word, and parity have + been added. + +- The -fwritable-strings option has been deprecated and will be + removed. + +- Many C math library functions are now recognized as built-ins and + optimized. + +- The C, C++, and Objective-C compilers can now handle source files + written in any character encoding supported by the host C library. + The default input character set is taken from the current locale, and + may be overridden with the -finput-charset command line option. In + the future we will add support for inline encoding markers. + + +C++ +--- + +- G++ is now much closer to full conformance to the ISO/ANSI C++ + standard. This means, among other things, that a lot of invalid + constructs which used to be accepted in previous versions will now be + rejected. It is very likely that existing C++ code will need to be + fixed. This document lists some of the most common issues. + +- A hand-written recursive-descent C++ parser has replaced the + YACC-derived C++ parser from previous GCC releases. The new parser + contains much improved infrastructure needed for better parsing of C++ + source codes, handling of extensions, and clean separation (where + possible) between proper semantics analysis and parsing. The new + parser fixes many bugs that were found in the old parser. + +- You must now use the typename and template keywords to disambiguate + dependent names, as required by the C++ standard. + + struct K { + typedef int mytype_t; + }; + + template struct A { + template struct B { + void callme(void); + }; + + template void bar(void) + { + // Use 'typename' to tell the parser that T1::mytype_t names + // a type. This is needed because the name is dependent (in + // this case, on template parameter T1). + typename T1::mytype_t x; + x = 0; + } + }; + + template void template_func(void) + { + // Use 'template' to prefix member templates within + // dependent types (a has type A, which depends on + // the template parameter T). + A a; + a.template bar<0>(); + + // Use 'template' to tell the parser that B is a nested + // template class (dependent on template parameter T), and + // 'typename' because the whole A::B is + // the name of a type (again, dependent). + typename A::template B b; + b.callme(); + } + + void non_template_func(void) + { + // Outside of any template class or function, no names can be + // dependent, so the use of the keyword 'typename' and 'template' + // is not needed (and actually forbidden). + A a; + a.bar<0>(); + A::B b; + b.callme(); + } + +- In a template definition, unqualified names will no longer find + members of a dependent base. For example, + + template struct B { + int m; + int n; + int f (); + int g (); + }; + int n; + int g (); + template struct C : B { + void g () + { + m = 0; // error + f (); // error + n = 0; // ::n is modified + g (); // ::g is called + } + }; + + You must make the names dependent by prefixing them with + this->. Here is the corrected definition of C::g, + + template void C::g () + { + this->m = 0; + this->f (); + this->n = 0 + this->g (); + } + +- In templates, all non-dependent names are now looked up and bound at + definition time (while parsing the code), instead of later when the + template is instantiated. For instance: + + void foo(int); + + template struct A { + static void bar(void) { + foo('a'); + } + }; + + void foo(char); + + int main() + { + A<0>::bar(); // Calls foo(int), used to call foo(char). + } + + +- In an explicit instantiation of a class template, you must use class + or struct before the template-id: + + + template + class A {}; + + template A<0>; // error, not accepted anymore + template class A<0>; // OK + +- The "named return value" and "implicit typename" extensions have + been removed. + +- Default arguments in function types have been deprecated and will be + removed. + +- ARM-style name-injection of friend declarations has been deprecated + and will be removed. For example: + + struct S { + friend void f(); + }; + + void g() { f(); } + + will not be accepted by future versions of G++; instead a + declaration of "f" will need to be present outside of the scope of "S". + +- Covariant returns are implemented for all but varadic functions that + require an adjustment. + +- When -pedantic is used, G++ now issues errors about spurious + semicolons. For example, + + namespace N {}; // Invalid semicolon. + void f() {}; // Invalid semicolon. + +- G++ no longer accepts attributes for a declarator after the + initializer associated with that declarator. For example, + + X x(1) __attribute__((...)); + is no longer accepted. Instead, use: + + X x __attribute__((...)) (1); + +- Inside the scope of a template class, the name of the class itself + can be treated as either a class or a template. So GCC used to accept + the class name as argument of type template, and template template + parameter. However this is not C++ standard compliant. Now the name + is not treated as a valid template template argument unless you + qualify the name by its scope. For example, the code below no longer + compiles. + + template

There are two types of documentation for libstdc++-v3. One is the + distribution documentation, which can be read online at + http://gcc.gnu.org/onlinedocs/libstdc++/documentation.html +- or offline from docs/html/documentation.html in the library source +- directory. ++ or offline from ++ /usr/share/doc/gcc-3.4/libstdc++/html/documentation.html. +