summaryrefslogtreecommitdiff
path: root/debian
diff options
context:
space:
mode:
authordoko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>2011-12-16 00:00:43 +0000
committerdoko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>2011-12-16 00:00:43 +0000
commit1ed753c7d69c8340eebc068b1d5b31d2554ce811 (patch)
treef16299769978d52cdec478852450851575bca99a /debian
downloadgcc-47-1ed753c7d69c8340eebc068b1d5b31d2554ce811.tar.gz
- create a gcc-4.7 branch
git-svn-id: svn://svn.debian.org/svn/gcccvs/branches/sid/gcc-4.7@5753 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
Diffstat (limited to 'debian')
-rw-r--r--debian/FAQ.gcj494
-rw-r--r--debian/NEWS.gcc1063
-rw-r--r--debian/NEWS.html1182
-rw-r--r--debian/README.Bugs.m4333
-rw-r--r--debian/README.C++35
-rw-r--r--debian/README.Debian39
-rw-r--r--debian/README.cross144
-rw-r--r--debian/README.gnat22
-rw-r--r--debian/README.libstdc++-baseline.in2
-rw-r--r--debian/README.maintainers237
-rw-r--r--debian/README.snapshot36
-rw-r--r--debian/README.source14
-rw-r--r--debian/README.ssp28
-rw-r--r--debian/TODO50
-rw-r--r--debian/acats-killer.sh62
-rw-r--r--debian/changelog9967
-rw-r--r--debian/changelog-4.436
-rw-r--r--debian/compat1
-rw-r--r--debian/control990
-rw-r--r--debian/control.m42447
-rw-r--r--debian/copyright567
-rw-r--r--debian/copyright.in567
-rw-r--r--debian/cpp-BV-CRB.preinst.in11
-rw-r--r--debian/cpp-BV-doc.doc-base.cpp16
-rw-r--r--debian/cpp-BV-doc.doc-base.cppint17
-rwxr-xr-xdebian/dh_doclink12
-rwxr-xr-xdebian/dh_rmemptydirs10
-rw-r--r--debian/dummy-man.129
-rw-r--r--debian/dummy.texi1
-rw-r--r--debian/fixincludes.in8
-rw-r--r--debian/g++-BV-CRB.preinst.in11
-rw-r--r--debian/g++-BV-spu.overrides2
-rw-r--r--debian/gcc-BV-CRB.preinst.in12
-rw-r--r--debian/gcc-BV-doc.doc-base.gcc14
-rw-r--r--debian/gcc-BV-doc.doc-base.gccint17
-rw-r--r--debian/gcc-BV-doc.doc-base.gomp15
-rw-r--r--debian/gcc-BV-hppa64.postinst13
-rw-r--r--debian/gcc-BV-hppa64.prerm10
-rw-r--r--debian/gcc-BV-source.overrides5
-rw-r--r--debian/gcc-BV-spu.overrides2
-rw-r--r--debian/gcc-dummy.texi41
-rw-r--r--debian/gcc-snapshot.overrides4
-rw-r--r--debian/gcc-snapshot.prerm5
-rw-r--r--debian/gcj-BV-jdk.doc-base15
-rw-r--r--debian/gcj-BV-jdk.overrides1
-rw-r--r--debian/gcj-BV-jdk.postinst45
-rw-r--r--debian/gcj-BV-jdk.prerm15
-rw-r--r--debian/gcj-BV-jre-headless.overrides2
-rw-r--r--debian/gcj-BV-jre-headless.postinst48
-rw-r--r--debian/gcj-BV-jre-headless.postrm10
-rw-r--r--debian/gcj-BV-jre-headless.prerm13
-rw-r--r--debian/gcj-wrapper-BV91
-rw-r--r--debian/gcj-wrapper-BV.120
-rw-r--r--debian/gcjh-wrapper-BV86
-rw-r--r--debian/gcjh-wrapper-BV.120
-rw-r--r--debian/gfortran-BV-CRB.preinst.in11
-rw-r--r--debian/gfortran-BV-doc.doc-base14
-rw-r--r--debian/gfortran-BV-spu.overrides2
-rw-r--r--debian/gij-hppa20
-rw-r--r--debian/gij-wrapper-BV98
-rw-r--r--debian/gij-wrapper-BV.122
-rw-r--r--debian/gnat-BV-doc.doc-base.rm16
-rw-r--r--debian/gnat-BV-doc.doc-base.style16
-rw-r--r--debian/gnat-BV-doc.doc-base.ug16
-rw-r--r--debian/gnat-BV.overrides1
-rw-r--r--debian/gnat.143
-rw-r--r--debian/gnatprj.gpr32
-rw-r--r--debian/gnatvsn.gpr31
-rw-r--r--debian/jdb.sh9
-rw-r--r--debian/lib32gcc1.symbols.amd64134
-rw-r--r--debian/lib32gcc1.symbols.kfreebsd-amd64134
-rw-r--r--debian/lib32gcc1.symbols.ppc64139
-rw-r--r--debian/lib32gcc1.symbols.s390x101
-rw-r--r--debian/lib32gccLC.postinst12
-rw-r--r--debian/lib32gfortran3.overrides2
-rw-r--r--debian/lib32gfortran3.symbols3
-rw-r--r--debian/lib32gfortran3.symbols.amd649
-rw-r--r--debian/lib32gfortran3.symbols.ppc643
-rw-r--r--debian/lib32gfortran3.symbols.s390x3
-rw-r--r--debian/lib32gomp1.symbols4
-rw-r--r--debian/lib32objc3.symbols3
-rw-r--r--debian/lib32quadmath0.symbols2
-rw-r--r--debian/lib32stdc++6.symbols.amd646
-rw-r--r--debian/lib32stdc++6.symbols.kfreebsd-amd646
-rw-r--r--debian/lib32stdc++6.symbols.ppc648
-rw-r--r--debian/lib32stdc++6.symbols.s390x549
-rw-r--r--debian/lib32stdc++CXX.postinst12
-rw-r--r--debian/lib64gcc1.symbols.i386144
-rw-r--r--debian/lib64gcc1.symbols.powerpc126
-rw-r--r--debian/lib64gcc1.symbols.s390107
-rw-r--r--debian/lib64gcc1.symbols.sparc106
-rw-r--r--debian/lib64gccLC.postinst12
-rw-r--r--debian/lib64gfortran3.overrides2
-rw-r--r--debian/lib64gfortran3.symbols7
-rw-r--r--debian/lib64gfortran3.symbols.mips5
-rw-r--r--debian/lib64gfortran3.symbols.mipsel5
-rw-r--r--debian/lib64gfortran3.symbols.powerpc5
-rw-r--r--debian/lib64gfortran3.symbols.s3905
-rw-r--r--debian/lib64gfortran3.symbols.sparc5
-rw-r--r--debian/lib64gomp1.symbols4
-rw-r--r--debian/lib64objc3.symbols3
-rw-r--r--debian/lib64quadmath0.symbols2
-rw-r--r--debian/lib64stdc++6.symbols.i38631
-rw-r--r--debian/lib64stdc++6.symbols.powerpc9
-rw-r--r--debian/lib64stdc++6.symbols.s39011
-rw-r--r--debian/lib64stdc++6.symbols.sparc9
-rw-r--r--debian/lib64stdc++CXX.postinst12
-rw-r--r--debian/libgcc1.symbols.aeabi67
-rw-r--r--debian/libgcc1.symbols.alpha107
-rw-r--r--debian/libgcc1.symbols.amd64144
-rw-r--r--debian/libgcc1.symbols.armel120
-rw-r--r--debian/libgcc1.symbols.armhf120
-rw-r--r--debian/libgcc1.symbols.hurd-i386101
-rw-r--r--debian/libgcc1.symbols.i386134
-rw-r--r--debian/libgcc1.symbols.ia64145
-rw-r--r--debian/libgcc1.symbols.kfreebsd-amd64138
-rw-r--r--debian/libgcc1.symbols.kfreebsd-i386134
-rw-r--r--debian/libgcc1.symbols.lpia133
-rw-r--r--debian/libgcc1.symbols.mips1219
-rw-r--r--debian/libgcc1.symbols.mipsel1219
-rw-r--r--debian/libgcc1.symbols.powerpc139
-rw-r--r--debian/libgcc1.symbols.ppc64126
-rw-r--r--debian/libgcc1.symbols.s390101
-rw-r--r--debian/libgcc1.symbols.s390x107
-rw-r--r--debian/libgcc1.symbols.sh4127
-rw-r--r--debian/libgcc1.symbols.sparc102
-rw-r--r--debian/libgcc1.symbols.sparc64106
-rw-r--r--debian/libgcc2.symbols.m68k157
-rw-r--r--debian/libgcc4.symbols.hppa93
-rw-r--r--debian/libgccLC.postinst12
-rw-r--r--debian/libgcj-common.postinst12
-rw-r--r--debian/libgcj-common.preinst12
-rw-r--r--debian/libgcj-doc.doc-base10
-rw-r--r--debian/libgcjGCJ-awt.overrides2
-rw-r--r--debian/libgcjGCJ-dev.overrides1
-rw-r--r--debian/libgcjGCJ.overrides9
-rw-r--r--debian/libgcjLGCJ.postinst12
-rw-r--r--debian/libgcjLGCJ.postrm12
-rw-r--r--debian/libgfortran3.symbols.1098
-rw-r--r--debian/libgfortran3.symbols.16199
-rw-r--r--debian/libgfortran3.symbols.16.powerpc100
-rw-r--r--debian/libgfortran3.symbols.16.powerpc64191
-rw-r--r--debian/libgfortran3.symbols.642
-rw-r--r--debian/libgfortran3.symbols.alpha5
-rw-r--r--debian/libgfortran3.symbols.amd647
-rw-r--r--debian/libgfortran3.symbols.armel2
-rw-r--r--debian/libgfortran3.symbols.armhf2
-rw-r--r--debian/libgfortran3.symbols.common803
-rw-r--r--debian/libgfortran3.symbols.hurd-i3863
-rw-r--r--debian/libgfortran3.symbols.i3863
-rw-r--r--debian/libgfortran3.symbols.ia647
-rw-r--r--debian/libgfortran3.symbols.kfreebsd-amd645
-rw-r--r--debian/libgfortran3.symbols.kfreebsd-i3863
-rw-r--r--debian/libgfortran3.symbols.lpia3
-rw-r--r--debian/libgfortran3.symbols.mips2
-rw-r--r--debian/libgfortran3.symbols.mipsel2
-rw-r--r--debian/libgfortran3.symbols.powerpc3
-rw-r--r--debian/libgfortran3.symbols.ppc645
-rw-r--r--debian/libgfortran3.symbols.qf16
-rw-r--r--debian/libgfortran3.symbols.s3903
-rw-r--r--debian/libgfortran3.symbols.s390x5
-rw-r--r--debian/libgfortran3.symbols.sh42
-rw-r--r--debian/libgfortran3.symbols.sparc3
-rw-r--r--debian/libgfortran3.symbols.sparc645
-rw-r--r--debian/libgnat-BV.overrides1
-rw-r--r--debian/libgnatprjBV.overrides1
-rw-r--r--debian/libgnatvsnBV.overrides1
-rw-r--r--debian/libgomp1.symbols4
-rw-r--r--debian/libgomp1.symbols.common154
-rw-r--r--debian/libhfgcc1.symbols.armel120
-rw-r--r--debian/libmudflap.copyright30
-rw-r--r--debian/libmudflapMF.postinst12
-rw-r--r--debian/libobjc2.symbols.arm4
-rw-r--r--debian/libobjc3.symbols3
-rw-r--r--debian/libobjc3.symbols.armel4
-rw-r--r--debian/libobjc3.symbols.armhf4
-rw-r--r--debian/libobjc3.symbols.common283
-rw-r--r--debian/libquadmath0.symbols2
-rw-r--r--debian/libquadmath0.symbols.common92
-rw-r--r--debian/libstdc++6.symbols.32bit551
-rw-r--r--debian/libstdc++6.symbols.32bit.hurd536
-rw-r--r--debian/libstdc++6.symbols.64bit556
-rw-r--r--debian/libstdc++6.symbols.alpha9
-rw-r--r--debian/libstdc++6.symbols.amd647
-rw-r--r--debian/libstdc++6.symbols.arm6
-rw-r--r--debian/libstdc++6.symbols.armel26
-rw-r--r--debian/libstdc++6.symbols.armhf26
-rw-r--r--debian/libstdc++6.symbols.common3052
-rw-r--r--debian/libstdc++6.symbols.excprop17
-rw-r--r--debian/libstdc++6.symbols.glibcxxmath22
-rw-r--r--debian/libstdc++6.symbols.hppa8
-rw-r--r--debian/libstdc++6.symbols.hurd-i3865
-rw-r--r--debian/libstdc++6.symbols.i3866
-rw-r--r--debian/libstdc++6.symbols.ia647
-rw-r--r--debian/libstdc++6.symbols.kfreebsd-amd647
-rw-r--r--debian/libstdc++6.symbols.kfreebsd-i3866
-rw-r--r--debian/libstdc++6.symbols.ldbl.32bit284
-rw-r--r--debian/libstdc++6.symbols.ldbl.32bit.s390284
-rw-r--r--debian/libstdc++6.symbols.ldbl.64bit284
-rw-r--r--debian/libstdc++6.symbols.lpia6
-rw-r--r--debian/libstdc++6.symbols.m68k5
-rw-r--r--debian/libstdc++6.symbols.mips7
-rw-r--r--debian/libstdc++6.symbols.mipsel7
-rw-r--r--debian/libstdc++6.symbols.powerpc8
-rw-r--r--debian/libstdc++6.symbols.ppc649
-rw-r--r--debian/libstdc++6.symbols.s390549
-rw-r--r--debian/libstdc++6.symbols.s390x11
-rw-r--r--debian/libstdc++6.symbols.sh47
-rw-r--r--debian/libstdc++6.symbols.sparc8
-rw-r--r--debian/libstdc++6.symbols.sparc649
-rw-r--r--debian/libstdc++CXX-BV-doc.doc-base13
-rw-r--r--debian/libstdc++CXX-BV-doc.overrides2
-rw-r--r--debian/libstdc++CXX.postinst12
-rwxr-xr-xdebian/locale-gen48
-rwxr-xr-xdebian/logwatch.sh104
-rw-r--r--debian/patches/ada-acats.diff199
-rw-r--r--debian/patches/ada-bug564232.diff11
-rw-r--r--debian/patches/ada-default-project-path.diff113
-rw-r--r--debian/patches/ada-driver-check.diff26
-rw-r--r--debian/patches/ada-gcc-name.diff112
-rw-r--r--debian/patches/ada-kfreebsd-gnu.diff233
-rw-r--r--debian/patches/ada-libgnatprj.diff1685
-rw-r--r--debian/patches/ada-libgnatvsn.diff1625
-rw-r--r--debian/patches/ada-library-project-files-soname.diff77
-rw-r--r--debian/patches/ada-link-lib.diff1863
-rw-r--r--debian/patches/ada-mips.diff33
-rw-r--r--debian/patches/ada-nobiarch-check.diff20
-rw-r--r--debian/patches/ada-sjlj.diff728
-rw-r--r--debian/patches/ada-symbolic-tracebacks.diff327
-rw-r--r--debian/patches/address-clauses-timed-entry-calls.diff104
-rw-r--r--debian/patches/alpha-ieee-doc.diff24
-rw-r--r--debian/patches/alpha-ieee.diff21
-rw-r--r--debian/patches/alpha-no-ev4-directive.diff30
-rw-r--r--debian/patches/aotcompile.diff51
-rw-r--r--debian/patches/arm-dynamic-linker-trunk.diff26
-rw-r--r--debian/patches/arm-dynamic-linker.diff26
-rw-r--r--debian/patches/arm-multilib-soft-float.diff26
-rw-r--r--debian/patches/arm-multilib.diff27
-rw-r--r--debian/patches/armhf-triplet-trunk.diff104
-rw-r--r--debian/patches/armhf-triplet.diff104
-rw-r--r--debian/patches/boehm-gc-getnprocs.diff18
-rw-r--r--debian/patches/boehm-gc-nocheck.diff18
-rw-r--r--debian/patches/cell-branch-doc.diff2
-rw-r--r--debian/patches/cell-branch.diff4
-rw-r--r--debian/patches/config-ml.diff79
-rw-r--r--debian/patches/cross-biarch.diff79
-rw-r--r--debian/patches/cross-fixes-trunk.diff90
-rw-r--r--debian/patches/cross-fixes.diff90
-rw-r--r--debian/patches/cross-include-trunk.diff18
-rw-r--r--debian/patches/cross-include.diff18
-rw-r--r--debian/patches/fix-warnings.diff1341
-rw-r--r--debian/patches/gcc-as-needed.diff49
-rw-r--r--debian/patches/gcc-base-version.diff164
-rw-r--r--debian/patches/gcc-cloog-dl.diff464
-rw-r--r--debian/patches/gcc-d-lang.diff304
-rw-r--r--debian/patches/gcc-default-format-security.diff54
-rw-r--r--debian/patches/gcc-default-fortify-source.diff34
-rw-r--r--debian/patches/gcc-default-relro.diff29
-rw-r--r--debian/patches/gcc-default-ssp-ppc64.diff192
-rw-r--r--debian/patches/gcc-default-ssp.diff192
-rw-r--r--debian/patches/gcc-driver-extra-langs.diff20
-rw-r--r--debian/patches/gcc-gfdl-build.diff34
-rw-r--r--debian/patches/gcc-hash-style-both.diff134
-rw-r--r--debian/patches/gcc-hash-style-gnu.diff134
-rw-r--r--debian/patches/gcc-ice-apport.diff22
-rw-r--r--debian/patches/gcc-ice-hack.diff311
-rw-r--r--debian/patches/gcc-linaro-doc.diff253
-rw-r--r--debian/patches/gcc-linaro-updates.diff2
-rw-r--r--debian/patches/gcc-linaro.diff44066
-rw-r--r--debian/patches/gcc-multiarch-doc.diff16
-rw-r--r--debian/patches/gcc-multiarch.diff636
-rw-r--r--debian/patches/gcc-multilib64-multiarch-trunk.diff44
-rw-r--r--debian/patches/gcc-multilib64-multiarch.diff52
-rw-r--r--debian/patches/gcc-multilib64.diff44
-rw-r--r--debian/patches/gcc-no-add-needed.diff56
-rw-r--r--debian/patches/gcc-powerpc-nof-trunk.diff22
-rw-r--r--debian/patches/gcc-powerpc-nof.diff23
-rw-r--r--debian/patches/gcc-powerpc-undef.diff13
-rw-r--r--debian/patches/gcc-ppc64-O3.diff59
-rw-r--r--debian/patches/gcc-system-root.diff17
-rw-r--r--debian/patches/gcc-textdomain.diff84
-rw-r--r--debian/patches/gcc-volatile-bitfields.diff23
-rw-r--r--debian/patches/gccgo-version.diff61
-rw-r--r--debian/patches/gdc-4.6.diff349
-rw-r--r--debian/patches/gdc-driver-nophobos.diff49
-rw-r--r--debian/patches/gdc-driver-zlib.diff60
-rw-r--r--debian/patches/gdc-libphobos-build.diff679
-rw-r--r--debian/patches/gdc-libphobos-math.diff28
-rw-r--r--debian/patches/gold-and-ld.diff482
-rw-r--r--debian/patches/hurd-changes.diff28
-rw-r--r--debian/patches/hurd-pthread.diff181
-rw-r--r--debian/patches/ibm-branch.diff2525
-rw-r--r--debian/patches/ignore-comp-fail.diff19
-rw-r--r--debian/patches/kbsd-gnu.diff76
-rw-r--r--debian/patches/libffi-kfreebsd.diff13
-rw-r--r--debian/patches/libffi-powerpc-sf.diff982
-rw-r--r--debian/patches/libffi-powerpc-sysv-without-string-ops.diff149
-rw-r--r--debian/patches/libffi-ro-eh_frame_sect.diff13
-rw-r--r--debian/patches/libgomp-kfreebsd-testsuite.diff15
-rw-r--r--debian/patches/libgomp-omp_h-multilib.diff19
-rw-r--r--debian/patches/libjava-armel-unwind.diff19
-rw-r--r--debian/patches/libjava-disable-plugin.diff13
-rw-r--r--debian/patches/libjava-disable-static.diff26
-rw-r--r--debian/patches/libjava-fixed-symlinks.diff24
-rw-r--r--debian/patches/libjava-jnipath.diff121
-rw-r--r--debian/patches/libjava-multiarch.diff72
-rw-r--r--debian/patches/libjava-nobiarch-check.diff25
-rw-r--r--debian/patches/libjava-rpath.diff29
-rw-r--r--debian/patches/libjava-sjlj.diff38
-rw-r--r--debian/patches/libjava-stacktrace.diff50
-rw-r--r--debian/patches/libstdc++-arm-wno-abi.diff16
-rw-r--r--debian/patches/libstdc++-doclink.diff57
-rw-r--r--debian/patches/libstdc++-man-3cxx.diff61
-rw-r--r--debian/patches/libstdc++-no-testsuite.diff13
-rw-r--r--debian/patches/libstdc++-nothumb-check.diff38
-rw-r--r--debian/patches/libstdc++-pic.diff53
-rw-r--r--debian/patches/libstdc++-test-installed.diff76
-rw-r--r--debian/patches/link-libs.diff170
-rw-r--r--debian/patches/mips-fix-loongson2f-nop.diff13
-rw-r--r--debian/patches/mips-triarch.diff44
-rw-r--r--debian/patches/mudflap-nocheck.diff17
-rw-r--r--debian/patches/mudflap-varargs.diff21
-rw-r--r--debian/patches/no_fpr_in_libgcc.diff49
-rw-r--r--debian/patches/note-gnu-stack.diff170
-rw-r--r--debian/patches/powerpc_remove_many.diff31
-rw-r--r--debian/patches/pr24619.diff17
-rw-r--r--debian/patches/pr39491.diff132
-rw-r--r--debian/patches/pr43804.diff22
-rw-r--r--debian/patches/pr45078.diff41
-rw-r--r--debian/patches/pr45979.diff11
-rw-r--r--debian/patches/pr47487.diff27
-rw-r--r--debian/patches/pr47818.diff24
-rw-r--r--debian/patches/pr48226.diff33
-rw-r--r--debian/patches/pr48830.diff226
-rw-r--r--debian/patches/pr49030.diff438
-rw-r--r--debian/patches/pr49169.diff186
-rw-r--r--debian/patches/pr49696.diff74
-rw-r--r--debian/patches/pr49756.diff261
-rw-r--r--debian/patches/pr49940.diff26
-rw-r--r--debian/patches/pr49944.diff250
-rw-r--r--debian/patches/pr50114.diff59
-rw-r--r--debian/patches/pr50193.diff112
-rw-r--r--debian/patches/rename-info-files.diff546
-rw-r--r--debian/patches/s390-biarch.diff24
-rw-r--r--debian/patches/sh4-multilib.diff23
-rw-r--r--debian/patches/sparc-force-cpu.diff18
-rw-r--r--debian/patches/svn-class-updates.diff27
-rw-r--r--debian/patches/svn-doc-updates.diff105
-rw-r--r--debian/patches/svn-updates-linaro.diff2746
-rw-r--r--debian/patches/svn-updates.diff9566
-rw-r--r--debian/patches/testsuite-hardening-format.diff89
-rw-r--r--debian/patches/testsuite-hardening-printf-types.diff631
-rw-r--r--debian/porting.html30
-rw-r--r--debian/protoize.142
-rwxr-xr-xdebian/reduce-test-diff.awk33
-rw-r--r--debian/relink74
-rwxr-xr-xdebian/rules110
-rw-r--r--debian/rules.conf946
-rw-r--r--debian/rules.d/binary-ada.mk359
-rw-r--r--debian/rules.d/binary-base.mk51
-rw-r--r--debian/rules.d/binary-cpp.mk94
-rw-r--r--debian/rules.d/binary-cxx.mk136
-rw-r--r--debian/rules.d/binary-d.mk131
-rw-r--r--debian/rules.d/binary-fixincl.mk47
-rw-r--r--debian/rules.d/binary-fortran.mk217
-rw-r--r--debian/rules.d/binary-gcc.mk359
-rw-r--r--debian/rules.d/binary-go.mk216
-rw-r--r--debian/rules.d/binary-hppa64.mk29
-rw-r--r--debian/rules.d/binary-java.mk724
-rw-r--r--debian/rules.d/binary-libgcc.mk134
-rw-r--r--debian/rules.d/binary-libgccmath.mk141
-rw-r--r--debian/rules.d/binary-libgomp.mk67
-rw-r--r--debian/rules.d/binary-libmudflap.mk135
-rw-r--r--debian/rules.d/binary-libobjc.mk78
-rw-r--r--debian/rules.d/binary-libquadmath.mk67
-rw-r--r--debian/rules.d/binary-libssp.mk150
-rw-r--r--debian/rules.d/binary-libstdcxx.mk431
-rw-r--r--debian/rules.d/binary-neon.mk53
-rw-r--r--debian/rules.d/binary-nof.mk56
-rw-r--r--debian/rules.d/binary-objc.mk88
-rw-r--r--debian/rules.d/binary-objcxx.mk65
-rw-r--r--debian/rules.d/binary-snapshot.mk202
-rw-r--r--debian/rules.d/binary-softfloat.mk36
-rw-r--r--debian/rules.d/binary-source.mk53
-rw-r--r--debian/rules.d/binary-spu.mk162
-rw-r--r--debian/rules.defs1366
-rw-r--r--debian/rules.patch420
-rw-r--r--debian/rules.sonames67
-rw-r--r--debian/rules.source15
-rw-r--r--debian/rules.unpack257
-rw-r--r--debian/rules22152
-rw-r--r--debian/runcheck.sh20
-rw-r--r--debian/source.lintian-overrides5
-rw-r--r--debian/source.lintian-overrides.in5
-rw-r--r--debian/source/format1
-rw-r--r--debian/watch2
396 files changed, 124040 insertions, 0 deletions
diff --git a/debian/FAQ.gcj b/debian/FAQ.gcj
new file mode 100644
index 0000000..c996421
--- /dev/null
+++ b/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
diff --git a/debian/NEWS.gcc b/debian/NEWS.gcc
new file mode 100644
index 0000000..1036c9f
--- /dev/null
+++ b/debian/NEWS.gcc
@@ -0,0 +1,1063 @@
+GCC 4.6 Release Series -- Changes, New Features, and Fixes
+==========================================================
+
+
+Caveats
+=======
+
+- The options -b <machine> and -V <version> have been removed because
+ they were unreliable. Instead, users should directly run
+ <machine>-gcc when cross-compiling, or <machine>-gcc-<version>
+ to run a different version of gcc.
+
+- GCC now has stricter checks for invalid command-line options. In
+ particular, when gcc was called to link object files rather than
+ compile source code, it would previously accept and ignore all options
+ starting with --, including linker options such as --as-needed and
+ --export-dynamic, although such options would result in errors if any
+ source code was compiled. Such options, if unknown to the compiler,
+ are now rejected in all cases; if the intent was to pass them to the
+ linker, options such as -Wl,--as-needed should be used.
+
+- Versions of the GNU C library up to and including 2.11.1 included
+ an incorrect implementation of the cproj function. GCC optimizes
+ its builtin cproj according to the behavior specified and allowed
+ by the ISO C99 standard. If you want to avoid discrepancies
+ between the C library and GCC's builtin transformations when using
+ cproj in your code, use GLIBC 2.12 or later. If you are using an
+ older GLIBC and actually rely on the incorrect behavior of cproj,
+ then you can disable GCC's transformations using -fno-builtin-cproj.
+
+- The C-only intermodule optimization framework (IMA, enabled by
+ -combine) has been removed in favor of the new generic link-time
+ optimization framework (LTO) introduced in GCC 4.5.0.
+
+- GCC now ships with the LGPL-licensed libquadmath library, which
+ provides quad-precision mathematical functions for targets with a
+ __float128 datatype. __float128 is available for targets on 32-bit
+ x86, x86-64 and Itanium architectures. The libquadmath library is
+ automatically built on such targets when building the Fortran
+ compiler.
+
+- New -Wunused-but-set-variable and -Wunused-but-set-parameter
+ warnings were added for C, C++, Objective-C and Objective-C++.
+ These warnings diagnose variables respective parameters which are
+ only set in the code and never otherwise used. Usually such
+ variables are useless and often even the value assigned to them is
+ computed needlessly, sometimes expensively. The
+ -Wunused-but-set-variable warning is enabled by default by -Wall
+ flag and -Wunused-but-set-parameter by -Wall -Wextra flags.
+
+- Support for a number of older systems and recently unmaintained or
+ untested target ports of GCC has been declared obsolete in GCC 4.6.
+ Unless there is activity to revive them, the next release of GCC
+ will have their sources permanently removed.
+
+- All GCC ports for the following processor architectures have been
+ declared obsolete:
+
+ - Argonaut ARC (arc-*)
+ - National Semiconductor CRX (crx-*)
+ - Motorola 68HC11 and 68HC12
+ - (m68hc11-*-*, m6811-*-*,
+ - m68hc12-*-*, m6812-*-*)
+ - Sunplus S+core (score-*)
+
+- The following ports for individual systems on particular
+ architectures have been obsoleted:
+
+ - Interix (i[34567]86-*-interix3*)
+ - Generic ARM PE (arm-*-pe* other
+ - than arm*-wince-pe*)
+ - MCore PE (mcore-*-pe*)
+ - SH SymbianOS (sh*-*-symbianelf*)
+ - GNU Hurd on Alpha and PowerPC
+ - (alpha*-*-gnu*, powerpc*-*-gnu*)
+ - M68K uClinux old ABI
+ - (m68k-*-uclinuxoldabi*)
+ - a.out NetBSD
+ - (arm*-*-netbsd*, i[34567]86-*-netbsd*,
+ - vax-*-netbsd*, but
+ - not *-*-netbsdelf*)
+
+- The i[34567]86-*-pe alias for Cygwin targets has also been
+ obsoleted; users should configure for i[34567]86-*-cygwin* instead.
+
+- Certain configure options to control the set of libraries built with
+ GCC on some targets have been obsoleted. On ARM targets, the
+ options --disable-fpu, --disable-26bit, --disable-underscore,
+ --disable-interwork, --disable-biendian and --disable-nofmult have
+ been obsoleted. On MIPS targets, the options
+ --disable-single-float, --disable-biendian and --disable-softfloat
+ have been obsoleted.
+
+- Support has been removed for all the configurations obsoleted in
+ GCC 4.5.
+
+
+General Optimizer Improvements
+==============================
+
+- A new general optimization level, -Ofast, has been introduced. It
+ combines the existing optimization level -O3 with options that can
+ affect standards compliance but result in better optimized code.
+ For example, -Ofast enables -ffast-math.
+
+- Link-time optimization improvements:
+
+ - The Scalable Whole Program Optimizer (WHOPR) project has
+ stabilized to the point of being usable. It has become the
+ default mode when using the LTO optimization model. Link time
+ optimization can now split itself into multiple parallel
+ compilations. Parallelism is controlled with -flto=n (where n
+ specifies the number of compilations to execute in parallel). GCC
+ can also cooperate with a GNU make job server by specifying the
+ -flto=jobserver option and adding + to the beginning of the
+ Makefile rule executing the linker.
+
+ - Classical LTO mode can be enforced by -flto-partition=none. This
+ may result in small code quality improvements.
+
+ - A large number of bugs were fixed. GCC itself, Mozilla Firefox
+ and other large applications can be built with LTO enabled.
+
+ - The linker plugin support improvements
+
+ - Linker plugin is now enabled by default when the linker is
+ detected to have plugin support. This is the case for GNU ld
+ 2.21.51 or newer (on ELF and Cygwin targets) and the Gold linker
+ on ELF targets. Plugin support of the Apple linker on Darwin is
+ not compatible with GCC. The linker plugin can also be
+ controlled by the -fuse-linker-plugin command line option.
+
+ - Resolution information from the linker plugin is used to drive
+ whole program assumptions. Use of the linker plugin results in
+ more aggressive optimization on binaries and on shared libraries
+ that use the hidden visibility attribute. Consequently the use
+ of -fwhole-program is not neccesary in addition to LTO.
+
+ - Hidden symbols used from non-LTO objects now have to be explicitly
+ annotated with externally_visible when the linker plugin is not
+ used.
+
+ - C++ inline functions and virtual tables are now privatized more
+ aggressively, leading to better inter-procedural optimization and
+ faster dynamic linking.
+
+ - Memory usage and intermediate language streaming performance have
+ been improved.
+
+ - Static constructors and destructors from individual units are
+ inlined into a single function. This can significantly improve
+ startup times of large C++ applications where static constructors
+ are very common. For example, static constructors are used when
+ including the iostream header.
+
+ - Support for the Ada language has been added.
+
+- Interprocedural optimization improvements
+
+ - The interprocedural framework was re-tuned for link time
+ optimization. Several scalability issues were resolved.
+
+ - Improved auto-detection of const and pure functions. Newly,
+ noreturn functions are auto-detected.
+
+ - The -Wsuggest-attribute=[const|pure|noreturn] flag is available
+ that informs users when adding attributes to headers might improve
+ code generation.
+
+ - A number of inlining heuristic improvements. In particular:
+
+ - Partial inlining is now supported and enabled by default at -O2
+ and greater. The feature can be controlled via
+ -fpartial-inlining.
+
+ - Partial inlining splits functions with short hot path to return.
+ This allows more aggressive inlining of the hot path leading to
+ better performance and often to code size reductions (because
+ cold parts of functions are not duplicated).
+
+ - Scalability for large compilation units was improved significantly.
+
+ - Inlining of callbacks is now more aggressive.
+
+ - Virtual methods are considered for inlining when the caller is
+ inlined and devirtualization is then possible.
+
+ - Inlining when optimizing for size (either in cold regions of a
+ program or when compiling with -Os) was improved to better
+ handle C++ programs with larger abstraction penalty, leading to
+ smaller and faster code.
+
+ - The IPA reference optimization pass detecting global variables
+ used or modified by functions was strengthened and sped up.
+
+ - Functions whose address was taken are now optimized out when all
+ references to them are dead.
+
+ - A new inter-procedural static profile estimation pass detects
+ functions that are executed once or unlikely to be executed.
+ Unlikely executed functions are optimized for size. Functions
+ executed once are optimized for size except for the inner
+ loops.
+
+ - On most targets with named section support, functions used only at
+ startup (static constructors and main), functions used only at
+ exit and functions detected to be cold are placed into separate
+ text segment subsections. This extends the -freorder-functions
+ feature and is controlled by the same switch. The goal is to
+ improve the startup time of large C++ programs.
+
+ Proper function placement requires linker support. GNU ld 2.21.51
+ on ELF targets was updated to place those functions together within
+ the text section leading to better code locality and faster startup
+ times of large C++ programs. The feature is also supported in the
+ Apple linker. Support in the gold linker is planned.
+
+- A new switch -fstack-usage has been added. It makes the compiler
+ output stack usage information for the program, on a per-function
+ basis, in an auxiliary file.
+
+- A new switch -fcombine-stack-adjustments has been added. It can be
+ used to enable or disable the compiler's stack-slot combining pass
+ which before was enabled automatically at -O1 and above, but could
+ not be controlled on its own.
+
+- A new switch -fstrict-volatile-bitfields has been added. Using it
+ indicates that accesses to volatile bitfields should use a single
+ access of the width of the field's type. This option can be useful
+ for precisely defining and accessing memory-mapped peripheral
+ registers from C or C++.
+
+
+Compile time and memory usage improvements
+==========================================
+
+- Datastructures used by the dataflow framework in GCC were
+ reorganized for better memory usage and more cache locality.
+ Compile time is improved especially on units with large functions
+ (possibly resulting from a lot of inlining) not fitting into the
+ processor cache. The compile time of the GCC C compiler binary with
+ link-time optimization went down by over 10% (benchmarked on x86-64
+ target).
+
+
+New Languages and Language specific improvements
+================================================
+
+Ada
+---
+
+- Stack checking has been improved on selected architectures (Alpha,
+ IA-32/x86-64, RS/6000 and SPARC): it now will detect stack overflows
+ in all cases on these architectures.
+
+- Initial support for Ada 2012 has been added.
+
+
+C family
+--------
+
+- A new warning, enabled by -Wdouble-promotion, has been added that
+ warns about cases where a value of type float is implicitly promoted
+ to double. This is especially helpful for CPUs that handle the
+ former in hardware, but emulate the latter in software.
+
+- A new function attribute leaf was introduced. This attribute allows
+ better inter-procedural optimization across calls to functions that
+ return to the current unit only via returning or exception handling.
+ This is the case for most library functions that have no callbacks.
+
+- Support for a new data type __int128 for targets having wide enough
+ machine-mode support.
+
+- The new function attribute callee_pop_aggregate allows to specify if
+ the caller or callee is responsible for popping the aggregate return
+ pointer value from the stack.
+
+- Support for selectively enabling and disabling warnings via #pragma
+ GCC diagnostic has been added. For instance:
+
+ #pragma GCC diagnostic error "-Wuninitialized"
+ foo(a); /* error is given for this one */
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wuninitialized"
+ foo(b); /* no diagnostic for this one */
+ #pragma GCC diagnostic pop
+ foo(c); /* error is given for this one */
+ #pragma GCC diagnostic pop
+ foo(d); /* depends on command line options */
+
+- The -fmax-errors=N option is now supported. Using this option
+ causes the compiler to exit after N errors have been issued.
+
+
+C
+-
+
+- There is now experimental support for some features from the
+ upcoming C1X revision of the ISO C standard. This support may be
+ selected with -std=c1x, or -std=gnu1x for C1X with GNU extensions.
+ Note that this support is experimental and may change incompatibly
+ in future releases for consistency with changes to the C1X standard
+ draft. The following features are newly supported as described in
+ the N1539 draft of C1X (with changes agreed at the March 2011 WG14
+ meeting); some other features were already supported with no
+ compiler changes being needed, or have some support but not in full
+ accord with N1539 (as amended).
+
+ - Static assertions (_Static_assert keyword)
+ - Typedef redefinition
+ - New macros in <float.h>
+ - Anonymous structures and unions
+
+- The new -fplan9-extensions option directs the compiler to support
+ some extensions for anonymous struct fields which are implemented by
+ the Plan 9 compiler. A pointer to a struct may be automatically
+ converted to a pointer to an anonymous field when calling a
+ function, in order to make the types match. An anonymous struct
+ field whose type is a typedef name may be referred to using the
+ typedef name.
+
+
+C++
+---
+
+- Improved experimental support for the upcoming C++0x ISO C++
+ standard, including support for constexpr (thanks to Gabriel Dos
+ Reis and Jason Merrill), nullptr (thanks to Magnus Fromreide),
+ noexcept, unrestricted unions, range-based for loops (thanks to
+ Rodrigo Rivas Costa), opaque enum declarations (thanks also to
+ Rodrigo), implicitly deleted functions and implicit move
+ constructors.
+
+- When an extern declaration within a function does not match a
+ declaration in the enclosing context, G++ now properly declares the
+ name within the namespace of the function rather than the namespace
+ which was open just before the function definition (c++/43145).
+
+- GCC now warns by default when casting integers to larger pointer
+ types. These warnings can be disabled with the option
+ -Wno-int-to-pointer-cast, which is now also available in C++.
+
+- G++ no longer optimizes using the assumption that a value of
+ enumeration type will fall within the range specified by the
+ standard, since that assumption is easily violated with a conversion
+ from integer type (c++/43680). The old behavior can be restored
+ with -fstrict-enums.
+
+- The new -fnothrow-opt flag changes the semantics of a throw()
+ exception specification to match the proposed semantics of the
+ noexcept specification: just call terminate if an exception tries to
+ propagate out of a function with such an exception specification.
+ This dramatically reduces or eliminates the code size overhead from
+ adding the exception specification.
+
+- The new -Wnoexcept flag will suggest adding a noexcept qualifier to
+ a function that the compiler can tell doesn't throw if it would
+ change the value of a noexcept expression.
+
+- The -Wshadow option now warns if a local variable or type
+ declaration shadows another type in C++. Note that the compiler will
+ not warn if a local variable shadows a struct/class/enum, but will
+ warn if it shadows an explicit typedef.
+
+- When an identifier is not found in the current scope, G++ now offers
+ suggestions about which identifier might have been intended.
+
+- G++ now issues clearer diagnostics for missing semicolons after
+ class, struct, and union definitions.
+
+- G++ now issues clearer diagnostics for missing semicolons after
+ class member declarations.
+
+- G++ now issues clearer diagnostics when a colon is used in a place
+ where a double-colon was intended.
+
+- G++ no longer accepts mutable on reference members (c++/33558).
+ Use -fpermissive to allow the old, non-conforming behaviour.
+
+- A few mangling fixes have been made, to attribute const/volatile on
+ function pointer types, decltype of a plain decl, and use of a
+ function parameter in the declaration of another parameter. By
+ default the compiler still uses the old mangling, but emits aliases
+ with the new mangling on targets that support strong aliases. Users
+ can switch over entirely to the new mangling with -fabi-version=5 or
+ -fabi-version=0. -Wabi will now warn about code that uses the old
+ mangling.
+
+- G++ no longer allows objects of const-qualified type to be default
+ initialized unless the type has a user-declared default constructor.
+ Code that fails to compile can be fixed by providing an initializer e.g.
+
+ struct A { A(); };
+ struct B : A { };
+ const B b = B();
+
+ Use -fpermissive to allow the old, non-conforming behaviour.
+
+
+Runtime Library (libstdc++)
+---------------------------
+
+- Improved experimental support for the upcoming ISO C++ standard,
+ C++0x, including using constexpr and nullptr.
+
+- Performance improvements to the Debug Mode, thanks to François
+ Dumont.
+
+- Atomic operations used for reference-counting are annotated so that
+ they can be understood by race detectors such as Helgrind, see Data
+ Race Hunting.
+
+- Most libstdc++ standard headers have been changed to no longer
+ include the cstddef header as an implementation detail. Code that
+ relied on that header being included as side-effect of including
+ other standard headers will need to include cstddef explicitly.
+
+
+Fortran
+-------
+
+- On systems supporting the libquadmath library, GNU Fortran now also
+ supports a quad-precision, kind=16 floating-point data type
+ (REAL(16), COMPLEX(16)). As the data type is not fully supported in
+ hardware, calculations might be one to two orders of magnitude
+ slower than with the 4, 8 or 10 bytes floating-point data
+ types. This change does not affect systems which support REAL(16) in
+ hardware nor those which do not support libquadmath.
+
+- Much improved compile time for large array constructors.
+
+- In order to reduce execution time and memory consumption, use of
+ temporary arrays in assignment expressions is avoided for many
+ cases. The compiler now reverses loops in order to avoid generating
+ a temporary array where possible.
+
+- Improved diagnostics, especially with -fwhole-file.
+
+- The -fwhole-file flag is now enabled by default. This improves code
+ generation and diagnostics. It can be disabled using the deprecated
+ -fno-whole-file flag.
+
+- Support the generation of Makefile dependencies via the -M... flags
+ of GCC; you may need to specify the -cpp option in addition. The
+ dependencies take modules, Fortran's include, and CPP's #include
+ into account. Note: Using -M for the module path is no longer
+ supported, use -J instead.
+
+- The flag -Wconversion has been modified to only issue warnings where
+ a conversion leads to information loss. This drastically reduces
+ the number of warnings; -Wconversion is thus now enabled with
+ -Wall. The flag -Wconversion-extra has been added and also warns
+ about other conversions; -Wconversion-extra typically issues a huge
+ number of warnings, most of which can be ignored.
+
+- A new command-line option -Wunused-dummy-argument warns about unused
+ dummy arguments and is included in -Wall. Before, -Wunused-variable
+ also warned about unused dummy arguments.
+
+- Fortran 2003 support has been extended:
+
+ - Improved support for polymorphism between libraries and programs
+ and for complicated inheritance patterns (cf. object-oriented
+ programming).
+
+ - Experimental support of the ASSOCIATE construct.
+
+ - In pointer assignments it is now possible to specify the lower
+ bounds of the pointer and, for a rank-1 or a simply contiguous
+ data-target, to remap the bounds.
+
+ - Automatic (re)allocation: In intrinsic assignments to allocatable
+ variables the left-hand side will be automatically allocated (if
+ unallocated) or reallocated (if the shape or type parameter is
+ different). To avoid the small performance penalty, you can use
+ a(:) = ... instead of a = ... for arrays and character strings
+ -- or disable the feature using -std=f95 or -fno-realloc-lhs.
+
+ - Deferred type parameter: For scalar allocatable and pointer
+ variables the character length can be deferred.
+
+ - Namelist variables with allocatable and pointer attribute and
+ nonconstant length type parameter are supported.
+
+- Fortran 2008 support has been extended:
+
+ - Experimental coarray support (for one image only,
+ i.e. num_images() == 1); use the -fcoarray=single flag to enable
+ it.
+
+ - The STOP and the new ERROR STOP statements now support all
+ constant expressions.
+
+ - Support for the CONTIGUOUS attribute.
+
+ - Support for ALLOCATE with MOLD.
+
+ - Support for the STORAGE_SIZE intrinsic inquiry function.
+
+ - Support of the NORM2 and PARITY intrinsic functions.
+
+ - The following bit intrinsics were added: POPCNT and POPPAR for
+ counting the number of 1 bits and returning the parity; BGE, BGT,
+ BLE, and BLT for bitwise comparisons; DSHIFTL and DSHIFTR for
+ combined left and right shifts, MASKL and MASKR for simple left
+ and right justified masks, MERGE_BITS for a bitwise merge using a
+ mask, SHIFTA, SHIFTL and SHIFTR for shift operations, and the
+ transformational bit intrinsics IALL, IANY and IPARITY.
+
+ - Support of the EXECUTE_COMMAND_LINE intrinsic subroutine.
+
+ - Support for the IMPURE attribute for procedures, which allows for
+ ELEMENTAL procedures without the restrictions of PURE.
+
+ - Null pointers (including NULL()) and not allocated variables can
+ be used as actual argument to optional non-pointer,
+ non-allocatable dummy arguments, denoting an absent argument.
+
+ - Non-pointer variables with TARGET attribute can be used as actual
+ argument to POINTER dummies with INTENT(IN)
+
+ - Pointers including procedure pointers and those in a derived type
+ (pointer components) can now be initialized by a target instead of
+ only by NULL.
+
+ - The EXIT statement (with construct-name) can now be used to leave
+ not only the DO but also the ASSOCIATE, BLOCK, IF, SELECT CASE and
+ SELECT TYPE constructs.
+
+ - Internal procedures can now be used as actual argument.
+
+ - The named constants INTEGER_KINDS, LOGICAL_KINDS, REAL_KINDS and
+ CHARACTER_KINDS of the intrinsic module ISO_FORTRAN_ENV have been
+ added; these arrays contain the supported kind values for the
+ respective types.
+
+ - The module procedures C_SIZEOF of the intrinsic module
+ ISO_C_BINDINGS and COMPILER_VERSION and COMPILER_OPTIONS of
+ ISO_FORTRAN_ENV have been implemented.
+
+ - Minor changes: obsolescence diagnostics for ENTRY was added for
+ -std=f2008; a line may start with a semicolon; for internal and
+ module procedures END can be used instead of END SUBROUTINE and
+ END FUNCTION; SELECTED_REAL_KIND now also takes a RADIX argument;
+ intrinsic types are supported for TYPE(intrinsic-type-spec);
+ multiple type-bound procedures can be declared in a single
+ PROCEDURE statement; implied-shape arrays are supported for named
+ constants (PARAMETER). The transformational, three argument
+ versions of BESSEL_JN and BESSEL_YN were added -- the
+ elemental, two-argument version had been added in GCC 4.4; note
+ that the transformational functions use a recurrence algorithm.
+
+
+Go
+--
+
+Support for the Go programming language has been added to GCC. It is
+not enabled by default when you build GCC; use the --enable-languages
+configure option to build it. The driver program for compiling Go
+code is gccgo.
+
+Go is currently known to work on GNU/Linux and RTEMS. Solaris support
+is in progress. It may or may not work on other platforms.
+
+
+Java (GCJ)
+----------
+
+
+Objective-C and Objective-C++
+-----------------------------
+
+- The -fobjc-exceptions flag is now required to enable Objective-C
+ exception and synchronization syntax (introduced by the keywords
+ @try, @catch, @finally and @synchronized).
+
+- A number of Objective-C 2.0 features and extensions are now
+ supported by GCC. These features are enabled by default; you can
+ disable them by using the new -fobjc-std=objc1 command-line option.
+
+- The Objective-C 2.0 dot-syntax is now supported. It is an
+ alternative syntax for using getters and setters; object.count is
+ automatically converted into [object count] or [object setCount:
+ ...] depending on context; for example if (object.count > 0) is
+ automatically compiled into the equivalent of if ([object count] >
+ 0) while object.count = 0; is automatically compiled into the
+ equivalent ot [object setCount: 0];. The dot-syntax can be used
+ with instance and class objects and with any setters or getters, no
+ matter if they are part of a declared property or not.
+
+- Objective-C 2.0 declared properties are now supported. They are
+ declared using the new @property keyword, and are most commonly used
+ in conjunction with the new Objective-C 2.0 dot-syntax. The
+ nonatomic, readonly, readwrite, assign, retain, copy, setter and
+ getter attributes are all supported. Marking declared properties
+ with __attribute__ ((deprecated)) is supported too.
+
+- The Objective-C 2.0 @synthesize and @dynamic keywords are supported.
+ @synthesize causes the compiler to automatically synthesize a
+ declared property, while @dynamic is used to disable all warnings
+ for a declared property for which no implementation is provided at
+ compile time. Synthesizing declared properties requires runtime
+ support in most useful cases; to be able to use it with the GNU
+ runtime, appropriate helper functions have been added to the GNU
+ Objective-C runtime ABI, and are implemented by the GNU Objective-C
+ runtime library shipped with GCC.
+
+- The Objective-C 2.0 fast enumeration syntax is supported in
+ Objective-C. This is currently not yet available in Objective-C++.
+ Fast enumeration requires support in the runtime, and such support
+ has been added to the GNU Objective-C runtime library (shipped with
+ GCC).
+
+- The Objective-C 2.0 @optional keyword is supported. It allows you
+ to mark methods or properties in a protocol as optional as opposed
+ to required.
+
+- The Objective-C 2.0 @package keyword is supported. It has currently
+ the same effect as the @public keyword.
+
+- Objective-C 2.0 method attributes are supported. Currently the
+ supported attributes are deprecated, sentinel, noreturn and format.
+
+- Objective-C 2.0 method argument attributes are supported. The most
+ widely used attribute is unused, to mark an argument as unused in
+ the implementation.
+
+- Objective-C 2.0 class and protocol attributes are supported.
+ Currently the only supported attribute is deprecated.
+
+- Objective-C 2.0 class extensions are supported. A class extension
+ has the same syntax as a category declaration with no category name,
+ and the methods and properties declared in it are added directly to
+ the main class. It is mostly used as an alternative to a category
+ to add methods to a class without advertising them in the public
+ headers, with the advantage that for class extensions the compiler
+ checks that all the privately declared methods are actually
+ implemented.
+
+- As a result of these enhancements, GCC can now be used to build
+ Objective-C and Objective-C++ software that uses Foundation and
+ other important system frameworks with the NeXT runtime on Darwin 9
+ and Darwin 10 (Mac OS X 10.5 and 10.6). Currently this is for m32
+ code only.
+
+- Many bugs in the compiler have been fixed in this release; in
+ particular, LTO can now be used when compiling Objective-C and
+ Objective-C++ and the parser is much more robust in dealing with
+ invalid code.
+
+
+Runtime Library (libobjc)
+-------------------------
+
+- The GNU Objective-C runtime library now defines the macro
+ __GNU_LIBOBJC__ (with a value that is increased at every release
+ where there is any change to the API) in objc/objc.h, making it easy
+ to determine if the GNU Objective-C runtime library is being used,
+ and if so, which version. Previous versions of the GNU Objective-C
+ runtime library (and other Objective-C runtime libraries such as the
+ Apple one) do not define this macro.
+
+- A new Objective-C 2.0 API, almost identical to the one implemented
+ by the Apple Objective-C runtime, has been implemented in the GNU
+ Objective-C runtime library. The new API hides the internals of
+ most runtime structures but provides a more extensive set of
+ functions to operate on them. It is much easier, for example, to
+ create or modify classes at runtime. The new API also makes it
+ easier to port software from Apple to GNU as almost no changes
+ should be required. The old API is still supported for backwards
+ compatibility; including the old objc/objc-api.h header file
+ automatically selects the old API, while including the new
+ objc/runtime.h header file automatically selects the new API.
+ Support for the old API is being phased out and upgrading the
+ software to use the new API is strongly recommended. To check for
+ the availability of the new API, the __GNU_LIBOBJC__ macro can be
+ used as older versions of the GNU Objective-C runtime library, which
+ do not support the new API, do not define such a macro.
+
+- Runtime support for @synchronized has been added.
+
+- Runtime support for Objective-C 2.0 synthesized property accessors
+ has been added.
+
+- Runtime support for Objective-C 2.0 fast enumeration has been added.
+
+
+New Targets and Target Specific Improvements
+============================================
+
+ARM
+---
+
+- GCC now supports the Cortex-M4 processor implementing the v7-em
+ version of the architecture using the option -mcpu=cortex-m4.
+
+- Scheduling descriptions for the Cortex-M4, the Neon and the floating
+ point units of the Cortex-A9 and a pipeline description for the
+ Cortex-A5 have been added.
+
+- Synchronization primitives such as __sync_fetch_and_add and friends
+ are now inlined for supported architectures rather than calling into
+ a kernel helper function.
+
+- SSA loop prefetching is enabled by default for the Cortex-A9 at -O3.
+
+- Several improvements were committed to improve code generation for
+ the ARM architecture including a rewritten implementation for load
+ and store multiples.
+
+- Several enhancements were committed to improve SIMD code generation
+ for NEON by adding support for widening instructions, misaligned
+ loads and stores, vector conditionals and support for 64 bit
+ arithmetic.
+
+- Support was added for the Faraday cores fa526, fa606te, fa626te,
+ fmp626te, fmp626 and fa726te and can be used with the respective
+ names as parameters to the -mcpu= option.
+
+- Basic support was added for Cortex-A15 and is available through
+ -mcpu=cortex-a15.
+
+- GCC for AAPCS configurations now more closely adheres to the AAPCS
+ specification by enabling -fstrict-volatile-bitfields by default.
+
+
+IA-32/x86-64
+------------
+
+- The new -fsplit-stack option permits programs to use a discontiguous
+ stack. This is useful for threaded programs, in that it is no
+ longer necessary to specify the maximum stack size when creating a
+ thread. This feature is currently only implemented for 32-bit and
+ 64-bit x86 GNU/Linux targets.
+
+- Support for emitting profiler counter calls before function
+ prologues. This is enabled via a new command-line option -mfentry.
+
+- Optimization for the Intel Core 2 processors is now available
+ through the -march=core2 and -mtune=core2 options.
+
+- Support for Intel Core i3/i5/i7 processors is now available through
+ the -march=corei7 and -mtune=corei7 options.
+
+- Support for Intel Core i3/i5/i7 processors with AVX is now available
+ through the -march=corei7-avx and -mtune=corei7-avx options.
+
+- Support for AMD Bobcat (family 14) processors is now available
+ through the -march=btver1 and -mtune=btver1 options.
+
+- The default setting (when not optimizing for size) for 32-bit
+ GNU/Linux and Darwin x86 targets has been changed to -fomit-frame-pointer.
+ The default can be reverted to -fno-omit-frame-pointer by
+ configuring GCC with the --enable-frame-pointer configure option.
+
+- Darwin, FreeBSD, Solaris 2, MinGW and Cygwin now all support
+ __float128 on 32-bit and 64-bit x86 targets.
+
+- AVX floating-point arithmetic can now be enabled by default at
+ configure time with the new --with-fpmath=avx option.
+
+- The SSA loop prefetching pass is enabled when using -O3 when
+ optimizing for CPUs where prefetching is beneficial (AMD CPUs newer
+ than K6).
+
+- Support for TBM (Trailing Bit Manipulation) built-in functions and
+ code generation is available via -mtbm.
+
+- Support for AMD's BMI (Bit Manipulation) built-in functions and code
+ generation is available via -mbmi.
+
+
+MicroBlaze
+----------
+
+- Support has been added for the Xilinx MicroBlaze softcore processor
+ (microblaze-elf) embedded target. This configurable processor is
+ supported on several Xilinx Spartan and Virtex FPGAs.
+
+
+MIPS
+----
+
+- GCC now supports the Loongson 3A processor. Its canonical -march=
+ and -mtune= name is loongson3a.
+
+
+MN10300 / AM33
+--------------
+
+- The inline assembly register constraint "A" has been renamed "c".
+ This constraint is used to select a floating-point register that can
+ be used as the destination of a multiply-accumulate instruction.
+
+- New inline assembly register constraints "A" and "D" have been
+ added. These constraint letters resolve to all general registers
+ when compiling for AM33, and resolve to address registers only or
+ data registers only when compiling for MN10300.
+
+- The MDR register is represented in the compiler. One can access the
+ register via the "z" constraint in inline assembly. It can be
+ marked as clobbered or used as a local register variable via the
+ "mdr" name. The compiler uses the RETF instruction if the function
+ does not modify the MDR register, so it is important that inline
+ assembly properly annotate any usage of the register.
+
+
+PowerPC/PowerPC64
+-----------------
+
+- GCC now supports the Applied Micro Titan processor with -mcpu=titan.
+
+- The -mrecip option has been added, which indicates whether the
+ reciprocal and reciprocal square root instructions should be used.
+
+- The -mveclibabi=mass option can be used to enable the compiler to
+ autovectorize mathematical functions using the Mathematical
+ Acceleration Subsystem library.
+
+- The -msingle-pic-base option has been added, which instructs the
+ compiler to avoid loading the PIC base register in function
+ prologues. The PIC base register must be initialized by the runtime
+ system.
+
+- The -mblock-move-inline-limit option has been added, which enables
+ the user to control the maximum size of inlined memcpy calls and
+ similar.
+
+- PowerPC64 GNU/Linux support for applications requiring a large TOC
+ section has been improved. A new command-line option,
+ -mcmodel=MODEL, controls this feature; valid values for MODEL are
+ small, medium, or large.
+
+- The altivec builtin functions vec_ld and vec_st have been modified
+ to generate the Altivec memory instructions LVX and STVX, even if
+ the -mvsx option is used. In the initial GCC 4.5 release, these
+ builtin functions were changed to generate VSX memory reference
+ instructions instead of Altivec memory instructions, but there are
+ differences between the two instructions. If the VSX instruction
+ set is available, you can now use the new builtin functions
+ vec_vsx_ld and vec_vsx_st which always generates the VSX memory
+ instructions.
+
+- The GCC compiler on AIX now defaults to a process layout with a
+ larger data space allowing larger programs to be compiled.
+
+- The GCC long double type on AIX 6.1 and above has reverted to 64 bit
+ double precision, matching the AIX XL compiler default, because of
+ missing C99 symbols required by the GCC runtime.
+
+- The default processor scheduling model and tuning for PowerPC64
+ GNU/Linux and for AIX 6.1 and above now is POWER7.
+
+
+S/390, zSeries and System z9/z10, IBM zEnterprise z196
+------------------------------------------------------
+
+- Support for the zEnterprise z196 processor has been added. When
+ using the -march=z196 option, the compiler will generate code making
+ use of the following instruction facilities:
+
+ - Conditional load/store
+ - Distinct-operands
+ - Floating-point-extension
+ - Interlocked-access
+ - Population-count
+
+- The -mtune=z196 option avoids the compare and branch instructions as
+ well as the load address instruction with an index register as much
+ as possible and performs instruction scheduling appropriate for the
+ new out-of-order pipeline architecture.
+
+- When using the -m31 -mzarch options the generated code still
+ conforms to the 32-bit ABI but uses the general purpose registers as
+ 64-bit registers internally. This requires a Linux kernel saving
+ the whole 64-bit registers when doing a context switch. Kernels
+ providing that feature indicate that by the 'highgprs' string in
+ /proc/cpuinfo.
+
+- The SSA loop prefetching pass is enabled when using -O3.
+
+
+SPARC
+-----
+
+- GCC now supports the LEON series of SPARC V8 processors. The code
+ generated by the compiler can either be tuned to it by means of the
+ --with-tune=leon configure option and -mtune=leon compilation
+ option, or the compiler can be built for the sparc-leon-{elf,linux}
+ and sparc-leon3-{elf,linux} targets directly.
+
+- GCC has stopped sign/zero-extending parameter registers in the
+ callee for functions taking parameters with sub-word size in 32-bit
+ mode, since this is redundant with the specification of the ABI.
+ GCC has never done so in 64-bit mode since this is also redundant.
+
+
+Operating Systems
+-----------------
+
+Android
+-------
+
+- GCC now supports the Bionic C library and provides a convenient way
+ of building native libraries and applications for the Android
+ platform. Refer to the documentation of the -mandroid and -mbionic
+ options for details on building native code. At the moment, Android
+ support is enabled only for ARM.
+
+
+Darwin/Mac OS X
+---------------
+
+- General
+
+ - Initial support for CFString types has been added. This allows GCC
+ to build projects including the system Core Foundation
+ frameworks. The GCC Objective-C family supports CFString
+ "toll-free bridged" as per the Mac OS X system tools. CFString is
+ also recognized in the context of format attributes and arguments
+ (see the documentation for format attributes for limitations). At
+ present, 8-bit character types are supported.
+
+ - LTO-support. Darwin has benefited from ongoing work on LTO;
+ support for this is now stable and enabled by default.
+
+ - Object file size reduction. The Darwin zeroed memory allocators
+ have been re-written to make more use of .zerofill sections. For
+ non-debug code, this can reduce object file size significantly.
+
+- x86 Architecture
+
+ - The -mdynamic-no-pic option has been enabled.
+
+ - Code supporting -mdynamic-no-pic optimization has been added and
+ is applicable to -m32 builds. The compiler bootstrap uses the
+ option where appropriate.
+
+ - The default value for -mtune= has been changed.Since Darwin
+ systems are primarily Xeon, Core-2 or similar the default tuning
+ has been changed to -mtune=core2.
+
+- PPC Architecture
+
+ - Darwin64 ABI.
+
+ - Several significant bugs have been fixed, such that GCC now
+ produces code compatible with the Darwin64 PowerPC ABI.
+
+ - libffi and boehm-gc.The Darwin ports of the libffi and boehm-gc
+ libraries have been upgraded to include a Darwin64
+ implementation. This means that powerpc*-*-darwin9 platforms may
+ now, for example, build Java applications with -m64 enabled.
+
+ - Plug-in support has been enabled.
+
+ - The -fsection-anchors option is now available although, presently,
+ not heavily tested.
+
+
+Solaris 2
+---------
+
+- New Features
+
+ - Support symbol versioning with the Sun linker.
+ - Allow libstdc++ to leverage full ISO C99 support on Solaris 10+.
+ - Support thread-local storage (TLS) with the Sun assembler on
+ Solaris 2/x86.
+ - Support TLS on Solaris 8/9 if prerequisites are met.
+ - Support COMDAT group with the GNU assembler and recent Sun linker.
+ - Support the Sun assembler visibility syntax.
+ - Default Solaris 2/x86 to -march=pentium4 (Solaris 10+) resp.
+ -march=pentiumpro (Solaris 8/9).
+ - Don't use SSE on Solaris 8/9 x86 by default.
+ - Enable 128-bit long double (__float128) support on Solaris 2/x86.
+
+- ABI Change
+
+ - Change the ABI for returning 8-byte vectors like __m64 in MMX
+ registers on Solaris 10+/x86 to match the Sun Studio 12.1+
+ compilers. This is an incompatible change. If you use such
+ types, you must either recompile all your code with the new
+ compiler or use the new -mvect8-ret-in-mem option to remain
+ compatible with previous versions of GCC and Sun Studio.
+
+Windows x86/x86_64
+------------------
+
+- Initial support for decimal floating point.
+
+- Support for the __thiscall calling-convention.
+
+- Support for hot-patchable function prologues via the
+ ms_hook_prologue attribute for x86_64 in addition to 32-bit x86.
+
+- Improvements of stack-probing and stack-allocation mechanisms.
+
+- Support of push/pop-macro pragma as preprocessor command. With
+ #pragma push_macro("macro-name") the current definition of
+ macro-name is saved and can be restored with #pragma
+ pop_macro("macro-name") to its saved definition.
+
+- Enable 128-bit long double (__float128) support on MinGW and Cygwin.
+
+
+Documentation improvements
+==========================
+
+
+Other significant improvements
+==============================
+
+Installation changes
+--------------------
+
+- An install-strip make target is provided that installs stripped
+ executables, and may install libraries with unneeded or debugging
+ sections stripped.
+
+- On Power7 systems, there is a potential problem if you build the GCC
+ compiler with a host compiler using options that enables the VSX
+ instruction set generation. If the host compiler has been patched
+ so that the vec_ld and vec_st builtin functions generate Altivec
+ memory instructions instead of VSX memory instructions, then you
+ should be able to build the compiler with VSX instruction
+ generation.
+
+
+Changes for GCC Developers
+--------------------------
+
+Note: these changes concern developers that develop GCC itself or
+software that integrates with GCC, such as plugins, and not the
+general GCC users.
+
+- The gengtype utility, which previously was internal to the GCC build
+ process, has been enchanced to provide GC root information for
+ plugins as necessary.
+
+- The old GC allocation interface of ggc_alloc and friends was
+ replaced with a type-safe alternative.
+
+
+
+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 list at gcc@gcc.gnu.org. All
+of our lists have public archives.
+
+Copyright (C) Free Software Foundation, Inc.
+
+Verbatim copying and distribution of this entire article is
+permitted in any medium, provided this notice is preserved.
+
+Last modified 2011-03-22
diff --git a/debian/NEWS.html b/debian/NEWS.html
new file mode 100644
index 0000000..84aa46c
--- /dev/null
+++ b/debian/NEWS.html
@@ -0,0 +1,1182 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+ <!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+
+ <head>
+
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+ <link rev="made" href="mailto:gcc@gcc.gnu.org" />
+ <link rel="shortcut icon" href="http://gcc.gnu.org/favicon.ico" />
+ <link rel="stylesheet" type="text/css" href="/gnu.css" />
+ <link rel="stylesheet" type="text/css" href="http://gcc.gnu.org/gcc.css" />
+
+ <title>
+GCC 4.6 Release Series &mdash; Changes, New Features, and Fixes
+- GNU Project - Free Software Foundation (FSF)</title>
+ </head>
+
+
+<!-- GCC maintainers, please do not hesitate to update/contribute entries
+ concerning those part of GCC you maintain! 2002-03-23, Gerald.
+-->
+
+<body bgcolor="#FFFFFF" text="#000000" link="#1F00FF" alink="#FF0000" vlink="#9900DD">
+
+
+
+<h1 align="center">
+GCC 4.6 Release Series<br />Changes, New Features, and Fixes
+</h1>
+
+<h2>Caveats</h2>
+ <ul>
+
+ <li>The options <code>-b &lt;<em>machine</em>&gt;</code> and
+ <code>-V &lt;<em>version</em>&gt;</code> have been removed because
+ they were unreliable. Instead, users should directly run
+ <code>&lt;<em>machine</em>&gt;-gcc</code> when cross-compiling, or
+ <code>&lt;<em>machine</em>&gt;-gcc-&lt;<em>version</em>&gt;</code>
+ to run a different version of <code>gcc</code>. </li>
+
+ <li>GCC now has stricter checks for invalid command-line options.
+ In particular, when <code>gcc</code> was called to link object
+ files rather than compile source code, it would previously accept
+ and ignore all options starting with <code>--</code>, including
+ linker options such as <code>--as-needed</code>
+ and <code>--export-dynamic</code>, although such options would
+ result in errors if any source code was compiled. Such options,
+ if unknown to the compiler, are now rejected in all cases; if the
+ intent was to pass them to the linker, options such
+ as <code>-Wl,--as-needed</code> should be used.</li>
+
+ <li>Versions of the GNU C library up to and including 2.11.1
+ included an <a
+ href="http://sourceware.org/bugzilla/show_bug.cgi?id=10401">incorrect
+ implementation of the <code>cproj</code> function</a>. GCC
+ optimizes its builtin <code>cproj</code> according to the behavior
+ specified and allowed by the ISO C99 standard. If you want to
+ avoid discrepancies between the C library and GCC's builtin
+ transformations when using <code>cproj</code> in your code, use
+ GLIBC 2.12 or later. If you are using an older GLIBC and actually
+ rely on the incorrect behavior of cproj, then you can disable
+ GCC's transformations using <code>-fno-builtin-cproj</code>. </li>
+
+ <li>The C-only intermodule optimization framework (IMA, enabled by
+ <code>-combine</code>) has been removed in favor of the new
+ generic link-time optimization framework (LTO) introduced
+ in <a href="../gcc-4.5/changes.html">GCC 4.5.0</a>.</li>
+
+ <li id="libquadmath">GCC now ships with the LGPL-licensed
+ <code>libquadmath</code> library, which provides quad-precision
+ mathematical functions for targets with a <code>__float128</code>
+ datatype. <code>__float128</code> is available for targets on
+ 32-bit x86, x86-64 and Itanium architectures. The
+ <code>libquadmath</code> library is automatically built on
+ such targets when building the Fortran compiler.</li>
+
+ <li>New <code>-Wunused-but-set-variable</code> and
+ <code>-Wunused-but-set-parameter</code> warnings were added
+ for C, C++, Objective-C and Objective-C++.
+ These warnings diagnose variables respective parameters which
+ are only set in the code and never otherwise used.
+ Usually such variables are useless and often even the value
+ assigned to them is computed needlessly, sometimes expensively.
+ The <code>-Wunused-but-set-variable</code> warning is enabled by
+ default by <code>-Wall</code> flag and <code>-Wunused-but-set-parameter</code>
+ by <code>-Wall -Wextra</code> flags.</li>
+
+ <li><p>Support for a number of older systems and recently
+ unmaintained or untested target ports of GCC has been declared
+ obsolete in GCC 4.6. Unless there is activity to revive them, the
+ next release of GCC will have their sources permanently
+ <strong>removed</strong>.</p>
+
+ <p id="obsoleted">All GCC ports for the following processor
+ architectures have been declared obsolete:</p>
+
+ <ul>
+ <li>Argonaut ARC (<code>arc-*</code>)</li>
+ <li>National Semiconductor CRX (<code>crx-*</code>)</li>
+ <li>Motorola 68HC11 and 68HC12
+ (<code>m68hc11-*-*</code>, <code>m6811-*-*</code>,
+ <code>m68hc12-*-*</code>, <code>m6812-*-*</code>)</li>
+ <li>Sunplus S+core (<code>score-*</code>)</li>
+ </ul>
+
+ <p>The following ports for individual systems on
+ particular architectures have been obsoleted:</p>
+
+ <ul>
+ <li>Interix (<code>i[34567]86-*-interix3*</code>)</li>
+ <li>Generic ARM PE (<code>arm-*-pe*</code> other
+ than <code>arm*-wince-pe*</code>)</li>
+ <li>MCore PE (<code>mcore-*-pe*</code>)</li>
+ <li>SH SymbianOS (<code>sh*-*-symbianelf*</code>)</li>
+ <li>GNU Hurd on Alpha and PowerPC
+ (<code>alpha*-*-gnu*</code>, <code>powerpc*-*-gnu*</code>)</li>
+ <li>M68K uClinux old ABI
+ (<code>m68k-*-uclinuxoldabi*</code>)</li>
+ <li>a.out NetBSD
+ (<code>arm*-*-netbsd*</code>, <code>i[34567]86-*-netbsd*</code>,
+ <code>vax-*-netbsd*</code>, but
+ not <code>*-*-netbsdelf*</code>)</li>
+ </ul>
+
+ <p>The <code>i[34567]86-*-pe</code> alias for Cygwin targets has
+ also been obsoleted; users should configure
+ for <code>i[34567]86-*-cygwin*</code> instead.</p>
+
+ <p>Certain configure options to control the set of libraries built
+ with GCC on some targets have been obsoleted. On ARM targets, the
+ options <code>--disable-fpu</code>, <code>--disable-26bit</code>,
+ <code>--disable-underscore</code>, <code>--disable-interwork</code>,
+ <code>--disable-biendian</code> and <code>--disable-nofmult</code>
+ have been obsoleted. On MIPS targets, the options
+ <code>--disable-single-float</code>, <code>--disable-biendian</code>
+ and <code>--disable-softfloat</code> have been obsoleted.</p>
+
+ </li>
+
+ <li>Support has been removed for all the
+ <a href="../gcc-4.5/changes.html#obsoleted">configurations obsoleted
+ in GCC 4.5</a>.</li>
+
+</ul>
+
+<h2>General Optimizer Improvements</h2>
+
+ <ul>
+ <li>A new general optimization level, <code>-Ofast</code>, has been
+ introduced. It combines the existing optimization level <code>-O3</code>
+ with options that can affect standards compliance but result in
+ better optimized code. For example, <code>-Ofast</code> enables
+ <code>-ffast-math</code>.</li>
+ <li>Link-time optimization improvements:
+ <ul>
+ <li>The <a href="../projects/lto/whopr.pdf">Scalable Whole
+ Program Optimizer (WHOPR)</a> project has stabilized to the
+ point of being usable. It has become the default mode when
+ using the LTO optimization model. Link time optimization can
+ now split itself into multiple parallel compilations. Parallelism
+ is controlled with <code>-flto=<em>n</em></code> (where
+ <em>n</em> specifies the number of compilations to execute in
+ parallel). GCC can also cooperate with a GNU make job server
+ by specifying the <code>-flto=jobserver</code> option and
+ adding <code>+</code> to the beginning of the
+ Makefile rule executing the linker.<br />
+ Classical LTO mode can be enforced by
+ <code>-flto-partition=none</code>. This may result in small code
+ quality improvements.</li>
+ <li>A large number of bugs were fixed. GCC itself, Mozilla
+ Firefox and other large applications can be built with
+ LTO enabled.</li>
+ <li>The linker plugin support improvements
+ <ul>
+ <li>Linker plugin is now enabled by default when the linker is
+ detected to have plugin support. This is the case for GNU
+ ld 2.21.51 or newer (on ELF and Cygwin targets) and the Gold
+ linker on ELF targets. Plugin support of the Apple linker on
+ Darwin is not compatible with GCC.
+ The linker plugin can also be controlled by the
+ <code>-fuse-linker-plugin</code> command line option.</li>
+ <li>Resolution information from the linker plugin is used to drive
+ whole program assumptions. Use of the linker plugin results in
+ more aggressive optimization on binaries and on shared libraries
+ that use the <code>hidden</code> visibility
+ attribute. Consequently the use
+ of <code>-fwhole-program</code> is not neccesary in addition to
+ LTO.</li>
+ </ul>
+ </li>
+ <li>Hidden symbols used from non-LTO objects now have to be
+ explicitly annotated with <code>externally_visible</code> when
+ the linker plugin is not used.</li>
+ <li>C++ inline functions and virtual tables are now privatized more
+ aggressively, leading to better inter-procedural optimization
+ and faster dynamic linking.</li>
+ <li>Memory usage and intermediate language streaming performance
+ have been improved.</li>
+ <li>Static constructors and destructors from individual units are
+ inlined into a single function.
+ This can significantly improve startup times of large C++
+ applications where static constructors are very common. For
+ example, static constructors are used when including the
+ <code>iostream</code> header.</li>
+ <li>Support for the Ada language has been added.</li>
+ </ul>
+ </li>
+ <li>Interprocedural optimization improvements
+ <ul>
+ <li>The interprocedural framework was re-tuned for link time
+ optimization. Several scalability issues were resolved.</li>
+ <li>Improved auto-detection of <code>const</code> and <code>pure</code>
+ functions. Newly, <code>noreturn</code> functions are auto-detected.
+ <p>The <a href="http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options"><code>-Wsuggest-attribute=[const|pure|noreturn]</code></a>
+ flag is available that informs users when adding
+ attributes to headers might improve code generation.</p></li>
+ <li>A number of inlining heuristic improvements. In particular:
+ <ul>
+ <li>Partial inlining is now supported and enabled by default
+ at <code>-O2</code> and greater. The feature can be
+ controlled via <code>-fpartial-inlining</code>.
+ <p>
+ Partial inlining splits functions with short hot path
+ to return. This allows more aggressive inlining of the
+ hot path leading to better performance and often to
+ code size reductions (because cold parts of functions
+ are not duplicated).
+ </p>
+ </li>
+ <li>Scalability for large compilation units was improved
+ significantly.</li>
+ <li>Inlining of callbacks is now more aggressive.</li>
+ <li>Virtual methods are considered for inlining when the
+ caller is
+ inlined and devirtualization is then possible.</li>
+ <li>Inlining when optimizing for size (either in cold
+ regions of a program or when compiling with
+ <code>-Os</code>) was improved to better handle C++
+ programs with larger abstraction penalty, leading
+ to smaller and faster code.</li>
+ </ul>
+ </li>
+ <li>The IPA reference optimization pass detecting global
+ variables used or modified by functions was strengthened
+ and sped up.</li>
+ <li>Functions whose address was taken are now optimized out
+ when all references to them are dead.</li>
+ <li>A new inter-procedural static profile estimation pass detects
+ functions that are executed once or unlikely to be executed.
+ Unlikely executed functions are optimized for size. Functions
+ executed once are optimized for size except for the inner
+ loops.</li>
+ <li>On most targets with named section support, functions used only
+ at startup (static constructors and <code>main</code>), functions
+ used only at exit and functions detected to be cold are placed into
+ separate text segment subsections.
+ This extends the <code>-freorder-functions</code> feature and is
+ controlled by the same switch. The goal is to improve the startup
+ time of large C++ programs.
+ <p>Proper function placement requires linker support.
+ GNU ld 2.21.51 on ELF targets was updated to place
+ those functions together within the text section leading to better code
+ locality and faster startup times of large C++ programs. The feature is
+ also supported in the Apple linker.
+ Support in the gold linker is planned.</p>
+ </li>
+ </ul>
+ </li>
+ <li>A new switch <code>-fstack-usage</code> has been added. It makes
+ the compiler output stack usage information for the program, on a
+ per-function basis, in an auxiliary file.</li>
+ <li>A new switch <code>-fcombine-stack-adjustments</code> has been added.
+ It can be used to enable or disable the compiler's stack-slot combining
+ pass which before was enabled automatically at <code>-O1</code> and above,
+ but could not be controlled on its own.</li>
+ <li>A new switch <code>-fstrict-volatile-bitfields</code> has been
+ added. Using it indicates that accesses to volatile bitfields
+ should use a single access of the width of the field's type.
+ This option can be useful for precisely defining and accessing
+ memory-mapped peripheral registers from C or C++.</li>
+ </ul>
+
+<h2>Compile time and memory usage improvements</h2>
+ <ul>
+ <li>Datastructures used by the dataflow framework in GCC were reorganized
+ for better memory usage and more cache locality. Compile
+ time is improved especially on units with large functions (possibly
+ resulting from a lot of inlining) not fitting into the processor cache.
+ The compile time of the GCC C compiler binary with link-time
+ optimization went down by over 10% (benchmarked on x86-64 target).</li>
+ </ul>
+
+<h2>New Languages and Language specific improvements</h2>
+
+<h3>Ada</h3>
+
+ <ul>
+ <li>Stack checking has been improved on selected architectures (Alpha,
+ IA-32/x86-64, RS/6000 and SPARC): it now will detect stack overflows
+ in all cases on these architectures.</li>
+ <li>Initial support for Ada 2012 has been added.</li>
+ </ul>
+
+<h3>C family</h3>
+
+ <ul>
+ <li>A new warning, enabled by <code>-Wdouble-promotion</code>,
+ has been added that warns about cases where a value of type
+ <code>float</code> is implicitly promoted to <code>double</code>.
+ This is especially helpful for CPUs that handle the former in
+ hardware, but emulate the latter in software.</li>
+ <li>A new function attribute <code>leaf</code> was introduced.
+ This attribute allows better inter-procedural optimization across
+ calls to functions that return to the current unit only via returning
+ or exception handling. This is the case for most library functions
+ that have no callbacks.</li>
+ <li>Support for a new data type <code>__int128</code> for targets having
+ wide enough machine-mode support.</li>
+ <li>The new function attribute <code>callee_pop_aggregate</code> allows
+ to specify if the caller or callee is responsible for popping the
+ aggregate return pointer value from the stack.</li>
+ <li>Support for selectively enabling and disabling warnings
+ via <code>#pragma GCC diagnostic</code> has been added. For instance:
+<pre>#pragma GCC diagnostic error "-Wuninitialized"
+ foo(a); /* error is given for this one */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wuninitialized"
+ foo(b); /* no diagnostic for this one */
+#pragma GCC diagnostic pop
+ foo(c); /* error is given for this one */
+#pragma GCC diagnostic pop
+ foo(d); /* depends on command line options */
+</pre></li>
+ <li>The <code>-fmax-errors=N</code> option is now supported. Using
+ this option causes the compiler to exit after <code>N</code> errors
+ have been issued.</li>
+ </ul>
+
+<h3 id="c">C</h3>
+
+ <ul>
+ <li>There is now experimental support for some features from the
+ upcoming C1X revision of the ISO C standard. This support may be
+ selected with <code>-std=c1x</code>, or <code>-std=gnu1x</code>
+ for C1X with GNU extensions. Note that this support is
+ experimental and may change incompatibly in future releases for
+ consistency with changes to the C1X standard draft. The following
+ features are newly supported as described in the N1539 draft of
+ C1X (with changes agreed at the March 2011 WG14 meeting); some
+ other features were already supported with no compiler
+ changes being needed, or have some support but not in full accord
+ with N1539 (as amended).
+ <ul>
+ <li>Static assertions (<code>_Static_assert</code> keyword)</li>
+ <li>Typedef redefinition</li>
+ <li>New macros in <code>&lt;float.h&gt;</code></li>
+ <li>Anonymous structures and unions</li>
+ </ul>
+ </li>
+ <li>The new <code>-fplan9-extensions</code> option directs the
+ compiler to support some extensions for anonymous struct fields
+ which are implemented by the Plan 9 compiler. A pointer to a
+ struct may be automatically converted to a pointer to an
+ anonymous field when calling a function, in order to make the
+ types match. An anonymous struct field whose type is a typedef
+ name may be referred to using the typedef name.</li>
+ </ul>
+
+<h3 id="cplusplus">C++</h3>
+
+ <ul>
+ <li>Improved <a href="cxx0x_status.html">experimental support for the
+ upcoming C++0x</a> ISO C++ standard, including support for
+ <code>constexpr</code> (thanks to Gabriel Dos Reis and Jason Merrill),
+ <code>nullptr</code> (thanks to Magnus Fromreide), <code>noexcept</code>,
+ unrestricted unions, range-based <code>for</code> loops (thanks to Rodrigo Rivas Costa),
+ opaque enum declarations (thanks also to Rodrigo), implicitly deleted
+ functions and implicit move constructors.</li>
+
+ <li>When an extern declaration within a function does not match a
+ declaration in the enclosing context, G++ now properly declares the
+ name within the namespace of the function rather than the namespace
+ which was open just before the function definition
+ (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43145">c++/43145</a>).</li>
+
+ <li>GCC now warns by default when casting integers to larger
+ pointer types. These warnings can be disabled with the option
+ <code>-Wno-int-to-pointer-cast</code>, which is now also available
+ in C++.</li>
+
+ <li>G++ no longer optimizes using the assumption that a value of
+ enumeration type will fall within the range specified by the standard,
+ since that assumption is easily violated with a conversion from integer
+ type (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43680">c++/43680</a>).
+ The old behavior can be restored with <code>-fstrict-enums</code>.</li>
+
+ <li>The new <code>-fnothrow-opt</code> flag changes the semantics of
+ a <code>throw()</code> exception specification to match the proposed
+ semantics of the <code>noexcept</code> specification: just call
+ <code>terminate</code> if an exception tries to propagate out of a
+ function with such an exception specification. This dramatically
+ reduces or eliminates the code size overhead from adding the exception
+ specification.</li>
+
+ <li>The new <code>-Wnoexcept</code> flag will suggest adding
+ a <code>noexcept</code> qualifier to a function that the compiler can
+ tell doesn't throw if it would change the value of
+ a <code>noexcept</code> expression.</li>
+
+ <li>The <code>-Wshadow</code> option now warns if a local variable or
+ type declaration shadows another type in C++. Note that the compiler will
+ not warn if a local variable shadows a struct/class/enum, but will warn
+ if it shadows an explicit typedef. </li>
+
+ <li>When an identifier is not found in the current scope, G++ now
+ offers suggestions about which identifier might have been
+ intended.</li>
+
+ <li>G++ now issues clearer diagnostics for missing semicolons
+ after <code>class</code>, <code>struct</code>,
+ and <code>union</code> definitions.</li>
+
+ <li>G++ now issues clearer diagnostics for missing semicolons after
+ class member declarations.</li>
+
+ <li>G++ now issues clearer diagnostics when a colon is used in a
+ place where a double-colon was intended.</li>
+
+ <li>G++ no longer accepts <code>mutable</code> on reference members
+ (<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33558">c++/33558</a>).
+ Use <code>-fpermissive</code> to allow the old, non-conforming behaviour.
+ </li>
+
+ <li>A few mangling fixes have been made, to attribute const/volatile on
+ function pointer types, decltype of a plain decl, and use of a
+ function parameter in the declaration of another parameter. By
+ default the compiler still uses the old mangling, but emits aliases
+ with the new mangling on targets that support strong aliases. Users
+ can switch over entirely to the new mangling
+ with <code>-fabi-version=5</code> or <code>-fabi-version=0</code>.
+ <code>-Wabi</code> will now warn about code that uses the old
+ mangling.</li>
+
+ <li>G++ no longer allows objects of const-qualified type to be default
+ initialized unless the type has a user-declared default constructor.
+ Code that fails to compile can be fixed by providing an initializer e.g.
+ <pre>
+ struct A { A(); };
+ struct B : A { };
+ const B b = B();
+ </pre>
+ Use <code>-fpermissive</code> to allow the old, non-conforming behaviour.
+ </li>
+
+ </ul>
+
+ <h4>Runtime Library (libstdc++)</h4>
+
+ <ul>
+ <li><a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x">
+ Improved experimental support for the upcoming ISO C++ standard,
+ C++0x</a>, including using <code>constexpr</code> and
+ <code>nullptr</code>. </li>
+ <li>Performance improvements to the
+ <a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html">Debug
+ Mode</a>, thanks to Fran&ccedil;ois Dumont.
+ </li>
+ <li>Atomic operations used for reference-counting are annotated so that
+ they can be understood by race detectors such as Helgrind, see
+ <a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races">Data
+ Race Hunting</a>.</li>
+ <li>Most libstdc++ standard headers have been changed to no longer include
+ the <code>cstddef</code> header as an implementation detail. Code that
+ relied on that header being included as side-effect of including other
+ standard headers will need to include <code>cstddef</code> explicitly.</li>
+ </ul>
+
+<h3 id="fortran">Fortran</h3>
+ <ul>
+ <li>On systems supporting the <code>libquadmath</code> library, GNU Fortran
+ now also supports a quad-precision, <code>kind=16</code> floating-point
+ data type (<code>REAL(16)</code>, <code>COMPLEX(16)</code>). As the data
+ type is not fully supported in hardware, calculations might be one to
+ two orders of magnitude slower than with the 4, 8 or 10 bytes
+ floating-point data types. This change does not affect systems which
+ support <code>REAL(16)</code> in hardware nor those which do not support
+ <code>libquadmath</code>.</li>
+ <li>Much improved compile time for large array constructors.</li>
+ <li>In order to reduce execution time and memory consumption, use of
+ temporary arrays in assignment expressions is avoided for
+ many cases. The compiler now reverses loops in order to avoid
+ generating a temporary array where possible.</li>
+ <li>Improved diagnostics, especially with
+ <code>-fwhole-file</code>.</li>
+ <li>The <code>-fwhole-file</code> flag is now enabled by default. This
+ improves code generation and diagnostics. It can be
+ disabled using the deprecated <code>-fno-whole-file</code> flag.</li>
+ <li>Support the generation of Makefile dependencies via the <a
+ href="http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html">
+ <code>-M</code>...</a> flags of GCC; you may need to specify the
+ <code>-cpp</code> option in addition. The dependencies take
+ modules, Fortran's <code>include</code>, and CPP's <code>#include</code>
+ into account. Note: Using <code>-M</code> for the module path is no
+ longer supported, use <code>-J</code> instead.</li>
+ <li>The flag <code>-Wconversion</code> has been modified to only issue
+ warnings where a conversion leads to information loss. This drastically
+ reduces the number of warnings; <code>-Wconversion</code> is thus now
+ enabled with <code>-Wall</code>. The flag <code>-Wconversion-extra</code>
+ has been added and also warns about other conversions;
+ <code>-Wconversion-extra</code> typically issues a huge number of
+ warnings, most of which can be ignored.</li>
+ <li>A new command-line option <code>-Wunused-dummy-argument</code> warns
+ about unused dummy arguments and is included in <code>-Wall</code>.
+ Before, <code>-Wunused-variable</code> also warned about unused dummy
+ arguments.</li>
+ <li>Fortran 2003 support has been extended:
+ <ul>
+ <li>Improved support for polymorphism between libraries and
+ programs and for complicated inheritance patterns (cf. <a
+ href="http://gcc.gnu.org/wiki/OOP">object-oriented programming</a>).
+ </li>
+ <li>Experimental support of the <code>ASSOCIATE</code> construct.</li>
+ <li>In pointer assignments it is now possible to specify the lower
+ bounds of the pointer and, for a rank-1 or a simply contiguous
+ data-target, to remap the bounds.</li>
+ <li>Automatic (re)allocation: In intrinsic assignments to
+ allocatable variables the left-hand side will be automatically
+ allocated (if unallocated) or reallocated (if the shape or type
+ parameter is different). To avoid the small performance penalty,
+ you can use <code>a(:) = ...</code> instead of <code>a = ...</code>
+ for arrays and character strings &ndash; or disable the feature using
+ <code>-std=f95</code> or <code>-fno-realloc-lhs</code>.</li>
+ <li>Deferred type parameter: For scalar allocatable and pointer
+ variables the character length can be deferred.</li>
+ <li>Namelist variables with allocatable and pointer attribute and
+ nonconstant length type parameter are supported.</li>
+ </ul>
+ </li>
+ <li>Fortran 2008 support has been extended:
+ <ul>
+ <li>Experimental <a href="http://gcc.gnu.org/wiki/Coarray">
+ coarray support</a> (for one image only, i.e. <code>num_images() ==
+ 1</code>); use the <a
+ href="http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcoarray_007d-233">
+ <code>-fcoarray=single</code></a> flag to enable it.</li>
+ <li>The <code>STOP</code> and the new <code>ERROR STOP</code>
+ statements now support all constant expressions.</li>
+ <li>Support for the <code>CONTIGUOUS</code> attribute.</li>
+ <li>Support for <code>ALLOCATE</code> with <code>MOLD</code>.</li>
+ <li>Support for the <code>STORAGE_SIZE</code> intrinsic inquiry
+ function.</li>
+ <li>Support of the <code>NORM2</code> and <code>PARITY</code>
+ intrinsic functions.</li>
+ <li>The following bit intrinsics were added: <code>POPCNT</code>
+ and <code>POPPAR</code> for counting the number of 1 bits and
+ returning the parity; <code>BGE</code>, <code>BGT</code>,
+ <code>BLE</code>, and <code>BLT</code> for bitwise comparisons;
+ <code>DSHIFTL</code> and <code>DSHIFTR</code> for combined left
+ and right shifts, <code>MASKL</code> and <code>MASKR</code> for
+ simple left and right justified masks, <code>MERGE_BITS</code>
+ for a bitwise merge using a mask, <code>SHIFTA</code>,
+ <code>SHIFTL</code> and <code>SHIFTR</code> for shift operations,
+ and the transformational bit intrinsics <code>IALL</code>,
+ <code>IANY</code> and <code>IPARITY</code>.</li>
+ <li>Support of the <code>EXECUTE_COMMAND_LINE</code> intrinsic
+ subroutine.</li>
+ <li>Support for the <code>IMPURE</code> attribute for procedures,
+ which allows for <code>ELEMENTAL</code> procedures without the
+ restrictions of <code>PURE</code>.</li>
+ <li>Null pointers (including <code>NULL()</code>) and not
+ allocated variables can be used as actual argument to optional
+ non-pointer, non-allocatable dummy arguments, denoting an absent
+ argument.</li>
+ <li>Non-pointer variables with <code>TARGET</code> attribute can
+ be used as actual argument to <code>POINTER</code> dummies with
+ <code>INTENT(IN)</code></li>
+ <li>Pointers including procedure pointers and those in a derived
+ type (pointer components) can now be initialized by a target
+ instead of only by <code>NULL</code>.</li>
+ <li>The <code>EXIT</code> statement (with construct-name) can
+ now be used to leave not only the <code>DO</code> but also the
+ <code>ASSOCIATE</code>, <code>BLOCK</code>, <code>IF</code>,
+ <code>SELECT CASE</code> and <code>SELECT TYPE</code> constructs.</li>
+ <li>Internal procedures can now be used as actual argument.</li>
+ <li>The named constants <code>INTEGER_KINDS</code>,
+ <code>LOGICAL_KINDS</code>, <code>REAL_KINDS</code> and
+ <code>CHARACTER_KINDS</code> of the intrinsic module
+ <code>ISO_FORTRAN_ENV</code> have been added; these arrays contain
+ the supported kind values for the respective types.</li>
+ <li>The module procedures <code>C_SIZEOF</code> of the intrinsic
+ module <code>ISO_C_BINDINGS</code> and <code>COMPILER_VERSION</code>
+ and <code>COMPILER_OPTIONS</code> of <code>ISO_FORTRAN_ENV</code>
+ have been implemented.</li>
+ <li>Minor changes: obsolescence diagnostics for <code>ENTRY</code>
+ was added for <code>-std=f2008</code>;
+ a line may start with a semicolon;
+ for internal and module procedures <code>END</code> can be used
+ instead of <code>END SUBROUTINE</code> and <code>END
+ FUNCTION</code>; <code>SELECTED_REAL_KIND</code> now also takes a
+ <code>RADIX</code> argument; intrinsic types are supported for
+ <code>TYPE(<i>intrinsic-type-spec</i>)</code>; multiple type-bound
+ procedures can be declared in a single <code>PROCEDURE</code>
+ statement; implied-shape arrays are supported for named constants
+ (<code>PARAMETER</code>). The transformational, three argument
+ versions of <code>BESSEL_JN</code> and <code>BESSEL_YN</code>
+ were added &ndash; the elemental, two-argument version had been
+ added in GCC 4.4; note that the transformational functions use
+ a recurrence algorithm.</li>
+ </ul>
+ </li>
+ </ul>
+
+<h3 id="go">Go</h3>
+
+<p>Support for the <a href="http://golang.org/">Go programming
+ language</a> has been added to GCC. It is not enabled by default
+ when you build GCC; use the <code>--enable-languages</code>
+ configure option to build it. The driver program for compiling Go
+ code is <code>gccgo</code>.</p>
+
+<p>Go is currently known to work on GNU/Linux and RTEMS. Solaris
+ support is in progress. It may or may not work on other
+ platforms.</p>
+
+<h3>Java (GCJ)</h3>
+
+<h3 id="objective-c">Objective-C and Objective-C++</h3>
+
+ <ul>
+ <li>The <code>-fobjc-exceptions</code> flag is now required to
+ enable Objective-C exception and synchronization syntax
+ (introduced by the keywords <code>@try</code>,
+ <code>@catch</code>, <code>@finally</code> and
+ <code>@synchronized</code>).</li>
+
+ <li>A number of Objective-C 2.0 features and extensions are now
+ supported by GCC. These features are enabled by default; you can
+ disable them by using the new <code>-fobjc-std=objc1</code>
+ command-line option.</li>
+
+ <li>The Objective-C 2.0 dot-syntax is now supported. It is an
+ alternative syntax for using getters and setters;
+ <code>object.count</code> is automatically converted into
+ <code>[object count]</code> or <code>[object setCount: ...]</code>
+ depending on context; for example <code>if (object.count >
+ 0)</code> is automatically compiled into the equivalent of
+ <code>if ([object count] > 0)</code> while <code>object.count =
+ 0;</code> is automatically compiled into the equivalent ot
+ <code>[object setCount: 0];</code>. The dot-syntax can be used
+ with instance and class objects and with any setters or getters,
+ no matter if they are part of a declared property or not.</li>
+
+ <li>Objective-C 2.0 declared properties are now supported. They
+ are declared using the new <code>@property</code> keyword, and are
+ most commonly used in conjunction with the new Objective-C 2.0
+ dot-syntax. The <code>nonatomic</code>, <code>readonly</code>,
+ <code>readwrite</code>, <code>assign</code>, <code>retain</code>,
+ <code>copy</code>, <code>setter</code> and <code>getter</code>
+ attributes are all supported. Marking declared properties with
+ <code>__attribute__ ((deprecated))</code> is supported too.</li>
+
+ <li>The Objective-C 2.0 <code>@synthesize</code> and
+ <code>@dynamic</code> keywords are supported.
+ <code>@synthesize</code> causes the compiler to automatically
+ synthesize a declared property, while <code>@dynamic</code> is
+ used to disable all warnings for a declared property for which no
+ implementation is provided at compile time. Synthesizing declared
+ properties requires runtime support in most useful cases; to be
+ able to use it with the GNU runtime, appropriate helper functions
+ have been added to the GNU Objective-C runtime ABI, and are
+ implemented by the GNU Objective-C runtime library shipped with
+ GCC.</li>
+
+ <li>The Objective-C 2.0 fast enumeration syntax is supported in
+ Objective-C. This is currently not yet available in
+ Objective-C++. Fast enumeration requires support in the runtime,
+ and such support has been added to the GNU Objective-C runtime
+ library (shipped with GCC).</li>
+
+ <li>The Objective-C 2.0 <code>@optional</code> keyword is
+ supported. It allows you to mark methods or properties in a
+ protocol as optional as opposed to required.</li>
+
+ <li>The Objective-C 2.0 <code>@package</code> keyword is
+ supported. It has currently the same effect as the
+ <code>@public</code> keyword.</li>
+
+ <li>Objective-C 2.0 method attributes are supported. Currently
+ the supported attributes are <code>deprecated</code>,
+ <code>sentinel</code>, <code>noreturn</code> and
+ <code>format</code>.</li>
+
+ <li>Objective-C 2.0 method argument attributes are supported. The
+ most widely used attribute is <code>unused</code>, to mark an
+ argument as unused in the implementation.</li>
+
+ <li>Objective-C 2.0 class and protocol attributes are supported.
+ Currently the only supported attribute is
+ <code>deprecated</code>.</li>
+
+ <li>Objective-C 2.0 class extensions are supported. A class
+ extension has the same syntax as a category declaration with no
+ category name, and the methods and properties declared in it are
+ added directly to the main class. It is mostly used as an
+ alternative to a category to add methods to a class without
+ advertising them in the public headers, with the advantage that
+ for class extensions the compiler checks that all the privately
+ declared methods are actually implemented.</li>
+
+ <li>As a result of these enhancements, GCC can now be used to
+ build Objective-C and Objective-C++ software that uses Foundation
+ and other important system frameworks with the NeXT runtime on
+ Darwin 9 and Darwin 10 (Mac OS X 10.5 and 10.6). Currently this is for
+ m32 code only.</li>
+
+ <li>Many bugs in the compiler have been fixed in this release; in
+ particular, LTO can now be used when compiling Objective-C and
+ Objective-C++ and the parser is much more robust in dealing with
+ invalid code.</li>
+ </ul>
+
+ <h4>Runtime Library (libobjc)</h4>
+
+ <ul>
+ <li>The GNU Objective-C runtime library now defines the macro
+ <code>__GNU_LIBOBJC__</code> (with a value that is increased at
+ every release where there is any change to the API) in
+ <code>objc/objc.h</code>, making it easy to determine if the GNU
+ Objective-C runtime library is being used, and if so, which
+ version. Previous versions of the GNU Objective-C runtime library
+ (and other Objective-C runtime libraries such as the Apple one) do
+ not define this macro.</li>
+
+ <li>A new Objective-C 2.0 API, almost identical to the one
+ implemented by the Apple Objective-C runtime, has been implemented
+ in the GNU Objective-C runtime library. The new API hides the
+ internals of most runtime structures but provides a more extensive
+ set of functions to operate on them. It is much easier, for
+ example, to create or modify classes at runtime. The new API also
+ makes it easier to port software from Apple to GNU as almost no
+ changes should be required. The old API is still supported for
+ backwards compatibility; including the old
+ <code>objc/objc-api.h</code> header file automatically selects the
+ old API, while including the new <code>objc/runtime.h</code>
+ header file automatically selects the new API. Support for the
+ old API is being phased out and upgrading the software to use the
+ new API is strongly recommended. To check for the availability of
+ the new API, the <code>__GNU_LIBOBJC__</code> macro can be used as
+ older versions of the GNU Objective-C runtime library, which do
+ not support the new API, do not define such a macro.</li>
+
+ <li>Runtime support for <code>@synchronized</code> has been added.</li>
+
+ <li>Runtime support for Objective-C 2.0 synthesized property
+ accessors has been added.</li>
+
+ <li>Runtime support for Objective-C 2.0 fast enumeration has been
+ added.</li>
+ </ul>
+
+<h2 id="targets">New Targets and Target Specific Improvements</h2>
+
+<h3 id="arm">ARM</h3>
+ <ul>
+ <li>GCC now supports the Cortex-M4 processor implementing
+ the v7-em version of the architecture using the option
+ <code>-mcpu=cortex-m4</code>.</li>
+
+ <li>Scheduling descriptions for the Cortex-M4, the Neon and
+ the floating point units of the Cortex-A9 and a pipeline
+ description for the Cortex-A5 have been added.</li>
+
+ <li>Synchronization primitives such as <code>__sync_fetch_and_add
+ </code> and friends are now inlined for supported architectures
+ rather than calling into a kernel helper function.</li>
+
+ <li>SSA loop prefetching is enabled by default for the
+ Cortex-A9 at <code>-O3</code>.</li>
+
+ <li>Several improvements were committed to improve code
+ generation for the ARM architecture including a rewritten
+ implementation for load and store multiples.</li>
+
+ <li>Several enhancements were committed to improve SIMD code
+ generation for NEON by adding support for widening instructions,
+ misaligned loads and stores, vector conditionals and
+ support for 64 bit arithmetic.</li>
+
+ <li>Support was added for the Faraday cores fa526, fa606te,
+ fa626te, fmp626te, fmp626 and fa726te and can be used with the
+ respective names as parameters to the <code>-mcpu=</code>
+ option.</li>
+
+ <li>Basic support was added for Cortex-A15 and is available through
+ <code>-mcpu=cortex-a15</code>.</li>
+
+ <li>GCC for AAPCS configurations now more closely adheres to the AAPCS
+ specification by enabling <code>-fstrict-volatile-bitfields</code> by
+ default.</li>
+ </ul>
+
+<h3>IA-32/x86-64</h3>
+ <ul>
+ <li>
+ The new <code>-fsplit-stack</code> option permits programs to
+ use a discontiguous stack. This is useful for threaded
+ programs, in that it is no longer necessary to specify the
+ maximum stack size when creating a thread. This feature is
+ currently only implemented for 32-bit and 64-bit x86 GNU/Linux
+ targets.
+ </li>
+ <li>Support for emitting profiler counter calls before function
+ prologues. This is enabled via a new command-line option
+ <code>-mfentry</code>.</li>
+ <li>Optimization for the Intel Core 2 processors is now available through
+ the <code>-march=core2</code> and <code>-mtune=core2</code>
+ options.</li>
+ <li>Support for Intel Core i3/i5/i7 processors is now available through
+ the <code>-march=corei7</code> and <code>-mtune=corei7</code>
+ options.</li>
+ <li>Support for Intel Core i3/i5/i7 processors with AVX is now
+ available through the <code>-march=corei7-avx</code> and
+ <code>-mtune=corei7-avx</code> options.</li>
+ <li>Support for AMD Bobcat (family 14) processors is now available through
+ the <code>-march=btver1</code> and <code>-mtune=btver1</code>
+ options.</li>
+ <li>The default setting (when not optimizing for size) for 32-bit
+ GNU/Linux and Darwin x86 targets has been changed to
+ <code>-fomit-frame-pointer</code>. The default can be reverted
+ to <code>-fno-omit-frame-pointer</code> by configuring GCC with
+ the <code>--enable-frame-pointer</code> configure option.</li>
+ <li>Darwin, FreeBSD, Solaris 2, MinGW and Cygwin now all support
+ <code>__float128</code> on 32-bit and 64-bit x86 targets.</li>
+ <li>AVX floating-point arithmetic can now be enabled by default at
+ configure time with the new <code>--with-fpmath=avx</code> option.</li>
+ <li>The SSA loop prefetching pass is enabled when
+ using <code>-O3</code> when optimizing for CPUs where prefetching
+ is beneficial (AMD CPUs newer than K6).</li>
+ <li>Support for TBM (Trailing Bit Manipulation) built-in functions
+ and code generation is available via <code>-mtbm</code>.</li>
+ <li>Support for AMD's BMI (Bit Manipulation) built-in functions and
+ code generation is available via <code>-mbmi</code>.</li>
+ </ul>
+
+<h3 id="microblaze">MicroBlaze</h3>
+
+ <ul>
+ <li>Support has been added for the Xilinx MicroBlaze softcore processor
+ (microblaze-elf) embedded target. This configurable processor is
+ supported on several Xilinx Spartan and Virtex FPGAs.
+ </li>
+ </ul>
+
+<h3>MIPS</h3>
+ <ul>
+ <li>GCC now supports the Loongson 3A processor. Its canonical
+ <code>-march=</code> and <code>-mtune=</code> name is
+ <code>loongson3a</code>.
+ </li>
+ </ul>
+
+<h3 id="mn10300">MN10300 / AM33</h3>
+ <ul>
+ <li>The inline assembly register constraint <code>"A"</code> has
+ been renamed <code>"c"</code>. This constraint is used to
+ select a floating-point register that can be used as the
+ destination of a multiply-accumulate instruction.
+ </li>
+ <li>New inline assembly register constraints <code>"A"</code> and
+ <code>"D"</code> have been added. These constraint letters
+ resolve to all general registers when compiling for AM33, and
+ resolve to address registers only or data registers only when
+ compiling for MN10300.
+ </li>
+ <li>The <code>MDR</code> register is represented in the compiler.
+ One can access the register via the <code>"z"</code> constraint
+ in inline assembly. It can be marked as clobbered or used as
+ a local register variable via the <code>"mdr"</code> name.
+ The compiler uses the <code>RETF</code> instruction if the
+ function does not modify the <code>MDR</code> register, so it
+ is important that inline assembly properly annotate any usage
+ of the register.
+ </li>
+ </ul>
+
+<h3>PowerPC/PowerPC64</h3>
+ <ul>
+ <li>GCC now supports the Applied Micro Titan processor
+ with <code>-mcpu=titan</code>.</li>
+ <li>The <code>-mrecip</code> option has been added, which indicates
+ whether the reciprocal and reciprocal square root instructions
+ should be used.</li>
+ <li>The <code>-mveclibabi=mass</code> option can be used to enable
+ the compiler to autovectorize mathematical functions using the
+ Mathematical Acceleration Subsystem library.</li>
+ <li>The <code>-msingle-pic-base</code> option has been added, which
+ instructs the compiler to avoid loading the PIC base register in
+ function prologues. The PIC base register must be initialized by
+ the runtime system.</li>
+ <li>The <code>-mblock-move-inline-limit</code> option has been
+ added, which enables the user to control the maximum size of
+ inlined <code>memcpy</code> calls and similar.</li>
+ <li>PowerPC64 GNU/Linux support for applications requiring a large
+ TOC section has been improved. A new command-line option,
+ <code>-mcmodel=MODEL</code>, controls this feature; valid values
+ for <code>MODEL</code>
+ are <code>small</code>, <code>medium</code>,
+ or <code>large</code>.</li>
+ <li>The altivec builtin functions <code>vec_ld</code> and <code>vec_st</code>
+ have been modified to generate the Altivec memory instructions
+ <code>LVX</code> and <code>STVX</code>, even if the <code>-mvsx</code>
+ option is used. In the initial GCC 4.5 release, these builtin functions
+ were changed to generate VSX memory reference instructions instead of
+ Altivec memory instructions, but there are differences between the two
+ instructions. If the VSX instruction set is available, you can now use
+ the new builtin functions <code>vec_vsx_ld</code> and <code>vec_vsx_st</code>
+ which always generates the VSX memory instructions.</li>
+ <li>The GCC compiler on AIX now defaults to a process layout with a
+ larger data space allowing larger programs to be compiled.</li>
+ <li>The GCC long double type on AIX 6.1 and above has reverted to 64 bit
+ double precision, matching the AIX XL compiler default, because of
+ missing C99 symbols required by the GCC runtime.</li>
+ <li>The default processor scheduling model and tuning for PowerPC64
+ GNU/Linux and for AIX 6.1 and above now is POWER7.</li>
+ </ul>
+
+<h3>S/390, zSeries and System z9/z10, IBM zEnterprise z196</h3>
+ <ul>
+ <li>Support for the zEnterprise z196 processor has been added.
+ When using the <code>-march=z196</code> option, the compiler
+ will generate code making use of the following instruction
+ facilities:
+ <ul>
+ <li>Conditional load/store</li>
+ <li>Distinct-operands</li>
+ <li>Floating-point-extension</li>
+ <li>Interlocked-access</li>
+ <li>Population-count</li>
+ </ul>
+ The <code>-mtune=z196</code> option avoids the compare and
+ branch instructions as well as the load address instruction
+ with an index register as much as possible and performs
+ instruction scheduling appropriate for the new out-of-order
+ pipeline architecture.</li>
+ <li>When using the <code>-m31 -mzarch</code> options the generated
+ code still conforms to the 32-bit ABI but uses the general
+ purpose registers as 64-bit registers internally. This
+ requires a Linux kernel saving the whole 64-bit registers when
+ doing a context switch. Kernels providing that feature
+ indicate that by the 'highgprs' string
+ in <code>/proc/cpuinfo</code>.</li>
+ <li>The SSA loop prefetching pass is enabled when
+ using <code>-O3</code>.</li>
+ </ul>
+
+<h3>SPARC</h3>
+ <ul>
+ <li>GCC now supports the LEON series of SPARC V8 processors. The
+ code generated by the compiler can either be tuned to it by means
+ of the <code>--with-tune=leon</code> configure option and
+ <code>-mtune=leon</code> compilation option, or the compiler can
+ be built for the <code>sparc-leon-{elf,linux}</code> and
+ <code>sparc-leon3-{elf,linux}</code> targets directly.</li>
+ <li>GCC has stopped sign/zero-extending parameter registers in the
+ callee for functions taking parameters with sub-word size in 32-bit
+ mode, since this is redundant with the specification of the ABI.
+ GCC has never done so in 64-bit mode since this is also redundant.</li>
+ </ul>
+
+<h2 id="os">Operating Systems</h2>
+
+<h3 id="android">Android</h3>
+ <ul>
+ <li>GCC now supports the Bionic C library and provides a convenient
+ way of building native libraries and applications for the Android
+ platform.
+ Refer to the documentation of the <code>-mandroid</code> and
+ <code>-mbionic</code> options for details on building native code.
+ At the moment, Android support is enabled only for ARM.</li>
+ </ul>
+
+<h3 id="darwin">Darwin/Mac OS X</h3>
+ <ul>
+ <li>General
+ <ul>
+ <li>Initial support for <code>CFString</code> types has been
+ added.<br /> This allows GCC to build projects including the system
+ <em>Core Foundation</em> frameworks. The GCC Objective-C family
+ supports <code>CFString</code> "toll-free bridged" as per the Mac
+ OS X system tools. <code>CFString</code> is also recognized in the
+ context of <code>format</code> attributes and arguments (see the
+ documentation for <code>format</code> attributes for limitations).
+ At present, 8-bit character types are supported.</li>
+ <li>LTO-support.<br />Darwin has benefited from ongoing work on
+ LTO; support for this is now stable and enabled by default.</li>
+ <li>Object file size reduction.<br /> The Darwin zeroed memory
+ allocators have been re-written to make more use of
+ <code>.zerofill</code> sections. For non-debug code, this can
+ reduce object file size significantly.</li>
+ </ul></li>
+ <li>x86 Architecture
+ <ul>
+ <li>The <code>-mdynamic-no-pic</code> option has been
+ enabled.<br />Code supporting <code>-mdynamic-no-pic</code>
+ optimization has been added and is applicable to <code>-m32</code>
+ builds. The compiler bootstrap uses the option where
+ appropriate.</li>
+ <li>The default value for <code>-mtune=</code> has been
+ changed.<br />Since Darwin systems are primarily Xeon, Core-2 or
+ similar the default tuning has been changed to
+ <code>-mtune=core2</code>.</li>
+ </ul></li>
+ <li>PPC Architecture
+ <ul>
+ <li>Darwin64 ABI.<br />Several significant bugs have been fixed,
+ such that GCC now produces code compatible with the Darwin64
+ PowerPC ABI.</li>
+ <li>libffi and boehm-gc.<br />The Darwin ports of the libffi and
+ boehm-gc libraries have been upgraded to include a Darwin64
+ implementation. This means that powerpc*-*-darwin9 platforms may
+ now, for example, build Java applications with <code>-m64</code>
+ enabled.</li>
+ <li>Plug-in support has been enabled.</li>
+ <li>The <code>-fsection-anchors</code> option is now available
+ although, presently, not heavily tested.</li>
+ </ul></li>
+ </ul>
+
+<h3 id="solaris">Solaris 2</h3>
+ <h4>New Features</h4>
+ <ul>
+ <li>Support symbol versioning with the Sun linker.</li>
+ <li>Allow libstdc++ to leverage full ISO C99 support on
+ Solaris 10+.</li>
+ <li>Support thread-local storage (TLS) with the Sun assembler on
+ Solaris 2/x86.</li>
+ <li>Support TLS on Solaris 8/9 if prerequisites are met.</li>
+ <li>Support COMDAT group with the GNU assembler and recent Sun
+ linker.</li>
+ <li>Support the Sun assembler visibility syntax.</li>
+ <li>Default Solaris 2/x86 to <code>-march=pentium4</code> (Solaris
+ 10+) resp. <code>-march=pentiumpro</code> (Solaris 8/9).</li>
+ <li>Don't use SSE on Solaris 8/9 x86 by default.</li>
+ <li>Enable 128-bit long double (<code>__float128</code>) support on
+ Solaris 2/x86.</li>
+ </ul>
+ <h4>ABI Change</h4>
+ <ul>
+ <li>Change the ABI for returning 8-byte vectors like
+ <code>__m64</code> in MMX registers on Solaris 10+/x86 to match the
+ Sun Studio 12.1+ compilers. <em>This is an incompatible change.
+ If you use such types, you must either recompile all your code with
+ the new compiler or use the new <code>-mvect8-ret-in-mem</code>
+ option to remain compatible with previous versions of GCC and
+ Sun Studio.</em></li>
+ </ul>
+
+<h3 id="windows">Windows x86/x86_64</h3>
+ <ul>
+ <li>Initial support for decimal floating point.</li>
+ <li>Support for the <code>__thiscall</code> calling-convention.</li>
+ <li>Support for hot-patchable function prologues via the
+ <code>ms_hook_prologue</code> attribute for x86_64 in addition to 32-bit x86.</li>
+ <li>Improvements of stack-probing and stack-allocation mechanisms.</li>
+ <li>Support of push/pop-macro pragma as preprocessor command.<br />
+ With <code>#pragma push_macro(&quot;macro-name&quot;)</code> the
+ current definition of <code>macro-name</code> is saved and can be
+ restored with <code>#pragma pop_macro(&quot;macro-name&quot;)</code>
+ to its saved definition.</li>
+ <li>Enable 128-bit long double (<code>__float128</code>) support on
+ MinGW and Cygwin.</li>
+ </ul>
+
+<h2>Documentation improvements</h2>
+
+<h2>Other significant improvements</h2>
+
+<h3>Installation changes</h3>
+
+ <ul>
+ <li>
+ An <code>install-strip</code> <code>make</code> target is provided
+ that installs stripped executables, and may install libraries with
+ unneeded or debugging sections stripped.
+ </li>
+
+ <li>
+ On Power7 systems, there is a potential problem if you build the GCC
+ compiler with a host compiler using options that enables the VSX
+ instruction set generation. If the host compiler has been patched so that
+ the <code>vec_ld</code> and <code>vec_st</code> builtin functions
+ generate Altivec memory instructions instead of VSX memory instructions,
+ then you should be able to build the compiler with VSX instruction
+ generation.
+ </li>
+ </ul>
+
+<h2>Changes for GCC Developers</h2>
+
+<p>Note: these changes concern developers that develop GCC itself or
+ software that integrates with GCC, such as plugins, and not the
+ general GCC users.</p>
+
+<ul>
+ <li>
+ The <code>gengtype</code> utility, which previously was internal to
+ the GCC build process, has been enchanced to provide GC root
+ information for plugins as necessary.
+ </li>
+ <li>
+ The old GC allocation interface of <code>ggc_alloc</code> and
+ friends was replaced with a type-safe alternative.
+ </li>
+</ul>
+
+
+
+
+<!-- ==================================================================== -->
+
+<div class="copyright">
+
+<p>Please send FSF &amp; GNU inquiries &amp; questions to
+<a href="mailto:gnu@gnu.org">gnu@gnu.org</a>.
+There are also <a href="http://www.gnu.org/home.html#ContactInfo">other ways
+to contact</a> the FSF.</p>
+
+<p>These pages are <a href="http://gcc.gnu.org/about.html">maintained by
+the GCC team</a>.</p>
+
+<address>For questions related to the use of GCC, please consult these web
+pages and the <a href="http://gcc.gnu.org/onlinedocs/">GCC manuals</a>. If
+that fails, the <a href="mailto:gcc-help@gcc.gnu.org">gcc-help@gcc.gnu.org</a>
+mailing list might help.<br />
+Please send comments on these web pages and the development of GCC to our
+developer list at <a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a>.
+All of our lists have
+<a href="http://gcc.gnu.org/lists.html">public archives</a>.
+</address>
+
+<p>Copyright (C) Free Software Foundation, Inc.<br />
+Verbatim copying and distribution of this entire article is
+permitted in any medium, provided this notice is preserved.</p>
+
+<table width="100%" border="0"><tr><td>
+ <!-- IGNORE DIFF -->Last modified 2011-03-22
+</td><td align="right" valign="bottom">
+ <a href="http://validator.w3.org/check/referer">
+ <img src="http://www.w3.org/Icons/valid-xhtml10"
+ alt="Valid XHTML 1.0" border="0" width="88" height="31" />
+
+ </a>
+</td></tr></table>
+
+</div>
+
+<!-- ==================================================================== -->
+
+</body>
+ </html>
+
+
diff --git a/debian/README.Bugs.m4 b/debian/README.Bugs.m4
new file mode 100644
index 0000000..a2d1606
--- /dev/null
+++ b/debian/README.Bugs.m4
@@ -0,0 +1,333 @@
+Reporting Bugs in the GNU Compiler Collection for DIST
+========================================================
+
+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. You
+ usually can get a recent development snapshot from the gcc-snapshot
+ifelse(DIST,`Debian',`dnl
+ package in the unstable (or experimental) distribution.
+
+ See: http://packages.debian.org/gcc-snapshot
+', DIST, `Ubuntu',`dnl
+ package in the current development distribution.
+
+ See: http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-snapshot/
+')dnl
+
+- 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.
+
+ifelse(DIST,`Debian',`dnl
+ Debian: http://bugs.debian.org/debian-gcc@lists.debian.org
+', DIST, `Ubuntu',`dnl
+ Ubuntu: https://bugs.launchpad.net/~ubuntu-toolchain/+packagebugs
+ Debian: http://bugs.debian.org/debian-gcc@lists.debian.org
+')dnl
+ Upstream: http://gcc.gnu.org/bugzilla/
+
+
+Where to report a bug
+---------------------
+
+ifelse(DIST,`Debian',`dnl
+Please 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).
+', DIST, `Ubuntu',`dnl
+Please report bugs found in the packaging of GCC to Launchpad. See below
+how issues should be reported.
+')dnl
+
+DIST'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).
+
+ifelse(DIST,`Debian',`dnl
+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).
+', DIST, `Ubuntu',`dnl
+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 Ubuntu
+GCC package maintainers, if you report the bug upstream and then submit
+a bug report to Launchpad 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 Launchpad (but read "How to report a bug" below).
+
+Report the issue to https://bugs.launchpad.net/ubuntu/+source/SRCNAME.
+')dnl
+
+
+How to report a bug
+-------------------
+
+There are complete instructions in the gcc info manual (found in the
+gcc-doc package), section Bugs.
+
+The manual can be read using `M-x info' in Emacs, or if the GNU info
+program is installed on your system by `info --node "(gcc)Bugs"'. Or see
+the file BUGS included with the gcc source code.
+
+Online bug reporting instructions can be found at
+
+ http://gcc.gnu.org/bugs.html
+
+[Some paragraphs taken from the above URL]
+
+The main purpose of a bug report is to enable us to fix the bug. The
+most important prerequisite for this is that the report must be
+complete and self-contained, which we explain in detail below.
+
+Before you report a bug, please check the list of well-known bugs and,
+if possible in any way, try a current development snapshot.
+
+Summarized bug reporting instructions
+-------------------------------------
+
+What we need
+
+Please include in your bug report all of the following items, the
+first three of which can be obtained from the output of gcc -v:
+
+ * the exact version of GCC;
+ * the system type;
+ * the options given when GCC was configured/built;
+ * the complete command line that triggers the bug;
+ * the compiler output (error messages, warnings, etc.); and
+ * the preprocessed file (*.i*) that triggers the bug, generated by
+ adding -save-temps to the complete compilation command, or, in
+ the case of a bug report for the GNAT front end, a complete set
+ of source files (see below).
+
+What we do not want
+
+ * A source file that #includes header files that are left out
+ of the bug report (see above)
+ * That source file and a collection of header files.
+ * An attached archive (tar, zip, shar, whatever) containing all
+ (or some :-) of the above.
+ * A code snippet that won't cause the compiler to produce the
+ exact output mentioned in the bug report (e.g., a snippet with
+ just a few lines around the one that apparently triggers the
+ bug, with some pieces replaced with ellipses or comments for
+ extra obfuscation :-)
+ * The location (URL) of the package that failed to build (we won't
+ download it, anyway, since you've already given us what we need
+ to duplicate the bug, haven't you? :-)
+ * An error that occurs only some of the times a certain file is
+ compiled, such that retrying a sufficient number of times
+ results in a successful compilation; this is a symptom of a
+ hardware problem, not of a compiler bug (sorry)
+ * E-mail messages that complement previous, incomplete bug
+ reports. Post a new, self-contained, full bug report instead, if
+ possible as a follow-up to the original bug report
+ * Assembly files (*.s) produced by the compiler, or any binary files,
+ such as object files, executables, core files, or precompiled
+ header files
+ * Duplicate bug reports, or reports of bugs already fixed in the
+ development tree, especially those that have already been
+ reported as fixed last week :-)
+ * Bugs in the assembler, the linker or the C library. These are
+ separate projects, with separate mailing lists and different bug
+ reporting procedures
+ * Bugs in releases or snapshots of GCC not issued by the GNU
+ Project. Report them to whoever provided you with the release
+ * Questions about the correctness or the expected behavior of
+ certain constructs that are not GCC extensions. Ask them in
+ forums dedicated to the discussion of the programming language
+
+
+Known Bugs and Non-Bugs
+-----------------------
+
+[Please see /usr/share/doc/gcc/FAQ or http://gcc.gnu.org/faq.html first]
+
+
+C++ exceptions don't work with C libraries
+------------------------------------------
+
+[Taken from the closed bug report #22769] C++ exceptions don't work
+with C libraries, if the C code wasn't designed to be thrown through.
+A solution could be to translate all C libraries with -fexceptions.
+Mostly trying to throw an exception in a callback function (qsort,
+Tcl command callbacks, etc ...). Example:
+
+ #include <stdio.h>
+ #include <tcl.h>
+
+ class A {};
+
+ static
+ int SortCondition(void const*, void const*)
+ {
+ printf("throwing 'sortcondition' exception\n");
+ throw A();
+ }
+
+ int main(int argc, char *argv[])
+ {
+ int list[2];
+
+ try {
+ SortCondition(NULL,NULL);
+ } catch (A) {
+ printf("caught test-sortcondition exception\n");
+ }
+ try {
+ qsort(&list, sizeof(list)/sizeof(list[0]),sizeof(list[0]),
+ &SortCondition);
+ } catch (A) {
+ printf("caught real-sortcondition exception\n");
+ }
+ return 0;
+}
+
+Andrew Macleod <amacleod@cygnus.com> responded:
+
+When compiled with the table driven exception handling, exception can only
+be thrown through functions which have been compiled with the table driven EH.
+If a function isn't compiled that way, then we do not have the frame
+unwinding information required to restore the registers when unwinding.
+
+I believe the setjmp/longjmp mechanism will throw through things like this,
+but its produces much messier code. (-fsjlj-exceptions)
+
+The C compiler does support exceptions, you just have to turn them on
+with -fexceptions.
+
+Your main options are to:
+ a) Don't use callbacks, or at least don't throw through them.
+ b) Get the source and compile the library with -fexceptions (You have to
+ explicitly turn on exceptions in the C compiler)
+ c) always use -fsjlj-exceptions (boo, bad choice :-)
+
+
+g++: "undefined reference" to static const array in class
+---------------------------------------------------------
+
+The following code compiles under GNU C++ 2.7.2 with correct results,
+but produces the same linker error with GNU C++ 2.95.2.
+Alexandre Oliva <oliva@lsd.ic.unicamp.br> responded:
+
+All of them are correct. A static data member *must* be defined
+outside the class body even if it is initialized within the class
+body, but no diagnostic is required if the definition is missing. It
+turns out that some releases do emit references to the missing symbol,
+while others optimize it away.
+
+#include <iostream>
+
+class Test
+{
+ public:
+ Test(const char *q);
+ protected:
+ static const unsigned char Jam_signature[4] = "JAM";
+};
+
+Test::Test(const char *q)
+{
+ if (memcmp(q, Jam_signature, sizeof(Jam_signature)) != 0)
+ cerr << "Hello world!\n";
+}
+
+int main(void)
+{
+ Test::Test("JAM");
+ return 0;
+}
+
+g++: g++ causes passing non const ptr to ptr to a func with const arg
+ to cause an error (not a bug)
+---------------------------------------------------------------------
+
+Example:
+
+#include <stdio.h>
+void test(const char **b){
+ printf ("%s\n",*b);
+}
+int main(void){
+ char *test1="aoeu";
+ test(&test1);
+}
+
+make const
+g++ const.cc -o const
+const.cc: In function `int main()':
+const.cc:7: passing `char **' as argument 1 of `test(const char **)' adds cv-quals without intervening `const'
+make: *** [const] Error 1
+
+Answer from "Martin v. Loewis" <martin@loewis.home.cs.tu-berlin.de>:
+
+> ok... maybe I missed something.. I haven't really kept up with the latest in
+> C++ news. But I've never heard anything even remotly close to passing a non
+> const var into a const arg being an error before.
+
+Thanks for your bug report. This is a not a bug in the compiler, but
+in your code. The standard, in 4.4/4, puts it that way
+
+# A conversion can add cv-qualifiers at levels other than the first in
+# multi-level pointers, subject to the following rules:
+# Two pointer types T1 and T2 are similar if there exists a type T and
+# integer n > 0 such that:
+# T1 is cv(1,0) pointer to cv(1,1) pointer to ... cv(1,n-1)
+# pointer to cv(1,n) T
+# and
+# T2 is cv(2,0) pointer to cv(2,1) pointer to ... cv(2,n-1)
+# pointer to cv(2,n) T
+# where each cv(i,j) is const, volatile, const volatile, or
+# nothing. The n-tuple of cv-qualifiers after the first in a pointer
+# type, e.g., cv(1,1) , cv(1,2) , ... , cv(1,n) in the pointer type
+# T1, is called the cv-qualification signature of the pointer type. An
+# expression of type T1 can be converted to type T2 if and only if the
+# following conditions are satisfied:
+# - the pointer types are similar.
+# - for every j > 0, if const is in cv(1,j) then const is in cv(2,j) ,
+# and similarly for volatile.
+# - if the cv(1,j) and cv(2,j) are different, then const is in every
+# cv(2,k) for 0 < k < j.
+
+It is the last rule that your code violates. The standard gives then
+the following example as a rationale:
+
+# [Note: if a program could assign a pointer of type T** to a pointer
+# of type const T** (that is, if line //1 below was allowed), a
+# program could inadvertently modify a const object (as it is done on
+# line //2). For example,
+# int main() {
+# const char c = 'c';
+# char* pc;
+# const char** pcc = &pc; //1: not allowed
+# *pcc = &c;
+# *pc = 'C'; //2: modifies a const object
+# }
+# - end note]
+
+If you question this line of reasoning, please discuss it in one of
+the public C++ fora first, eg. comp.lang.c++.moderated, or
+comp.std.c++.
+
+
+cpp removes blank lines
+-----------------------
+
+With the new cpp, you need to add -traditional to the "cpp -P" args, else
+blank lines get removed.
+
+[EDIT ME: scan Debian bug reports and write some nice summaries ...]
diff --git a/debian/README.C++ b/debian/README.C++
new file mode 100644
index 0000000..8cc40f8
--- /dev/null
+++ b/debian/README.C++
@@ -0,0 +1,35 @@
+libstdc++ is an implementation of the Standard C++ Library, including the
+Standard Template Library (i.e. as specified by ANSI and ISO).
+
+Some notes on porting applications from libstdc++-2.90 (or earlier versions)
+to libstdc++-v3 can be found in the libstdc++6-4.3-doc package. After the
+installation of the package, look at:
+
+ file:///usr/share/doc/gcc-4.3-base/libstdc++/html/17_intro/porting-howto.html
+
+On Debian GNU/Linux you find additional documentation in the
+libstdc++6-4.3-doc package. After installing these packages,
+point your browser to
+
+ file:///usr/share/doc/libstdc++6-4.3-doc/libstdc++/html/index.html
+
+Other documentation can be found:
+
+ http://www.sgi.com/tech/stl/
+
+with a good, recent, book on C++.
+
+A great deal of useful C++ documentation can be found in the C++ FAQ-Lite,
+maintained by Marshall Cline <cline@parashift.com>. It can be found at the
+mirror sites linked from the following URL (this was last updated on
+2010/09/11):
+
+ http://www.parashift.com/c++-faq/
+
+or use some search engin site to find it, e.g.:
+
+ http://www.google.com/search?q=c%2B%2B+faq+lite
+
+Be careful not to use outdated mirors.
+
+Please send updates to this list as bug report for the g++ package.
diff --git a/debian/README.Debian b/debian/README.Debian
new file mode 100644
index 0000000..c495332
--- /dev/null
+++ b/debian/README.Debian
@@ -0,0 +1,39 @@
+ The Debian GNU Compiler Collection setup
+ ========================================
+
+Please see the README.Debian in /usr/share/doc/gcc, contained in the
+gcc package for a description of the setup of the different compiler
+versions.
+
+For general discussion about the Debian toolchain (GCC, glibc, binutils)
+please use the mailing list debian-toolchain@lists.debian.org; for GCC
+specific things, please use debian-gcc@lists.debian.org. When in doubt
+use the debian-toolchain ML.
+
+
+Maintainers of these packages
+-----------------------------
+
+Matthias Klose <doko@debian.org>
+Falk Hueffner <falk@debian.org> (alpha-linux)
+Ludovic Brenta <ludovic@ludovic-brenta.org> (gnat)
+Aurelien Jarno <aurel32@debian.org> (mips*-linux)
+
+Former and/or inactive maintainers of these packages
+----------------------------------------------------
+
+Ray Dassen <jdassen@debian.org>
+Jeff Bailey <jbailey@nisa.net> (hurd-i386)
+Joel Baker <fenton@debian.org> (netbsd-i386)
+Randolph Chung <tausq@debian.org> (ia64-linux)
+Philip Blundell <pb@debian.org> (arm-linux)
+Ben Collins <bcollins@debian.org> (sparc-linux)
+Dan Jacobowitz <dan@debian.org> (powerpc-linux)
+Thiemo Seufer <ths@networkno.de> (mips*-linux)
+Matt Taggart <taggart@carmen.fc.hp.com> (hppa-linux)
+Gerhard Tonn <GerhardTonn@swol.de> (s390-linux)
+Roman Zippel <zippel@linux-m68k.org> (m68k-linux)
+Arthur Loiret <arthur.loiret@gmail.com> (gdc)
+
+===============================================================================
+
diff --git a/debian/README.cross b/debian/README.cross
new file mode 100644
index 0000000..a91829e
--- /dev/null
+++ b/debian/README.cross
@@ -0,0 +1,144 @@
+Building cross-compiler Debian packages
+---------------------------------------
+
+It is possible to build C and C++ cross compilers and support libraries
+from gcc-4.0 source package. This document describes how to do so.
+Cross-compiler build support is not perfect yet, please send fixes
+and improvements to debian-gcc@lists.debian.org and
+debian-embedded@lists.debian.org
+
+Before you start, you should probably check available pre-built
+cross-toolchain debs. Available at http://www.emdebian.org
+
+Old patches could be reached at
+ http://zigzag.lvk.cs.msu.su/~nikita/debian/
+
+If they are no longer there, you may check EmDebian web site at
+ http://www.emdebian.org/
+or ask debian-embedded@lists.debian.org for newer location.
+
+Please check http://bugs.debian.org/391445 if you are about building
+gcc-4.3 or above.
+
+Most of them has been merged with gcc debian sources.
+
+0. What's wrong with toolchain-source approach
+
+Package toolchain-source contains sources for binutils and gcc, as well as
+some support scripts to build cross-compiler packages. They seem to work.
+
+However, there is one fundamental problem with this approach.
+Gcc package is actively maintained and frequently updated. These updates
+do contain bug fixes and improvements, especially for non-x86 architectures.
+Cross-compilers built using toolchain-source will not get those fixes unless
+toolchain-source package is updated after each binutils and gcc update.
+The later is not hapenning in real life. For example, toolchain-source
+was upgraded from gcc-3.2 to gcc-3.3 half a year later than gcc-3.3 became
+Debian default compiler.
+
+Keeping toolchain-source package up-to-date requires lots of work, and seems
+to be a waste of time. It is much better to build cross-compilers directly
+from gcc source package.
+
+
+1. What is needed to build a cross-compiler from gcc-4.3 source
+
+1.1. dpkg-cross package
+
+Dpkg-cross package contains several tools to manage cross-compile environment.
+
+It can convert native debian library and lib-dev packages for the target
+architecture to binary-all packages that keep libraries and headers under
+/usr/$(TARGET)/.
+
+Also it contains helper tools for cross-compiling debian packages. Some of
+these tools are used while building libgcc1 and libstdc++ library packages.
+The resulting library packages follow the same convensions as library packages
+converted by dpkg-cross.
+
+Currently, at least version 1.18 of dpkg-cross is needed for cross-gcc
+package build. Version 1.32 of dpkg-cross is needed in order to build gcc-4.3.
+
+1.2. cross-binutils for the target
+
+You need cross-binutils for your target to build cross-compiler.
+Binutils-multiarch package will not work because it does not provide cross-
+assemblers.
+
+If you don't want to use pre-built cross-binutils packages, you may build
+your own from binutils debian source package, using patches posted to
+bug #231707. Please use the latest of patch versions available there.
+
+Alternatively, you may use toolchain-source package to build cross-binutils
+(but in this case you will probably also want to use toolchain-source
+to build cross-compiler itself). However, multilib'ed cross-compilers may
+not build or work with these binutils.
+
+1.3. libc for target
+
+You also need libc library and development packages for the target
+architecture installed.
+
+To get those, download linux-kernel-headers, libc6, and libc6-dev binary
+debs for your target, convert those using dpkg-cross -b, and install
+resulting -arch-cross debs. Consult dpkg-cross manual page for more
+information.
+
+Building with/for alternative libc's is not supported yet (but this is in
+TODO).
+
+Note that if you plan to use your cross-toolchain to develop kernel drivers
+or similar low-level things, you will probably also need kernel headers
+for the exact kernel version that your target hardware uses.
+
+
+2. Building cross-compiler packages
+
+Get gcc-4.3 source package.
+
+Unpack it using dpkg-source -x, and cd to the package directory.
+
+Set GCC_TARGET environment variable to the target architectire name. Note
+that currently you should use debian architecture name (i.e 'powerpc' or 'arm'),
+not GNU system type (i.e. 'powerpc-linux' or 'arm-linux'). Setting GCC_TARGET
+to GNU system type will cause cross-compiler build to fail.
+
+Instead of setting GCC_TARGET, target architecture name may be put into
+debian/target file. If both GCC_TARGET is defined and debian/target file
+exists, GCC_TARGET is used.
+
+Run debian/rules control. This will change debian/control file,
+adjusting build-depends. By default, the packages will not depend on the
+system -base package. A variable DEB_CROSS_INDEPENDENT has been merged with DEB_CROSS variable.
+
+You can then build with either
+
+$ GCC_TARGET=[arch] dpkg-buildpackage -rfakeroot
+
+3. Using crosshurd
+
+Jeff Bailey <jbailey@raspberryginger.com> suggests alternate way to setup
+environment to build cross-compiler, using 'crosshurd' package.
+Crosshurd is like debootstrap but cross-arch, and works on the Hurd,
+Linux and FreeBSD. (The name is historical).
+
+If you setup your environment with crosshurd, you will need to fix symlinks
+in lib and usr/lib to be relative instead of absolute. For example:
+
+lrwxrwxrwx 1 root root 20 2004-05-06 23:02 libcom_err.so -> /lib/libcom_err.so.2
+
+Needs to be changed to:
+
+lrwxrwxrwx 1 root root 20 2004-05-06 23:02 libcom_err.so -> ../../lib/libcom_err.so.2
+
+Also, if you choose this method, set the environment variable 'with_sysroot'
+to point to the ABSOLUTE PATH where the crosshurd was done.
+
+Note however that build-depends of cross-gcc and dependencies in generated
+libgcc1 and libstdc++ packages assume that you use dpkg-cross to set up
+your environment, and may be wrong or incomplete if you use alternate methods.
+But probably you don't care.
+
+--
+Nikita V. Youshchenko <yoush@debian.org> - Jun 2004
+Hector Oron Martinez <hector.oron@gmail.com> - Oct 2006
diff --git a/debian/README.gnat b/debian/README.gnat
new file mode 100644
index 0000000..4960706
--- /dev/null
+++ b/debian/README.gnat
@@ -0,0 +1,22 @@
+If you want to develop Ada programs and libraries on Debian, please
+read the Debian Policy for Ada:
+
+http://www.ada-france.org/debian/debian-ada-policy.html
+
+The default Ada compiler is and always will be the package `gnat'.
+Debian contains many programs and libraries compiled with it, which
+are all ABI-compatible.
+
+Starting with gnat-4.2, Debian provides both zero-cost and
+setjump/longjump versions of the run-time library. The zero-cost
+exception handling mechanism is the default as it provides the best
+performance. The setjump/longjump exception handling mechanism is new
+and only provided as a static library. It is necessary to use this
+exception handling mechanism in distributed (annex E) programs. If
+you wish to use the new sjlj library:
+
+1) call gnatmake with --RTS=sjlj
+2) call gnatbind with -static
+
+Do NOT link your programs with libgnat-4.2.so, because it uses the ZCX
+mechanism.
diff --git a/debian/README.libstdc++-baseline.in b/debian/README.libstdc++-baseline.in
new file mode 100644
index 0000000..e771c16
--- /dev/null
+++ b/debian/README.libstdc++-baseline.in
@@ -0,0 +1,2 @@
+The libstdc++ baseline file is a list of symbols exported by the
+libstdc++ library.
diff --git a/debian/README.maintainers b/debian/README.maintainers
new file mode 100644
index 0000000..129607e
--- /dev/null
+++ b/debian/README.maintainers
@@ -0,0 +1,237 @@
+-*- Outline -*-
+
+Read this file if you are a Debian Developer or would like to become
+one, or if you would like to create your own binary packages of GCC.
+
+* Overview
+
+From the GCC sources, Debian currently builds 3 source packages and
+almost 100 binary packages, using a single set of build scripts. The
+3 source packages are:
+
+gcc-4.3: C, C++, Fortran, Objective-C and Objective-C++, plus many
+ common libraries like libssp, libmudflap, and libgcc.
+gcj-4.3: Java.
+gnat-4.3: Ada.
+
+The way we do this is quite peculiar, so listen up :)
+
+When we build from the gcc-4.3 source package, we produce, among many
+others, a gcc-4.3-source binary package that contains the pristine
+upstream tarball and some Debian-specific patches. Any user can then
+install this package on their Debian system, and will have the full
+souces in /usr/src/gcc-4.3/gcc-<timestamp>.tar.bz2, along with the
+Makefile snippets that unpack and patch them.
+
+The intended use for this package is twofold: (a) allow users to build
+their own cross-compilers, and (b) build the other two packages,
+gcj-4.3 and gnat-4.3.
+
+For gcj-4.3 and gnat-4.3, the "source tarball" just contains an empty
+directory; e.g.:
+
+$ tar tzf gnat-4.3_4.3-20070609.orig.tar.gz
+gnat-4.3-4.3-20070609.orig/
+
+The build scripts for all source packages are the same, and they are
+included, as usual, in the .diff.gz file.
+
+* The build sequence
+
+As for all other Debian packages, you build GCC by calling
+debian/rules.
+
+The first thing debian/rules does it to look at the top-most entry in
+debian/changelog: this tells it which source package it is building.
+For example, if the first entry in debian/changelog reads:
+
+gcj-4.3 (4.3-20070609-1) unstable; urgency=low
+
+ * Upload as gcj-4.3.
+
+ -- Ludovic Brenta <lbrenta@debian.org> Tue, 26 Jun 2007 00:26:42 +0200
+
+then, debian/rules will build only the Java binary packages.
+
+The second step is to unpack the GCC source tarball. This tarball is
+either in the build directory (when building gcc-4.3), or in
+/usr/src/gcc-4.3/gcc-<timestamp>.tar.bz2 (when building the other
+source packages).
+
+The third step is to build debian/control from debian/control.m4 and a
+complex set of rules specified in debian/rules.conf. The resulting
+control file contains only the binary packages to be built.
+
+The fourth step is to select which patches to apply (this is done in
+debian/rules.defs), and then to apply the selected patches (see
+debian/rules.patch).
+
+The fifth step is to create a "build" directory, cd into it, call
+../src/configure, and bootstrap the compiler and libraries selected.
+This is in debian/rules2.
+
+The sixth step is to call "make install" in the build directory: this
+installs the compiler and libraries into debian/tmp
+(i.e. debian/tmp/usr/bin/gcc, etc.)
+
+The seventh step is to run the GCC test suite (this actually takes at
+least as much time as bootstrapping, and you can disable it by setting
+WITHOUT_CHECK to "yes" in the environment).
+
+The eighth step is to build the binary packages, i.e. the .debs. This
+is done by a set of language- and architecture-dependent Makefile
+snippets in the debian/rules.d/ directory, which move files from the
+debian/tmp tree to the debian/<package> trees.
+
+* Making your own packages
+
+In this example, we will build our own gnat-4.3 package.
+
+1) Create a .orig.tar.gz tarball containing a single, empty directory.
+
+$ mkdir gnat-4.3-4.3-20070609.orig
+$ tar czf gnat-4.3_4.3-20070609.orig.tar.gz gnat-4.3-4.3-20070609.orig
+
+2) Install gcc-4.3-source, which contains the real sources:
+
+# apt-get install gcc-4.3-source
+
+3) Create a build directory:
+
+$ mkdir gnat-4.3-4.3-20070609; cd gnat-4.3-4.3-20070609
+
+4) Checkout from Subversion:
+
+$ svn checkout svn://svn.debian.org/gcccvs/branches/sid/gcc-4.3/debian
+
+5) Edit the debian/changelog file, adding a new entry at the top that
+ starts with "gnat-4.3" instead of "gcc-4.3".
+
+6) Generate the debian/control file, adjusted for gnat:
+
+$ debian/rules control
+
+7) Build:
+
+$ dpkg-buildpackage -rfakeroot
+
+* Hints
+
+You need a powerful machine to build GCC. The larger, the better.
+The build scripts take advantage of as many CPU threads as are
+available in your box (for example: 2 threads on a dual-core amd64; 4
+threads on a dual-core POWER5; 32 threads on an 8-core UltraSPARC T1,
+etc.).
+
+If you have 2 GB or more of physical RAM, you can achieve maximum
+performance by building in a tmpfs, like this:
+
+1) as root, create the new tmpfs:
+
+# mount -t tmpfs -o size=1280m none /home/lbrenta/src/debian/ram
+
+By default, the tmpfs will be limited to half your physical RAM. The
+beauty of it is that it only consumes as much physical RAM as
+necessary to hold the files in it; deleting files frees up RAM.
+
+2) As your regular user, create the working directory in the tmpfs
+
+$ cp --archive ~/src/debian/gcc-4.3-4.3-20070901 ~/src/debian/ram
+
+3) Build in there. On my dual-core, 2 GHz amd64, it takes 34 minutes
+ to build gnat, and the tmpfs takes 992 MiB of physical RAM but
+ exceeds 1 GiB during the build.
+
+Note that the build process uses a lot of temporary files. Your $TEMP
+directory should therefore also be in a ram disk. You can achieve
+that either by mounting it as tmpfs, or by setting TEMP to point to
+~/src/debian/ram.
+
+Also note that each thread in your processor(s) will run a compiler in
+it and use up RAM. Therefore your physical memory should be:
+
+Physical_RAM >= 1.2 + 0.4 * Threads (in GiB)
+
+(this is an estimate; your mileage may vary). If you have less
+physical RAM than recommended, reduce the number of threads allocated
+to the build process, or do not use a tmpfs to build.
+
+* Patching GCC
+
+Debian applies a large number of patches to GCC as part of the build
+process. The patches are shell scripts located in debian/patches.
+The file debian/rules.defs selects the language front-ends and
+libraries to build. Then, based on that, debian/rules.patch selects
+which patches to apply and in which order, then applies them and
+produces a file listing the applied patches in order in
+stamps/02-patch-stamp.
+
+There is currently no tool to help modify patches; you have to do it
+by hand. Here is one possible way to do it:
+
+1) Apply all patches up to and EXCLUDING the patch you intend to
+ modify, in order.
+
+2) Make a deep copy of the src directory, e.g.
+ $ cp --archive src src.bak
+
+3) Apply the patch you intend to modify.
+
+4) Open the .dpatch file in your editor and remove the entire patch
+ section; leave alone the shell script part at the top.
+
+5) Change the files you want in the src directory. After making
+ changes, you can experiment with
+ $ make -C build -jK
+ (where K is the number of processor threads you have)
+
+6) $ diff -rNu src.bak src >> debian/patches/<file>.dpatch
+
+7) Apply all remaining patches, to see if your change broke any of
+ them.
+
+8) $ svn commit debian/patches/<file>.dpatch
+
+If you want to add a new patch, the procedure is similar. You must
+first choose where in the list of patches you want to insert your new
+patch. Then, apply all patches up to that point and start editing.
+Do not forget to add a reference to your patch at the proper place in
+debian/rules.patch.
+
+** Patching GCC with Quilt
+
+The above method uses an entire copy of the source tree, which is
+currently 474 megabytes in size. If you are in a one-gigabyte ram
+disk (see Hints above), this may be a problem. One solution to this
+problem is to use quilt, which will only keep copies of the files
+touched by patches, not all files. It also automates the updating of
+a patch after you change the sources.
+
+Quilt however does not take into account the selection of patches made
+in debian/rules.defs; instead it has a static list of patches. After
+calling "debian/rules patch", you can generate such a list like this:
+
+$ egrep '^[^ ]+:' stamps/02-patch-stamp | \
+ sed 's!:!.dpatch -p0!' > debian/patches/series
+
+Unfortunately, not all patches are applied with -p0; you must then
+edit debian/patches/series by hand to replace -p0 with -p1 for a few
+patches.
+
+Once you have your debian/patches/series:
+
+$ debian/rules unpatch
+$ export QUILT_PATCHES=$PWD/debian/patches
+$ cd src
+$ quilt push -a (or quilt push <patch_name>)
+edit files at will; quilt add <file_name> to add a new file to the patch
+$ make -C ../build
+$ quilt refresh
+$ quilt push -a # check that no patch is broken
+$ quilt pop -a
+$ cd ..
+$ debian/rules clean build
+$ svn commit
+
+--
+Ludovic Brenta, 2007-12-05.
diff --git a/debian/README.snapshot b/debian/README.snapshot
new file mode 100644
index 0000000..978bf80
--- /dev/null
+++ b/debian/README.snapshot
@@ -0,0 +1,36 @@
+Debian gcc-snapshot package
+===========================
+
+This package contains a recent development SNAPSHOT of all files
+contained in the GNU Compiler Collection (GCC).
+
+DO NOT USE THIS SNAPSHOT FOR BUILDING DEBIAN PACKAGES!
+
+This package will NEVER hit the testing distribution. It's used for
+tracking gcc bugs submitted to the Debian BTS in recent development
+versions of gcc.
+
+To use this snapshot, you should set the following environment variables:
+
+ LD_LIBRARY_PATH=/usr/lib/gcc-snapshot/lib:$LD_LIBRARY_PATH
+ PATH=/usr/lib/gcc-snapshot/bin:$PATH
+
+You might also like to use a shell script to wrap up this
+funcationality, e.g.
+
+place in /usr/local/bin/gcc-snapshot and chmod +x it
+
+----------- snip ----------
+#! /bin/sh
+LD_LIBRARY_PATH=/usr/lib/gcc-snapshot/lib:$LD_LIBRARY_PATH
+PATH=/usr/lib/gcc-snapshot/bin:$PATH
+gcc "$@"
+----------- snip ----------
+
+Make the same for g++, g77, gij, gcj, cpp, ...
+
+Don't forget the quotes around the $@ or gcc will not parse it's
+command line correctly!
+
+Unset these variables before building Debian packages destined for an
+upload to ftp-master.debian.org.
diff --git a/debian/README.source b/debian/README.source
new file mode 100644
index 0000000..b97b673
--- /dev/null
+++ b/debian/README.source
@@ -0,0 +1,14 @@
+Patches applied to the Debian version of GCC
+--------------------------------------------
+
+Debian specific patches can be found in the debian/patches directory.
+Quilt is used as the patch system. See /usr/share/doc/quilt/README.source
+for details about quilt.
+
+Patches are applied by calling `debian/rules patch'. The `series'
+file is constructed on the fly, configure scripts are regenerated
+in the `patch' target.
+
+The source packages gcj-x.y and gnat-x.y do not contain copies of the
+source code but build-depend on the appropriate gcc-x.y-source package
+instead.
diff --git a/debian/README.ssp b/debian/README.ssp
new file mode 100644
index 0000000..9facca7
--- /dev/null
+++ b/debian/README.ssp
@@ -0,0 +1,28 @@
+Stack smashing protection is a feature of GCC that enables a program to
+detect buffer overflows and immediately terminate execution, rather than
+continuing execution with corrupt internal data structures. It uses
+"canaries" and local variable reordering to reduce the likelihood of
+stack corruption through buffer overflows.
+
+Options that affect stack smashing protection:
+
+-fstack-protector
+ Enables protection for functions that are vulnerable to stack
+ smashing, such as those that call alloca() or use pointers.
+
+-fstack-protector-all
+ Enables protection for all functions.
+
+-Wstack-protector
+ Warns about functions that will not be protected. Only active when
+ -fstack-protector has been used.
+
+Applications built with stack smashing protection should link with the
+ssp library by using the option "-lssp" for systems with glibc-2.3.x or
+older; glibc-2.4 and newer versions provide this functionality in libc.
+
+The Debian architectures alpha, hppa, ia64, m68k, mips, mipsel do not
+have support for stack smashing protection.
+
+More documentation can be found at the project's website:
+http://researchweb.watson.ibm.com/trl/projects/security/ssp/
diff --git a/debian/TODO b/debian/TODO
new file mode 100644
index 0000000..a765c08
--- /dev/null
+++ b/debian/TODO
@@ -0,0 +1,50 @@
+(It is recommended to edit this file with emacs' todoo mode)
+Last updated: 2008-05-02
+
+* General
+
+- 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.
+
+- Make debian/rules control build the control file without unpacking
+ the sources or applying patches. Currently, it unpacks the sources,
+ patches them, creates the control file, and a subsequent
+ dpkg-buildpackage deletes the sources, re-unpacks them, and
+ re-patches them.
+
+- Reorganise debian/rules.defs to decide which packages to build in a
+ more straightforward and less error-prone fashion: (1) start with
+ all languages; override the list of languages depending on the name
+ of the source package (gcc-4.3, gnat-4.3, gdc-4.3, gcj-4.3). (2)
+ filter the list of languages depending on the target platform; (3)
+ depending on the languages to build, decide on which libraries to
+ build.
+
+o [Ludovic Brenta] Ada
+
+- Done: Link the gnat tools with libgnat.so, instead of statically.
+
+- Done: Build libgnatvsn containing parts of the compiler (version
+ string, etc.) under GNAT-Modified GPL. Link the gnat tools with it.
+
+- Done: Build libgnatprj containing parts of the compiler (the project
+ manager) under pure GPL. Link the gnat tools with it.
+
+- Done: Build both the zero-cost and setjump/longjump exceptions
+ versions of libgnat. In particular, gnat-glade (distributed systems)
+ works best with SJLJ.
+
+- Done: Re-enable running the test suite.
+
+- Add support for building cross-compilers.
+
+- Add support for multilib (not yet supported upstream).
+
+* Fortran
+
+- gfortran man page generation
+
+* Java
+
+- build java-gcj-compat from the gcc source?
diff --git a/debian/acats-killer.sh b/debian/acats-killer.sh
new file mode 100644
index 0000000..29a2550
--- /dev/null
+++ b/debian/acats-killer.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+
+# on ia64 systems, the acats hangs in unaligned memory accesses.
+# kill these testcases.
+
+pidfile=acats-killer.pid
+
+usage()
+{
+ echo >&2 "usage: `basename $0` [-p <pidfile>] <ada logfile> <next logfile>"
+ exit 1
+}
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ -p)
+ pidfile=$2
+ shift
+ shift
+ ;;
+ -*)
+ usage
+ ;;
+ *)
+ break
+ esac
+done
+
+[ $# -eq 2 ] || usage
+
+logfile=$1
+stopfile=$2
+interval=30
+
+echo $$ > $pidfile
+
+while true; do
+ if [ -f "$stopfile" ]; then
+ echo "`basename $0`: finished."
+ rm -f $pidfile
+ exit 0
+ fi
+ sleep $interval
+ if [ ! -f "$logfile" ]; then
+ continue
+ fi
+ pids=$(ps aux | awk '/testsuite\/ada\/acats\/tests/ { print $2 }')
+ if [ -n "$pids" ]; then
+ sleep $interval
+ pids2=$(ps aux | awk '/testsuite\/ada\/acats\/tests/ { print $2 }')
+ if [ "$pids" = "$pids2" ]; then
+ #echo kill: $pids
+ kill $pids
+ sleep 1
+ pids2=$(ps aux | awk '/testsuite\/ada\/acats\/tests/ { print $2 }')
+ if [ "$pids" = "$pids2" ]; then
+ #echo kill -9: $pids
+ kill -9 $pids
+ fi
+ fi
+ fi
+done
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..6601fbf
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,9967 @@
+gcc-4.6 (4.6.2-8) UNRELEASED; urgency=low
+
+ * Update to SVN 20111215 (r182348) from the gcc-4_6-branch.
+ - Fix PR tree-optimization/51485, PR tree-optimization/50569, PR c++/51248,
+ PR c++/51406, PR c++/51161, PR fortran/50923, PR fortran/51338.
+
+ [ Matthias Klose ]
+ * gdc-4.6: Provide <gnu-triplet>-{gdc,gdmd}-4.6 symlinks.
+
+ [Ludovic Brenta]
+ Merge from gnat-4.6 (4.6.2-2) unstable; urgency=low
+ [Євгеній МещерÑков]
+ * debian/patches/pr47818.diff: new. Fixes: #614402.
+ * debian/rules.patch: apply it.
+
+ Merge from gnat-4.6 (4.6.2-1) unstable; urgency=low
+ [Ludovic Brenta]
+ * Suggest ada-reference-manual-{html,info,pdf,text} instead of just
+ ada-reference-manual which no longer exists.
+ * Do not suggest gnat-gdb, superseded by gdb.
+ * Downgrade libgnat{vsn,prj}4.6-dev to priority extra; they conflict
+ with their 4.4 counterparts and priority optional packages may not
+ conflict with one another, per Policy 2.5.
+
+ -- Matthias Klose <doko@debian.org> Thu, 15 Dec 2011 01:23:31 +0100
+
+gcc-4.6 (4.6.2-7) unstable; urgency=medium
+
+ * Update to SVN 20111210 (r182189) from the gcc-4_6-branch.
+ - Fix PR rtl-optimization/51469, PR tree-optimization/51466,
+ PR tree-optimization/50078, PR target/51408, PR fortran/51310,
+ PR fortran/51448.
+
+ -- Matthias Klose <doko@debian.org> Sat, 10 Dec 2011 20:12:33 +0100
+
+gcc-4.6 (4.6.2-6) unstable; urgency=low
+
+ * Update to SVN 20111208 (r182120) from the gcc-4_6-branch.
+ - Fix PR c++/51265, PR bootstrap/50888, PR target/51393 (ix86),
+ PR target/51002 (AVR), PR target/51345 (AVR), PR debug/48190,
+ PR fortran/50684, PR fortran/51218, PR target/50906 (closes: #650318),
+ PR tree-optimization/51315 (closes: #635126), PR tree-optimization/50622,
+ PR fortran/51435, PR debug/51410, PR c/51339, PR rtl-optimization/48721,
+ PR middle-end/51323 (LP: #897583), PR middle-end/50074,
+ PR middle-end/50074.
+
+ [ Matthias Klose ]
+ * Run the libstdc++ testsuite on all architectures again. Closes: #622699.
+ * Apply proposed patch for PR target/50906 (powerpcspe only). Closes: #650318.
+ * Fix PR target/49030 (ARM), taken from Linaro. Closes: #633479.
+ * Fix PR target/50193 (ARM), taken from Linaro. Closes: #642127.
+ * Install the libstdc++.so-gdb.py file. LP: #883269.
+ * Fix PR c++/50114, backport from trunk. LP: #827806.
+ * Merge changes to allow gcc-snapshot cross builds, taken from Linaro.
+ * Update the Linaro support to the 4.6 branch.
+
+ [ Marcin Juszkiewicz ]
+ * Fix issues with gcc-snapshot cross builds.
+ * Allow building Linaro binary packages in a single package.
+ * Apply hardening patches for cross builds when enabled for native builds.
+
+ -- Matthias Klose <doko@debian.org> Thu, 08 Dec 2011 17:14:35 +0100
+
+gcc-4.6 (4.6.2-5) unstable; urgency=low
+
+ * Update to SVN 20111121 (r181596) from the gcc-4_6-branch.
+ - Fix PR c++/50870, PR c++/50608, PR target/47997, PR target/48108,
+ PR target/45233, PR middle-end/51077, PR target/30282, PR c++/50608,
+ PR target/50979, PR target/4810, PR rtl-optimization/51187,
+ PR target/50493, PR target/49992, PR target/49641, PR c++/51150,
+ PR target/50678, PR libstdc++/51142, PR libstdc++/51133.
+
+ [ Matthias Klose ]
+ * Use the default gcc as stage1 compiler for all architectures.
+
+ [ Marcin Juszkiewicz ]
+ * debian/control.m4: Use BASEDEP in more places.
+ * Work around debhelper not calling the correct strip for cross builds.
+ * Drop dpkg-cross build dependency for cross builds.
+
+ -- Matthias Klose <doko@debian.org> Mon, 21 Nov 2011 22:26:49 +0100
+
+gcc-4.6 (4.6.2-4) unstable; urgency=low
+
+ * Update to SVN 20111103 (r180830) from the gcc-4_6-branch.
+ - Fix PR target/50691, PR c++/50901, PR target/50945,
+ PR rtl-optimization/47918, PR libstdc++/50880.
+
+ * Configure the armel build by explicitly passing --with-arch=armv4t
+ --with-float=soft.
+ * libffi: Simplify PowerPC assembly and avoid CPU-specific string
+ instructions (Kyle Moffett).
+ * Fix MULTIARCH_DIRNAME on powerpcspe (Kyle Moffett). Closes: #647324.
+
+ -- Matthias Klose <doko@debian.org> Thu, 03 Nov 2011 12:03:41 -0400
+
+gcc-4.6 (4.6.2-3) unstable; urgency=low
+
+ * disable parallel builds on kfreebsd-* even if DEB_BUILD_OPTIONS
+ enables them (continued investigation for #637236).
+
+ -- Ludovic Brenta <lbrenta@debian.org> Sat, 29 Oct 2011 00:42:46 +0200
+
+gcc-4.6 (4.6.2-2) unstable; urgency=low
+
+ * Update to SVN 20111028 (r180603) from the gcc-4_6-branch.
+ - Fix PR target/50875.
+
+ * Fix gcj, gdc and gnat builds, broken by the stage1 cross-compiler
+ package dependency fixes.
+ * Update the Linaro support to the 4.6 branch.
+ * Fix gcc-4.6-hppa64 installation. Closes: #646805.
+ * For ARM hard float, set the dynamic linker to
+ /lib/arm-linux-gnueabihf/ld-linux.so.3.
+ * Don't use parallel builds on kfreebsd.
+
+ -- Matthias Klose <doko@debian.org> Fri, 28 Oct 2011 16:36:55 +0200
+
+gcc-4.6 (4.6.2-1) unstable; urgency=low
+
+ * GCC 4.6.2 release.
+
+ * Fix libgcc installation into /usr/lib/gcc/<triplet>/4.6. Closes: #645021.
+ * Fix stage1 cross-compiler package dependencies (Kyle Moffett).
+ Closes: #644439.
+
+ -- Matthias Klose <doko@debian.org> Wed, 26 Oct 2011 13:10:44 +0200
+
+gcc-4.6 (4.6.1-16) unstable; urgency=medium
+
+ * Update to SVN 20111019 (r180208) from the gcc-4_6-branch.
+ - Fix PR target/49967 (ia64), PR tree-optimization/50189, PR fortran/50273,
+ PR tree-optimization/50700, PR c/50565 (closes: #642144),
+ PR target/49965 (sparc), PR middle-end/49801, PR c++/49216,
+ PR c++/49855, PR c++/49896, PR c++/44473, PR c++/50611, PR fortran/50659,
+ PR tree-optimization/50723, PR tree-optimization/50712, PR obj-c++/48275,
+ PR c++/50618, PR fortran/47023, PR fortran/50570, PR fortran/50718,
+ PR libobjc/49883, PR libobjc/50002, PR target/50350, PR middle-end/50386,
+ PR middle-end/50326, PR target/50737, PR c++/50787, PR c++/50531,
+ PR fortran/50016, PR target/50737.
+
+ [ Matthias Klose ]
+ * Fix libjava installation into /usr/lib/gcc/<triplet>/4.6.
+ * Fix powerpc and ppc64 libffi builds (Kyle Moffett).
+ * Apply proposed patch for PR target/50350. Closes: #642313.
+ * Re-apply the fix for PR tree-optimization/49911 on ia64.
+ * Apply proposed patch for PR target/50106 (ARM).
+
+ [Xavier Grave]
+ * debian/patches/address-clauses-timed-entry-calls.diff: new; backport
+ bug fix about address clauses and timed entry calls.
+
+ [Ludovic Brenta]
+ * debian/patches/ada-kfreebsd-gnu.diff: new; provide dummy
+ implementations of some optional POSIX Threads functions missing in
+ GNU/kFreeBSD. Closes: #642128.
+
+ -- Matthias Klose <doko@debian.org> Thu, 20 Oct 2011 00:24:13 +0200
+
+gcc-4.6 (4.6.1-15) unstable; urgency=low
+
+ * Update to SVN 20111010 (r179753) from the gcc-4_6-branch.
+ - Fix PR target/50652.
+ * Update the Linaro support to the 4.6-2011.10-1 release.
+ * Fix gcc-spu installation.
+ * Restore symlink for subminor GCC version. Closes: #644849.
+
+ -- Matthias Klose <doko@debian.org> Mon, 10 Oct 2011 17:10:40 +0200
+
+gcc-4.6 (4.6.1-14) unstable; urgency=low
+
+ * Update to SVN 20111008 (r179710) from the gcc-4_6-branch.
+ - Fix PR inline-asm/50571, PR c++/46105, PR c++/50508, PR libstdc++/50529,
+ PR libstdc++/49559, PR c++/40831, PR fortran/48706, PR target/49049,
+ PR tree-optimization/49279, PR fortran/50585, PR fortran/50625,
+ PR libstdc++/48698.
+
+ [ Matthias Klose ]
+ * Configure and build to install into /usr/lib/gcc/<triplet>/4.6.
+ Closes: #643891.
+ * libgcc1: Versioned break to gcc-4.3.
+ * Fix gcc-multiarch for i386-linux-gnu with disabled multilibs.
+ * libffi: Fix PowerPC soft-floating-point support (Kyle Moffett).
+
+ [ Marcin Juszkiewicz ]
+ * Enable gcc-snapshot cross builds.
+
+ [ Iain Buclaw ]
+ * Port gdc to GCC-4.6.
+
+ [ Aurelien Jarno ]
+ * Backport fix for PR target/49696 from the trunk (Closes: #633443).
+
+ -- Matthias Klose <doko@debian.org> Sat, 08 Oct 2011 14:40:49 +0200
+
+gcc-4.6 (4.6.1-13) unstable; urgency=low
+
+ * Update to SVN 20110926 (r179207) from the gcc-4_6-branch.
+ - Fix PR tree-optimization/50472, PR tree-optimization/50413,
+ PR tree-optimization/50412, PR c++/20039, PR c++/42844,
+ PR libstdc++/50510, PR libstdc++/50509.
+ * Revert the fix for PR tree-optimization/49911, bootstrap error on ia64.
+ * libffi: Define FFI_MMAP_EXEC_WRIT on kfreebsd-* (Petr Salinger).
+
+ -- Matthias Klose <doko@debian.org> Mon, 26 Sep 2011 19:59:55 +0200
+
+gcc-4.6 (4.6.1-12) unstable; urgency=low
+
+ * Update to SVN 20110924 (r179140) from the gcc-4_6-branch.
+ - Fix PR target/50464, PR target/50341, PR middle-end/49886,
+ PR target/50091, PR c++/50491, PR c++/50442 (Closes: #642176).
+
+ -- Matthias Klose <doko@debian.org> Sat, 24 Sep 2011 10:39:32 +0200
+
+gcc-4.6 (4.6.1-11) unstable; urgency=low
+
+ * Update to SVN 20110917 (r178926) from the gcc-4_6-branch.
+ - Fix PR c++/50424, PR c++/48320, PR fortran/49479.
+
+ [ Matthias Klose ]
+ * Update the Linaro support to the 4.6-2011.09-1 release.
+
+ [ Aurelien Jarno ]
+ * gcc.c (for_each_path): Allocate memory for multiarch suffix.
+
+ -- Matthias Klose <doko@debian.org> Sat, 17 Sep 2011 10:53:36 +0200
+
+gcc-4.6 (4.6.1-10) unstable; urgency=medium
+
+ * Update to SVN 20110910 (r178746) from the gcc-4_6-branch.
+ - Fix PR middle-end/50266, PR tree-optimization/49911,
+ PR tree-optimization/49518, PR tree-optimization/49628,
+ PR tree-optimization/49628, PR target/50310, PR target/50289,
+ PR c++/50255, PR c++/50309, PR c++/49267, PR libffi/49594.
+ - Revert fix for PR middle-end/49886, causing PR middle-end/50295.
+
+ -- Matthias Klose <doko@debian.org> Sat, 10 Sep 2011 03:38:48 +0200
+
+gcc-4.6 (4.6.1-9) unstable; urgency=low
+
+ * Update to SVN 20110903 (r178501) from the gcc-4_6-branch.
+ - Fix PR target/50090, PR middle-end/50116, PR target/50202, PR c/50179,
+ PR c++/50157, PR fortran/50163, PR libfortran/50192,
+ PR middle-end/49886, PR tree-optimization/50178, PR c++/50207,
+ PR c++/50089, PR c++/50220, PR c++/50234, PR c++/50224,
+ PR libstdc++/50268.
+
+ [ Matthias Klose ]
+ * Fix gcc --print-multilib-osdir for non-biarch architectures.
+ * Fix multiarch for non-biarch builds. Closes: #635860.
+ * Move the lto plugin to the cpp packge. Closes: #639531.
+
+ [ Thorsten Glaser ]
+ * [m68k] Disable multilib. Closes: #639303.
+
+ -- Matthias Klose <doko@debian.org> Sat, 03 Sep 2011 20:11:50 +0200
+
+gcc-4.6 (4.6.1-8) unstable; urgency=low
+
+ * Update to SVN 20110824 (r178027) from the gcc-4_6-branch.
+ Fix PR fortran/49792, PR tree-optimization/48739, PR target/50092,
+ PR c++/50086, PR c++/50054, PR fortran/50050, PR fortran/50130,
+ PR fortran/50129, PR fortran/49792, PR fortran/50109, PR c++/50024,
+ PR c++/46862.
+
+ * Properly disable multilib builds for selected libraries on armel and armhf.
+ * Update and re-enable the gcc-ice patch.
+ * Update and re-enable the gcc-cloog-dl patch.
+ * Fix [ARM] PR target/50090: aliases in libgcc.a with default visibility,
+ taken from the trunk.
+ * Re-work the multiarch patches.
+ * Break older gcj-4.6 and gnat-4.6 versions, changed gcc_lib_dir.
+ * Omit the target alias from the go libdir.
+ * Linaro updates from the 4.6-2011.07-stable branch.
+ * Revert:
+ - libjava: Build with the system libffi PIC library.
+ * For native builds, gcc -print-file-name now resolve . and ..,
+ and removes the subminor version number.
+
+ -- Matthias Klose <doko@debian.org> Wed, 24 Aug 2011 10:22:42 +0200
+
+gcc-4.6 (4.6.1-7) unstable; urgency=low
+
+ * Update to SVN 20110816 (r177780) from the gcc-4_6-branch.
+ - Fix PR middle-end/49923.
+
+ [ Matthias Klose ]
+ * gcc-4.6-multilib: Depend on biarch quadmath library. Closes: #637174.
+ * Don't hard-code build dependency on gcc-multilib.
+ * Build-depends on python when building java.
+ * Fix thinko in java::lang::Class::finalize (taken from the trunk).
+ * Add support for ARM 64bit sync intrinsics (David Gilbert). Only
+ enable for armv7 or better.
+ * libjava: Build with the system libffi PIC library.
+ * Disable gnat multilib builds on armel and armhf.
+
+ Merge from gnat-4.6 (4.6.1-4) unstable; urgency=low
+
+ [Ludovic Brenta]
+ * debian/patches/ada-symbolic-tracebacks.diff
+ (src/gcc/ada/gcc-interface/Makefile.in): pass -iquote instead of -I-
+ to gnatgcc; fixes FTBFS on i386 and closes: #637418.
+
+ Merge from gnat-4.6 (4.6.1-3) unstable; urgency=low
+
+ [Євгеній МещерÑков]
+ * debian/patches/ada-mips.diff: do not use the alternate stack on mips,
+ as on mipsel. Closes: #566234.
+
+ [Ludovic Brenta]
+ * debian/patches/pr49940.diff: new; copy the definition of function
+ lwp_self from s-osinte-freebsd.ads to s-osinte-kfreebsd-gnu.ads.
+ Closes: #636291.
+ * debian/patches/pr49944.diff: new. Closes: #636692.
+ * debian/patches/pr49819.diff: drop, merged upstream.
+
+ -- Matthias Klose <doko@debian.org> Tue, 16 Aug 2011 13:11:25 +0200
+
+gcc-4.6 (4.6.1-6) unstable; urgency=low
+
+ * Update to SVN 20110807 (r177547) from the gcc-4_6-branch.
+ - Fix PR rtl-optimization/49799, PR debug/49871, PR target/47364,
+ PR target/49866, PR tree-optimization/49671, PR target/39386,
+ PR ada/4981, PR fortran/45586, PR fortran/49791, PR middle-end/49897,
+ PR middle-end/49898, PR target/49920, PR target/47908 (closes: #635919),
+ PR c++/43886, PR c++/49593, PR c++/49803, PR c++/49924, PR c++/49260,
+ PR fortran/49885, PR fortran/48876, PR libstdc++/49925, PR target/50001,
+ PR tree-optimization/49948, PR c++/48993, PR c++/49921, PR c++/49669,
+ PR c++/49988, PR fortran/49112.
+
+ [ Aurelien Jarno ]
+ * Update patches/kbsd-gnu.diff for recent changes. Closes: #635195.
+ * Add s390x support.
+
+ [ Marcin Juszkiewicz ]
+ * Fixes for multilib cross builds. LP: #816852, #819147.
+
+ [ Matthias Klose ]
+ * Fix libgo installation for cross builds.
+ * Only apply arm-multilib when building for multilib.
+
+ -- Matthias Klose <doko@debian.org> Sun, 07 Aug 2011 18:20:00 +0200
+
+gcc-4.6 (4.6.1-5) unstable; urgency=low
+
+ * Update to SVN 20110723 (r176672) from the gcc-4_6-branch.
+ - Fix PR target/49541, PR tree-optimization/49768, PR middle-end/49675,
+ PR target/49746, PR middle-end/49732, PR tree-optimization/49725,
+ PR target/49723, PR target/49541, PR tree-opt/49309, PR c++/49785,
+ PR ada/48711, PR ada/46350, PR fortran/49648, PR testsuite/49753,
+ PR tree-optimization/49309, PR tree-optimization/45819, PR target/49600,
+ PR fortran/49708, PR libstdc++/49293.
+ * Update the Linaro support to the 4.6-2011.07-0 release.
+ - Fix PR target/49335. LP: #791327.
+ * Update gcc-multiarch:
+ - Add -print-multiarch option.
+ - Fix library path for non-default multilib(s).
+ - Handle `.' in MULTILIB_DIRNAMES.
+ * Add support to build multilib on armel and armhf, only enable it for
+ Ubuntu/oneiric. LP: #810360.
+ * cpp-4.6: Add empty multiarch directories for the non-default multilibs,
+ needed for relative lookups from startfile_prefixes.
+ * Fix PR c++/49756, backport from trunk. LP: #721378.
+ * libgcc1: Add breaks to gcc-4.1 and gcc-4.3. Closes: #634821.
+ * Configure for DEB_TARGET_MULTIARCH defaults.
+
+ -- Matthias Klose <doko@debian.org> Sat, 23 Jul 2011 08:15:50 +0200
+
+gcc-4.6 (4.6.1-4) unstable; urgency=low
+
+ * Update to SVN 20110714 (r176280) from the gcc-4_6-branch.
+ - Fix PR tree-optimization/49094, PR target/39633, PR c++/49672,
+ PR fortran/49698, PR fortran/49690, PR fortran/49562, PR libfortran/49296,
+ PR target/49487, PR tree-optimization/49651, PR ada/48711.
+
+ [ Matthias Klose ]
+ * Build Go on alpha for gcc-snapshot builds.
+ * For multicore ARM, clear both caches, not just the dcache (proposed
+ patch by Andrew Haley).
+ * Fix for PR rtl-optimization/{48830,48808,48792}, taken from the trunk.
+ LP: #807573.
+ * Fix PR tree-optimization/49169, optimisations strip the Thumb/ARM mode bit
+ off function pointers (Richard Sandiford). LP: #721531.
+
+ [ Marcin Juszkiewicz ]
+ * Define DEB_TARGET_MULTIARCH macro.
+ * debian/rules2: Macro and configuration consolidation.
+
+ -- Matthias Klose <doko@debian.org> Thu, 14 Jul 2011 19:38:49 +0200
+
+gcc-4.6 (4.6.1-3) unstable; urgency=medium
+
+ * Update to SVN 20110709 (r176108) from the gcc-4_6-branch.
+ - Fix PR target/49335, PR tree-optimization/49618, PR c++/49598,
+ PR fortran/49479, PR target/49621, PR target/46779, PR target/49660,
+ PR c/49644, PR debug/49522, PR debug/49522, PR middle-end/49640,
+ PR c++/48157, PR c/49644, PR fortran/48926.
+ - Apparently fixes a boost issue. Closes: #632938.
+ * Apply proposed patch for PR fortran/49690. Closes: #631204.
+
+ * README.Debian: New section 'Former and/or inactive maintainers'.
+
+ -- Matthias Klose <doko@debian.org> Sun, 10 Jul 2011 00:04:34 +0200
+
+gcc-4.6 (4.6.1-2) unstable; urgency=medium
+
+ * Update to SVN 20110705 (r175840) from the gcc-4_6-branch.
+ - Fix PR target/47997, PR c++/49528, PR c++/49440, PR c++/49418,
+ PR target/44643, PR tree-optimization/49615, PR tree-optimization/49572,
+ PR target/34734, PR tree-optimization/49539, PR tree-optimizations/49516,
+ PR target/49089, PR rtl-optimization/49014, PR target/48273,
+ PR fortran/49466, PR libfortran/49296, PR libffi/46660, PR debug/49262,
+ PR rtl-optimization/49472, PR rtl-optimization/49619, PR fortran/49623,
+ PR fortran/49540.
+
+ [Ludovic Brenta, Євгеній МещерÑков, Xavier Grave]
+ * Adjust patches to GCC 4.6.
+ * Remove patches merged upstream:
+ - debian/patches/ada-arm-eabi.diff
+ - debian/patches/ada-bug589164.diff
+ - debian/patches/ada-bug601133.diff
+ - debian/patches/ada-gnatvsn.diff
+ - debian/patches/ada-mips.diff
+ - debian/patches/ada-polyorb-dsa.diff
+
+ [Ludovic Brenta]
+ * debian/patches/ada-acats.diff: set LD_LIBRARY_PATH, ADA_INCLUDE_PATH
+ and ADA_OBJECTS_PATH so that the GNAT testsuite runs.
+ * debian/patches/adalibgnat{vsn,prj}.diff,
+ debian/rules.d/binary-ada.mk: install libgnat{vsn,prj}.so.* in the correct
+ multiarch directory.
+ * debian/control.m4, debian/rules.d/binary-ada.mk: move the SJLJ version
+ of the Ada run-time library to a new package, gnat-4.6-sjlj.
+ * debian/control.m4 (libgnatvsn4.6, libgnatvsn4.6-dbg, libgnatprj4.6,
+ libgnatprj4.6-dbg): pre-depend on multiarch-support and add
+ Multi-Arch: same.
+
+ [Nicolas Boulenguez]
+ * debian/rules.d/binary-ada.mk: add gnathtml to the package gnat-4.6.
+ * debian/gnat.1: remove the version number of GCC. Mention gnathtml.
+
+ [ Matthias Klose ]
+ * Do not install the spu and hppa64 cross compilers into the multiarch path.
+ * Update the Linaro support to 20110704.
+
+ [ Thorsten Glaser ]
+ * Apply changes from src:gcc-4.4 for m68k support. Closes: #632380.
+ - debian/rules.defs: Remove m68k from locale_no_cpus.
+ - debian/patches/gcc-multiarch.diff: Add m68k multiarch_mappings.
+ - debian/patches/pr43804.diff: Fix backported from SVN.
+ - debian/rules.patch: Add pr43804.
+
+ -- Matthias Klose <doko@debian.org> Tue, 05 Jul 2011 10:45:56 +0200
+
+gcc-4.6 (4.6.1-1) unstable; urgency=low
+
+ * GCC 4.6.1 release.
+
+ [Ludovic Brenta]
+ * debian/patches/ada-gnatvsn.diff,
+ debian/patches/ada-polyorb-dsa.diff: remove backports, no longer
+ needed.
+
+ [ Matthias Klose ]
+ * Fix plugin header installation. Closes: #631082.
+ * Stop passing -Wno-error=unused-but-set-parameter and
+ -Wno-error=unused-but-set-variable if -Werror is present.
+ This was a temporary workaround introduced in 4.6.0~rc1-2. Closes: #615157.
+ * gcc-4.6-spu: Install the lto plugin. Closes: #631772.
+
+ -- Matthias Klose <doko@debian.org> Mon, 27 Jun 2011 13:54:04 +0200
+
+gcc-4.6 (4.6.0-14) unstable; urgency=low
+
+ * Update to SVN 20110616 (r175102) from the gcc-4_6-branch.
+ - Fix PR debug/48459, PR fortran/49103, PR rtl-optimization/49390,
+ PR c++/49117, PR c++/49369, PR c++/49290, PR target/44618,
+ PR tree-optimization/49419 (closes: #630567).
+ * Update the Linaro support to the 4.6-2011.06-0 release.
+
+ -- Matthias Klose <doko@debian.org> Thu, 16 Jun 2011 16:10:33 +0200
+
+gcc-4.6 (4.6.0-13) unstable; urgency=low
+
+ * Update to SVN 20110611 (r174958) from the gcc-4_6-branch.
+ * Extend multiarch support for mips/mipsel.
+ * Fix control files for gcj multiarch builds.
+ * Update libstdc++ symbols files.
+
+ -- Matthias Klose <doko@debian.org> Sat, 11 Jun 2011 20:49:42 +0200
+
+gcc-4.6 (4.6.0-12) unstable; urgency=medium
+
+ * Update to SVN 20110608 (r174800) from the gcc-4_6-branch.
+ - PR target/49186, PR rtl-optimization/49235, PR tree-optimization/48702,
+ PR tree-optimization/49243, PR c++/49134, PR target/49238,
+ PR gcov-profile/49299, PR c++/48780, PR c++/49298, PR fortran/49268.
+ * Fix c++ biarch header installation on i386. LP: #793411.
+ * Enable multiarch.
+ * Add multiarch attributes for gnat and libgnat packages.
+ * Add multiarch attributes for libgcj* packages.
+ * Adjust build dependency on multiarch glibc.
+
+ -- Matthias Klose <doko@debian.org> Wed, 08 Jun 2011 11:26:52 +0200
+
+gcc-4.6 (4.6.0-11) unstable; urgency=low
+
+ * Update to SVN 20110604 (r174637) from the gcc-4_6-branch.
+ - Fix PR c++/49165, PR tree-optimization/49218, PR target/45263,
+ PR target/43700, PR target/43995, PR tree-optimization/49217,
+ PR c++/49223, PR c++/47049, PR c++/47277, PR c++/48284, PR c++/48657,
+ PR c++/49176, PR fortran/48955, PR tree-optimization/49038,
+ PR tree-optimization/49093, PR middle-end/48985, PR middle-end/48953,
+ PR c++/49276, PR fortran/49265, PR fortran/45786.
+ * Configure the hppa64 and spu cross builds with --enable-plugin.
+
+ -- Matthias Klose <doko@debian.org> Sat, 04 Jun 2011 16:12:27 +0200
+
+gcc-4.6 (4.6.0-10) unstable; urgency=high
+
+ * Update to SVN 20110526 (r174290) from the gcc-4_6-branch.
+ - Fix PR target/44643, PR c++/49165, PR tree-optimization/49161,
+ PR target/49128, PR tree-optimization/44897, PR target/49133,
+ PR c++/44994, PR c++/49156, PR c++/45401, PR c++/44311, PR c++/44311,
+ PR c++/45698, PR c++/46145, PR c++/46245, PR c++/46696, PR c++/47184,
+ PR c++/48935, PR c++/45418, PR c++/45080, PR c++/48292, PR c++/49136,
+ PR c++/49042, PR c++/48884, PR c++/49105, PR c++/47263, PR c++/47336,
+ PR c++/47544, PR c++/48617, PR c++/48424, PR libstdc++/49141,
+ PR libobjc/48177.
+ * Proposed fix for PR tree-optimization/48702, PR tree-optimization/49144.
+ Closes: #627795.
+ * Proposed fix for PR fortran/PR48955.
+ * Add some conditionals to build the package on older releases.
+
+ -- Matthias Klose <doko@debian.org> Thu, 26 May 2011 16:00:49 +0200
+
+gcc-4.6 (4.6.0-9) unstable; urgency=low
+
+ * Update to SVN 20110524 (r174102) from the gcc-4_6-branch.
+ - Fix PR lto/49123, PR debug/49032, PR c/49120, PR middle-end/48973,
+ PR target/49104, PR middle-end/49029, PR c++/48647, PR c++/48945,
+ PR c++/48780, PR c++/49066, PR libstdc++/49058, PR target/49104.
+ * Use gcc-4.4 as the bootstrap compiler for kfreebsd to work around
+ a bootstrap issue.
+
+ -- Matthias Klose <doko@debian.org> Tue, 24 May 2011 09:41:35 +0200
+
+gcc-4.6 (4.6.0-8) unstable; urgency=low
+
+ * Update to SVN 20110521 (r173994) from the gcc-4_6-branch.
+ - Fix PR target/48986, PR preprocessor/48677, PR tree-optimization/48975,
+ PR tree-optimization/48822, PR debug/48967, PR debug/48159,
+ PR target/48857, PR target/48495, PR tree-optimization/48837,
+ PR tree-optimization/48611, PR tree-optimization/48794, PR c++/48859,
+ PR c++/48574, PR fortran/48889, PR target/49002, PR lto/48207,
+ PR tree-optimization/49039, PR tree-optimization/49018, PR lto/48703,
+ PR tree-optimization/48172, PR tree-optimization/48172, PR c++/48873,
+ PR tree-optimization/49000, PR c++/48869, PR c++/49043, PR c++/49082,
+ PR c++/48948, PR c++/48745, PR c++/48736, PR bootstrap/49086,
+ PR tree-optimization/49079, PR tree-optimization/49073.
+ * Update the Linaro support to the 4.6-2011.05-0 release.
+ * pr45979.diff: Update to the version from the trunk.
+
+ -- Matthias Klose <doko@debian.org> Sat, 21 May 2011 12:19:10 +0200
+
+gcc-4.6 (4.6.0-7) unstable; urgency=low
+
+ * Update to SVN 20110507 (r173528) from the gcc-4_6-branch.
+ - Fix PR middle-end/48597, PR c++/48656, PR fortran/48112,
+ PR fortran/48279, PR fortran/48788, PR tree-optimization/48809,
+ PR target/48262, PR fortran/48462, PR fortran/48746,
+ PR fortran/48810, PR fortran/48800, PR libstdc++/48760,
+ PR libgfortran/48030, PR preprocessor/48192, PR lto/48846,
+ PR target/48723, PR fortran/48894, PR target/48900, PR target/48252,
+ PR c++/40975, PR target/48252, PR target/48774, PR c++/48838,
+ PR c++/48749, PR ada/48844, PR fortran/48720, PR libstdc++/48750,
+ PR c++/48909, PR c++/48911, PR c++/48446, PR c++/48089.
+
+ * Fix issue with volatile bitfields vs. inline asm memory constraints,
+ taken from the trunk, apply for ARM only. Addresses: #625825.
+
+ -- Matthias Klose <doko@debian.org> Sat, 07 May 2011 14:54:51 +0200
+
+gcc-4.6 (4.6.0-6) unstable; urgency=low
+
+ * Update to SVN 20110428 (r173059) from the gcc-4_6-branch.
+ - Fix PR c/48685 (closes: #623161), PR tree-optimization/48717, PR c/48716,
+ PR c/48742, PR debug/48768, PR tree-optimization/48734,
+ PR tree-optimization/48731, PR other/48748, PR c++/42687, PR c++/48726,
+ PR c++/48707, PR fortran/48588, PR libstdc++/48521, PR c++/48046,
+ PR preprocessor/48740.
+ * Update the ibm/gcc-4_6-branch to 20110428.
+ * Use gcc-4.6 as bootstrap compiler on kfreebsd-*.
+
+ -- Matthias Klose <doko@debian.org> Thu, 28 Apr 2011 10:33:52 +0200
+
+gcc-4.6 (4.6.0-5) unstable; urgency=low
+
+ * Update to SVN 20110421 (r172845) from the gcc-4_6-branch.
+ - Fix PR target/48288, PR tree-optimization/48611, PR lto/48148,
+ PR lto/48492, PR fortran/47976, PR c++/48594, PR c++/48657,
+ PR c++/46304, PR target/48708, PR middle-end/48695.
+
+ * Update the Linaro support to the 4.6-2011.04-0 release.
+
+ -- Matthias Klose <doko@debian.org> Thu, 21 Apr 2011 22:50:25 +0200
+
+gcc-4.6 (4.6.0-4) unstable; urgency=medium
+
+ * Update to SVN 20110419 (r172584) from the gcc-4_6-branch.
+ - Fix PR target/48678, PR middle-end/48661, PR tree-optimization/48616,
+ PR lto/48538, PR c++/48537, PR c++/48632, PR testsuite/48675,
+ PR libstdc++/48635, PR libfortran/47571.
+
+ [ Aurelien Jarno ]
+ * Enable SSP on mips/mipsel.
+
+ [ Matthias Klose ]
+ * (Build-)depend on binutils 2.21.51.
+
+ -- Matthias Klose <doko@debian.org> Tue, 19 Apr 2011 23:45:16 +0200
+
+gcc-4.6 (4.6.0-3) unstable; urgency=high
+
+ * Update to SVN 20110416 (r172584) from the gcc-4_6-branch.
+ - Fix PR rtl-optimization/48143, PR target/48142, PR target/48349,
+ PR debug/48253, PR fortran/48291, PR target/16292, PR c++/48280,
+ PR c++/48212, PR c++/48369, PR c++/48281, PR c++/48265, PR lto/48246,
+ PR libstdc++/48398, PR bootstrap/48431, PR tree-optimization/48377,
+ PR debug/48343, PR rtl-optimization/48144, PR debug/48466, PR c/48517,
+ PR middle-end/48335, PR c++/48450, PR target/47829, PR c++/48534,
+ PR c++/48523, PR libstdc++/48566, PR libstdc++/48541, PR target/48366,
+ PR libstdc++/48465, PR middle-end/48591, PR target/48605,
+ PR middle-end/48591, PR target/48090, PR tree-optimization/48195,
+ PR rtl-optimization/48549, PR c++/48594, PR c++/48570, PR c++/48574,
+ PR fortran/48360, PR fortran/48456, PR libstdc++/48631,
+ PR libstdc++/48635, PR libstdc++/48476.
+
+ [ Matthias Klose ]
+ * libjava-jnipath.diff: Add /usr/lib/<multiarch>/jni as jnipath too.
+ * Add mudflap support for varargs (patch taken from the trunk).
+ * gcc-4.6-plugin-dev: Install gtype.state.
+ * Bootstrap with gcc-4.4 -g -O2 on armel.
+ * Fix linker plugin configuration. Closes: #620661.
+ * Update the Linaro support for GCC-4.6.
+ * gcc-snapshot builds:
+ - Fix build with multiarch changes.
+ - Use gcc-snapshot as the bootstrap compiler on armel.
+ - Re-enable building java in the gcc-snapshot package.
+ * Build supporting multiarch on wheezy/sid.
+ * Adjust (build)-dependency to new libgmp-dev name.
+
+ [ Marcin Juszkiewicz ]
+ * Configure stage1 cross builds with --disable-libquadmath.
+
+ -- Matthias Klose <doko@debian.org> Sat, 16 Apr 2011 17:02:30 +0200
+
+gcc-4.6 (4.6.0-2) unstable; urgency=low
+
+ * Update to SVN 20110329 (r171700) from the gcc-4_6-branch.
+ - Fix PR bootstrap/48135, PR target/47553, PR middle-end/48269,
+ PR tree-optimization/48228, PR middle-end/48134, PR middle-end/48031,
+ PR other/48179, PR other/48221, PR other/48234, PR target/48237,
+ PR debug/48204, PR c/42544, PR c/48197, PR rtl-optimization/48141,
+ PR rtl-optimization/48141, PR c++/48166, PR c++/48296, PR c++/48289,
+ PR c++/47999, PR c++/48313, Core 1232, Core 1148, PR c++/47504,
+ PR c++/47570, PR preprocessor/48248, PR c++/48319.
+
+ [ Matthias Klose ]
+ * Update NEWS files.
+ * Configure the hppa64 cross build with --disable-libquadmath.
+ * Don't build armhf from the Linaro branch.
+ * Don't try to build Go on sh4.
+
+ [ Marcin Juszkiewicz ]
+ * Fixes issues with staged cross builds. LP: #741855, #741853.
+ * Fix libdir setting for multiarch enabled cross builds. LP: #741846.
+ * Drop alternatives for cross builds. LP: #676454.
+
+ -- Matthias Klose <doko@debian.org> Tue, 29 Mar 2011 23:22:07 +0200
+
+gcc-4.6 (4.6.0-1) unstable; urgency=low
+
+ * GCC 4.6.0 release.
+
+ * Build the gold LTO plugin for ppc64 (Hiroyuki Yamamoto). Closes: #618865.
+ * Fix PR target/48226, Allow Iterator::vector vector on powerpc with VSX,
+ taken from the trunk.
+ * Fix PR target/47487 ICE building libgo, taken from the trunk.
+ * Merge multiarch changes from the gcc-4.5 package.
+ * Apply proposed patch to reduce the overhead of dwarf2 location tracking.
+ Addresses: #618748.
+
+ -- Matthias Klose <doko@debian.org> Sat, 26 Mar 2011 03:03:21 +0100
+
+gcc-4.6 (4.6.0~rc1-3) experimental; urgency=low
+
+ * GCC 4.6.0 release candidate 2.
+
+ -- Matthias Klose <doko@debian.org> Tue, 22 Mar 2011 22:11:42 +0100
+
+gcc-4.6 (4.6.0~rc1-2) experimental; urgency=low
+
+ [ Loic Minier ]
+ * Rework config/vxworks-dummy.h installation snippet to test
+ DEB_TARGET_GNU_CPU against patterns close to the upstream ones (arm% mips%
+ sh% sparc%) as to also install this header on other ports targetting the
+ relevant upstream CPUs such as armhf. Add a comment pointing at the
+ upstream bug.
+ * Update __aeabi symbol handling to test whether DEB_TARGET_GNU_TYPE matches
+ arm-linux-gnueabi% instead of testing whether DEB_TARGET_ARCH equals
+ armel. Add a comment pointing at the Debian bug and indicating that this
+ is only useful for older dpkg-dev versions.
+ * debian/rules.def: fix "armel" entry to "arm" in list of
+ DEB_TARGET_ARCH_CPUs for Debian experimental GCC 4.5/4.6 libraries.
+ * debian/rules2: drop commented out GCC #42509 workaround as this was fixed
+ upstream in 4.4+.
+ * Change bogus DEB_TARGET_GNU_CPU test on armel and armhf to just test for
+ arm as ths is what the Debian arm, armel and armhf port use.
+ * Rework snippet setting armv7 on Debian armhf / Ubuntu to avoid
+ duplication, as a comment called out for.
+ * Use "arm" instead of armel/armhf in DEB_TARGET_GNU_CPU test when deciding
+ whether to enable profiledbootstrap.
+ * Set DEJAGNU_TIMEOUT=600 on Ubuntu armhf as well.
+ * Fix a couple more uses of armel or armhf against DEB_TARGET_GNU_CPU.
+ * Patched a couple of comments mentioning armel to also mention armhf.
+ * Add patch armhf-triplet-backport, support for arm-linux-*eabi* backported
+ from a patch sent on the upstream mailing-list.
+
+ [ Matthias Klose ]
+ * Update libstdc++ symbols files.
+ * Update libgfortran symbols files.
+
+ -- Matthias Klose <doko@debian.org> Sun, 20 Mar 2011 13:53:48 +0100
+
+gcc-4.6 (4.6.0~rc1-2) experimental; urgency=low
+
+ * Update to SVN 20110320 (r171192) from the gcc-4_6-branch.
+
+ [ Matthias Klose ]
+ * Update gcc-default-ssp* patches for the release candidate.
+ * Pass -Wno-error=unused-but-set-parameter if -Werror is present (temporary
+ for rebuild tests).
+ * Always configure --with-plugin-ld, always install liblto_plugin.so.
+
+ [ Marcin Juszkiewicz ]
+ * Add conflicts with -4.5-*dev packages. Closes: #618450.
+
+ [ Petr Salinger]
+ * Disable lock-2.c test on kfreebsd-*. Closes: #618988.
+ * Re-enable parallel builds on kfreebsd.
+ * Package lto_plugin for kfreebsd-* and Hurd.
+
+ -- Matthias Klose <doko@debian.org> Sun, 20 Mar 2011 13:53:48 +0100
+
+gcc-4.6 (4.6.0~rc1-1) experimental; urgency=low
+
+ * Build from the GCC 4.6.0 release candidate tarball.
+
+ [ Matthias Klose ]
+ * Disable Go on powerpc. Closes: #615827.
+ * Fix lintian errors for the -plugin-dev package.
+ * Update kbsd-gnu.diff (Petr Salinger). Closes: #615826.
+ * Disable parallel builds on kfreebsd (Petr Salinger).
+ * Update gmp (build) dependencies.
+ * Update GFDL compliant builds. Closes: #609161.
+ * For GFDL compliant builds, build a dummy s-tm-texi without access
+ to the texinfo sources.
+
+ [ Aurelien Jarno ]
+ * Import symbol files for kfreebsd-amd64, kfreebsd-i386, sh4 and
+ sparc64 from gcc-4.5.
+
+ -- Matthias Klose <doko@debian.org> Mon, 14 Mar 2011 19:01:08 +0100
+
+gcc-4.6 (4.6-20110227-1) experimental; urgency=low
+
+ [ Matthias Klose ]
+ * Update libquadmath symbols file.
+ * gcc-4.6-plugin-dev: Install gengtype.
+
+ [ Sebastian Andrzej Siewior ]
+ * Remove -many on powerpcspe (__SPE__).
+ * Remove classic FPU opcodes from libgcc if target has no support for them
+ (powerpcspe).
+
+ -- Matthias Klose <doko@debian.org> Sun, 27 Feb 2011 22:33:45 +0100
+
+gcc-4.6 (4.6-20110216-1) experimental; urgency=low
+
+ * GCC snapshot, taken from the trunk.
+ * Pass --no-add-needed by default to the linker. See
+ http://wiki.debian.org/ToolChain/DSOLinking, section "Not resolving symbols
+ in indirect dependent shared libraries" for more information.
+
+ -- Matthias Klose <doko@debian.org> Wed, 16 Feb 2011 23:55:32 +0100
+
+gcc-4.6 (4.6-20110125-1) experimental; urgency=low
+
+ * debian/copyright: Add unicode copyright for
+ libjava/classpath/resource/gnu/java/locale/* files. Addresses: #609161.
+
+ -- Matthias Klose <doko@debian.org> Wed, 26 Jan 2011 03:42:10 +0100
+
+gcc-4.6 (4.6-20110123-1) experimental; urgency=low
+
+ * GCC snapshot, taken from the trunk.
+ * Don't run the libstdc++ testsuite on mipsel, times out on the buildd.
+
+ [ Marcin Juszkiewicz ]
+ * Fix biarch/triarch cross builds.
+ - dpkg-shlibdeps failed to find libraries for 64 or n32 builds
+ - LD_LIBRARY_PATH for dpkg-shlibdeps lacked host dirs.
+
+ -- Matthias Klose <doko@debian.org> Sun, 23 Jan 2011 12:14:49 +0100
+
+gcc-4.6 (4.6-20110116-1) experimental; urgency=low
+
+ * GCC snapshot, taken from the trunk.
+ * Update patches for the trunk.
+ * Pass -Wno-error=unused-but-set-variable if -Werror is present (temporary
+ for rebuild tests).
+ * Work around PR libffi/47248, force a read only eh frame section.
+
+ -- Matthias Klose <doko@debian.org> Sun, 16 Jan 2011 23:28:28 +0100
+
+gcc-4.6 (4.6-20110105-1) experimental; urgency=low
+
+ [ Matthias Klose ]
+ * Rename and update libobjc symbols files.
+ * Update cloog/ppl build dependencies.
+ * Adjust libstdc++ configure and paths for stylesheets and dtds.
+ * Update copyright for libquadmath, libgo, gcc/go/gofrontend.
+ * Enable Go for more architectures.
+ * DP: libgo: Fix GOARCH for i386 biarch, add GOARCH for powerpc
+
+ [ Kees Cook ]
+ * Update hardening patches for GCC-4.6. LP: #696990.
+
+ -- Matthias Klose <doko@debian.org> Wed, 05 Jan 2011 22:29:57 +0100
+
+gcc-4.6 (4.6-20101220-1) maverick; urgency=low
+
+ * GCC snapshot, taken from the trunk.
+
+ -- Matthias Klose <doko@ubuntu.com> Tue, 21 Dec 2010 00:16:19 +0100
+
+gcc-4.5 (4.5.2-7) unstable; urgency=low
+
+ * Update to SVN 20110323 (r171351) from the gcc-4_5-branch.
+ - Fix PR c++/47125, PR fortran/47348, PR libstdc++/48114,
+ PR libfortran/48066, PR target/48171, PR target/47862.
+ PR preprocessor/48192.
+
+ [ Steve Langasek ]
+ * Make dpkg-dev versioned build-dependency conditional on whether we want
+ to build for multiarch.
+ * Add a new patch, gcc-multiarch+biarch.diff, used only when building for
+ multiarch to set our multilib paths to the correct relative directories.
+ * debian/rules.defs: support turning on multiarch build by architecture;
+ but don't enable this yet, we still need to wait for dpkg-dev.
+ * When DEB_HOST_MULTIARCH is available (i.e., with the next dpkg upload),
+ use it as our multiarch path.
+ * debian/rules.d/binary-java.mk: jvm-exports path is /usr/lib/jvm-exports,
+ not $(libdir)/jvm-exports.
+ * OTOH, libgcj_bc *is* in $(libdir).
+ * the spu build is not a multiarch build; look in the correct
+ non-multiarch directory.
+ * debian/rules2: pass --libdir also for stageX builds, needed in order to
+ successfully build for multiarch.
+ * debian/rules2: $(usr_lib) for a cross-build should not include the
+ multiarch dir as part of the path.
+ * debian/patches/gcc-multiarch+biarch.diff: restore the original intent of
+ the patch, namely, that the multilib dir for the default variant is
+ always equal to libdir (the multiarch dir), and we walk up the tree
+ to find lib<qual> for the secondary variant.
+ * debian/patches/gcc-multiarch+biarch32.diff: apply the same multilib
+ directory rewriting for biarch paths with multiarch as we do without;
+ still needed in the near term.
+ * Put our list of patches in README.Debian.$(DEB_TARGET_ARCH) instead of
+ in README.Debian, so that the individual files are architecture-neutral
+ and play nicely with multiarch. LP: #737846.
+ * Add a comment at the bottom of README.Debian with a pointer to the new
+ file listing the patches.
+
+ [ Loic Minier ]
+ * Rework config/vxworks-dummy.h installation snippet to test
+ DEB_TARGET_GNU_CPU against patterns close to the upstream ones (arm% mips%
+ sh% sparc%) as to also install this header on other ports targetting the
+ relevant upstream CPUs such as armhf. Add a comment pointing at the
+ upstream bug.
+ * Update __aeabi symbol handling to test whether DEB_TARGET_GNU_TYPE matches
+ arm-linux-gnueabi% instead of testing whether DEB_TARGET_ARCH equals
+ armel. Add a comment pointing at the Debian bug and indicating that this
+ is only useful for older dpkg-dev versions.
+ * debian/rules.def: fix "armel" entry to "arm" in list of
+ DEB_TARGET_ARCH_CPUs for Debian experimental GCC 4.5/4.6 libraries.
+ * debian/rules2: drop commented out GCC #42509 workaround as this was fixed
+ upstream in 4.4+.
+ * Change bogus DEB_TARGET_GNU_CPU test on armel and armhf to just test for
+ arm as ths is what the Debian arm, armel and armhf port use.
+ * Rework snippet setting armv7 on Debian armhf / Ubuntu to avoid
+ duplication, as a comment called out for.
+ * Use "arm" instead of armel/armhf in DEB_TARGET_GNU_CPU test when deciding
+ whether to enable profiledbootstrap.
+ * Set DEJAGNU_TIMEOUT=600 on Ubuntu armhf as well.
+ * Fix a couple more uses of armel or armhf against DEB_TARGET_GNU_CPU.
+ * Patched a couple of comments mentioning armel to also mention armhf.
+ * Add patch armhf-triplet-backport, support for arm-linux-*eabi* backported
+ from a patch sent on the upstream mailing-list.
+
+ [ Matthias Klose ]
+ * Fix PR target/48226, Allow Iterator::vector vector on powerpc with VSX,
+ taken from the trunk.
+ * Fix PR preprocessor/48192, make conditional macros not defined for
+ #ifdef, proposed patch.
+ * Build the gold LTO plugin for ppc64 (Hiroyuki Yamamoto). Closes: #618864.
+ * Fix issue with volatile bitfields, default to -fstrict-volatile-bitfields
+ again on armel for Linaro builds. LP: #675347.
+
+ -- Matthias Klose <doko@debian.org> Wed, 23 Mar 2011 15:44:01 +0100
+
+gcc-4.5 (4.5.2-6) unstable; urgency=low
+
+ * Update to SVN 20110312 (r170895) from the gcc-4_5-branch.
+ - Fix PR tree-optimization/45967, PR tree-optimization/47278,
+ PR target/47862, PR c++/44629, PR c++/45651, PR c++/47289, PR c++/47705,
+ PR c++/47488, PR libgfortran/47778, PR c++/48029.
+
+ [ Steve Langasek ]
+ * Make sure our libs Pre-Depend on 'multiarch-support' when building for
+ multiarch.
+ * debian/patches/gcc-multiarch*, debian/rules.patch: use i386 in the
+ multiarch path for amd64 / kfreebsd-amd64, not i486 or i686. This lets
+ us use a common set of paths on both Debian and Ubuntu, regardless of
+ the target default optimization level.
+ * debian/rules.conf: when building for multiarch, we need to be sure we
+ are building against a libc-dev that supports the corresponding paths.
+ (the referenced version number for this needs to be bumped once this is
+ officially in the archive.)
+
+ [ Matthias Klose ]
+ * Don't run the libmudflap testsuite on hppa; times out on the buildd.
+ * Don't run the libstdc++ testsuite on mipsel; times out on the buildd.
+ * Post Linaro 4.5-2011.03-0 release changes (up to 20110313).
+ * Undefine LINK_EH_SPEC before redefining it to turn off warnings on
+ powerpc.
+ * Update gmp (build) dependencies.
+
+ [ Aurelien Jarno ]
+ * Add symbol files on kfreebsd-i386.
+ * Add symbol files on kfreebsd-amd64.
+ * Add symbol files on sparc64.
+ * Add symbol files on sh4.
+
+ -- Matthias Klose <doko@debian.org> Sun, 13 Mar 2011 17:30:48 +0100
+
+gcc-4.5 (4.5.2-5) unstable; urgency=low
+
+ * Update to SVN 20110305 (r170696) from the gcc-4_5-branch.
+ - Fix PR target/43810, PR fortran/47886, PR tree-optimization/47615,
+ PR middle-end/47639, PR tree-optimization/47890, PR libfortran/47830,
+ PR tree-optimization/46723, PR target/45261, PR target/45808,
+ PR c++/46159, PR c++/47904, PR fortran/47886, PR libstdc++/47433,
+ PR target/42240, PR fortran/47878, PR libfortran/47694.
+ * Update the Linaro support to the 4.5-2011.03-0 release.
+ - Fix LP: #705689, LP: #695302, LP: #710652, LP: #710623, LP: #721021,
+ LP: #721021, LP: #709453.
+
+ -- Matthias Klose <doko@debian.org> Sun, 06 Mar 2011 02:58:01 +0100
+
+gcc-4.5 (4.5.2-4) unstable; urgency=low
+
+ * Update to SVN 20110222 (r170382) from the gcc-4_5-branch.
+ - Fix PR target/43653, PR fortran/47775, PR target/47840,
+ PR libfortran/47830.
+
+ [ Matthias Klose ]
+ * Don't apply a patch twice.
+ * Build libgcc_s with -fno-stack-protector, when not building from the
+ Linaro branch.
+ * Backport proposed fix for PR tree-optimization/46723 from the trunk.
+
+ [ Steve Langasek ]
+ * debian/control.m4: add missing Multi-Arch: same for libgcc4; make sure
+ Multi-Arch: same doesn't get set for libmudflap when building an
+ Architecture: all cross-compiler package.
+ * debian/rules2: use $libdir for libiberty.a.
+ * debian/patches/gcc-multiarch-*.diff: make sure we're using the same
+ set_multiarch_path definition for all variants.
+
+ [ Sebastian Andrzej Siewior ]
+ * PR target/44364
+ * Remove -many on powerpcspe (__SPE__)
+ * Remove classic FPU opcodes from libgcc if target has no support for them
+ (powerpcspe)
+
+ -- Matthias Klose <doko@debian.org> Wed, 23 Feb 2011 00:35:54 +0100
+
+gcc-4.5 (4.5.2-3) experimental; urgency=low
+
+ * Update to SVN 20110215 (r170181) from the gcc-4_5-branch.
+ - Fix PR rtl-optimization/44469, PR tree-optimization/47411,
+ PR bootstrap/44699, PR target/44392, PR fortran/47331, PR fortran/47448,
+ PR pch/14940, PR rtl-optimization/47166, PR target/47272, PR target/47580,
+ PR tree-optimization/47541, PR target/44606, PR boehm-gc/34544,
+ PR fortran/47569, PR libstdc++/47709, PR libstdc++/46914, PR libffi/46661.
+ * Update the Linaro support to the 4.5 2011.02-0 release.
+ * Pass --no-add-needed by default to the linker. See
+ http://wiki.debian.org/ToolChain/DSOLinking, section "Not resolving symbols
+ in indirect dependent shared libraries" for more information.
+
+ -- Matthias Klose <doko@debian.org> Wed, 16 Feb 2011 15:29:26 +0100
+
+gcc-4.5 (4.5.2-2) experimental; urgency=low
+
+ * Update to SVN 20110123 (r169142) from the gcc-4_5-branch.
+ - Fix PR target/46915, PR target/46729, PR libgcj/46774, PR target/47038,
+ PR target/46685, PR target/45447, PR tree-optimization/46758,
+ PR tree-optimization/45552, PR tree-optimization/43023,
+ PR middle-end/46734, PR fortran/45338, PR preprocessor/39213,
+ PR target/43309, PR fortran/46874, PR tree-optimization/47286,
+ PR tree-optimization/44592, PR target/47201, PR c/47150, PR target/46880,
+ PR middle-end/45852, PR tree-optimization/43655, PR debug/46893,
+ PR rtl-optimization/46804, PR rtl-optimization/46865, PR target/41082,
+ PR tree-optimization/46864, PR fortran/45777, PR tree-optimization/47365,
+ PR tree-optimization/47167, PR target/47318, PR target/46655,
+ PR fortran/47394, PR libstdc++/47354.
+
+ [ Matthias Klose ]
+ * Update the Linaro support to the 4.5 2011.01-1 release.
+ * Don't build packages now built from the gcc-4.6 package for architectures
+ with a sucessful gcc-4.6 build.
+
+ [ Kees Cook ]
+ * debian/patches/gcc-default-ssp.patch: do not ignore -fstack-protector-all
+ (LP: #691722).
+
+ [ Marcin Juszkiewicz ]
+ * Fix biarch/triarch cross builds.
+ - dpkg-shlibdeps failed to find libraries for 64 or n32 builds
+ - LD_LIBRARY_PATH for dpkg-shlibdeps lacked host dirs.
+
+ -- Matthias Klose <doko@debian.org> Sun, 23 Jan 2011 11:54:52 +0100
+
+gcc-4.5 (4.5.2-1) experimental; urgency=low
+
+ * GCC 4.5.2 release.
+
+ -- Matthias Klose <doko@debian.org> Sat, 18 Dec 2010 14:14:38 +0100
+
+gcc-4.5 (4.5.1-12) experimental; urgency=low
+
+ * Update to SVN 20101129 (r167272) from the gcc-4_5-branch.
+ - Fix PR fortran/45742, PR tree-optimization/46498, PR target/45807,
+ PR target/44266, PR rtl-optimization/46315, PR tree-optimization/44545,
+ PR tree-optimization/46491, PR rtl-optimization/46571, PR target/31100,
+ PR c/46547, PR fortran/46638, PR tree-optimization/46675, PR debug/46258,
+ PR ada/40777.
+
+ [ Matthias Klose ]
+ * Use lib instead of lib64 as the 64bit system dir on biarch
+ architectures defaulting to 64bit. Closes: #603597.
+ * Fix powerpc and s390 builds when biarch is disabled.
+ * Backport PR bootstrap/44768, miscompilation of dpkg on ARM
+ with -O2 (Chung-Lin Tang). LP: #674146.
+ * Update libgcc2 symbols file. Closes: #602099.
+
+ [ Marcin Juszkiewicz ]
+ * Do not depend on target mpfr and zlib -dev packages for cross builds.
+ LP: #676027.
+
+ [ Konstantinos Margaritis ]
+ * Add support for new target architecture `armhf'. Closes: #603948.
+
+ -- Matthias Klose <doko@debian.org> Mon, 22 Nov 2010 08:12:08 +0100
+
+gcc-4.5 (4.5.1-11) experimental; urgency=low
+
+ * Update to SVN 20101114 (r166728) from the gcc-4_5-branch.
+ - Fix PR fortran/45742.
+ * Don't hardcode debian/patches when referencing patches. Closes: #600502.
+
+ -- Matthias Klose <doko@debian.org> Sun, 14 Nov 2010 08:36:27 +0100
+
+gcc-4.5 (4.5.1-10) experimental; urgency=low
+
+ * Update to SVN 20101112 (r166653) from the gcc-4_5-branch.
+ - Fix PR rtl-optimization/44691, PR tree-optimization/46355,
+ PR tree-optimization/46177, PR c/44772, PR tree-optimization/46099,
+ PR middle-end/43690, PR tree-optimization/46165, PR middle-end/46419,
+ PR tree-optimization/46107, PR tree-optimization/45314, PR debug/45939,
+ PR rtl-optimization/46237, PR middle-end/44569, PR middle-end/44569,
+ PR tree-optimization/45902, PR target/46153, PR rtl-optimization/46226,
+ PR tree-optimization/46167, PR target/46098, PR target/45946,
+ PR fortran/42169, PR middle-end/46019, PR c/45969, PR c++/45894,
+ PR c++/46160, PR c++/45983, PR fortran/46152, PR fortran/46140,
+ PR libstdc++/45999, PR libgfortran/46373, PR libgfortran/46010,
+ PR fortran/46007, PR c++/46024.
+ * Update the Linaro support to the 4.5 2010.11 release.
+ * Update gcc-4.5 source dependencies. Closes: #600503.
+ * ARM: Fix Thumb-1 reload ICE with nested functions (Julian Brown),
+ taken from the trunk.
+ * Fix earlyclobbers on some arm.md DImode shifts (may miscompile "x >> 1"),
+ taken from the trunk. Closes: #600888.
+
+ -- Matthias Klose <doko@debian.org> Fri, 12 Nov 2010 18:34:47 +0100
+
+gcc-4.5 (4.5.1-9) experimental; urgency=low
+
+ * Update to SVN 20101014 (r165474) from the gcc-4_5-branch.
+ - Fix PR target/45820, PR tree-optimization/45854, PR target/45843,
+ PR target/43764, PR rtl-optimization/43358, PR bootstrap/44621,
+ PR libffi/45677, PR middle-end/45869, PR middle-end/45569,
+ PR tree-optimization/45752, PR fortran/45748, PR libstdc++/45403,
+ PR libstdc++/45924, PR libfortran/45710, PR bootstrap/44455,
+ PR java/43839, PR debug/45656, PR debug/44832, PR libstdc++/45711,
+ PR tree-optimization/45982.
+
+ [ Matthias Klose ]
+ * Update the Linaro support to the 4.5 2010.10 release.
+ * Just try to build java on mips/mipsel (was disabled in 4.5.0-9, when
+ java was built from the same source package). Addresses: #599976.
+ * Remove the gpc packaging support.
+ * Fix libmudflap.so symlink. Addresses: #600161.
+ * Fix pch test failures with heap randomization on armel (PR pch/45979).
+
+ [ Kees Cook ]
+ * Don't enable -fstack-protector with -ffreestanding.
+
+ -- Matthias Klose <doko@debian.org> Thu, 14 Oct 2010 19:17:41 +0200
+
+gcc-4.5 (4.5.1-8) experimental; urgency=low
+
+ * Update to SVN 20100925 (r164618) from the gcc-4_5-branch.
+ - Fix PR middle-end/44763, PR java/44095, PR target/35664,
+ PR rtl-optimization/41085, PR rtl-optimization/45051,
+ PR target/45694, PR middle-end/45678, PR middle-end/45678,
+ PR middle-end/45704, PR rtl-optimization/45728, PR libfortran/45532,
+ PR rtl-optimization/45695, PR rtl-optimization/42775, PR target/45726,
+ PR tree-optimization/45623, PR tree-optimization/45709, PR debug/43628,
+ PR tree-optimization/45709, PR rtl-optimization/45593, PR fortran/45081,
+ * Find 32bit system libraries on sparc64, s390x.
+ * Remove README.Debian from the source package to avoid confusion for
+ readers of the packaging.
+ * Don't include info files and man pages in hppa64 and spu builds.
+ Closes: #597435.
+ * Apply proposed patch for PR mudflap/24619 (instrumentation of dlopen)
+ (Brian M. Carlson) Closes: #507514.
+
+ -- Matthias Klose <doko@debian.org> Sat, 25 Sep 2010 14:11:39 +0200
+
+gcc-4.5 (4.5.1-7) experimental; urgency=low
+
+ * Update to SVN 20100914 (r164279) from the gcc-4_5-branch.
+ - Fix PR target/40959, PR middle-end/45567, PR debug/45660,
+ PR rtl-optimization/41087, PR rtl-optimization/44919, PR target/36502,
+ PR target/42313, PR target/44651.
+ * Add support to build from the Linaro 4.5 2010.09 release.
+ * gcc-4.5-plugin-dev: Install config/arm/arm-cores.def.
+ * Remove non-existing URL's in README.c++ (Osamu Aoki). Closes: #596406.
+ * Don't provide c++abi2-dev for g++ cross builds.
+ * Don't pass -mimplicit-it=thumb if -mthumb to as on ARM, rejected upstream.
+
+ -- Matthias Klose <doko@debian.org> Tue, 14 Sep 2010 12:52:34 +0200
+
+gcc-4.5 (4.5.1-6) experimental; urgency=low
+
+ * Update to SVN 20100909 (r164132) from the gcc-4_5-branch.
+ - Fix PR middle-end/45312, PR bootstrap/43847, PR middle-end/44554,
+ PR middle-end/40386, PR other/45443, PR c++/45200, PR c++/45293,
+ PR c++/45558, PR fortran/45595, PR fortran/45530, PR fortran/45489,
+ PR fortran/45019, PR libstdc++/45398.
+
+ [ Matthias Klose ]
+ * Tighten binutils dependencies to 2.20.1-14.
+
+ [ Marcin Juszkiewicz ]
+ * Fix the gcc-4.5-plugin-dev package name for cross builds. LP: #631474.
+ * Build the gcc-4.5-plugin-dev for stage1 cross builds.
+ * Fix priorities and sections for some cross packages.
+
+ [ Al Viro ]
+ * Fix installation of libgcc_s.so as a linker script for biarch builds.
+
+ [ Kees Cook ]
+ * Push glibc stack traces into stderr when building the package.
+ * debian/patches/gcc-default-ssp.patch: Lower ssp-buffer-size to 4.
+
+ -- Matthias Klose <doko@debian.org> Fri, 10 Sep 2010 21:25:37 +0200
+
+gcc-4.5 (4.5.1-5) experimental; urgency=low
+
+ * Always add dependencies on multilib library packages in *-multilib
+ packages.
+ * Fix installation of libgcc_s.so on architectures when libgcc_s.so is
+ a linker script, not a symlink (Steve Langasek). Closes: #595474.
+ * Remove the lib32gcc1 preinst script. Closes: #595495.
+
+ -- Matthias Klose <doko@debian.org> Sat, 04 Sep 2010 12:41:40 +0200
+
+gcc-4.5 (4.5.1-4) experimental; urgency=low
+
+ * Update to SVN 20100903 (r163833) from the gcc-4_5-branch.
+ - Fix PR target/45070, PR middle-end/45458, PR rtl-optimization/45353,
+ PR middle-end/45423, PR c/45079, PR tree-optimization/45393,
+ PR c++/44991, PR middle-end/45484, PR debug/45500, PR lto/45496.
+
+ [ Matthias Klose ]
+ * Install config/vxworks-dummy.h in the gcc-4.5-plugin-dev package
+ on armel, mipsel and sparc64 too.
+ * Cleanup packaging files in gcc-source package.
+ * [ARM] Provide __builtin_expect() hints in linux-atomic.c (backport).
+
+ [ Al Viro ]
+ * Fix builds with disabled biarch library packages.
+ * New variables {usr_lib,gcc_lib_dir,libgcc_dir}{,32,64,n32}, and switch
+ to using them in rules.d/*; as the result, most of the explicit pathnames
+ in there are gone _and_ we get uniformity across different flavours.
+ * New variables {usr_lib,gcc_lib_dir,libgcc_dir}{,32,64,n32}, and switch
+ to using them in rules.d/*; as the result, most of the explicit pathnames
+ in there are gone _and_ we get uniformity across different flavours.
+ * Merge bi-/tri-arch stuff in binary-gcc.mk.
+ * Merge rules for libgcc biarch variants.
+ * Merge rules for libstdc++ biarch variants. Fix n32 variant of
+ libstdc++-dbg removing _pic.a from the wrong place.
+ * Merge libgfortran rules.
+ * Merge rules for cxx-multi and objc-multi packages.
+ * Enable gcc-hppa64 in cross-gcc-to-hppa build.
+
+ [ Marcin Juszkiewicz ]
+ * Create libgcc1 and gcc-*-base packages for stage2 cross builds.
+ LP: #628855.
+
+ -- Matthias Klose <doko@debian.org> Fri, 03 Sep 2010 18:09:40 +0200
+
+gcc-4.5 (4.5.1-3) experimental; urgency=low
+
+ * Update to SVN 20100829 (r163627) from the gcc-4_5-branch.
+ - Fix PR target/45327, PR middle-end/45292, PR fortran/45344,
+ PR target/41484, PR rtl-optimization/44858, PR rtl-optimization/45400,
+ PR tree-optimization/45260, PR c++/45315.
+
+ [ Matthias Klose ]
+ * Don't run the libstdc++ testsuite on armel on the buildds.
+ * Integrate and extend bi/tri-arch cross builds patches.
+ * Fix dependencies for mips* triarch library packages depend on *both* lib64*
+ and libn32* packages. Closes: #594540.
+ * Tighten binutils dependencies to 2.20.1-13.
+ * Update LAST_UPDATED file when applying upstream updates.
+
+ [ Al Viro ]
+ * Bi/tri-arch cross builds patches.
+ * Fix installation paths in bi/tri-arch libobjc and libmudflap packages.
+ * Merge rules for all flavours of libgomp, libmudflap, libobjc.
+ * Crossbuild fix for lib32gomp (use $(PFL)/lib32 instead of $(lib32)).
+ * gcc-4.5: libgcc_s.so.1 symlink creation on cross-builds.
+ * Enable gcc-multilib for cross-builds and fix what needs fixing.
+ * Enable g++-multilib for cross-builds, fix pathnames.
+ * Enable gobjc/gobjc++ multilib for cross-builds, fixes.
+ * Enable gfortran multilib for cross-builds, fix paths.
+ * Multilib dependency fixes for cross-builds.
+
+ -- Matthias Klose <doko@debian.org> Sun, 29 Aug 2010 18:24:37 +0200
+
+gcc-4.5 (4.5.1-2) experimental; urgency=low
+
+ * Update to SVN 20100818 (r163323) from the gcc-4_5-branch.
+ - Fix PR target/41089, PR tree-optimization/44914, PR c++/45112,
+ PR fortran/44929, PR middle-end/45262, PR debug/45259, PR debug/45055,
+ PR target/44805, PR middle-end/45034, PR tree-optimization/45109,
+ PR target/44942, PR fortran/31588, PR fortran/43954, PR fortran/44660,
+ PR fortran/42051, PR fortran/44064, PR fortran/45151, PR libstdc++/44963,
+ PR tree-optimization/45241, PR middle-end/44632 (closes: #585925),
+ PR libstdc++/45283, PR target/45296.
+
+ [ Matthias Klose ]
+ * Allow overwriting of the PF macro used in the build from the environment
+ (Jim Heck). Closes: #588381.
+ * Fix libc-dbg build dependency for java enabled builds. Addresses: #591424.
+ * gcj: Align data in .rodata.jutf8.* sections, patch taken from the trunk.
+ * Configure with --enable-checking+release. LP: #612822.
+ * Add the complete packaging to the -source package. LP: #608650.
+ * Drop the gcc-ix86-asm-generic32.diff patch.
+ * Tighten (build-) dependency on cloog-ppl (>= 0.15.9-2).
+ * Apply proposed patch for PR middle-end/45292.
+ * Re-enable running the libstdc++ testsuite on armel and ia64 on the buildds.
+
+ [ Steve Langasek ]
+ * s,/lib/,/$(libdir)/, throughout debian/rules*; a no-op in the current
+ case, but required for us to find the libraries when building for
+ multiarch
+ * Don't append multiarch paths to any multilib paths except for the default;
+ our biarch (multilib) builds need to remain independent of multiarch in
+ the near term, so we want to make sure we can find /usr/lib32 without
+ /usr/lib/i486-linux-gnu being available.
+ * debian/control.m4, debian/rules.conf: conditionally set packages to be
+ Multi-Arch: yes when MULTIARCH is defined.
+
+ [ Marcin Juszkiewicz ]
+ * Allow building intermediate stages for cross builds. LP: #603497.
+
+ -- Matthias Klose <doko@debian.org> Wed, 18 Aug 2010 07:00:12 +0200
+
+gcc-4.5 (4.5.1-1) experimental; urgency=low
+
+ * GCC-4.5.1 release.
+ * Update to SVN 20100731 (r162781) from the gcc-4_5-branch.
+ - Fix PR tree-optimization/45052, PR target/43698.
+ * Apply proposed fixes for PR c++/45112, PR c/45079.
+ * Install config/vxworks-dummy.h in the gcc-4.5-plugin-dev package
+ on armel, mips, mipsel, sh4, sparc, sparc64. Closes: #590054.
+ * Link executables statically when `static' is passed in DEB_BUILD_OPTIONS
+ (Jim Heck). Closes: #590102.
+ * Stop building java packages from the gcc-4.5 source package.
+
+ -- Matthias Klose <doko@debian.org> Sat, 31 Jul 2010 16:30:20 +0200
+
+gcc-4.5 (4.5.0-10) experimental; urgency=low
+
+ * Update to SVN 20100725 (r162508) from the gcc-4_5-branch.
+ - Fix PR tree-optimization/45047, PR c++/43016, PR c++/45008.
+ * Disable building gcj/libjava on mips/mipsel (fails to link libgcj).
+ * Update libstdc++6 symbols files.
+
+ -- Matthias Klose <doko@debian.org> Sun, 25 Jul 2010 16:39:11 +0200
+
+gcc-4.5 (4.5.0-9) experimental; urgency=low
+
+ * Update to SVN 20100723 (r162448) from the gcc-4_5-branch (post
+ GCC-4.5.1 release candidate 1).
+ - Fix PR debug/45015, PR target/44942, PR tree-optimization/44900,
+ PR tree-optimization/44977, PR c++/44996, PR fortran/44929,
+ PR fortran/30668, PR fortran/31346, PR fortran/34260,
+ PR fortran/40011.
+
+ [ Marcin Juszkiewicz ]
+ * Fix dependencies on cross library packages.
+ * Copy all debian/rules* files to the -source package.
+
+ [ Matthias Klose ]
+ * Fix versioned build dependency on gcc-4.x-source package for cross builds.
+ LP: #609060.
+ * Set Vcs attributes in control file.
+
+ -- Matthias Klose <doko@debian.org> Fri, 23 Jul 2010 13:08:07 +0200
+
+gcc-4.5 (4.5.0-8) experimental; urgency=low
+
+ * Update to SVN 20100718 (r161892) from the gcc-4_5-branch.
+ - Fixes: PR target/44531, PR bootstrap/44820, PR target/44597,
+ PR target/44705, PR middle-end/44777, PR debug/44694, PR c++/44039,
+ PR tree-optimization/43801, PR target/44575, PR debug/44104,
+ PR middle-end/44671, PR middle-end/44686, PR tree-optimization/44357,
+ PR debug/44694, PR middle-end/43866, PR debug/42278, PR c++/44059,
+ PR tree-optimization/43905, PR middle-end/44133, PR tree-optimize/44063,
+ PR tree-optimization/44683, PR rtl-optimization/43332, PR debug/44610,
+ PR middle-end/44684, PR tree-optimization/44393, PR middle-end/44674,
+ PR c++/44628, PR c++/44587, PR fortran/44582, PR fortran/43841,
+ PR fortran/43843, PR libstdc++/44708, PR tree-optimization/44886,
+ PR target/43888, PR tree-optimization/44284, PR middle-end/44828,
+ PR middle-end/41355, PR c++/44703, PR ada/43731, PR fortran/44773,
+ PR fortran/44847.
+
+ [ Marcin Juszkiewicz ]
+ * debian/rules2: Merge rules.d includes.
+ * Properly -name -dbg packages for cross builds.
+ * Various cross build fixes.
+ * Build libmudflap packages for cross builds.
+ * Fix generation of maintainer scripts for cross packages.
+ * Build a gcc-base package for cross builds.
+
+ [ Kees Cook ]
+ * Fix additional libstdc++ testsuite failures for hardening defaults.
+
+ [ Samuel Thibault ]
+ * Update hurd patch for 4.5, fixing build failure. Closes: #584819.
+
+ [ Matthias Klose ]
+ * gcc-arm-implicit-it.diff: Only pass -mimplicit-it=thumb when in
+ thumb mode (Andrew Stubbs).
+
+ -- Matthias Klose <doko@debian.org> Sun, 18 Jul 2010 10:53:51 +0200
+
+gcc-4.5 (4.5.0-7) experimental; urgency=low
+
+ * Update to SVN 20100625 (r161383) from the gcc-4_5-branch.
+ - Fixes: PR bootstrap/44426, PR target/44546, PR target/44261,
+ PR target/43740, PR libstdc++/44630 (closes: #577458),
+ PR c++/44627 (LP: #503668), PR target/39690, PR target/44615,
+ PR fortran/44556, PR c/44555.
+ - Update libstdc++'s pretty printer for python2.6. Closes: #585202.
+
+ [ Matthias Klose ]
+ * Fix libstdc++ symbols files for powerpc and sparc.
+ * Add maintainer scripts for cross packages.
+
+ [ Samuel Thibault ]
+ * Update hurd patch for 4.5, fixing build failure. Closes: #584454,
+ #584819.
+
+ [ Marcin Juszkiewicz ]
+ * Merge the rules.d/binary-*-cross.mk files into rules.d/binary-*.mk.
+
+ -- Matthias Klose <doko@debian.org> Fri, 25 Jun 2010 15:57:38 +0200
+
+gcc-4.5 (4.5.0-6) experimental; urgency=low
+
+ [ Matthias Klose ]
+
+ * Update to SVN 20100617 (r161901) from the gcc-4_5-branch. Fixes:
+ PR target/44169, PR bootstrap/43170, PR objc/35996, PR objc++/32052,
+ PR objc++/23716, PR lto/44464, PR rtl-optimization/42461, PR fortran/44536,
+ PR tree-optimization/44258, PR tree-optimization/44423, PR target/44534,
+ PR bootstrap/44426, PR tree-optimization/44508, PR tree-optimization/44507,
+ PR lto/42776, PR target/44481, PR debug/41371, PR bootstrap/37304,
+ PR target/44067, PR debug/41371, PR debug/41371, PR target/44075,
+ PR c++/44366, PR c++/44401, PR fortran/44347, PR fortran/44430,
+ PR lto/42776, PR libstdc++/44487, PR other/43838, PR libgcj/44216.
+ * debian/patches/cross-fixes.diff: Update for 4.5 (Marcin Juszkiewicz).
+ * debian/patches/libstdc++-pic.diff: Fix installation for cross builds.
+ * Fix PR bootstrap/43847, --enable-plugin for cross builds.
+ * Export long double versions of "C" math library for arm-linux-gnueabi,
+ m68k-linux-gnu (ColdFire), mips*-linux-gnu (o32 ABI), sh*-linux-gnu
+ (not 32 bit). Merge the libstdc++-*-ldbl-compat.diff patches.
+ * Merge binary-libgcc.mk packaging changes into binary-libgcc-cross.mk
+ (Loic Minier).
+ * Update libgcc and libstdc++ symbols files.
+
+ [ Aurelien Jarno ]
+
+ * libstdc++-mips-ldbl-compat.diff: On MIPS provide the long double
+ versions of "C" math functions in libstdc++ as we need to keep the
+ ABI. Closes: #584610.
+
+ -- Matthias Klose <doko@debian.org> Thu, 17 Jun 2010 14:56:14 +0200
+
+gcc-4.5 (4.5.0-5) experimental; urgency=low
+
+ * Update to SVN 20100602 (r160097) from the gcc-4_5-branch. Fixes:
+ PR target/44338, PR middle-end/44337, PR tree-optimization/44182,
+ PR target/44161, PR c++/44358, PR fortran/44360, PR lto/44385.
+ * Fix PR target/44261, taken from the trunk. Closes: #582787.
+ * Fix passing the expanded -iplugindir option.
+ * Disable broken profiled bootstrap on alpha.
+ * On ix86, pass -mtune=generic32 in 32bit mode to the assembler, when
+ configured for i586-linux-gnu or i686-linux-gnu.
+
+ -- Matthias Klose <doko@debian.org> Thu, 03 Jun 2010 00:44:37 +0200
+
+gcc-4.5 (4.5.0-4) experimental; urgency=low
+
+ * Update to SVN 20100527 (r160047) from the gcc-4_5-branch. Fixes:
+ PR rtl-optimization/44164, PR middle-end/44069, PR target/44199,
+ PR lto/44196, PR target/43733, PR target/44245, PR target/43869,
+ PR debug/44223, PR tree-optimization/44038, PR tree-optimization/43949,
+ PR debug/44205, PR debug/44178, PR bootstrap/43870, PR target/44202,
+ PR target/44074, PR lto/43455, PR lto/42653, PR lto/42425, PR lto/43080,
+ PR lto/43946, PR c++/43382, PR c++/41510, PR c++/44193, PR c++/44157,
+ PR c++/44158, PR lto/44256, PR libstdc++/44190, PR lto/44312,
+ PR target/43636, PR target/43726, PR c++/43555PR libstdc++/40497.
+
+ [ Matthias Klose ]
+
+ * Enable multilibs again on powerpcspe. Closes: #579780.
+ * Fix setting CC for REVERSE_CROSS build (host == target,host != build).
+ Closes: #579779.
+ * Fix setting biarch_cpu macro.
+ * Don't bother with un-normalized paths in .la files, just remove them.
+ * debian/locale-gen: Update locales needed for the libstdc++-v3 testsuite.
+ * If libstdc++6 is built from newer gcc-4.x source, run the libstdc++-v3
+ testsuite against the installed lib too.
+ * Configure with --enable-secureplt on powerpcspe.
+
+ [ Aurelien Jarno ]
+
+ * Fix $(distrelease) on non-official archives. Fix powerpcspe, sh4 and
+ sparc64 builds.
+
+ -- Matthias Klose <doko@debian.org> Sun, 30 May 2010 12:52:02 +0200
+
+gcc-4.5 (4.5.0-3) experimental; urgency=low
+
+ * Update to SVN 20100519 (r159556) from the gcc-4_5-branch. Fixes:
+ PR c++/43704, PR fortran/43339, PR middle-end/43337, PR target/43635,
+ PR tree-optimization/43783, PR tree-optimization/43796, PR middle-end/43570,
+ PR libgomp/43706, PR libgomp/43569, PR middle-end/43835, PR c/43893,
+ PR tree-optimization/43572, PR tree-optimization/43845, PR libgcj/40860,
+ PR target/43744, PR debug/43370, PR c++/43880, PR middle-end/43671,
+ PR debug/43972, PR target/43921, PR c++/38064, PR c++/43953,
+ PR fortran/43985, PR fortran/43592, PR fortran/40539, PR c++/43787,
+ PR middle-end/44085, PR middle-end/44071, PR middle-end/43812,
+ PR debug/44028, PR rtl-optimization/44012, PR target/44046,
+ PR documentation/44016, PR fortran/44036, PR fortran/40728,
+ PR libstdc++/44014, PR lto/44184, PR bootstrap/42347, PR middle-end/44102,
+ PR c++/44127, PR debug/44136, PR target/44088, PR tree-optimization/44124,
+ PR fortran/43591, PR fortran/44135, PR libstdc++/43259.
+
+ [ Matthias Klose ]
+ * Revert gcj-arm-no-merge-exidx-entries patch, fixed by PR libgcj/40860.
+ * Don't run the libstdc++-v3 testsuite on the ia64 buildds. Timeouts.
+ * Backport two libjava fixes from the trunk to run josm with gcj.
+ * Ubuntu only:
+ - Pass --hash-style=gnu instead of --hash-style=both to the linker.
+ * Preliminary architecture port for powerpcspe (Kyle Moffett).
+ Closes: #579780.
+ * Update configury to be able to target i686 instead of i486 on i386.
+
+ [ Aurelien Jarno]
+ * Don't link with --hash-style=both on mips/mipsel as GNU hash is not
+ compatible with the MIPS ABI.
+ * Default to -mplt on mips(el), -march=mips2 and -mtune=mips32 on 32-bit
+ mips(el), -march=mips3 and -mtune=mips64 on 64-bit mips(el).
+
+ -- Matthias Klose <doko@debian.org> Wed, 19 May 2010 09:48:20 +0200
+
+gcc-4.5 (4.5.0-2) experimental; urgency=low
+
+ * Update to SVN 20100419 from the gcc-4_5-branch.
+ - Fix PR tree-optimization/43627, c++/43641, PR c++/43621, PR c++/43611,
+ PR fortran/31538, PR fortran/30073, PR target/43662,
+ PR tree-optimization/43572, PR tree-optimization/43771.
+ * Install the linker plugin.
+ * Search the linker plugin as a readable, not an executable file.
+ * Link with --hash-style=both on mips/mipsel.
+ * On mips, pass -mfix-loongson2f-nop to as, if -mno-fix-loongson2f-nop
+ is not passed.
+ * Sequel to PR40521, fix -g to generate .eh_frame on ARM.
+ * On ARM, let gcj pass --no-merge-exidx-entries to the linker.
+ * Build-depend/depend on binutils snapshot.
+ * Update NEWS.html and NEWS.gcc.
+
+ -- Matthias Klose <doko@debian.org> Mon, 19 Apr 2010 15:22:55 +0200
+
+gcc-4.5 (4.5.0-1) experimental; urgency=low
+
+ * GCC 4.5.0 release.
+ * Always apply biarch patches.
+ * Build the lto-linker plugin again. Closes: #575448.
+ * Run the libstdc++v3 testsuite on armel again.
+ * Fix --enable-libstdcxx-time documentation, show configure result.
+ * On linux targets always pass --no-add-needed to the linker.
+ * Update the patch to search for plugins in a default plugin directory.
+ * Fix java installations in snapshot builds.
+ * Configure --with-plugin-ld=ld.gold.
+ * Linker selection: ld is used by default, to use the gold linker,
+ pass -fuse-linker-plugin (no other side effects if -flto/-fwhopr
+ is not passed). To force ld.bfd or ld.gold, pass -B/usr/lib/compat-ld
+ for ld.bfd or /usr/lib/gold-ld for ld.gold.
+ * Don't apply the gold-and-ld patch for now.
+ * Stop building the documentation for dfsg compliant builds. Closes: #571759.
+
+ -- Matthias Klose <doko@debian.org> Wed, 14 Apr 2010 13:29:20 +0200
+
+gcc-4.5 (4.5-20100404-1) experimental; urgency=low
+
+ * Update to SVN 20100404 from the trunk.
+ * Fix build failures building cross compilers configure --with-ld.
+ * lib32gcc1: Set priority to `extra'.
+ * Apply proposed patch to search for plugins in a default plugin directory.
+ * In snapshot builds, use for javac/ecj1 the jvm provided by the package.
+ * libstdc++-arm-ldbl-compat.diff: On ARM provide the long double versions
+ of "C" math functions in libstdc++; these are dropped when built
+ against glibc-2.11.
+
+ -- Matthias Klose <doko@debian.org> Sun, 04 Apr 2010 15:51:25 +0200
+
+gcc-4.5 (4.5-20100321-1) experimental; urgency=low
+
+ * Update to SVN 20100321 from the trunk.
+ * gcj-4.5-jre-headless: Stop providing java-virtual-machine.
+ * gcj-4.5-plugin-dev: Don't suggest mudflap packages.
+ * Apply proposed patch to enable both gold and ld in a single toolchain.
+ New option -fuse-ld=ld.bfd, -fuse-ld=gold.
+
+ -- Matthias Klose <doko@debian.org> Sun, 21 Mar 2010 11:45:48 +0100
+
+gcc-4.5 (4.5-20100227-1) experimental; urgency=low
+
+ * Update to SVN 20100227 from the trunk.
+ * Don't run the libstdc++-v3 testsuite on arm*-*-linux-gnueabi, when
+ defaulting to thumb mode (Timeouts on the Ubuntu buildd).
+
+ -- Matthias Klose <doko@debian.org> Sat, 27 Feb 2010 08:29:55 +0100
+
+gcc-4.5 (4.5-20100222-1) experimental; urgency=low
+
+ * Update to SVN 20100222 from the trunk.
+ - Install additional header files needed by plugins. Closes: #562881.
+ * gcc-4.5-plugin-dev: Should depend on libgmp3-dev. Closes: #566366.
+ * Update libstdc++6 symbols files.
+
+ -- Matthias Klose <doko@debian.org> Tue, 23 Feb 2010 02:16:22 +0100
+
+gcc-4.5 (4.5-20100216-0ubuntu1~ppa1) lucid; urgency=low
+
+ * Update to SVN 20100216 from the trunk.
+ * Don't call dh_makeshlibs with -V for shared libraries with
+ symbol files.
+ * Don't run the libstdc++-v3 testsuite in thumb mode on armel
+ to work around buildd timeout (see PR target/42509).
+
+ -- Matthias Klose <doko@ubuntu.com> Wed, 17 Feb 2010 02:06:02 +0100
+
+gcc-4.5 (4.5-20100204-1) experimental; urgency=low
+
+ * Update to SVN 20100204 from the trunk.
+
+ -- Matthias Klose <doko@debian.org> Thu, 04 Feb 2010 19:44:19 +0100
+
+gcc-4.5 (4.5-20100202-1) experimental; urgency=low
+
+ * Update to SVN 20100202 from the trunk.
+ - gcc-stack_chk_fail-check.diff: Remove, applied upstream.
+ * Update libstdc++6 symbol files.
+ * Build gnat in snapshot builds on arm.
+ * Configure with --enable-checking=yes for snapshot builds, and for
+ 4.5 builds before the release.
+ * Temporary workaround: On arm-linux-gnueabi run the libstdc++v3 testsuite
+ with -Wno-abi.
+ * When building the hppa64 cross compiler, add $(builddir)/gcc to
+ LD_LIBRARY_PATH to find the just built libgcc6. Closes: #565862.
+ * On sh4-linux, use sh as java architecture name instead of sh4.
+ * On armel, build gnat-4.5 using gcc-snapshot.
+ * Revert the bump of the libgcc soversion on hppa (6 -> 4).
+
+ -- Matthias Klose <doko@debian.org> Tue, 02 Feb 2010 19:35:25 +0100
+
+gcc-4.5 (4.5-20100107-1) experimental; urgency=low
+
+ [ Matthias Klose ]
+ * Update to SVN 20100107 from the trunk.
+ * Revert the workaround for the alpha build (PR bootstrap/42511 is fixed).
+ * testsuite-hardening-format.diff: Add a fix for the libstdc++ testsuite.
+ * Build-depend again on autogen.
+ * Work around PR lto/41569 (installation bug when configured with
+ --enabled-gold).
+ * On armel run the testsuite both in arm and thumb mode, when the
+ distribution is supporthing tumb processors.
+ * Work around PR target/42509 (armel), not setting BOOT_CFLAGS, but
+ applying libcpp-arm-workaround.diff.
+
+ [ Nobuhiro Iwamatsu ]
+ * Update gcc-multiarch patch for sh4.
+
+ -- Matthias Klose <doko@debian.org> Thu, 07 Jan 2010 16:34:57 +0100
+
+gcc-4.5 (4.5-20100106-0ubuntu1) lucid; urgency=low
+
+ * Update to SVN 20100106 from the trunk.
+ * gcj-4.5-jdk: Include /usr/lib/jvm-exports.
+ * Rename libgcc symbols file for hppa.
+ * On alpha and armel, set BOOT_CFLAGS to -g -O1 to work around bootstrap
+ failures (see PR target/42509 (armel) and PR bootstrap/42511 (alpha)).
+ * Base the source build-dependency on the package version instead of the
+ gcc version.
+
+ -- Matthias Klose <doko@ubuntu.com> Wed, 06 Jan 2010 14:17:29 +0100
+
+gcc-4.5 (4.5-20100103-1) experimental; urgency=low
+
+ * Update to SVN 20100103 from the trunk.
+
+ [ Samuel Thibault ]
+ * Update hurd patch for 4.5. Closes: #562802.
+
+ [ Aurelien Jarno ]
+ * Remove patches/kbsd-gnu-ada.diff (merged upstream).
+
+ [ Matthias Klose ]
+ * libgcj11: Move .so symlinks into gcj-4.5-jdk. Addresses: #563280.
+ * gcc-snapshot: On sparc64, use gcc-snapshot as bootstrap compiler.
+ * Don't use expect-tcl8.3 on hppa anymore.
+ * Merge gnat-4.4 changes back from 4.4.2-5.
+ * Bump libgcc soversion on hppa (4 -> 6).
+ * Default to v9a (ultrasparc) on sparc*-linux.
+
+ -- Matthias Klose <doko@debian.org> Sun, 03 Jan 2010 17:25:27 +0100
+
+gcc-4.5 (4.5-20091226-1) experimental; urgency=low
+
+ * Update to SVN 20091226 from the trunk.
+ * Fix powerpc spu installation.
+ * Enable multiarch for sh4.
+ * Fix libffi multilib test runs.
+ * Configure the hppa -> hppa64 cross compiler --with-system-zlib.
+ * gcc-4.5-hppa64: Don't ship info dir file.
+ * lib32stdc++6{,-dbg}: Add dependency on 32bit glibc.
+
+ -- Matthias Klose <doko@debian.org> Sat, 26 Dec 2009 15:38:23 +0100
+
+gcc-4.5 (4.5-20091223-1) experimental; urgency=low
+
+ * Update to SVN 20091223 from the trunk.
+
+ [ Matthias Klose ]
+ * Update hardening patches for 4.5.
+ * Don't call install-info directly, depend on dpkg | install-info instead.
+ * Add conflicts with packages built from GCC 4.4 sources.
+ * On ARM, pass --hash-style=both to ld.
+ * Update libgfortran3 symbols file.
+ * Update libstdc++6 symbols file.
+
+ [ Arthur Loiret ]
+ * debian/rules.conf (gen_no_archs): Handle multiple arm ports.
+
+ -- Matthias Klose <doko@debian.org> Wed, 23 Dec 2009 18:02:24 +0100
+
+gcc-4.5 (4.5-20091220-1) experimental; urgency=low
+
+ * Update to SVN 20091220 from the trunk.
+ - Remove patches applied upstream: arm-boehm-gc-locks.diff,
+ arm-gcc-gcse.diff, deb-protoize.diff, gcc-arm-thumb2-sched.diff,
+ gcc-atom-doc.diff, gcc-atom.diff, gcc-build-id.diff,
+ gcc-unwind-debug-hook.diff, gcj-use-atomic-builtins-doc.diff,
+ gcj-use-atomic-builtins.diff, libjava-atomic-builtins-eabi.diff,
+ libjava-nobiarch-check-snap.diff, lp432222.diff, pr25509-doc.diff,
+ pr25509.diff, pr39429.diff, pr40133.diff, pr40134.diff, rev146451.diff,
+ s390-biarch-snap.diff, sh4-scheduling.diff, sh4_atomic_update.diff.
+ - Update patches: gcc-multiarch.diff, gcc-textdomain.diff,
+ libjava-nobiarch-check.diff, libjava-subdir.diff, libstdc++-doclink.diff,
+ libstdc++-man-3cxx.diff, libstdc++-pic.diff, note-gnu-stack.diff,
+ rename-info-files.diff, s390-biarch.diff.
+ * Stop building the protoize package, removed from the GCC 4.5 sources.
+ * gcc-4.5: Install lto1, lto-wrapper, and new header files for intrinsics.
+ * libstdc++6-4.5-dbg: Install the python files for use with gdb.
+ * Build java packages from the gcc-4.5 source package.
+
+ -- Matthias Klose <doko@debian.org> Sun, 20 Dec 2009 10:56:56 +0100
+
+gcc-4.4 (4.4.2-6) unstable; urgency=low
+
+ * Update to SVN 20091220 from the gcc-4_4-branch (r155367).
+ Fix PR c++/42387, PR c++/41183.
+
+ [ Matthias Klose ]
+ * Apply svn-doc-updates.diff for non DFSG builds.
+ * gcc-snapshot:
+ - Remove patches integrated upstream: pr40133.diff. Closes: #561550.
+
+ [ Nobuhiro Iwamatsu ]
+ * Backport linux atomic ops changes for sh4 from the trunk. Closes: #561550.
+ * Backport from trunk: [SH] Not run scheduling before reload as default.
+ Closes: #561429.
+
+ [ Arthur Loiret ]
+ * Apply spu patches independently of the hardening patches; fix build
+ failure on powerpc.
+
+ -- Matthias Klose <doko@debian.org> Sun, 20 Dec 2009 10:20:19 +0100
+
+gcc-4.4 (4.4.2-5) unstable; urgency=low
+
+ * Update to SVN 20091212 from the gcc-4_4-branch (r155122).
+ Revert the fix for PR libstdc++/42261, fix PR fortran/42268,
+ PR target/42263, PR target/42263, PR target/41196, PR target/41939,
+ PR rtl-optimization/41574.
+
+ [ Matthias Klose ]
+ * Regenerate svn-updates.diff.
+ * Disable biarch testsuite runs for libffi (broken and unused).
+ * Support xz compression of source tarballs.
+ * Fix typo in PR libstdc++/40133 to do the link tests.
+ * gcc-snapshot:
+ - Remove patches integrated upstream: pr40134-snap.diff.
+ - Update s390-biarch.diff for trunk.
+
+ [ Aurelien Jarno ]
+ * Add sparc64 support: disable multilib and install the libraries
+ in /lib.
+
+ -- Matthias Klose <doko@debian.org> Sun, 13 Dec 2009 10:28:19 +0100
+
+gcc-4.4 (4.4.2-4) unstable; urgency=low
+
+ * Update to SVN 20091210 from the gcc-4_4-branch (r155122), Fixes:
+ PR target/42165, PR target/42113, PR libgfortran/42090,
+ PR middle-end/42049, PR c++/42234, PR fortran/41278, PR libstdc++/42261,
+ PR libstdc++/42273 PR java/41991.
+
+ [ Matthias Klose ]
+ * gcc-arm-thumb2-sched.diff: Don't restrict reloads to LO_REGS for Thumb-2.
+ * PR target/40134: Don't redefine LIB_SPEC on hppa.
+ * PR target/42263, fix wrong code bugs in SMP support on ARM, backport from
+ the trunk.
+ * Pass -mimplicit-it=thumb to as by default on ARM, when configured
+ --with-mode=thumb.
+ * Fix boehm-gc build on ARM --with-mode=thumb.
+ * ARM: Don't copy uncopyable instructions in gcse.c (backport from trunk).
+ * Build the spu cross compiler for powerpc from the cell-4_4-branch.
+ * gcj: add option -fuse-atomic-builtins (backport from the trunk).
+
+ [ Arthur Loiret ]
+ * Make svn update interdiffs more readable.
+
+ -- Matthias Klose <doko@debian.org> Thu, 10 Dec 2009 04:29:36 +0100
+
+gcc-4.4 (4.4.2-3) unstable; urgency=low
+
+ * Update to SVN 20091118 from the gcc-4_4-branch (r154294).
+ Fix PR PR c++/9381, PR c++/21008, PR c++/35067, PR c++/36912, PR c++/37037,
+ PR c++/37093, PR c++/38699, PR c++/39786, c++/36959, PR c++/41754,
+ PR c++/41876, PR c++/41967, PR c++/41972, PR c++/41994, PR c++/42059,
+ PR c++/42061,
+ PR fortran/41772, PR fortran/41850, PR fortran/41909,
+ PR middle-end/40946, PR middle-end/41317, R tree-optimization/41643,
+ PR target/41900, PR rtl-optimization/41917, PR middle-end/41963,
+ PR middle-end/42029.
+ * Snapshot builds:
+ - Patch updates.
+ - Configure with --disable-browser-plugin.
+ * Configure with --disable-libstdcxx-pch on hppa.
+ * Backport armel patches form the trunk:
+ - Fix PR objc/41848 - workaround ObjC and -fsection-anchors.
+ - Enable scheduling for Thumb-2, including the fix for PR target/42031.
+ - Fix PR target/41939, EABI violation in accessing values below the stack.
+
+ -- Matthias Klose <doko@debian.org> Wed, 18 Nov 2009 08:37:18 -0600
+
+gcc-4.4 (4.4.2-2) unstable; urgency=low
+
+ * Update to SVN 20091031 from the gcc-4_4-branch (r153603).
+ - Fix PR debug/40521, PR target/40913, PR middle-end/22072,
+ PR target/41665, PR c++/38798, PR c++/40092, PR c++/37875,
+ PR c++/37204, PR fortran/41755, PR libstdc++/40654, PR libstdc++/40826,
+ PR target/41702, PR c/41842, PR target/41762, PR c++/40808,
+ PR fortran/41777, PR libstdc++/40852.
+ * Snapshot builds:
+ - Configure with --enable-plugin, disable the gcjwebplugin by a patch.
+ Addresses: #551200.
+ - Proposed patch for PR lto/41652, compile lto-plugin with
+ -D_FILE_OFFSET_BITS=64
+ - Allow disabling the ada build via DEB_BUILD_OPTIONS nolang=ada.
+ * Fixes for reverse cross builds.
+ * On sparc default to v9 in 32bit mode.
+ * Fix __stack_chk_fail check for cross builds configured --with-headers.
+ * Apply some fixes for uClibc cross builds (Jonas Meyer, Hector Oron).
+
+ -- Matthias Klose <doko@debian.org> Sat, 31 Oct 2009 14:16:03 +0100
+
+gcc-4.4 (4.4.2-1) unstable; urgency=low
+
+ * GCC 4.4.2 release.
+ - Fixes PR target/26515, PR target/41680, PR rtl-optimization/41646,
+ PR c++/39863, PR c++/41038.
+ * Fix setting timeout for testsuite runs.
+ * gcj-4.4/gcc-snapshot: Drop build-dependency on libgconf2-dev, disabled
+ by default.
+ * gcj-4.4: Run the libffi testsuite as well.
+ * Add explicit build dependency on zlib1g-dev.
+ * Fix cross builds, add support for gomp and gfortran (only tested for
+ non-biarch targets).
+ * (Build-)depend on binutils-2.20.
+ * Fix up omp.h for multilibs (taken from Fedora).
+
+ -- Matthias Klose <doko@debian.org> Sun, 18 Oct 2009 02:31:32 +0200
+
+gcc-4.4 (4.4.1-6) unstable; urgency=low
+
+ * Snapshot builds:
+ - Add build dependency on libelfg0-dev (>= 0.8.12).
+ - Add build dependency on binutils-gold where available.
+ - Suggest binutils-gold; not perfect, it is required when using
+ -use-linker-plugin.
+ - Work around installation failure in the lto-plugin (PR lto/41569).
+ - Install java home symlinks in /usr/lib/jvm.
+ - Revert the dwarf2cfi_asm workaround, obsoleted by PR debug/40521.
+ * PR debug/40521:
+ - Apply patch for PR debug/40521, taken from the trunk.
+ - Revert the dwarf2cfi_asm workaround, obsoleted by PR debug/40521.
+ - Depend on binutils (>= 2.19.91.20091005).
+ * Update to SVN 20091005 from the gcc-4_4-branch (r152450).
+ - Fixes PR fortran/41479.
+ * In the test summary, add more information about package versions
+ used for the build.
+
+ -- Matthias Klose <doko@debian.org> Wed, 07 Oct 2009 02:12:56 +0200
+
+gcc-4.4 (4.4.1-5) unstable; urgency=medium
+
+ * Update to SVN 20091003 from the gcc-4_4-branch (r152174).
+ - Fixes PR target/22093, PR c/39779, PR libffi/40242, PR target/40473,
+ PR debug/40521, PR c/41049, PR debug/41065, PR ada/41100,
+ PR tree-optimization/41101, PR libgfortran/41328, PR libffi/41443,
+ PR fortran/41515.
+ * Updates for snapshot builds:
+ - Fix build dependency on automake for snapshot builds.
+ - Update patches pr40134-snap and libjava-nobiarch-check-snap.
+ * Fix lintian errors in libstdc++ packages and lintian warnings in the
+ source package.
+ * Add debian/README.source.
+ * Don't apply PR libstdc++/39491 for the trunk anymore.
+ * Install java home symlinks for snapshot builds in /usr/lib/jvm,
+ including javac. Depend on ecj. Addresses #536102.
+ * Fix build failure on armel with -mfloat-abi=softfp.
+ * Don't pessimize the code for newer armv6 and armv7 processors.
+ * libjava: Use atomic builtins For Linux ARM/EABI, backported from the
+ trunk.
+ * Proposed patch to fix wrong-code on powerpc (Alan Modra). LP: #432222.
+ * Link against -ldl instead of -lcloog -lppl. Exit with an error when using
+ the Graphite loop transformation infrastructure without having the
+ libcloog-ppl0 package installed (patch taken from Fedora). Packages
+ using these optimizations should build-depend on libcloog-ppl0.
+ gcc-4.4: Suggest the cloog runtime libraries.
+ * Install a hook _Unwind_DebugHook, called during unwinding. Intended as
+ a hook for a debugger to intercept exceptions. CFA is the CFA of the
+ target frame. HANDLER is the PC to which control will be transferred
+ (patch taken from Fedora).
+
+ -- Matthias Klose <doko@debian.org> Sat, 03 Oct 2009 13:33:05 +0100
+
+gcc-4.4 (4.4.1-4) unstable; urgency=low
+
+ * Update to SVN 20090911 from the gcc-4_4-branch (r151649).
+ - Fixes PR target/34412, PR middle-end/41094, PR target/40718,
+ PR fortran/41062, PR libstdc++/41005, PR target/41184,
+ PR bootstrap/41180, PR c++/41127, PR fortran/41258,
+ PR rtl-optimization/40861, PR target/41315, PR fortran/39876.
+
+ [ Matthias Klose ]
+ * Avoid underscores in doc-base document id's to workaround a
+ dh_installdocs bug.
+ * Update file names for the Ada user's guide.
+ * Set Homepage attribute for packages.
+ * Update the patch for gnat on armel.
+ * gcj-4.4-jdk: Depend on libantlr-java. Addresses: #546062.
+ * Backport patch for PR tree-optimization/41101 from the trunk.
+ Closes: #541816.
+ * Update libstdc++6.symbols for symbols introduced with the fix
+ for PR libstdc++/41005.
+ * Apply proposed patches for PR libstdc++/40133 and PR target/40134.
+ Add symbols exception propagation support in libstdc++ on armel
+ to the libstdc++6 symbols.
+
+ [ Ludovic Brenta]
+ Merge from gnat-4.4 (4.4.1-3) unstable; urgency=low
+ * debian/rules.defs, debian/rules.d/binary-ada.mk, debian/rules.patch:
+ better support for architectures that support only one exception
+ handling mechanism (SJLJ or ZCX).
+
+ -- Matthias Klose <doko@debian.org> Sat, 12 Sep 2009 03:18:17 +0200
+
+gcc-4.4 (4.4.1-3) unstable; urgency=low
+
+ * Update to SVN 20090822 from the gcc-4_4-branch (r151011).
+ - Fixes PR tree-optimization/41016, PR tree-optimization/41011,
+ PR tree-optimization/41008, PR tree-optimization/40991,
+ PR tree-optimization/40964, PR target/8603 (closes: #161432),
+ PR target/41019, PR target/41015, PR target/40957, PR target/40934,
+ PR rtl-optimization/41033, PR middle-end/41047, PR middle-end/41006,
+ PR fortran/41070, PR fortran/40995, PR fortran/40847, PR debug/40990,
+ PR debug/37801, PR c/41046, PR c/40948, PR c/40866, PR bootstrap/41018,
+ PR middle-end/41123,PR target/40971, PR c++/41131, PR fortran/41102,
+ PR libfortran/40962.
+
+ [ Arthur Loiret ]
+ * Only use -fno-stack-protector when known to the stage1 compiler.
+
+ [ Aurelien Jarno ]
+ * lib32* packages: remove the Pre-Depends: libc6-i386 (>= 2.9-18) and
+ upgrade the Conflicts: libc6-i386 from (<< 2.9-18) to (<< 2.9-22).
+ Closes: #537466.
+ * kbsd-gnu-ada.dpatch: add support for kfreebsd-amd64.
+
+ [ Matthias Klose ]
+ * Build gnat on armel, the gnat-4.4 build still failing, gcc-snapshot
+ builds good enough to build itself.
+ * Merge enough of the gnat-4.4 changes back to allow a combined build
+ from the gcc-4.4 source.
+ * Build libgnatprj for armel.
+ * On armel build just one version of the ada run-time library.
+ * Update auto* build dependencies for snapshot builds.
+ * Apply proposed patch for PR target/40718.
+
+ -- Matthias Klose <doko@debian.org> Sun, 23 Aug 2009 11:50:38 +0200
+
+gcc-4.4 (4.4.1-2) unstable; urgency=low
+
+ [ Matthias Klose ]
+ * Update to SVN 20090808 from the gcc-4_4-branch (r150577).
+ - Fixes PR target/40832, PR rtl-optimization/40710,
+ PR tree-optimization/40321, PR build/40010, PR fortran/40727,
+ PR build/40010, PR rtl-optimization/40924, PR c/39902,
+ PR middle-end/40943, PR target/40577, PR c++/39987, PR debug/39706,
+ PR c++/40948, PR c++/40749, PR fortran/40851, PR fortran/40878,
+ PR target/40906.
+ * Bump GCC version required in dependencies to 4.4.1.
+ * Enable Ada for snapshot builds on all archs with a gnat package
+ available in the archive.
+ * Build-depend on binutils 2.19.51.20090805, needed at least for armel.
+
+ [ Aurelien Jarno ]
+ * kbsd-gnu-ada.dpatch: new patch to fix build on GNU/kFreeBSD.
+
+ -- Matthias Klose <doko@ubuntu.com> Sat, 08 Aug 2009 10:17:39 +0200
+
+gcc-4.4 (4.4.1-1) unstable; urgency=low
+
+ * GCC 4.4.1 release.
+ - Fixes PR target/39943, PR tree-optimization/40792, PR c++/40780,
+ PR middle-end/40747, PR libstdc++/40691, PR libfortran/40714,
+ PR tree-optimization/40813 (ICE in OpenJDK build on sparc).
+ * Apply proposed patch for PR target/39429, an ARM wrong-code error.
+ * Fix a typo in the arm back-end (proposed patch).
+ * Build-depend on libmpc-dev for snapshot builds.
+ * Fix build failure in cross builds (Hector Oron). Closes: #522597.
+ * Run the testsuite as part of the build target, not the install target.
+
+ -- Matthias Klose <doko@debian.org> Wed, 22 Jul 2009 13:24:39 +0200
+
+gcc-4.4 (4.4.0-11) unstable; urgency=medium
+
+ [ Matthias Klose ]
+ * Update to SVN 20090715 from the gcc-4_4-branch (r149690).
+ - Corresponds to the 4.4.1 release candidate.
+ - Fixes PR target/38900, PR debug/40666, PR middle-end/40669,
+ PR middle-end/40328, PR target/40587, PR middle-end/40585,
+ PR c++/40566, PR tree-optimization/40542, PR c/39902,
+ PR tree-optimization/40579, PR tree-optimization/40550, PR c++/40684,
+ PR c++/35828, PR c++/37816, PR c++/40639, PR c++/40633, PR c++/40619,
+ PR c++/40595, PR fortran/40440, PR fortran/40551, PR fortran/40638,
+ PR fortran/40443, PR libstdc++/40600, PR rtl-optimization/40667, PR c++/40740,
+ PR c++/36628, PR c++/37206, PR c++/40689, PR c++/40502, PR middle-end/40747.
+ * Backport of PR c/25509, new option -Wno-unused-result. LP: #305176.
+ * gcc-4.4: Depend on libgomp1, even if not building the libgomp1 package.
+ * Add proposed patches for PR libstdc++/40133, PR target/40134; don't apply
+ yet.
+
+ [Emilio Pozuelo Monfort]
+ * Backport build-id support, configure with --enable-linker-build-id.
+
+ -- Matthias Klose <doko@debian.org> Tue, 14 Jul 2009 16:09:33 -0400
+
+gcc-4.4 (4.4.0-10) unstable; urgency=low
+
+ [ Arthur Loiret ]
+ * debian/rules.patch: Record the auto* calls to run them once only.
+
+ [ Matthias Klose ]
+ * Update to SVN 20090627 from the gcc-4_4-branch (r149023).
+ - Fixes PR other/40024.
+ * Fix typo, adding blacklisted symbols to the libgcc1 symbols file on armel.
+ * On mips/mipsel use -O2 in STAGE1_CFLAGS until binutils is updated.
+
+ -- Matthias Klose <doko@debian.org> Sun, 28 Jun 2009 10:13:08 +0200
+
+gcc-4.4 (4.4.0-9) unstable; urgency=high
+
+ * Update to SVN 20090624 from the gcc-4_4-branch (r148821).
+ - Fix PR objc/28050 (LP: #362217), PR libstdc++/40297, PR c++/40342.
+ * Continue the well planned lib32 transition on amd64, adding pre-dependencies
+ on libc6-i386 (>= 2.9-18) on Debian. Closes: #533767.
+ * Enable SSP on arm and armel, run the testsuite with -fstack-protector.
+ LP: #375189.
+ * Fix spu fortran build in gcc-snapshot builds.
+ * Add missing symbols for 64bit libgfortran library.
+ * Update libstdc++ symbol files for sparc 64bit, adding symbols
+ for exception propagation support.
+ * Explicitely add __aeabi symbols to the libgcc1 symbols file on armel.
+ Closes: #533843.
+
+ -- Matthias Klose <doko@debian.org> Wed, 24 Jun 2009 23:46:02 +0200
+
+gcc-4.4 (4.4.0-8) unstable; urgency=medium
+
+ * Let all 32bit libs conflict with libc6-i386 (<< 2.9-17). Closes: #533767.
+ * Update to SVN 20090620 from the gcc-4_4-branch (r148747).
+ - Fixes PR fortran/39800, PR fortran/40402.
+ * Work around tar bug on kfreebsd unpacking java class file updates (#533356).
+
+ -- Matthias Klose <doko@debian.org> Sat, 20 Jun 2009 15:15:22 +0200
+
+gcc-4.4 (4.4.0-7) unstable; urgency=medium
+
+ * Update to SVN 20090618 from the gcc-4_4-branch (r148685).
+ - Fixes PR middle-end/40446, PR middle-end/40389, PR middle-end/40460,
+ PR fortran/40168, PR target/40470.
+ * On amd64, install 32bit libraries into /lib32 and /usr/lib32.
+ * lib32gcc1, lib32gomp1, lib32stdc++6: Conflict with libc6-i386 (= 2.9-15),
+ libc6-i386 (= 2.9-16).
+ * Handle serialver alternative in -jdk install scripts, not in -jre-headless.
+
+ -- Matthias Klose <doko@debian.org> Fri, 19 Jun 2009 01:36:00 +0200
+
+gcc-4.4 (4.4.0-6) unstable; urgency=low
+
+ [ Matthias Klose ]
+ * Update to SVN 20090612 from the gcc-4_4-branch (r148433).
+ - Fixes PR c++/38064, PR c++/40139, PR target/40017, PR target/40266,
+ PR bootstrap/40027, PR tree-optimization/40087, PR target/39856,
+ PR rtl-optimization/40105, PR target/39942, PR middle-end/40204,
+ PR debug/40109, PR tree-optimization/39999, PR libfortran/37754,
+ PR fortran/22423, PR libfortran/39667, PR libfortran/39782,
+ PR libfortran/38668, PR libfortran/39665, PR libfortran/39702,
+ PR libfortran/39709, PR libfortran/39665i, PR libgfortran/39664,
+ PR fortran/38654, PR libfortran/37754, PR libfortran/37754,
+ PR libfortran/25561, PR libfortran/37754, PR middle-end/40291,
+ PR target/40017, PR middle-end/40340, PR c++/40308, PR c++/40311,
+ PR c++/40306, PR c++/40307, PR c++/40370, PR c++/40372, PR c++/40373,
+ PR c++/40381, PR fortran/40019, PR fortran/39893.
+ * gcj-4.4-jdk: Depend on libecj-java-gcj instead of libecj-java.
+ * Let gjdoc --version use the Configuration class instead of
+ version.properties (Alexander Sack). LP: #385682.
+ * Preserve libgcc_s.so linker scripts. Closes: #532263.
+
+ [Ludovic Brenta]
+ * debian/patches/ppc64-ada.dpatch,
+ debian/patches/ada-mips.dpatch,
+ debian/patches/ada-mipsel.dpatch: remove, merged upstream.
+ * debian/patches/*ada*.dpatch:
+ - rename to *.diff;
+ - remove the dpatch prologue shell script
+ - refresh with quilt -p ab and without time stamps
+ - adjust to GCC 4.4
+ * debian/patches/ada-library-project-files-soname.diff,
+ debian/patches/ada-polyorb-dsa.diff,
+ debian/patches/pr39856.diff: new.
+ * debian/rules.patch: adjust accordingly.
+ * debian/rules.defs: re-enable Ada.
+ * debian/rules2: do a lean bootstrap when building Ada.
+ * debian/rules.d/binary-ada.mk: do not build gnatbl or gprmake anymore,
+ removed upstream.
+
+ -- Matthias Klose <doko@debian.org> Fri, 12 Jun 2009 18:34:13 +0200
+
+gcc-4.4 (4.4.0-5) unstable; urgency=medium
+
+ * Update to SVN 20090517 from the gcc-4_4-branch (r147630).
+ - Fixes PR tree-optimization/40062, PR middle-end/39986,
+ PR middle-end/40057, PR fortran/39879, PR libstdc++/40038,
+ PR middle-end/40035, PR target/37179, PR middle-end/39666,
+ PR tree-optimization/40074, PR fortran/40018, PR fortran/38863,
+ PR middle-end/40147, PR fortran/40018, PR target/40153.
+
+ [ Matthias Klose ]
+ * Update libstdc++ symbols files.
+ * Update libgcc, libobjc, libstdc++ symbols files for armel.
+ * Fix version symlink in gcc_lib_dir. Closes: #527837.
+ * Fix symlinks for javac and header files in /usr/lib/jvm.
+ Closes: #528084.
+ * Don't build the stage1 compiler with -O with recent binutils (trunk).
+ * Revert doing link tests to check for the atomic builtins, disabling
+ exception propagation support in libstdc++ on armel. See PR40133, PR40134.
+ * On mips/mipsel don't run the java testsuite with -mabi=64.
+ * Default to armv4 for the gcc-snapshot package as well. Closes: #523936.
+ * Mention GCC trunk in the gcc-snapshot package description. Closes: #526309.
+ * Remove unneed '..' elements from symlinks in JAVA_HOME.
+ * Fix some lintian warnings for gcc-snapshot.
+
+ [ Arthur Loiret ]
+ * Add missing dir separator to multiarch path. Closes: #527537.
+
+ -- Matthias Klose <doko@debian.org> Sun, 17 May 2009 11:15:52 +0200
+
+gcc-4.4 (4.4.0-4) unstable; urgency=medium
+
+ * Update to SVN 20090506 from the gcc-4_4-branch (r147161).
+ - Fixes PR rtl-optimization/39914, PR testsuite/39776,
+ PR tree-optimization/40022, PR libstdc++/39909.
+
+ [ Matthias Klose ]
+ * gcc-4.4-source: Don't depend on gcc-4.4-base, depend on quilt
+ and patchutils.
+ * On armel, link the shared libstdc++ with both -lgcc_s and -lgcc.
+ * Update libgcc and libstdc++ symbol files for mips and mipsel.
+ * Update libstdc++ symbol files for armel and hppa, adding symbols
+ for exception propagation support.
+ * Add ARM EABI symbols to libstdc++ symbol files for armel.
+ * Add libobjc symbols file for armel.
+ * Fix PR libstdc++/40038, missing ceill/tanhl symbols in libstdc++.
+
+ [ Aurelien Jarno ]
+ * Fix libc name for biarch packages on kfreebsd-amd64.
+
+ -- Matthias Klose <doko@debian.org> Wed, 06 May 2009 15:10:36 +0200
+
+gcc-4.4 (4.4.0-3) unstable; urgency=low
+
+ * libstdc++-doc: Install the man pages again.
+ * Fix build configuration for the GC enabled ObjC runtime library.
+ * Fix thinko in autotools_files, resulting in autoconf not run in
+ some cases.
+ * Do link tests to check for the atomic builtins, enables exception
+ propagation support in libstdc++ on armel and hppa.
+
+ -- Matthias Klose <doko@debian.org> Sun, 03 May 2009 23:38:56 +0200
+
+gcc-4.4 (4.4.0-2) unstable; urgency=low
+
+ [ Samuel Thibault ]
+ * Enable java build on the hurd.
+
+ [ Matthias Klose ]
+ * libobjc2.symbols.armel: Remove, use the default one.
+ * Address PR libstdc++/39491, removing __signbitl from the libstdc++6
+ symbols file on hppa.
+ * libstdc++6.symbols.armel: Fix error introduced with copy from the
+ arm symbols file.
+ * libstdc++6.symbols.*: Don't assume exception propagation support
+ enabled for all architectures (although it should on armel, hppa,
+ sparc).
+ * Disable the build of the ObjC garbage collection library on mips*,
+ working around a build failure.
+
+ -- Matthias Klose <doko@debian.org> Sat, 02 May 2009 14:22:35 +0200
+
+gcc-4.4 (4.4.0-1) unstable; urgency=low
+
+ [ Matthias Klose ]
+ * Update to SVN 20090429 from the gcc-4_4-branch (r146989).
+ * Configure java enabled builds with --enable-java-home.
+ * Integrate the bits previously found in java-gcj-compat.
+ * Rename the packages using the naming schema used for OpenJDK:
+ gcj-X.Y-{jre-headless,jre,jre-lib,jdk,source}. The packages
+ {gij,gcj,gappletviewer}-X.Y and libgcjN-{jar,source} are gone.
+ * Build the libgcj documentation with the just built gjdoc.
+ * Don't use profiled bootstrap when building the gcj source.
+ * Apply proposed patch for PR target/39856.
+ * Fix some lintian warnings.
+ * Don't include debug symbols for libstdc++.so.6, if the library is
+ built by a newer GCC version.
+ * Adjust hrefs to point to the local libstdc++ documentation. LP: #365414.
+ * Update libgcc, libgfortran, libobjc, libstdc++ symbol files.
+ * gcc-4.4: Include libssp_nonshared.a.
+ * For ix86, set the java architecture directory to i386.
+
+ [ Samuel Thibault ]
+ * Update Hurd changes.
+ * Configure with --enable-clocale=gnu on hurd-i386.
+ * debian/patches/hurd-pthread.diff: Reapply.
+
+ -- Matthias Klose <doko@debian.org> Thu, 30 Apr 2009 00:30:20 +0200
+
+gcc-4.4 (4.4.0-1~exp2) experimental; urgency=low
+
+ * Update to SVN 20090423 from the gcc-4_4-branch.
+
+ [ Aurelien Jarno ]
+ * kbsd-gnu.diff: remove parts merged upstream.
+
+ [ Matthias Klose ]
+ * Remove conflicts/replaces for *-spu packages.
+ * Configure the spu cross compiler without --with-sysroot and
+ --enable-multiarch.
+ * Fix and reenable the gfortran-spu build.
+ * Work around build failures with missing libstdc++ baseline files.
+ * Install gjdoc man page.
+ * Fix java configuration with --enable-java-home and include symlinks
+ for JAVA_HOME in /usr/lib/jvm.
+ * Apply proposed fix for PR middle-end/39794.
+ * Install libstdc++ man pages with suffix .3cxx instead of .3.
+ Closes: #525244.
+ * lib*stdc++6-{dbg,doc}: Add conflicts to the corresponding 4.3 packages.
+
+ -- Matthias Klose <doko@debian.org> Thu, 23 Apr 2009 18:11:49 +0200
+
+gcc-4.4 (4.4.0-1~exp1) experimental; urgency=low
+
+ * Final GCC 4.4.0 release.
+
+ * Don't build the Fortran SPU cross compiler, currently broken.
+ * spu cross build: Build without spucache and spumea64.
+ * Configure --with-arch-32=i486 on amd64, i386, and kfreebsd-{amd64,i386},
+ --with-arch-32=i586 on hurd-i386, --with-cpu=atom on lpia.
+ * Build using profiled bootstrap.
+ * Remove the gcc-4.4-base.postinst. Addresses: #524708.
+ * Update debian/copyright: Include runtime library exception, remove
+ D and Phobas license.
+ * Apply proposed patch for PR libstdc++/39491, missing symbol in libstdc++
+ on hppa.
+ * Remove unsused soft-fp functions in the 64bit libgcc on powerpc (PR39828).
+ * Update NEWS files for 4.4.
+ * Build again libgfortran for the non-default multilib configuration.
+ * Restore missing chunks in note-gnu-stack.diff, lost during the conversion
+ to quilt.
+
+ -- Matthias Klose <doko@debian.org> Wed, 22 Apr 2009 00:53:16 +0200
+
+gcc-4.4 (4.4-20090418-1) experimental; urgency=low
+
+ * Update to SVN 20090418 from the gcc-4_4-branch.
+
+ [ Arthur Loiret ]
+ * Update patches:
+ - boehm-gc-nocheck, cross-include, libjava-rpath, link-libs:
+ Rebase on trunk.
+ - gcc-m68k-pch, libjava-debuginfo, libjava-loading-constraints:
+ Remove, merged in trunk.
+ - cell-branch, cell-branch-doc: Remove, there is no upstream cell 4.4
+ branch yet.
+ - gdc-fix-build-kbsd-gnu, svn-gdc-updates, gpc-4.1, gpc-gcc-4.x,
+ gpc-names: Remove, gpc and gdc are not ported to GCC 4.4 yet.
+ - svn-class-updates, svn-doc-updates, svn-updates: Make empty.
+ - Refresh all others, and convert them all to quilt.
+
+ * Build system improvements:
+ - Partial rewrite/refactor of rules files.
+ - Switch patch system to quilt.
+ - Autogenerate debian/copyright.
+ - Use the autoconf2.59 package.
+
+ * multilib/multiarch support improvements: Closes: #369064, #484589.
+ - mips-triarch.diff: Replace with a newer version (approved upstream).
+ - s390-biarch.diff: Ditto.
+ - debian/rules2: Configure with --enable-targets=all on mips-linux,
+ mipsel-linux and s390-linux.
+ - gcc-multiarch.diff: New, add multiarch include directories and
+ libraries path to the system paths.
+ - debian/rules2: Configure with --enable-multiarch. Configure spu build
+ with --with-multiarch-defaults=spu-elf.
+ - multiarch-include.diff: Remove.
+ - debian/multiarch.inc: Ditto.
+
+ * cross-compilers changes:
+ - Never build a separated -base package, don't symlink any doc dir.
+ - Build gobjc again.
+
+ * Run the 64-bit tests with -mabi=64 instead of -m64 on mips/mipsel to
+ hopefully fix the massive failure.
+ * Always set $(distribution) to "Debian" on mips/mipsel, workarounds FTBFS
+ on those archs due to a kernel bug triggered by lsb_release call.
+ Adresses: #524416.
+ * debian/rules.patch: Only apply the ada-nobiarch-check patch when ada is
+ enabled. Remove gpc and gdc patches.
+ * debian/rules.unpack (install_autotools_stamp): Remove.
+ * debian/rules.defs (configure_dependencies): Remove autotools dependency.
+ * debian/rules.conf: Add a copyright-file target.
+ * debian/control.m4: Build-Depends on autoconf2.59 and patchutils.
+ Make gcc-4.4-source Depends on autoconf2.59.
+ Add myself to Uploaders.
+ * debian/rules.d/binary-source.mk: Don't build and install an embedded
+ copy or autoconf2.59 in gcc-4.4-source.
+ * debian/copyright.in: New.
+
+ [ Matthias Klose ]
+ * Build gcj on hppa.
+ * Add support to build vfp optimized runtime libraries on armel.
+ * gcc-4.4-spu: Depend on newlib-spu.
+ * Fix sections of -dbg and java packages.
+ * gcc-default-ssp.dpatch: Set the default as well, when calling the
+ preprocessor. LP: #346126.
+ * Build-depend on quilt.
+ * Keep the copyright file in the archive.
+ * Remove conflict of the gcc-X.Y-source packages.
+ * Update removal of gfdl doc files for 4.4.
+ * Don't re-run the autotools (introduced with the switch to quilt).
+ * On arm and armel, install the arm_neon.h header. LP: #360819.
+ * When hardening options are turned on by default, patch the testsuite
+ to handle the hardening defaults (Kees Cook).
+ * Only run the patch target once. Avoids multiple autotool runs, but
+ doesn't reflect changes in the series file anymore.
+ * libgcj-doc: Fix documentation title.
+ * Fix gcj source build with recent build changes.
+ * Don't check for libraries in DEB_BUILD_OPTIONS/nolang.
+ * gappletviewer: Include missing binary.
+
+ [ Aurelien Jarno ]
+ * Remove: patches/kbsd-gnu-ada.dpatch (merged upstream).
+ * kbsd-gnu.diff: add fix for stuff broken by upstream.
+
+ -- Matthias Klose <doko@debian.org> Mon, 20 Apr 2009 01:34:26 +0200
+
+gcc-4.4 (4.4-20090317-1) experimental; urgency=low
+
+ * Initial upload of GCC-4.4, based on trunk 20090317 (r144904).
+
+ [Matthias Klose]
+ * Branch from the gcc-4.3 packaging.
+ * Remove *-trunk patches, update remaining patches for the trunk.
+ * Remove patches integrated upstream: libobjc-gc-link, libjava-file-support,
+ libjava-realloc-leak, libjava-armel-ldflags, libstdc++-symbols-hppa,
+ gcc-m68k-pch, libjava-extra-cflags, libjava-javah-bridge-tgts,
+ hppa-atomic-builtins, armel-atomic-builtins, libssp-gnu, libobjc-armel,
+ gfortran-armel-updates, sparc-biarch, libjava-xulrunner-1.9.
+ * Update patches for 4.4, mostly using the patches converted for quilt by
+ Arthur Loiret.
+ * debian/patches/libjava-soname.dpatch: Remove, unmodifed upstream library.
+ * debian/patches/gcc-driver-extra-langs.dpatch: Search Ada files in subdir.
+ * debian/rules.unpack, debian/rules.d/binary-source.mk: Update for included
+ autoconf tarball.
+ * debian/rules.d/binary-{gcc,java}.mk: Install new header files.
+ * debian/libgfortran3.symbols.common: Remove symbol not generated by
+ gfortran (__iso_c_binding_c_f_procpointer@GFORTRAN_1.0), PR38871.
+ * debian/rules.conf: Update for 4.4.
+ * Fix build dependencies and configure options for 4.4, which were applied
+ for snapshot builds only.
+
+ [Arthur Loiret]
+ * Update patches from debian/patches:
+ - Remove backported fixes:
+ PR ada: pr10768.dpatch, pr15808.dpatch, pr15915.dpatch, pr16086.dpatch,
+ pr16087.dpatch, pr16098.dpatch, pr17985.dpatch, pr18680.dpatch,
+ pr22255.dpatch, pr22387.dpatch, pr28305.dpatch, pr28733.dpatch,
+ pr29015.dpatch, pr30740.dpatch, pr30827.dpatch pr33688.dpatch,
+ pr34466.dpatch, pr35050.dpatch, pr35792.dpatch.
+ PR target: pr27880.dpatch, pr28102.dpatch, pr30961.dpatch,
+ pr35965.dpatch, pr37661.dpatch.
+ PR libgcj: pr24170.dpatch, pr35020.dpatch.
+ PR gcov-profile: pr38292.dpatch.
+ PR other: pr28322.dpatch.
+ * debian/rules.patch: Update.
+ * debian/symbols/libgomp1.symbols.common: Add new symbols from OpenMP 3.0.
+
+ -- Matthias Klose <doko@debian.org> Tue, 17 Mar 2009 02:28:01 +0100
+
+gcc-4.3 (4.3.3-5) unstable; urgency=low
+
+ Merge from gnat-4.3 (4.3.3-1):
+
+ [Petr Salinger]
+ * debian/patches/ada-libgnatprj.dpatch: enable support for GNU/kFreeBSD.
+ Fixes: #512277.
+
+ [Ludovic Brenta]
+ * debian/patches/ada-acats.dpatch: attempt to fix ACATS tests (not entirely
+ successful yet).
+ * New upstream version. Fixes: #514565.
+
+ [Matthias Klose]
+ * Update to SVN 20090301 from the gcc-4_3-branch.
+ - Fix PR c/35446, PR c++/38950, PR fortran/38852, PR fortran/39006,
+ PR c++/39225 (closes: #516727), PR c++/38950, PR target/38056,
+ PR target/39228, PR middle-end/36578, PR inline-asm/39058,
+ PR middle-end/37861.
+ * Don't provide the 4.3.2 symlink in gcc_lib_dir anymore.
+ * Require binutils-2.19.1.
+
+ -- Matthias Klose <doko@debian.org> Sun, 01 Mar 2009 14:18:09 +0100
+
+gcc-4.3 (4.3.3-4) unstable; urgency=low
+
+ * Fix Fix PR gcov-profile/38292 (wrong profile information), taken
+ from the trunk.
+ * Update to SVN 20090215 from the gcc-4_3-branch.
+ Fix PR c/35435, PR tree-optimization/39100, PR rtl-optimization/39076,
+ PR c/35433, PR tree-optimization/39041, PR target/38988,
+ PR middle-end/38969, PR c++/36897, PR c++/39054, PR c/39035, PR c/35434,
+ PR c/36432, PR target/38991, PR c/39084, PR target/39118.
+ * Reapply the fix for PR middle-end/38615.
+ * Include autoconf-2.59 sources into the source package, and install as
+ part of the gcc-4.3-source package.
+ * Explicitely use autoconf-1.9.
+ * Disable building the gcjwebplugin.
+ * Don't configure with --enable-cld on amd64 and i386.
+
+ -- Matthias Klose <doko@debian.org> Sun, 15 Feb 2009 23:40:09 +0100
+
+gcc-4.3 (4.3.3-3) unstable; urgency=medium
+
+ * Revert fix for PR middle-end/38615. Closes: #513420.
+
+ -- Matthias Klose <doko@debian.org> Thu, 29 Jan 2009 07:05:15 +0100
+
+gcc-4.3 (4.3.3-2) unstable; urgency=low
+
+ * Update to SVN 20090127 from the gcc-4_3-branch.
+ - Fix PR tree-optimization/38359. Closes: #492505.
+ - Fix PR tree-optimization/38932 (ice-on-valid-code), PR target/38931
+ (ice-on-valid-code), PR rtl-optimization/38879 (wrong-code),
+ PR c++/23287 (rejects-valid), PR fortran/38907 (ice-on-valid-code),
+ PR fortran/38859 (wrong-code), PR fortran/38657 (rejects-valid),
+ PR fortran/38672 (ice-on-valid-code).
+ * Fix PR middle-end/38969, taken from the trunk. Closes: #513007.
+
+ -- Matthias Klose <doko@debian.org> Tue, 27 Jan 2009 23:42:45 +0100
+
+gcc-4.3 (4.3.3-1) unstable; urgency=low
+
+ * GCC-4.3.3 release (no changes compared to the 4.3.2-4 upload).
+ * Fix PR middle-end/38615 (wrong code, taken from the trunk).
+
+ -- Matthias Klose <doko@debian.org> Sat, 24 Jan 2009 14:43:09 +0100
+
+gcc-4.3 (4.3.2-4) unstable; urgency=medium
+
+ * Update to SVN 20090119 from the gcc-4_3-branch.
+ - Fix PR tree-optimization/36765 (wrong code).
+ * Remove patch for PR 34571, applied upstream (fix build failure on alpha).
+ * Apply proposed patch for PR middle-end/38902 (wrong code).
+
+ -- Matthias Klose <doko@debian.org> Tue, 20 Jan 2009 00:22:41 +0100
+
+gcc-4.3 (4.3.2-3) unstable; urgency=low
+
+ * Update to SVN 20090117 from the gcc-4_3-branch (4.3.3 release candidate).
+ - Fix PR target/34571, PR debug/7055, PR tree-optimization/37194,
+ PR tree-optimization/38529, PR fortran/38763, PR fortran/38765,
+ PR fortran/38669, PR fortran/38487, PR fortran/35681, PR fortran/38657,
+ PR c++/36019, PR c++/31488, PR c++/37646, PR c++/36334, PR c++/38357,
+ PR c++/31260, PR c++/38877, PR libstdc++/36801, PR libgcj/38396.
+ - debian/patches/libgcj-bc.dpatch: Remove, applied upstream.
+ * Fix PR middle-end/38616 (wrong code with -fstack-protector).
+ * Update backport for PR28322 (Gunther Nikl).
+
+ -- Matthias Klose <doko@debian.org> Sat, 17 Jan 2009 21:09:35 +0100
+
+gcc-4.3 (4.3.2-2) unstable; urgency=low
+
+ * Update to SVN 20090110 from the gcc-4_3-branch.
+ - Fix PR target/36654, PR tree-optimization/38752, PR fortran/38675,
+ PR fortran/37469, PR libstdc++/38000.
+
+ -- Matthias Klose <doko@debian.org> Sat, 10 Jan 2009 18:32:34 +0100
+
+gcc-4.3 (4.3.2-2~exp5) experimental; urgency=low
+
+ * Adjust build-dependencies for cross builds. Closes: #499998.
+ * Update to SVN 20081231 from the gcc-4_3-branch.
+ - Fix PR middle-end/38565, PR target/38062, PR bootstrap/38383,
+ PR target/38402, PR testsuite/35677, PR tree-optimization/38478,
+ PR target/38054, PR middle-end/29056, PR testsuite/28870,
+ PR target/38254.
+ - Fix PR libstdc++/37144, PR c++/37582, PR libstdc++/38080.
+ - Fix PR fortran/38602, PR fortran/38602, PR fortran/38487,
+ PR fortran/38113, PR fortran/35983, PR fortran/35937, PR testsuite/36889.
+ * Update the spu cross compiler from the cell-gcc-4_3-branch 20081217.
+ * debian/patches/libobjc-armel.dpatch: Don't define EH_USES.
+ * Apply the Atomic builtins patch for PARISC.
+
+ -- Matthias Klose <doko@debian.org> Thu, 18 Dec 2008 00:34:46 +0100
+
+gcc-4.3 (4.3.2-2~exp4) experimental; urgency=low
+
+ * Update to SVN 20081130 from the gcc-4_3-branch.
+ - Fix PR bootstrap/33304, PR middle-end/37807, PR middle-end/37809,
+ PR rtl-optimization/37489, PR target/35574, PR c/37924,
+ PR tree-optimization/37879, PR middle-end/37858, PR middle-end/37870,
+ PR target/38016, PR target/37939, PR rtl-optimization/37769,
+ PR target/37909, PR fortran/37597, PR fortran/35820, PR fortran/37445,
+ PR fortran/PR35769, PR fortran/37903, PR fortran/37749.
+ - Fix PR target/37640, PR tree-optimization/37868, PR bootstrap/33100,
+ PR other/38214, PR c++/37142, PR c++/35405, PR c++/37563, PR c++/38030,
+ PR c++/37932, PR c++/38007.
+ - Fix PR fortran/37836, PR fortran/38171, PR fortran/35681,
+ PR fortran/37792, PR fortran/37926, PR fortran/38033, PR fortran/36526.
+ - Fix PR target/38287. Closes: #506713.
+ * Atomic builtins using kernel helpers for PARISC and ARM Linux/EABI, taken
+ from the trunk.
+
+ -- Matthias Klose <doko@debian.org> Mon, 01 Dec 2008 01:29:51 +0100
+
+gcc-4.3 (4.3.2-2~exp3) experimental; urgency=low
+
+ * Update to SVN 20081117 from the gcc-4_3-branch.
+ * Add build dependencies on spu packages for snapshot builds.
+ * Add build dependency on libantlr-java for snapshot builds.
+ * Disable fortran on spu for snapshot builds.
+ * Add dependency on binutils-{hppa64,spu} for snapshot builds.
+
+ -- Matthias Klose <doko@debian.org> Mon, 17 Nov 2008 21:57:51 +0100
+
+gcc-4.3 (4.3.2-2~exp2) experimental; urgency=low
+
+ * Update to SVN 20081023 from the gcc-4_3-branch.
+ - General regression fixes: PR rtl-optimization/37882 (wrong code),
+ - Fortran regression fixes: PR fortran/37787, PR fortran/37723.
+ * Use gij-4.3 for builds in java maintainer mode.
+ * Don't run the testsuite with -fstack-protector for snapshot builds.
+ * Update the spu cross compiler from the cell-gcc-4_3-branch 20081023.
+ Don't disable multilibs, install additional components in the gcc-4.3-spu
+ package.
+ * Enable building the spu cross compiler for powerpc and ppc64 snapshot
+ builds.
+ * Apply proposed patch for PR tree-optimization/37868 (wrong code).
+ * Apply proposed patch to parallelize make check.
+ * For biarch builds, disable the gnat testsuite for the non-default
+ architecture (no biarch support in gnat yet).
+
+ -- Matthias Klose <doko@debian.org> Thu, 23 Oct 2008 22:06:38 +0200
+
+gcc-4.3 (4.3.2-2~exp1) experimental; urgency=low
+
+ * Update to SVN 20081017 from the gcc-4_3-branch.
+ - General regression fixes: PR rtl-optimization/37408 (wrong code),
+ PR tree-optimization/36630, PR tree-optimization/37102 (wrong code),
+ PR c/35437 (ice on invalid code), PR middle-end/37731 (wrong code),
+ PR target/37603 (wrong code, hppa), PR tree-optimization/35737 (ice on
+ valid code), PR middle-end/36575 (wrong code), PR c/37645 (ice on valid
+ code), PR tree-optimization/37539 (compile time hog), PR middle-end/37236
+ (ice on invalid code), PR tree-optimization/36343 (wrong code),
+ PR rtl-optimization/37544 (wrong code), PR target/35620 (ice on valid
+ code), PR target/35713 (ice on valid code, wrong code), PR c/35712 (wrong
+ code), PR target/37466 (wrong code, AVR).
+ - C++ regression fixes: PR c++/37389 (LP: #252301), PR c++/37555 (ice on
+ invalid code).
+ - Fortran regression fixes: PR fortran/37199, PR fortran/36214,
+ PR fortran/35770, PR fortran/36454, PR fortran/36374, PR fortran/37274,
+ PR fortran/37583, PR fortran/36700, PR fortran/35945, PR fortran/37626,
+ PR fortran/37504, PR fortran/37580, PR fortran/37706, PR fortran/35680,
+ PR fortran/37794.
+ * Remove obsolete patches: ada-driver.dpatch, pr33148.dpatch.
+ * Fix naming of bridge targets in gjavah (wrong header generation).
+ * Fix PR target/37661, SPARC64 int-to-TFmode conversions.
+ * Include the complete test summaries in a binary package, to allow
+ regression checking from the previous build.
+ * Tighten inter-package dependencies to (>= 4.3.2-1).
+ * Drop the 4.3.1 symlink in gcc_lib_dir, add a 4.3.3 symlink to 4.3.
+
+ -- Matthias Klose <doko@debian.org> Fri, 17 Oct 2008 23:26:50 +0200
+
+gcc-4.3 (4.3.2-1) unstable; urgency=medium
+
+ [Matthias Klose]
+ * Final gcc-4.3.2 release (regression fixes).
+ - Remove the generated install docs from the tarball (GFDL licensed).
+ - C++ regression fixes: PR debug/37156.
+ - general regression fixes: PR debug/37156, PR target/37101.
+ - Java regression fixes: PR libgcj/8995.
+ * Update to SVN 20080905 from the gcc-4_3-branch.
+ - C++ regression fixes: PR c++/36741 (wrong diagnostic),
+ - general regression fixes: PR target/37184 (ice on valid code),
+ PR target/37191 (ice on valid code), PR target/37197 (ice on valid code),
+ PR middle-end/36817 (ice on valid code), PR middle-end/36548 (wrong code),
+ PR middle-end/37125 (wrong code), PR c/37261 (wrong diagnostic),
+ PR target/37168 (ice on valid code), PR middle-end/36449 (wrong code),
+ PR middle-end/37248 (missed optimization), PR target/36332 (wrong code).
+ - Fortran regression fixes: PR fortran/37193 (rejects valid code).
+ * Move symlinks in gcc_lib_dir from cpp-4.3 to gcc-4.3-base. Closes: #497369.
+ * Don't build-depend on autogen on architectures where it is not installable
+ (needed for the fixincludes testsuite only); don't build-depend on it for
+ source packages not running the fixincludes testsuite.
+
+ [Ludovic Brenta]
+ * Add sdefault.ads to libgnatprj4.3-dev. Fixes: #492866.
+ * turn gnatvsn.gpr and gnatprj.gpr into proper library project files.
+ * Unconditionally build-depend on gnat when building gnat-4.3.
+ Fixes: #487564.
+ * (debian/rules.d/binary-ada.mk): Add a symlink libgnat.so to
+ /usr/lib/libgnat-4.3.so in the adalib directory. Fixes: #493814.
+ * (debian/patches/ada-sjlj.dpatch): remove dangling symlinks from all
+ adalib directories.
+ * debian/patches/ada-alpha.dpatch: remove, applied upstream.
+
+ [Samuel Tardieu, Ludovic Brenta]
+ * debian/patches/pr16086.dpatch: new; backport from GCC 4.4.
+ Closes: #248172.
+ * debian/patches/pr35792.dpatch: new; backport from GCC 4.4.
+ * debian/patches/pr15808.dpatch (fixes: #246392),
+ debian/patches/pr30827.dpatch: new; backport from the trunk.
+
+ -- Matthias Klose <doko@debian.org> Fri, 05 Sep 2008 22:52:58 +0200
+
+gcc-4.3 (4.3.1-9) unstable; urgency=low
+
+ * Update to SVN 20080814 from the gcc-4_3-branch.
+ - C++/libstdc++ regression fixes: PR c++/36688, PR c++/37016, PR c++/36999,
+ PR c++/36405, PR c++/36767, PR c++/36852.
+ - general regression fixes: PR target/36613, PR rtl-optimization/36998,
+ PR middle-end/37042, PR middle-end/35432, PR target/35659,
+ PR middle-end/37026, PR middle-end/36691, PR tree-optimization/36991,
+ PR rtl-optimization/35542, PR bootstrap/35752, PR rtl-optimization/36419,
+ PR debug/36278, PR preprocessor/36649, PR rtl-optimization/36929,
+ PR tree-optimization/36830, PR c/35746, PR middle-end/37014,
+ PR middle-end/37103.
+ - Fortran regression fixes: PR fortran/36132.
+ - Java regression fixes: PR libgcj/31890.
+ - Fixes PR middle-end/37090. Closes: #494815.
+
+ -- Matthias Klose <doko@debian.org> Thu, 14 Aug 2008 18:02:52 +0000
+
+gcc-4.3 (4.3.1-8) unstable; urgency=low
+
+ * Undo Revert PR tree-optimization/36262 on i386 (PR 36917 is invalid).
+
+ -- Matthias Klose <doko@debian.org> Fri, 25 Jul 2008 21:47:52 +0200
+
+gcc-4.3 (4.3.1-7) unstable; urgency=low
+
+ * Update to SVN 20080722 from the gcc-4_3-branch.
+ - Fix PR middle-end/36811, infinite loop building with -O3.
+ - C++/libstdc++ regression fixes: PR c++/36407, PR c++/34963,
+ PR libstdc++/36832, PR libstdc++/36552, PR libstdc++/36729.
+ - Fortran regression fixes: PR fortran/36366, PR fortran/36824.
+ - general regression fixes: PR middle-end/36877, PR target/36780,
+ PR target/36827, PR rtl-optimization/35281, PR rtl-optimization/36753,
+ PR target/36827, PR target/36784, PR target/36782, PR middle-end/36369,
+ PR target/36780, PR target/35492, PR middle-end/36811,
+ PR rtl-optimization/36419, PR target/35802, PR target/36736,
+ PR target/34780.
+ * Revert PR tree-optimization/36262 on i386, causing miscompilation of
+ OpenJDK hotspot.
+ * gij/gcj: Don't remove alternatives on upgrade. Addresses: #479950.
+
+ -- Matthias Klose <doko@debian.org> Tue, 22 Jul 2008 23:55:54 +0200
+
+gcc-4.3 (4.3.1-6) unstable; urgency=low
+
+ * Start the logwatch script on alpha as well to avoid timeouts in
+ the testsuite.
+
+ -- Matthias Klose <doko@debian.org> Mon, 07 Jul 2008 11:31:58 +0200
+
+gcc-4.3 (4.3.1-5) unstable; urgency=low
+
+ * Update to SVN 20080705 from the gcc-4_3-branch.
+ - Fix PR target/36634, wrong-code on powerpc with -msecure-plt.
+ * Fix PR target/35965, PIC + -fstack-protector on arm/armel. Closes: #469517.
+ * Don't run the libjava testsuite with -mabi=n32.
+ * Update patch for PR other/28322, that unknown -Wno-* options do not
+ cause errors, but warnings instead.
+ * On m68k, add -fgnu89-inline when in gnu99 mode (requested by Michael
+ Casadeval for the m68k port). Closes: #489234.
+
+ -- Matthias Klose <doko@debian.org> Sun, 06 Jul 2008 01:39:30 +0200
+
+gcc-4.3 (4.3.1-4) unstable; urgency=low
+
+ * Revert: debian/patches/gcc-multilib64dir.dpatch: Remove obsolete patch.
+ * Remove obsolete multiarch-lib patch.
+
+ -- Matthias Klose <doko@debian.org> Mon, 30 Jun 2008 23:05:17 +0200
+
+gcc-4.3 (4.3.1-3) unstable; urgency=medium
+
+ [Arthur Loiret]
+ * debian/rules2:
+ - configure sh4-linux with --with-multilib-list=m4,m4-nofpu
+ and --with-cpu=sh4.
+ - configure sparc-linux with --enable-targets=all on snapshot builds
+ (change already in 4.3.1-1).
+ * debian/rules.patch: Don't apply sh4-multilib.dpatch.
+
+ [Matthias Klose]
+ * Update to SVN 20080628 from the gcc-4_3-branch.
+ - Fix PR target/36533, wrong-code with incorrectly assumed aligned_operand.
+ Closes: #487115.
+ * debian/rules.defs: Remove hurd-i386 from ssp_no_archs (Samuel Thibault).
+ Closes: #483613.
+ * Do not create a /usr/lib/gcc/<target-arch>/4.3.0 symlink.
+ * debian/patches/gcc-multilib64dir.dpatch: Remove obsolete patch.
+ * libjava/classpath: Set and use EXTRA_CFLAGS (taken from the trunk).
+
+ -- Matthias Klose <doko@debian.org> Sat, 28 Jun 2008 16:00:38 +0200
+
+gcc-4.3 (4.3.1-2) unstable; urgency=low
+
+ * Update to SVN 20080610 from the gcc-4_3-branch.
+ - config.gcc: Fix quoting for in the enable_cld test.
+ * Use GNU locales on hurd-i386 (Samuel Thibault). Closes: #485395.
+ * libstdc++-doc: Fix URL's for locally installed docs. Closes: #485133.
+ * libjava: On armel apply kludge to fix unwinder infinitely looping 'til
+ it runs out of memory.
+ * Adjust dependencies to require GCC 4.3.1.
+
+ -- Matthias Klose <doko@debian.org> Wed, 11 Jun 2008 00:35:38 +0200
+
+gcc-4.3 (4.3.1-1) unstable; urgency=high
+
+ [Samuel Tardieu, Ludovic Brenta]
+ * debian/patches/pr16087.dpatch: new. Fixes: #248173.
+ * Correct the patches from the previous upload.
+
+ [Ludovic Brenta]
+ * debian/patches/ada-acats.dpatch: really run the just-built gnat, not the
+ bootstrap gnat.
+ * debian/rules2: when running the Ada test suite, do not run the multilib
+ tests as gnat does not support multilib yet.
+ * Run the ACATS testsuite again (patch it so it correctly finds gnatmake).
+
+ [Thiemo Seufer]
+ * debian/patches/ada-libgnatprj.dpatch,
+ debian/patches/ada-mips{,el}.dpatch: complete support for mips and mipsel.
+ Fixes: #482433.
+
+ [Matthias Klose]
+ * GCC-4.3.1 release.
+ * Do not include standard system paths in libgcj pkgconfig file.
+ * Suggest the correct libmudflap0-dbg package.
+ * Fix PR libjava/35020, taken from the trunk.
+ * Apply proposed patch for PR tree-optimization/36343.
+ * On hurd-i386 with -fstack-protector do not link with libssp_nonshared
+ (Samuel Thibault). Closes: #483613.
+ * Apply proposed patch for PR tree-optimization/34244.
+ * Remove debian-revision in symbols files.
+ * Fix installation of all biarch -multilib packages which are not triarch.
+ * Fix some lintian warnings.
+ * Include library symlinks in gobjc and gfortran multilib packages, when
+ not building the library packages.
+ * Fix sections in doc-base files.
+ * Don't apply the sparc-biarch patch when building the gcc-snapshot package.
+ * libjava: Add @file support for gjavah & gjar.
+ * Apply patch for PR rtl-optimization/36111, taken from the trunk.
+
+ * Closing reports reported against gcc-4.0 and fixed in gcc-4.3:
+ - General
+ + Fix PR optimization/3511, inlined strlen() could be smarter.
+ Close: #86251.
+ - C
+ + Fix PR c/9072, Split of -Wconversion in two different flags.
+ Closes: #128950, #226952.
+ - C++/libstdc++
+ + PR libstdc++/24660, implement versioning weak symbols in libstdc++.
+ Closes: #328421.
+ - Architecture specific:
+ - mips
+ + PR target/26560, unable to find a register to spill in class
+ 'FP_REGS'. Closes: #354439.
+ - sparc
+ + Fix PR rtl-optimization/23454, ICE in invert_exp_1. Closes: #340951.
+ * Closing reports reported against gcc-4.1 and fixed in gcc-4.2:
+ - General
+ + PR tree-optimization/30132, ICE in find_lattice_value. Closes: #400484.
+ + PR other/29534, ICE in "gcc -O -ftrapv" with decreasing array index.
+ Closes: #405065.
+ + Incorrect SSE2 code generation for vector initialization.
+ Closes: #406442.
+ + Fix segfault in cc1 due to infinite loop in error() when using -ftrapv.
+ Closes: #458072.
+ + Fix regression in code size with -Os compared to GCC-3.3.
+ Closes: #348298.
+ - C++
+ + Fix initialization of global variables with non-constant initializer.
+ Closes: #446067.
+ + Fix ICE building muse. Closes: #429385.
+ * Closing reports reported against gcc-4.1 and fixed in gcc-4.3:
+ - C++
+ + PR c++/28705, ICE: in type_dependent_expression_p. Closes: #406324.
+ + PR c++/7302, -Wnon-virtual-dtor should't complain of protected dtor.
+ Closes: #356316.
+ + PR c++/28316, PR c++/24791, PR c++/20133, ICE in instantiate_decl.
+ Closes: #327346, #355909.
+ - Fortran
+ + PR fortran/31639, ICE in gfc_conv_constant. Closes: #401496.
+ - Java
+ + Fix ICE using gcj with --coverage. Closes: #416326.
+ + PR libgcj/29869, LogManager class loading failure. Closes: #399251
+ + PR swing/29547 setText (String) of JButton does not work
+ with HTML code. Closes: #392791.
+ + PR libgcj/29178, CharsetEncoder.canEncode() gives different results
+ than Sun version. Closes: #388596.
+ + PR java/8923, ICE when modifying a variable decleared "final static".
+ Closes: #351512.
+ + PR java/22507, segfault building Apache Cocoon. Closes: #318534.
+ + PR java/2499, class members should be inherited from implemented
+ interfaces. Closes: #225434.
+ + PR java/10581, ICE compiling freenet. Closes: #186922.
+ + PR libgcj/28340, gij ignores -Djava.security.manager. Closes: #421098.
+ + PR java/32846, build failure on GNU/Hurd. Closes: #408888.
+ + PR java/29194, fails to import package from project. Closes: #369873.
+ + PR libgcj/31700, -X options not recognised by JNI_CreateJavaVM.
+ Closes: #426742.
+ + java.util.Calendar.setTimeZone fails to set ZONE_OFFSET.
+ Closes: #433636.
+ - Architecture specific:
+ - alpha
+ + C++, fix segfault in constructor with -Os. Closes: #438436.
+ - hppa
+ + PR target/30131, ICE in propagate_one_insn. Closes: #397341.
+ - m32r
+ + PR target/28508, assembler error (operand out of range).
+ Closes: #417542.
+ - m68k
+ + PR target/34688, ICE in output_operand. Closes: #459429.
+ * Closing reports reported against gcc-4.2 and fixed in gcc-4.3:
+ - General
+ + PR tree-optimization/33826, wrong code generation for infinitely
+ recursive functions. Closes: #445536.
+ - C++
+ + PR c++/24791, ICE on invalid instantiation of template's static member.
+ Closes: #446698.
+
+ [Aurelien Jarno]
+ * Really apply arm-funroll-loops.dpatch on arm and armel. Closes: #476460.
+
+ -- Matthias Klose <doko@debian.org> Sat, 07 Jun 2008 23:16:21 +0200
+
+gcc-4.3 (4.3.0-5) unstable; urgency=medium
+
+ * Update to SVN 20080523 from the gcc-4_3-branch.
+ - Remove gcc-i386-emit-cld patch.
+ - On Debian amd64 and i386 configure with --enable-cld.
+ * Fix PR tree-optimization/36129, ICE with -fprofile-use.
+ * Add spu build dependencies independent of the architecture.
+ * Move arm -funroll-loops fix to arm-funroll-loops from
+ gfortran-armel-updates. Apply it on both arm and armel.
+ Closes: #476460.
+ * Use iceape-dev as a build dependency for Java enabled builds.
+ * Build the sru cross compiler from a separate source dir without applying
+ the hardening patches.
+
+ -- Matthias Klose <doko@debian.org> Fri, 23 May 2008 10:12:02 +0200
+
+gcc-4.3 (4.3.0-4) unstable; urgency=low
+
+ [ Aurelien Jarno ]
+ * Fix gnat-4.3 build on mips/mipsel.
+ * Update libgcc1 symbols for hurd-i386.
+
+ [ Arthur Loiret ]
+ * Make gcc-4.3-spu Recommends newlib-spu. Closes: #476088
+ * Build depend on spu build dependencies only when building
+ as gcc-4.x source package.
+ * Disable spu for snapshot builds.
+ * Support sh4 targets:
+ - sh4-multilib.dpatch: Add, fix multilib (m4/m4-nofpu) for sh4-linux
+ - multiarch-include.dpatch: Don't apply on sh4.
+
+ [ Matthias Klose ]
+ * Stop building libffi packages.
+ * Update to SVN 20080501 from the gcc-4_3-branch.
+ - Fix PR target/35662, wrong gfortran code on mips/mipsel. Closes: #476427.
+ - Fixes mplayer build on powerpc. Closes: #475153.
+ * Stop building gij/gcj on alpha, arm and hppa. Closes: #459560.
+ * libstdc++6-4.3-doc: Fix file location in doc-base file. Closes: #476253.
+ * debian/patches/template.dpatch: Remove the `exit 0' line.
+ * Fix alternative names for amd64 cross builds. Addresses: #466422.
+ * debian/copyright: Update to GPLv3, remove the text of the GFDL
+ and reference the copy in common-licenses.
+ * Generate the locale data for the testsuite, if the locales package
+ is installed (not a dependency on all archs).
+ * Update libgcc2 symbols for m68k, libstdc++6 symbols for arm, m68k, mips
+ and mipsel.
+ * Do not include a symbols file for libobjc_gc.so.
+ * Add four more symbols to libgcj_bc, patch taken from the trunk.
+ * Adjust names of manual pages in the spu build on powerpc.
+ * ARM EABI (armel) updates (Andrew Jenner, Julian Brown):
+ - Add Objective-C support.
+ - Fortran support patches.
+ - Fix ICE in gfortran.dg/vector_subscript_1.f90 for -Os -mthumb reload.
+ * Build ObjC and Obj-C++ packages on armel.
+ * Reenable running the testsuite on m68k.
+
+ [Samuel Tardieu, Ludovic Brenta]
+ * debian/patches/gnalasup_to_lapack.dpatch: new.
+ * debian/patches/pr34466.dpatch,
+ debian/patches/pr22255.dpatch,
+ debian/patches/pr33688.dpatch,
+ debian/patches/pr10768.dpatch,
+ debian/patches/pr28305.dpatch,
+ debian/patches/pr17985.dpatch (#278685)
+ debian/patches/pr15915.dpatch,
+ debian/patches/pr16098.dpatch,
+ debian/patches/pr18680.dpatch,
+ debian/patches/pr28733.dpatch,
+ debian/patches/pr22387.dpatch,
+ debian/patches/pr29015.dpatch: new; backport Ada bug fixes from GCC 4.4.
+ * debian/patches/rules.patch: apply them.
+ * debian/patches/pr35050.dpatch: update.
+
+ [Andreas Jochens]
+ * debian/patches/ppc64-ada.dpatch: update, adding support for ppc64.
+ (#476868).
+
+ [Ludovic Brenta]
+ * Apply ppc64-ada.dpatch whenever we build libgnat, not just on ppc64.
+ * debian/patches/pr28322.dpatch: never pass -Wno-overlength-strings to
+ the bootstrap compiler, as the patch breaks the detection of whether
+ the bootstrap compiler supports this option or not.
+ Fixes: #471192. Works around #471767.
+ * Merge Aurélien Jarno's mips patch. Fixes: #472854.
+
+ [ Samuel Tardieu ]
+ * debian/patches/pr30740.dpatch: new Ada bug fix.
+ * debian/patches/pr35050.dpatch: new Ada bug fix.
+
+ [ Xavier Grave ]
+ * debian/patches/ada-mips{,el}.dpatch: new; split mips/mipsel support
+ into new patches, out of ada-sjlj.dpatch.
+ * debian/rules.d/binary-ada.mk: fix the version number of libgnarl-4.3.a.
+
+ [Roman Zippel]
+ * PR target/25343, fix gcc.dg/pch/pch for m68k.
+
+ -- Matthias Klose <doko@debian.org> Thu, 01 May 2008 21:08:09 +0200
+
+gcc-4.3 (4.3.0-3) unstable; urgency=medium
+
+ [ Matthias Klose ]
+ * Update to SVN 20080401 from the gcc-4_3-branch.
+ - Fix PR middle-end/35705 (hppa only).
+ * Update libstdc++6 symbols for hurd-i386. Closes: #472334.
+ * Update symbol files for libgomp (ppc64).
+ * Only apply the gcc-i386-emit-cld patch on amd64 and i386 architectures.
+ * Update libstdc++ baseline symbols for hppa.
+ * Install powerpc specific header files new in 4.3.
+ * gcc-4.3-hppa64: Don't include the install tools in the package.
+
+ [ Aurelien Jarno ]
+ * Fix gobjc-4.3-multilib dependencies. Closes: #473455.
+ * Fix gnat-4.3 build on mips/mipsel.
+ * patches/ada-alpha.dpatch: new patch to fix gnat-4.3 build on alpha.
+ Closes: #472852.
+ * patches/config-ml.dpatch: also check for n32 multidir.
+
+ [ Arthur Loiret ]
+ * Build-Depends on binutils (>= 2.18.1~cvs20080103-2) on mips and mipsel,
+ required for triarch.
+ * libstdc++-pic.dpatch: Update, don't fail anymore if shared lib is disabled.
+
+ [ Andreas Jochens ]
+ * Fix build failures on ppc64. Closes: #472917.
+ - gcc-multilib64dir.dpatch: Remove "msoft-float" and "nof" from MULTILIB
+ variables.
+ - Removed ppc64-biarch.dpatch.
+ - Add debian/lib32gfortan3.symbols.ppc64.
+
+ [ Arthur Loiret, Matthias Klose ]
+ * Build compilers for spu-elf target on powerpc and ppc64.
+ - Add gcc-4.3-spu, g++-4.3-spu and gfortran-4.3-spu packages.
+ - Partly based on the work in Ubuntu on the spu toolchain.
+
+ -- Matthias Klose <doko@debian.org> Tue, 01 Apr 2008 23:29:21 +0000
+
+gcc-4.3 (4.3.0-2) unstable; urgency=low
+
+ [Matthias Klose]
+ * Update to SVN 20080321 from the gcc-4_3-branch.
+ - Remove some broken code that attempts to enforce linker
+ constraints. Closes: #432541.
+ * Temporary fix, will be removed once a fixed kernel is available
+ in testing: Emit cld instruction when stringops are used (i386).
+ Do not expose the -mcld option until added upstream. Closes: #469567.
+ * Update NEWS files.
+ * libjava: Don't leak upon failed realloc (taken from the trunk).
+ * debian/rules2: The build is not yet prepared to take variables from
+ the environment; unexport and unset those.
+
+ [Arthur Loiret/Aurelien Jarno]
+ * MIPS tri-arch support:
+ - mips-triarch.dpatch: new patch to default to o32 and follow the
+ glibc convention for n32 & 64 bit names.
+ - Rename $(biarch) and related vars into $(biarch64).
+ - Fix biarchsubdir to allow triarch.
+ - Add biarchn32 support.
+ - Add mips and mipsel to biarch64 and biarchn32 archs.
+ - Update binary rules for biarchn32 and libn32 targets.
+ - Fix multilib deps for triarch.
+ - control.m4: Add libn32 packages.
+
+ -- Matthias Klose <doko@debian.org> Sat, 22 Mar 2008 00:06:33 +0100
+
+gcc-4.3 (4.3.0-1) unstable; urgency=low
+
+ [Matthias Klose]
+ * GCC-4.3.0, final release.
+ * Update to SVN 20080309 from the gcc-4_3-branch.
+ * Build from a modified tarball, without GFDL documentation with
+ invariant sections and cover texts.
+ * debian/rules.unpack: Avoid make warnings.
+ * debian/rules.d/binary-cpp.mk: Add 4.3.0 symlink in gcclibdir.
+ * Stop building treelang (removed upstream).
+ * gcj-4.3: Hardcode libgcj-bc dependency, don't run dh_shlibdeps on ecj1.
+
+ [Aurelien Jarno]
+ * Update libssp-gnu.dpatch and reenable it.
+
+ -- Matthias Klose <doko@debian.org> Sun, 09 Mar 2008 15:18:08 +0100
+
+gcc-4.3 (4.3.0~rc2-1) unstable; urgency=medium
+
+ * Update to SVN 20080301 from the gcc-4_3-branch.
+ * Include the biarch libobjc_gc library in the packages.
+ * Link libobjc_gc with libgcjgc_convenience.la.
+ * Add new symbols to libstdc++6 symbol files, remove the symbols for
+ <system_error> support (reverted upstream for the 4.3 branch).
+ * Disable running the testsuite on m68k.
+ * Update PR other/28322, ignore only unknown -W* options.
+
+ -- Matthias Klose <doko@debian.org> Sat, 01 Mar 2008 15:09:16 +0100
+
+gcc-4.3 (4.3-20080227-1) unstable; urgency=low
+
+ [Matthias Klose]
+ * Update to SVN 20080227 from the gcc-4_3-branch.
+ * Fix PR other/28322, GCC new warnings and compatibility.
+ Addresses: #367657.
+
+ [Hector Oron]
+ * Fix cross-compile builds. Closes: #467471.
+
+ -- Matthias Klose <doko@debian.org> Thu, 28 Feb 2008 00:30:38 +0100
+
+gcc-4.3 (4.3-20080219-1) unstable; urgency=medium
+
+ [Matthias Klose]
+ * Update to SVN 20080219 from the gcc-4_3-branch.
+ * Apply proposed patch for PR target/34571 (alpha).
+ * libgcj9-dev: Don't claim that the package contains the static
+ libraries.
+ * libjava-xulrunner1.9.dpatch: Add configure check for xulrunner-1.9.
+ Name the alternative xulrunner-1.9-javaplugin.so.
+ * libgcj-doc: Don't include the examples; these cannot be built
+ with the existing Makefile anyway. Addresses: #449608.
+ * Manpages for gc-analyze and grmic are GFDL. Don't include these when
+ building DFSG compliant packages.
+ * Fix build failure building amd64 cross-target libstdc++ packages
+ (Tim Bagot). Addresses: #464365.
+ * Fix typos in rename-info-files patch (Richard Guenther).
+ * Fix PR libgcj/24170.
+
+ [Aurelien Jarno]
+ * kbsd-gnu-ada.dpatch: new patch to fix build on GNU/kFreeBSD.
+
+ [Ludovic Brenta]
+ * debian/rules.defs: Temporarily disable the testsuite when building gnat.
+ * debian/patches/libffi-configure.dpatch: run autoconf in the top-level
+ directory, where we've changed configure.ac; not in src/gcc.
+ * debian/patches/ada-sjlj.dpatch: do not run autoconf since we don't
+ change configure.ac.
+ * debian/control.m4 (gnat-4.3-doc): conflict with gnat-4.[12]-doc.
+ Closes: #464801.
+
+ -- Matthias Klose <doko@debian.org> Tue, 19 Feb 2008 23:20:45 +0000
+
+gcc-4.3 (4.3-20080202-1) unstable; urgency=low
+
+ [ Matthias Klose ]
+ * Update to SVN 20080202 from the trunk.
+ - Fix PR c/35017, pedwarns about valid code. Closes: #450506.
+ - Fix PR target/35045, wrong code generation with -O3 on i386.
+ Closes: #463478.
+ * gcj-4.3: On armel depend on g++-4.3.
+ * Re-enable build of libobjc_gc, using the internal version of boehm-gc.
+ Closes: #212248.
+
+ [Ludovic Brenta]
+ * debian/patches/ada-default-project-path.dpatch,
+ debian/patches/ada-gcc-name.dpatch,
+ debian/patches/ada-symbolic-tracebacks.dpatch,
+ debian/patches/ada-link-lib.dpatch,
+ debian/patches/ada-libgnatvsn.dpatch,
+ debian/patches/ada-libgnatprj.dpatch,
+ debian/patches/ada-sjlj.dpatch: adjust to GCC 4.3.
+ * debian/README.gnat, debian/TODO,
+ debian/rules.d/binary-ada.mk: merge from gnat-4.2.
+ * debian/README.maintainers: add instructions for patching GCC.
+ * debian/patches/ada-driver.dpatch: remove, no longer used.
+ * debian/patches/libffi-configure.dpatch: do not patch the top-level
+ configure anymore; instead, rerun autoconf. This allows removing the
+ patch cleanly.
+ * debian/rules2: use gnatgcc as the bootstrap compiler, not gcc-4.2.
+
+ -- Matthias Klose <doko@debian.org> Sat, 02 Feb 2008 19:58:48 +0100
+
+gcc-4.3 (4.3-20080127-1) unstable; urgency=low
+
+ [ Matthias Klose ]
+ * Update to SVN 20080126 from the trunk.
+ * Tighten build dependency on doxygen.
+ * Update libstdc++ patches to current svn.
+ * gij-4.3: Provide java*-runtime-headless instead of java*-runtime.
+
+ [ Aurelien Jarno]
+ * debian/multiarch.inc: change mipsel64 into mips64el.
+
+ -- Matthias Klose <doko@debian.org> Sun, 27 Jan 2008 01:33:35 +0100
+
+gcc-4.3 (4.3-20080116-1) unstable; urgency=medium
+
+ * Update to SVN 20080116 from the trunk.
+ * Update debian/watch.
+ * Build libgomp documentation without building libgomp. Addresses: #460660.
+ * Handle lzma compressed tarballs.
+ * Fix dependency generation for the gcc-snapshot package: Addresses: #454667.
+ * Restore lost chunk in libjava-subdir.dpatch.
+
+ -- Matthias Klose <doko@debian.org> Wed, 16 Jan 2008 20:33:50 +0100
+
+gcc-4.3 (4.3-20080112-1) unstable; urgency=low
+
+ * Update to SVN 20080112 from the trunk.
+ * Tighten build-dependency on dpkg-dev (closes: #458894).
+ * Update symbol definitions for alpha.
+ * Build-depend on libmpfr-dev for all source packages.
+
+ -- Matthias Klose <doko@debian.org> Sun, 13 Jan 2008 00:40:28 +0100
+
+gcc-4.3 (4.3-20080104-1) unstable; urgency=low
+
+ * Update to SVN 20080104 from the trunk.
+ * Update symbol definitions for alpha, hppa, ia64, mips, mipsel, powerpc,
+ s390, sparc.
+
+ -- Matthias Klose <doko@debian.org> Fri, 04 Jan 2008 07:34:15 +0100
+
+gcc-4.3 (4.3-20080102-1) unstable; urgency=low
+
+ [ Matthias Klose ]
+ * Update to SVN 20080102 from the trunk.
+ - Fix 64bit biarch builds (addresses: #447443).
+ * debian/rules.d/binary-java.mk: Reorder packaging to get shlibs
+ dependencies right.
+ * Use lib instead of lib64 as multilibdir on amd64 and ppc64.
+ * Build the java plugin always using libxul-dev.
+ * Add libgcj_bc to the libgcj9-0 shlibs file.
+ * Add symbol files for libgcc1, lib32gcc1, lib64gcc1, libstdc++6,
+ lib32stdc++6, lib64stdc++6, libgomp1, lib32gomp1, lib64gomp1, libffi4,
+ lib32ffi4, lib64ffi4, libobjc2, lib32objc2, lib64objc2, libgfortran3,
+ lib32gfortran3, lib64gfortran3.
+ Adjust build dependencies on dpkg-dev and debhelper.
+ * Do not build the java packages from the gcc-4.3 source package.
+
+ [ Aurelien Jarno ]
+ * Disable amd64-biarch patch on kfreebsd-amd64.
+
+ -- Matthias Klose <doko@debian.org> Wed, 02 Jan 2008 23:48:14 +0100
+
+gcc-4.3 (4.3-20071124-1) experimental; urgency=low
+
+ [ Matthias Klose ]
+ * Update to SVN 20071124 from the trunk.
+ * Fix dependencies of lib*gcc1-dbg packages.
+ * gcjwebplugin: Fix path of the gcj subdirectory. LP: #149792.
+ * gij-hppa: Call gij-4.2, not gij-4.1. Addresses: #446282.
+ * Don't run the testsuite on hppa when expect-tcl8.3 is not available.
+ * Fix libgcc1-dbg doc directory symlink. Closes: #447969.
+
+ [ Aurelien Jarno ]
+ * Update kbsd-gnu patch.
+ * Remove kbsd-gnu-ada patch (merged upstream).
+
+ -- Matthias Klose <doko@debian.org> Sat, 24 Nov 2007 13:14:29 +0100
+
+gcc-4.3 (4.3-20070930-1) experimental; urgency=low
+
+ [Matthias Klose]
+ * Update to SVN 20070929 from the trunk.
+ * Update debian patches to the current trunk.
+ * Regenerate the control file.
+ * On powerpc-linux-gnu and i486-linux-gnu cross-compile the 64bit
+ multilib libraries to allow a sucessful build on 32bit kernels
+ (our buildds). Although we won't get 64bit test results this way ...
+ * Remove the build dependency on expect-tcl8.3.
+ * Fix MULTILIB_OSDIRNAMES for cross builds targeted for amd64 and ppc64.
+ * When -fstack-protector is the default (Ubuntu), do not enable
+ -fstack-protector when -nostdlib is specified. LP: #77865.
+ * Always set STAGE1_CFLAGS to -g -O2, only pass other settings
+ when configuring when required.
+ * Configure --with-bugurl, adjust the bug reporting instructions.
+ * gcc-4.3: Install new cpuid.h header.
+ * Fix installation of the s390 libstdc++ biarch headers.
+ * Install new bmmintrin.h, mmintrin-common.h headers.
+ * Build -dbg packages for libgcc, libgomp, libmudflap, libffi, libobjc,
+ libgfortran.
+ * Downgrade libmudflap-dev recommendation to a suggestion. Closes: #443929.
+
+ [Riku Voipio]
+ * Configure armeabi with --disable-sjlj-exceptions.
+ * armel testsuite takes ages, adjust build accordingly.
+
+ -- Matthias Klose <doko@debian.org> Sun, 30 Sep 2007 12:06:02 +0200
+
+gcc-4.3 (4.3-20070902-1) experimental; urgency=low
+
+ * Upload to experimental.
+
+ -- Matthias Klose <doko@debian.org> Sun, 2 Sep 2007 20:51:16 +0200
+
+gcc-4.3 (4.3-20070902-0ubuntu1) gutsy; urgency=low
+
+ * Update to SVN 20070902 from the trunk.
+ * Fix the build logic for the Ubuntu i386 buildd; we can't build biarch.
+ * Only remove libgcj9's classmap db if no other libgcj9* library is
+ installed.
+ * A lot more updates for 4.3 packaging.
+
+ -- Matthias Klose <doko@ubuntu.com> Sat, 01 Sep 2007 21:01:43 +0200
+
+gcc-4.3 (4.3-20070901-0ubuntu1) gutsy; urgency=low
+
+ * Update to SVN 20070901 from the trunk.
+ * First gcc-4.3 package build.
+ - Update patches for the *-linux-gnu builds.
+ - Update build files for 4.3.
+ * Add proposed patch for PR middle-end/33029.
+ * gcj-4.3: Install gc-analyze.
+
+ -- Matthias Klose <doko@ubuntu.com> Sat, 1 Sep 2007 20:52:16 +0200
+
+gcc-4.2 (4.2.2-7) unstable; urgency=low
+
+ * Update to SVN 20080114 from the ubuntu/gcc-4_2-branch.
+ - Fix PR middle-end/34762. LP: #182412.
+ * Update debian/watch. Closes: #459259. Addresses: #459391, #459392.
+ * Build libgomp documentation without building libgomp. Closes: #460660.
+ * Restore gomp development files. Closes: #460736.
+
+ -- Matthias Klose <doko@debian.org> Mon, 14 Jan 2008 23:20:04 +0100
+
+gcc-4.2 (4.2.2-6) unstable; urgency=low
+
+ * Update to SVN 20080113 from the ubuntu/gcc-4_2-branch.
+ * Adjust build-dependency on debhelper, dpkg-dev.
+ * Fix gnat-4.2 build failure (addresses: #456867).
+ * Do not build packages built from the gcc-4.3 source.
+
+ -- Matthias Klose <doko@debian.org> Sun, 13 Jan 2008 13:48:49 +0100
+
+gcc-4.2 (4.2.2-5) unstable; urgency=low
+
+ [Matthias Klose]
+ * Update to SVN 20080102 from the ubuntu/gcc-4_2-branch.
+ - Fix PR middle-end/32889, ICE in delete_output_reload.
+ Closes: #444873, #445336, #451047.
+ - Fix PR target/34215, ICE in assign_386_stack_local.
+ Closes: #446714, #452451.
+ - Fix PR target/33848, reference to non-existent label at -O1 on
+ mips/mipsel. Closes: #441633.
+ * debian/rules.d/binary-java.mk: dpkg-shlibsdeps can't handle the dangling
+ symlink to libgcj_bc.so.1. Remove it temporarily.
+ * Add libgcj_bc to the libgcj8-1 shlibs file.
+ * Fix build failures for gnat-4.2, gpc-4.2, gdc-4.2 introduced by recent
+ gdc changes.
+ * Add symbol files for libgcc1, lib32gcc1, lib64gcc1, libstdc++6,
+ lib32stdc++6, lib64stdc++6, libgomp1, lib32gomp1, lib64gomp1, libffi4,
+ lib32ffi4, lib64ffi4, libobjc2, lib32objc2, lib64objc2. Adjust build
+ dependencies on dpkg-dev and debhelper.
+ Adjust build-dependency on dpkg-dev.
+
+ [Arthur Loiret]
+ * Fix gdc-4.2 build failure.
+ * Update gdc to upstream SVN 20071124.
+ - d-bi-attrs: Support attributes on declarations in other modules.
+ - d-codegen.cc (IRState::attributes): Support constant declarations as
+ string arguments.
+ * Enable libphobos:
+ - gdc-4.2.dpatch: Fix ICEs.
+ - gdc-4.2-build.dpatch: Update, make it cleaner.
+ * Install libphobos in the private gcc lib dir.
+ * gdc-4.2.dpatch: Update from gdc-4.1.dpatch.
+ - gcc/tree-sra.c: Do not use SRA on structs with aliased fields created
+ for anonymous unions.
+ - gcc/predict.c: Add null-pointer check.
+ * debian/rules.defs: Disable phobos on hurd-i386.
+ - gdc-hurd-proc_maps.dpatch: Remove.
+
+ -- Matthias Klose <doko@debian.org> Wed, 02 Jan 2008 15:49:30 +0100
+
+gcc-4.2 (4.2.2-4) unstable; urgency=low
+
+ [Matthias Klose]
+ * Update to SVN 20071123 from the ubuntu/gcc-4_2-branch.
+ - Fix PR middle-end/34130, wrong code with some __builtin_abs expressions.
+ Closes: #452108.
+ * Don't run the testsuite on hppa when expect-tcl8.3 is not available.
+ * Fix libgcc1-dbg doc directory symlink. Closes: #447969.
+ * Use gcc-multilib as build-dependency instead of gcc-4.1-mulitlib.
+ * Support for fast-math on hurd-i386 (Michael Banck). Closes: #451520.
+ * Fix again profiling support on the Hurd (Thomas Schwinge). Closes: #434937.
+
+ [Arthur Loiret]
+ * Merge gdc-4.1 patches and build infrastructure:
+ - gdc-4.2.dpatch: Add, setup gcc-4.2.x for D.
+ - gdc-4.2-build.dpatch: Add, update gdc builtins and driver objs.
+ - gdc-driver-zlib.dpatch: Add, use up-to-date system zlib.
+ - gdc-driver-defaultlib.dpatch: Add, add -defaultlib/-debuglib switches.
+ - gdc-driver-nophobos.dpatch: Add, disable libphobos when unsupported.
+ - gdc-libphobos-build.dpatch: Add, enable libphobos build when supported.
+ - gdc-fix-build.dpatch: Add, fix build on non-biarched 64bits targets.
+ - gdc-libphobos-std-format.dpatch: Add, replace assert when formating a
+ struct on non-x86_64 archs by a FormatError.
+ - gdc-arm-unwind_ptr.dpatch: Add, fix build on arm.
+ - gdc-mips-gcc-config.dpatch: Add, fix build on mips.
+ - gdc-hurd-proc_maps.dpatch: Add, fix build on hurd.
+
+ -- Matthias Klose <doko@debian.org> Sat, 24 Nov 2007 12:01:06 +0100
+
+gcc-4.2 (4.2.2-3) unstable; urgency=low
+
+ * Update to SVN 20071014 from the ubuntu/gcc-4_2-branch.
+ - Fix build failure in libjava on mips/mipsel.
+ * Make 4.2.2-2 a requirement for frontends built from separate sources.
+ Addresses: #446596.
+
+ -- Matthias Klose <doko@debian.org> Sun, 14 Oct 2007 14:13:00 +0200
+
+gcc-4.2 (4.2.2-2) unstable; urgency=low
+
+ * Update to SVN 20071011 from the ubuntu/gcc-4_2-branch.
+ - Fix PR middle-end/33448, ICE in create_tmp_var. Closes: #439687.
+ - Remove debian/patches/pr31899.dpatch, applied upstream.
+ - Remove debian/patches/pr33381.dpatch, applied upstream.
+ * gij-hppa: Call gij-4.2, not gij-4.1. Addresses: #446282.
+
+ -- Matthias Klose <doko@debian.org> Thu, 11 Oct 2007 23:41:52 +0200
+
+gcc-4.2 (4.2.2-1) unstable; urgency=low
+
+ * Update to SVN 20071008 from the ubuntu/gcc-4_2-branch, corresponding
+ to the GCC-4.2.2 release.
+ * Fix dependencies of lib*gcc1-dbg packages. Closes: #445190.
+ * Remove libjava-armeabi patch integrated upstream.
+ * gcjwebplugin: Fix path of the gcj subdirectory. LP: #149792.
+ * Apply proposed patch for PR debug/31899. Closes: #445268.
+
+ * Add niagara2 optimization support (David Miller).
+
+ -- Matthias Klose <doko@debian.org> Mon, 08 Oct 2007 21:12:41 +0200
+
+gcc-4.2 (4.2.1-6) unstable; urgency=high
+
+ [Matthias Klose]
+ * Update to SVN 20070929 from the ubuntu/gcc-4_2-branch.
+ - Fix PR middle-end/33382, ICE (closes: #441481).
+ - Fix PR tree-optimization/28544 (4.2.1, closes: #380482).
+ - Fix PR libffi/28313, port to mips64 (closes: #358235).
+ * Fix PR tree-optimization/33099, PR tree-optimization/33381,
+ wrong code generation with VRP/SCEV. Closes: #440545, #443576.
+ * Update Hurd fixes (Samuel Thibault).
+ * When -fstack-protector is the default (Ubuntu), do not enable
+ -fstack-protector when -nostdlib is specified. LP: #77865.
+ * Add -g to BOOT_CFLAGS, set STAGE1_CFLAGS to -g -O, only pass
+ other settings when required.
+ * Fix installation of the s390 libstdc++ biarch headers.
+ * Allow the powerpc build on a 32bit machine (without running the
+ biarch testsuite).
+ * Build -dbg packages for libgcc, libgomp, libmudflap, libffi, libobjc,
+ libgfortran.
+ * Drop the build dependency on expect-tcl8.3 (the hppa testsuite seems
+ to complete sucessfully with the expect package).
+ * Downgrade libmudflap-dev recommendation to a suggestion. Closes: #443929.
+
+ * Closing reports reported against gcc-4.1 and fixed in gcc-4.2:
+ - General
+ + PR rtl-optimization/21299, error in invalid asm statement.
+ Closes: #380121.
+ - C++
+ + PR libstdc++/19664, libstdc++ headers have pop/push of the visibility
+ around the declarations (closes: #307207, #324290, #423547).
+ + PR c++/21581, functions in anonymous namespaces default to "hidden"
+ visibility (closes: #278310).
+ + PR c++/4882, specialization of inner template using outer template
+ argument (closes: #269513).
+ + PR c++/6634, wrong parsing of "long long double" (closes: #247112).
+ + PR c++/10891, code using dynamic_cast causes segfaults when -fno-rtti
+ is used (closes: #188943).
+ + PR libstdc++/14991, stream::attach(int fd) porting entry out-of-date.
+ Closes: #178561.
+ + PR libstdc++/31638, string usage leads to warning with -Wcast-align.
+ Closes: #382153.
+ + Fix memory hog seen with g++-4.1. Closes: #411234.
+ - Fortran
+ + PR fortran/29228, ICE in gfc_trans_deferred_array (closes: #387222).
+ + PR fortran/24285, allow dollars everywhere in format (closes: #324600).
+ + PR libfortran/28354, 0.99999 printed as 0. instead of 1. by
+ format(f3.0). Closes: #397671.
+ + Fix ICE in gfc_get_extern_function_decl (closes: #396292).
+ - Architecture specific:
+ - i386
+ + Fix error with -m64 (unable to find a register to spill in class
+ 'DIREG'). Closes: #430049.
+ - mips
+ + Fix ICE in tsubst (closes: #422303).
+ - s390
+ + Fix ICE (segmentation fault) building dcmtk (closes: #435736).
+
+ [Roman Zippel]
+ * Update the m68k patches.
+
+ [Riku Voipio]
+ * Configure armeabi with --disable-sjlj-exceptions.
+ * armel testsuite takes ages, adjust build accordingly.
+
+ [Ludovic Brenta and Xavier Grave]
+ * Add a version of the Ada run-time library using the setjump/longjump
+ exception handling mechanism (static library only). Use with
+ gnatmake --RTS=sjlj. Particularly useful for distributed (Annex E)
+ programs.
+ * Restore building libgnatvsn-dev and libgnatprj-dev.
+
+ -- Matthias Klose <doko@debian.org> Sat, 29 Sep 2007 11:19:40 +0200
+
+gcc-4.2 (4.2.1-5) unstable; urgency=low
+
+ * Update to SVN 20070825 from the ubuntu/gcc-4_2-branch.
+ - Fix PR debug/32610, LP: #121911.
+ * Apply proposed patches:
+ - Improve debug info for packed arrays with constant bounds
+ (PR fortran/22244).
+ - Fix ICE in rtl_for_decl_init on const vector initializers
+ (PR debug/32914).
+ - Fix (neg (lt X 0)) optimization (PR rtl-optimization/33148).
+ - Fix libgcc.a(tramp.o) on ppc32.
+ - Fix redundant reg/mem stores/moves (PR target/30961).
+ * Update the -fdirectives-only backport.
+ * gappletviewer-4.2: Include the gcjwebplugin binary. LP: #131114.
+ * Update gpc patches and build support (not yet enabled).
+ * Fix gcc-snapshot hppa64 install target.
+ * Set the priority of the source package to optional.
+ * Remove .la files from the biarch libstdc++ debug packages,
+ conflict with the 3.4 package. Closes: #440490.
+
+ [Arthur Loiret]
+ * Add build support for GDC.
+
+ -- Matthias Klose <doko@debian.org> Mon, 27 Aug 2007 01:39:32 +0200
+
+gcc-4.2 (4.2.1-4) unstable; urgency=medium
+
+ * gcc-4.2: Include missing std*.h header files.
+
+ -- Matthias Klose <doko@debian.org> Tue, 14 Aug 2007 11:14:35 +0200
+
+gcc-4.2 (4.2.1-3) unstable; urgency=low
+
+ * Update to SVN 20070812 from the ubuntu/gcc-4_2-branch.
+ * debian/rules.defs: Fix typo, run the checks in biarch mode too.
+ * libgcj8-awt: Loosen dependency on gcj-4.2-base.
+ * Build only needed multilib libraries when building as gcj or gnat.
+ * Always build biarch libgomp in biarch builds.
+ * debian/rules2: Adjust testsuite logs files for logwatch.sh.
+ * Include header files from $/gcc_lib_dir)/include-fixed.
+ * Backport from trunk: -fdirectives-only (when preprocessing, handle
+ directives, but do not expand macros).
+ * Report an ICE to apport (if apport is available and the environment
+ variable GCC_NOAPPORT is not set)
+ * Fix gcj build failure on the Hurd (Samuel Thibault). Closes: #437470.
+
+ -- Matthias Klose <doko@debian.org> Sun, 12 Aug 2007 21:11:00 +0200
+
+gcc-4.2 (4.2.1-2) unstable; urgency=low
+
+ [Matthias Klose]
+ * Update to SVN 20070804 from the ubuntu/gcc-4_2-branch (20070804):
+ - Merge gcc-4_2-branch SVN 20070804.
+ - Imported classpath CVS 20070727.
+ - Bump the libgcj soname, add conflict with java-gcj-compat (<< 1.0.76-4).
+ - Remove patches integrated in the branches: pr32862.
+ - Update patches: libjava-subdir, libjava-jar.
+ - Add regenerated class files: svn-class-updates.
+
+ * Fix profiling support on the Hurd (Michael Casadeval). Closes: #434937.
+ * Fix build on kfreebsd-amd64 (Aurelien Jarno). Closes: #435053.
+ * Period of grace is over, run the testsuite on m68k-linux again.
+ * Update infrastructure for the gcc-source package (Bastian Blank).
+ * Update profiling on the Hurd (Samuel Thibault, Michael Casadevall).
+ Closes: #433539.
+ * debian/rules2: Allow DEB_BUILD_OPTIONS=parallel=<n> to overwrite NJOBS.
+ * Allow lang=<l1>,<l2> nolang=<l3,l4> in DEB_BUILD_OPTIONS; deprecating
+ WITHOUT_LANG, and WITHOUT_CHECK.
+ * debian/rules.defs, debian/rules.conf: Cache some often used macros.
+
+ * Preliminary work: Enable Java for ARM EABI (Andrew Haley), build
+ libffi for armel.
+ * gcj: Don't build the browser plugin in gcc-snapshot builds to get
+ rid of the xulrunner dependency.
+ * gcjwebplugin: Register for more browsers (package currently not built).
+ * gij/boehm-gc: Use sysconf as fallback, if reading /proc/stat fails.
+ Closes: #422469.
+ * libjava: Avoid dependency on MAXHOSTNAMELEN (Samuel Thibault).
+ * gcj: On arm and armel, use the ecj1 binary built from the ecj package.
+ * gcj: Don't require javac without java maintainer mode, remove build
+ dependencies on gcj and ecj, add build dependency on libecj-java.
+
+ -- Matthias Klose <doko@debian.org> Sun, 05 Aug 2007 15:56:07 +0200
+
+gcc-4.2 (4.2.1-1) unstable; urgency=medium
+
+ [Ludovic Brenta]
+ * debian/patches/ada-symbolic-tracebacks.c: remove all trace of
+ the function convert_addresses from adaint.c. Fixes FTBFS on alpha,
+ s390 and possibly other platforms. Closes: #433633.
+ * debian/control.m4: list myself as uploader if the source package name
+ is gnat. Relax build-dependency on gnat-4.2-source.
+ * debian/control.m4, debian/rules.conf: Build-depend on libmpfr-dev only
+ if building Fortran.
+
+ [Matthias Klose]
+ * debian/rules.conf: Fix breakage of Fortran build dependencies introduced
+ by merge of the Ada bits.
+ * Don't include the gccbug binary anymore in the gcc package; upstream bug
+ reports should be reported to the upstream bug tracker at
+ http://gcc.gnu.org/bugzilla.
+ * Don't build and test libjava for the biarch architecture.
+ * Install gappletviewer man page. Addresses: #423094.
+ * debian/patches/m68k-java.dpatch: Readd.
+ * gjar: support @ arguments.
+ * Update to SVN 20070726 from the ubuntu/gcc-4_2-branch.
+ - Fix mips/mipsel builds.
+ * libmudflap0: Fix update leaving an empty doc dir. Closes: #428306.
+ * arm/armel doesn't have ssp support. Closes: #433172.
+ * Update kbsd-gnu-ada patch (Aurelien Jarno): Addresses: #434754.
+ * gcj-4.2: Build depend on gcj-4.2 to build the classpath examples files
+ for the binary-indep target.
+ * Fix PR java/32862, bugs in EnumMap implementation. Addresses: #423160.
+
+ [Arthur Loiret]
+ * Fix cross builds targeting x86_64. Closes: LP: #121834.
+
+ -- Matthias Klose <doko@debian.org> Thu, 26 Jul 2007 21:46:03 +0200
+
+gcc-4.2 (4.2.1-0) unstable; urgency=low
+
+ [Matthias Klose]
+ * Update to SVN 20070719 from the ubuntu/gcc-4_2-branch, corresponding
+ to the GCC-4.2.1 release.
+ - debian/patches/arm-gij.dpatch: Remove. Closes: #433714.
+ * Apply proposed patch for PR tree-optimization/32723.
+ * Tighten build dependency on libmpfr-dev.
+ * On ia64, apply proposed patch for PR target/27880. Closes: #433719.
+
+ [Hector Oron]
+ * Fix cross and reverse-cross builds. Closes: #432356.
+
+ -- Matthias Klose <doko@debian.org> Thu, 19 Jul 2007 17:59:37 +0200
+
+gnat-4.2 (4.2-20070712-1) unstable; urgency=low
+
+ * debian/rules.d/binary-ada.mk, debian/control.m4:
+ disable building libgnatvsn-dev and libgnatprj-dev, as they conflict
+ with packages from gnat-4.1. Will reenable them for the transition to
+ gnat-4.2.
+ * Upload as gnat-4.2. Closes: #432525.
+
+ -- Ludovic Brenta <lbrenta@debian.org> Sat, 14 Jul 2007 15:12:34 +0200
+
+gcc-4.2 (4.2-20070712-1) unstable; urgency=high
+
+ [Matthias Klose]
+ * Update to SVN 20070712 from the ubuntu/gcc-4_2-branch.
+ - 4.2.1 RC2, built from SVN.
+ - same as gcc-4_2-branch, plus backport of gcc/java, boehm-gc, libffi,
+ libjava, zlib from the trunk.
+ - debian/patches/arm-libffi.dpatch: Remove.
+ - Fixes ICE in update_equiv_regs. Closes: #432604.
+ * debian/control.m4: Restore build dependency on dejagnu.
+ * debian/patches/arm-gij.dpatch: Update.
+ * i386-biarch.dpatch: Update for the backport for PR target/31868.
+ Closes: #432599.
+
+ -- Matthias Klose <doko@debian.org> Fri, 13 Jul 2007 08:07:51 +0200
+
+gcc-4.2 (4.2-20070707-1) unstable; urgency=low
+
+ [Matthias Klose]
+ * Update to SVN 20070707 from the ubuntu/gcc-4_2-branch.
+ - debian/patches/libjava-soname.dpatch: Remove.
+ - debian/patches/disable-configure-run-check.dpatch: Update.
+ * Only suggest multilib packages on multilib architectures.
+ * Point ICE messages to the 4.2 docdir.
+ * Explicitely use fastjar to build gcj-4.1. Addresses: #416001.
+ * Configure with --enable-libgcj on m32r (Kazuhiro Inaoka).
+ * Include the hppa64 cross compiler on hppa snapshot builds.
+ * debian/patches/arm-libffi.dpatch: Update.
+ * libgcj-doc: Include the generated documentation.
+ * Fix building the libjava/classpath examples.
+ * Support reverse cross builds (Neil Williams). Closes: #431086.
+
+ -- Matthias Klose <doko@debian.org> Sat, 07 Jul 2007 10:59:26 +0200
+
+gcc-4.2 (4.2-20070627-1) unstable; urgency=high
+
+ [Matthias Klose]
+ * Update to SVN gcc-4_2-branch/20070626.
+ * Update to SVN trunk/20070626 (gcc/java, libjava, libffi, boehm-gc).
+ * On mips*-linux, always imply -lpthread for -pthread (Thiemo Seufer).
+ Addresses: #428741.
+ * Fix libstdc++ cross builds (Arthur Loiret). Closes: #430395.
+ * README.Debian: Point to debian-toolchain for general toolchain topics.
+ * Use the generated locales for the libstdc++ build to fix the setting
+ of the gnu locale model. Closes: #428926, #429660.
+ * For ix86 lpia targets, configure --with-tune=i586.
+ * Make build dependency on gcc-4.1-multilib architecture specific.
+ * Do not ignore bootstrap comparision failure on ia64.
+
+ [Ludovic Brenta]
+ * ada-link-lib.dpatch: update to apply cleanly on GCC 4.2.
+ * ada-libgnat{vsn,prj}.dpatch: adjust to GCC 4.2. Reenable in rules.patch.
+ * rules.conf: do not build libgomp as part of gnat-4.2.
+ * rules.conf, control.m4: build-depend on libz-dev, lib32z-dev or
+ lib64-dev only when building Java.
+ * rules2, rules.defs: $(with_mudflap): remove, use $(with_libmudflap) only.
+ * config.m4, binary-ada.mk: tighten dependencies; no Ada package depends
+ on gcc-4.2-base anymore.
+ * TODO: rewrite.
+ * README.gnat: include in gnat-4.2-base. Remove outdated information.
+ * README.maintainers: new. Include in gnat-4.2-base.
+
+ [Hector Oron]
+ * Merge DEB_CROSS_INDEPENDENT with DEB_CROSS.
+ * Disables libssp0 for arm and armel targets when cross compiling.
+ * Updates README.cross.
+ * Fixes linker mapping problem on binary-libstdcxx-cross.mk. Closes: #430688.
+
+ -- Matthias Klose <doko@debian.org> Wed, 27 Jun 2007 21:54:08 +0200
+
+gcc-4.2 (4.2-20070609-1) unstable; urgency=low
+
+ * Update to SVN gcc-4_2-branch/20070609.
+ - Remove patches integrated upstream: pr30052, hppa-caller-save-pic-tls.
+ * Update to SVN trunk/20070609 (gcc/java, libjava, libffi, boehm-gc).
+ - Remove patches integrated upstream: libjava-qt-peer,
+ classpath-config-guess.
+ * Do not build with --enable-java-maintainer-mode.
+ * debian/rules.patch: Comment out m68k-peephole, requires m68k-split_shift.
+ * Add target to apply patches up to a specific patch (Wouter Verhelst).
+ Closes: #424855.
+ * libstdc++6-4.2-*: Add conflicts with 4.1 packages. Closes: #419511.
+ * Apply proposed fix for PR target/28102. Closes: #426905.
+ * Fix build failure for cross compiler builds (Jiri Palecek). Closes: #393897.
+ * Update build macros for kfreebsd-amd64. Closes: #424693.
+
+ -- Matthias Klose <doko@ubuntu.com> Sat, 9 Jun 2007 06:54:13 +0200
+
+gcc-4.2 (4.2-20070528-1) unstable; urgency=low
+
+ * Update to SVN gcc-4_2-branch/20070528.
+ * Add backport for PR middle-end/20218.
+ * Add proposed PTA solver backport, PR tree-optimization/30052.
+ * Add backport for PR target/31868.
+ * Reenable the testsuite for arm, mips, mipsel.
+
+ -- Matthias Klose <doko@debian.org> Mon, 28 May 2007 09:03:04 +0200
+
+gcc-4.2 (4.2-20070525-1) unstable; urgency=low
+
+ * Update to SVN gcc-4_2-branch/20070525.
+ * Update to SVN trunk/20070520 (gcc/java, libjava, libffi, boehm-gc).
+ * Do not explicitely configure for __cxa_atexit.
+ * libstdc++6-4.2-doc: Conflict with libstdc++6-4.1-doc. Closes: #424896.
+ * Update m68k patches:
+ - Remove patches applied upstream: m68k-jumptable, m68k-gc,
+ - Reenable patches: m68k-save_pic, m68k-dwarf, m68k-limit_reload,
+ m68k-prevent-qipush, m68k-peephole, m68k-return, m68k-sig-unwind,
+ m68k-align-code m68k-align-stack, m68k-symbolic-operand,
+ m68k-bitfield-offset.
+ - Update: m68k-return, m68k-secondary-addr-reload, m68k-notice-move
+ m68k-secondary-addr-reload, m68k-notice-move.
+ - TODO: m68k-split_shift, m68k-dwarf3, m68k-fpcompare.
+ * Update the kfreebsd and arm patches (Aurelien Jarno). Closes: #425011.
+ * Temporarily disable the testsuite on slow architectures to get the
+ package built soon.
+
+ -- Matthias Klose <doko@debian.org> Fri, 25 May 2007 07:14:36 +0200
+
+gcc-4.2 (4.2-20070516-1) unstable; urgency=low
+
+ * Update to SVN gcc-4_2-branch/20070516.
+ * Update to SVN trunk/20070516 (gcc/java, libjava, libffi, boehm-gc).
+ * Merge changes from gcc-4.1_4.1.2-7.
+ * Update NEWS files.
+
+ -- Matthias Klose <doko@debian.org> Wed, 16 May 2007 02:33:57 +0200
+
+gcc-4.2 (4.2-20070502-1) unstable; urgency=low
+
+ * Update to SVN gcc-4_2-branch/20070502.
+ - Remove pr11953 patch, integrated upstream.
+ * Update to SVN trunk/20070502 (gcc/java, libjava, libffi, boehm-gc).
+ * Adjust tetex/tex-live build dependency.
+ * Fix gobjc-4.2's, gobjc++-4.2's dependency on libobjc2.
+ * Tighten (build) dependency on binutils. Addresses: #421197.
+ * gfortran-4.2: Depend on libgfortran2, provide the libgfortran.so
+ symlink. Adresses: #421362.
+ * Build-depend on gcc-multilib [amd64 i386 powerpc ppc64 s390 sparc].
+ * (Build-) depend on glibc (>= 2.5) for all architectures.
+ * Remove libssp packages from the control file.
+
+ -- Matthias Klose <doko@debian.org> Wed, 2 May 2007 18:46:57 +0200
+
+gcc-4.2 (4.2-20070405-1) experimental; urgency=low
+
+ * Update to SVN gcc-4_2-branch/20070405.
+ * Update to SVN trunk/20070405 (gcc/java, libjava, libffi, boehm-gc).
+ * gcc-4.2-hppa64: Don't depend on libc6-dev.
+ * Robustify setting of make's -j flag. Closes: #410919.
+ * gcc-snapshot: Use the install_snap_stamp target for installation.
+
+ -- Matthias Klose <doko@debian.org> Thu, 5 Apr 2007 23:56:35 +0200
+
+gcc-4.2 (4.2-20070307-1) experimental; urgency=low
+
+ * Update to SVN gcc-4_2-branch/20070307.
+ * Update to SVN trunk/20070307 (gcc/java, libjava, libffi, boehm-gc).
+ * Build gnat from separate sources.
+ * Merge changes from gcc-4.1-4.1.2-1.
+ * Install into /usr/lib/gcc/<target_alias>/4.2, to ease upgrades
+ between subminor versions.
+ * Configure --with-gxx-include-dir=/usr/include/c++/4.2
+
+ -- Matthias Klose <doko@debian.org> Thu, 8 Mar 2007 02:52:00 +0100
+
+gcc-4.2 (4.2-20070210-1) experimental; urgency=low
+
+ * Merge Java backport from Ubuntu:
+ - Update to SVN gcc-4_2-branch/20070210.
+ - Update to SVN trunk/20070210 (gcc/java, libjava).
+ - Backout trunk specific gcc/java changes.
+ - Build-depend on gcj-4.1 and ecj-bootstrap.
+ - gcj-4.2: Depend on ecj-bootstrap, recommend ecj-bootstrap-gcj.
+ - Merge libgcj8-awt-gtk back into libgcj8-awt; the Qt peers
+ are disabled by upstream again.
+ - Generate manual pages for the classpath tools from the classpath
+ documentation.
+ - Adopt packaging for the merged libjava.
+ - Update patches for the merged libjava: libjava-lib32-properties,
+ i386-biarch, reporting, libjava-soname, libjava-subdir,
+ libjava-lib32subdir.
+ - Remove obsolete patches: libjava-plugin-binary, libjava-ia32fix,
+ libstdc++-docfixes.
+
+ * Set priority of development packages to optional.
+ * debian/libgcjGCJ.postrm: Don't fail on purge when directories
+ don't exist anymore. Closes: #406017.
+ * debian/patches/gcc-textdomain.dpatch: Update for 4.2.
+ * Generate and install libgomp docs into gcc-4.2-doc.
+
+ -- Matthias Klose <doko@debian.org> Sat, 10 Feb 2007 16:53:11 +0100
+
+gcc-4.2 (4.2-20070105-1) experimental; urgency=low
+
+ * Update to SVN 20070105.
+ * Add tetex-extra to Build-Depend-Indep (libstd++ doxygen docs),
+ fix doxygen build (libstdc++-docfixes.dpatch).
+ * Enable parallel build by default on SMP machines.
+
+ -- Matthias Klose <doko@debian.org> Fri, 5 Jan 2007 22:42:18 +0100
+
+gcc-4.2 (4.2-20061217-1) experimental; urgency=low
+
+ * Update to SVN 20061217.
+ * Merge changes from gcc-4.1_4.1.1-16 to gcc-4.1_4.1.1-21.
+ * Update patches to the current branch.
+ * Add multilib packages for gcc, g++, gobjc, gobjc++, gfortran.
+ * Link using --hash-style=gnu (alpha, amd64, ia64, i386, powerpc, ppc64,
+ s390, sparc).
+
+ -- Matthias Klose <doko@debian.org> Sun, 17 Dec 2006 15:54:54 +0100
+
+gcc-4.2 (4.2-20061003-1) experimental; urgency=low
+
+ * libgcj.postinst: Remove /var/lib/gcj-4.2 on package removal.
+ * Don't install backup files in the doc directory, only one gcc-4.1
+ upgrade was broken. Closes: #389366.
+ * Merge gcc-biarch-generic.dpatch into i386-biarch.dpatch.
+ * Update link-libs.dpatch.
+ * Merge libgfortran2-dev into gfortran-4.2.
+
+ -- Matthias Klose <doko@debian.org> Tue, 3 Oct 2006 16:26:38 +0000
+
+gcc-4.2 (4.2-20060923-1) experimental; urgency=low
+
+ * Update to SVN 20060923.
+ * Remove patches applied upstream: kbsd-gnu-java, kbsd-gnu.
+
+ -- Matthias Klose <doko@debian.org> Sat, 23 Sep 2006 15:11:36 +0200
+
+gcc-4.2 (4.2-20060905-1) experimental; urgency=low
+
+ * Update to SVN 20060905.
+ * Merge changes from gcc-4.1 (4.1.1-10 - 4.1.1-12).
+ * Move gomp development files into gcc and gfortran.
+ * Build-depend on binutils (>= 2.17).
+
+ -- Matthias Klose <doko@debian.org> Tue, 5 Sep 2006 03:33:00 +0200
+
+gcc-4.2 (4.2-20060818-1) experimental; urgency=low
+
+ * Update to SVN 20060818.
+ - libjava-libgcjbc.dpatch: Remove, applied upstream.
+ * Merge changes from the Ubuntu gcj-4.2 package:
+ - libjava-soname.dpatch: Remove, applied upstream.
+ - libjava-native-libdir.dpatch: update.
+ - libffi-without-libgcj.dpatch: Remove, new libffi-configure to
+ enable --disable-libffi.
+ - Changes required for the classpath-0.92 update:
+ - New packages gappletviewer-4.2, gcjwebplugin-4.2.
+ - gij-4.2: Add keytool alternative.
+ - gcj-4.2: Add jarsigner alternative.
+ - libgcj8-dev: Remove conflicts with older libgcjX-dev packages.
+ - lib32gcj8: Populate the /usr/lib32/gcj-4.2 directory.
+ - libjava-library-path.dpatch:
+ - When running the i386 binaries on amd64, look in
+ /usr/lib32/gcj-x.y and /usr/lib32/jni instead.
+ - Add /usr/lib/jni to java.library.path. Adresses: #364820.
+ - Add more debugging symbols to libgcj8-dbg. Adresses: #383705.
+ - Fix and renable the biarch build for sparc.
+ * Disable gnat for alpha, fails to build.
+ * Configure without --enable-objc-gc, fails to build.
+
+ -- Matthias Klose <doko@debian.org> Sat, 19 Aug 2006 18:25:50 +0200
+
+gcc-4.2 (4.2-20060709-1) experimental; urgency=low
+
+ * Test build, SVN trunk 20060709.
+ * Merge libssp0-dev into gcc-4.1 (-fstack-protector is a common option).
+ * Rename libmudflap0-dev to libmudflap0-4.2-dev.
+ * Ignore compiler warnings when checking whether compiler driver understands
+ Ada fails.
+ * Merge changes from the gcc-4.1 package.
+
+ -- Matthias Klose <doko@debian.org> Sun, 9 Jul 2006 14:28:03 +0200
+
+gcc-4.2 (4.2-20060617-1) experimental; urgency=low
+
+ * Test build, SVN trunk 20060617.
+
+ [Matthias Klose]
+ * Configure using --enable-objc-gc, using the internal boehm-gc.
+ * Build-depend on bison (>= 1:2.3).
+ * Build the QT based awt peer library, not yet the same functionality
+ as the GTK based peer library.
+ * Update libjava-* patches.
+
+ [Ludovic Brenta]
+ * Do not provide the symbolic link /usr/bin/gnatgcc; this will now
+ be provided by package gnat from the source package gcc-defaults.
+ * debian/control.m4, debian/control (gnat): conflict with gnat (<< 4.1),
+ not all versions of gnat, since gcc-defaults will now provide gnat (= 4.1)
+ which depends on gnat-4.1.
+
+ [Bastian Blank]
+ * Make it possible to overwrite arch per DEB_TARGET_ARCH and
+ DEB_TARGET_GNU_TYPE.
+ * Disable biarch only on request for cross builds.
+ * Use correct source directory for tarballs.
+ * Produce correct multiarch.inc for source builds.
+
+ -- Matthias Klose <doko@debian.org> Sat, 17 Jun 2006 19:02:01 +0200
+
+gcc-4.2 (4.2-20060606-1) experimental; urgency=low
+
+ * Test build, SVN trunk 20060606.
+ * Remove obsolete patches, update patches for 4.2.
+ * Update the biarch-include patches to work with mips-triarch.
+ * Disable Ada, not yet updated.
+ * New packages: libgomp*.
+ * Remove fastjar, not included upstream anymore.
+
+ -- Matthias Klose <doko@debian.org> Tue, 6 Jun 2006 10:52:28 +0200
+
+gcc-4.1 (4.1.2-12) unstable; urgency=high
+
+ * i386-biarch.dpatch: Update for the backport for PR target/31868.
+ Closes: #427185.
+ * m68k-libffi2.dpatch: Update. Closes: #425399.
+
+ -- Matthias Klose <doko@debian.org> Mon, 4 Jun 2007 23:53:23 +0200
+
+gcc-4.1 (4.1.2-11) unstable; urgency=low
+
+ * Update to SVN 20070601.
+ * Build the libmudflap0-dev package again.
+ * Don't build libffi, when the packages are not built.
+
+ -- Matthias Klose <doko@debian.org> Fri, 1 Jun 2007 23:55:22 +0200
+
+gcc-4.1 (4.1.2-10) unstable; urgency=low
+
+ * Regenerate the control file.
+
+ -- Matthias Klose <doko@debian.org> Wed, 30 May 2007 00:29:29 +0200
+
+gcc-4.1 (4.1.2-9) unstable; urgency=low
+
+ * Update to SVN 20070528.
+ * Don't build packages now built from the gcc-4.2 source (arm, m68k,
+ mips, mipsel).
+ * Add backport for PR middle-end/20218.
+ * Add backport for PR target/31868.
+
+ -- Matthias Klose <doko@debian.org> Tue, 29 May 2007 00:01:12 +0200
+
+gcc-4.1 (4.1.2-8) unstable; urgency=low
+
+ * Update to SVN 20070518.
+ * Don't build packages now built from the gcc-4.2 source.
+
+ [ Aurelian Jarno ]
+ * Update libffi patch for ARM. Closes: #425011.
+ * arm-pr30486, arm-pr28516, arm-unbreak-eabi-armv4t: New.
+ * Disable FFI, Java, ObjC for armel.
+
+ -- Matthias Klose <doko@debian.org> Sun, 20 May 2007 10:31:24 +0200
+
+gcc-4.1 (4.1.2-7) unstable; urgency=low
+
+ * Update to SVN 20070514.
+ * Link using --hash-style=both on supported architectures. Addresses: #421790.
+ * On hppa, build ecjx as a native binary.
+ * note-gnu-stack.dpatch: Fix ARM comment marker (Daniel Jacobowitz).
+ Closes: #422978.
+ * Add build dependency on libxul-dev for *-freebsd. Closes: #422995.
+ * Update config.guess/config.sub and build gcjwebplugin on GNU/kFreeBSD
+ (Aurelian Jarno). Closes: #422995.
+ * Disable ssp on hurd-i386. Closes: #423757.
+
+ -- Matthias Klose <doko@debian.org> Mon, 14 May 2007 08:40:08 +0200
+
+gcc-4.1 (4.1.2-6) unstable; urgency=low
+
+ * Update libjava from the gcc-4.1 Fedora branch 20070504.
+ * gfortran-4.1: Fix the target of the libgfortran.so symlink.
+ Closes: #421362.
+ * Build-depend on gcc-multilib [amd64 i386 powerpc ppc64 s390 sparc].
+ * Readd build dependency on binutils on arm.
+ * (Build-) depend on glibc (>= 2.5) for all architectures.
+ * Remove libssp packages from the control file.
+ * Fix wrong code generation on hppa when TLS variables are used.
+ Closes: #422421.
+
+ -- Matthias Klose <doko@debian.org> Sun, 6 May 2007 10:00:23 +0200
+
+gcc-4.1 (4.1.2-5) unstable; urgency=low
+
+ * Update to SVN 20070429.
+ * Update libjava from the gcc-4.1 Fedora branch 20070428.
+ * Update m68k patches:
+ - Remove pr25514, pr27736, applied upstream.
+ - Update m68k-java.
+ * Link using --hash-style=gnu/both.
+ * Tighten (build) dependency on binutils. Closes: #421197.
+ * gij-4.1: Add a conflict with java-gcj-compat (<< 1.0.69).
+ * gfortran-4.1: Depend on libgfortran1, provide the libgfortran.so
+ symlink. Closes: #421362.
+ * gcc-4.1, gcc-4.1-multilib: Fix compatibility symlinks. Closes: #421382.
+ * Temporarily remove build dependency on locales on arm, hppa, m68k, mipsel.
+ * Temporarily remove build dependency on binutils on arm.
+ * Fix FTBFS on GNU/kFreeBSD (Aurelian Jarno). Closes: #421423.
+ * gij-4.1 postinst: Create /var/lib/gcj-4.1. Closes: #421526.
+
+ -- Matthias Klose <doko@debian.org> Mon, 30 Apr 2007 08:13:32 +0200
+
+gcc-4.1 (4.1.2-4) unstable; urgency=medium
+
+ * Update to SVN 20070423.
+ - Remove pr11953, applied upstream.
+ - Fix ld version detection in libstdc++v3.
+ * Update libjava from the gcc-4.1 Fedora branch 20070423.
+ * Merge libgfortran1-dev into gfortran-4.1.
+ * Add multilib packages for gcc, g++, gobjc, gobjc++, gfortran.
+ * Don't link using --hash-style=gnu/both; loosen dependency on binutils.
+ * Don't revert the patch to fix PR c++/27227.
+
+ -- Matthias Klose <doko@debian.org> Mon, 23 Apr 2007 23:13:14 +0200
+
+gcc-4.1 (4.1.2-3) experimental; urgency=low
+
+ * Update to SVN 20070405.
+ * Update libjava from the gcc-4.1 Fedora branch 20070405.
+ * Robustify setting of make's -j flag. Closes: #414316.
+ * Only build the libssp packages, when building the common libraries.
+ * gcc-4.1-hppa64: Don't depend on libc6-dev.
+
+ -- Matthias Klose <doko@debian.org> Fri, 6 Apr 2007 00:28:29 +0200
+
+gcc-4.1 (4.1.2-2) experimental; urgency=low
+
+ * Update to SVN 20070306.
+ * Update libjava from the gcc-4.1 Fedora branch 20070306.
+
+ [Matthias Klose]
+ * Don't install gij-wrapper anymore, directly register gij as a java
+ alternative.
+ * Don't install gcjh-wrapper anymore.
+ * Don't use exact versioned dependencies on gcj-base for libgcj and
+ libgcj-awt.
+ * Fix glibc build dependency for alpha.
+ * Support -ffast-math on hurd-i386 (Samuel Thibault). Closes: #413342.
+ * Update kfreebsd-amd64 patches (Aurelien Jarno). Closes: #406015.
+ * gij: Consistently use $(dbexecdir) to reference the gcj sub dir.
+ * Install into /usr/lib/gcc/<target_alias>/4.1, to ease upgrades
+ between minor versions.
+ Add compatibility symlinks in <target_alias>/4.1.2 to build gnat-4.1
+ and gcj-4.1 from separate sources.
+
+ -- Matthias Klose <doko@debian.org> Wed, 7 Mar 2007 03:51:47 +0100
+
+gcc-4.1 (4.1.2-1) experimental; urgency=low
+
+ [Matthias Klose]
+ * Update to gcc-4.1.2.
+ * Update libjava backport patches, split out boehm-gc-backport patch.
+ * Enable the cpu-default-generic patch (i386, amd64), backport from 4.2.
+ * Correct mfctl instruction syntax (hppa), backport from the trunk.
+ * Backport PR java/9861 (name mangling updates).
+ * gcc.c (main): Call expandargv (backport from 4.2).
+ * Apply gcc dwarf2 unwinding patches from the trunk.
+ * Apply backport for PR 20208 on amd64 i386 powerpc ppc64 sparc s390.
+ * Apply patches from the 4.1 branch for PR rtl-optimization/28772,
+ PR middle-end/30313, PR middle-end/30473, PR c++/30536, PR debug/30189,
+ PR fortran/30478, PR rtl-optimization/30787, PR tree-optimization/30823,
+ PR rtl-optimization/28173, PR ada/30684, bug in pointer dependency test,
+ PR rtl-optimization/30931, PR fortran/25392, PR fortran/30400,
+ PR libgfortran/30910, PR libgfortran/30918, PR fortran/29441,
+ PR target/30634.
+ * Update NEWS files.
+ * Include a backport of the ecj+generics java updates as
+ gcj-ecj-20070215.tar.bz2. Install it into the gcc-4.1-source package.
+ * Do not build fastjar anymore from this source.
+ * debian/control.m4: Move expect-tcl8.3 before dejagnu.
+ * Work around firefox/icewhatever dropping plugin dependencies on xpcom.
+ * Refactor naming of libgcj packages in the build files.
+ * Make libstdc++-doc's build dependencies depending on the source package.
+ * Do not build packages on architectures, which are already built by gcc-4.2.
+
+ * Merge the gcj generics backport from Ubuntu:
+
+ - Merge the Java bits (eclipse based compiler, 1.5 compatibility,
+ classpath generics) from the gcc-4.1 Fedora branch.
+ - Drop all previous patches from the classpath-0.93 merge, keep
+ the boehm-gc backport (splitted out as a separate patch).
+ - Add a gcj-ecj-generics.tar.bz2 tarball, containing gcc/java, libjava,
+ config/unwind_ipinfo.m4, taken from the Fedora branch.
+ - Drop the libjava-hppa, libjava-plugin-binary, pr29362, pr29805 patches
+ integrated in the backport.
+ - Update patches for the merge: reporting, libjava-subdir, i386-biarch,
+ classpath-tooldoc, pr26885
+ - Add libjava-dropped, libjava-install; dropped chunks from the merge.
+ - Add pr9861-nojava mangling changes, non-java parts for PR 9861.
+ - Add gcc-expandv, expand `@' parameters on the commandline; backport
+ from the trunk.
+ - Disable the m68k-gc patch, needs update for the merge.
+ - Configure --with-java-home set for 1.5.0.
+ - Configure with --enable-java-maintainer-mode to build the header
+ and class files on the fly.
+ - Add build dependency on ecj-bootstrap, configure --with-ecj-jar.
+ - Build an empty libgcj-doc package; gjdoc currently cannot handle
+ generics.
+ - Apply gcc dwarf2 unwinding patches from the trunk, allowing the Events
+ testcase to pass.
+ - Tighten dependencies on shared libraries.
+ - Use /usr/lib/gcj-4-1-71 as private gcj subdir.
+ - Bump the libgcj soversion to 71, rename the libgcj7-0 package
+ to libgcj7-1, rename the libgcj7-awt package to libgcj7-1-awt.
+ - gij-4.1: Add and provide alternatives for gorbd, grmid, gserialver.
+ - gcj-4.1: Remove gcjh, gcjh-wrapper, gjnih.
+ - gcj-4.1: Add and provide alternatives for jar, javah, native2ascii,
+ tnameserv.
+ - gcj-4.1: Add dependency on ecj-bootstrap, recommend fastjar,
+ ecj-bootstrap-gcj.
+ - Add build dependency on ecj-bootstrap version providing the GCCMain
+ class.
+ - libgcj7-1: Recommend libgcj7-1-awt.
+ - Add build dependency on libmagic-dev.
+ - Build-depend on gcj-4.1; build our own ecj1 and gjdoc before
+ starting the build.
+ - Make ecj1 available when running the testsuite.
+ - Fix build failure on sparc-linux.
+ - Fix gjavah compatibility problems (PR cp-tools/3070[67]).
+ - Fixed driver issue source files (PR driver/30714).
+ - Add (rudimentary) manual pages for classpath tools.
+
+ [Kevin Brown]
+ * debian/control.m4, debian/rules.d/binary-ada.mk: provide new packages
+ containing debugging symbols for Ada libraries: libgnat-4.1-dbg,
+ libgnatprj4.1-dbg, and libgnatvsn4.1-dbg. Adresses: #401385.
+
+ -- Matthias Klose <doko@debian.org> Sat, 3 Mar 2007 23:12:08 +0100
+
+gcc-4.1 (4.1.1ds2-30) experimental; urgency=low
+
+ * Update to SVN 20070106.
+ * Do not revert the fixes for PR 25878, PR 29138, PR 29408.
+ * Don't build the packages built by gcc-4.2 source.
+ * debian/patches/note-gnu-stack.dpatch: Add .note.GNU-stack sections
+ for gcc's crt files, libffi and boehm-gc. Taken from FC. Closes: #382741.
+ * Merge from Ubuntu:
+ - Backport g++ visibility patches from the FC gcc-4_1-branch.
+ - Update the long-double patches; require glibc-2.4 as a build dependency
+ on alpha, powerpc, sparc, s390. Bump the shlibs dependencies to
+ require 4.1.1-21.
+ - On powerpc-linux configure using --enable-secureplt. Closes: #382748.
+ - When using the cpu-default-generic patch, build for generic x86-64
+ on amd64 and i386 biarch.
+ - Link using --hash-style=both (alpha, amd64, ia64, i386, powerpc, ppc64,
+ s390, sparc).
+ * gij-4.1: Recommends libgcj7-awt instead of suggesting it. Closes: #394917.
+ * Split the gcc-long-double patch into a code and doc part.
+ * Set priority of development packages to optional.
+ * Add support for kfreebsd-amd64 (Aurelian Jarno). Closes: #406015.
+
+ -- Matthias Klose <doko@debian.org> Sat, 6 Jan 2007 10:35:42 +0100
+
+gcc-4.1 (4.1.1ds2-22) unstable; urgency=high
+
+ * Enable -pthread for GNU/Hurd (Michael Banck). Closes: #400031.
+ * Update the m68k-fpcompare patch (Roman Zippel). Closes: #401585.
+
+ -- Matthias Klose <doko@debian.org> Sun, 10 Dec 2006 12:35:06 +0100
+
+gcc-4.1 (4.1.1ds2-20) unstable; urgency=low
+
+ [Matthias Klose]
+ * Update to SVN 20061115.
+ - Fix PR tree-optimization/27891, ICE in tree_split_edge.
+ Closes: #370248, #391657, #394630.
+ - Fix PR tree-optimization/9814, duplicate of PR tree-optimization/29797.
+ Closes: #181096.
+ * Apply the libjava/net backport from the redhat/gcc-4_1-branch.
+ * Apply proposed patch for PR java/29805.
+
+ [Roman Zippel]
+ * Build the ObjC and ObjC++ compilers in cross builds.
+ * debian/patches/m68k-symbolic-operand.dpatch: Better recognize
+ symbolic operands in addresses.
+ * debian/patches/m68k-bitfield-offset.dpatch: Only use constant offset
+ for register bitfields (combine expects shifts, but does a rotate).
+ * debian/patches/m68k-bitfield-offset.dpatch: Update and apply.
+
+ [Daniel Jacobowitz]
+ * Don't try to use _Unwind_Backtrace on SJLJ targets.
+ See bug #387875, #388505, GCC PR 29206.
+
+ -- Matthias Klose <doko@debian.org> Wed, 15 Nov 2006 08:59:53 -0800
+
+gcc-4.1 (4.1.1ds2-19) unstable; urgency=low
+
+ * Fix typo in arm-pragma-pack.dpatch.
+
+ -- Matthias Klose <doko@debian.org> Sat, 28 Oct 2006 11:04:00 +0200
+
+gcc-4.1 (4.1.1ds2-18) unstable; urgency=medium
+
+ [Matthias Klose]
+ * Update to SVN 20061028.
+ * Fix #pragma pack on ARM (Paul Brook). Closes: #394703.
+ * Revert PR c++/29138, PR c++/29408. Closes: #392559.
+ * Revert PR c++/25878. Addresses: #387989.
+ * fastjar: Provide jar. Closes: #395397.
+
+ [Ludovic Brenta]
+ * debian/control.m4 (libgnatprj-dev): depend on libgnatvsn-dev.
+ debian/gnatprj.gpr: with gnatvsn.gpr. Closes: #395000.
+
+ -- Matthias Klose <doko@debian.org> Thu, 26 Oct 2006 23:51:10 +0200
+
+gcc-4.1 (4.1.1ds2-17) unstable; urgency=low
+
+ [Matthias Klose]
+ * Update to SVN 20061020.
+ - Fix PR debug/26881, ICE in dwarf2out_finish. Closes: #377613.
+ - Fix PR PR c++/29408, parse error for valid code. Closes: #392327, #393010.
+ - Fix PR c++/29435, segfault with sizeof and templates. Closes: #393071.
+ - Fix PR target/29338, segfault with -finline-limit on arm. Closes: 390620.
+ - Fix 3.4/4.0 backwards compatibility problem in libstdc++.
+ * Fix PR classpath/29362, taken from the redhat/gcc-4_1-branch.
+ * Remove the INSTALL directory from the source tarball. Closes: #392974.
+ * Disable building the static libgcj; non-functional, and cutting
+ down build times.
+ * libgcj7-0: Tighten dependency on libgcj-common.
+ * libgcj7-dev: Install .pc file as libgcj-4.1.pc.
+ * README.cross: Updated (Hector Oron). Addresses: #380251.
+ * config-ml.dpatch: Use *-linux-gnu as *_GNU_TYPE. Closes: #394034.
+
+ [Nikita V. Youshchenko]
+ * Fix typo in the cross build scripts. Closes: #391445.
+
+ [Falk Hueffner]
+ * alpha-no-ev4-directive.dpatch: Fix kernel build failure.
+
+ [Roman Zippel]
+ * debian/patches/m68k-align-code.dpatch: Use "move.l %a4,%a4" to advance
+ within code.
+ * debian/patches/m68k-align-stack.dpatch: Try to keep the stack word aligned.
+ * debian/patches/m68k-dwarf3.dpatch: Emit correct dwarf info for cfa offset
+ and register with -fomit-frame-pointer.
+ * debian/patches/m68k-fpcompare.dpatch: Bring fp compare early to its
+ desired form to relieve reload. Closes: #390879.
+ * debian/patches/m68k-prevent-swap.dpatch: Don't swap operands
+ during reloads.
+ * debian/patches/m68k-reg-inc.dpatch: Reinsert REG_INC notes after splitting
+ an instruction.
+ * debian/patches/m68k-secondary-addr-reload.dpatch: Add secondary reloads
+ to allow reload to get byte values into addr regs. Closes: #385327.
+ * debian/patches/m68k-symbolic-operand.dpatch: Better recognize symbolic
+ operands in addresses.
+ * debian/patches/m68k-limit_reload.dpatch: Remove, superseded by
+ m68k-secondary-addr-reload.dpatch.
+ * debian/patches/m68k-notice-move.dpatch: Apply, was checked in in -16.
+ * debian/patches/m68k-autoinc.dpatch: Updated, don't attempt to increment
+ the register, if it's used multiple times in the instruction .
+
+ -- Matthias Klose <doko@debian.org> Sat, 21 Oct 2006 00:25:05 +0200
+
+gcc-4.1 (4.1.1ds1-16) unstable; urgency=low
+
+ [Matthias Klose]
+ * Update to SVN 20061008.
+ - Fix PR c++/29226, ICE in make_decl_rtl. Closes: #388263.
+ * libgcj7-0: Fix package removal. Closes: #390874.
+ * Configure with --disable-libssp on architectures that don't
+ support it (alpha, hppa, ia64, m68k, mips, mipsel).
+ * On hppa, remove build-dependency on dash.
+ * gij/gcj: Do not install slave links for the non DFSG manpages.
+ Closes: #390425, #390532.
+ * libgcj-common: rebuild-gcj-db: Don't do anything, if no classmap
+ files are found. Closes: #390966.
+ * Fix PR libstdc++/11953, extended for all linux architectures.
+ Closes: #391268.
+ * libffi4-dev: Conflict with libffi. Closes: #387561.
+ * Backport PR target/27880 to the gcc-4_1-branch. Patch by Steve Ellcey.
+ Closes: #390693.
+ * On ia64, don't use _Unwind_GetIPInfo in libjava and libstdc++.
+ * Add a README.ssp with minimal documentation about stack smashing
+ protection. Closes: #366094.
+ * Do not build libgcj-common from the gcc-4.1/gcj-4.1 sources anymore.
+
+ [Roman Zippel]
+ * debian/patches/m68k-notice-move.dpatch: Don't set cc_status
+ for fp move without fp register.
+
+ -- Matthias Klose <doko@debian.org> Sun, 8 Oct 2006 02:21:49 +0200
+
+gcc-4.1 (4.1.1ds1-15) unstable; urgency=medium
+
+ * Update to SVN 20060927.
+ - Fix PR debug/29132, exception handling on mips. Closes: #389468, #390042.
+ - Fix typo in gcc documentation. Closes: #386180.
+ - Fix PR target/29230, wrong code generation on arm. Closes: #385505.
+ * libgcj-common: Ignore exit value of gcj-dbtool in rebuild-gcj-db on
+ arm, m68k, hppa. Adresses: #388505.
+ * libgcj-common: Replaces java-gcj-compat-dev and java-gcj-compat.
+ Closes: #389539.
+ * libgcj-common: /usr/share/gcj/debian_defaults: Define gcj_native_archs.
+ * Update the java backport from the redhat/gcc-4_1-branch upto 2006-09-27;
+ remove libjava-str2double.dpatch, pr28661.dpatch.
+ * Disable ssp on hppa, not supported.
+ * i386-biarch.dpatch: Avoid warnings about macro redefinitions.
+
+ -- Matthias Klose <doko@debian.org> Fri, 29 Sep 2006 22:32:41 +0200
+
+gcc-4.1 (4.1.1ds1-14) unstable; urgency=medium
+
+ [Matthias Klose]
+ * Update to SVN 20060920.
+ - Fix PR c++/26957. Closes: #373257, #386910.
+ - Fix PR rtl-optimization/28243. Closes: #378325.
+ * Remove patch for PR rtl-optimization/28634, applied upstream.
+ * Fix FTBFS on GNU/kFreeBSD (fallout from the backport of classpath-0.92).
+ (Petr Salinger). Closes: #385974.
+ * Merge from Ubuntu:
+ - Do not encode the subminor version in the jar files.
+ - Fix typo for the versioned gcj subdirectory in lib32gcj-0.
+ - When running the i386 binaries on amd64, adjust the properties
+ java.home, gnu.classpath.home.url, sun.boot.class.path,
+ gnu.gcj.precompiled.db.path.
+ - Configure the 32bit build on amd64
+ --with-java-home=/usr/lib32/jvm/java-1.4.2-gcj-4.1-1.4.2.0/jre.
+ - Configure --with-long-double-128 for glibc-2.4 on alpha, powerpc, ppc64,
+ s390, s390x, sparc, sparc64.
+ - Update the java backport from the redhat/gcc-4_1-branch upto 2006-09-20.
+ - Fix PR java/29013, invalid byte code generation. Closes: #386926.
+ - debian/patches/gcc-pfrs-2.dpatch: Apply a fix for a regression in the
+ backport of PR 28946 from the trunk (H.J. Lu).
+ * Backport PR classpath/28661 from the trunk.
+ * Don't ship the .la files for the java modules. Closes: #386228.
+ * gcj-4.1: Remove dangling symlink. Closes: #386430.
+ * gij: Suggest java-gcj-compat, gcj: Suggest java-gcj-compat-dev.
+ Closes: #361942.
+ * Fix infinite loop in string-to-double conversion on 64bit targets.
+ Closes: #348792.
+ * gij-4.1: Ignore exit value of gcj-dbtool in postinst. Adresses: #388505.
+ * libgcj-common: Move rebuild-gcj-db from java-gcj-compat into libgcj-common.
+ * On hppa, install a wrapper around gij-4.1 to ignore unaligned memory
+ accesses. Works around buildd configurations enabling this check by
+ default. Addresses: #364819.
+
+ [Ludovic Brenta]
+ * debian/patches/ada-libgnatprj.dpatch: Build mlib-tgt-linux.adb instead of
+ mlib-tgt.adb. Closes: #387826.
+ * debian/patches/ada-pr15802.dpatch: Backport from the trunk.
+ Closes: #246384.
+ * debian/control.m4 (gnat-4.1): do not provide gnat (supplied by
+ gcc-defaults instead); conflict with gnat-4.2 which will soon be in
+ unstable.
+
+ [Roman Zippel]
+ * debian/patches/m68k-dwarf2.dpatch: Recognize stack adjustments also
+ in the src of an instruction.
+ * debian/patches/m68k-jumptable.dpatch: Don't force byte offset when
+ accessing the jumptable, gas can generate the correct offset size instead.
+ * debian/patches/m68k-peephole.dpatch: Convert some text peepholes to rtl
+ peepholes, so the correct DWARF2 information can be generated for stack
+ manipulations (Keep a few peepholes temporarily disabled).
+ * debian/patches/m68k-peephole-note.dpatch: Don't choke on notes while
+ reinserting REG_EH_REGION notes.
+ * debian/patches/m68k-return.dpatch: Don't use single return if fp register
+ have to be restored. Closes: #386864.
+ * debian/patches/m68k-sig-unwind.dpatch: Add support for unwinding over
+ signal frames.
+ * Fix PR rtl-optimization/27736, backport from the trunk.
+ * Add java support for m68k. Closes: #312830, #340874, #381022.
+
+ -- Matthias Klose <doko@debian.org> Sun, 24 Sep 2006 19:36:31 +0200
+
+gcc-4.1 (4.1.1ds1-13) unstable; urgency=medium
+
+ * Update to SVN 20060901; remove patches applied upstream:
+ - PR target/24367.
+ - PR c++/26670.
+ * Apply proposed patch for PR fortran/28908.
+ * Fix biarch symlinks in lib64stdc++ for cross builds.
+ * Fix biarch symlinks in lib32objc on amd64.
+
+ -- Matthias Klose <doko@debian.org> Fri, 1 Sep 2006 00:04:05 +0200
+
+gcc-4.1 (4.1.1ds1-12) unstable; urgency=medium
+
+ [Matthias Klose]
+ * Update to SVN 20060830.
+ * Add backport of PR other/26208, bump libgcc1 shlibs dependency.
+ * Add backport of PR c++/26670. Closes: #356548.
+ * Apply proposed patch for PR target/24367 (s390).
+ * Add /usr/lib/jni to the libjava dlsearch path. Closes: #364820.
+ * Build without GFDL licensed docs. Closes: #384036.
+ - debian/patches/{svn-doc-updates,pr25524-doc,pr26885-doc}.dpatch:
+ Split out -doc specific patches.
+ - debian/*.texi, debian/porting.html: Add dummy documentation.
+ - debian/rules.unpack, debian/rules.patch: Update for non-gfdl build.
+ - fastjar.texi: Directly define the gcctabopt and gccoptlist macros.
+
+ * Merge from Ubuntu:
+ - Backport the classpath-0.92, libjava, gcc/java merge from the
+ redhat/gcc-4_1-branch branch.
+ - Apply the proposed patch for PR libgcj/28698.
+ - Change the libgcj/libgij sonames. Rename libgcj7 to libgcj7-0.
+ - Do not remove the rpath from libjvm.so and libjawt.so. Some
+ configure scripts rely on being able to link that libraries
+ directly.
+ - When running the i386 binaries on amd64, look in
+ /usr/lib32/gcj-x.y and /usr/lib32/jni instead.
+ - Add /usr/lib/jni to java.library.path. Closes: #364820.
+ - Add debugging symbols for more binary packages to libgcj7-dbg.
+ Closes: #383705.
+ - libgcj7-dev: Remove conflicts with older libgcjX-dev packages.
+ - Do not build the libgcj-bc and lib32gcj-bc packages anymore from
+ the gcj-4.1 source.
+
+ [Roman Zippel]
+ * debian/patches/m68k-limit_reload.dpatch: Correctly limit reload class.
+ Closes: #375522.
+ * debian/patches/m68k-split_shift.dpatch: Use correct predicates for long long
+ shifts and use more splits. Closes: #381572.
+ * debian/patches/m68k-prevent-qipush.dpatch: Prevent combine from creating
+ a byte push on the stack (invalid on m68k). Closes: #385021.
+ * debian/patches/m68k-autoinc.dpatch: Recognize a few more autoinc possibilities.
+ * debian/patches/pr25514.dpatch: Backport from the trunk.
+ * debian/patches/m68k-gc.dpatch: Change STACKBOTTOM to LINUX_STACKBOTTOM
+ so it works with 2.6 kernels.
+ * Other m68k bug reports fixed in 4.1.1-11 and 4.1.1-12:
+ Closes: #378599, #345574, #344041, #323426, #340293.
+ * Build the stage1 compiler using -g -O2; saves a few hours build time
+ and apparently is working at the moment.
+
+ -- Matthias Klose <doko@debian.org> Tue, 29 Aug 2006 21:37:28 +0200
+
+gcc-4.1 (4.1.1-11) unstable; urgency=low
+
+ * The "Our priority are our users, remove the documentation!" release.
+
+ [Matthias Klose]
+ * Fix build failure building the hppa->hppa64 cross compiler.
+ * Update to SVN 20060814.
+ - Fix directory traversal vulnerability in fastjar. Closes: #368397.
+ CVE-2006-3619.
+ - Fix PR rtl-optimization/23454, ICE in invert_exp_1 on sparc.
+ Closes: #321215.
+ - Fix PR c++/26757, C++ front-end producing two DECLs with the same UID.
+ Closes: #356569.
+ * Remove patch for PR rtl-optimization/28075, applied upstream.
+ * Apply proposed patch for PR rtl-optimization/28634, rounding problem with
+ -fdelayed-branch on hppa/mips. Closes: #381710.
+ * Fixed at least in 4.1.1-10: boost::date_time build failure.
+ Closes: #382352.
+ * Build-depend on make (>= 3.81), add make (>= 3.81) as dependency to
+ gcc-4.1-source. Closes: #381117.
+ * Backport of libffi from the trunk; needed for the java backport in
+ experimental.
+ * libffi4-dev: Install the libffi_convenience library as libffi_pic.a.
+ * When building a package without the GFDL'd documentation, don't create
+ the alternative's slave links for manual pages for the java tools.
+ * Do not build the -doc packages and derived manual pages licensed under
+ the GFDL with invariant sections or cover texts.
+ * Only build the libssp package, if the target libc doesn't provide
+ ssp support.
+ * Run the complete testsuite, when building a standalone gcj package.
+
+ [Roman Zippel]
+ * debian/patches/m68k-fjump.dpatch:
+ Always use as fjcc pseudo op, we rely heavily on as to generate the
+ right size for the jump instructions. Closes: #359281.
+ * debian/patches/m68k-gc.dpatch:
+ The thread suspend handler has to save all registers.
+ Reenable MPROTECT_VDB, it should work, otherwise it's probably a kernel bug.
+ * debian/patches/m68k-save_pic.dpatch:
+ Correctly save the pic register, when not done by reload().
+ (fixes _Unwind_RaiseException and thus exception handling).
+ * debian/patches/m68k-libffi.dpatch: Add support for closures.
+ * debian/patches/m68k-bitfield.dpatch: Avoid propagation of mem expression
+ past a zero_extract lvalue.
+ * debian/patches/m68k-dwarf.dpatch: Correct the dwarf frame information,
+ but preserve compatibility.
+
+ [Christian Aichinger]
+ * Fix building a cross compiler targeted for ia64. Closes: #382627.
+
+ -- Matthias Klose <doko@debian.org> Tue, 15 Aug 2006 00:41:00 +0200
+
+gcc-4.1 (4.1.1-10) unstable; urgency=low
+
+ * Update to SVN 20060729.
+ - Fix PR c++/28225, segfault in type_dependent_expression_p.
+ Closes: #376148.
+ * Apply proposed patch for PR rtl-optimization/28075.
+ Closes: #373820.
+ * Apply proposed backport and proposed patch for PR rtl-optimization/28221.
+ Closes: #376084.
+ * libgcj7-jar: Loosen dependency on gcj-4.1-base.
+ * Add ssp header files to the private gcc includedir.
+ * Do not build the Ada packages from the gcc-4.1 source, introducing
+ a new gnat-4.1 source package.
+ * Build libgnat on alpha and s390 as well.
+ * Do not build the gnat-4.1-doc package (GFDL with invariant sections or
+ cover texts).
+ * Remove references to the stl-manual package. Closes: #378698.
+
+ -- Matthias Klose <doko@debian.org> Sat, 29 Jul 2006 22:08:59 +0200
+
+gcc-4.1 (4.1.1-9) unstable; urgency=low
+
+ * Update to SVN 20060715.
+ - Fix PR c++/28016, do not emit uninstantiated static data members.
+ Closes: #373895, #376871.
+ * Revert the patch to fix PR c++/27227. Closes: #378321.
+ * multiarch-include.dpatch: Renamed from biarch-include.dpatch;
+ apply for all architectures.
+ * Do not build the java compiler in gcc-4.1 package, just include the
+ options and specs in the gcc driver.
+ * Remove gnat-4.0 as an alternative build dependency.
+ * Add a patch to enable -fstack-protector by default for C, C++, ObjC, ObjC++.
+ The patch is disabled by default.
+
+ -- Matthias Klose <doko@debian.org> Sat, 15 Jul 2006 17:07:29 +0200
+
+gcc-4.1 (4.1.1-8) unstable; urgency=medium
+
+ * Update to SVN 20060708.
+ - Fix typo in gcov documentation. Closes: #375140.
+ - Fix typo in gccint documentation. Closes: #376412.
+ - [alpha], Fix -fvisibility-inlines-hidden segfaults on reference to
+ static method. PR target/27082. Closes: #369642.
+
+ * Fix ppc64 architecture string in debian/multiarch.inc. Closes: #374535.
+ * Fix conflict, replace and provide libssp0-dev for cross compilers.
+ Closes: #377012.
+ * Ignore compiler warnings when checking whether compiler driver understands
+ Ada fails. Closes: #376660.
+ * Backport fix for PR libmudflap/26864 from the trunk. Closes: #26864.
+ * README.C++: Remove non-existing URL. Closes: #347601.
+ * gij-4.1: Provide java2-runtime. Closes: #360906.
+
+ * Closed reports reported against gcc-3.0 and fixed in gcc-4.1:
+ - C++
+ + PR libstdc++/13943, call of overloaded `llabs(int)' is ambiguous.
+ Closes: #228645.
+ - Java
+ + Fixed segmentation fault on compiling bad program. Closes: #165635
+ * Closed reports reported against gcc-3.3 and fixed in gcc-4.1:
+ - Stack protector available. Closes: #213994, #233208.
+ - Better documentation of -finline-limit option. Closes: #296047.
+ * Closed reports reported against gcc-3.4 and fixed in gcc-4.1:
+ - General
+ + Fixed [unit-at-a-time] Using -O2 cannot detect missing return
+ statement in a function. Closes: #276843.
+ - C++
+ + PR13943, call of overloaded `llabs(int)' is ambiguous. Closes: #228645.
+ + PR c++/21280, #pragma interface, templates, and "inline function used
+ but never defined". Closes: #364412.
+ - Architecture specific:
+ - m68k
+ + Segfault building glibc. Closes: #353618.
+ + ICE when trying to build boost. Closes: #321486.
+ * Closed reports reported against gcc-4.0 and fixed in gcc-4.1:
+ - General
+ + Handling of #pragma GCC visibility for builtin functions.
+ Closes: #330279.
+ + gettext interpretation the two conditional strings as one.
+ Closes: #227193.
+ + ICE due to if-conversion. Closes: #335078.
+ + Fix unaligned accesses with __attribute__(packed) and memcpy.
+ Closes: #355297.
+ + Fix ICE in expand_expr_real_1, at expr.c. Closes: #369817.
+ - Ada
+ + Link error not finding -laddr2line. Closes: #322849.
+ + ICE on invalid code. Closes: #333564.
+ - C++
+ + libstdc++: bad thousand separator with fr_FR.UTF-8. Closes: #351786.
+ + The Compiler uses less memory than 4.0. Closes: #336225.
+ + Fix "fails to compare reverse map iterators". Closes: #362840.
+ + Fix "fail to generate code for base destructor defined inline with
+ pragma interface". Closes: #356435.
+ + Fix ICE in cp_expr_size, at cp/cp-objcp-common.c. Closes: #317455.
+ + Fix wrong warning: control may reach end of non-void function.
+ Closes: #319309.
+ + Fix bogus warning "statement has no effect" with template and
+ statement-expression. Closes: #336915.
+ + Fixed segfault on syntax error. Closes: #349087.
+ + Fix ICE with __builtin_constant_p in template argument.
+ Closes: #353366.
+ + Implement DR280 (fixing "no operator!= for const_reverse_iterator").
+ Closes: #244894.
+ - Fortran
+ + Fix wrong behaviour in unformatted writing. Closes: #369547.
+ - Java
+ + Fixed segfault on -fdump-tree-all-all. Closes: #344265.
+ + Fixed ant code completion in eclipse generating a nullpointer
+ exception. Closes: #337510.
+ + Fixed abort in gnu_java_awt_peer_gtk_GtkImage.c. Closes: #343112.
+ + Fixed assertion failure in gij with rhdb-explain. Closes: #335650.
+ + Fixed assertion failure when calling JTabbedPane.addTab(null, ...).
+ Closes: #314704.
+ + Fixed error when displaying empty window with bound larger than the
+ displayed content. Closes: #324502.
+ + Fixed: Exception in JComboBox.removeAllItems(). Closes: #314706.
+ + Fixed assertian error in gnu_java_awt_peer_gtk_GtkImage.c.
+ Closes: #333733.
+ - libmudflap
+ + PR libmudflap/23170, libmudflap should not use functions marked
+ obsolescent by POSIX/SUS. Closes: #320398.
+ - Architecture specific:
+ - m68k
+ + FTBFS building tin. Closes: #323016.
+ + ICE with -g -fomit-frame-pointer. Closes: #331150.
+ + ICE in instantiate_virtual_regs_lossage. Closes: #333536.
+ + Wrong code generation with loop unrolling. Closes: #342121.
+ + ICEs while building gst-ffmpeg. Closes: #343692.
+ - mips
+ + Fix gjdoc build failure. Closes: #344986.
+ + Fix link failure for static libs and object files when xgot
+ needs to be used. Closes: #274942.
+ * gnat bug reports fixed since gnat-3.15p:
+ - GNAT miscounts UTF8 characters in string with -gnaty. Closes: #66175.
+ - Bug box from "with Text_IO" when compiling optimized. Closes: #243795.
+ - Nonconforming parameter lists not detected. Closes: #243796.
+ - Illegal use clause not detected. Closes: #243797.
+ - Compiler enters infinite loop on illegal program with tagged records.
+ Closes: #243799.
+ - Compiler crashes on illegal program (missing discriminant, unconstrained
+ parent). Closes: #243800.
+ - Bug box at sinfo.adb:1215 on illegal program. Closes: #243801.
+ - Bug box at sinfo.adb:1651 on illegal program. Closes: #243802.
+ - Illegal program not detected (entry families). Closes: #243803.
+ - Illegal program not detected, RM 10.1.1(14). Closes: #243807.
+ - Bug box at exp_ch9.adb:7254 on illegal code. Closes: #243812.
+ - Illegal program not detected, RM 4.1.4(14). Closes: #243816.
+ - Bug box in Gigi, code=116, on legal program. Closes: #244225.
+ - Illegal program not detected, 12.7(10) (generic parameter is visible,
+ shouldn't be). Closes: #244483.
+ - Illegal program not detected, ambiguous aggregate. Closes: #244496.
+ - Bug box at sem_ch3.adb:8003. Closes: #244940.
+ - Bug box in Gigi, code=103, on illegal program. Closes: #244945.
+ - Legal program rejected, overloaded procedures. Closes: #246188.
+ - Bug box in Gigi, code=999, on legal program. Closes: #246388.
+ - Illegal program not detected, RM 10.1.6(3). Closes: #246389.
+ - Illegal program not detected, RM 3.10.2(24). Closes: #247014.
+ - Illegal program not detected, RM 3.9(17). Closes: #247015.
+ - Legal program rejected. Closes: #247016.
+ - Legal program rejected. Closes: #247021.
+ - Illegal program not detected, RM 4.7(3). Closes: #247022.
+ - Illegal program not detected, RM 3.10.2(27). Closes: #247562.
+ - Legal program rejected, "limited type has no stream attributes".
+ Closes: #247563.
+ - Wrong output from legal program. Closes: #247565.
+ - Compiler enters infinite loop on illegal program. Closes: #247567.
+ - Illegal program not detected, RM 8.6(31). Closes: #247568.
+ - Legal program rejected, visible declaration not seen. Closes: #247572.
+ - Illegal program not detected, RM 8.2(9). Closes: #247573.
+ - Wrong output from legal program, dereferencing access all T'Class.
+ Closes: #248171.
+ - Compiler crashes on illegal program, RM 5.2(6). Closes: #248174.
+ - Cannot find generic package body, RM 1.1.3(4). Closes: #248677.
+ - Illegal program not detected, RM 3.4.1(5). Closes: #248679.
+ - Compiler ignores legal override of abstract subprogram. Closes: #248686.
+ - Bug box, Assert_Failure at sinfo.adb:2365 on illegal program.
+ Closes: #251266.
+ - Ada.Numerics.Generic_Elementary_Functions.Log erroneout with -gnatN.
+ Closes: #263498.
+ - Bug box, Assert_Failure at atree.adb:2906 or Gigi abort, code=102
+ with -gnat -gnatc. Closes: #267788.
+ - Bug box in Gigi, code=116, 'Unrestricted_Access of a protected
+ subprogram. Closes: #269775.
+ - Stack overflow on illegal program, AI-306. Closes: #276225.
+ - Illegal program not detected, RM B.1(24). Closes: #276226.
+ - Wrong code generated with -O -fPIC. Closes: #306833.
+ - Obsolete: bashism's in debian/rules file. Closes: #370681.
+ - Supports more debian architectures. Closes: #171477.
+
+ -- Matthias Klose <doko@debian.org> Sat, 8 Jul 2006 16:24:47 +0200
+
+gcc-4.1 (4.1.1-7) unstable; urgency=low
+
+ * Prefer gnat-4.1 over gnat-4.0 as a build dependency.
+ * libssp0: Set priority to standard.
+
+ -- Matthias Klose <doko@debian.org> Sun, 2 Jul 2006 10:22:50 +0000
+
+gcc-4.1 (4.1.1-6) unstable; urgency=low
+
+ [Ludovic Brenta]
+ * Do not provide the symbolic link /usr/bin/gnatgcc; this will now
+ be provided by package gnat from the source package gcc-defaults.
+ * debian/control.m4, debian/control (gnat): conflict with gnat (<< 4.1),
+ not all versions of gnat, since gcc-defaults will now provide gnat (= 4.1)
+ which depends on gnat-4.1.
+
+ [Matthias Klose]
+ * libjava: Change the default for enable_hash_synchronization_default
+ on PA-RISC. Tighten the libgcj7 shlibs version on hppa.
+ * Update to SVN 20060630.
+ * Apply proposed patch for PR 26991.
+ * Don't use the version for the libstdc++ shlibs dependency for the libgcj
+ shlibs dependency.
+ * Merge from Ubuntu edgy:
+ - Fix %g7 usage in TLS, add patch sparc-g7.dpatch, fixes glibc-2.4 build
+ failure on sparc (Fabio M. Di Nitto).
+ - Merge libssp0-dev into gcc-4.1 (-fstack-protector is a common option).
+ - Run the testsuite with -fstack-protector as well.
+
+ [Bastian Blank]
+ * Make it possible to overwrite arch per DEB_TARGET_ARCH and DEB_TARGET_GNU_TYPE.
+ * Disable biarch only on request for cross builds.
+ * Use correct source directory for tarballs.
+ * Produce correct multiarch.inc for source builds.
+
+ -- Matthias Klose <doko@debian.org> Sat, 1 Jul 2006 01:49:55 +0200
+
+gcc-4.1 (4.1.1-5) unstable; urgency=low
+
+ * Fix build error running with dpkg-buildpackage -rsudo.
+
+ -- Matthias Klose <doko@debian.org> Wed, 14 Jun 2006 01:54:13 +0200
+
+gcc-4.1 (4.1.1-4) unstable; urgency=low
+
+ * Really do not backout the fix for PR c++/26068.
+ Closes: #372152, #372559.
+ * Update fastjar version string to 4.1.
+ * Disable pascal again.
+
+ -- Matthias Klose <doko@debian.org> Mon, 12 Jun 2006 20:29:57 +0200
+
+gcc-4.1 (4.1.1-3) unstable; urgency=low
+
+ * Update to SVN 20060608, do not revert the fix for PR c++/26068.
+ Closes: #372152, #372559.
+ * Fix build failures for Pascal, enable Pascal on all architectures.
+ * Fix another build failure on GNU/kFreeBSD (Aurelien Jarno).
+ Closes: #370661.
+ * Fix build fauilure in gcc/p with parallel make.
+ * Remove cross-configure patch (Kazuhiro Inaoka). Closes: #370649.
+ * Only build the gcc-4.1-source package, when building from the gcc-4.1
+ source.
+ * Fix upgrade problem from standalone gcj-4.1.
+ * Fix build error using bison-2.2, build-depend on bison (>= 2.3).
+ Closes: #372605.
+ * Backport PR libstdc++/25524 from the trunk, update the biarch-include
+ patch. mips triarch support can be added more easily.
+
+ -- Matthias Klose <doko@debian.org> Mon, 12 Jun 2006 00:23:45 +0200
+
+gcc-4.1 (4.1.1-2) unstable; urgency=low
+
+ * Update to SVN 20060604.
+ - Fix PR c++/26757, C++ front-end producing two DECLs with the same UID.
+ Closes: #356569.
+ - Fix PR target/27158, ICE in extract_insn with -maltivec.
+ Closes: #362307.
+ * Revert PR c++/26068 to work around PR c++/27884 (Martin Michlmayr).
+ Closes: #370308.
+ * Mention Ada in copyright, update copyright file (Ludovic Brenta).
+ Closes: #366744.
+ * Fix kbsd-gnu-java.dpatch (Petr Salinger). Closes: #370320.
+ * Don't include version control files in gcc-4.1-source.
+
+ -- Matthias Klose <doko@debian.org> Sun, 4 Jun 2006 19:13:37 +0000
+
+gcc-4.1 (4.1.1-1) unstable; urgency=low
+
+ [Matthias Klose]
+ * Update to SVN 20060601.
+ * Reenable the gpc build.
+ * PR libgcj/26483, libffi patch for IA-64 denorms, taken from trunk.
+ * Disable Ada for m32r targets. Closes: #367595.
+ * lib32gfortran1: Do not create empty directory /usr/lib32. Closes: #367999.
+ * gcc-4.1: Add a conflict to the gcj-4.1 version with a different
+ gcc_libdir.
+ * Build gij/gcj for GNU/k*BSD. Closes: #367166.
+ * Update hurd-changes patch (Michael Banck). Closes: #369690.
+ * debian/copyright: Add exception for the gpc runtime library.
+ * Update gpc/gpc-doc package descriptions.
+
+ [Ludovic Brenta]
+ * patches/ada-libgnatprj.dpatch: add prj-pars.ad[bs] and sfn_scan.ad[bs]
+ to libgnatprj; remove them from gnatmake.
+
+ -- Matthias Klose <doko@debian.org> Thu, 1 Jun 2006 20:35:54 +0200
+
+gcc-4.1 (4.1.0-4) unstable; urgency=low
+
+ [Ludovic Brenta]
+ * Fix a stupid bug whereby fname.ad{b,s} would be included in both
+ libgnatvsn-dev and libgnatprj-dev, preventing use of gnatprj.gpr.
+ Closes: #366733.
+
+ -- Matthias Klose <doko@debian.org> Thu, 11 May 2006 04:34:50 +0200
+
+gcc-4.1 (4.1.0-3) unstable; urgency=low
+
+ * Update to SVN 20060507.
+ * debian/rules.d/binary-java.mk: Use $(lib32) everywhere. Closes: #365388.
+ * Always configure hppa64-linux-gnu with
+ --includedir=/usr/hppa64-linux-gnu/include.
+ * Make libgnatvsn4.1 and libgnatprj4.1 priority optional. Closes: #365900.
+ * Call autoconf2.13 explicitely in the Ada patches, build-depend on
+ autoconf2.13. Closes: #365780.
+ * Fix libgnatprj-dev and libgnatvsn-dev dependencies on their shared
+ libraries.
+ * Deduce softfloat and vfp (ARM) configure options (Pjotr Kourzanov).
+ * Update proposed patch for PR26885 (May 2 version).
+ * Build the libxxstdc++-dbg packages, when not building the library pacakges.
+ * Do not include the _pic library in the libxxstdc++-dbg packages.
+
+ -- Matthias Klose <doko@debian.org> Sun, 7 May 2006 15:29:53 +0200
+
+gcc-4.1 (4.1.0-2) unstable; urgency=medium
+
+ * Update to SVN 20060428.
+ * Apply proposed patches for PR26885.
+
+ * Keep libffi doc files in its own directory. Closes: #360466.
+ * Update ppc64 patches for 4.1 (Andreas Jochens). Closes: #360498.
+ * Fix PR tree-optimization/26763, wrong-code, taken from the 4.1 branch.
+ Closes: #356896. CVE-2006-1902.
+ * hppa-cbranch, hppa-cbranch2 patches: Fix for PR target/26743,
+ PR target/11254, PR target/10274, backport from trunk (Randolph Chung).
+ * Let libgccN provide -dcv1 when cross-compiling (Pjotr Kourzanov).
+ Closes: #363289.
+ * (Build-)depend on glibc-2.3.6-7. Closes: #360895, #361904.
+ * Fix a pedantic report about a package description. Add a hint that
+ we do not like bug reports with locales other than "C". Closes: #361409.
+ * Enable the libjava interpreter on mips/mipsel.
+ * gcc-4.1-source: Depend on gcc-4.1-base.
+ * gnat-4.1: Fix permissions of .ali files.
+ * Build lib32gcj7 on amd64.
+ * debian/patches/ada-gnatvsn.dpatch: New. Apply proposed fix for
+ PR27194.
+
+ [Ludovic Brenta]
+ * debian/patches/ada-default-project-path.dpatch: new. Change the
+ default search path for project files to the one specified
+ by the Debian Policy for Ada: /usr/share/ada/adainclude.
+ * debian/patches/ada-symbolic-tracebacks.dpatch: new. Enable support for
+ symbolic tracebacks in exceptions.
+ * debian/patches/ada-missing-lib.dpatch: remove, superseded by the above.
+ * debian/patches/ada-link-lib.dpatch: changed.
+ - Instead of building libada as a target library only, build it as
+ both a host and, if different, target library.
+ - Build the GNAT tools in their top-level directory; do not use
+ recursive makefiles.
+ - Link the GNAT tools dynamically against libgnat.
+ - Apply proposed fix for PR27300.
+ - Rerun autoconf (Matthias Klose).
+ * debian/patches/ada-libgnatvsn.dpatch: new.
+ - Introduce a new shared library named libgnatvsn, containing
+ common components of GNAT under the GNAT-Modified GPL, for
+ use in GNAT tools, ASIS, GLADE and GPS.
+ - Link the gnat tools against this new library.
+ - Rerun autoconf (Matthias Klose).
+ * debian/patches/ada-libgnatprj.dpatch: new.
+ - Introduce a new shared library named libgnatprj, containing the
+ GNAT Project Manager, i.e. the parts of GNAT that parses project
+ files (*.gpr). Licensed under pure GPL; for use in GLADE and GPS.
+ - Link the gnat tools against this new library.
+ - Rerun autoconf (Matthias Klose).
+ * debian/patches/ada-acats.dpatch: new.
+ - When running the ACATS, look for the gnat tools in their new
+ directory (build/gnattools), and for the shared libraries in
+ build/gcc/ada/rts, build/libgnatvsn and build/libgnatprj.
+ * debian/gnatvsn.gpr, debian/gnatprj.gpr: new.
+ * debian/rules.d/binary-ada.mk, debian/control.m4: new binary packages:
+ libgnatvsn-dev, libgnatvsn4.1, libgnatprj-dev, libgnatprj4.1. Place
+ the *.gpr files in their respective -dev packages.
+
+ -- Matthias Klose <doko@debian.org> Sat, 29 Apr 2006 00:32:09 +0200
+
+gcc-4.1 (4.1.0-1) unstable; urgency=low
+
+ * libstdc++CXX-BV-dev.preinst: Remove (handling of c++ include dir for 4.0).
+ * libgcj-common: Move removal of docdir from preinst into postinst.
+ * libgcj7: Move removal of docdir from preinst into postinst.
+ * Drop alternative build dependency on gnat-3.4, not built anymore.
+ * Fix PR libgcj/26103, wrong exception thrown (4.1 branch).
+ * debian/patches/libjava-stacktrace.dpatch: Add support to print file names
+ and line numbers in stacktraces.
+ * Add debugging symbols for libgcjawt and lib-gnu-java-awt-peer-gtk
+ in the libgcj7-dbg and lib32gcj7-dbg packages.
+ * Remove dependency of the libgcj-dbg packages on the libgcj-dev packages,
+ add recommendations on binutils and libgcj-dev. Mention the requirement
+ of binutils for the stacktraces.
+ * Fix upgrade from version 4.0.2-9, loosing the Debian changelog.
+ Closes: #355439.
+ * gij/gcj: Install one alternative for each command, do not use slave
+ links for rmiregistry, javah, rmic. Ubuntu #26781. Closes: #342557.
+ * Fix for PR tree-optimization/26587, taken from the 4.1 branch.
+ * Fix PR libstdc++/26526 (link failure when _GLIBCXX_DEBUG is defined).
+ * Configure with --enable-clocale=gnu, even if not building C++ packages.
+ * Remove runtime path from biarch libraries as well.
+ * PR middle-end/26557 (ice-on-vaild-code, regression), taken from
+ the gcc-4_1-branch. Closes: #349083.
+ * PR tree-optimization/26672 (ice-on-vaild-code, regression), taken from
+ the gcc-4_1-branch. Closes: #356231.
+ * PR middle-end/26004 (rejects-vaild-code, regression), taken from
+ the gcc-4_1-branch.
+ * When building as standalone gcj, build libgcc4 (hppa only) and fastjar.
+ * Configure --with-cpu=v8 on sparc.
+ * debian/patches/libjava-hppa.dpatch: pa/pa32-linux.h
+ (CRT_CALL_STATIC_FUNCTION): Define when CRTSTUFFS_O is defined.
+ (John David Anglin). Closes: #353346.
+ * Point to the 4.1 version of README.Bugs (closes: #356230).
+ * Disable the libmudflap testsuite on alpha (getting killed).
+
+ -- Matthias Klose <doko@debian.org> Sat, 18 Mar 2006 23:00:39 +0100
+
+gcc-4.1 (4.1.0-0) experimental; urgency=low
+
+ * GCC 4.1.0 final release.
+ * Build the packages for the Java language from a separate source.
+ * Update NEWS.html, NEWS.gcc.
+ * libgcj-doc: Auto generated API documentation for libgcj7, classpath
+ example programs.
+ * Add gjdoc to Build-Depends-Indep.
+ * On amd64, build-depend on libc6-dev-i386 instead of ia32-libs-dev.
+ * Internal ssp headers now installed in the gcc libdir.
+ * Do not build gcj-4.1-base when building the gcc-4.1 packages.
+ * When building as gcj-4.1, use the tarball from the gcc-4.1-source
+ package.
+
+ [Ludovic Brenta]
+ * Allow to enable and disable NLS and bootstrapping from the environment.
+ - Adding "nls" to WITHOUT_LANG disables NLS support.
+ - If WITH_BOOTSTRAP is set, debian/rules2 calls configure
+ --enable-bootstrap=$(WITH_BOOTSTRAP) and just "make". If
+ WITH_BOOTSTRAP is unset, it calls configure without a bootstrapping
+ option and calls "make profiledbootstrap" or "make bootstrap-lean"
+ depending on the target CPU.
+ Currently overwritten to default to "bootstrap".
+
+ -- Matthias Klose <doko@debian.org> Thu, 2 Mar 2006 00:03:45 +0100
+
+gcc-4.1 (4.1ds9-0exp9) experimental; urgency=low
+
+ * Update to GCC 4.1.0 release candidate 1 (gcc-4.1.0-20060219 tarball).
+ * Update gcc-version patch for gcc-4.1.
+ * libgccN, libstdc++N*: Fix upgrade of /usr/share/doc symlinks.
+ * libjava awt & swing update, taken from trunk 2006-02-16.
+ * libgcj7-dev: Suggest libgcj-doc, built from a separate source package.
+ * Shorten build-dependency line (work around buildd problems
+ on arm* and mips*).
+ * New patch gcc-ice-hack (saving the preprocessed source on an ICE),
+ taken from Fedora.
+
+ -- Matthias Klose <doko@debian.org> Mon, 20 Feb 2006 10:07:23 +0100
+
+gcc-4.1 (4.1ds8-0exp8) experimental; urgency=low
+
+ * Update to SVN 20060212, taken from the 4.1 release branch.
+ * libgccN: Fix upgrade of /usr/share/doc/libgccN symlink.
+
+ -- Matthias Klose <doko@debian.org> Sun, 12 Feb 2006 19:48:31 +0000
+
+gcc-4.1 (4.1ds7-0exp7) experimental; urgency=low
+
+ * Update to SVN 20060127, taken from the 4.1 release branch.
+ - On hppa, bump the libgcc soversion to 4.
+ * Add an option not to depend on the system -base package for cross compiler
+ (Ian Wienand). Closes: #347484.
+ * Remove workaround increasing the stack size limit for some architectures,
+ not needed anymore on ia64.
+ * On amd64, build-depend on libc6-dev-i386, depend on libc6-i386, where
+ available.
+ * libstdc++6: Properly upgrade the doc directory. Closes: #346171.
+ * libstdc++6: Add a conflict to scim (<< 1.4.2-1). Closes: #343313.
+ * Set default 32bit ix86 architecture to i486.
+
+ -- Matthias Klose <doko@debian.org> Fri, 27 Jan 2006 22:23:22 +0100
+
+gcc-4.1 (4.1ds6-0ubuntu6) experimental; urgency=low
+
+ * Update to SVN 20060107, taken from the 4.1 release branch.
+ - Remove fix for PR ada/22533, fixed by patch for PR c++/23171.
+ * Remove binary packages from the control file, which aren't built
+ yet on any architecture.
+ * gcc-hppa64: Use /usr/hppa64-linux-gnu/include as location for the glibc
+ headers, tighten glibc (build-)dependency.
+ * libffi [arm]: Add support for closures, libjava [arm]: enable the gij
+ interpreter (Phil Blundell). Addresses: #337263.
+ * For the gcj standalone build, include cc1 into the gcj-4.1 package,
+ needed for linking java programs compiled to native code.
+
+ -- Matthias Klose <doko@debian.org> Sat, 7 Jan 2006 03:36:33 +0100
+
+gcc-4.1 (4.1ds4-0exp4) experimental; urgency=low
+
+ * Update to SVN 20051210, taken from the 4.1 release branch.
+ * Prepare to build the java packages from it's own source (merged
+ from Ubuntu).
+ - Build the java packages from the gcc-4.1 source, as long as packages
+ are prepared for experimental.
+ - When built as gcj, run only the libjava testsuite, don't build the
+ libstdc++ debug packages, don't package the gcc source.
+ - Loosen package dependencies, when java packages are built from
+ separate sources.
+ - Fix gcj hppa build, when java packages are built from separate sources.
+ - gij-4.1: Install test-summary, when doing separate builds.
+ - Allow java packages be installed independent from other packages built
+ from the source package.
+ - Rename libgcj7-common to libgcj7-jar.
+ - Introduce a gcj-4.1-base package to completely separate the two and not
+ duplicate the changelog in each gcj/gij package.
+ * Java related changes:
+ - libjava-xml-transform: Update from classpath trunk, needed for
+ eclipse (Michael Koch), applied upstream.
+ - Fix java wrapper scripts to point to 4.1 (closes: #341710).
+ - Reenable java on mips and mipsel.
+ - Fix libgcj6 dependency. Ubuntu #19935.
+ - Add libxt-dev as a java build dependency. autoconf explicitely checks
+ for X11/Intrinsic.h.
+ * Ada related changes:
+ - Apply proposed fix for PR ada/22533, reenable ada on alpha, powerpc,
+ mips, mipsel and s390.
+ - Add Ada support for GNU/kFreeBSD (Aurelien Jarno). Closes: #341356.
+ - Remove ada bootstrap workaround for alpha.
+ * Build a separate gcc-4.1-source package (Bastian Blank). Closes: #333922.
+ * Remove obsolete patch: libstdc++-automake.
+ * Remove patch integrated upstream: libffi-mips.
+ * Fix the installation of the hppa64 compiler in snapshot builds.
+ * Rename libgfortran0* to libgfortran1* (upstream soversion change).
+ * Add a dependency on libc-dev for all compilers / -dev packages except
+ gcc (which can be used for kernel builds without libc-dev).
+ * libffi4-dev: Fix package description.
+ * On amd64, install 32bit libraries into /emul/ia32-linux/usr/lib.
+ Addresses: #341147.
+ * Fix installation of biarch libstdc++ headers on amd64.
+ * Configure --with-tune=i686 on ix86 architectures (on Ubuntu with
+ -mtune=pentium4). Remove the cpu-default-* patches.
+ * debian/control.m4: Fix libxxgcc package names.
+ * Update the build infrastructure to build cross compilers
+ (Nikita V. Youshchenko).
+ * Tighten binutils (build-)dependency. Closes: #342484.
+ * Symlink more doc directories.
+ * debian/control.m4: Explicitely set Architecture for biarch packages.
+
+ -- Matthias Klose <doko@debian.org> Sat, 10 Dec 2005 16:56:45 +0100
+
+gcc-4.1 (4.1ds1-0ubuntu1) UNRELEASED; urgency=low
+
+ * Build Java packages only.
+ * Update to SVN 20051121, taken from the 4.1 release branch.
+ - Remove libjava-saxdriver-fix patch, applied upstream.
+ - Remove ada-gnat-version patch, applied upstream.
+ * Fix FTBFS in biarch builds on 32bit kernels.
+ * Update libstdc++-doc doc-base file (closes: #339046).
+ * Remove obsolete patch: gcc-alpha-ada_fix.
+ * Fix installation of biarch libstdc++ headers (Ubuntu #19655).
+ * Fix sparc and s390 biarch patches to build the 64bit libffi.
+ * Work around biarch build failure in libjava/classpath/native/jni/midi-alsa.
+ * Install spe.h header on powerpc.
+ * Add libasound build dependencies.
+ * libgcj: Fix installation of libgjsmalsa library.
+ * Remove patches not used anymore: libjava-no-rpath, i386-config-ml-nomf,
+ libobjc, multiarch-include, disable-biarch-check-mf, gpc-profiled,
+ gpc-no-gpidump, libgpc-shared, acats-expect.
+ * Fix references to manuals in gnat(1). Ubuntu #19772.
+ * Remove build dependency on xlibs-dev, add libxtst-dev.
+ * Do not configure with --disable-werror.
+ * Merge *-config-ml patches into one config-ml patch, configure the biarch
+ libs in debian/rules.defs.
+ * debian/gcj-wrapper: Accept -Xss.
+ * Do not build biarch java on Debian (missing biarch libasound).
+ * Do not build the java packages from this source package, avoiding
+ dependencies on X.
+
+ -- Matthias Klose <doko@ubuntu.com> Mon, 21 Nov 2005 20:29:43 +0100
+
+gcc-4.1 (4.1ds0-0exp0) experimental; urgency=low
+
+ * Configure libstdc++ using the default allocator.
+ * Update to 20051112, taken from the svn trunk.
+
+ -- Matthias Klose <doko@debian.org> Sat, 12 Nov 2005 23:47:01 +0100
+
+gcc-4.1 (4.1ds0-0ubuntu0) breezy; urgency=low
+
+ * UNRELEASED
+ * First snapshot of gcc-4.1 (CVS 20051019).
+ - adds SSP support (closes: #213994, #233208).
+ * Remove patches applied upstream/not needed anymore.
+ * Update patches for 4.1: link-libs, gcc-textdomain, libjava-dlsearch-path,
+ rename-info-files, reporting, classmap-path, i386-biarch, sparc-biarch,
+ libjava-biarch-awt, ada-gcc-name.
+ * Disable patches:
+ - 323016, m68k, necessary for 4.1?
+ * debian/copyright: Update for 4.1.
+ * debian/control, debian/control.m4, debian/rules.defs, debian/rules.conf:
+ Update for 4.1, add support for Obj-C++ and SSP.
+ * Fix generation of Ada docs in info format.
+ * Set Ada library version to 4.1.
+ * Drop gnat-3.3 as an alternative build dependency.
+ * Use fortran instead of f95 for the build files.
+ * Update build support for awt peer libs.
+ * Add packaging support for SSP library.
+ * Add packaging support for Obj-C++.
+ * Run the testsuite for -march=i686 on i386 and amd64 as well.
+ * Fix generation of Pascal docs in html format.
+ * Update config-ml patches to build libssp biarch.
+ * Disable libssp for hppa64 build.
+ * libgcj7-dev: Install jni_md.h.
+ * Disable gnat for powerpc, currently fails to build.
+ * Add biarch runtime lib packages for ssp, mudflap, ffi.
+ * Do not explicitely configure with --enable-java-gc=boehm, which is the
+ default.
+ * libjava-saxdriver-fix: Fix a problem in the Aelfred2 SAX parser.
+ * libstdc++6-4.0-dev: Depend on the libc-dev package. Ubuntu #18885.
+ * Build-depend on expect-tcl8.3 on all architectures.
+ * Build-depend on lib32z1-dev on amd64 and ppc64, drop build dependency on
+ amd64-libs.
+ * Disable ada on alpha mips mipsel powerpc s390, currently broken.
+
+ -- Matthias Klose <doko@ubuntu.com> Wed, 19 Oct 2005 11:02:31 +0200
+
+gcc-4.0 (4.0.2-3) unstable; urgency=low
+
+ * Update to CVS 20051015, taken from the gcc-4_0-branch.
+ - gcc man page fixes (closes: #327254, #330099).
+ - PR java/19870, PR java/20338, PR java/21844, PR java/21540:
+ Remove Debian patches.
+ - Applied libjava-echo-fix patch.
+ - Fix PR target/24284, ICE (Segmentation fault) on sparc-linux.
+ Closes: #329840.
+ - Fix PR c++/23797, ICE on typename outside template. Closes: #325545.
+ - Fix PR c++/22551, ICE in tree_low_cst. Closes: #318932.
+ * libstdc++6: Tighten libstdc++ shlibs version to 4.0.2-3 (new symbol).
+ * Update generated Ada files.
+ * Fix logic to disable mudflap and Obj-C++ via the environment.
+ * Remove f77 build bits.
+ * gij-4.0: Remove /var/lib/gcj-4.0/classmap.db on purge (closes: #330800).
+ * Let gcj-4.0 depend on libgcj6-dev, instead of recommending it. This is
+ not necessary for byte-code compilations, but for compilations to native
+ code. For compilations to byte-code, use a better compiler like ecj
+ for now (found in the ecj-bootstrap package).
+ * Disable biarch setup in cross compilers (Josh Triplett). Closes: #333952.
+ * Fix with_libnof logic for cross-compilations (Josh Triplett).
+ Closes: #333951.
+ * Depend on binutils (>= 2.16.1cvs20050902-1) on the alpha architecture.
+ Closes: #333954.
+ * On i386, build-depend on libc6-dev-amd64. Closes: #329108.
+ * (Build-)depend on glibc 2.3.5-5.
+
+ -- Matthias Klose <doko@debian.org> Sun, 2 Oct 2005 14:25:54 +0200
+
+gcc-4.0 (4.0.2-2) unstable; urgency=low
+
+ * Update to CVS 20051001, taken from the gcc-4_0-branch. Includes the
+ changes between 4.0.2 RC3 and the final 4.0.2 release, missing from
+ the upstream tarball. Remove patches applied upstream (gcc-c-decl,
+ pr23182, pr23043, pr23367, pr23891, pr21418, pr24018).
+ * On ix86 architectures run the testsuite for -march=i686 as well.
+ * Build libffi on the Hurd (closes: #328705).
+ * Add big-endian arm (armeb) support (Lennert Buytenhek). Closes: #330730.
+ * Update libjava xml to classpath CVS HEAD 20050930 (Michael Koch).
+ * Reapply patch to make -mieee the default on alpha-linux. Closes: #330826.
+ * Add workaround not to make libmudflap _start/_end not small data on
+ mips/mipsel, taken from CVS HEAD.
+ * Don't build the nof libraries on powerpc.
+ * Number crunching time on m68k, reenable gfortran on m68k-linux-gnu.
+
+ -- Matthias Klose <doko@debian.org> Sat, 1 Oct 2005 15:42:10 +0200
+
+gcc-4.0 (4.0.2-1) unstable; urgency=low
+
+ * GCC 4.0.2 release.
+ * lib64stdc++6: Set priority to optional.
+ * Fix bug in StreamSerializer, seen with eclipse-3.1 (Ubuntu 12744).
+ Backport from CVS HEAD, Michael Koch.
+ * Apply java patches, proposed for the 4.0 branch: PR java/24018,
+ PR libgcj/23182, PR java/19870, PR java/21844, PR libgcj/23367,
+ PR java/20338.
+ * Update the expect/pty test to actually call expect directly, rather
+ than test for the existence of PTYs, since a working expect is what
+ we really care about, not random device files (Adam Conrad).
+ Closes: #329715.
+ * Add build dependencies on lib64z1-dev.
+ * gcc-c-decl.dpatch: Fix C global decl handling regression in 4.0.2 from
+ 4.0.1
+
+ -- Matthias Klose <doko@debian.org> Thu, 29 Sep 2005 19:50:08 +0200
+
+gcc-4.0 (4.0.1-9) unstable; urgency=low
+
+ * Update to CVS 20050922, taken from the gcc-4_0-branch (4.0.2 RC3).
+ * Apply patches:
+ - Fix PR java/21418: Order of source files matters when compiling,
+ backported from mainline.
+ - Fix for PR 23043, backported form mainline.
+ - Proposed patch for #323016 (m68k only). Patch by Roman Zippel.
+ * libstdc++6: Tighten libstdc++ shlibs version to 4.0.1-9 (new symbol).
+ * Fail the build early, if the system doesn't have any pty devices
+ created in /dev. Needed for running the testsuite.
+ * Update hurd changes again (closes: #328973).
+
+ -- Matthias Klose <doko@debian.org> Thu, 22 Sep 2005 07:28:18 +0200
+
+gcc-4.0 (4.0.1-8) unstable; urgency=medium
+
+ * Update to CVS 20050917, taken from the gcc-4_0-branch.
+ - Fix FTBFS for boost, introduced in 4.0.1-7 (closes: #328684).
+ * Fix PR java/23891, eclipse bootstrap.
+ * Set priority of gcc-4.0-hppa64 package to standard.
+ * Bump standards version to 3.6.2.
+ * Fix java wrapper script, mishandles command line options with arguments.
+ Patch from Olly Betts. Closes: #296456.
+ * Bump epoch of the lib32gcc1 package to the same epoch as for the the
+ libgcc1 and lib64gcc1 packages.
+ * Fix some lintian warnings.
+ * Build libffi on the Hurd (closes: #328705).
+ * For biarch builds, disable the testsuite for the non-default architecture
+ for runtime libraries, which are not built by default (libjava).
+ * Add gsfonts-x11 to Build-Depends-Indep to avoid warnings from doxygen.
+ * Install Ada .ali files read-only.
+
+ -- Matthias Klose <doko@debian.org> Sat, 17 Sep 2005 10:35:23 +0200
+
+gcc-4.0 (4.0.1-7) unstable; urgency=low
+
+ * Update to CVS 20050913, taken from the gcc-4_0-branch.
+ - Fix PR c++/19004, ICE in uses_template_parms (closes: #284777).
+ - Fix PR rtl-optimization/23454, ICE in invert_exp_1 on sparc.
+ Closes: #321215.
+ - Fix PR libstdc++/23417, make bits/stl_{list,tree}.h -Weffc++ clean.
+ Closes: ##322170.
+ * Install 'altivec.h' on ppc64 (closes: #323945).
+ * Install locale data with the versioned package name (closes: #321591).
+ * Fix fastjar build without building libjava.
+ * On hppa, don't build using gcc-3.3 when ada is disabled.
+ * On m68k, don't build the stage1 compiler using -O.
+
+ * Ludovic Brenta <ludovic@ludovic-brenta.org>
+ - Allow the choice whether or not to build with NLS.
+ - Fix a typo whereby libffi was always enabled on i386.
+
+ -- Matthias Klose <doko@debian.org> Tue, 13 Sep 2005 23:23:11 +0200
+
+gcc-4.0 (4.0.1-6) unstable; urgency=low
+
+ * Update to CVS 20050821, taken from the gcc-4_0-branch.
+ - debian/patches/pr21562.dpatch: Removed, applied upstream.
+ - debian/patches/libjava-awt-name.dpatch: Updated.
+ - debian/patches/classpath-20050618.dpatch: Updated.
+ * Use all available CPU's for the check target, unless USE_NJOBS == no.
+ * debian/patches/biarch-include.dpatch: Include
+ /usr/local/include/<arch>-linux-gnu before including /usr/local/include.
+ * Fix biarch system include directories for the non-default architecture.
+ * Prefer gnat-4.0 over gnat-3.4 over gnat-3.3 as a build-dependency.
+
+ -- Matthias Klose <doko@debian.org> Thu, 18 Aug 2005 18:36:23 +0200
+
+gcc-4.0 (4.0.1-5) unstable; urgency=low
+
+ * Update to CVS 20050816, taken from the gcc-4_0-branch.
+ - Fix PR middle-end/23369, wrong code generation for funcptr comparison
+ on hppa. Closes: #321785.
+ - Fix PR fortran/23368 ICE with NAG routines (closes: #322912).
+ * Build-depend on libcairo2-dev (they say, that's the final package name ...)
+ * libgcj: Search /usr/lib/gcj-4.0 for dlopened libraries, place a copy
+ of the .la files in the libgcj6 package into this directory.
+ Closes: #322576.
+ * Tighten the dependencies between the compiler packages to the same
+ version and release. Use some substitution variables for control file
+ generation.
+ * Remove build dependencies for gpc.
+ * Don't use '/emul/ia32-linux' on ppc64 (closes: #322890).
+ * Synchronize with Ubuntu.
+
+ -- Matthias Klose <doko@debian.org> Tue, 16 Aug 2005 22:45:47 +0200
+
+gcc-4.0 (4.0.1-4ubuntu1) breezy; urgency=low
+
+ * Jeff Bailey <jbailey@ubuntu.com>
+
+ Enable i386 biarch using biarch glibc (not yet enabled for unstable).
+ - debian/rules.d/binary-libgcc.mk: Make i386 lib64gcc1 depend on
+ libc6-amd64
+ - debian/control.m4: Suggest libc6-amd64 rather than amd64-libs.
+ - debian/rules.conf: Build-Dep on libc6-dev-amd64 [i386]
+ Build-Dep on binutils >= 2.16.1-2ubuntu3
+ - debian/rules2: Enable biarch build in Ubuntu.
+
+ * Matthias Klose <doko@ubuntu.com>
+
+ - Add shlibs file and dependency information for the lib32gcc1 package.
+ - debian/patches/gcc-textdomain.dpatch: Update (closes: #321591).
+ - Set priority of gcc-4.0-base and libstdc++6 packages to `required'.
+ Closes: #321016.
+ - libffi-hppa.dpatch: Remove, applied upstream.
+
+ -- Matthias Klose <doko@debian.org> Mon, 8 Aug 2005 19:39:02 +0200
+
+gcc-4.0 (4.0.1-4) unstable; urgency=low
+
+ * Enable the biarch compiler for powerpc (closes: #268023).
+ * Update to CVS 20050806, taken from the gcc-4_0-branch.
+ * Build depend on libcairo0.6.0-dev (closes: #321540).
+ * Fix Ada build on the hurd (closes: #321350).
+ * Update libffi for mips (Thiemo Seufer). Closes: #321100.
+ * Fix segfault on 64bit archs in the AWT Gtk peer library (Dan Frazier).
+ Closes: #320915.
+ * Add libXXgcc1 build dependencies for biarch builds.
+
+ -- Matthias Klose <doko@debian.org> Sun, 7 Aug 2005 07:01:59 +0000
+
+gcc-4.0 (4.0.1-3) unstable; urgency=medium
+
+ * Update to CVS 20050725, taken from the gcc-4_0-branch.
+ - Fix ICE with -O and -mno-ieee-fp/-ffast-math (closes: #319087).
+ * Synchronize with Ubuntu.
+ * Fix applying hurd specific patches for the hurd build (closes: #318443).
+ * Do not build-depend on libmpfr-dev on architectures, where fortran
+ is not built.
+ * Apply biarch include patch on ppc64 as well (closes: #318603).
+ * Correct libstdc++-dev package description (closes: #319082).
+ * debian/rules.defs: Replace DEB_TARGET_GNU_CPU with DEB_TARGET_ARCH_CPU.
+ * gcc-4.0-hppa64: Rename hppa64-linux-gcc to hppa64-linux-gnu-gcc.
+ Closes: #319818.
+
+ -- Matthias Klose <doko@debian.org> Mon, 25 Jul 2005 10:43:06 +0200
+
+gcc-4.0 (4.0.1-2ubuntu3) breezy; urgency=low
+
+ * Update to CVS 20050720, taken from the gcc-4_0-branch.
+ - Fix PR22278, volatile issues, seen when building xorg.
+ * Build against new libcairo1-dev (0.5.2).
+
+ -- Matthias Klose <doko@debian.org> Wed, 20 Jul 2005 12:29:50 +0200
+
+gcc-4.0 (4.0.1-2ubuntu2) breezy; urgency=low
+
+ * Acknowledge that i386 biarch builds still need to be fixed for glibc-2.3.5.
+
+ -- Matthias Klose <doko@ubuntu.com> Tue, 19 Jul 2005 08:29:30 +0000
+
+gcc-4.0 (4.0.1-2ubuntu1) breezy; urgency=low
+
+ * Synchronize with Debian.
+ * Update to CVS 20050718, taken from the gcc-4_0-branch.
+ - Fix PR c++/22132 (closes: #318488), upcasting a const class pointer
+ to struct the class derives from generates wrong code.
+ * Build biarch runtime libraries for Fortran and ObjC.
+ * Apply proposed patch for PR22309 (crash with mt_allocator if libstdc++
+ is dlclosed). Closes: #293466.
+
+ -- Matthias Klose <doko@ubuntu.com> Mon, 18 Jul 2005 17:10:18 +0200
+
+gcc-4.0 (4.0.1-2) unstable; urgency=low
+
+ * Don't apply the patch to make -mieee the default on alpha-linux-gnu.
+ Causes the bootstrap to fail on alpha-linux-gnu.
+
+ -- Matthias Klose <doko@debian.org> Tue, 12 Jul 2005 00:14:12 +0200
+
+gcc-4.0 (4.0.1-1) unstable; urgency=high
+
+ * GCC 4.0.1 final release. See /usr/share/doc/gcc-4.0/NEWS.{gcc,html}.
+ * Build fastjar on mips/mipsel, fix fastjar build without building java.
+ * Disable the comparision check on unstable/ia64. adaint.o differs,
+ currently cannot be reproduced with glibc-2.3.5 and binutils-2.16.1.
+ * libffi/hppa: Fix handling of 3 and 5-7 byte struct returns.
+ * amd64: Fix libgcc symlinks to point to /usr/lib32, instead of /lib32.
+ * On powerpc, don't build with -j >1, apparently doesn't succeeds
+ on the Debian buildd.
+ * Apply revised patch to make -mieee the default on alpha-linux,
+ and add -mieee-disable switch to turn the default off (Tyson Whitehead).
+ * Disable multiarch-includes; redo biarch-includes to include the paths
+ for the non-default biarch, when called with -m32/-m64.
+ * Move new java headers from libstdc++-dev to libgcj-dev, add replaces
+ line.
+ * Update classpath patch to work with cairo-0.5.1. Patch provided by
+ Michael Koch.
+ * Further classpath updates for gnu.xml and javax.swing.text.html.
+ Patch provided by Michael Koch.
+ * Require binutils (>= 2.16.1) as a build dependency and a dependency.
+ * On i386, require amd64-libs-dev (>= 1.2).
+ * Update debian/NEWS.{html,gcc}.
+
+ * Closing bug reports reported against older gcc versions (some of them
+ still present in Debian, but not anymore as the default compiler).
+ Usually, forwarded bug reports are linked to
+ http://gcc.gnu.org/PR<upstream bug number>
+ The upstream bug number usually can be found in the Debian reports.
+
+ * Closed reports reported against gcc-3.3 and fixed in gcc-3.4:
+ - General:
+ + PR rtl-optimization/2960: Duplicate loop conditions even with -Os
+ Closes: #94701.
+ + PR optimization/3995: i386 optimisation: joining tests.
+ Closes: #105309.
+ + PR rtl-optimization/11635: Unnecessary store onto stack, more
+ curefully expand union cast (closes: #202016).
+ + PR target/7618: vararg disallowed in virtual function. Closes: #205404.
+ + Large array problem on 64 bit platforms (closes: #209152).
+ + Mark more strings as translatable (closes: #227129).
+ + PR gcc/14711: ICE when compiling a huge source file Closes: #234711.
+ + Better code generation for if(!p) return NULL;return p;
+ Closes: #242318.
+ + PR rtl-optimization/16152: Perl ftbfs on {ia64,arm,m68k}-linux.
+ Closes: #255801.
+ + ICE (segfault) while compiling Linux 2.6.9 (closes: #277206).
+ + Link error building memtest (closes: #281445).
+ - Ada:
+ + PR ada/12450: Constraint error for valid input (closes: #210844).
+ + PR ada/13620: miscompilation of array initializer with
+ -O3 -fprofile-arcs. Closes: #226244.
+ - C:
+ + PR c/6897: Code produced with -fPIC reserves EBX, but compiles
+ bad __asm__ anyway (closes: #73065).
+ + PR c/9209: On i386, gcc-3.0 allows $ in indentifiers but not the asm.
+ Closes: #121282.
+ + PR c/11943: Accepts invalid declaration "int x[2, 3];" in C99 mode.
+ Closes: #177303.
+ + PR c/11942: restrict keyword broken in C99 mode. Closes: #187091.
+ + PR other/11370: -Wunreachable-code gives false complaints.
+ Closes: #196600.
+ + PR c/11369: Too relaxed checking with -Wstrict-prototypes.
+ Closes: #197504.
+ + PR c/11445: False positive warning with -Wunreachable-code.
+ Closes: #200140.
+ + PR c/11459: -stdc=c90 -pedantic warns about C90's non long-long
+ support when in C99 mode. Closes: #200392.
+ + PR c/456: Handling of constant expressions. Closes: #225935.
+ + ICE on invalid #define with -traditional (closes: #242916).
+ + No warning when initializing a variable with itself, new option
+ -Winit-self (closes: #293957).
+ - C++:
+ + C++ parse error (closes: #42946).
+ + PR libstdc++/9073: Replacement for __STL_ASSERTIONS (libstdc++v3
+ debug mode). Closes: #128993.
+ + Parse errors in nested constructor calls (closes: #138561).
+ + PR optimization/1823: -ftrapv aborts with pointer difference due to
+ division optimization. Closes: #169862.
+ + ICE on invalid code (closes: #176101).
+ + PR c++/10199: ICE handling method parametrized by template.
+ Closes: #185604.
+ + High memory usage building packages OpenOffice.org and MythTV.
+ Closes: #194345, #194513.
+ + Improved documentation of std::lower_bound (closes: #196380).
+ + ICE in regenerate_decl_from_template (closes: #197674).
+ + PR c++/11444: Function fails to propagate up class tree
+ (template-related). Closes: #198042.
+ + ICE when using namespaced typedef of primitive type as struct.
+ Closes: #198261.
+ + Bug using streambuf / iostream to read from a named pipe.
+ Closes: #216105.
+ + PR c++/11437: ICE in lookup_name_real (closes: #200011).
+ + Add large file support (LFS) in libstdc++ (closes: #220000).
+ + PR c++/13621: ICE compiling a statement expression returning type
+ string (closes: #224413).
+ + g++ doesn't find inherited inner class after template instantiation.
+ Closes: #227518.
+ + PR libstdc++/13928: Add whatis info in man pages generated by doxygen.
+ Closes: #229642.
+ + Missing symbol _M_setstate in libstdc++ (closes: #232709).
+ + Unable to parse declaration of inline constructor explicit
+ specialization (closes: #234709).
+ + ICE (segfault) on invalid C++ code (closes: #246031).
+ + ICE in lookup_tempate_function (closes: #262441).
+ + Undefined symbols in libstdc++, when using specials char_traits.
+ Closes: #266110.
+ + PR libstdc++/16011: Outputting numbers with ostream in the locale fr_BE
+ causes infinite recursion (closes: #270795).
+ + ICE in tree_low_cst (closes: #276291).
+ + ICE in in expand_call (closes: #283503).
+ + typeof operator is misparsed in a template function (closes: #288555).
+ + ICE in tree_low_cs (closes: #291374).
+ + Improve uninformative error messages (closes: #292961, #293076).
+ + ICE on array initialization (closes: #294560).
+ + Failure to build xine-lib with -finline-functions (closes: #306854).
+ - Java:
+ + Fix error finding files in subdirectories (closes: #195480).
+ + Implement java.text.CollationElementIterator lacks getOffset().
+ Closes: #259789.
+ - Treelang:
+ + Pointer truncation on 64bit architectures (closes: #308367).
+ - Architecture specific:
+ - alpha
+ + PR debug/10695: ICE on alpha while building agistudio.
+ Closes: #192568.
+ + ICE when building fceu (closes: #228018, #252764).
+ - amd64
+ + Miscompilation of Objective-C code (closes: #250174).
+ + g++ hangs compiling k3d on amd64 (closes: #285364).
+ - arm
+ + PR target/19008: gcc -O3 -fPIC produces wrong code via auto inlining.
+ Closes: #285238.
+ - i386
+ + PR target/4106: i386 -fPIC asm ebx clobber no error.
+ Closes: #153472.
+ + PR target/10984: x86/sse2 ICEs on vector intrinsics. Closes: #166940.
+ + Wrong code generation on at least ix86 (closes: #275655).
+ - m68k
+ + PR target/9201: ICE compiling octave-2.1 (closes: #175478).
+ + ICE in verify_initial_elim_offsets (closes: #204407, #257012).
+ + g77 generates invalid assembly code (closes: #225621).
+ + ICE in verify_local_live_at_start (closes #245584).
+ - powerpc
+ + PR optimization/12828: -floop-optimize is unstable on PowerPC (float
+ to int conversion problem). Closes: #218219.
+ + PR target/13619: ICE building altivec code in ffmpeg.
+ Closes: #226148.
+ + PR target/20046: Miscompilation of bind 9.3.0. Closes: #292958.
+ - sparc
+ + ICE (segfault) while building atlas3 on sparc32 (closes: #249108).
+ + Wrong optimization on sparc32 when building linux kernel.
+ Closes: #254626.
+
+ * Closed reports reported against gcc-3.3 or gcc-3.4 and fixed in gcc-4.0:
+ - General:
+ + PR rtl-optimization/6901: Optimizer improvement (removing unused
+ local variables). Closes: #67206.
+ + PR middle-end/179: Failure to detect use of unitialized variable
+ with -O -Wall. Closes: #117765.
+ + ICE building glibc's nptl on amd64 (closes: #260710, #307993).
+ + PR middle-end/17827: ICE in make_decl_rtl. Closes: #270854.
+ + PR middle-end/21709: ICE on compile-time complex NaN. Closes: #305344.
+ - Ada:
+ + PR ada/10889: Convention Fortran matrices mishandled in generics.
+ Closes: #192135.
+ + PR ada/13897: Implement tasking on powerpc. Closes: #225346.
+ - C:
+ + PR c/13072: Bogus warning with VLA in switch. Closes: #218803.
+ + PR c/13519: typeof(nonconst+const) is const. Closes: #208981.
+ + PR c/12867: Incorrect warning message (void format, should be void*
+ format). Closes: #217360.
+ + PR c/16066: PR 16066] i386 loop strength reduction bug.
+ Closes: #254659.
+ - C++:
+ + PR c++/13518: -Wnon-virtual-dtor doesn't always work. Closes: #212260.
+ + PR translation/16025: ICE with unsupported locale(closes: #242158).
+ + PR c++/15125: -Wformat doesn't warn for different types in fprintf.
+ Closes: #243507.
+ + PR c++/15214: Warn only if the dtor is non-private or the class has
+ friends. (closes: #246639).
+ + PR libstdc++/17218: Unknown subjects in generated libstdc++ manpages.
+ Closes: #262934.
+ + PR libstdc++/17223: Missing .so references in generated libstdc++
+ manpages. Closes: #262956.
+ + libstdc++-doc: Improve man pages (closes: #280910).
+ + PR c++/19006: ICE in tree_low_cst. Closes: #285692.
+ + g++ does not check arguments to fprintf. Closes: #281847.
+ - Java:
+ + PR java/7304: gcj ICE (closes: #152501).
+ + PR libgcj/7305: Installation of headers not directly in /usr/include.
+ Closes: #195483.
+ + PR libgcj/11941: libgcj timezone handling (closes: #203212).
+ + PR java/14709: gcj fails to wait for its child processes on exec().
+ Closes: #238432.
+ + PR libgcj/21703: gcj hangs when rapidly calling String.intern().
+ Closes: #275547.
+ + SocketChannel.get(ByteBuffer) returns 0 at EOF. Closes: #281602.
+ + PR java/19711: gcj segfaults instead of reporting the ambiguous
+ expression. Closes: #286715.
+ + Static libgcj contains repeated archive members (closes: #298263).
+ - Architecture specific:
+ - alpha
+ + Unaligned accesses with ?-operator (closes: #301983).
+ - arm
+ + Compilation error of glibc-2.3.4 on arm (closes: #298508).
+ - m68k
+ + ICE in add_insn_before (closes: #248432).
+ - mips
+ + Fix o32 ABI breakage in gcc 3.3/3.4 (closes: #270620).
+ - powerpc
+ + ICE in extract_insn (closes: #311128).
+
+ * Closing bug reports as wontfix:
+ - g++ defines _GNU_SOURCE when using the libstdc++ header files.
+ Behaviour did change since 3.0. Closes: #126703, #164872.
+
+ -- Matthias Klose <doko@debian.org> Sat, 9 Jul 2005 17:10:54 +0000
+
+gcc-4.0 (4.0.0ds2-12) unstable; urgency=high
+
+ * Update to CVS 20050701, taken from the gcc-4_0-branch.
+ * Apply proposed patch for MMAP configure fix; aka PR 19877. Backport
+ from mainline.
+ * Disable Fortran on m68k. Currently FTBFS.
+ * Split multiarch-include/lib patches. Update multiarch-include patch.
+ * Fix FTBFS of the hppa64-linux cross compiler. Don't add the
+ multiarch include dirs when cross compiling.
+ * Configure --with-java-home, as used by java-gcj-compat.
+ Closes: #315646.
+ * Make libgcj-dbg packages priority extra.
+ * Set the path of classmap.db to /var/lib/gcj-@gcc_version@.
+ * On m68k, do not create the default classmap.db in the gcj postinst.
+ See #312830.
+ * On amd64, install the 32bit libraries into /emul/ia32-linux/usr/lib.
+ Restore the /usr/lib32 symlink.
+ * On amd64, don't reference lib64, but instead lib (lib64 is a symlink
+ to lib). Closes: #293050.
+ * Remove references to build directories from the .la files.
+ * Make cpp-X.Y conflict with earlier versions of gcc-X.Y, g++-X.Y, gobjc-X.Y,
+ gcj-X.Y, gfortran-X.Y, gnat-X.Y, treelang-X.Y, if a path component in
+ the gcc library path changes (i.e. version or target alias).
+ * Disable Ada for sh3 sh3eb sh4 sh4eb.
+ * For gcj-4.0, add a conflict to libgcj4-dev and libgcj5-dev.
+ Closes: #316499.
+
+ -- Matthias Klose <doko@debian.org> Sat, 2 Jul 2005 11:04:35 +0200
+
+gcc-4.0 (4.0.0ds1-11) unstable; urgency=low
+
+ * debian/rules.defs: Disable Ada for alpha.
+ * debian/rules.conf: Fix typo in type-handling replacement code.
+ * Don't ship an empty libgcj6-dbg package.
+
+ -- Matthias Klose <doko@debian.org> Thu, 23 Jun 2005 09:03:21 +0200
+
+gcc-4.0 (4.0.0ds1-10) unstable; urgency=medium
+
+ * debian/patches/libstdc++-api-compat.dpatch: Apply proposed patch
+ to fix libstdc++ 3.4.5/4.0 compatibility.
+ * type-handling output became insane. Don't use it anymore.
+ * Drop the reference to the stl-manual package (closes: #314983).
+ * Disable java on GNU/kFreeBSD targets, requested by Robert Millan.
+ Closes: #315140.
+ * Terminate the acats-killer process, even if the build is aborted
+ by the user (closes: #314405).
+ * debian/rules.defs: Define DEB_TARGET_ARCH_{OS,CPU}.
+ * Start converting the use of DEB_*_GNU_* to DEB_*_ARCH_* in the build
+ files.
+ * Do not configure with --enable-gtk-cairo. Needs newer gtk. Drop
+ build dependency on libcairo-dev.
+ * Fix setting of the system header directory for the hurd (Michael Banck).
+ Closes: #315386.
+ * Fix FTBFS on hurd-i386: MAXPATHLEN issue (Michael Banck). Closes: #315384.
+
+ -- Matthias Klose <doko@debian.org> Wed, 22 Jun 2005 19:45:50 +0200
+
+gcc-4.0 (4.0.0ds1-9ubuntu2) breezy; urgency=low
+
+ * Fix version number in libgcj shlibs file.
+
+ -- Matthias Klose <doko@ubuntu.com> Sun, 19 Jun 2005 10:34:02 +0200
+
+gcc-4.0 (4.0.0ds1-9ubuntu1) breezy; urgency=low
+
+ * Update to 4.0.1, release candidate 2.
+ * libstdc++ shlibs file: Require 4.0.0ds1-9ubuntu1 as minimum version.
+ * Rename libawt to libgcjawt to avoid conflicts with other
+ libawt implementations (backport from HEAD).
+ * Update classpath awt, swing and xml parser for HTML support in swing.
+ Taken from classpath CVS HEAD 2005-06-18. Patch provided by Michael Koch.
+ * Remove the libgcj-buffer-strategy path, part of the classpath update.
+ * libgcj shlibs file: Require 4.0.0ds1-9ubuntu1 as minimum version.
+ * Require cairo-0.5 as build dependency.
+ * gij-4.0: Provide java1-runtime.
+ * gij-4.0: Provide an rmiregistry alternative (using grmiregistry-4.0).
+ * gcj-4.0: Provide an rmic alternative (using grmic-4.0).
+ * libgcj6-dev conflicts with libgcj5-dev, libgcj4-dev, not libgcj6.
+ Closes: #312741.
+ * libmudflap-entry-point.dpatch: Correct name of entry point on mips/mipsel.
+ * Apply proposed patch for PR 18421 and PR 18719 (m68k only).
+ * Apply proposed path for PR 21562.
+ * Add build dependency on dpkg (>= 1.13.7).
+ * On linux systems, configure for <cpu>-linux-gnu.
+ * Configure the hppa64 cross compiler to target hppa64-linux-gnu.
+ * (Build-)depend on binutils-2.16.1.
+ * libstdc{32,64}++6-4.0-dbg: Depend on libstdc++6-4.0-dev.
+ * gnat-4.0: only depend on libgnat, when a shared libgnat is built.
+ * gfortran-4.0: Depend on libgmp3c2 | libgmp3.
+ * On hppa, explicitely use gcc-3.3 as a build dependency in the case
+ that Ada is disabled.
+ * libmudflap: Always build the library for the non-default biarch
+ architecture, or else the test results show link failures.
+
+ -- Matthias Klose <doko@ubuntu.com> Sat, 18 Jun 2005 00:42:55 +0000
+
+gcc-4.0 (4.0.0-9) unstable; urgency=low
+
+ * Upload to unstable.
+
+ -- Matthias Klose <doko@debian.org> Wed, 25 May 2005 19:02:20 +0200
+
+gcc-4.0 (4.0.0-8ubuntu3) breezy; urgency=low
+
+ * debian/control: Regenerate.
+
+ -- Matthias Klose <doko@ubuntu.com> Sat, 4 Jun 2005 10:56:27 +0200
+
+gcc-4.0 (4.0.0-8ubuntu2) breezy; urgency=low
+
+ * Fix powerpc-config-ml patch.
+
+ -- Matthias Klose <doko@ubuntu.com> Fri, 3 Jun 2005 15:47:52 +0200
+
+gcc-4.0 (4.0.0-8ubuntu1) breezy; urgency=low
+
+ * powerpc biarch support:
+ - Enable powerpc biarch support, build lib64gcc1 on powerpc.
+ - Add patch to disable libstdc++'s configure checking, if it can't run
+ 64bit binaries on 32bit kernels (Sven Luther).
+ - Apply the same patch to the other runtime librararies as well.
+ - Run the testsuite with -m64, if we can execute 64bit binaries.
+ - Add libc6-dev-ppc64 as build dependency for powerpc.
+ * 32bit gcj libs for amd64.
+ * debian/logwatch.sh: Don't remove logwatch pid file on exit (suggested
+ by Ryan Murray).
+ * Update to CVS 20050603, taken from the gcc-4_0-branch.
+ * g++-4.0 provides c++abi2-dev.
+ * Loosen dependencies on packages of architecture `all' to not break
+ binary only uploads.
+ * Build libgfortran for biarch as well, else the testsuite will fail.
+
+ -- Matthias Klose <doko@ubuntu.com> Fri, 3 Jun 2005 13:38:19 +0200
+
+gcc-4.0 (4.0.0-8) experimental; urgency=low
+
+ * Synchronize with Ubuntu.
+
+ -- Matthias Klose <doko@debian.org> Mon, 23 May 2005 01:56:28 +0000
+
+gcc-4.0 (4.0.0-7ubuntu7) breezy; urgency=low
+
+ * Fix build failures for builds with disabled testsuite.
+ * Adjust debian/rules conditionals to work with all dpkg versions.
+ * Build separate lib32stdc6-4.0-dbg/lib64stdc6-4.0-dbg packages.
+ * Add the debugging symbols of the optimzed libstdc++ build in the
+ lib*stdc++6-dbg packages as well.
+ * Build a libgcj6-dbg package.
+ * Update to CVS 20050522, taken from the gcc-4_0-branch.
+ * Add Ada support for the ppc64 architecture (Andreas Jochens):
+ * debian/patches/ppc64-ada.dpatch
+ - Add gcc/ada/system-linux-ppc64.ads, which has been copied from
+ gcc/ada/system-linux-ppc.ads and changed to use 'Word_Size' 64
+ instead of 32.
+ - gcc/ada/Makefile.in: Use gcc/ada/system-linux-ppc64.ads on powerpc64.
+ * debian/rules.patch
+ - Use ppc64-ada patch on ppc64.
+ * debian/rules.d/binary-ada.mk
+ Place the symlinks libgnat.so, libgnat-4.0.so, libgnarl.so,
+ libgnarl-4.0.so in '/usr/lib' instead of '<gcc_lib_dir>/adalib'.
+ Closes: #308948.
+ * Add libc6-dev-i386 as an alternative build dependency for amd64.
+ Closes: #305690.
+
+ -- Matthias Klose <doko@ubuntu.com> Sun, 22 May 2005 22:14:20 +0200
+
+gcc-4.0 (4.0.0-7ubuntu6) breezy; urgency=low
+
+ * Don't trust dpkg-architecture (1.13.4), it "hurds" ...
+
+ -- Matthias Klose <doko@ubuntu.com> Wed, 18 May 2005 11:36:38 +0200
+
+gcc-4.0 (4.0.0-7ubuntu5) breezy; urgency=low
+
+ * libgcj6-dev: Don't provide libgcj-dev.
+
+ -- Matthias Klose <doko@ubuntu.com> Wed, 18 May 2005 00:30:32 +0000
+
+gcc-4.0 (4.0.0-7ubuntu4) breezy; urgency=low
+
+ * Update to CVS 20050517, taken from the gcc-4_0-branch.
+ * Apply proposed patch for PR21293.
+
+ -- Matthias Klose <doko@ubuntu.com> Tue, 17 May 2005 23:05:40 +0000
+
+gcc-4.0 (4.0.0-7ubuntu2) breezy; urgency=low
+
+ * Update to CVS 20050515, taken from the gcc-4_0-branch.
+
+ -- Matthias Klose <doko@ubuntu.com> Sun, 15 May 2005 23:48:00 +0200
+
+gcc-4.0 (4.0.0-7ubuntu1) breezy; urgency=low
+
+ * Synchronize with Debian.
+
+ -- Matthias Klose <doko@ubuntu.com> Mon, 9 May 2005 19:35:29 +0200
+
+gcc-4.0 (4.0.0-7) experimental; urgency=low
+
+ * Update to CVS 20050509, taken from the gcc-4_0-branch.
+ * Remove the note from the fastjar package description, stating, that
+ fastjar is incomplete compared to the "standard" jar utility.
+ * Fix typo in build depends. dpkg-checkbuilddeps doesn't like a comma
+ inside [].
+ * Tighten shlibs dependencies to require the current version.
+
+ -- Matthias Klose <doko@debian.org> Mon, 9 May 2005 19:02:03 +0200
+
+gcc-4.0 (4.0.0-6) experimental; urgency=low
+
+ * Update to CVS 20050508, taken from the gcc-4_0-branch.
+
+ -- Matthias Klose <doko@debian.org> Sun, 8 May 2005 14:08:28 +0200
+
+gcc-4.0 (4.0.0-5ubuntu1) breezy; urgency=low
+
+ * Temporarily disable the i386 biarch build. Remove the amd64-libs-dev
+ build dependency, add (build-)conflict (<= 1.1ubuntu1).
+
+ -- Matthias Klose <doko@ubuntu.com> Sat, 7 May 2005 16:56:21 +0200
+
+gcc-4.0 (4.0.0-5) breezy; urgency=low
+
+ * gnat-3.3 and gnat-4.0 are alternative build dependencies (closes: #308002).
+ * Update to CVS 20050507, taken from the gcc-4_0-branch.
+ * gcj-4.0: Install gjnih.
+ * Add libgcj buffer strategy framework (Thomas Fitzsimmons), needed for OOo2.
+ Backport from 4.1.
+ * Fix all lintian errors and most of the warnings.
+
+ -- Matthias Klose <doko@ubuntu.com> Sat, 7 May 2005 12:26:15 +0200
+
+gcc-4.0 (4.0.0-4) breezy; urgency=low
+
+ * Still prefer gnat-3.3 over gnat-4.0 as a build dependency.
+
+ -- Matthias Klose <doko@ubuntu.com> Fri, 6 May 2005 22:30:43 +0200
+
+gcc-4.0 (4.0.0-3) breezy; urgency=low
+
+ * Update to CVS 20050506, taken from the gcc-4_0-branch.
+ * Update priority of java alternatives to 40.
+ * Move gcj-dbtool to gij package, move the default classmap.db to
+ /var/lib/gcj-4.0/classmap.db. Create it in the postinst.
+ * Fix gcc-4.0-hppa64 postinst (closes: #307762).
+ * Fix gcc-4.0-hppa64, gij-4.0 and gcj-4.0 postinst, to not ignore errors
+ from update-alternatives.
+ * Fix gcc-4.0-hppa64, fastjar, gij-4.0 and gcj-4.0 prerm,
+ to not ignore errors from update-alternatives.
+
+ -- Matthias Klose <doko@ubuntu.com> Fri, 6 May 2005 17:50:58 +0200
+
+gcc-4.0 (4.0.0-2) experimental; urgency=low
+
+ * GCC 4.0.0 release.
+ * Update to CVS 20050503, taken from the gcc-4_0-branch.
+ * Add gnat-4.0 as an alternative build dependency (closes: #305690).
+
+ -- Matthias Klose <doko@debian.org> Tue, 3 May 2005 15:41:26 +0200
+
+gcc-4.0 (4.0.0-1) experimental; urgency=low
+
+ * GCC 4.0.0 release.
+
+ -- Matthias Klose <doko@debian.org> Sun, 24 Apr 2005 11:28:42 +0200
+
+gcc-4.0 (4.0ds11-0pre11) breezy; urgency=low
+
+ * CVS 20050413, taken from the gcc-4_0-branch.
+ * Add proposed patches for PR20126, PR20490, PR20929.
+
+ -- Matthias Klose <doko@ubuntu.com> Wed, 13 Apr 2005 09:43:00 +0200
+
+gcc-4.0 (4.0ds10-0pre10) experimental; urgency=low
+
+ * gcc-4.0.0-20050410 release candidate 1, built from the prerelease tarball.
+ - C++ fix for "optimizer breaks function inlining". Closes: #302989.
+ * Append the GCC version to the fastjar/grepjar version string.
+ * Use short file names in the libstdc++ docs (closes: #301140).
+ * Fix libstdc++-dbg dependencies (closes: #303866).
+
+ -- Matthias Klose <doko@debian.org> Mon, 11 Apr 2005 13:16:01 +0200
+
+gcc-4.0 (4.0ds9-0pre9) experimental; urgency=low
+
+ * CVS 20050326, taken from the gcc-4_0-branch.
+ * Reenable Ada on ia64.
+ * Build libgnat on hppa, sparc, s390 again.
+ * ppc64 support (Andreas Jochens):
+ * debian/control.m4
+ - Add libc6-dev-powerpc [ppc64] to the Build-Depends.
+ - Change the Description for lib32gcc1: s/ia32/32 bit Version/
+ * debian/rules.defs
+ - Define 'biarch_ia32' for ppc64 to use the same 32 bit multilib
+ facilities as amd64.
+ * debian/rules.d/binary-gcc.mk
+ - Correct an error in the 'files_gcc' definition for biarch_ia32
+ (replace '64' by '32').
+ * debian/rules2
+ - Do not use '--disable-multilib' on powerpc64-linux.
+ Use '--disable-nof --disable-softfloat' instead.
+ * debian/rules.d/binary-libstdcxx.mk
+ - Put the 32 bit libstdc++ files in '/usr/lib32'.
+ * debian/rules.patch
+ - Apply 'ppc64-biarch' patch on ppc64.
+ * debian/patches/ppc64-biarch.dpatch
+ - MULTILIB_OSDIRNAMES: Use /lib for native 64 bit libraries and
+ /lib32 for 32 bit libraries.
+ - Add multilib handling to src/config-ml.in (taken from
+ amd64-biarch.dpatch).
+ * Rename biarch_ia32 to biarch32, as suggsted by Andreas.
+ * Use /bin/dash on hppa.
+ * Reenable the build of the hppa64 compiler.
+ * Enable parallel builds by defaults (set environment variale USE_NJOBS=no
+ or USE_NJOBS=<number> to modify the default, which is to use the
+ number of available processors).
+
+ -- Matthias Klose <doko@debian.org> Sat, 26 Mar 2005 19:07:30 +0100
+
+gcc-4.0 (4.0ds8-0pre8) experimental; urgency=low
+
+ * CVS 20050322, taken from the gcc-4_0-branch.
+ - Add proposed fix for PR19406.
+ * Configure --with-gtk-cairo only if version 0.3.0 is found.
+ * Split out gcc-4.0-locales package. Better chance of getting
+ bug reports in english language.
+
+ -- Matthias Klose <doko@debian.org> Tue, 22 Mar 2005 14:20:24 +0100
+
+gcc-4.0 (4.0ds7-0pre7) experimental; urgency=low
+
+ * CVS 20050304, taken from the gcc-4_0-branch.
+ * Build the treelang compiler.
+
+ -- Matthias Klose <doko@debian.org> Fri, 4 Mar 2005 21:29:56 +0100
+
+gcc-4.0 (4.0ds6-0pre6ubuntu6) hoary; urgency=low
+
+ * Fix lib32gcc1 symlink on amd64. Ubuntu #7099.
+
+ -- Matthias Klose <doko@ubuntu.com> Thu, 3 Mar 2005 00:17:26 +0100
+
+gcc-4.0 (4.0ds6-0pre6ubuntu5) hoary; urgency=low
+
+ * Add patch from PR20160, avoid creating archives with components
+ that have duplicate basenames.
+
+ -- Matthias Klose <doko@ubuntu.com> Wed, 2 Mar 2005 14:22:04 +0100
+
+gcc-4.0 (4.0ds6-0pre6ubuntu4) hoary; urgency=low
+
+ * CVS 20050301, taken from the gcc-4_0-branch.
+ Test builds on i386, amd64, powerpc, ia64, check libgcc_s.so.1.
+ * Add fastjar-4.0 binary and manpage. Some java packages append it
+ for all java related tools.
+ * Add libgcj6-src package for source code availability in IDE's.
+ * On hppa, disable the build of the hppa64 cross compiler, disable
+ java, disable running the testsuite (request by Lamont).
+ * On amd64, lib32gcc1 replaces ia32-libs.openoffice.org (<< 1ubuntu3).
+ * Build-Depend on libcairo1-dev, configure with --enable-gtk-cairo.
+ Work around libtool problems install libjawt.
+ Install jawt header files in libgcj6-dev.
+ * Add workaround for PR debug/19769.
+
+ -- Matthias Klose <doko@ubuntu.com> Tue, 1 Mar 2005 11:26:19 +0100
+
+gcc-4.0 (4.0ds5-0pre6ubuntu3) hoary; urgency=low
+
+ * Drop libgmp3-dev (<< 4.1.4-3) as an alterntative build dependency.
+
+ -- Matthias Klose <doko@ubuntu.com> Thu, 10 Feb 2005 15:16:27 +0100
+
+gcc-4.0 (4.0ds5-0pre6ubuntu2) hoary; urgency=low
+
+ * Disable Ada for powerpc.
+
+ -- Matthias Klose <doko@ubuntu.com> Wed, 9 Feb 2005 16:47:07 +0100
+
+gcc-4.0 (4.0ds5-0pre6ubuntu1) hoary; urgency=low
+
+ * Avoid build dependency on type-handling.
+ * Install 32bit libs on amd64 in /lib32 and /usr/lib32.
+
+ -- Matthias Klose <doko@ubuntu.com> Wed, 9 Feb 2005 08:27:21 +0100
+
+gcc-4.0 (4.0ds5-0pre6) experimental; urgency=low
+
+ * gcc-4.0 snapshot, taken from the HEAD branch CVS 20050208.
+ * Build-depend on graphviz (moved to main), remove the pregenerated
+ libstdc++ docs from the diff.
+ * Fix PR19162, libobjc build failure on arm-linux (closes: #291497).
+
+ -- Matthias Klose <doko@debian.org> Tue, 8 Feb 2005 11:47:31 +0000
+
+gcc-4.0 (4.0ds4-0pre5) experimental; urgency=low
+
+ * gcc-4.0 snapshot, taken from the HEAD branch CVS 20050125.
+ * Call the 4.0 gcx versions in the java wrappers (closes: #291075).
+ * Correctly install libgij (closes: #291077).
+ * libgcj6-dev: Add conflicts to other libgcj-dev packages (closes: #290950).
+
+ -- Matthias Klose <doko@debian.org> Mon, 24 Jan 2005 23:59:54 +0100
+
+gcc-4.0 (4.0ds3-0pre4) experimental; urgency=low
+
+ * gcc-4.0 snapshot, taken from the HEAD branch CVS 20050115.
+ * Update cross build patches (Nikita V. Youshchenko).
+ * Enable Ada on i386, amd64, mips, mipsel, powerpc, sparc, s390.
+ Doesn't yet bootstrap on alpha, hppa, ia64.
+
+ -- Matthias Klose <doko@debian.org> Sat, 15 Jan 2005 18:44:03 +0100
+
+gcc-4.0 (4.0ds2-0pre3) experimental; urgency=low
+
+ * gcc-4.0 snapshot, taken from the HEAD branch CVS 20041224.
+
+ -- Matthias Klose <doko@debian.org> Wed, 22 Dec 2004 00:31:44 +0100
+
+gcc-4.0 (4.0ds1-0pre2) experimental; urgency=low
+
+ * gcc-4.0 snapshot, taken from the HEAD branch CVS 20041205.
+ * Lot's of merges and updates from the gcc-3.4 packages.
+
+ -- Matthias Klose <doko@debian.org> Sat, 04 Dec 2004 12:14:51 +0100
+
+gcc-4.0 (4.0ds0-0pre1) experimental; urgency=low
+
+ * gcc-4.0 snapshot, taken from the HEAD branch CVS 20041114.
+ - Addresses many issues with the libstdc++ man pages (closes: #278549).
+ * Disable Ada on hppa, ia64, mips, mipsel, powerpc, s390 and sparc, at least
+ these are known to be broken at the time of the snapshot.
+ * Minor kbsd.gnu build fixes (Robert Millan). Closes: #273004.
+ * For amd64, add missing libstdc++ files to 'libstdc++6-dev' package.
+ (Andreas Jochens). Fixes: #274362.
+ * Update libffi-mips patch (closes: #274096).
+ * Updated i386-biarch patch. Don't build 64bit libstdc++, ICE.
+ * Update sparc biarch patch.
+ * Fix symlinks for gfortran manpage (closes: #278548).
+ * Update cross build patches (Nikita V. Youshchenko).
+ * Update Ada patches (Ludovic Brenta).
+
+ -- Matthias Klose <doko@debian.org> Sat, 13 Nov 2004 10:38:25 +0100
+
+gcc-4.0 (4.0-0pre0) experimental; urgency=low
+
+ * gcc-4.0 snapshot, taken from the HEAD branch CVS 20040912.
+
+ * Matthias Klose <doko@debian.org>
+
+ - Integrate accumulated packaging patches from gcc-3.4.
+ - Rename libstdc++6-* packages to libstdc++6-4-* (closes: #261693).
+ - libffi4-dev: conflict with libffi3-dev (closes: #265939).
+
+ * Robert Millan <rmh@debian.org>
+
+ * control.m4:
+ - s/locale_no_archs !hurd-i386/locale_no_archs/g
+ (This is now handled in rules.defs. [1])
+ - s/procps [check_no_archs]/procps [linux_gnu_archs]/g [2]
+ - Add type-handling to build-deps. [3]
+ * rules.conf:
+ - Don't require (>= $(libc_ver)) for libc0.1-dev. [4]
+ - Generate *_no_archs variables with type-handling and use them for
+ for m4's -D parameters. [3]
+ * rules.defs:
+ - use filter instead of findstring [1].
+ - s/netbsd-elf-gnu/netbsdelf-gnu/g [5].
+ - enable java for kfreebsd-gnu [6]
+ - enable ffi for kfreebsd-gnu and knetbsd-gnu [6]
+ - enable libgc for kfreebsd-gnu [6]
+ - enable checks for kfreebsd-gnu and knetbsd-gnu [7]
+ - enable locales for kfreebsd-gnu and gnu [1] [8].
+ * Closes: #264025.
+
+ -- Matthias Klose <doko@debian.org> Sun, 12 Sep 2004 12:52:56 +0200
+
+gcc-3.5 (3.5ds1-0pre1) experimental; urgency=low
+
+ * gcc-3.5 snapshot, taken from the HEAD branch CVS 20040724.
+ * Install locale data with versioned package name (closes: #260497).
+ * Fix libgnat symlinks.
+
+ -- Matthias Klose <doko@debian.org> Sat, 24 Jul 2004 21:26:23 +0200
+
+gcc-3.5 (3.5-0pre0) experimental; urgency=low
+
+ * gcc-3.5 snapshot, taken from the HEAD branch CVS 20040718.
+
+ -- Matthias Klose <doko@debian.org> Sun, 18 Jul 2004 12:26:00 +0200
+
+gcc-3.4 (3.4.1-1) experimental; urgency=low
+
+ * gcc-3.4.1 final release.
+ - configured wth --enable-libstdcxx-allocator=mt.
+ * Fixes for generating cross compiler packages (Jeff Bailey).
+
+ -- Matthias Klose <doko@debian.org> Fri, 2 Jul 2004 22:49:05 +0200
+
+gcc-3.4 (3.4.0-4) experimental; urgency=low
+
+ * gcc-3.4.1 release candidate 1.
+ * Add logic to build biarch compiler on powerpc (disabled, needs lib64c).
+ * Don't build the libg2c0 package on mipsel-linux (no clear answer on
+ debian-mips, if the libg2c0's built by gcc-3.3 and gcc-3.4 are compatible
+ (post-sarge issue).
+ * Don't use gcc-2.95 as bootstrap compiler on m68k anymore.
+
+ -- Matthias Klose <doko@debian.org> Sat, 26 Jun 2004 22:40:20 +0200
+
+gcc-3.4 (3.4.0-3) experimental; urgency=low
+
+ * Update to gcc-3.4 CVS 20040613.
+ * On sparc, set the the build target to sparc64-linux, build with
+ switch defaulting to code generation for v7. To generate code for
+ sparc64, use the -m64 switch.
+ * Add missing doc-base files to -doc packages.
+ * Add portability patches and kbsd-gnu patch (Robert Millan).
+ Closes: #251293, #251294.
+ * Apply fixes for cross build (Nikita V. Youshchenko).
+ * Do not include the precompiled libstdc++ header files into the -dev
+ package (still experimental). Closes: #251707.
+ * Reflect renaming of Ada user's guide.
+ * Move AWT peer libraries for libgcj into it's own package (fixes: #247791).
+
+ -- Matthias Klose <doko@debian.org> Mon, 14 Jun 2004 00:03:18 +0200
+
+gcc-3.4 (3.4.0-2) experimental; urgency=low
+
+ * Update to gcc-3.4 CVS 20040516.
+ * Do not provide the /usr/hppa64-linux/include in the gcc-hppa64 package,
+ migrated to libc6-dev. Adjust dependencies.
+ * Integrate gpc test results into the GCC test summary.
+ * gnatchop calls gcc-3.4 (closes: #245438).
+ * debian/locale-gen.sh: Update for recent libstdc+++ testsuite.
+ * debian/copyright: Add libstdc++-v3's exception clause.
+ * Add libffi update for mips (Thiemo Seufer).
+ * Reference Debian specific bug reporting instructions.
+ * Update README.Bugs.
+ * Fix FTBFS for libstdc++-doc.
+ * Update libjava patch for hppa (Randolph Chung).
+ * Fix installation of ffitarget.h header file.
+ * On amd64-linux, configure --without-multilib, disable Ada.
+
+ -- Matthias Klose <doko@debian.org> Sun, 16 May 2004 07:53:39 +0200
+
+gcc-3.4 (3.4.0-1) experimental; urgency=low
+
+ * gcc-3.4.0 final release.
+
+ * Why experimental?
+ - Do not interfer with packages currently built from gcc-3.3 sources,
+ i.e. libgcc1, libobjc1, libffi2, libffi2-dev, libg2c0.
+ - Biarch sparc compiler doesn't built yet.
+ - Use of configure flags affecting binary ABI's not yet determined.
+ - Several ABI bugs have been fixed. Unfortunately, these changes will break
+ binary compatibility with earlier releases on several architectures:
+ alpha, mips, sparc,
+ - hppa and m68k changed sjlj based exception handling to dwarf2 based
+ exception handling.
+
+ See NEWS.html or http://gcc.gnu.org/gcc-3.4/changes.html for more
+ specific information.
+
+ -- Matthias Klose <doko@debian.org> Tue, 20 Apr 2004 20:54:56 +0200
+
+gcc-3.4 (3.4ds3-0pre4) experimental; urgency=low
+
+ * Update to gcc-3.4 CVS 20040403.
+ * Add gpc tarball, gpc patches for 3.4 (Waldek Hebisch).
+ * Reenable sparc-biarch patches (closes: #239856).
+ * Build the shared libgnat library, needed to fix FTBFS for some
+ Ada library packages (Ludovic Brenta).
+ Currently enabled for hppa, i386, ia64.
+
+ -- Matthias Klose <doko@debian.org> Sat, 3 Apr 2004 08:47:55 +0200
+
+gcc-3.4 (3.4ds1-0pre2) experimental; urgency=low
+
+ * Update to gcc-3.4 CVS 20040320.
+ * For libstdc++6-doc, add a conflict to libstdc++5-3.3-doc (closes: #236560).
+ * For libstdc++6-dbg, add a conflict to libstdc++5-3.3-dbg (closes: #236798).
+ * Reenable s390-biarch patches.
+ * Update the cross compiler build files (Nikita V. Youshchenko).
+
+ -- Matthias Klose <doko@debian.org> Sat, 20 Mar 2004 09:15:10 +0100
+
+gcc-3.4 (3.4ds0-0pre1) experimental; urgency=low
+
+ * Start gcc-3.4 packaging, get rid of the epoch for most of the
+ packages.
+
+ -- Matthias Klose <doko@debian.org> Sun, 22 Feb 2004 16:00:03 +0100
+
+gcc-3.3 (1:3.3.3ds6-6) unstable; urgency=medium
+
+ * Update to gcc-3_3-branch CVS 20040401.
+ - Fixed ICE in emit_move_insn_1 on legal code (closed: #223215).
+ - Fix PR 14755, miscompilation of loops with bitfield counter.
+ Closes: #241255.
+ - Fix PR 16040, crash in function initializing const data with
+ reinterpret_cast-ed pointer-to-member function crashes (closes: #238621).
+ - Remove patches integrated upstream.
+ * Reenable build of gpidump on powerpc and s390.
+
+ -- Matthias Klose <doko@debian.org> Thu, 1 Apr 2004 23:51:54 +0200
+
+gcc-3.3 (1:3.3.3ds6-5) unstable; urgency=medium
+
+ * Update to gcc-3_3-branch CVS 20040321.
+ - Fix PR target/13889 (ICE on valid code on m68k).
+ * Fix FTFBS on s390. Do not build gpc's gpidump on s390.
+ * Reenable gpc on arm.
+
+ -- Matthias Klose <doko@debian.org> Mon, 22 Mar 2004 07:37:26 +0100
+
+gcc-3.3 (1:3.3.3ds6-4) unstable; urgency=low
+
+ * Update to gcc-3_3-branch CVS 20040320.
+ - Revert patch for PR14640 (with this, at least mozilla-firefox was
+ miscompiled on x86 (closes: #238621).
+ * Update the gpc tarball (there were two releases with the same name ...).
+ * Reenable gpc on alpha and ia64.
+
+ -- Matthias Klose <doko@debian.org> Sat, 20 Mar 2004 07:39:24 +0100
+
+gcc-3.3 (1:3.3.3ds5-3) unstable; urgency=low
+
+ * Update to gcc-3_3-branch CVS 20040314.
+ - Fixes miscompilation with -O -funroll-loops on powerpc (closes: #229567).
+ - Fix ICE in dwarf-2 on code using altivec (closes: #203835).
+ * Update hurd-changes patch.
+ * Add libgcj4-dev as a recommendation for gcj (closes: #236547).
+ * debian/copyright: Added exemption to static linking of libgcc.
+
+ * Phil Blundell:
+ - debian/patches/arm-ldm.dpatch, debian/patches/arm-gotoff.dpatch: Update.
+
+ -- Matthias Klose <doko@debian.org> Sun, 14 Mar 2004 09:56:06 +0100
+
+gcc-3.3 (1:3.3.3ds5-2) unstable; urgency=low
+
+ * Update to gcc-3_3-branch CVS 20040306.
+ - Fixes bootstrap comparision error on ia64.
+ - Allows ghc build with gcc-3.3.
+ - On amd64, don't imply 3DNow! for -m64 by default.
+ - Some arm specific changes
+ - Fix C++/13944: exception in constructor of a class to be thrown is not
+ caught. Closes: #228099.
+ * Enable the build of gcc-3.3-hppa64 on hppa.
+ Add symlinks for as and ld to point to hppa64-linux-{as,ld}.
+ * gcj-3.3 depends on g++-3.3, recommends gij-3.3. gij-3.3 suggests gcj-3.3.
+ * Fix libgc2c-pic compatibility links (closes: #234333).
+ The link will be removed for gcc-3.4.
+ * g77-3.3: Conflict with other g77-x.y packages.
+ * Tighten shlibs dependencies to latest released versions.
+
+ * Phil Blundell:
+ - debian/patches/arm-233633.dpatch: New Fixes problems with half-word
+ loads on ARMv3 architecture. (Closes: #233633)
+ - debian/patches/arm-ldm.dpatch: New. Avoids inefficient epilogue for
+ leaf functions in PIC code on ARM.
+
+ -- Matthias Klose <doko@debian.org> Sat, 6 Mar 2004 10:57:14 +0100
+
+gcc-3.3 (1:3.3.3ds5-1) unstable; urgency=medium
+
+ * gcc-3.3.3 final release.
+ See /usr/share/doc/gcc-3.3/NEWS.{gcc,html}.
+
+ -- Matthias Klose <doko@debian.org> Mon, 16 Feb 2004 08:59:52 +0100
+
+gcc-3.3 (1:3.3.3ds4-0pre4) unstable; urgency=low
+
+ * Update to gcc-3.3.3 CVS 20040214 (2nd gcc-3.3.3 prerelease).
+ * Fix title of libstdc++'s html main index (closes: #196381).
+ * Move libg2c libraray files out of the gcc specific libdir to /usr/lib.
+ For g77-3.3 add conflicts to other g77 packages. Closes: #224848.
+ * Update the stack protector patch to 3.3-7, but don't apply it by default.
+ Closes: #230338.
+ * On arm, use arm6 as the cpu default (backport from mainline, PR12527).
+ * Add libffi and libjava support for hppa (Randolph Chung). Closes: #232615.
+
+ -- Matthias Klose <doko@debian.org> Sat, 14 Feb 2004 09:26:15 +0100
+
+gcc-3.3 (1:3.3.3ds3-0pre3) unstable; urgency=low
+
+ * Update to gcc-3.3.3 CVS 20040125.
+ - Fixed PR11350, undefined labels with -Os -fPIC (closes: #195911).
+ - Fixed PR11793, ICE in extract_insn, at recog.c (closes: #203835).
+ - Fixed PR13544, removed backport for PR12862.
+ - Integrated backport for PR12441.
+ * Fixed since 3.3: java: not implemented interface methods of abstract
+ classes not found (closes: #225438).
+ * Disable pascal on arm architecture (currently broken).
+ * Update the build files to build a cross compiler (Nikita V. Youshchenko).
+ See debian/README.cross in the source package.
+ * Apply revised patch to make -mieee the default on alpha-linux,
+ and add -mieee-disable switch to turn the default off (closes: #212912).
+ (Tyson Whitehead)
+
+ -- Matthias Klose <doko@debian.org> Sun, 25 Jan 2004 17:41:04 +0100
+
+gcc-3.3 (1:3.3.3ds2-0pre2) unstable; urgency=medium
+
+ * Update to gcc-3.3.3 CVS 20040110.
+ - Fixes compilation not terminating at -O1 on hppa (closes: #207516).
+ * Add backport to fix PR12441 (closes: #224576).
+ * Revert backport to 3.3 branch to fix PR12862, which introduced another
+ regression (PR13544). Closes: #225663.
+ * Tighten dependency of gnat-3.3 on gcc-3.3 (closes: #226273).
+ * Disable treelang build for cross compiler build.
+ * Disable pascal on alpha and ia64 architectures (currently broken).
+
+ -- Matthias Klose <doko@debian.org> Sat, 10 Jan 2004 12:33:59 +0100
+
+gcc-3.3 (1:3.3.3ds1-0pre1) unstable; urgency=low
+
+ * Update to gcc-3.3.3 CVS 20031229.
+ - Fixes bootstrap error on ia64-linux.
+ - Fix -pthread on mips{,el}-linux (closes: #224875).
+ - Fix -Wformat for C++ (closes: #217075).
+ * Backport from mainline: Preserve inline-ness when redeclaring
+ a function template (closes: #195264).
+ * Add missing intrinsics headers on ix86 (closes: #224593).
+ * Fix location of libg2c libdir in libg2c.la file (closes: #224848).
+
+ -- Matthias Klose <doko@debian.org> Mon, 29 Dec 2003 10:36:29 +0100
+
+gcc-3.3 (1:3.3.3ds0-0pre0.1) unstable; urgency=high
+
+ * NMU
+ * Fixed mips(el) spec file for -pthread: (Closes: #224875)
+ * [debian/patches/mips-pthread.dpatch] New.
+ * [debian/rules.patch] Added it to debian_patches.
+
+ -- J.H.M. Dassen (Ray) <jdassen@debian.org> Sat, 27 Dec 2003 15:51:47 +0100
+
+gcc-3.3 (1:3.3.3ds0-0pre0) unstable; urgency=low
+
+ * Update to gcc-3.3.3 CVS 20031206.
+ - Fixes ICE in verify_local_live_at_start (hppa). Closes: #201550.
+ - Fixes miscompilation of linux-2.6/sound/core/oss/rate.c.
+ Closes: #219949.
+ * Add missing unwind.h to gcc package (closes: #220846).
+ * Regenerate control file to fix build dependencies for m68k.
+ * More gpc only patches to fix test failures on m68k.
+ * Reenable gpc for the Hurd (closes: #189851).
+
+ -- Matthias Klose <doko@debian.org> Sat, 6 Dec 2003 10:29:07 +0100
+
+gcc-3.3 (1:3.3.2ds5-4) unstable; urgency=low
+
+ * Update libffi-dev package description (closes: #219508).
+ * For gij and libgcj fix dependency on the libstdc++ package, if
+ the latter isn't installed during the build.
+ * Apply patch to emit .note.GNU-stack section on linux arches
+ which by default need executable stack.
+ * Prefer gnat-3.3 over gnat-3.2 as a build dependency.
+ * Update the pascal tarball (different version released with the
+ same name).
+ * Add pascal patches to address various gpc testsuite failures.
+ On alpha and ia64, build gpc from the 20030830 version. Reenable
+ the build on m68k.
+ Remove the 20030507 gpc version from the tarball.
+ * Apply patch to build the shared ada libs and link the ada tools
+ against the shared libs. Not enabled by default, because gnat
+ and gnatlib are rebuilt during install. (Ludovic Brenta)
+
+ -- Matthias Klose <doko@debian.org> Sun, 9 Nov 2003 22:34:33 +0100
+
+gcc-3.3 (1:3.3.2ds4-3) unstable; urgency=low
+
+ * Fix rules to omit inclusion of gnatpsta in mips(el) gnat package.
+
+ -- Matthias Klose <doko@debian.org> Sun, 2 Nov 2003 14:29:59 +0100
+
+gcc-3.3 (1:3.3.2ds4-2) unstable; urgency=medium
+
+ * s390-ifcvt patch added. Fixes gcl miscompilation (closes: #217240).
+ (Gerhard Tonn)
+ * Fix an infinite loop in g++ compiling lufs, regression from 3.3.1.
+ * Fix a wrong code generation bug on alpha.
+ (Falk Hueffner)
+ * Update NEWS files.
+ * Add Falk Hueffner to the Debian GCC maintainers.
+ * Enable ada on mips and mipsel, but don't build the gnatpsta tool.
+
+ -- Matthias Klose <doko@debian.org> Wed, 29 Oct 2003 00:12:37 +0100
+
+gcc-3.3 (1:3.3.2ds4-1) unstable; urgency=medium
+
+ * Update to gcc-3.3.2.
+ * Update NEWS files.
+ * Miscompilation in the pari package at -O3 fixed (closes: #198172).
+ * On alpha-linux, revert -mieee as the default (Falk Hueffner).
+ Reopens: #212912.
+ * Add ia64-unwind patch (Jeff Bailey).
+ * Closed reports reported against gcc-2.96 (ia64), fixed at least in gcc-3.3:
+ - ICE in verify_local_live_at_start, at flow.c:2733 (closes: #135404).
+ - Compilation failure of stlport (closes: #135224).
+ - Infinite loop compiling cssc's pfile.cc with -O2 (closes: #115390).
+ - Added missing some string::compare() members (closes: #141199).
+ - <cmath> header declares std::pow (closes: #161853).
+ - <vector> does have at() method (closes: #59776).
+ - Fixed error in stl_deque.h (closes: #69530).
+ - Fixed problem with bastring (closes: #75759, #96539).
+ - bad_alloc and std:: namespace problem (closes: #75120).
+ - Excessive warnings from headers with -Weffc++ (closes: #76827).
+
+ -- Matthias Klose <doko@debian.org> Fri, 17 Oct 2003 08:07:01 +0200
+
+gcc-3.3 (1:3.3.2ds3-0pre5) unstable; urgency=low
+
+ * Update to gcc-3.3.2 CVS 20031005.
+ - Fixes cpp inserting a spurious newline (closes: #210478, #210482).
+ - Fixes generation of unrecognizable insn compiling kernel source
+ on alpha (closes: #202762).
+ - Fixes ICE in add_abstract_origin_attribute (closes: #212406).
+ - Fixes forward declaration in libstdc++ (closes: #209386).
+ - Fixes ICE in in extract_insn, at recog.c on alpha (closes: #207564).
+ * Make libgcj-common architecture all (closes: #211909).
+ * Build depend on: flex-old | flex (<< 2.5.31).
+ * Fix spec linking libraries with -pthread on powerpc (closes: #211054).
+ * debian/patches/arm-gotoff.dpatch: fix two kinds of PIC lossage.
+ (Phil Blundell)
+ * debian/patches/arm-common.dpatch: fix excessive alignment of common
+ blocks causing binutils testsuite failures.
+ (Phil Blundell)
+ * Update priorities in debian/control to match the archive.
+ (Ryan Murray)
+ * s390-nonlocal-goto patch added. Fixes some pascal testcase failures.
+ (Gerhard Tonn)
+ * On alpha-linux, make -mieee default and add -mieee-disable switch
+ to turn default off (closes: #212912).
+ (Tyson Whitehead)
+ * Add gpc upstream patch for memory corruption fix.
+
+ -- Matthias Klose <doko@debian.org> Sun, 5 Oct 2003 19:53:49 +0200
+
+gcc-3.3 (1:3.3.2ds2-0pre4) unstable; urgency=low
+
+ * Add gcc-unsharing_lhs patch (closes: #210848)
+
+ -- Ryan Murray <rmurray@debian.org> Fri, 19 Sep 2003 22:51:19 -0600
+
+gcc-3.3 (1:3.3.2ds2-0pre3) unstable; urgency=low
+
+ * Update to gcc-3.3.2 CVS 20030908.
+ * PR11716 (Michael Eager, Dan Jacobowitz):
+ Make GCC think that the maximum length of a short branch is
+ 64K instead of 128K. It's a big hammer, but it works.
+ Closes: #207915.
+ * Downgrade gpc to 20030507 on alpha and ia64 (closes: #208717).
+
+ -- Matthias Klose <doko@debian.org> Mon, 8 Sep 2003 21:49:52 +0200
+
+gcc-3.3 (1:3.3.2ds1-0pre2) unstable; urgency=low
+
+ * Update to gcc-3.3.2 CVS 20030831.
+ - Fix java NullPointerException detection with 2.6 kernels.
+ Closes: #206377.
+ - Fix bug in C++ typedef handling (closes: #205402).
+ - Fix -Wunreachable-code giving false complaints (closes: #196600).
+ * Update to gpc-20030830.
+ * Don't include /usr/share/java/repository into the class path according
+ to the new version of th Debian Java policy (closes: #205643).
+ * Build-Depend/Depend on libgc-dev.
+
+ -- Matthias Klose <doko@debian.org> Sun, 31 Aug 2003 08:56:53 +0200
+
+gcc-3.3 (1:3.3.2ds0-0pre1) unstable; urgency=low
+
+ * Remove the build dependency on locales for now.
+
+ -- Matthias Klose <doko@debian.org> Fri, 15 Aug 2003 07:48:18 +0200
+
+gcc-3.3 (1:3.3.2ds0-0pre0) unstable; urgency=medium
+
+ * Update to gcc-3.3.2 CVS 20030812.
+ - Fixes generation of wrong code for XDM-AUTHORIZATION-1 key generation
+ and/or validation. Closes: #196090.
+ * Update NEWS files.
+ * Change ix86 default CPU type for code generation:
+ - i386-linux -> i486-linux
+ - i386-gnu -> i586-gnu
+ - i386-freebsd-gnu -> i486-freebsd-gnu
+ Use -march=i386 to target i386 CPUs.
+
+ -- Matthias Klose <doko@debian.org> Tue, 12 Aug 2003 10:31:28 +0200
+
+gcc-3.3 (1:3.3.1ds3-1) unstable; urgency=low
+
+ * gcc-3.3.1 (taken from CVS 20030805).
+ - C++: Fix declaration conflicts (closes: #203351).
+ - Fix ICE on ia64 (closes: #203840).
+
+ -- Matthias Klose <doko@debian.org> Tue, 5 Aug 2003 20:38:02 +0200
+
+gcc-3.3 (1:3.3.1ds2-0rc2) unstable; urgency=low
+
+ * Update to gcc-3.3.1 CVS 20030728.
+ - Fix ICE in extract_insn, at recog.c:2148 on m68k.
+ Closes: #177840, #180375, #190818.
+ - Fix ICE while building libquicktime on alpha (closes: #192576).
+ - Fix failure to deal with using and private inheritance (closes: #202696).
+ * On sparc, /usr/lib was added to the library search path. Fix it.
+ * Closed reports reported against gcc-3.2.x and fixed in gcc-3.3:
+ - Fix error building the gcl package on arm (closes: #199835).
+
+ -- Matthias Klose <doko@debian.org> Mon, 28 Jul 2003 20:39:07 +0200
+
+gcc-3.3 (1:3.3.1ds1-0rc1) unstable; urgency=low
+
+ * Update to gcc-3.3.1 CVS 20030722 (3.3.1 release candidate 1).
+ - Fix ICE in copy_to_mode_reg on 64-bit targets (closes: #189365).
+ - Remove documentation about multi-line strings (closes: #194391).
+ - Correctly document -falign-* parameters (closes: #198269).
+ - out-of-class specialization of a private nested template class.
+ Closes: #193830.
+ - Tighten shlibs dependency due to new symbols in libgcc.
+ * README.Debian for libg2c0, describing the need for g77-x.y when
+ working with the g2c header and library (closes: #189059).
+ * Call make with -j<number of CPU's>, if USE_NJOBS is set and non-empty
+ in the environment.
+ * Add another two m68k patches, partly replacing the workarounds provided
+ by Roman Zippel.
+ * Add the stack protector patch, but don't apply it by default. Edit
+ debian/rules.patch to apply it (closes: #171699, #189494).
+ * Remove wrong symlinks from gnat package (closes: #201882).
+ * Closed reports reported against gcc-2.95 and fixed in newer versions:
+ - SMP kernel compilation on alpha (closes: #134197, #146883).
+ - ICE on arm while building imagemagick (closes: #173475).
+ * Closed reports reported against gcc-3.2.x and fixed in gcc-3.3:
+ - Miscompilation of octave2.1 on hppa (closes: #192296, #193804).
+
+ -- Matthias Klose <doko@debian.org> Sun, 13 Jul 2003 10:26:30 +0200
+
+gcc-3.3 (1:3.3.1ds0-0pre0) unstable; urgency=medium
+
+ * Update to gcc-3.3.1 CVS 20030626.
+ - Fix ICE on arm compiling xfree86 (closes: #195424).
+ - Fix ICE on arm compiling fftw (closes: #186185).
+ - Fix ICE on arm in change_address_1, affecting a few packages.
+ Closes: #197099.
+ - Fix ICE in merge_assigned_reloads building Linux 2.4.2x sched.c.
+ Closes: #195237.
+ - Do not warn about failing to inline functions declared in system headers.
+ Closes: #193049.
+ - Fix ICE on mips{,el} in propagate_one_insn (closes: #194330, #196091).
+ - Fix ICE on m68k in reg_overlap_mentioned_p (closes: #194749).
+ - Build crtbeginT.o on m68k (closes: #197613).
+ * Fix g++ man page symlink (closes: #196271).
+ * mips/mipsel: Depend on binutils (>= 2.14.90.0.4). Closes: #196744.
+ * Disable treelang on powerpc (again). Closes: #196915.
+ * Pass -encoding in gcj-wrapper.
+
+ -- Matthias Klose <doko@debian.org> Fri, 27 Jun 2003 00:14:43 +0200
+
+gcc-3.3 (1:3.3ds9-3) unstable; urgency=low
+
+ * Closing more reports, fixed in 3.2/3.3:
+ - ICE building texmacs on m68k (closes: #177433).
+ - libstdc++: <cmath> doesn't define trunc(...) (closes: #105285).
+ - libstdc++: setw is ignored for strings output (closes: #52382, #76645).
+ * Add build support to omit the manual pages and info docs from the
+ packages, disabled by default. Wait for a Debian statement, which can
+ be cited. Adresses: #193787.
+ * Reenable the m68k-const patch, don't run the g77 testsuite on m68k.
+ Addresses ICEs (#177840, #190818).
+ * Update arm-xscale patch.
+ * libstdc++: use __attribute__(__unknown__), instead of (unknown).
+ Closes: #195796.
+ * Build-Depend on glibc (>= 2.3.1) to prevent incorrect builds on woody.
+ Request from Adrian Bunk.
+ * Add treelang-update patch (Tim Josling), reenable treelang on powerpc.
+ * Add <GNU_TYPE>-{cpp,gcc,g++,gcj,g77} symlinks (addresses: #189466).
+ * Make sure not to build using binutils-2.14.90.0.[12].
+
+ -- Matthias Klose <doko@debian.org> Mon, 2 Jun 2003 22:35:45 +0200
+
+gcc-3.3 (1:3.3ds9-2) unstable; urgency=medium
+
+ * Correct autoconf-related snafu in newly added ARM patches (Phil Blundell).
+ * Correct libgcc1 dependency (closes: #193689).
+ * Work around ldd/dpkg-shlibs failure on s390x.
+
+ -- Matthias Klose <doko@debian.org> Sun, 18 May 2003 09:40:15 +0200
+
+gcc-3.3 (1:3.3ds9-1) unstable; urgency=low
+
+ * gcc-3.3 final release.
+ See /usr/share/doc/gcc-3.3/NEWS.{gcc,html}.
+ * First merge of i386/x86-64 biarch support (Arnd Bergmann).
+ Disabled by default. Closes: #190066.
+ * New gpc-20030507 version.
+ * Upstream gpc update to fix netbsd build failure (closes: #191407).
+ * Add arm-xscale.dpatch, arm-10730.dpatch, arm-tune.dpatch, copied
+ from gcc-3.2 (Phil Blundell).
+ * Closing bug reports reported against older gcc versions (some of them
+ still present in Debian, but not anymore as the default compiler).
+ Usually, forwarded bug reports are linked to
+ http://gcc.gnu.org/PR<upstream bug number>
+ The upstream bug number usually can be found in the Debian reports.
+
+ * Closed reports reported against gcc-3.1.x, gcc-3.2.x and fixed in gcc-3.3:
+ - General:
+ + GCC accepts multi-line strings without \ or " " &c (closes: #2910).
+ + -print-file-name sometimes fails (closes: #161615).
+ + ICE: reporting routines re-entered (closes: #179597, #180937).
+ + Misplaced paragraph in gcc documentation (closes: #179363).
+ + Error: suffix or operands invalid for `div' (closes: #150558).
+ + builtin memcmp() could be optimised (closes: #85535).
+ - Ada:
+ + Preelaborate, exceptions, and -gnatN (closes: #181679).
+ - C:
+ + Duplicate loop conditions even with -Os (closes: #94701).
+ + ICE (signal 11) (closes: #65686).
+ - C++:
+ + C++ error on virtual function which uses ... (closes: #165829).
+ + ICE when warning about cleanup nastiness in switch statements
+ (closes: #184108).
+ + Fails to compile virtual inheritance with variable number of
+ argument method (closes: #151357).
+ + xmmintrin.h broken for c++ (closes: #168310).
+ + Stack corruption with variable-length automatic arrays and virtual
+ destructors (closes: #188527).
+ + ICE on illegal code (closes: #184862).
+ + _attribute__((unused)) is ignored in C++ (closes: #45440).
+ + g++ handles &(void *)foo bizzarely (closes: #79225).
+ + ICE (with wrong code, though) (closes: #81122).
+ - Java:
+ + Broken zip file handling (closes: #180567).
+ - ObjC:
+ + @protocol forward definitions do not work (closes: #80468).
+ - Architecture specific:
+ - alpha
+ + va_start is off by one (closes: #186139).
+ + ICE while building kseg/ddd (closes: #184753).
+ + g++ -O2 optimization error (closes: #70743).
+ - arm
+ + ICE with -O2 in change_address_1 (closes: #180750).
+ + gcc optimization error with -O2, affecting bison (closes: #185903).
+ - hppa
+ + ICE in insn_default_length (closes: #186447).
+ - ia64
+ + gcc-3.2 fails w/ optimization (closes: #178830).
+ - i386
+ + unnecessary generation of instruction cwtl (closes: #95318).
+ + {athlon} ICE building mplayer (closes: #184800).
+ + {pentium4} ICE while compiling mozilla with -march=pentium4
+ (closes: #187910).
+ + i386 optimisation: joining tests (closes: #105309).
+ - m68k
+ + ICE in instantiate_virtual_regs_1 (closes: #180493).
+ + gcc optimizer bug on m68k (closes: #64832).
+ - powerpc
+ + ICE in extract_insn, at recog.c:2175 building php3 (closes: #186299).
+ + ICE with -O -Wunreachable-code (closes: #189702).
+ - s390
+ + Operand out of range at assembly time when using -O2
+ (closes: #178596).
+ - sparc
+ + gcc-3.2 regression (wrong code) (closes: #176387).
+ + ICE in mem_loc_descriptor when optimizing (closes: #178909).
+ + ICE in gen_reg_rtx when optimizing (closes: #178965).
+ + Optimisation leads to unaligned access in memcpy (closes: #136659).
+
+ * Closed reports reported against gcc-3.0 and fixed in gcc-3.2.x:
+ - General:
+ + Use mkstemp instead of mktemp (closed: #127802).
+ - Preprocessor:
+ + Fix redundant error message from cpp (closed: #100722).
+ - C:
+ + Optimization issue on ix86 (pointless moving) (closed: #97904).
+ + Miscompilation of allegro on ix86 (closed: #105741).
+ + Fix generation of ..ng references for static aliases (alpha-linux).
+ (closed: #108036).
+ + ICE compiling pari on hppa (closed: #111613).
+ + ICE on ia64 in instantiate_virtual_regs_1 (closed: #121668).
+ + ICE in c-typeck.c (closed: #123687).
+ + ICE in gen_subprogram_die on alpha (closed: #127890).
+ + SEGV in initialization of flexible char array member (closed: #131399).
+ + ICE on arm compiling lapack (closed: #135967).
+ + ICE in incomplete_type_error (closed: #140606).
+ + Fix -Wswitch (also part of -Wall) (closed: #140995).
+ + Wrong code in mke2fs on hppa (closed: #150232).
+ + sin(a) * sin(b) gives wrong result (closed: #164135).
+ - C++:
+ + Error in std library headers on arm (closed: #107633).
+ + ICE nr. 19970302 (closed: #119635).
+ + std::wcout does not perform encoding conversions (closed: #128026).
+ + SEGV, when compiling iostream.h with -fPIC (closed: #134315).
+ + Fixed segmentation fault in included code for <rope> (closed: #137017).
+ + Fix with exception handling and -O (closed: #144232).
+ + Fix octave-2.1 build failure on ia64 (closed: #144584).
+ + nonstandard overloads in num_get facet (closed: #155900).
+ + ICE in expand_end_loop with -O (closed: #158371).
+ - Fortran:
+ + Fix blas build failure on arm (closed: #137959).
+ - Java:
+ + Interface members are public by default (closed: #94974).
+ + Strange message with -fno-bounds-check in combination with -W.
+ (closed: #102353).
+ + Crash in FileWriter using IOException (closed: #116128).
+ + Fix ObjectInputStream.readObject() calling constructors.
+ (closed: #121636).
+ + gij: better error reporting on `class not found' (closed: #125649).
+ + Lockup during .java->.class compilation (closed: #141899).
+ + Compile breaks using temporary inner class instance (closed: #141900).
+ + Default constructor for inner class causes broken bytecode.
+ (closed: #141902).
+ + gij-3.2 linked against libgcc1 (closed: #165180).
+ + gij-wrapper understands -classpath parameter (closed: #146634).
+ + gij-3.2 doesn't ignore -jar when run as "java" (closed: #167673).
+ - ObjC:
+ + ICE on alpha (closed: #172353).
+
+ * Closed reports reported against gcc-2.95 and fixed in newer versions:
+ - General:
+ + Undocumented option -pthread (closes: #165110).
+ + stdbool.h broken (closes: #167439).
+ + regparm/profiling breakage (closes: #20695).
+ + another gcc optimization error (closes: #51456).
+ + ICE in `output_fix_trunc' (closes: #55967).
+ + Fix "Unable to generate reloads for" (closes: #58219, #131890).
+ + gcc -c -MD x/y.c -o x/y.o leaves y.d in cwd (closes: #59232).
+ + Compiler error with -O2 (closes: #67631).
+ + ICE (unrecognizable insn) compiling php4 (closes: #83550, #84969).
+ + Another ICE (closes: #90666).
+ + man versus info inconsistency (-W and -Wall) (closes: #93708).
+ + ICE on invalid extended asm (closes: #136630).
+ + ICE in `emit_no_conflict_block' compiling perl (closes: #154599).
+ + ICE in `gen_tagged_type_instantiation_die'(closes: #166766).
+ + ICE on __builtin_memset(s, 0, -1) (closes: #170994).
+ + -Q option to gcc appears twice in the documentation (closes: #137382).
+ + New options for specifying targets:- -MQ and -MT (closes: #27878).
+ + Configure using --enable-nls (closes: #51651).
+ + gcc -dumpspecs undocumented (closes: #65406).
+ - Preprocessor:
+ + cpp fails to parse macros with varargs correctly(closes: #154767).
+ + __VA_ARGS__ stringification crashes preprocessor if __VA_ARGS__ is
+ empty (closes: #152709).
+ + gcc doesn't handle empty args in macro function if there is only
+ one arg(closes: #156450).
+ - C:
+ + Uncaught floating point exception causes ICE (closes: #33786).
+ + gcc -fpack-struct doesn't pack structs (closes: #64628).
+ + ICE in kernel (matroxfb) code (closes: #151196).
+ + gcc doesn't warn about unreachable code (closes: #158704).
+ + Fix docs for __builtin_return_address(closes: #165992).
+ + C99 symbols in limits.h not defined (closes: #168346).
+ + %zd printf spec generates warning, even in c9x mode (closes: #94891).
+ + Update GCC attribute syntax (closes: #12253, #43119).
+ - C++ & libstdc++-v3:
+ + template and virtual inheritance bug (closes: #152315).
+ + g++ has some troubles with nested templates (closes: #21255).
+ + vtable thunks implementation is broken (closes: #34876, #35477).
+ + ICE for templated friend (closes: #42662).
+ + ICE compiling mnemonic (closes: #42989).
+ + Deprecated: result naming doesn't work for functions defined in a
+ class (closes: #43170).
+ + volatile undefined ... (closes: #50529).
+ + ICE concerning templates (closes: #53698).
+ + Program compiled -O3 -malign-double segfaults in ofstream::~ofstream
+ (closes: #56867).
+ + __attribute__ ((constructor)) doesn't work with C++ (closes: #61806).
+ + Another ICE (closes: #65687).
+ + ICE in `const_hash' (closes: #72933).
+ + ICE on illegal code (closes: #83221).
+ + Wrong code with -O2 (closes: #83363).
+ + ICE on template class (closes: #85934).
+ + No warning for missing return in non-void member func (closes: #88260).
+ + Not a bug/fixed in libgcc1: libgcc.a symbols end up exported by
+ shared libraries (closes: #118670).
+ + ICE using nested templates (closes: #118781).
+ + Another ICE with templates (closes: #127489).
+ + More ICEs (closes: #140427, #141797).
+ + ICE when template declared after use(closes: #148603).
+ + template function default arguments are not handled (closes: #157292).
+ + Warning when including stl.h (closes: #162074).
+ + g++ -pedantic-errors -D_GNU_SOURCE cannot #include <complex>
+ (closes: #151671).
+ + c++ error message improvement suggestion (closes: #46181).
+ + Compilation error in stl_alloc.h with -fhonor-std (closes: #59005).
+ + libstdc++ has no method at() in stl_= (closes: #68963).
+ - Fortran:
+ + g77 crash (closes: #130415).
+ - ObjC:
+ + ICE: program cc1obj got fatal signal 11 (closes: #62309).
+ + Interface to garbage collector is undocumented. (closes: #68987).
+ - Architecture specific:
+ - alpha
+ + Can't compile with define gnu_source with stdio and curses
+ (closes: #97603).
+ + Header conflicts on alpha (closes: #134558).
+ + lapack-dev: cannot link on alpha (closes: #144602).
+ + ICE `fixup_var_refs_1' (closes: #43001).
+ + Mutt segv on viewing list of attachments (closes: #47981).
+ + ICE building open-amulet (closes: #48530).
+ + ICE compiling hatman (closes: #55291).
+ + dead code removal in switch() broken (closes: #142844).
+ - arm
+ + Miscompilation using -fPIC on arm (closes: #90363).
+ + infinite loop with -O on arm (closes: #151675).
+ - i386
+ + ICE when using -mno-ieee-fp and -march=i686 (closes: #87540).
+ - m68k
+ + Optimization (-O2) broken on m68k (closes: #146006).
+ - mips
+ + g++ exception catching does not work... (closes: #105569).
+ + update-menus gets Bus Error (closes: #120333).
+ - mipsel
+ + aspell: triggers ICE on mipsel (closes: #128367).
+ - powerpc
+ + -O2 produces wrong code (gnuchess example) (closes: #131454).
+ - sparc
+ + Misleading documentation for -malign-{jump,loop,function}s
+ (closes: #114029).
+ + Sparc GCC issue with -mcpu=ultrasparc (closes: #172956).
+ + flightgear: build failure on sparc (closes: #88694).
+
+ -- Matthias Klose <doko@debian.org> Fri, 16 May 2003 07:13:57 +0200
+
+gcc-3.3 (1:3.3ds8-0pre9) unstable; urgency=high
+
+ * gcc-3.3 second prerelease.
+ - Fixing exception handling on s390 (urgency high).
+ * Reenabled gpc build (I had it disabled ...). Closes: #192347.
+
+ -- Matthias Klose <doko@debian.org> Fri, 9 May 2003 07:32:14 +0200
+
+gcc-3.3 (1:3.3ds8-0pre8) unstable; urgency=low
+
+ * gcc-3.3 prerelease.
+ - Fixes gcj ICE (closes: #189545).
+ * For libstdc++ use the i486 atomicity implementation, introduced with
+ 0pre6, left out in 0pre7 (closes: #191684).
+ * Add README.Debian for treelang (closes: #190812).
+ * Apply NetBSD changes (Joel Baker). Closes: #191551.
+ * New symbols in libgcc1, tighten the shlibs dependency.
+ * Disable testsuite run on mips/mipsel because of an outdated libc-dev
+ package.
+ * Do not build libffi with debug information, although configuring
+ with --enable-debug.
+
+ -- Matthias Klose <doko@debian.org> Tue, 6 May 2003 06:53:49 +0200
+
+gcc-3.3 (1:3.3ds7-0pre7) unstable; urgency=low
+
+ * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030429).
+ * Revert upstream libstdc++ change (closes: #191145, #191147, #191148,
+ #191149, #149159, #149151, and other reports).
+ Sorry for not detecting this before the upload, seems to be
+ broken on i386 "only".
+ * hurd-i386: Use /usr/include, not /include.
+ * Disable gpc on hurd-i386 (closes: #189851).
+ * Disable building the debug version of libstdc++ on powerpc-linux
+ (fixes about 200 java test cases).
+ * Install libstdc++v3 man pages (closes: #127263).
+
+ -- Matthias Klose <doko@debian.org> Tue, 29 Apr 2003 23:28:44 +0200
+
+gcc-3.3 (1:3.3ds6-0pre6) unstable; urgency=high
+
+ * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030426).
+ * libstdc++-doc: Fix index.html link (closes: #189424).
+ * Revert back to the i486 atomicity implementation, that was used
+ for gcc-3.2 as well. Reopens: #184446, #185662. Closes: #189983.
+ For this reason, tighten the libstdc++5 shlibs dependency. See
+ http://lists.debian.org/debian-devel/2003/debian-devel-200304/msg01895.html
+ Don't build the ix86 specfic libstdc++ libs anymore.
+
+ -- Matthias Klose <doko@debian.org> Sun, 27 Apr 2003 19:47:54 +0200
+
+gcc-3.3 (1:3.3ds5-0pre5) unstable; urgency=low
+
+ * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030415).
+ * Disable treelang on powerpc.
+ * Disable gpc on m68k.
+ * Install locale data. Conflict with gcc-3.2 (<= 1:3.2.3-0pre8).
+ * Fix generated bits/atomicity.h (closes: #189183).
+ * Tighten libgcc1 shlibs dependency (new symbol _Unwind_Backtrace).
+
+ -- Matthias Klose <doko@debian.org> Wed, 16 Apr 2003 00:37:05 +0200
+
+gcc-3.3 (1:3.3ds4-0pre4) unstable; urgency=low
+
+ * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030412).
+ * Avoid sparc64 dependencies for libgcc1 on sparc (Clint Adams).
+ * Make the default sparc 32bit target v8 instead of v7. This mainly
+ enables hardmul, which should speed up v8 and v9 systems by a large
+ margin (Ben Collins).
+ * Tighten binutils dependency for sparc.
+ * On i386, build libstdc++ optimized for i486 and above. The library
+ in /usr/lib is built for i386. Closes: #184446, #185662.
+ * Add gpc build (from gcc-snapshot package).
+ * debian/control: Include all packages, that _can_ be built from
+ this source package (except the cross packages).
+ * Add m68k patches: m68k-const, m68k-subreg, m68k-loop.
+ * Run the 3.3 testsuite a second time with the installed gcc-3.2
+ to check for regressions (promised, only this time, and for the
+ final release ;). Add build dependencies (gobjc-3.2, g77-3.2, g++-3.2).
+
+ -- Matthias Klose <doko@debian.org> Sat, 12 Apr 2003 10:11:11 +0200
+
+gcc-3.3 (1:3.3ds3-0pre3) unstable; urgency=low
+
+ * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030331).
+ * Reenable java on arm.
+ * Build-Depend on binutils-2.13.90.0.18-1.3 on m68k. Fixes all
+ bprob/gcov testsuite failures.
+ * Enable C++ build on arm.
+ * Enable the sparc64 build.
+
+ -- Matthias Klose <doko@debian.org> Mon, 31 Mar 2003 23:24:54 +0200
+
+gcc-3.3 (1:3.3ds2-0pre2) unstable; urgency=low
+
+ * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030317).
+ * Disable building the gcc-3.3-nof package.
+ * Disable Ada on mips and mipsel.
+ * Remove the workaround to build Ada on powerpc.
+ * Add GNU Free documentation license to copyright file.
+ * Update the sparc64 build patches (Clint Adams). Not yet enabled.
+ * Disable C++ on arm (Not yet tested).
+ * Add fix for ICE on powerpc (see: #184684).
+
+ -- Matthias Klose <doko@debian.org> Sun, 16 Mar 2003 21:40:57 +0100
+
+gcc-3.3 (1:3.3ds1-0pre1) unstable; urgency=low
+
+ * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030310).
+ * Add gccbug manpage.
+ * Don't build libgnat package (no shared library).
+ * Configure with --enable-sjlj-exceptions on hppa and m68k for
+ binary compatibility with libstdc++ built with gcc-3.2.
+ * Disable Java on arm-linux (never seen it sucessfully bootstrap).
+ * Install non-conflicting baseline README.
+ * multilib *.so and *.a moved to /usr/lib/gcc-lib/... , so that several
+ compiler versions can be installed concurrently.
+ * Remove libstdc++-incdir patch applied upstream.
+ * libstdc++ 64 bit development files now handled in -dev target.
+ (Gerhard Tonn)
+ * Drop build dependencies for gpc (tetex-bin, help2man, libncurses5-dev).
+ * Add libstdc++5-3.3-dev confict to libstdc++5-dev (<= 1:3.2.3-0pre3).
+ * Enable builds on m68k (all but C++ for the moment). gcc-3.3 bootstraps,
+ while gcc-3.2 doesn't.
+
+ -- Matthias Klose <doko@debian.org> Mon, 10 Mar 2003 23:41:00 +0100
+
+gcc-3.3 (1:3.3ds0-0pre0) unstable; urgency=low
+
+ * First gcc-3.3 package, built for s390 only. All other architectures
+ build the gcc-3.3-base package only.
+ To build the package on other architectures, edit debian/rules.defs
+ (macro no_dummy_archs).
+ * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030301).
+ * Don't include the gcc locale files (would conflict with 3.2).
+ * Remove libffi-install-fix patch.
+ * Fix netbsd-i386 patches.
+ * Change priority of libstdc++5 and gcc-3.2-base to important.
+ * Install gcjh-wrapper for javah.
+ * gij suggests fastjar, gcj recommends fastjar.
+ * Allow builds using automake1.4 | automake (<< 1.5).
+ * Backport fix for to output more correct line numbers.
+ * Add help2man to build dependencies needed for some gpc man pages.
+ * gpc: Install binobj and gpidump binaries and man pages.
+ * Apply cross compilation patches submitted by Bastian Blank.
+ * Replace s390-biarch patch and copy s390-config-ml patch from 3.2
+ (Gerhard Tonn).
+ * Configure using --enable-debug.
+ * Add infrastructure to only build a subset of binary packages.
+ * Rename libstdc++-{dev,dbg,pic,doc} packages.
+ * Build treelang compiler.
+
+ -- Matthias Klose <doko@debian.org> Sat, 1 Mar 2003 12:56:42 +0100
+
+gcc-3.2 (1:3.2.3ds2-0pre3) unstable; urgency=low
+
+ * gcc-3.2.3 prerelease (CVS 20030228)
+ - Fixes bootstrap failure on alpha-linux.
+ - Fixes ICE on m68k (closes: #177016).
+ * Build Pascal with -O1 on powerpc, disable Pascal on arm, m68k and
+ sparc (due to wrong code generation for fwrite in glibc,
+ see PR optimization/9279).
+ * Apply cross compilation patches submitted by Bastian Blank.
+
+ -- Matthias Klose <doko@debian.org> Fri, 28 Feb 2003 20:26:30 +0100
+
+gcc-3.2 (1:3.2.3ds1-0pre2) unstable; urgency=medium
+
+ * gcc-3.2.3 prerelease (CVS 20030221)
+ - Fixes ICE on hppa (closes: #181813).
+ * Patch for ffitest in s390-java.dpatch deleted, since already fixed
+ upstream. (Gerhard Tonn)
+ * Build crtbeginT.o on m68k-linux (closes: #179807).
+ * Install gcjh-wrapper for javah (closes: #180218).
+ * gij suggests fastjar, gcj recommends fastjar (closes: #179298).
+ * Allow builds using automake1.4 | automake (<< 1.5) (closes: #180048).
+ * Backport fix for to output more correct line numbers (closes: #153965).
+ * Add help2man to build dependencies needed for some gpc man pages.
+ * gpc: Install binobj and gpidump binaries and man pages.
+ * Disable gpc on arm due to wrong code generation for fwrite in
+ glibc (see PR optimization/9279).
+
+ -- Matthias Klose <doko@debian.org> Sat, 22 Feb 2003 19:58:20 +0100
+
+gcc-3.2 (1:3.2.3ds0-0pre1) unstable; urgency=low
+
+ * gcc-3.2.3 prerelease (CVS 20030210)
+ - Fixes long millicode calls on hppa (closes: #180520)
+ * New gpc-20030209 version. Remove gpc-update.dpatch and gpc-testsuite.dptch
+ as they are no longer needed.
+ * Fix netbsd-i386 patches (closes: #180129, #179931)
+ * m68k-bootstrap.dpatch: backport gcse.c changes from 3.3/MAIN to 3.2
+ * Change priority of libstdc++5 and gcc-3.2-base to important.
+
+ -- Ryan Murray <rmurray@debian.org> Tue, 11 Feb 2003 06:18:09 -0700
+
+gcc-3.2 (1:3.2.2ds8-1) unstable; urgency=low
+
+ * gcc-3.2.2 release.
+ - Fixes ICE, regression from 2.95 (closes: #176117).
+ - Fixes ICE, regression from 2.95 (closes: #179161).
+ * libstdc++ for biarch installs now upstream to usr/lib64,
+ therefore mv usr/lib/64 usr/lib64 no longer necessary. (Gerhard Tonn)
+
+ -- Ryan Murray <rmurray@debian.org> Wed, 5 Feb 2003 01:35:29 -0700
+
+gcc-3.2 (1:3.2.2ds7-0pre8) unstable; urgency=low
+
+ * gcc-3.2.2 prerelease (CVS 20030130).
+ * update s390 libffi patch
+ * debian/control: add myself to uploaders and change libc12-dev depends to
+ libc-dev on i386 (closes: #179128)
+ * Build-Depend on procps so that ps is available for logwatch
+
+ -- Ryan Murray <rmurray@debian.org> Fri, 31 Jan 2003 04:00:15 -0700
+
+gcc-3.2 (1:3.2.2ds6-0pre7) unstable; urgency=low
+
+ * gcc-3.2.2 prerelease (CVS 20030128).
+ - Update needed for hppa.
+ - Fixes ICE on arm, regression from 2.95.x (closes: #168086).
+ - Can use default bison (1.875).
+ * Apply netbsd build patches (closes: #177674, #178328, #178325,
+ #178326, #178327).
+ * Run the logwatch script on "slow" architectures (arm, m68k) only.
+ * autoreconf.dpatch: Only update libtool.m4, which is newer conceptually
+ than libtool 1.4 (Ryan Murray).
+ * Apply autoreconf patch universally (Ryan Murray).
+ * More robust gij/gcj wrapper scripts, include /usr/lib/jni in default
+ JNI search path (Ben Burton). Closes: #167932.
+ * Build crtbeginT.o on m68k (closes: #177036).
+ * Fixed libc-dev source dependency (closes: #178602).
+ * Tighten shlib dependency to the current package version; should be
+ 1:3.2.2-1 for the final release (closes: #178867).
+
+ -- Matthias Klose <doko@debian.org> Tue, 28 Jan 2003 21:59:30 +0100
+
+gcc-3.2 (1:3.2.2ds5-0pre6) unstable; urgency=low
+
+ * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20030123).
+ * Build locales needed by the libstdc++ testsuite.
+ * Update config.{guess,sub} files from autotools-dev (closes: #177674).
+ * Disable Ada and Java on netbsd-i386 (closes: #177679).
+ * gnat: Add suggests for gnat-doc and ada-reference-manual.
+
+ -- Matthias Klose <doko@debian.org> Thu, 23 Jan 2003 22:16:53 +0100
+
+gcc-3.2 (1:3.2.2ds4-0pre5.1) unstable; urgency=low
+
+ * Readd build dependency `locales' on arm. locales is now installable
+ * Add autoreconf patch for mips{,el}. (closes: #176311)
+
+ -- Ryan Murray <rmurray@debian.org> Wed, 22 Jan 2003 14:31:14 -0800
+
+gcc-3.2 (1:3.2.2ds4-0pre5) unstable; urgency=low
+
+ * Remove build dependency `libc6-dev-sparc64 [sparc]' for now.
+ * Remove build dependency `locales' on arm. locales is uninstallable
+ on arm due to the missing glibc-2.3.
+ * Use bison-1.35. bison-1.875 causes an hard error on the reduce/reduce
+ conflict in objc-parse.y.
+
+ -- Matthias Klose <doko@debian.org> Fri, 10 Jan 2003 10:10:43 +0100
+
+gcc-3.2 (1:3.2.2ds4-0pre4) unstable; urgency=low
+
+ * Try building with gcc-2.95 on m68k-linux. Building gcc-3.2 with gcc-3.2
+ does not work for me. m68k-linux doesn't look good at all ...
+ * Fix s390 build error.
+ * Add locales to build dependencies. A still unsolved issue is the
+ presence of the locales de_DE, en_PH, en_US, es_MX, fr_FR and it_IT,
+ or else some tests in the libstdc++ testsuite will fail.
+ * Put all -nof files in the -nof package (closes: #175253).
+ * Correctly exit logwatch script (closes: #175251).
+ * Install linker-map.gnu file for libstdc++_pic (closes: #175144).
+ * Install versioned gpcs docs only (closes: #173844).
+ * Include gpc test results in gpc package.
+ * Link local libstdc++ documentation to local source-level documentation.
+ * Clarify libstdc++ description (so version and library version).
+ Closes: #175799.
+ * Include library in libstdc++-dbg package (closes: #176005).
+
+ -- Matthias Klose <doko@debian.org> Wed, 8 Jan 2003 23:39:50 +0100
+
+gcc-3.2 (1:3.2.2ds3-0pre3) unstable; urgency=low
+
+ * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20021231).
+ - Fix loop count computation for preconditioned unrolled loops.
+ Closes: #162919.
+ - Fix xmmintrin.h (_MM_TRANSPOSE4_PS) CVS 20021027 (closes: #163647).
+ - Fix [PR 8601] strlen/template interaction causes ICE CVS 20021201.
+ Closes: #166143.
+ * Watch the log files, which are written during the testsuite runs and print
+ out a message, if there is still activity. No more buildd timeouts on arm
+ and m68k ...
+ * Remove gpc's reference to librx1g-dev package (closes: #172953).
+ * Remove trailing dots on package descriptions.
+ * Fix external reference to cpp.info in gcc.info (closes: #174598).
+
+ -- Matthias Klose <doko@debian.org> Tue, 31 Dec 2002 13:47:52 +0100
+
+gcc-3.2 (1:3.2.2ds2-0pre2) unstable; urgency=medium
+
+ * Friday, 13th upload, so what do you expect ...
+ * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20021212).
+ * Fix gnat build (autobuild maintainers: please revert back to gnat-3.2
+ (<= 1:3.2.1ds6-1) for building gnat-3.2, if the build fails building
+ gnatlib and gnattools).
+ * Really disable sparc64 support.
+
+ -- Matthias Klose <doko@debian.org> Fri, 13 Dec 2002 00:26:37 +0100
+
+gcc-3.2 (1:3.2.2ds1-0pre1) unstable; urgency=low
+
+ * A candidate for the transition ...
+ * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20021210).
+ - doc/invoke.texi: Remove last reference to -a (closes: #171748).
+ * Disable sparc64 support. For now please use egcs64 to build sparc64
+ kernels.
+ * Disable Pascal on the sparc architecture (doesn't bootstrap).
+
+ -- Matthias Klose <doko@debian.org> Tue, 10 Dec 2002 22:33:13 +0100
+
+gcc-3.2 (1:3.2.2ds0-0pre0) unstable; urgency=low
+
+ * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20021202).
+ - Should fix _Pragma expansion within macros (closes: #157416).
+ * New gpc-20021128 version. Run check using EXTRA_TEST_PFLAGS=-g0
+ * Add tetex-bin to build dependencies (gpc needs it). Closes: #171203.
+
+ -- Matthias Klose <doko@debian.org> Tue, 3 Dec 2002 08:22:33 +0100
+
+gcc-3.2 (1:3.2.1ds6-1) unstable; urgency=low
+
+ * gcc-3.2.1 final release.
+ * Build gpc-20021111 for all architectures. hppa and i386 are
+ known to work. For the other architectures, send the usual FTBFS ...
+ WARNING: this gpc version is an alpha version, especially debug info
+ doesn't work well, so use -g0 for compiling. If you need a stable
+ gpc compiler, use gpc-2.95.
+ * Encode the gpc upstream version in the package name, the gpc release
+ date in the version number (requested by gpc upstream).
+ * Added libncurses5-dev and libgmp3-dev as build dependencies for the
+ gpc tests and runtime.
+ * Clean CVS files as well (closes: #169101).
+ * s390-biarch.dpatch added, backported from CVS (Gerhard Tonn).
+ * s390-config-ml.dpatch added, disables biarch for java,
+ libffi and boehm-gc on s390. They need a 64 bit runtime
+ during build which is not yet available on s390 (Gerhard Tonn).
+ * Biarch support for packaging adapted (Gerhard Tonn).
+ biarch variable added and with-sparc64 variable substituted in
+ most places by biarch.
+ dh_shlibdeps is applied only to 32 bit libraries on s390, since
+ ldd for 64 bit libraries don't work on 32 bit runtime.
+ Build dependency to libc6-dev-s390x added.
+
+ -- Matthias Klose <doko@debian.org> Wed, 20 Nov 2002 00:20:58 +0100
+
+gcc-3.2 (1:3.2.1ds5-0pre6) unstable; urgency=medium
+
+ * gcc-3.2.1 prerelease.
+ * Removed arm patch integrated upstream.
+ * Adjust gnat build dependency (closes: #167116).
+ * Always configure with --enable-clocale=gnu. The autobuilders do have
+ locales installed, but not generated the "de_DE" locale needed for
+ the autoconf test in libstdcc++-v3/aclocal.m4.
+ * libstdc++ documentaion: Don't compresss '*.txt' referenced by html pages.
+
+ -- Matthias Klose <doko@debian.org> Tue, 12 Nov 2002 07:19:44 +0100
+
+gcc-3.2 (1:3.2.1ds4-0pre5) unstable; urgency=medium
+
+ * gcc-3.2.1 snapshot (CVS 20021103).
+ * sparc64-build.dpatch: Updated. Lets sparc boostrap again.
+ * s390-loop.dpatch removed, already fixed upstream (Gerhard Tonn).
+ * bison.dpatch: Removed, patch submitted upstream.
+ * backport-java-6865.dpatch: Apply again during build.
+ * Tighten glibc dependency (closes: #166703).
+
+ -- Matthias Klose <doko@debian.org> Sun, 3 Nov 2002 12:22:02 +0100
+
+gcc-3.2 (1:3.2.1ds3-0pre4) unstable; urgency=high
+
+ * gcc-3.2.1 snapshot (CVS 20021020).
+ - Expansion of _Pragma within macros fixed (closes: #157416).
+ * FTBFS: With the switch to bison-1.50 (and 1.75), gcc-3.2 fails to build from
+ source on Debian unstable systems. This is fixed in gcc HEAD, but not on
+ the current release branch.
+ HELP NEEDED:
+ - check what is missing from the patches in debian/patches/bison.dpatch.
+ This is a backport of the bison related patches, but showing regressions
+ in the gcc testsuite, so it cannot be applied.
+ - build gcc using byacc (bootstrap currently fails using byacc).
+ - build bison-1.35 in it's own package (the current 1.35-3 package fails
+ to build form source).
+ - and finally ask upstream to backport the patch to the branch. It's not
+ helpful not beeing able to follow the stable branch. Maybe we should
+ just switch to gcc HEAD as BSD does ...
+ As a terrible workaround, build the sources from CVS first on a machine,
+ with bison-1.35 installed, then package the tarball, so the bison
+ generated files are not rebuilt.
+
+ * re-add lost patch: configure with --enable-__cxa_atexit (closes: #163422),
+ Therefore urgency high.
+ * gcj-wrapper, gij-wrapper: Accept names starting with `.' (closes: #163172,
+ #164009).
+ * Point g++ manpage to correct g++ version (closes: #162843).
+ * Support for i386-freebsd-gnu (closes: #163883).
+ * s390-java.dpatch replaced with backport from cvs head (Gerhard Tonn).
+ * Disable the testsuite run on the Hurd (closes: #159650).
+ * s390-loop.dpatch added, fixes runtime problem (Gerhard Tonn).
+ * debian/patches/bison.dpatch: Backport for bison-1.75 compatibility.
+ Don't use it due to regressions.
+ * debian/patches/backport-java-6865.dpatch: Directly applied in the
+ included tarball because of bison problems.
+ * Make fixincludes priority optional, so linda can depend on it.
+ * Tighten binutils dependency.
+
+ -- Matthias Klose <doko@debian.org> Sun, 20 Oct 2002 10:52:49 +0200
+
+gcc-3.2 (1:3.2.1ds2-0pre3) unstable; urgency=low
+
+ * gcc-3.2.1 snapshot (CVS 20020923).
+ * Run the libstdc++ check-abi script. Results are put into the file
+ /usr/share/doc/libstdc++5/README.libstdc++-baseline in the libstdc++5-dev
+ package. This file contains a new baseline, if no baseline for this
+ architecture is included in the gcc sources.
+ * gcj-wrapper: Accept files starting with an underscore, accept
+ path names (closes: #160859, #161517).
+ * Explicitely call automake-1.4 when rebuilding Makefiles (closes: #161438).
+ * Let installed fixincludes script find files in /usr/lib/fixincludes.
+ * debian/rules.patch: Add .NOTPARALLEL as target, so that patches are
+ applied sequentially (closes: #159395).
+
+ -- Matthias Klose <doko@debian.org> Tue, 24 Sep 2002 07:36:56 +0200
+
+gcc-3.2 (1:3.2.1ds1-0pre2) unstable; urgency=low
+
+ * gcc-3.2.1 snapshot (CVS 20020913). Welcome back m68k in bootstrap land!
+ * Fix arm-tune.dpatch (closes: #159354).
+ * Don't overwrite LD_LIBRARY_PATH in build (closes: #158459).
+ * --disable-__cxa_atexit on NetBSD (closes: #159620).
+ * Reenable installation of message catalogs (disabled in 3.2-0pre2).
+ Closes: #160175.
+ * Ben Collins
+ - Re-enable sparc64 build. This time, it's part of the default compiler.
+ I have disabled 64/alt libraries as they are too much overhead. All
+ libraries build 64bit, but currently only libgcc/libstdc++ include the
+ 64bit libraries.
+ Closes: #160404.
+ * Depend on autoconf2.13, instead of autoconf.
+ * Phil Blundell
+ - debian/patches/arm-update.dpatch: Fix python2.2 build failure.
+
+ -- Matthias Klose <doko@debian.org> Sat, 7 Sep 2002 08:05:02 +0200
+
+gcc-3.2 (1:3.2.1ds0-0pre1) unstable; urgency=medium
+
+ * gcc-3.2.1 snapshot (CVS 20020829).
+ New g++ option -Wabi:
+ Warn when G++ generates code that is probably not compatible with the
+ vendor-neutral C++ ABI. Although an effort has been made to warn about
+ all such cases, there are probably some cases that are not warned about,
+ even though G++ is generating incompatible code. There may also be
+ cases where warnings are emitted even though the code that is generated
+ will be compatible.
+ The current version of the ABI is 102, defined by the __GXX_ABI_VERSION
+ macro.
+ * debian/NEWS.*: Updated.
+ * Fix libstdc++-dev dependency on libc-dev for the Hurd (closes: #157004).
+ * Add versioned expect build dependency.
+ * Tighten binutils dependency to 2.13.90.0.4.
+ * debian/patches/arm-tune.dpatch: Increase stack limit for configure.
+ * 3.2-0pre4 did build gnat-3.2 compilers for all architectures. Build-Depend
+ on gnat-3.2 now (closes: #156734).
+ * Remove bashism's in gcj-wrapper (closes: #157982).
+ * Add -cp and -classpath options to gij(1). Backport from HEAD (#146634).
+ * Add fastjar documentation.
+
+ -- Matthias Klose <doko@debian.org> Fri, 30 Aug 2002 10:35:00 +0200
+
+gcc-3.2 (1:3.2ds0-0pre4) unstable; urgency=low
+
+ * Correct build dependency on gnat-3.1.
+
+ -- Matthias Klose <doko@debian.org> Mon, 12 Aug 2002 01:21:58 +0200
+
+gcc-3.2 (1:3.2ds0-0pre3) unstable; urgency=low
+
+ * gcc-3.2 upstream prerelease.
+ * Disable all configure options, which are standard:
+ --enable-threads=posix --enable-long-long, --enable-clocale=gnu
+
+ -- Matthias Klose <doko@debian.org> Fri, 9 Aug 2002 21:59:08 +0200
+
+gcc-3.2 (1:3.2ds0-0pre2) unstable; urgency=low
+
+ * gcc-3.2 snapshot (CVS 20020802).
+ * Fix g++-include dir.
+ * Don't install the locale files (temporarily, until we don't build
+ gcc-3.1 anymore).
+ * New package libgcj-common to avoid conflict with classpath package.
+
+ -- Matthias Klose <doko@debian.org> Sat, 3 Aug 2002 09:08:34 +0200
+
+gcc-3.2 (1:3.2ds0-0pre1) unstable; urgency=low
+
+ * gcc-3.2 snapshot (CVS 20020729).
+
+ -- Matthias Klose <doko@debian.org> Mon, 29 Jul 2002 20:36:54 +0200
+
+gcc-3.1 (1:3.1.1ds3-1) unstable; urgency=low
+
+ * gcc-3.1.1 release. Following this release we will have a gcc-3.2
+ release soon, which is gcc-3.1.1 plus some C++ ABI changes. Once
+ gcc-3.2 hits the archives, gcc-3.1.1 will go away.
+ * Don't build the sparc64 compiler. The packaging/patches are
+ currently broken.
+ * Add missing headers on m68k and powerpc.
+ * Install libgcc_s_nof on powerpc.
+ * Install libffi's copyright and doc files (closes: #152198).
+ * Remove dangling symlink (closes: #149002).
+ * libgcj3: Add a conflict to the classpath package (closes: #148664).
+ * README.C++: Fix URLs.
+ * libstdc++-dbg: Install into /usr/lib/debug, document it.
+ * backport-java-6865.dpatch: backport from HEAD.
+ * Fix typo in gcj docs (closes: #148890).
+ * Change libstdc++ include dir: /usr/include/c++/3.1.
+ * libstdc++-codecvt.dpatch: New patch (closes: #149776).
+ * Build libstdc++-pic package.
+ * Move 64bit libgcc in its own package libgcc1-64 (closes: #147249).
+ * Tighten glibc dependency.
+
+ -- Matthias Klose <doko@debian.org> Mon, 29 Jul 2002 00:34:49 +0200
+
+gcc-3.1 (1:3.1.1ds2-0pre3) unstable; urgency=low
+
+ * Updated to CVS 2002-06-06 (gcc-3_1-branch).
+ * Updated s390-java patch (Gerhard Tonn).
+ * Don't use -O in STAGE1_FLAGS on m68k.
+ * Fix `-classpath' option in gcj-wrapper script (closes: #150142).
+ * Remove g++-cxa-atexit patch, use --enable-__cxa_atexit configure option.
+
+ -- Matthias Klose <doko@debian.org> Wed, 3 Jul 2002 23:52:58 +0200
+
+gcc-3.1 (1:3.1.1ds1-0pre2) unstable; urgency=low
+
+ * Updated to CVS 2002-06-06 (gcc-3_1-branch), fixing an ObjC regression.
+ * Welcome m68k to bootstrap land (thanks to Andreas Schwab).
+ * Add javac wrapper for gcj-3.1 (Michael Koch).
+ * Remove dangling symlink in /usr/share/doc/gcc-3.1 (closes: #149002).
+
+ -- Matthias Klose <doko@debian.org> Fri, 7 Jun 2002 00:26:05 +0200
+
+gcc-3.1 (1:3.1.1ds0-0pre1) unstable; urgency=low
+
+ * Updated to CVS 2002-05-31 (gcc-3_1-branch).
+ * Change priorities from fastjar and gij-wrapper-3.1 from 30 to 31.
+ * Update arm-tune patch.
+ * Install xmmintrin.h header on i386 (closes: #148181).
+ * Install altivec.h header on powerpc.
+ * Call correct gij in gij-wrapper (closes: #148662, #148682).
+
+ -- Matthias Klose <doko@debian.org> Wed, 29 May 2002 22:47:40 +0200
+
+gcc-3.1 (1:3.1ds2-2) unstable; urgency=low
+
+ * Tighten binutils dependency.
+ * Fix libstdc include dir for multilibs (Dan Jacobowitz).
+
+ -- Matthias Klose <doko@debian.org> Tue, 21 May 2002 08:03:49 +0200
+
+gcc-3.1 (1:3.1ds2-1) unstable; urgency=low
+
+ * GCC 3.1 release.
+ * Ada cannot be built by the autobuilders for the first time. Do it by hand.
+ gnatgcc and gnatbind need to be in the PATH.
+ * Build with CC=gnatgcc, when building the Ada compiler.
+ * Hurd fixes.
+ * Don't build the sparc64 compiler; the hack isn't up to date and glibc
+ isn't converted to use /lib64 and /usr/lib64.
+ * m68k-linux shows bootstrap comparision failures. If you want to build
+ the compiler anyway and ignore the bootstrap comparision failure, edit
+ debian/rules.patch and uncomment the patch to ignore the failure. See
+ /usr/share/doc/gcc-3.1/BOOTSTRAP_COMPARISION_FAILURE for the differences.
+
+ -- Matthias Klose <doko@debian.org> Wed, 15 May 2002 09:53:00 +0200
+
+gcc-3.1 (1:3.1ds1-0pre6) unstable; urgency=low
+
+ * Build from the "final prerelease" tarball (gcc-3.1-20020508.tar.gz).
+ * Build gnat-3.1-doc package.
+ * Build fastjar package without building java packages.
+ * Hurd fixes.
+ * Updated sparc64-build patch.
+ * Add s390-ada patch (Gerhard Tonn).
+ * Undo the dwarf2 support for hppa from -0pre5.
+
+ -- Matthias Klose <doko@debian.org> Thu, 9 May 2002 17:21:09 +0200
+
+gcc-3.1 (1:3.1ds0-0pre5) unstable; urgency=low
+
+ * Use /usr/include/g++-v3-3.1 as C++ include dir.
+ * Update s390-java patch (Gerhard Tonn).
+ * Tighten binutils dependency (gas patch for m68k-linux).
+ * Use gnat-3.1 as the gnat package name (as found in gcc/ada/gnatvsn.ads).
+ * dwarf2 support hppa: a snapshot of the gcc/config/pa directory
+ from the trunk dated 2002-05-02.
+
+ -- Matthias Klose <doko@debian.org> Fri, 3 May 2002 22:51:37 +0200
+
+gcc-3.1 (1:3.1ds0-0pre4) unstable; urgency=low
+
+ * Use gnat-5.00w as the gnat package name (as found in gcc/ada/gnatvsn.ads).
+ * Don't build the shared libgnat library. It assumes an existing shared
+ libiberty library.
+ * Don't install the libgcjgc library.
+
+ -- Matthias Klose <doko@debian.org> Thu, 25 Apr 2002 08:48:04 +0200
+
+gcc-3.1 (1:3.1ds0-0pre3) unstable; urgency=low
+
+ * Build fastjar on all architectures.
+ * Update m68k patches.
+ * Update s390-java patch (Gerhard Tonn).
+
+ -- Matthias Klose <doko@debian.org> Sun, 14 Apr 2002 15:34:47 +0200
+
+gcc-3.1 (1:3.1ds0-0pre2) unstable; urgency=low
+
+ * Add Ada support. To successfully build, a working gnatbind and gcc
+ driver with Ada support is needed.
+ * Apply needed arm patches from 3.0.4.
+
+ -- Matthias Klose <doko@debian.org> Sat, 6 Apr 2002 13:17:08 +0200
+
+gcc-3.1 (1:3.1ds0-0pre1) unstable; urgency=low
+
+ * First try for gcc-3.1.
+
+ -- Matthias Klose <doko@debian.org> Mon, 1 Apr 2002 23:39:30 +0200
+
+gcc-3.0 (1:3.0.4ds3-6) unstable; urgency=medium
+
+ * Second try at fixing sparc build problems.
+
+ -- Phil Blundell <pb@debian.org> Sun, 24 Mar 2002 14:49:26 +0000
+
+gcc-3.0 (1:3.0.4ds3-5) unstable; urgency=medium
+
+ * Enable java on ARM.
+ * Create missing directory to fix sparc build.
+
+ -- Phil Blundell <pb@debian.org> Fri, 22 Mar 2002 20:21:59 +0000
+
+gcc-3.0 (1:3.0.4ds3-4) unstable; urgency=low
+
+ * Link with system zlib (closes: #136359).
+
+ -- Matthias Klose <doko@debian.org> Tue, 12 Mar 2002 20:47:59 +0100
+
+gcc-3.0 (1:3.0.4ds3-3) unstable; urgency=low
+
+ * Build libf2c (pic and non-pic) with -mieee on alpha-linux.
+
+ -- Matthias Klose <doko@debian.org> Sun, 10 Mar 2002 00:37:24 +0100
+
+gcc-3.0 (1:3.0.4ds3-2) unstable; urgency=medium
+
+ * Apply hppa-build patch (Randolph Chung). Closes: #136731.
+ * Make libgcc1 conflict/replace with libgcc1-sparc64. Closes: #135709.
+ * gij-3.0 provides the `java' command. Closes: #128947.
+ * Depend on binutils (>= 2.11.93.0.2-2), allows stripping of libgcj.a
+ again. Closes: #99307.
+ * Update README.cross pointing to the README of the toolchain-source
+ package.
+
+ -- Matthias Klose <doko@debian.org> Wed, 6 Mar 2002 21:53:34 +0100
+
+gcc-3.0 (1:3.0.4ds3-1) unstable; urgency=low
+
+ * Final gcc-3.0.4 release.
+ * debian/rules.d/binary-java.mk: Fix dormant typo, exposed by removing the
+ duplicate libgcj dependency and adding the gij-3.0 package.
+ Closes: #134005.
+ * New patch by Phil Blundell to fix scalapack build error on m68k.
+
+ -- Matthias Klose <doko@debian.org> Wed, 20 Feb 2002 23:59:43 +0100
+
+gcc-3.0 (1:3.0.4ds2-0pre020210) unstable; urgency=low
+
+ * Make the base package dependent on the binary-arch target. Closes: #133433.
+ * Get libstdc++ on arm woring (define _GNU_SOURCE). Closes: #133435.
+
+ -- Matthias Klose <doko@debian.org> Mon, 11 Feb 2002 20:31:12 +0100
+
+gcc-3.0 (1:3.0.4ds2-0pre020209) unstable; urgency=high
+
+ * Update to CVS sources (20020209 gcc-3_0-branch).
+ * Apply patch to fix bootstrap error on arm-linux (submitted upstream
+ by Phil Blundell). Closes: #130422.
+ * Make base package architecture any.
+ * Decouple versioned shlib dependencies from release number for
+ libobjc as well.
+
+ -- Matthias Klose <doko@debian.org> Sat, 9 Feb 2002 01:30:11 +0100
+
+gcc-3.0 (1:3.0.4ds1-0pre020203) unstable; urgency=medium
+
+ * One release critical bug outstanding:
+ - bootstrap error on arm.
+ * Update to CVS sources (20020203 gcc-3_0-branch).
+ * Fixed upstream: PR c/3504: Correct documentation of __alignof__.
+ Closes: #85445.
+ * Remove libgcc-powerpc patch, integrated upstream (closes: #131977).
+ * Tighten binutils build dependency (to address #126162).
+ * Move jv-convert to gcj package (closes: #131985).
+
+ -- Matthias Klose <doko@debian.org> Sun, 3 Feb 2002 14:47:14 +0100
+
+gcc-3.0 (1:3.0.4ds0-0pre020127) unstable; urgency=low
+
+ * Two release critical bugs outstanding:
+ - bootstrap error on arm.
+ - bus errors for C++ and java executables on sparc (see the testsuite
+ results).
+ * Update to CVS sources (20020125 gcc-3_0-branch).
+ * Enable java support for s390 architecture (patch from Gerhard Tonn).
+ * Updated NEWS file for 3.0.3.
+ * Disable building the gcc-sparc64, but build a multilibbed compiler
+ for sparc as the default.
+ * Disabled the subreg-byte patch for sparc (request from Ben Collins).
+ * Fixed reference to libgcc1 package in README (closes: #126218).
+ * Do recommend libc-dev, not depend on it. For low-end or embedded systems
+ the dependency on libc-dev can make the difference between
+ having enough or having too little space to build a kernel.
+ * README.cross: Updated by Hakan Ardo.
+ * Decouple versioned shlib dependencies from release number. Closes: #118391.
+ * Fix diversions for gcc-3.0-sparc64 package (closes: #128178),
+ unconditionally remove `sparc64-linux-gcc' alternative.
+ * g77/README.libg2c.Debian: New file mentioning `libg2c-pic'. The next
+ g77 version (3.1) does build a static and shared library (closes: #104250).
+ * Fix formatting errors in the synopsis of the java man pages. Maybe the
+ reason for #127571. Closes: #127571.
+ * fastjar: Fail for the (currently incorrect) -u option. Addresses: #116145.
+ Add alternative for `jar' using priority 30 (closes: #118648).
+ * jv-convert: Add --help option and man page. Backport from HEAD branch.
+ * libgcj2-dev: Remove duplicate dependency (closes: #127805).
+ * Giving up and make just another new package gij-X.Y with only the gij-X.Y
+ binary for policy conformance (closes: #127111).
+ * gij: Provides an alternative for `java' (priority 30) using a wrapper
+ script (Stephen Zander) (closes: #128974). Added simple manpage.
+
+ -- Matthias Klose <doko@debian.org> Sun, 27 Jan 2002 13:33:41 +0100
+
+gcc-3.0 (1:3.0.3ds3-1) unstable; urgency=low
+
+ * Final gcc-3.0.3 release.
+ * Do not compress .txt files in libstdc++ docs referenced from html
+ pages (closes: #124136).
+ * libstdc++-dev suggests libstdc++-doc.
+ * debian/patches/gcc-ia64-NaT.dpatch: Update (closes: #123685).
+
+ -- Matthias Klose <doko@debian.org> Fri, 21 Dec 2001 02:54:11 +0100
+
+gcc-3.0 (1:3.0.3ds2-0pre011215) unstable; urgency=low
+
+ * Update to CVS sources (011215).
+ * libstdc++ documentation updated upstream (closes: #123790).
+ * debian/patches/gcc-ia64-NaT.dpatch: Disable. Fixes bootstrap error
+ on ia64 (#123685).
+
+ -- Matthias Klose <doko@debian.org> Sat, 15 Dec 2001 14:43:21 +0100
+
+gcc-3.0 (1:3.0.3ds1-0pre011210) unstable; urgency=medium
+
+ * Update to CVS sources (011208).
+ * Supposed to fix powerpc build error (closes: #123155).
+
+ -- Matthias Klose <doko@debian.org> Thu, 13 Dec 2001 07:26:05 +0100
+
+gcc-3.0 (1:3.0.3ds0-0pre011209) unstable; urgency=medium
+
+ * Update to CVS sources (011208). Frozen for upstream 3.0.3 release.
+ * Apply contrib/PR3145.patch, a backport of Nathan Sidwell's patch to
+ fix PR c++/3145, the infamous "virtual inheritance" bug. This affected
+ especially KDE2 (eg. artsd). Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+ * cc1plus segfault in strength reduction fixed upstream. Closes: #122547.
+ * debian/patches/gcc-ia64-NaT.dpatch: Add patch to avoid a bug that can
+ cause miscompiled userapps to crash the kernel. Closes: #121924.
+ * Reenable shared libgcc for powerpc. Fixed upstream.
+ http://gcc.gnu.org/ml/gcc-patches/2001-11/msg00340.html
+ debian/patches/libgcc-powerpc.dpatch: New patch.
+ * Add upstream changelogs.
+ * Remove gij alternative. Move to gij package.
+
+ -- Matthias Klose <doko@debian.org> Sun, 9 Dec 2001 09:36:48 +0100
+
+gcc-3.0 (1:3.0.2ds4-4) unstable; urgency=medium
+
+ * Disable building of libffi on mips and mipsel.
+ (closes: #117503).
+ * Enable building of shared libgcc on s390
+ (closes: #120452).
+
+ -- Christopher C. Chimelis <chris@debian.org> Sat, 1 Dec 2001 06:15:29 -0500
+
+gcc-3.0 (1:3.0.2ds4-3) unstable; urgency=medium
+
+ * Fix logic to build libffi without java (closes: #117503).
+
+ -- Matthias Klose <doko@debian.org> Sun, 4 Nov 2001 14:34:50 +0100
+
+gcc-3.0 (1:3.0.2ds4-2) unstable; urgency=medium
+
+ * Enable java for ia64 (Jeff Licquia). Closes: #116798.
+ * Allow building of libffi without gcj (Jeff Licquia).
+ New libffi packages for arm hurd-i386 mips mipsel,
+ still missing: hppa, s390.
+ * debian/NEWS.gcc: Add 3.0.2 release notes.
+ * debian/patches/hppa-align.dpatch: New patch from Alan Modra,
+ submitted by Randolph Tausq.
+
+ -- Matthias Klose <doko@debian.org> Thu, 25 Oct 2001 23:59:31 +0200
+
+gcc-3.0 (1:3.0.2ds4-1) unstable; urgency=medium
+
+ * Final gcc-3.0.2 release. The source tarball is not the released
+ tarball, but taken from CVS 011024).
+ * Remove patch for s390, included upstream.
+
+ -- Matthias Klose <doko@debian.org> Wed, 24 Oct 2001 00:49:40 +0200
+
+gcc-3.0 (1:3.0.2ds3-0pre011014) unstable; urgency=low
+
+ * Update to CVS sources (011014). Frozen for upstream 3.0.2 release.
+ Closes: #109351, #114099, #114216, #105741 (allegro3938).
+ * Added debian/patches/fastjar.dpatch, which makes fastjar extract
+ filenames correctly (previously, some had incorrect names on extract).
+ Closes: #113236.
+ * Priorities fixed in the past (closes: #94404).
+
+ -- Matthias Klose <doko@debian.org> Sun, 14 Oct 2001 13:19:43 +0200
+
+gcc-3.0 (1:3.0.2ds2-0pre010923) unstable; urgency=low
+
+ * Bootstraps on powerpc again (closes: #112777).
+
+ -- Matthias Klose <doko@debian.org> Sun, 23 Sep 2001 01:32:11 +0200
+
+gcc-3.0 (1:3.0.2ds2-0pre010922) unstable; urgency=low
+
+ * Update to CVS sources (010922).
+ * Fixed upstream (closes: #111801). #105569 on hppa.
+ * Update hppa patch (Matt Taggart).
+ * Fix libstdc++-dev package description (closes: #112758).
+ * debian/rules.d/binary-objc.mk: Fix build error (closes: #112462).
+ * Make gobjc-3.0 conflict with gcc-3.0-sparc64 (closes: #111772).
+
+ -- Matthias Klose <doko@debian.org> Sat, 22 Sep 2001 09:34:49 +0200
+
+gcc-3.0 (1:3.0.2ds1-0pre010908) unstable; urgency=low
+
+ * Update to CVS sources (010908).
+ * Update hppa patch (Matt Taggart).
+ * Depend on libgc6-dev, not libgc5-dev, which got obsolete (during
+ the freeze ...). However adds s390 support (closes: #110189).
+ * debian/patches/m68k-reload.dpatch: New patch (Roman Zippel).
+ Fixes #89023.
+ * debian/patches/gcc-sparc.dpatch: New patch ("David S. Miller").
+ Fixes libstdc++ testsuite failures on sparc.
+
+ -- Matthias Klose <doko@debian.org> Sat, 8 Sep 2001 14:26:20 +0200
+
+gcc-3.0 (1:3.0.2ds0-0pre010826) unstable; urgency=low
+
+ * gcc-3.0-nof: Fix symlink to gcc-3.0-base doc directory.
+ * debian/patches/gcj-without-rpath: New patch.
+ * Remove self dependency on libgcj package.
+ * Handle diversions for upgrades from 3.0 and 3.0.1 -> 3.0.2
+ in gcc-3.0-sparc64 package.
+ * Build libg2c.a with -fPIC -DPIC and name the result libg2c-pic.a.
+ Link with this library to avoid linking with non-pic code.
+ Use this library when building dynamically loadable objects (python
+ modules, gimp plugins, ...), which need to be linked against g2c or
+ a library which is linked against g2c (i.e. lapack).
+ Packages needing '-lg2c-pic' must have a build dependency on
+ 'g77-3.0 (>= 1:3.0.2-0pre010826).
+
+ -- Matthias Klose <doko@debian.org> Sun, 26 Aug 2001 13:59:03 +0200
+
+gcc-3.0 (1:3.0.2ds0-0pre010825) unstable; urgency=low
+
+ * Update to CVS sources (010825).
+ * Add libc6-dev-sparc64 to gcc-3.0-sparc64 and to sparc build dependencies.
+ * Remove conflicts on egcc package (closes: #109718).
+ * Fix gcc-3.0-nof dependency.
+ * s390 patches against gcc-3.0.1 (Gerhard Tonn).
+ * debian/control: Require binutils (>= 2.11.90.0.27)
+
+ -- Matthias Klose <doko@debian.org> Sat, 25 Aug 2001 10:59:15 +0200
+
+gcc-3.0 (1:3.0.1ds3-1) unstable; urgency=low
+
+ * Final gcc-3.0.1 release.
+ * Changed upstream: default of -flimit-inline is 600 (closes: #106716).
+ * Add fastjar man page (submitted by "The Missing Man Pages Project",
+ http://www.netmeister.org/misc/m2p2i/) (closes: #103051).
+ * Fixed in last upload as well: #105246.
+ * debian/patches/cpp-memory-leak.dpatch: New patch
+ * Disable installation of shared libgcc on s390 (Gerhard Tonn).
+
+ -- Matthias Klose <doko@debian.org> Mon, 20 Aug 2001 20:47:13 +0200
+
+gcc-3.0 (1:3.0.1ds2-0pre010811) unstable; urgency=high
+
+ * Update to CVS sources (010811). Includes s390 support.
+ * Add xlibs-dev to Build-Depends (libgcj).
+ * Enable java for powerpc, disable java for ia64.
+ * Enable ObjC garbage collection for all archs, which have a libgc5-dev
+ package.
+ * New patch libstdc++-codecvt (Michael Piefel) (closes: #104614).
+ * Don't strip static libgcj library (work around binutils bug #107812).
+ * Handle diversions for upgrade 3.0 -> 3.0.1 in gcc-3.0-sparc64 package
+ (closes: #107569).
+
+ -- Matthias Klose <doko@debian.org> Sat, 11 Aug 2001 20:42:15 +0200
+
+gcc-3.0 (1:3.0.1ds1-0pre010801) unstable; urgency=high
+
+ * Update to CVS sources (010801). (closes: #107012).
+ * Remove build dependency on non-free graphviz and include pregenerated
+ docs (closes: #107124).
+ * Fixed in 3.0.1 (closes: #99307).
+ * Updated m68k-updates patch (Roman Zippel).
+ * Another fix for ia64 packaging bits (Randolph Chung).
+
+ -- Matthias Klose <doko@debian.org> Tue, 31 Jul 2001 21:52:55 +0200
+
+gcc-3.0 (1:3.0.1ds0-0pre010727) unstable; urgency=high
+
+ * Update to CVS sources (010727).
+ * Add epoch to source version. Change '.dsx' to 'dsx', so that
+ 3.1.1ds0 gt 3.1ds7 (closes: #106538).
+
+ -- Matthias Klose <doko@debian.org> Sat, 28 Jul 2001 09:56:29 +0200
+
+gcc-3.0 (3.0.1.ds0-0pre010723) unstable; urgency=high
+
+ * ia64 packaging bits (Randolph Chung) (closes: #106252).
+
+ -- Matthias Klose <doko@debian.org> Mon, 23 Jul 2001 23:02:03 +0200
+
+gcc-3.0 (3.0.1.ds0-0pre010721) unstable; urgency=high
+
+ * Update to CVS sources (010721).
+ - Remove patches applied upstream: libstdc++-limits.dpatch,
+ objc-data-references
+ - Updated other patches.
+ * Fix gij alternative (closes: #103468, #103883).
+ * Patch to fix bootstrap on sparc (closes: #103568).
+ * Corrected (closes: #105371) and updated README.Debian.
+ * m68k patches for sucessful bootstrap (Roman Zippel).
+ * Add libstdc++v3 porting hints to README.Debian and README.C++.
+ * m68k md fix (#105622) (Roman Zippel).
+ * debian/rules2: Disable non-functional ulimit on Hurd (#105884).
+ * debian/control: Require binutils (>= 2.11.90.0.24)
+ * Java is enabled for alpha (closes: #87300).
+
+ -- Matthias Klose <doko@debian.org> Sun, 22 Jul 2001 08:24:04 +0200
+
+gcc-3.0 (3.0.ds9-4) unstable; urgency=high
+
+ * Move this version to testing ASAP. testing still has a prerelease
+ version with now incompatible ABI's. If sparc doesn't build,
+ then IMHO it's better to remove it from testing.
+ * debian/control.m4: Set uploaders field. Adjust description of
+ gcc-3.0 (binary) package (closes: #102271, #102620).
+ * Separate gij.1 in it's own pseudo man page (closes: #99523).
+ * debian/patches/java-manpages.dpatch: New patch.
+ * libgcj: Install unversioned gij.
+
+ -- Matthias Klose <doko@debian.org> Tue, 3 Jul 2001 07:38:08 +0200
+
+gcc-3.0 (3.0.ds9-3) unstable; urgency=high
+
+ * Reenable configuration with posix threads on i386 (lost in hurd-i386
+ merge).
+
+ -- Matthias Klose <doko@debian.org> Sun, 24 Jun 2001 22:21:45 +0200
+
+gcc-3.0 (3.0.ds9-2) unstable; urgency=medium
+
+ * Move this version to testing ASAP. testing still has a prerelease
+ version with now incompatible ABI's.
+ * Add libgcc0 and libgcc300 to the build conflicts (#102041).
+ * debian/README.FIRST: Removed (#101534).
+ * Updated subreg-byte patch (doc files).
+ * Disable java for the Hurd, mips and mipsel (#101570).
+ * Patch for building on the Hurd (#101708) (Jeff Bailey <jbailey@nisa.net>).
+ * Packaging fixes for the Hurd (#101711) (Jeff Bailey <jbailey@nisa.net>).
+ * Include pregenerated doxygen (1.2.6) docs for libstdc++-v3 (#101557).
+ The current doxygen-1.2.8.1 segaults.
+ * C++: Enable -fuse-cxa-atexit by default (#101901).
+ * Correct mail address in gccbug (#101743).
+ * Make rules resumable after failure in binary-xxx targets (#101637).
+
+ -- Matthias Klose <doko@debian.org> Sun, 24 Jun 2001 16:04:53 +0200
+
+gcc-3.0 (3.0.ds9-1) unstable; urgency=low
+
+ * Final 3.0 release.
+ * Update libgcc version number (#100983, #100988, #101069, #101115, #101328).
+ * Updated hppa-build patch (Matt Taggart <taggart@carmen.fc.hp.com>).
+ * Disable java for hppa.
+ * Updated subreg-byte patch for sparc (Ben Collins).
+
+ -- Matthias Klose <doko@debian.org> Mon, 18 Jun 2001 18:26:04 +0200
+
+gcc-3.0 (3.0.ds8-0pre010613) unstable; urgency=low
+
+ * Update patches for recent (010613 23:13 +0200) CVS sources.
+ * Fix packaging bugs (#100459, #100447, #100483).
+ * Build-Depend on gawk, mawk doesn't work well with test_summary.
+
+ -- Matthias Klose <doko@debian.org> Wed, 13 Jun 2001 23:13:38 +0200
+
+gcc-3.0 (3.0.ds7-0pre010609) unstable; urgency=low
+
+ * Fix build dependency for the hurd (#99164).
+ * Update patches for recent (010609) CVS sources.
+ * Disable java on powerpc (link error in libjava).
+ * gcc-3.0-base.postinst: Don't prompt for non-interactive installs (#100110).
+
+ -- Matthias Klose <doko@debian.org> Sun, 10 Jun 2001 09:45:57 +0200
+
+gcc-3.0 (3.0.ds6-0pre010526) unstable; urgency=high
+
+ * Urgency "high" for replacing the gcc-3.0 snapshots in testing, which
+ now are incompatile due to the changed ABIs.
+ * Upstream begins tagging with "gcc-3_0_pre_2001mmdd".
+ * Tighten dependencies to install only binary packages derived from
+ one source (#98851). Tighten libc6-dev dependency to match libc6.
+
+ -- Matthias Klose <doko@debian.org> Sun, 27 May 2001 11:35:31 +0200
+
+gcc-3.0 (3.0.ds6-0pre010525) unstable; urgency=low
+
+ * ATTENTION: The ABI (exception handling) changed. No upgrade path from
+ earlier snapshots (you had been warned in the postinst ...)
+ Closing #93597, #94576, #96448, #96461.
+ You have to rebuild
+ * HELP is appreciated for scanning the Debian BTS and sending followups
+ to bug reports!!!
+ * Should we name debian gcc uploads? What about a "still seeking
+ g++ maintainer" upload?
+ * Fixed in gcc-3.0: #97030
+ * Update patches for recent (010525) CVS sources.
+ * Make check depend on build target (fakeroot problmes).
+ * debian/rules.d/binary-libgcc.mk: new file, build first.
+ * Free memory detection on the hurd for running the testsuite.
+ * Update debhelper build dependency.
+ * libstdc++-doc: Include doxygen generated docs.
+ * Fix boring packaging bugs, too tired for appropriate changelogs ...
+ #93343, #96348, #96262, #97134, #97905, #96451, #95812, #93157
+ * Fixed bugs: #87000.
+
+ -- Matthias Klose <doko@debian.org> Sat, 26 May 2001 23:10:42 +0200
+
+gcc-3.0 (3.0.ds5-0pre010510) unstable; urgency=low
+
+ * Update patches for recent (010506) CVS sources.
+ * New version of source, as of 2001-05-10
+ * New version of gpc source, as of 2001-05-06 (disabled by default).
+ * Make gcc-3.0-sparc64 provide an alternative for sparc64-linux-gcc,
+ since it can build kernels just fine (it seems)
+ * Add hppa patch from Matt Taggart
+ * Fix objc info inclusion...now merged with gcc info
+ * Do not install the .la for libstdc++, since it confuses libtool linked
+ applications when libstdc++3-dev and libstdc++2.10-dev are both
+ installed (closes #97905).
+ * Fixed gcc-base and libgcc section/prio to match overrides
+
+ -- Ben Collins <bcollins@debian.org> Mon, 7 May 2001 00:08:52 +0200
+
+gcc-3.0 (3.0.ds5-0pre010427) unstable; urgency=low
+
+ * Fixed priority for fastjar from optional to extra
+ * New version of source, as of 2001-04-27
+ * Fix description of libgcj-dev
+ * libffi-install: Make libffi installable
+ * Add libffi and libffi-dev packages. libffi is only enabled for java
+ targets right now. Perhaps more will be enabled later.
+ * Fixes to build cross compiler package (for avr)
+ (Hakan Ardo <hakan@debian.org>).
+ * Better fixincludes description (#93157).
+ * Remove all remnants of libg++
+ * Remove all hacks around libstdc++ version. Since we are strictly v3 now,
+ we can treat it like a normal shared lib, and not worry about all those
+ ABI changes.
+ * Remove all cruft control scripts. Note, debhelper will create scripts
+ that it needs to. It will do the doc link stuff and the ldconfig stuff
+ explicitly.
+ * Clean up the SONAME parsing stuff, make it a little more cleaner over
+ all the lib packages
+ * Make libffi install when built (IOW, whenever java is enabled). This
+ should obsolete the libffi package, which is old and broken
+ * Revert to normal sonames, except for ia64 (for now)
+ * Remove all references to dh_testversion, since they are deprecated for
+ Build-Depends
+ * Fix powerpc nof build
+ * Remove all references to the MULTILIB stuff, since the arches are
+ using specialized builds anyway (nof, softfloat).
+ * Added 64bit sparc64 package (gcc-3.0-sparc64, libgcc0-sparc64)
+ * Removed obsolete shlibs.local file
+
+ -- Ben Collins <bcollins@debian.org> Sun, 15 Apr 2001 21:33:15 -0400
+
+gcc-3.0 (3.0.ds4-0pre010403) unstable; urgency=low
+
+ * debian/README: Updated for gcc-3.0
+ * debian/rules.patch: Added subreg-byte patch for sparc
+ * debian/rules.unpack: Update to current CVS for gcc tarball name
+ * debian/patches/subreg-byte.dpatch: sparc subreg-byte support
+ * debian/patches/gcc-rawhide.dpatch: Removed
+ debian/patches/gpc-2.95.dpatch: Removed
+ debian/patches/sparc32-rfi.dpatch: Removed
+ debian/patches/temporary.dpatch: Removed
+ * Moving to unstable now
+ * debian/patches/gcc-ppc-disable-shared-libgcc.dpatch: New patch,
+ disables shared libgcc for powerpc target, since it isn't compatible
+ with the EABI objects.
+ * Create $(with_shared_libgcc) var
+ * debian/rules.d/binary-gcc.mk: Use this new variable to determine if
+ the libgcc package actually has any files
+
+ -- Ben Collins <bcollins@debian.org> Tue, 3 Apr 2001 23:00:55 -0400
+
+gcc-3.0 (3.0.ds2-0pre010223) experimental; urgency=low
+
+ * New snapshot. Use distinct shared object names for shared libraries:
+ we don't know if binary API's still change until the final release.
+ * Versioned package names.
+ * debian/control.m4: New file. Add gcc-base, libgcc0, libobjc1,
+ libstdc++-doc, libgcj1, libgcj1-dev, fastjar, fixincludes packages.
+ Remove gcc-docs package.
+ * debian/gcov.1: Remove.
+ * debian/*: Remove 2.95.x support. Prepare for 3.0.
+ * debian/patches: Remove 2.95.x patches.
+ * Changed source package name. It's not allowed anymore to overwrite
+ source packages with different content. Introducing a 'debian source
+ element' (.ds<num>), which is stripped again from the version number
+ for the binary packages.
+ * Fixed bugs and added functionality:
+ #26436, #27878, #33786, #34876, #35477, #42662, #46181, #42989,
+ #47981, #48530, #50529, #51227, #51456, #51651, #52382, #53698,
+ #55291, #55967, #56867, #58219, #59005, #59232, #59776, #64628,
+ #65687, #67631, #68632, #68963, #68987, #69530, #72933, #75120,
+ #75759, #76645, #76827, #83221, #87540
+ * libgcj fixes: 42894, #51266, #68560, #71187, #79984
+
+ -- Matthias Klose <doko@debian.org> Sat, 24 Feb 2001 13:41:11 +0100
+
+gcc-2.95 (2.95.3-2.001222) experimental; urgency=low
+
+ * New upstream version 2.95.3 experimental (CVS 20001222).
+ * debian/control.in: Versioned package names, removal of snapshot logic.
+ Remove fake gcc-docs package.
+ * Reserve -1 release numbers for woody.
+ * Updated to gpc-20001218.
+
+ -- Matthias Klose <doko@debian.org> Fri, 22 Dec 2000 19:53:03 +0100
+
+gcc (2.95.2-20) unstable; urgency=low
+
+ * Apply patch from gcc-2_95-branch; remove ulimit for make check.
+
+ -- Matthias Klose <doko@debian.org> Sun, 10 Dec 2000 17:01:13 +0100
+
+gcc (2.95.2-19) unstable; urgency=low
+
+ * Added testsuite-20001207 from current snapshots. We'll need results
+ for 2.95.2 to make sure there are no regressions against that release.
+ Dear build daemons and porters to other architectures, please send an
+ email to gcc-testresults@gcc.gnu.org.
+ You can do this by running "debian/rules mail-summary".
+ * Updated to gpc-20001206.
+ * Added S/390 patch prepared by Chu-yeon Park <kokids@debian.org> (#78983).
+ * debian/patches/libio.dpatch: Fix iostream doc (fixes #77647).
+ * debian/patches/gcc-doc.dpatch: Update URL (fixes #77542).
+ * debian/patches/gcc-reload1.dpatch Patch from the gcc-bug list which
+ fixes a problem in "long long" on i[345]86 (i686 was not affected).
+
+ -- Matthias Klose <doko@debian.org> Sat, 9 Dec 2000 12:30:32 +0100
+
+gcc (2.95.2-18) unstable; urgency=low
+
+ * debian/control.in: Fix syntax errors (fixes #76146, #76458).
+ Disable gpc on the hurd by request (#75686).
+ * debian/patches/arm-various.dpatch: Patches from Philip Blundell
+ for ARM arch (fixes #75801).
+ * debian/patches/gcc-alpha-mi-thunk.dpatch: Patches from Chris Chimelis
+ for alpha arch.
+ * debian/patches/g77-docs.dpatch: Adjust g77 docs (fixes #72594).
+ * Update gpc to gpc-20001118.
+ * Reenable gpc for alpha.
+ * debian/README.C++: Merge debian/README.libstdc++ and C++ FAQ information
+ provided by Matt Zimmermann.
+ * Build gcj only on architectures, where libgcj-2.95.1 can be built as well.
+ Probably needs some adjustments ...
+ * Conditionalize for chill, fortran, java, objc and chill.
+
+ * NOT APPLIED:
+ debian/patches/libstdc++-bastring.dpatch: Apply fix (fixes #75759).
+
+ -- Matthias Klose <doko@debian.org> Sun, 19 Nov 2000 10:40:41 +0100
+
+gcc (2.95.2-17) unstable; urgency=low
+
+ * Disable gpc for alpha.
+ * Include gpc-cpp in gpc package (fixes #74492).
+ * Don't build gcc-docs compatibility package anymore.
+
+ -- Matthias Klose <doko@debian.org> Wed, 11 Oct 2000 06:16:53 +0200
+
+gcc (2.95.2-16) unstable; urgency=low
+
+ * Applied the emdebian/cross compiler patch and documentation
+ (Frank Smith <smith@amirix.com>).
+ * Applied patch for avr target (Hakan Ardo <hakan@debian.org>).
+ * debian/control.in: Add awk to Build-Depends.
+ Tighten libc6-dev dependency for libstdc++-dev (fixes #73031,
+ #72531, #72534).
+ * Disable libobjc_gc for m68k again (fixes #74380).
+ * debian/patches/arm-namespace.dpatch: Apply patch from Philip
+ Blundell <pb@futuretv.com> to fix name space pollution on arm
+ (fixes #70937).
+ * Fix more warnings in STL headers (fixes #69352, #71943).
+
+ -- Matthias Klose <doko@debian.org> Mon, 9 Oct 2000 21:51:41 +0200
+
+gcc (2.95.2-15) unstable; urgency=low
+
+ * debian/control.in: Add libgc5-dev to build depends (fixes #67015).
+ * debian/rules.def: Build GC enabled ObjC runtime for sparc.
+ * Bug #58741 fixed (in some version since 2.95.2-5).
+ * debian/control.in: Recommend librx1g-dev, libgmp2-dev, libncurses5-dev
+ (unit dependencies).
+ * Patches from Marcus Brinkmann for the hurd (fixes #67763):
+ - debian/rules.defs: Disable objc_gc on hurd-i386.
+ Disable libg++ on GNU systems.
+ - debian/rules2: Set correct names of libstdc++/libg++
+ libraries on GNU systems.
+ Write out correct shlibs and shlibs.local file content.
+ - Keep _G_config.h for the Hurd.
+ * Apply patch for ObjC linker warnings.
+ * Don't apply gcj backport patch for sparc.
+ * Apply libio compatability patch
+ * debian/glibcver.sh: generate appropriate version for glibc
+ * debian/rules.conf: for everything after glibc 2.1, we always append
+ "-glibc$(ver)" to the C++ libs for linux.
+ * Back down gpc to -13 version (-14 wont compile on anything but i386
+ and m68k becuase of gpc).
+ * Remove extraneous and obsolete sparc64 patches/files from debian/*
+
+ -- Ben Collins <bcollins@debian.org> Thu, 21 Sep 2000 08:08:35 -0400
+
+gcc-snapshot (20000901-2.2) experimental; urgency=low
+
+ * New snapshot.
+ * debian/rules2: Move tradcpp0 to cpp package.
+
+ -- Matthias Klose <doko@debian.org> Sat, 2 Sep 2000 01:14:28 +0200
+
+gcc-snapshot (20000802-2.1) experimental; urgency=low
+
+ * New snapshot.
+ * debian/rules2: Fixes. tradcpp0 is in gcc package, not cpp.
+
+ -- Matthias Klose <doko@debian.org> Thu, 3 Aug 2000 07:40:05 +0200
+
+gcc-snapshot (20000720-2) experimental; urgency=low
+
+ * New snapshot.
+ * Enable libstdc++-v3.
+ * debian/rules2: Don't use -D for /usr/bin/install.
+
+ -- Matthias Klose <doko@debian.org> Thu, 20 Jul 2000 22:33:37 +0200
+
+gcc (2.95.2-14) unstable; urgency=low
+
+ * Update gpc patch.
+
+ -- Matthias Klose <doko@debian.org> Wed, 5 Jul 2000 20:51:16 +0200
+
+gcc (2.95.2-13) frozen unstable; urgency=low
+
+ * Update debian/README: document how to compile 2.0.xx kernels; don't
+ register gcc272 as an alternative for gcc (closes #62419).
+ Clarify compiler setup (closes #65548).
+ * debian/control.in: Make libstdc++-dev depend on current version of g++.
+ * Undo CVS update from release -8 (problems on alpha, #55263).
+
+ -- Matthias Klose <doko@debian.org> Mon, 19 Jun 2000 23:06:48 +0200
+
+gcc (2.95.2-12) frozen unstable; urgency=low
+
+ * debian/gpc.postinst: Correct typo introduced with -11 (fixes #64193).
+ * debian/patches/gcc-rs600.dpatch: ppc codegen fix (fixes #63933).
+
+ -- Matthias Klose <doko@debian.org> Sun, 21 May 2000 15:56:05 +0200
+
+gcc (2.95.2-11) frozen unstable; urgency=medium
+
+ * Upload to unstable again (fixes critical #63784).
+ * Fix doc-base files (fixes important #63810).
+ * gpc wasn't built in -10 (fixes #63977).
+ * Make /usr/bin/pc an alternative (fixes #63888).
+ * Add SYSCALLS.c.X to gcc package.
+
+ -- Matthias Klose <doko@debian.org> Sun, 14 May 2000 22:17:44 +0200
+
+gcc (2.95.2-10) frozen; urgency=low
+
+ * debian/control.in: make gcc conflict on any version of egcc
+ (slink to potato upgrade problem, fixes grave #62084).
+ * Build protoize programs, separate out in new package (fixes #59436,
+ #62911).
+ * Create dummy gcc-docs package for smooth update from slink (fixes #62537).
+ * Add doc-base support for all -doc packages (fixes #63380).
+
+ -- Matthias Klose <doko@debian.org> Mon, 1 May 2000 22:24:28 +0200
+
+gcc (2.95.2-9) frozen unstable; urgency=low
+
+ * Disable the sparc-bi-arch.dpatch (patch from Ben Collins, built
+ for sparc as NMU 8.1) (fixes critical #61529 and #61511).
+ "Seems that when you compile gcc 2.95.x for sparc64-linux and compile
+ sparc32 programs, the code is not the same as sparc-linux compile for
+ sparc32 (this is a bug, and is fixed in gcc 2.96 CVS)."
+ * debian/patches/gcj-vs-iconv.dpatch: Option '--encoding' for
+ encoding of input files. Patch from Tom Tromey <tromey@cygnus.com>
+ backported to 2.95.2 (fixes #42895).
+ Compile a Latin-1 encoded file with `gcj --encoding=Latin1 ...'.
+ * debian/control.in: gcc, g++ and gobjc suggest their corresponding
+ task packages (fixes #59623).
+
+ -- Matthias Klose <doko@debian.org> Sat, 8 Apr 2000 20:19:15 +0200
+
+gcc (2.95.2-8) frozen unstable; urgency=low
+
+ * Post-2.95.2 CVS updates of the gcc-2_95-branch until 20000313.
+ * debian/rules2: configure with --enable-java-gc=no for sparc. Fixes
+ gcj side of #60535.
+ * debian/rules.patch: Disable gcc-emit-rtl patch for all archs but
+ alpha. Disable g++-is-tree patch ("just for 2.95.1").
+ * debian/README: Update for gcc-2.95.
+
+ -- Matthias Klose <doko@debian.org> Mon, 27 Mar 2000 00:03:16 +0200
+
+gcc (2.95.2-7) frozen unstable; urgency=low
+
+ * debian/patches/gcc-empty-struct-init.dpatch; Apply patch from
+ http://gcc.gnu.org/ml/gcc-patches/2000-02/msg00637.html. Fixes
+ compilation of 2.3.4x kernels.
+ * debian/patches/gcc-emit-rtl.dpatch: Apply patch from David Huggins-Daines
+ <dhuggins@linuxcare.com> (backport from 2.96 CVS to fix #55263).
+ * debian/patches/gcc-pointer-arith.dpatch: Apply patch from Jim Kingdon
+ <kingdon@redhat.com> (backport from 2.96 CVS to fix #54951).
+
+ -- Matthias Klose <doko@debian.org> Thu, 2 Mar 2000 23:16:43 +0100
+
+gcc (2.95.2-6) frozen unstable; urgency=low
+
+ * Post-2.95.2 CVS updates of the gcc-2_95-branch until 20000220.
+ * Remove dangling symlink probably left over from libstdc++2.9
+ package (fixes #53661).
+ * debian/patches/gcc-alpha-complex-float.dpatch: Fixed patch by
+ David Huggins-Daines (fixes #58486).
+ * debian/g++.{postinst,prerm}: Remove outdated g++FAQ registration
+ (fixes #58253).
+ * debian/control.in: gcc-doc replaces gcc-docs (fixes #58108).
+ * debian/rules2: Include some fixed headers (asm, bits, linux, ...).
+ * debian/patches/{gcc-alpha-ev5-fix,libstdc++-valarray}.dpatch: Remove.
+ Applied upstream.
+ * debian/patches/libstdc++-bastring.dpatch: Add patch from
+ sicard@bigruth.solsoft.fr (fixes #56715).
+
+ -- Matthias Klose <doko@debian.org> Sun, 20 Feb 2000 15:08:13 +0100
+
+gcc (2.95.2-5) frozen unstable; urgency=low
+
+ * Post-2.95.2 CVS updates of the gcc-2_95-branch until 20000116.
+ * Add more build dependencies (fixes #53204).
+ * debian/patches/gcc-alpha-complex-float.dpatch: Patch from
+ Joel Klecker <jk@espy.org> to compile glibc correctly on alpha.
+ "Should fix the g77 problems too."
+ * debian/patches/{libio,libstdc++-wall2}.dpatch. Remove patches
+ applied upstream.
+
+ -- Matthias Klose <doko@debian.org> Sun, 16 Jan 2000 19:16:54 +0100
+
+gcc (2.95.2-4) unstable; urgency=low
+
+ * debian/patches/libio.dpatch: Patch from Martin v. Loewis.
+ (fixes: #35628).
+ * debian/patches/libstdc++-deque.dpatch: Patch from Martin v. Loewis.
+ (fixes: #52689).
+ * debian/control.in: Updated Build-Depends, removed outdated README.build.
+ Fixes #51246.
+ * Tighten dependencies to cpp (>= 2.95.2-4) (closes: #50294).
+ * debian/rules.patch: Really do not apply patches/gcj-backport.dpatch.
+ Fixes #51636.
+ * Apply updated sparc-bi-arch.dpatch from Ben Collins.
+ * libstdc++: Define wstring type, if __ENABLE_WSTRING is defined. Request
+ from the author of the War FTP Daemon for Linux ("Jarle Aase"
+ <jgaa@jgaa.com>).
+ * debain/g++.preinst: Remove dangling sysmlinks (fixes #52359).
+
+ -- Matthias Klose <doko@debian.org> Sun, 19 Dec 1999 21:53:48 +0100
+
+gcc (2.95.2-3) unstable; urgency=low
+
+ * debian/rules2: Don't install $(gcc_lib_dir)/include/asm; these are
+ headers fixed for glibc-1.x (closes: #49434).
+ * debian/patches/cpp-dos-newlines.dpatch: Keep CR's without
+ following LF (closes: #49186).
+ * Bug #37358 (internal compiler errors when building vdk_0.6.0-5)
+ fixed in gcc-2.95.? (closes: #37358).
+ * Apply patch gcc-alpha-ev5-fix from Richard Henderson <rth@cygnus.com>
+ (should fix #48527 and #46963).
+ * debian/README.Bugs: Documented non bug #44554.
+ * Applied patch from Alexandre Oliva to fix gpc boostrap on alpha.
+ Reenabled gpc on all architectures.
+ * Post-2.95.2 CVS updates of the gcc-2_95-branch until 19991108.
+ * Explicitely generate postinst/prerm chunks for usr/doc transition.
+ debhelper currently doesn't handle generation for packages with
+ symlinked directories.
+ * debian/patches/libstdc++-wall3.dpatch: Fix warnings in stl_deque.h
+ and stl_rope.h (closes: #46444, #46720).
+ * debian/patches/gcj-backport.dpatch: Add file, don't apply (yet).
+
+ -- Matthias Klose <doko@debian.org> Wed, 10 Nov 1999 18:58:45 +0100
+
+gcc (2.95.2-2) unstable; urgency=low
+
+ * New gpc-19991030 snapshot.
+ * Post-2.95.2 CVS updates of the gcc-2_95-branch until 19991103.
+ * Reintegrated sparc patches (bcollins@debian.org), which were lost
+ in 2.95.2-1.
+ * debian/rules2: Only install $(gcc_lib_dir)/include/asm, when existing.
+ * debian/patches/gpc-2.95.{dpatch,diff}: updated patch to drop
+ initialization in stor-layout.c.
+ * debian/NEWS.gcc: Updated for gcc-2.95.2.
+ * debian/bugs/bug-...: Removed testcases for fixed bugs.
+ * debian/patches/...dpatch: Removed patches applied upstream.
+ * debian/{rules2,g++.postinst,g++.prerm}: Handle c++ alternative.
+ * debian/changelog: Merged gcc272, egcs and snapshot changelogs.
+
+ -- Matthias Klose <doko@debian.org> Tue, 2 Nov 1999 23:09:23 +0200
+
+gcc (2.95.2-1.1) unstable; urgency=low
+
+ * Most of the powerpc patches have been applied upstream. Remove all
+ but ppc-ice, ppc-andrew-dwarf-eh, and ppc-descriptions.
+ * mulilib-install.dpatch was definitely a bad idea. Fix it properly
+ by using install -D.
+ * Also, don't make directories before installing any more. Simplifies
+ rules a (tiny) bit.
+ * Do not build with LDFLAGS=-s. Everything gets stripped out anyway by
+ dh_strip -a -X_debug; so leave the binaries in the build tree with
+ debugging symbols for simplified debugging of the packages.
+
+ -- Daniel Jacobowitz <dan@debian.org> Sat, 30 Oct 1999 12:40:12 -0400
+
+gcc (2.95.2-1) unstable; urgency=low
+
+ * gcc-2.95.2 release (taken from the CVS archive). -fstrict-aliasing
+ is disabled upstream.
+
+ -- Matthias Klose <doko@debian.org> Mon, 25 Oct 1999 10:26:19 +0200
+
+gcc (2.95.2-0pre4) unstable; urgency=low
+
+ * Updated to cvs updates of the gcc-2_95-branch until 19991021.
+ * Updated gpc to gpc-19991018 snapshot (closes: #33037, #47453).
+ Enable gpc for all architectures ...
+ * Document gcc exit codes (closes: #43863).
+ * According to the bug submitter (Sergey V Kovalyov <sqk0316@scires.nyu.edu>)
+ the original source of these CERN librarties is outdated now. The latest
+ version of cernlibs compiles and works fine with slink (closes #31546).
+ * According to the bug submitter (Gergely Madarasz <gorgo@sztaki.hu>),
+ the problem triggered on i386 cannot be reproduced with the current
+ jade and php3 versions anymore (closes: #35215).
+ * Replace corrupted m68k-pic.dpatch (from Roman Hodek and Andreas Schwab
+ <Roman.Hodek@informatik.uni-erlangen.de> <schwab@suse.de> and apply to
+ all architectures (closes: #48011).
+ * According to the bug submitter (Herbert Xu <herbert@gondor.apana.org.au>)
+ this bug "probably has been fixed". Setting it to severity "fixed"
+ (fixes: #39616), will close it later ...
+ * debian/README.Bugs: Document throwing C++ exceptions "through" C
+ libraries (closes: #22769).
+
+ -- Matthias Klose <doko@debian.org> Fri, 22 Oct 1999 20:33:00 +0200
+
+gcc (2.95.2-0pre3) unstable; urgency=low
+
+ * Updated to cvs updates of the gcc-2_95-branch until 19991019.
+ * Apply NMU patches (closes: #46217).
+ * debian/control.in: Fix egcs64 conflict-dependency for sparc
+ architecture (closes: #47088).
+ * debian/rules2: dbg-packages share doc dir with lib packages
+ (closes #45067).
+ * debian/patches/gcj-debian-policy.dpatch: Patch from Stephane
+ Bortzmeyer to conform to Debian policy (closes: #44463).
+ * debian/bugs/bug-*: Added test cases for new bug reports.
+ * debian/patches/libstdc++-bastring.dpatch: Patch by Richard Kettlewell
+ (closes #46550).
+ * debian/rules.patch: Apply libstdc++-wall2 patch (closes #46609).
+ * debian/README: Fix typo (closes: #45253).
+ * debian/control.in: Remove primary/secondary distinction;
+ dbg-packages don't provide their normal counterparts (closes #45206).
+ * debian/rules.patch: gcc-combine patch applied upstream.
+ * debian/rules2: Only use mail if with_check is set (off by default).
+ * debian/rules.conf: Tighten binutils dependency to 2.9.5.0.12.
+
+ -- Matthias Klose <doko@debian.org> Tue, 19 Oct 1999 20:33:00 +0200
+
+gcc (2.95.2-0pre2.0.2) unstable; urgency=HIGH (for m68k)
+
+ * Binary-only NMU for m68k as quick fix for another bug; the patch
+ is in CVS already, too.
+ * Applied another patch by Andreas Schwab to fix %a5 restauration in
+ some cases.
+
+ -- Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de> Thu, 30 Sep 1999 16:09:15 +0200
+
+gcc (2.95.2-0pre2.0.1) unstable; urgency=HIGH (for m68k)
+
+ * Binary-only NMU for m68k as quick fix for serious bugs; the patches
+ are already checked into gcc CVS and should be in the next official
+ version, too.
+ * Applied two patches by Andreas Schwab to fix -fpic and loop optimization.
+
+ -- Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de> Mon, 27 Sep 1999 15:32:49 +0200
+
+gcc (2.95.2-0pre2) unstable; urgency=low
+
+ * Fixed in 2.95.2 (closes: #43478).
+ * Previous version had Pascal examples missing in doc directory.
+
+ -- Matthias Klose <doko@debian.org> Wed, 8 Sep 1999 22:18:17 +0200
+
+gcc (2.95.2-0pre1) unstable; urgency=low
+
+ * Updated to cvs updates of the gcc-2_95-branch until 19990828.
+ * Apply work around memory corruption (just for 2.95.1) by
+ Daniel Jacobowitz <dan@debian.org>.
+ * debian/patches/libstdc++-wall2.dpatch: Patch from Franck Sicard
+ <sicard@miniruth.solsoft.fr> to fix some warnings (closes: #44670).
+ * debian/patches/libstdc++-valarray.dpatch: Patch from Hideaki Fujitani
+ <fjtani@flab.fujitsu.co.jp> to fix a bug in valarray_array.h.
+ * Applied NMU from Jim Pick minus the jump.c and fold-const.c patches
+ already in the gcc-2_95-branch (closes: #44690).
+ * Conform to debian-java policy (closes: #44463).
+ * Move docs to /usr/share/doc (closes: #44782).
+ * Remove debian/patches/gcc-align.dpatch applied upstream.
+ * debian/*.postinst: Call install-info only, when configuring.
+ * debian/*.{postinst,prerm}: Add #DEBHELPER# comments to handle
+ /usr/doc -> /usr/share/doc transition.
+
+ -- Matthias Klose <doko@debian.org> Wed, 8 Sep 1999 22:18:17 +0200
+
+gcc (2.95.1-2.1) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * ARM platform no longer needs library-prefix patch.
+ * Updated patches from Philip Blundell.
+
+ -- Jim Pick <jim@jimpick.com> Wed, 8 Sep 1999 20:14:07 -0700
+
+gcc (2.95.1-2) unstable; urgency=low
+
+ * debian/gcc.{postinst,prerm}: gcc provides an alternative for
+ sparc64-linux-gcc.
+ * Applied patch from Ben Collins to enable bi-architecture (32/64)
+ support for sparc.
+ * Rebuild debian/control and debian/rules.parameters after unpacking.
+ * debian/rules2: binary-indep. Conditionalize on with_pascal.
+
+ -- Matthias Klose <doko@debian.org> Sat, 4 Sep 1999 13:47:30 +0200
+
+gcc (2.95.1-1) unstable; urgency=low
+
+ * Updated to release gcc-2.95.1 and cvs updates of the gcc-2_95-branch
+ until 19990828.
+ * debian/README.gcc: Updated NEWS file to include 2.95 and 2.95.1 news.
+ * debian/README.java: New file.
+ * debian/rules.defs: Disabled gpc for alpha, arm. Disabled ObjC-GC
+ for alpha.
+ * debian/rules [clean]: Remove debian/rules.parameters.
+ * debian/rules2 [binary-arch]: Call dh_shlibdeps with LD_LIBRARY_PATH set
+ to installation dir of libstdc++. Why isn't this the default?
+ * debian/control.in: *-dev packages do not longer conflict with
+ libg++272-dev package.
+ * Apply http://egcs.cygnus.com/ml/gcc-patches/1999-08/msg00599.html.
+ * Only define BAD_THROW_ALLOC, when using exceptions (fixes #43462).
+ * For ObjC (when configured with GC) recommend libgc4-dev, not libgc4.
+ * New version of 68060 build patch.
+ * debian/rules.conf: For m68k, depend on binutils version 2.9.1.
+
+ -- Matthias Klose <doko@debian.org> Sat, 28 Aug 1999 18:16:31 +0200
+
+gcc (2.95.1-0pre2) unstable; urgency=medium
+
+ * gpc is back again (fixes grave #43022).
+ * debian/patches/gpc-updates.dpatch: Patches sent to upstream authors.
+ * Work around the fatal dependtry assertion failure bug in dpkg (hint
+ from "Antti-Juhani Kaijanaho" <ajk@debian.org>, fixes important #43072).
+
+ -- Matthias Klose <doko@debian.org> Mon, 16 Aug 1999 19:34:14 +0200
+
+gcc (2.95.1-0pre1) unstable; urgency=low
+
+ * Updated to cvs 19990815 gcc-2_95-branch; included install docs and
+ FAQ from 2.95 release; upload source package as well.
+ * Source package contains tarballs only (gcc, libg++, installdocs).
+ * debian/rules: Splitted into debian/rules{,.unpack,.patch,.conf,2}.
+ * debian/gcc.postinst: s/any key/RETURN; warn only when upgrading from
+ pre 2.95 version; reference /usr/doc, not /usr/share/doc.
+ * Checked syntax for attributes of functions; checked for #35068;
+ checked for bad gmon.out files (at least with libc6 2.1.2-0pre5 and
+ binutils 2.9.1.0.25-2 the problem doesn't show up anymore).
+ * debian/patches/cpp-macro-doc.dpatch: Document macro varargs in cpp.texi.
+ * gcc is primary compiler for all platforms but m68k. Setting
+ severity of #22513 to fixed.
+ * debian/patches/gcc-default-arch.dpatch: New patch to enable generation
+ of i386 instruction as default (fixes #42743).
+ * debian/rules: Removed outdated gcc NEWS file (fixes #42742).
+ * debian/patches/libstdc++-out-of-mem.dpatch: Throw exception instead
+ of aborting when out of memory (fixes #42622).
+ * debian/patches/cpp-dos-newlines.dpatch: Handle ibackslashes after
+ DOS newlines (fixes #29240).
+ * Fixed in gcc-2.95.1: #43001.
+ * Bugs closed in this version:
+ Closes: #11525, #12253, #22513, #29240, #35068, #36182, #42584, #42585,
+ #42602, #42622, #42742 #42743, #43001, #43002.
+
+ -- Matthias Klose <doko@debian.org> Sun, 15 Aug 1999 10:31:50 +0200
+
+gcc (2.95-3) unstable; urgency=high
+
+ * Provide /lib/cpp again (fixes important bug #42524).
+ * Updated to cvs 19990805 gcc-2_95-branch.
+ * Build with the default scheduler.
+ * Apply install-multilib patch from Dan Jacobowitz.
+ * Apply revised cpp-A- patch from Dan Jacobowitz.
+
+ -- Matthias Klose <doko@debian.org> Fri, 6 Aug 1999 07:25:19 +0200
+
+gcc (2.95-2) unstable; urgency=low
+
+ * Remove /lib/cpp. This driver uses files from /usr/lib/gcc-lib anyway.
+ * The following bugs are fixed (compared to egcs-1.1.2).
+ Closes: #4429, #20889, #21122, #26369, #28417, #28261, #31416, #35261,
+ #35900, #35906, #38246, #38872, #39098, #39526, #40659, #40991, #41117,
+ #41290, #41302, #41313.
+ * The following by Joel Klecker:
+ - Adopt dpkg-architecture variables.
+ - Go back to SHELL = bash -e or it breaks where /bin/sh is not bash.
+ - Disabled the testsuite, it is not included in the gcc 2.95 release.
+
+ -- Matthias Klose <doko@debian.org> Sat, 31 Jul 1999 18:00:42 +0200
+
+gcc (2.95-1) unstable; urgency=low
+
+ * Update for official gcc-2.95 release.
+ * Built without gpc.
+ * debian/rules: Remove g++FAQ from rules, which is outdated.
+ For ix86, build for i386, not i486.
+ * Apply patch from Jim Pick for building multilib package on arm.
+
+ -- Matthias Klose <doko@debian.org> Sat, 31 Jul 1999 16:38:21 +0200
+
+gcc (2.95-0pre10) unstable; urgency=low
+
+ * Use ../builddir-gcc-$(VER) by default instead of ./builddir; upstream
+ strongly advises configuring outside of the source tree, and it makes
+ some things much easier.
+ * Add patch to prevent @local branches to weak symbols on powerpc (fixes
+ apt compilation).
+ * Add patch to make cpp -A- work as expected.
+ * Renamed debian/patches/ppc-library-prefix.dpatch to library-prefix.dpatch;
+ apply on all architectures.
+ * debian/control.in: Remove snapshot dependencies.
+ * debian/*.postinst: Reflect use of /usr/share/{info,man}.
+
+ -- Daniel Jacobowitz <dan@debian.org> Thu, 22 Jul 1999 19:27:12 -0400
+
+gcc (2.95-0pre9) unstable; urgency=low
+
+ * The following bugs are fixed (compared to egcs-1.1.2): #4429, #20889,
+ #21122, #26369, #28417, #28261, #35261, #38246, #38872, #39526, #40659,
+ #40991, #41117, #41290.
+ * Updated to CVS gcc-19990718 snapshot.
+ * debian/control.in: Removed references to egcs in descriptions.
+ Changed gcj's Recommends libgcj-dev to Depends.
+ * debian/rules: Apply ppc-library-prefix for alpha as well.
+ * debian/patches/arm-config.dpatch: Updated patch sent by Jim Pick.
+
+ -- Matthias Klose <doko@debian.org> Sun, 18 Jul 1999 12:21:07 +0200
+
+gcc (2.95-0pre8) unstable; urgency=low
+
+ * Updated CVS.
+ * debian/copyright: s%doc/copyright%share/common-licenses%
+ * debian/README.Bugs: s/egcs.cygnus.com/gcc.gnu.org/ s/egcs-bugs/gcc-bugs/
+ * debian/patches/reporting.dpatch: Remake diff for current sources.
+ * debian/libstdc++-dev.postinst: It's /usr/share/info/iostream.info.
+ * debian/rules: Current dejagnu snapshot reports a framework version
+ of 1.3.1.
+
+ -- Joel Klecker <espy@debian.org> Sun, 18 Jul 1999 02:09:57 -0700
+
+gcc-snapshot (19990714-0pre6) experimental; urgency=low
+
+ * Updated to CVS gcc-19990714 snapshot.
+ * Applied ARM patch (#40515).
+ * Converted DOS style linefeeds in debian/patches/ppc-* files.
+ * debian/rules: Reflect change in gcc/version.c; use sh -e as shell:
+ for some obscure reason, bash -e doesn't work.
+ * Reflect version change for libstdc++ (2.10). Remove libg++-name
+ patch; libg++ now has version 2.8.1.3. Removed libc version from
+ the package name.
+
+ -- Matthias Klose <doko@debian.org> Wed, 14 Jul 1999 18:43:57 +0200
+
+gcc-snapshot (19990625-0pre5.1) experimental; urgency=low
+
+ * Non-maintainer upload.
+ * Added ARM specific patch.
+
+ -- Jim Pick <jim@jimpick.com> Tue, 29 Jun 1999 22:36:08 -0700
+
+gcc-snapshot (19990625-0pre5) experimental; urgency=low
+
+ * Updated to CVS gcc-19990625 snapshot.
+
+ -- Matthias Klose <doko@debian.org> Fri, 25 Jun 1999 16:11:53 +0200
+
+gcc-snapshot (19990609-0pre4.1) experimental; urgency=low
+
+ * Added and re-added a few last PPC patches.
+
+ -- Daniel Jacobowitz <dan@debian.org> Sat, 12 Jun 1999 16:48:01 -0500
+
+gcc-snapshot (19990609-0pre4) experimental; urgency=low
+
+ * Updated to CVS egcs-19990611 snapshot.
+
+ -- Matthias Klose <doko@debian.org> Fri, 11 Jun 1999 10:20:09 +0200
+
+gcc-snapshot (19990609-0pre3) experimental; urgency=low
+
+ * CVS gcc-19990609 snapshot.
+ * New gpc-19990607 snapshot.
+
+ -- Matthias Klose <doko@debian.org> Wed, 9 Jun 1999 19:40:44 +0200
+
+gcc-snapshot (19990524-0pre1) experimental; urgency=low
+
+ * egcs-19990524 snapshot.
+ * First snapshot of the gcc-2_95-branch. egcs-1.2 is renamed to gcc-2.95,
+ which is now the "official" successor to gcc-2.8.1. The full version
+ name is: gcc-2.95 19990521 (prerelease).
+ * debian/control.in: Changed maintainers to `Debian GCC maintainers'.
+ * Moved all version numbers to epoch 1.
+ * debian/rules: Major changes. The support for secondary compilers
+ was already removed for the egcs-1.2 snapshots. Many fixes by
+ Joel Klecker <espy@debian.org>.
+ - Send mail to Debian maintainers for successful builds.
+ - Fix VER and VERNO sed expressions.
+ - Replace remaining GNUARCH occurrences.
+ * New gpc snapshot (but don't build).
+ * debian/patches/valarray.dpatch: Backport from libstdc++-v3.
+ * debian/gcc-doc.*: Info is now gcc.info* (Joel Klecker <espy@debian.org>).
+ * Use cpp driver provided by the package.
+ * New script c89 (fixes #28261).
+
+ -- Matthias Klose <doko@debian.org> Sat, 22 May 1999 16:10:36 +0200
+
+egcs (1.1.2-2) unstable; urgency=low
+
+ * Integrate NMU's for arm and sparc (fixes #37582, #36857).
+ * Apply patch for the Hurd (fixes #37753).
+ * Describe open bugs in TODO.Debian. Please have a look if you can help.
+ * Update README / math functions section (fixes #35906).
+ * Done by J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>:
+ - At Richard Braakman's request, made -dbg packages for libstdc++
+ and libg++.
+ - Provide egcc(1) (fixes lintian error).
+
+ -- Matthias Klose <doko@debian.org> Sun, 16 May 1999 14:30:56 +0200
+
+egcs-snapshot (19990502-1) experimental; urgency=low
+
+ * New snapshot.
+
+ -- Matthias Klose <doko@debian.org> Thu, 6 May 1999 11:51:02 +0200
+
+egcs-snapshot (19990418-2) experimental; urgency=low
+
+ * Merged Rays changes to build debug packages.
+
+ -- Matthias Klose <doko@debian.org> Wed, 21 Apr 1999 16:54:56 +0200
+
+egcs-snapshot (19990418-1) experimental; urgency=low
+
+ * New snapshot.
+ * Disable cpplib.
+
+ -- Matthias Klose <doko@debian.org> Mon, 19 Apr 1999 11:32:19 +0200
+
+egcs (1.1.2-1.2) unstable; urgency=low
+
+ * NMU for arm
+ * Added arm-optimizer.dpatch with optimizer workaround for ARM
+
+ -- Jim Pick <jim@jimpick.com> Mon, 19 Apr 1999 06:17:13 -0700
+
+egcs (1.1.2-1.1) unstable; urgency=low
+
+ * NMU for sparc
+ * Included dpatch to modify the references to gcc/crtstuff.c so that
+ __register_frame_info is not a weak reference. This allows potato to
+ remain binary compatible with slink, while still retaining compatibility
+ with other sparc/egcs1.1.2 distributions. Diff in .dpatch format has
+ been sent to the maintainer with a note it may not be needed for 1.1.3.
+
+ -- Ben Collins <bcollins@debian.org> Tue, 27 Apr 1999 10:15:03 -0600
+
+egcs (1.1.2-1) unstable; urgency=low
+
+ * Final egcs-1.1.2 release built for potato as primary compiler
+ for all architectures except m68k.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Thu, 8 Apr 1999 13:14:29 +0200
+
+egcs-snapshot (19990321-1) experimental; urgency=low
+
+ * New snapshot.
+ * Disable gpc.
+ * debian/rules: Simplified (no secondary compiler, bumped all versions
+ to same epoch, libapi patch is included upstream).
+ * Separated out cpp documentation to cpp-doc package.
+ * Fixed in this version: #28417.
+
+ -- Matthias Klose <doko@debian.org> Tue, 23 Mar 1999 02:11:18 +0100
+
+egcs (1.1.2-0slink2) stable; urgency=low
+
+ * Applied H.J.Lu's egcs-19990315.linux patch.
+ * Install faq.html and egcs-1.1.2 announcment.
+
+ -- Matthias Klose <doko@debian.org> Tue, 23 Mar 1999 01:14:54 +0100
+
+egcs (1.1.2-0slink1) stable; urgency=low
+
+ * Final egcs-1.1.2 release; compiled with glibc-2.0 for slink on i386.
+ * debian/control.in: gcc provides egcc, when FIRST_PRIMARY defined.
+ * Fixes #30767, #32278, #34252, #34352.
+ * Don't build the libstdc++.so.2.9 library on architectures, which have
+ switched to glibc-2.1.
+
+ -- Matthias Klose <doko@debian.org> Wed, 17 Mar 1999 12:55:59 +0100
+
+egcs (1.1.1.63-2.2) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Incorporate patch from Joel Klecker to fix snapshot packages
+ by moving/removing the application of libapi.
+ * Disable the new libstdc++-dev-config and the postinst message in
+ glibc 2.1 versions.
+
+ -- Daniel Jacobowitz <dan@debian.org> Mon, 12 Mar 1999 14:16:02 -0500
+
+egcs (1.1.1.63-2.1) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Compile with glibc 2.1 release version.
+ * New upstream version egcs-1.1.2 pre3.
+ * Miscellaneous rules updates (see changelog.snapshot).
+ * New set of powerpc-related patches from Franz Sirl,
+ <fsirl@kernel.crashing.org>.
+ * Disable libgcc.dpatch (new solution implemented upstream). Remove it.
+ * Also pass $target to config.if.
+ * Enable Dwarf2 EH for powerpc. Bump the C++ binary version. No
+ loss in -backwards- compatibility as far as I can tell, so add a
+ compatibility symlink, and add to shlibs file.
+ * Add --no-backup-if-mismatch to the debian/patches/*.dpatch files,
+ to prevent bogus .orig's in diffs.
+ * Merged with (unreleased) 1.1.1.62-1 and 1.1.1.63-{1,2} packages from
+ Matthias Klose <doko@debian.org>.
+ * Stop adding a backwards compatibility link for egcs-nof on powerpc.
+ To my knowledge, nothing uses it. Do add the libstdc++ API change
+ link, though.
+
+ -- Daniel Jacobowitz <dan@debian.org> Mon, 8 Mar 1999 14:24:01 -0500
+
+egcs (1.1.1.63-2) stable; urgency=low
+
+ * Provide a libstdc++ with a shared object name, which is compatible
+ to other distributions. Documented the change in README.Debian,
+ the libstdc++-2.9.postinst and the libstdc++-dev-config script.
+
+ -- Matthias Klose <doko@debian.org> Fri, 12 Mar 1999 00:36:20 +0100
+
+egcs (1.1.1.63-1.1) unstable; urgency=low
+
+ * Non-Maintainer release.
+ * Build against glibc 2.1.
+ * Make egcs the primary compiler on i386.
+ * Also confilct with egcc (<< FIRST_PRIMARY)
+ if FIRST_PRIMARY is defined.
+ (this tells dpkg that gcc completely obsoletes egcc)
+ * Remove hjl-12 patch again, HJL says it should not be
+ necessary with egcs 1.1.2.
+ (as per forwarded reply from Christopher Chimelis)
+ * Apply libapi patch in clean target before regenerating debian/control
+ and remove the patch afterward. Otherwise, the libstdc++ and libg++
+ package names are generated wrong on a glibc 2.1 system.
+
+ -- Joel Klecker <espy@debian.org> Tue, 9 Mar 1999 15:31:02 -0800
+
+egcs (1.1.1.63-1) unstable; urgency=low
+
+ * New upstream version egcs-1.1.1-pre3.
+ * Applied improved libstdc++ warning patch from Rob Browning.
+
+ -- Matthias Klose <doko@debian.org> Tue, 9 Mar 1999 16:14:07 +0100
+
+egcs (1.1.1.62-1) unstable; urgency=low
+
+ * New upstream version egcs-1.1.1-pre2.
+ * New upstream version libg++-2.8.1.3.
+ * Readded ARM support
+ * Readded hjl-12 per request from Christopher C Chimelis
+ <chris@classnet.med.miami.edu>
+
+ -- Matthias Klose <doko@debian.org> Fri, 26 Feb 1999 09:54:01 +0100
+
+egcs-snapshot (19990224-0.1) experimental; urgency=low
+
+ * New snapshot.
+ * Add the ability to disable CPPLIB by setting CPPLIB=no in
+ the environment.
+ * Disable gpc for powerpc; I spent a long time getting it to
+ make correctly, and then it goes and ICEs.
+
+ -- Daniel Jacobowitz <dan@debian.org> Tue, 24 Feb 1999 23:34:12 -0500
+
+egcs (1.1.1.61-1) unstable; urgency=low
+
+ * New upstream version egcs-1.1.1-pre1.
+ * debian/control.in: Applied patch from bug report #32987.
+ * Split up H.J.Lu's hjl-19990115-linux patch into several small
+ chunks: libapi, arm-mips, libgcc, hjl-other. The changelog.Linux
+ aren't included in the separate chunks. Please refer to the
+ unmodified hjl-19990115-linux patch file in the egcs source pkg.
+ * Apply warning patch to fix the annoying spew you get if you try to
+ use ropes or deques with -Wall (which makes -Wall mostly useless for
+ spotting errors in your own code). Fixes #32996.
+ * debian/rules: Unapply patches in the exact reverse order they were
+ applied.
+
+ -- Matthias Klose <doko@debian.org> Sat, 20 Feb 1999 22:06:21 +0100
+
+egcs (1.1.1-5) frozen unstable; urgency=medium
+
+ * Move libgcc.map file to g++ package, where gcc is the secondary
+ compiler (fixes #32329, #32605, #32631).
+ * Prepare to rename libstdc++2.9 package for glibc-2.1 (fixes #32148).
+ * Apply NMU patch for arm architecure (fixes #32367).
+ * Don't apply hjl-12 patch for alpha architectures (requested by the
+ alpha developers, Christopher C Chimelis <chris@classnet.med.miami.edu>).
+ * Call makeinfo with --no-validate to fix obscure build failure on alpha.
+ * Build gpc info files in doc subdirectory.
+ * Remove c++filt diversion (C++ name demangling patch is now in binutils,
+ fixes #30820 and #32502).
+
+ -- Matthias Klose <doko@debian.org> Sun, 31 Jan 1999 23:19:35 +0100
+
+egcs (1.1.1-4.1) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Pascal doesn't build for ARM.
+
+ -- Jim Pick <jim@jimpick.com> Sun, 24 Jan 1999 16:13:34 -0800
+
+egcs (1.1.1-4) frozen unstable; urgency=high
+
+ * Don't strip compiler libraries libgcc.a libobjc.a libg2c.a libgpc.a
+ * Move Pascal examples to the right place (fixes #32149, part 1).
+ * Add dependencies for switching from secondary to primary compiler,
+ if FIRST_PRIMARY is defined (fixes #32149, part 2).
+
+ -- Matthias Klose <doko@debian.org> Wed, 20 Jan 1999 16:51:30 +0100
+
+egcs (1.1.1-3) frozen unstable; urgency=low
+
+ * Updated with the H.J.Lu's hjl-19990115-linux patch (fixes the
+ __register_frame_info problems, mips and arm port included).
+ * Update gpc to 19990118 (beta release candidate).
+ * Strip static libraries (fixes #31247 and #31248).
+ * Changed maintainer address.
+
+ -- Matthias Klose <doko@debian.org> Tue, 19 Jan 1999 16:34:28 +0100
+
+egcs (1.1.1-2) frozen unstable; urgency=low
+
+ * Moved egcs-docs, g77-doc and gpc-doc packages to doc section.
+ * Downgraded Recommends: egcs-docs to Suggests: egcs-docs dependencies
+ (for archs, where egcs is the primary compiler).
+ * Add 'Suggests: stl-manual' dependency to libstdc++2.9-dev.
+ * Applied one more alpha patch:
+ ftp://ftp.yggdrasil.com/private/hjl/egcs/1.1.1/egcs-1.1.1.diff.12.gz
+ * Applied PPro optimization patch.
+ * Apply emit-rtl-nan patch.
+ * Upgraded to libg++-2.8.1.2a-19981218.tar.gz.
+ * Upgraded to gpc-19981218.
+ * Make symlinks for gobjc, libstdc++2.9-dev and libg++2.8.2 doc directories.
+
+ -- Matthias Klose <doko@debian.org> Wed, 23 Dec 1998 18:04:53 +0200
+
+egcs-snapshot (19981211-1) experimental; urgency=low
+
+ * New snapshot.
+ * Adapted gpc to egcs-2.92.x (BOOT_CFLAGS must include -g).
+ * New libg++-2.8.1.2a-19981209.tar.gz.
+ * debian/rules: new target mail-summary.
+
+ -- Matthias Klose <doko@debian.org> Fri, 11 Dec 1998 18:14:53 +0200
+
+egcs (1.1.1-1) frozen unstable; urgency=high
+
+ * Final egcs-1.1.1 release.
+ * The last version depended on a versioned libc6 again.
+ * Add lost dependency for libg++ on libstdc++.
+ * Added debian-libstdc++.sh script to generate a libstdc++ on a Linux
+ system, which doesn't use the libapi patch.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Wed, 2 Dec 1998 12:06:15 +0200
+
+egcs (1.1.0.91.59-2) frozen unstable; urgency=high
+
+ * Fixes bugs from libc6 2.0.7u-6 upload without dependency line
+ Conflicts: libstdc++-2.9 (<< 2.91.59): #30019, #30066, #30078.
+ * debian/copyright: Updated URLs.
+ * gcc --help now mentions /usr/doc/debian/bug-reporting.txt.
+ * Install README.Debian and include information about patches applied.
+ * Depend on unversioned libc6 on i386, such that libstdc++2.9 can be used
+ on a hamm system.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Fri, 27 Nov 1998 18:32:02 +0200
+
+egcs (1.1.0.91.59-1) frozen unstable; urgency=low
+
+ * This is egcs-1.1.1 prerelease #3, compiled with libc6 2.0.7u-6.
+ * Added dependency for libstdc++2.9-dev on g++ (fixes #29631).
+ * Package g77 provides f77 (fixes #29817).
+ * Already fixed in earlier egcs-1.1 releases: #2493, #25271, #10620.
+ * Bugs reported for gcc-2.7.x and fixed in the egcs version of gcc:
+ #2493, #4430, #4954, #5367, #6047, #10612, #12375, #20606, #24788, #26100.
+ * Upgraded libg++ to libg++-2.8.1.2a-19981114.
+ * Upgraded gpc to gpc-19981124.
+ * Close #25869: egcs and splay maintainers are unable to reproduce this
+ bug with the current Debian packages. Bug submitter doesn't respond.
+ * Close #25407: egcs maintainer cannot reproduce this bug with the current
+ Debian compiler. Bug submitter doesn't respond.
+ * Use debhelper 1.2.7 for building.
+ * Replace the libstdc++ and libg++ compatibility links with fake libraries.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Wed, 25 Nov 1998 12:11:42 +0200
+
+egcs (1.1.0.91.58-5) frozen unstable; urgency=low
+
+ * Applied patch to build on the m68060.
+ * Added c++filt and c++filt.1 to the g++ package.
+ * Updated gpc to gpc-981105; fixes some regressions compared to egcs-1.1.
+ * Separated out g77 and gpc doumentation to new packages g77-doc and gpc-doc.
+ * Closed bugs (#22158).
+ * Close #20248; on platforms where gas and gld are the default versions,
+ it makes no difference to configure with or without enable-ld.
+ * Close #24349. The bugs are in the amulet source.
+ See http://www.cs.cmu.edu/afs/cs/project/amulet/www/FAQ.html#GCC28x
+ * Rename gcc.info* files to egcs.info* (fixes #24088).
+ * Documented known bugs (and workarounds) in BUGS.Debian.
+ * Fixed demangling of C++ names (fixes #28787).
+ * Applied patch form aspell to libstdc++/stl/stl_rope.h.
+ * Updated from cvs 16 Nov 1998.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Tue, 17 Nov 1998 09:41:24 +0200
+
+egcs-snapshot (19981115-2) experimental; urgency=low
+
+ * New snapshot. Disabled gpc.
+ * New packages g77-doc and gpc-doc.
+
+ -- Matthias Klose <doko@debian.org> Mon, 16 Nov 1998 12:48:09 +0200
+
+egcs (1.1.0.91.58-3) frozen unstable; urgency=low
+
+ * Previous version installed in potato, not slink.
+ * Updated from cvs 3 Nov 1998.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Tue, 3 Nov 1998 18:34:44 +0200
+
+egcs (1.1.0.91.58-2) unstable; urgency=low
+
+ * [debian/rules]: added targets to apply and unapply patches.
+ * [debian/README.patches]: New file.
+ * Moved patches dir to debian/patches. debian/rules has to select
+ the patches to apply.
+ * Manual pages for genclass and gcov (fixes #5995, #20950, #22196).
+ * Apply egcs-1.1-reload patch needed for powerpc architecture.
+ * Fixed bugs (#17768, #20252, #25508, #27788).
+ * Reapplied alpha patch (#20875).
+ * Fixes first part of #22513, extended README.Debian (combining C & C++).
+ * Already fixed in earlier egcs-1.1 releases: #17963, #20252, #20524,
+ #20640, #22450, #24244, #24288, #28520.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Fri, 30 Oct 1998 13:41:45 +0200
+
+egcs (1.1.0.91.58-1) experimental; urgency=low
+
+ * New upstream version. That's the egcs-1.1.1 prerelease plus patches from
+ the cvs archive upto 29 Oct 1998.
+ * Merged files from the egcs and snapshot packages.
+ * Updated libg++ to libg++-2.8.1.2 (although the Debian package name is still
+ 2.8.2).
+ * Moved patches dir to patches-1.1.
+ * Dan Jacobowitz:
+ * This is a snapshot from the egcs_1_1_branch, with
+ libapi, reload, builtin-apply, and egcs patches from
+ the debian/patches/ dir applied, along with the egcs-gpc-patches
+ and gcc/p/diffs/gcc-egcs-2.91.55.diff.
+ * Conditionalize gcj and chill (since they aren't in this branch).
+ * Fake snapshots drop the -snap-main.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Thu, 29 Oct 1998 15:15:19 +0200
+
+egcs-snapshot (1.1-19981019-5.1) experimental; urgency=low
+
+ * This is a snapshot from the egcs_1_1_branch, with
+ libapi, reload, builtin-apply, and egcs patches from
+ the debian/patches/ dir applied, along with the egcs-gpc-patches
+ and gcc/p/diffs/gcc-egcs-2.91.55.diff.
+ * Conditionalize gcj and chill (since they aren't in this
+ branch).
+ * Fake snapshots drop the -snap-main.
+
+ -- Daniel Jacobowitz <dan@debian.org> Mon, 19 Oct 1998 22:19:23 -0400
+
+egcs (1.1b-5) unstable; urgency=low
+
+ * [debian/control.in] Fixed typo in dependencies (#28076, #28087, #28092).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Sun, 18 Oct 1998 22:56:51 +0200
+
+egcs (1.1b-4) unstable; urgency=low
+
+ * Strengthened g++ dependency on libstdc++_LIB_SO_-dev from
+ `Recommends' to `Depends'.
+ * Updated README.Debian for egcs-1.1.
+ * Updated TODO.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Thu, 15 Oct 1998 12:38:47 +0200
+
+egcs-snapshot (19981005-0.1) experimental; urgency=low
+
+ * Make libstdc++2.9-snap-main and libg++-snap-main provide
+ their mainstream equivalents and put those equivalents into
+ their shlibs file.
+ * Package gcj, the GNU Compiler for Java(TM).
+
+ * New upstream version of egcs (The -regcs_latest_snapshot branch).
+ * Build without libg++ entirely.
+ * Leave out gpc for now - the internals are sufficiently different
+ that it does not trivially compile.
+ * Include an experimental reload patch for powerpc - this is,
+ in the words of its author, not release quality, but it allows
+ powerpc linuxthreads to function.
+ * On architectures where we are the primary compiler, let snapshots
+ build with --prefix=/usr and conflict with the stable versions.
+ * Package chill, a front end for the language Chill.
+ * Other applied patches from debian/patches/: egcs-patches and
+ builtin-apply-patch.
+ * Use reload.c revision 1.43 to avoid a nasty bug.
+
+ -- Daniel Jacobowitz <dan@debian.org> Wed, 7 Oct 1998 00:27:42 -0400
+
+egcs (1.1b-3.1) unstable; urgency=low
+
+ * NMU to fix the egcc -> gcc link once and for all
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu> Tue, 22 Sep 1998 16:11:19 -0500
+
+egcs (1.1b-3) unstable; urgency=low
+
+ * Oops. The egcc -> gcc link on archs where gcc is egcc was broken.
+ Thanks to Chris Chimelis for pointing this out.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Mon, 21 Sep 1998 20:51:35 +0200
+
+egcs (1.1b-2) unstable; urgency=low
+
+ * New upstream spellfix release (Debian revision is 2 as the internal
+ version numbers didn't change).
+ * Added egcc -> gcc symlink on architectures where egcc is the primary C
+ compiler. Thus, maintainers of packages that require egcc, can now
+ simply use "egcc" without conditionals.
+ * Porters: we hope/plan to make egcs's gcc the default C compiler on all
+ platforms once the 2.2.x kernels are available. Please test this version
+ thoroughly, and give us a GO / NO GO for your architecture.
+ * Some symbols cpp used to predefine were removed upstream in order to clean
+ up the cpp namespace, but imake requires them for determining the proper
+ settings for LinuxMachineDefines (see /usr/X11R6/lib/X11/{Imake,linux}.cf),
+ thus we put them back. Thanks to Paul Slootman for reporting his imake
+ problems on Alpha.
+ * [gcc/config/alpha/linux.h] Added -D__alpha to CPP_PREDEFINES .
+ Thanks to Chris Chimelis for the alpha-only 1.1a-1.1 NMU which fixed
+ this already.
+ * [gcc/config/i386/linux.h] Added -D__i386__ to CPP_PREDEFINES .
+ * [gcc/config/sparc/linux.h] Has -Dsparc in CPP_PREDEFINES .
+ * [gcc/config/sparc/linux64.h] Has -Dsparc in CPP_PREDEFINES .
+ * [gcc/config/m68k/linux.h] Has -Dmc68000 in CPP_PREDEFINES .
+ * [gcc/config/rs6000/linux.h] Has -Dpowerpc in CPP_PREDEFINES .
+ * [gcc/config/arm/linux.h] Has -Darm in CPP_PREDEFINES .
+ * [gcc/config/i386/gnu.h] Has -Di386 in CPP_PREDEFINES .
+ * Small fixes and updates in README.
+ * Changes affecting the source package only:
+ * [gcc/Makefile.in, gcc/cp/Make-lang.in, gcc/p/Make-lang.in]
+ Daniel Jacobowitz: Ugly hacks of various kinds to make cplib2.txt get
+ properly regenerated with multilib.
+ * [debian/TODO] Created.
+ * [INSTALL/index.html] Fixed broken link.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Sun, 20 Sep 1998 14:05:15 +0200
+
+egcs (1.1a-1) unstable; urgency=low
+
+ * New upstream release.
+ * Added README.libstdc++ .
+ * Updated Standards-Version.
+ * Matthias:
+ * Downgraded gobjc dependency on egcs-docs from Recommends: to Suggests: .
+ * [libg++/Makefile.in] Patched not to rely on a `-f' flag of `ln'.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Wed, 2 Sep 1998 19:57:43 +0200
+
+egcs (1.1-1) unstable; urgency=low
+
+ * egcs-1.1 prerelease (from the last Debian package only the version file
+ changed).
+ * "Final" gpc Beta 2.1 gpc-19980830.
+ * Included libg++ and gpc in the .orig tarball. so that diffs are getting
+ smaller.
+ * debian/control.in: Changed maintainer address to galenh-egcs@debian.org.
+ * debian/copyright: Updated URLs.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Mon, 31 Aug 1998 12:43:13 +0200
+
+egcs (1.0.99.56-0.1) unstable; urgency=low
+
+ * New upstream snapshot 19980830 from CVS (called egcs-1.1 19980830).
+ * New libg++ snapshot 980828.
+ * Put all patches patches subdirectory; see patches/README in the source.
+ * debian/control.in: readded for libg++2.8.2-dev:
+ Replaces: libstdc++2.8-dev (<= 2.90.29-0.5)
+ * Renamed libg++2.9 package to libg++2.8.2.
+ * gcc/p/gpc-decl.c: Fix from Peter@Gerwinski.de; fixes optimization errors.
+ * patches/gpc-patch2: Fix from Peter@Gerwinski.de; fixes alpha errors.
+ * debian/rules: New configuration flag for building with and without
+ libstdc++api patch; untested without ...
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Sun, 30 Aug 1998 12:04:22 +0200
+
+egcs (1.0.99-0.6) unstable; urgency=low
+
+ * PowerPC fixes.
+ * On powerpc, generate the -msoft-float libs and package them
+ as egcs-nof.
+ * Fix signed char error in gpc.
+ * Create a libg++.so.2.9 compatibility symlink.
+
+ -- Daniel Jacobowitz <dan@debian.org> Tue, 25 Aug 1998 11:44:09 -0400
+
+egcs (1.0.99-0.5) unstable; urgency=low
+
+ * New upstream snapshot 19980824.
+ * New gpc snapshot gpc-980822; reenabled gpc for alpha.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Tue, 25 Aug 1998 01:21:08 +0200
+
+egcs (1.0.99-0.4) unstable; urgency=low
+
+ * New upstream snapshot 19980819. Should build glibc 2.0.9x on PPC.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Wed, 19 Aug 1998 14:18:07 +0200
+
+egcs (1.0.99-0.3) unstable; urgency=low
+
+ * New upstream snapshot 19980816.
+ * debian/rules: build correct debian/control and debian/*.shlibs
+ * Enabled Haifa scheduler for ix86.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Mon, 17 Aug 1998 16:29:35 +0200
+
+egcs (1.0.99-0.2) unstable; urgency=low
+
+ * New upstream snapshot: egcs-19980812, minor changes only.
+ * Fixes for building on `primary' targets.
+ * Disabled gpc on `alpha' architecture.
+ * Uses debhelper 1.1.6
+ * debian/control.in: Replace older snapshot versions in favor of newer
+ normal versions.
+ * debian/rules: Fixes building of binary-arch target only.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Thu, 13 Aug 1998 11:59:41 +0200
+
+egcs (1.0.99-0.1) unstable; urgency=low
+
+ * New upstream version: pre egcs-1.1 version.
+ * Many changes ... for details see debian/changelog.snapshot in the
+ source package.
+ * New packages libstdc++2.9 and libstdc++2.9-dev.
+ * New libg++ snapshot 980731: new packages libg++2.9 and libg++2.9-dev.
+ * New gpc snapshot gpc-980729: new package gpc.
+ * Uses debhelper 1.1
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Mon, 10 Aug 1998 13:00:27 +0200
+
+egcs-snapshot (19980803-4) experimental; urgency=low
+
+ * rebuilt debian/control.
+
+ -- Matthias Klose <doko@debian.org> Wed, 5 Aug 1998 08:51:47 +0200
+
+egcs-snapshot (19980803-3) experimental; urgency=low
+
+ * debian/rules: fix installation locations of NEWS, header and
+ `undocumented' files.
+ * man pages aren't compressed for the snapshot package.
+
+ -- Matthias Klose <doko@debian.org> Tue, 4 Aug 1998 17:34:31 +0200
+
+egcs-snapshot (19980803-2) experimental; urgency=low
+
+ * debian/rules: Uses debhelper. Old in debian/rules.old.
+ renamed postinst, prerm files for use with debhelper.
+ * debian/{libg++2.9,libstdc++2.9}/postinst: call ldconfig only,
+ when called for configure.
+ * egcs-docs is architecture independent package.
+ * new libg++ snapshot 980731.
+ * installed libstdc++ api patch (still buggy).
+
+ -- Matthias Klose <doko@debian.org> Mon, 3 Aug 1998 13:20:59 +0200
+
+egcs-snapshot (19980729-1) experimental; urgency=low
+
+ * New snapshot version 19980729 from CVS archive.
+ * New gpc snapshot gpc-980729.
+ * Let gcc/configure decide about using the Haifa scheduler.
+ * Remove -DDEBIAN. That was needed for the security improvements with
+ regard to the /tmp problem. egcs-1.1 chooses another approach.
+ * Save test-protocol and extract gpc errors to gpc-test-summary.
+ * Tighten binutils dependency to 2.9.1.
+ * debian/rules: new build-info target
+ * debian/{control.in,rules}: _SO_ and BINUTILSV substitution.
+ * debian/rules: add dependency for debian/control.
+ * debian/rules: remove bin/c++filt
+ * TODO: next version will use debhelper; the unorganized moving of
+ files becomes unmanageable ...
+ * TODO: g++ headers in stdc++ package? check!
+
+ -- Matthias Klose <doko@debian.org> Thu, 30 Jul 1998 12:10:20 +0200
+
+egcs-snapshot (19980721-1) experimental; urgency=low
+
+ * Unreleased. Infinite loops in executables made by gpc.
+
+ -- Matthias Klose <doko@debian.org> Wed, 22 Jul 1998 18:07:20 +0200
+
+egcs-snapshot (19980715-1) experimental; urgency=low
+
+ * New snapshot version from CVS archive.
+ * New gpc snapshot gpc-980715.
+ * New libg++ version libg++-2.8.2-980708. Changed versioning
+ schema for library. The major versions of libc, libstdc++ and the
+ g++ interface are coded in the library name. Use this new schema,
+ but provide a symlink to our previous schema, since the library
+ seems to be binary compatible.
+ * [debian/rules]: Fixed bug in build target, when bootstrap returns
+ with an error
+
+ -- Matthias Klose <doko@debian.org> Wed, 15 Jul 1998 10:55:05 +0200
+
+egcs-snapshot (19980701-1) experimental; urgency=low
+
+ * New snapshot version from CVS archive.
+ Two check programs in libg++ had to be manually killed to finish the
+ testsuite (tBag and tSet).
+ * New gpc snapshot gpc-980629.
+ * Incorporated debian/rules changes from egcs-1.0.3a-0.5 (but don't remove
+ gcc/cp/parse.c gcc/c-parse.c gcc/c-parse.y gcc/objc/objc-parse.c
+ gcc/objc/objc-parse.y, since these files are part of the release).
+ * Disable the -DMKTEMP_EACH_FILE -DHAVE_MKSTEMP -DDEBIAN flags for the
+ snapshot. egcs-1.1 will have another solution.
+ * Don't bootstrap the snapshot with -fno-force-mem. Internal compiler
+ error :-(
+ * libf2c.a and f2c.h have changed names to libg2c.a and g2c.h and
+ have moved again into the gcc-lib dir. They are installed under
+ libg2c.a and g2c.h. Is it necessary to provide links f2c -> g2c ?
+ * debian/rules: reflect change of build dir of libraries.
+
+ -- Matthias Klose <doko@debian.org> Wed, 2 Jul 1998 13:15:28 +0200
+
+egcs-snapshot (19980628-0.1) experimental; urgency=low
+
+ * New upstream snapshot version.
+ * Non-maintainer upload; Matthias appears to be absent currently.
+ * Updated shlibs.
+ * Merged changes from regular egcs:
+ * [debian/control] Tightened dependency on binutils to 2.8.1.0.23 or
+ newer, as according to INSTALL/SPECIFIC PowerPC (and possibly Sparc)
+ need this.
+ * [debian/rules] Clean up some generated files outside builddir,
+ so the .diff.gz becomes smaller.
+ * [debian/rules] Partial sync/update with the one for the regular egcs
+ version.
+ * [debian/rules] Make gcc/p/configure executable.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Wed, 1 Jul 1998 07:12:15 +0200
+
+egcs (1.0.3a-0.6) frozen unstable; urgency=low
+
+ * Some libg++ development files were in libstdc++2.8-dev rather than
+ libg++2.8-dev. Fixed this and dealt with upgrading from the earlier
+ versions (fixes #23908; this bug is not marked release-critical, but
+ is annoying and can be quite confusing for users. Therefore, I think
+ this fix should go in 2.0).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Tue, 30 Jun 1998 11:10:14 +0200
+
+egcs (1.0.3a-0.5) frozen unstable; urgency=low
+
+ * Fixed location of .hP files (Fixes #23448).
+ * [debian/rules] simplified extraction of the files for libg++2.8-dev.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Wed, 17 Jun 1998 09:33:41 +0200
+
+egcs (1.0.3a-0.4) frozen unstable; urgency=low
+
+ * [gcc/gcc.c] There is one call to choose_temp_base for determining the
+ tempdir to be used only; #ifdef HAVE_MKSTEMP delete the tempfile created
+ as a side effect. (fixes #23123 for egcs).
+ * [gcc/collect2.c] There's still a vulnerability here; I don't see how
+ I can fix it without leaving behind tempfiles though.
+ * [debian/control] Tightened dependency on binutils to 2.8.1.0.23 or
+ newer, as according to INSTALL/SPECIFIC PowerPC (and possibly Sparc)
+ need this.
+ * [debian/rules] Clean up some generated files outside builddir, so the
+ .diff.gz becomes smaller.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Sat, 13 Jun 1998 09:06:52 +0200
+
+egcs-snapshot (19980608-1) experimental; urgency=low
+
+ * New snapshot version.
+
+ -- Matthias Klose <doko@debian.org> Tue, 9 Jun 1998 14:07:44 +0200
+
+egcs (1.0.3a-0.3) frozen unstable; urgency=high (security fixes)
+
+ * [gcc/toplev.c] set flag_force_mem to 1 at optimisation level 3 or higher.
+ This works around #17768 which is considered release-critical.
+ * Changes by Matthias:
+ * [debian/README] Documentation of the compiler situation for Objective C.
+ * [debian/rules, debian/control.*] Generate control file from a master
+ file.
+ * [debian/rules] Updates for Pascal and Fortran parts; brings it in sync
+ with the one for the egcs snapshots.
+ * Use the recommended settings LDFLAGS=-s CFLAGS= BOOT_CFLAGS='-O2'.
+ * Really compile -DMKTEMP_EACH_FILE -DHAVE_MKSTEMP (really fixes #19453
+ for egcs).
+ * [gcc/gcc.c] A couple of temp files weren't marked for deletion.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Sun, 31 May 1998 22:56:22 +0200
+
+egcs (1.0.3a-0.2) frozen unstable; urgency=high (security fixes)
+
+ * Security improvements with regard to the /tmp problem
+ (gcc opens predictably named files in TMPDIR which can be abused via
+ symlinks) (Fixes #19453 for egcs).
+ * Compile -DMKTEMP_EACH_FILE to ensure the %u name is generated randomly
+ every time; affects gcc/gcc.c .
+ * [gcc/choose-temp.c, libiberty/choose-temp.c]: use mktemp(3) if compiled
+ -DUSE_MKSTEMP .
+ * Security improvements: don't use the result of choose_temp_base in a
+ predictable fashion.
+ [gcc/gcc.c]:
+ * @c, @objective-c: use random name rather then tempbasename.i for
+ intermediate preprocessor output (%g.i -> %d%u).
+ * @c, @objective-c: use random name rather then tempbasename.s for
+ intermediate compiler output (%g.s -> %d%u).
+ * @c, @objective-c, @cpp-output, @assembler-with-cpp: switched
+ "as [-o output file] <input file>" to
+ "as <input file> [-o output file]".
+ * @c, @objective-c, @assembler-with-cpp: use previous random name
+ (cc1|cpp output) rather then tempbasename.s for intermediate assembler
+ input (%g.s -> %U)
+ [gcc/f/lang-specs.h]:
+ * @f77-cpp-input: use random name rather then tempbasename.i for
+ intermediate cpp output (%g.i -> %d%u).
+ * @f77-cpp-input: use previous random name (cpp output) rather than
+ tempbasename.i for f771 input (%g.i -> %U).
+ * @f77-cpp-input: switched
+ "as [-o output file] <input file>" to
+ "as <input file> [-o output file]".
+ * @f77-cpp-input: use random name rather then tempbasename.s for
+ intermediate compiler output (%g.s -> %d%u).
+ * @ratfor: use random name rather then tempbasename.i for
+ intermediate ratfor output (%g.f -> %d%u).
+ * @ratfor: use previous random name (ratfor output) rather than
+ tempbasename.i for f771 input (%g.f -> %U).
+ * @ratfor: use random name rather then tempbasename.s for
+ intermediate compiler output (%g.s -> %d%u).
+ * @ratfor: switched
+ "as [-o output file] <input file>" to
+ "as <input file> [-o output file]".
+ * @ratfor: use previous random name
+ (ratfor output) rather then tempbasename.s for intermediate assembler
+ input (%g.s -> %U).
+ * @f77: use random name rather then tempbasename.s for
+ intermediate ratfor output (%g.f -> %d%u).
+ * @ratfor: use previous random name (ratfor output) rather than
+ tempbasename.i for f771 input (%g.f -> %U).
+ * @ratfor: use random name rather then tempbasename.s for
+ intermediate compiler output (%g.s -> %d%u).
+ * @ratfor: switched
+ "as [-o output file] <input file>" to
+ "as <input file> [-o output file]".
+ * @ratfor: use previous random name
+ (ratfor output) rather then tempbasename.s for intermediate assembler
+ input (%g.s -> %U).
+ * @f77: use random name rather then tempbasename.s for
+ intermediate compiler output (%g.s -> %d%u).
+ * @f77: switched
+ "as [-o output file] <input file>" to
+ "as <input file> [-o output file]".
+ * @ratfor: use random name rather then tempbasename.s for
+ intermediate compiler output (%g.s -> %U).
+ * Run the testsuite (this requires the dejagnu package in experimental;
+ unfortunately, it is difficult to distinguish this version from the one
+ in frozen).
+ if possible, and log the results in warn_summary and bootstrap-summary.
+ * [gcc/choose-temp.c, libiberty/choose-temp.c]: s|returh|return| in
+ comment.
+ * Added notes on the Debian compiler setup [debian/README] to the
+ development packages.
+ * Matthias:
+ * [libg++/etc/lf/Makefile.in] Replaced "-ltermcap" by "-lncurses".
+ * [debian/rules] Updated so it can be used for both egcs releases and
+ snapshots easily; added support for the GNU Pascal Compiler gpc.
+ * [contrib/test_summary, contrib/warn_summary] Added from CVS.
+ * Run compiler checks and include results in /usr/doc/<package>.
+ * Updates to the README.
+ * [debian/rules] Use assignments to speed up startup.
+ * [debian/rules] Show the important variables at the start of the build
+ process.
+ * [debian/control.secondary] Added a dependency of gobjc on egcc on
+ architectures where egcs provides the secondary compiler, as
+ /usr/bin/egcc is the compiler driver for gobjc. (Fixes #22829).
+ * [debian/control.*] Bumped Standards-Version; used shorter version
+ numbers in the dependency relationships (esthetic difference only);
+ fixed typo.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Tue, 26 May 1998 21:47:41 +0200
+
+egcs-snapshot (19980525-1) experimental; urgency=low
+
+ * New snapshot version.
+
+ -- Matthias Klose <doko@debian.org> Tue, 26 May 1998 18:04:06 +0200
+
+egcs-snapshot (19980517-1) experimental; urgency=low
+
+ * "Initial" release of the egcs-snapshot package; many debian/* files
+ derived from the egcs-1.0.3a-0.1 package (maintained by Galen Hazelwood
+ <galenh@micron.net>, NMU's by J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>)
+ * The egcs-snapshot packages can coexist with the packages of the
+ egcs release. Package names have a '-ss' appended.
+ * All packages are installed in a separate tree (/usr/lib/egcs-ss following
+ the FHSS).
+ * Made all snapshot packages extra, all snapshot packages conflict
+ with correspondent egcs packages, which are newer than the snapshot.
+ * Included libg++-2.8.1-980505.
+ * Included GNU Pascal (gpc-980511).
+ * Haifa scheduler enabled for all snapshot packages.
+ * Run compiler checks and include results in /usr/doc/<package>.
+ * Further information in /usr/doc/<package>/README.snapshot.
+
+ -- Matthias Klose <doko@debian.org> Wed, 20 May 1998 11:14:06 +0200
+
+egcs (1.0.3a-0.1) frozen unstable; urgency=low
+
+ * New upstream release egcs-2.90.29 980515 (egcs-1.0.3 release)
+ (we were using 1.0.3-prerelease). This includes the Haifa patches
+ we had since 1.0.3-0.2 and the gcc/objc/thr-posix.c patch we had
+ since 1.0.3-0.1; the differences with 1.0.3-prerelease + patches
+ we had is negligable.
+ * iostream info documentation was in the wrong package (libg++2.8-dev).
+ Now it's in libstdc++2.8-dev. (Thanks to Jens Rosenboom for bringing
+ this to my attention). As 1.0.3-0.3 didn't make it out of Incoming,
+ I'm not adding "Replaces:" for this; folks who had 1.0.3-0.3 installed
+ already know enough to use --force-overwrite.
+ * [gcc/objc/objc-act.c] Applied patch Matthias Klose supplied me with that
+ demangles Objective C method names in gcc error messages.
+ * Explicitly disable Haifa scheduling on Alpha, to make it easier to use
+ this package's diff with egcs snapshots, which may turn on Haifa
+ scheduling even though it is still unstable. (Requested by Chris Chimelis)
+ * Don't run "configure" again if builddir already exists (makes it faster
+ to restart builds in case one is hacking internals). Requested by
+ Johnnie Ingram.
+ * [gcc/gbl-ctors.h] Don't use extern declaration for atexit on glibc 2.1
+ and higher (the prototype has probably changed; having the declaration
+ broke Sparc compiles).
+ * [debian/rules] Determine all version number automatically (from the
+ version string in gcc/version.c).
+ * [debian/copyright] Updated FTP locations; added text about libg++ (fixes
+ #22465).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Sat, 16 May 1998 17:41:44 +0200
+
+egcs (1.0.3-0.3) frozen unstable; urgency=low
+
+ * Made an "egcs-doc" package containing documentation for egcs (e)gcc,
+ g++, gobjc, so that administrators can choose whether to have this
+ documenation or the documentation that comes with the GNU gcc package.
+ Dependency on this is Recommends: on architectures where egcs provides
+ the primary C compiler; Suggests: on the others (where GNU gcc is still
+ the primary C compiler).
+ * Use the g++ FAQ from gcc/cp rather than libg++, as that version is more
+ up to date.
+ * Added iostream info documentation to libstdc++2.8-dev.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Wed, 13 May 1998 08:46:10 +0200
+
+egcs (1.0.3-0.2) frozen unstable; urgency=low
+
+ * Added libg++ that works with egcs, found at
+ ftp://ftp.yggdrasil.com/private/hjl/libg++-2.8.1-980505.tar.gz
+ (fixes #20587 (Severity: important)).
+ * The "libg++" and "libg++-dev" virtual packages now refer to the GNU
+ extensions.
+ * Added the g++ FAQ that comes with libg++ to the g++ package.
+ * libg++/Makefile.in: added $(srcdir) to rule for g++FAQ.info so that it
+ builds OK in builddir.
+ * Added -D__i386__ to the cpp predefines on intel.
+ * Patches Matthias supplied me with:
+ * Further 1.0.3 prerelease patches from CVS.
+ This includes patches to the Haifa scheduler. Alpha porters, please
+ check if this makes the Haifa scheduler OK again.
+ * Objective C patches from CVS.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Fri, 8 May 1998 14:43:20 +0200
+
+egcs (1.0.3-0.1) frozen unstable; urgency=low (high for maintainers that use objc)
+
+ * bug fixes only in new upstream version
+ * Applied patches from egcs CVS archive (egcs_1_03_prerelease)
+ (see gcc/ChangeLog in the egcs source package).
+ * libstdc++2.8-dev no longer Provides: libg++-dev (fixes #21153).
+ * libstdc++2.8-dev now Conflicts: libg++27-dev (bo),
+ libg++272-dev (hamm) [regular packages] rather than
+ Conflicts: libg++-dev [virtual package] to prepare the way for "libg++"
+ to be used as a virtual package for a new libg++ package (i.e. an up to
+ date one, which not longer contains libstdc++, but only the GNU
+ extensions) that is compatible with the egcs g++ packages. Such a package
+ isn't available yet. Joel Klecker tried building libg++2.8.1.1a within
+ egcs's libstdc++ setup, but it appears to need true gcc 2.8.1 .
+ * Filed Severity: important bugs against wxxt1-dev (#21707) because these
+ still depend on libg++-dev, which is removed in this version.
+ A fixed libsidplay1-dev has already been uploaded.
+ * libstdc++2.8 is now Section: base and Priority: required (as dselect is
+ linked against it).
+ * Disabled Haifa scheduling on Alpha again; Chris Chimelis reported
+ that this caused problems on some machines.
+ * [gcc/extend.texi]
+ ftp://maya.idiap.ch/pub/tmb/usenix88-lexic.ps.Z is no longer available;
+ use http://master.debian.org/~karlheg/Usenix88-lexic.pdf .
+ (fixes the egcs part of #20002).
+ * Updated Standards-Version.
+ * Changed chmod in debian/rules at Johnie Ingram's request.
+ * Rather than hardwire the Debian part of the packages' version number,
+ extract it from debian/changelog .
+ * Use gcc/objc/thr-posix.c from 980418 egcs snapshot to make objc work.
+ (Fixes #21192).
+ * Applied workaround for the GNUstep packages on sparc systems.
+ See README.sparc (on sparc packages only) in the doc directory.
+ This affects the other compilers as well.
+ * Already done in 1.0.2-0.7: the gobjc package now provides a virtual
+ package objc-compiler.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Tue, 28 Apr 1998 12:05:28 +0200
+
+egcs (1.0.2-0.7) frozen unstable; urgency=low
+
+ * Separated out Objective-C compiler.
+ * Applied patch from http://www.cygnus.com/ml/egcs/1998-Apr/0614.html
+
+ -- Matthias Klose <doko@debian.org> Fri, 17 Apr 1998 10:25:48 +0200
+
+egcs (1.0.2-0.6) frozen unstable; urgency=low
+
+ * Due to upstream changes (libg++ is now only the GNU specific C++
+ classes, and is no longer maintained; libstdc++ contains the C++
+ standard library, including STL), the virtual "libg++-dev"
+ package's meaning has become confusing. Therefore, new or updated
+ packages should no longer use the virtual "libg++-dev" package.
+ * Corrected g++'s Recommends to libstdc++2.8-dev (>=2.90.27-0.1).
+ The previous version had Recommends: libstdc++-dev (>=2.90.27-0.1)
+ which doesn't work, as libstc++-dev is a virtual package.
+ * Bumped Standards-Version.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Tue, 14 Apr 1998 11:52:08 +0200
+
+egcs (1.0.2-0.5) frozen unstable; urgency=low (high for maintainers of packages that use libstdc++)
+
+ * Modified shlibs file for libstdc++ to generate versioned dependencies,
+ as it is not link compatible with the 1.0.1-x versions in
+ project/experimental. (Fixes #20247, #20033)
+ Packages depending on libstd++ should be recompiled to fix their
+ dependencies.
+ * Strenghtened g++'s Recommends: libstdc++-dev to the 1.0.2 version or
+ newer.
+ * Fixed problems with the unknown(7) symlink for gcov.
+ * Reordering links now works.
+
+ -- Adam Heath <adam.heath@usa.net> Sun, 12 Apr 1998 13:09:30 -0400
+
+egcs (1.0.2-0.4) frozen unstable; urgency=low
+
+ * Unreleased. This is the version Adam Heath received from me.
+ * Replaces: gcc (<= 2.7.2.3-3) so that the overlap with the older gcc
+ packages (including bo's gcc_2.7.2.1-8) is handled properly
+ (fixes #19931, #19672, #20217, #20593).
+ * Alpha architecture (fixes #20875):
+ * Patched gcc/config/alpha/linux.h for the gmon functions to operate
+ properly.
+ * Made egcs the primary C compiler.
+ * Enabled Hafia scheduling.
+ * Lintian-detected problems:
+ * E: libstdc++2.8: ldconfig-symlink-before-shlib-in-deb usr/lib/libstdc++.so.2.8
+ * E: egcc: binary-without-manpage gcov
+ Reported as wishlist bug; added link to undocumented(7).
+ * W: libstdc++2.8: non-standard-executable-perm usr/lib/libstdc++.so.2.8.0 0555
+ * E: libstdc++2.8: shlib-with-executable-bit usr/lib/libstdc++.so.2.8.0 0555
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Fri, 10 Apr 1998 14:46:46 +0200
+
+egcs (1.0.2-0.3) frozen unstable; urgency=low
+
+ * Really fixed dependencies.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Mon, 30 Mar 1998 11:30:26 +0200
+
+egcs (1.0.2-0.2) frozen unstable; urgency=low
+
+ * Fixed dependencies.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Sat, 28 Mar 1998 13:58:58 +0100
+
+egcs (1.0.2-0.1) frozen unstable; urgency=low
+
+ * New upstream version; it now has -Di386 in CPP_PREDEFINES.
+ * Only used the debian/* patches from 1.0.1-2; the rest of it appears
+ to be in 1.0.2 already.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Fri, 27 Mar 1998 11:47:14 +0100
+
+egcs (1.0.1-2) unstable; urgency=low
+
+ * Integrated pre-release 1.0.2 patches
+ * Split out g++
+ * egcs may now provide either the primary or secondary C compiler
+
+ -- Galen Hazelwood <galenh@micron.net> Sat, 14 Mar 1998 14:15:32 -0700
+
+egcs (1.0.1-1) unstable; urgency=low
+
+ * New upstream version
+ * egcs is now the standard Debian gcc!
+ * gcc now provides c-compiler (#15248 et al.)
+ * g77 now provides fortran77-compiler
+ * g77 dependencies now correct (#16991)
+ * /usr/doc/gcc/changelog.gz now has correct permissions (#16139)
+
+ -- Galen Hazelwood <galenh@micron.net> Sat, 7 Feb 1998 19:22:30 -0700
+
+egcs (1.0-1) experimental; urgency=low
+
+ * First official release
+
+ -- Galen Hazelwood <galenh@micron.net> Thu, 4 Dec 1997 16:30:11 -0700
+
+egcs (970917-1) experimental; urgency=low
+
+ * New upstream snapshot (There's a lot of stuff here as well, including
+ a new libstdc++, but it _still_ won't build...)
+ * eg77 driver now works properly
+
+ -- Galen Hazelwood <galenh@micron.net> Wed, 17 Sep 1997 20:44:29 -0600
+
+egcs (970904-1) experimental; urgency=low
+
+ * New upstream snapshot
+
+ -- Galen Hazelwood <galenh@micron.net> Sun, 7 Sep 1997 18:25:06 -0600
+
+egcs (ss-970814-1) experimental; urgency=low
+
+ * Initial packaging (of initial snapshot!)
+
+ -- Galen Hazelwood <galenh@micron.net> Wed, 20 Aug 1997 00:36:28 +0000
+
+gcc272 (2.7.2.3-12) unstable; urgency=low
+
+ * Compiled on a glibc-2.0 based system.
+ * Reflect move of manpage to /usr/share in gcc.postinst as well.
+ * Moved gcc272-docs to section doc, priority optional.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Sat, 28 Aug 1999 13:42:13 +0200
+
+gcc272 (2.7.2.3-11) unstable; urgency=low
+
+ * Follow Debian policy for GNU system type (fixes #42657).
+ * config/i386/linux.h: Remove %[cpp_cpu] from CPP_SPEC. Stops gcc-2.95
+ complaining about obsolete spec operators (using gcc -V 2.7.2.3).
+ Patch suggested by Zack Weinberg <zack@bitmover.com>.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Sun, 15 Aug 1999 20:12:21 +0200
+
+gcc272 (2.7.2.3-10) unstable; urgency=low
+
+ * Renamed source package to gcc272. The egcs source package is renamed
+ to gcc, because it's now the "official" GNU C compiler.
+ * Changed maintainer address to "Debian GCC maintainers".
+ * Install info and man stuff to /usr/share.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Thu, 27 May 1999 12:29:23 +0200
+
+gcc (2.7.2.3-9) unstable; urgency=low
+
+ * debian/{postinst,prerm}-doc: handle gcc272.info, not gcc.info.
+ Fixes #36306.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Tue, 20 Apr 1999 07:32:58 +0200
+
+gcc (2.7.2.3-8) unstable; urgency=low
+
+ * Make gcc-2.7 the secondary compiler. Rename gcc package to gcc272.
+ On i386, sparc and m68k, this package is compiled against glibc2.0.
+ * The cpp package is built from the egcs source package.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Mon, 29 Mar 1999 22:48:50 +0200
+
+gcc (2.7.2.3-7) frozen unstable; urgency=low
+
+ * Separated out ObjC compiler to gobjc27 package.
+ * Changed maintainer address.
+ * Synchronized README.Debian with egcs-1.1.1-3.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Tue, 29 Dec 1998 19:05:26 +0100
+
+gcc (2.7.2.3-6) frozen unstable; urgency=low
+
+ * Link with -lc on i386, m68k, sparc, when building shared libraries
+ (fixes #25122).
+
+ -- Matthias Klose <doko@cs.tu-berlin.de> Thu, 3 Dec 1998 12:12:12 +0200
+
+gcc (2.7.2.3-5) frozen unstable; urgency=low
+
+ * Updated maintainer info.
+ * Updated Standards-Version; made lintian-clean.
+ * gcc-docs can coexist with the latest egcs-docs, so added (<= version) to
+ the Conflicts.
+ * Updated the README and renamed it to README.Debian .
+ * Put a reference to /usr/doc/gcc/README.Debian in the info docs.
+ * Updated description of g++272 .
+ * Clean up generated info files, to keep the diff small.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Tue, 17 Nov 1998 20:05:59 +0100
+
+gcc (2.7.2.3-4.8) frozen unstable; urgency=high
+
+ * Non-maintainer release
+ * Fix type in extended description
+ * Removed wrong test in postinst
+ * Add preinst to clean up some stuff from an older gcc package properly
+ and stop man complaining about dangling symlinks
+
+ -- Wichert Akkerman <wakkerma@debian.org> Fri, 17 Jul 1998 18:48:32 +0200
+
+gcc (2.7.2.3-4.7) frozen unstable; urgency=high
+
+ * Really fixed gcc-docs postinst (Fixes #23470), so that `gcc-docs'
+ becomes installable.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Mon, 15 Jun 1998 07:53:40 +0200
+
+gcc (2.7.2.3-4.6) frozen unstable; urgency=high
+
+ * [gcc.c] There is one call to choose_temp_base for determining the
+ tempdir to be used only;
+ #ifdef HAVE_MKSTEMP delete the tempfile created as a side effect.
+ (fixes #23123 for gcc).
+ * gcc-docs postinst was broken (due to a broken line) (fixes #23391, #23401).
+ * [debian/control] description for gcc-docs said `egcs' where it should have
+ said `gcc' (fixes #23396).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Thu, 11 Jun 1998 12:48:50 +0200
+
+gcc (2.7.2.3-4.5) frozen unstable; urgency=high
+
+ * The previous version left temporary files behind, as they were not
+ marked for deletion afterwards.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Sun, 31 May 1998 22:49:14 +0200
+
+gcc (2.7.2.3-4.4) frozen unstable; urgency=high (security fixes)
+
+ * Security improvements with regard to the /tmp problem
+ (gcc opens predictably named files in TMPDIR which can be abused via
+ symlinks) (Fixes #19453 for gcc):
+ * Compile -DMKTEMP_EACH_FILE to ensure the %u name is generated randomly
+ every time; affects gcc/gcc.c .
+ * [cp/g++.c, collect2.c, gcc.c] If compiled -DHAVE_MKSTEMP use mkstemp(3)
+ rather than mktemp(3).
+ * Security improvements: don't use the result of choose_temp_base in a
+ predictable fashion.
+ [gcc.c]:
+ * @c, @objective-c: use random name rather then tempbasename.i for
+ intermediate preprocessor output (%g.i -> %d%u).
+ * @c, @objective-c: use random name rather then tempbasename.s for
+ intermediate compiler output (%g.s -> %d%u).
+ * @c, @objective-c, @cpp-output, @assembler-with-cpp: switched
+ "as [-o output file] <input file>" to
+ "as <input file> [-o output file]".
+ * @c, @objective-c, @assembler-with-cpp: use previous random name
+ (cc1|cpp output) rather then tempbasename.s for intermediate assembler
+ input (%g.s -> %U)
+ [f/lang-specs.h]:
+ * @f77-cpp-input: use random name rather then tempbasename.i for
+ intermediate cpp output (%g.i -> %d%u).
+ * @f77-cpp-input: use previous random name (cpp output) rather than
+ tempbasename.i for f771 input (%g.i -> %U).
+ * @f77-cpp-input: switched
+ "as [-o output file] <input file>" to
+ "as <input file> [-o output file]".
+ * @f77-cpp-input: use random name rather then tempbasename.s for
+ intermediate compiler output (%g.s -> %d%u).
+ * @ratfor: use random name rather then tempbasename.i for
+ intermediate ratfor output (%g.f -> %d%u).
+ * @ratfor: use previous random name (ratfor output) rather than
+ tempbasename.i for f771 input (%g.f -> %U).
+ * @ratfor: use random name rather then tempbasename.s for
+ intermediate compiler output (%g.s -> %d%u).
+ * @ratfor: switched
+ "as [-o output file] <input file>" to
+ "as <input file> [-o output file]".
+ * @ratfor: use previous random name
+ (ratfor output) rather then tempbasename.s for intermediate assembler
+ input (%g.s -> %U).
+ * @f77: use random name rather then tempbasename.s for
+ intermediate ratfor output (%g.f -> %d%u).
+ * @ratfor: use previous random name (ratfor output) rather than
+ tempbasename.i for f771 input (%g.f -> %U).
+ * @ratfor: use random name rather then tempbasename.s for
+ intermediate compiler output (%g.s -> %d%u).
+ * @ratfor: switched
+ "as [-o output file] <input file>" to
+ "as <input file> [-o output file]".
+ * @ratfor: use previous random name
+ (ratfor output) rather then tempbasename.s for intermediate assembler
+ input (%g.s -> %U).
+ * @f77: use random name rather then tempbasename.s for
+ intermediate compiler output (%g.s -> %d%u).
+ * @f77: switched
+ "as [-o output file] <input file>" to
+ "as <input file> [-o output file]".
+ * @ratfor: use random name rather then tempbasename.s for
+ intermediate compiler output (%g.s -> %U).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Sat, 30 May 1998 17:27:03 +0200
+
+gcc (2.7.2.3-4.3) frozen unstable; urgency=high
+
+ * The "alpha" patches from -4 affected a lot more than alpha support,
+ and in all likeliness broke compilation of libc6 2.0.7pre3-1
+ and 2.0.7pre1-4 . I removed them by selective application of the
+ diff between -4 and -4. (should fix #22292).
+ * Fixed reference to the trampolines paper (fixes #20002 for Debian;
+ this still needs to be forwarded).
+ * This is for frozen too. (obsoletes #22390 (request to move -4.2 to
+ frozen)).
+ * Split of gcc-docs package, so that the gcc can be succesfully installed
+ on systems that have egcs-docs installed.
+ * Added the README on the compiler situation that's already in the egcs
+ packages.
+ * Use the recommended settings LDFLAGS=-s CFLAGS= BOOT_CFLAGS='-O2'.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Thu, 28 May 1998 20:03:59 +0200
+
+gcc (2.7.2.3-4.2) unstable; urgency=low
+
+ * Still for unstable, as I have received no feedback about the g++272
+ package yet.
+ * gcc now Provides: objc-compiler .
+ * Clean up /etc/alternatives/{g++,g++.1.gz} if they are dangling.
+ (fixes #19765, #20563)
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Wed, 22 Apr 1998 12:40:45 +0200
+
+gcc (2.7.2.3-4.1) unstable; urgency=low
+
+ * Bumped Standards-Version.
+ * Forked off a g++272 package (e.g. for code that uses the GNU extensions
+ in libg++); for now this is in "unstable" only; feedback appreciated.
+ * Some cleanup (lintian): permissions, absolute link, gzip manpage.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl> Fri, 17 Apr 1998 13:05:25 +0200
+
+gcc (2.7.2.3-4) unstable; urgency=low
+
+ * Added alpha patches
+ * Only build C and objective-c compilers, split off g++
+
+ -- Galen Hazelwood <galenh@micron.net> Sun, 8 Mar 1998 21:16:39 -0700
+
+gcc (2.7.2.3-3) unstable; urgency=low
+
+ * Added patches for m68k
+ * Added patches for sparc (#13968)
+
+ -- Galen Hazelwood <galenh@micron.net> Fri, 17 Oct 1997 18:25:21 -0600
+
+gcc (2.7.2.3-2) unstable; urgency=low
+
+ * Added g77 support (g77 0.5.21)
+
+ -- Galen Hazelwood <galenh@micron.net> Wed, 10 Sep 1997 18:44:54 -0600
+
+gcc (2.7.2.3-1) unstable; urgency=low
+
+ * New upstream version
+ * Now using pristine source
+ * Removed misplaced paragraph in cpp.texi (#10877)
+ * Fix security bug for temporary files (#5298)
+ * Added Suggests: libg++-dev (#12335)
+ * Patched objc/thr-posix.c to support conditions (#12502)
+
+ -- Galen Hazelwood <galenh@micron.net> Mon, 8 Sep 1997 12:20:07 -0600
+
+gcc (2.7.2.2-7) unstable; urgency=low
+
+ * Made cc and c++ managed through alternates mechanism (for egcs)
+
+ -- Galen Hazelwood <galenh@micron.net> Tue, 19 Aug 1997 22:37:03 +0000
+
+gcc (2.7.2.2-6) unstable; urgency=low
+
+ * Tweaked Objective-C thread support (#11069)
+
+ -- Galen Hazelwood <galenh@micron.net> Wed, 9 Jul 1997 11:56:57 -0600
+
+gcc (2.7.2.2-5) unstable; urgency=low
+
+ * More updated m68k patches
+ * Now conflicts with libc5-dev (#10006, #10112)
+ * More strict Depends: cpp, prevents version mismatch (#9954)
+
+ -- Galen Hazelwood <galenh@micron.net> Thu, 19 Jun 1997 01:29:02 -0600
+
+gcc (2.7.2.2-4) unstable; urgency=low
+
+ * Moved to unstable
+ * Temporarily removed fortran support (waiting for new g77)
+ * Updated m68k patches
+
+ -- Galen Hazelwood <galenh@micron.net> Fri, 9 May 1997 13:35:14 -0600
+
+gcc (2.7.2.2-3) experimental; urgency=low
+
+ * Built against libc6 (fixes bug #8511)
+
+ -- Galen Hazelwood <galenh@micron.net> Fri, 4 Apr 1997 13:30:10 -0700
+
+gcc (2.7.2.2-2) experimental; urgency=low
+
+ * Fixed configure to build crt{begin,end}S.o on i386
+
+ -- Galen Hazelwood <galenh@micron.net> Tue, 11 Mar 1997 16:15:02 -0700
+
+gcc (2.7.2.2-1) experimental; urgency=low
+
+ * Built for use with libc6-dev (experimental purposes only!)
+ * Added m68k patches from Andreas Schwab
+
+ -- Galen Hazelwood <galenh@micron.net> Fri, 7 Mar 1997 12:44:17 -0700
+
+gcc (2.7.2.1-7) unstable; urgency=low
+
+ * Patched to support g77 0.5.20
+
+ -- Galen Hazelwood <galenh@micron.net> Thu, 6 Mar 1997 22:20:23 -0700
+
+gcc (2.7.2.1-6) unstable; urgency=low
+
+ * Added (small) manpage for protoize/unprotoize (fixes bug #6904)
+ * Removed -lieee from specs file (fixes bug #7741)
+ * No longer builds aout-gcc
+
+ -- Galen Hazelwood <galenh@micron.net> Mon, 3 Mar 1997 11:10:20 -0700
+
+gcc (2.7.2.1-5) unstable; urgency=low
+
+ * debian/control now lists cpp in section "interpreters"
+ * Re-added Objective-c patches for unstable
+
+ -- Galen Hazelwood <galenh@micron.net> Wed, 22 Jan 1997 10:27:52 -0700
+
+gcc (2.7.2.1-4) stable unstable; urgency=low
+
+ * Changed original source file so dpkg-source -x works
+ * Removed Objective-c patches (unsafe for stable)
+ * Built against rex's libc, so fixes placed in -3 are available to
+ those still using rex
+
+ -- Galen Hazelwood <galenh@micron.net> Tue, 21 Jan 1997 11:11:53 -0700
+
+gcc (2.7.2.1-3) unstable; urgency=low
+
+ * New (temporary) maintainer
+ * Updated to new standards and source format
+ * Integrated aout-gcc into gcc source package
+ * Demoted aout-gcc to Priority "extra"
+ * cpp package description more clear (fixes bug #5428)
+ * Removed cpp "Replaces: gcc" (fixes bug #5762)
+ * Minor fix to invoke.texi (fixes bug #2909)
+ * Added latest Objective-C patches for GNUstep people (fixes bug #4657)
+
+ -- Galen Hazelwood <galenh@micron.net> Sun, 5 Jan 1997 09:57:36 -0700
diff --git a/debian/changelog-4.4 b/debian/changelog-4.4
new file mode 100644
index 0000000..9a168b4
--- /dev/null
+++ b/debian/changelog-4.4
@@ -0,0 +1,36 @@
+ * Closing reports reported against gcc-4.1 and fixed in gcc-4.4:
+ - General
+ +
+ - C
+ +
+ - C++/libstdc++
+ +
+ - Fortran
+ - Java
+ - Architecture specific:
+ - mips
+ - sparc
+ * Closing reports reported against gcc-4.2 and fixed in gcc-4.4:
+ - General
+ +
+ - C
+ +
+ - C++/libstdc++
+ +
+ - Fortran
+ - Java
+ - Architecture specific:
+ - mips
+ - sparc
+ * Closing reports reported against gcc-4.3 and fixed in gcc-4.4:
+ - General
+ +
+ - C
+ +
+ - C++/libstdc++
+ +
+ - Fortran
+ - Java
+ - Architecture specific:
+ - mips
+ - sparc
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..7ed6ff8
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+5
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..b101848
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,990 @@
+Source: gcc-4.6
+Section: devel
+Priority: optional
+Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+Uploaders: Matthias Klose <doko@debian.org>, Arthur Loiret <aloiret@debian.org>
+Standards-Version: 3.9.2
+Build-Depends: dpkg-dev (>= 1.16.0~ubuntu4), debhelper (>= 5.0.62), g++-multilib [amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc], libc6.1-dev (>= 2.13-5) [alpha ia64] | libc0.3-dev (>= 2.13-5) [hurd-i386] | libc0.1-dev (>= 2.13-5) [kfreebsd-i386 kfreebsd-amd64] | libc6-dev (>= 2.13-5), libc6-dev-amd64 [i386], libc6-dev-sparc64 [sparc], libc6-dev-s390 [s390x], libc6-dev-s390x [s390], libc6-dev-i386 [amd64], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], libc0.1-dev-i386 [kfreebsd-amd64], lib32gcc1 [amd64 ppc64 kfreebsd-amd64 s390x], lib64gcc1 [i386 powerpc sparc s390], libc6-dev-mips64 [mips mipsel], libc6-dev-mipsn32 [mips mipsel], m4, libtool, autoconf2.64, automake (>= 1:1.11), automake (<< 1:1.12), libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], zlib1g-dev, gawk, lzma, xz-utils, patchutils, binutils (>= 2.21.1) | binutils-multiarch (>= 2.21.1), binutils-hppa64 (>= 2.21.1) [hppa], gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext, texinfo (>= 4.3), locales [!knetbsd-i386 !knetbsd-alpha], procps, sharutils, binutils-spu (>= 2.21.1) [powerpc ppc64], newlib-spu (>= 1.16.0) [powerpc ppc64], libcloog-ppl-dev (>= 0.15.9-2~), libmpc-dev, libmpfr-dev (>= 3.0.0-9~), libgmp-dev (>= 2:5.0.1~), libelfg0-dev (>= 0.8.12), dejagnu [!m68k !hurd-i386 !hurd-alpha], autogen, realpath (>= 1.9.12), chrpath, lsb-release, make (>= 3.81), quilt
+Build-Conflicts: binutils-gold
+Homepage: http://gcc.gnu.org/
+XS-Vcs-Browser: http://svn.debian.org/viewsvn/gcccvs/branches/sid/gcc-4.6/
+XS-Vcs-Svn: svn://svn.debian.org/svn/gcccvs/branches/sid/gcc-4.6
+
+Package: gcc-4.6-base
+Architecture: any
+Multi-Arch: same
+Section: libs
+Priority: required
+Depends: ${misc:Depends}
+Replaces: ${base:Replaces}
+Breaks: gcj-4.6-base (<< 4.6.1-4~), gnat-4.6 (<< 4.6.1-5~), dehydra (<= 0.9.hg20110609-2)
+Description: GCC, the GNU Compiler Collection (base package)
+ This package contains files common to all languages and libraries
+ contained in the GNU Compiler Collection (GCC).
+
+Package: libgcc1
+Architecture: any
+Section: libs
+Priority: required
+Depends: gcc-4.6-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Multi-Arch: same
+Pre-Depends: multiarch-support
+Breaks: ${multiarch:breaks}
+Description: GCC support library
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+
+Package: libgcc1-dbg
+Architecture: any
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libgcc1 (= ${gcc:EpochVersion}), ${misc:Depends}
+Multi-Arch: same
+Description: GCC support library (debug symbols)
+ Debug symbols for the GCC support library.
+
+Package: libgcc2
+Architecture: m68k
+Section: libs
+Priority: required
+Depends: gcc-4.6-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Multi-Arch: same
+Pre-Depends: multiarch-support
+Breaks: ${multiarch:breaks}
+Description: GCC support library
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+
+Package: libgcc2-dbg
+Architecture: m68k
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libgcc2 (= ${gcc:Version}), ${misc:Depends}
+Multi-Arch: same
+Description: GCC support library (debug symbols)
+ Debug symbols for the GCC support library.
+
+Package: libgcc4
+Architecture: hppa
+Multi-Arch: same
+Pre-Depends: multiarch-support
+Breaks: ${multiarch:breaks}
+Section: libs
+Priority: required
+Depends: gcc-4.6-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: GCC support library
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+
+Package: libgcc4-dbg
+Architecture: hppa
+Multi-Arch: same
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libgcc4 (= ${gcc:Version}), ${misc:Depends}
+Description: GCC support library (debug symbols)
+ Debug symbols for the GCC support library.
+
+Package: lib64gcc1
+Architecture: i386 powerpc sparc s390 mips mipsel
+Section: libs
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${misc:Depends}
+Conflicts: libgcc1 (<= 1:3.3-0pre9)
+Description: GCC support library (64bit)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+
+Package: lib64gcc1-dbg
+Architecture: i386 powerpc sparc s390 mips mipsel
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib64gcc1 (= ${gcc:EpochVersion}), ${misc:Depends}
+Description: GCC support library (debug symbols)
+ Debug symbols for the GCC support library.
+
+Package: lib32gcc1
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Section: libs
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: GCC support library (32 bit Version)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+
+Package: lib32gcc1-dbg
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib32gcc1 (= ${gcc:EpochVersion}), ${misc:Depends}
+Description: GCC support library (debug symbols)
+ Debug symbols for the GCC support library.
+
+Package: libn32gcc1
+Architecture: mips mipsel
+Section: libs
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${misc:Depends}
+Conflicts: libgcc1 (<= 1:3.3-0pre9)
+Description: GCC support library (n32)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+
+Package: libn32gcc1-dbg
+Architecture: mips mipsel
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libn32gcc1 (= ${gcc:EpochVersion}), ${misc:Depends}
+Description: GCC support library (debug symbols)
+ Debug symbols for the GCC support library.
+
+Package: gcc-4.6
+Architecture: any
+Section: devel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), cpp-4.6 (= ${gcc:Version}), binutils (>= ${binutils:Version}), ${dep:libgcc}, ${dep:libssp}, ${dep:libgomp}, ${dep:libqmath}, ${dep:libunwinddev}, ${shlibs:Depends}, ${misc:Depends}
+Recommends: ${dep:libcdev}
+Suggests: ${gcc:multilib}, libmudflap0-4.6-dev (>= ${gcc:Version}), gcc-4.6-doc (>= ${gcc:SoftVersion}), gcc-4.6-locales (>= ${gcc:SoftVersion}), libgcc1-dbg, libgomp1-dbg, libquadmath0-dbg, libmudflap0-dbg, ${dep:libcloog}, ${dep:gold}
+Provides: c-compiler
+Description: GNU C compiler
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+
+Package: gcc-4.6-multilib
+Architecture: amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc
+Section: devel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gcc-4.6 (= ${gcc:Version}), ${dep:libcbiarchdev}, ${dep:libgccbiarch}, ${dep:libsspbiarch}, ${dep:libgompbiarch}, ${dep:libqmathbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: ${dep:libmudflapbiarch}
+Description: GNU C compiler (multilib files)
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+
+Package: gcc-4.6-plugin-dev
+Architecture: any
+Section: devel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gcc-4.6 (= ${gcc:Version}), libgmp-dev (>= 2:5.0.1~), ${shlibs:Depends}, ${misc:Depends}
+Description: Files for GNU GCC plugin development.
+ This package contains (header) files for GNU GCC plugin development. It
+ is only used for the development of GCC plugins, but not needed to run
+ plugins.
+
+Package: gcc-4.6-hppa64
+Architecture: hppa
+Section: devel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Conflicts: gcc-3.3-hppa64 (<= 1:3.3.4-5), gcc-3.4-hppa64 (<= 3.4.1-3)
+Description: GNU C compiler (cross compiler for hppa64)
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+
+Package: gcc-4.6-spu
+Architecture: powerpc ppc64
+Section: devel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), binutils-spu (>= 2.18.1~cvs20080103-3), newlib-spu, ${shlibs:Depends}, ${misc:Depends}
+Provides: spu-gcc
+Description: SPU cross-compiler (preprocessor and C compiler)
+ GNU Compiler Collection for the Cell Broadband Engine SPU (preprocessor
+ and C compiler).
+
+Package: g++-4.6-spu
+Architecture: powerpc ppc64
+Section: devel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gcc-4.6-spu (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Provides: spu-g++
+Description: SPU cross-compiler (C++ compiler)
+ GNU Compiler Collection for the Cell Broadband Engine SPU (C++ compiler).
+
+Package: gfortran-4.6-spu
+Architecture: powerpc ppc64
+Section: devel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gcc-4.6-spu (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Provides: spu-gfortran
+Description: SPU cross-compiler (Fortran compiler)
+ GNU Compiler Collection for the Cell Broadband Engine SPU (Fortran compiler).
+
+Package: cpp-4.6
+Architecture: any
+Section: interpreters
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Suggests: gcc-4.6-locales (>= ${gcc:SoftVersion})
+Replaces: gcc-4.6 (<< 4.6.1-9)
+Description: GNU C preprocessor
+ A macro processor that is used automatically by the GNU C compiler
+ to transform programs before actual compilation.
+ .
+ This package has been separated from gcc for the benefit of those who
+ require the preprocessor but not the compiler.
+
+Package: gcc-4.6-locales
+Architecture: all
+Section: devel
+Priority: optional
+Depends: gcc-4.6-base (>= ${gcc:SoftVersion}), cpp-4.6 (>= ${gcc:SoftVersion}), ${misc:Depends}
+Recommends: gcc-4.6 (>= ${gcc:SoftVersion})
+Description: GCC, the GNU compiler collection (native language support files)
+ Native language support for GCC. Lets GCC speak your language,
+ if translations are available.
+ .
+ Please do NOT submit bug reports in other languages than "C".
+ Always reset your language settings to use the "C" locales.
+
+Package: g++-4.6
+Architecture: any
+Section: devel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gcc-4.6 (= ${gcc:Version}), libstdc++6-4.6-dev (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Provides: c++-compiler, c++abi2-dev
+Suggests: ${gxx:multilib}, gcc-4.6-doc (>= ${gcc:SoftVersion}), libstdc++6-4.6-dbg
+Description: GNU C++ compiler
+ This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.
+
+Package: g++-4.6-multilib
+Architecture: amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc
+Section: devel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), g++-4.6 (= ${gcc:Version}), gcc-4.6-multilib (= ${gcc:Version}), ${dep:libcxxbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: ${dep:libcxxbiarchdbg}
+Description: GNU C++ compiler (multilib files)
+ This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+
+Package: libmudflap0
+Architecture: any
+Multi-Arch: same
+Pre-Depends: multiarch-support
+Section: libs
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: GCC mudflap shared support libraries
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: libmudflap0-dbg
+Architecture: any
+Multi-Arch: same
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libmudflap0 (= ${gcc:Version}), ${misc:Depends}
+Description: GCC mudflap shared support libraries (debug symbols)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib32mudflap0
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Section: libs
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libmudflap0 (<< 4.1)
+Conflicts: ${confl:lib32}
+Description: GCC mudflap shared support libraries (32bit)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib32mudflap0-dbg
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib32mudflap0 (= ${gcc:Version}), ${misc:Depends}
+Description: GCC mudflap shared support libraries (32 bit debug symbols)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib64mudflap0
+Architecture: i386 powerpc sparc s390 mips mipsel
+Section: libs
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libmudflap0 (<< 4.1)
+Description: GCC mudflap shared support libraries (64bit)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib64mudflap0-dbg
+Architecture: i386 powerpc sparc s390 mips mipsel
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib64mudflap0 (= ${gcc:Version}), ${misc:Depends}
+Description: GCC mudflap shared support libraries (64 bit debug symbols)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: libn32mudflap0
+Architecture: mips mipsel
+Section: libs
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libmudflap0 (<< 4.1)
+Description: GCC mudflap shared support libraries (n32)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: libn32mudflap0-dbg
+Architecture: mips mipsel
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libn32mudflap0 (= ${gcc:Version}), ${misc:Depends}
+Description: GCC mudflap shared support libraries (n32 debug symbols)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: libmudflap0-4.6-dev
+Architecture: any
+Section: libdevel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), libmudflap0 (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: ${sug:libmudflapdev}
+Conflicts: libmudflap0-dev
+Description: GCC mudflap support libraries (development files)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+ .
+ This package contains the headers and the static libraries.
+
+Package: libgomp1
+Section: libs
+Architecture: any
+Multi-Arch: same
+Pre-Depends: multiarch-support
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: libgomp1-dbg
+Architecture: any
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libgomp1 (= ${gcc:Version}), ${misc:Depends}
+Multi-Arch: same
+Description: GCC OpenMP (GOMP) support library (debug symbols)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: lib32gomp1
+Section: libs
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: GCC OpenMP (GOMP) support library (32bit)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: lib32gomp1-dbg
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib32gomp1 (= ${gcc:Version}), ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (32 bit debug symbols)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: lib64gomp1
+Section: libs
+Architecture: i386 powerpc sparc s390 mips mipsel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (64bit)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: lib64gomp1-dbg
+Architecture: i386 powerpc sparc s390 mips mipsel
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib64gomp1 (= ${gcc:Version}), ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (64bit debug symbols)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: libn32gomp1
+Section: libs
+Architecture: mips mipsel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (n32)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: libn32gomp1-dbg
+Architecture: mips mipsel
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libn32gomp1 (= ${gcc:Version}), ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (n32 debug symbols)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+
+Package: libquadmath0
+Section: libs
+Architecture: any
+Multi-Arch: same
+Pre-Depends: multiarch-support
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: GCC Quad-Precision Math Library
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype. The library is used to provide on such
+ targets the REAL(16) type in the GNU Fortran compiler.
+
+Package: libquadmath0-dbg
+Architecture: any
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libquadmath0 (= ${gcc:Version}), ${misc:Depends}
+Multi-Arch: same
+Description: GCC Quad-Precision Math Library (debug symbols)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype.
+
+Package: lib32quadmath0
+Section: libs
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: GCC Quad-Precision Math Library (32bit)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype. The library is used to provide on such
+ targets the REAL(16) type in the GNU Fortran compiler.
+
+Package: lib32quadmath0-dbg
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib32quadmath0 (= ${gcc:Version}), ${misc:Depends}
+Description: GCC Quad-Precision Math Library (32 bit debug symbols)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype.
+
+Package: lib64quadmath0
+Section: libs
+Architecture: i386 powerpc sparc s390 mips mipsel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC Quad-Precision Math Library (64bit)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype. The library is used to provide on such
+ targets the REAL(16) type in the GNU Fortran compiler.
+
+Package: lib64quadmath0-dbg
+Architecture: i386 powerpc sparc s390 mips mipsel
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib64quadmath0 (= ${gcc:Version}), ${misc:Depends}
+Description: GCC Quad-Precision Math Library (64bit debug symbols)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype.
+
+Package: libn32quadmath0
+Section: libs
+Architecture: mips mipsel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC Quad-Precision Math Library (n32)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype. The library is used to provide on such
+ targets the REAL(16) type in the GNU Fortran compiler.
+
+Package: libn32quadmath0-dbg
+Architecture: mips mipsel
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libn32quadmath0 (= ${gcc:Version}), ${misc:Depends}
+Description: GCC Quad-Precision Math Library (n32 debug symbols)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype.
+
+Package: gobjc++-4.6
+Architecture: any
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gobjc-4.6 (= ${gcc:Version}), g++-4.6 (= ${gcc:Version}), ${shlibs:Depends}, libobjc3 (>= ${gcc:Version}), ${misc:Depends}
+Suggests: ${gobjcxx:multilib}, gcc-4.6-doc (>= ${gcc:SoftVersion})
+Provides: objc++-compiler
+Description: GNU Objective-C++ compiler
+ This is the GNU Objective-C++ compiler, which compiles
+ Objective-C++ on platforms supported by the gcc compiler. It uses the
+ gcc backend to generate optimized code.
+
+Package: gobjc++-4.6-multilib
+Architecture: amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc
+Section: devel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gobjc++-4.6 (= ${gcc:Version}), g++-4.6-multilib (= ${gcc:Version}), gobjc-4.6-multilib (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: GNU Objective-C++ compiler (multilib files)
+ This is the GNU Objective-C++ compiler, which compiles Objective-C++ on
+ platforms supported by the gcc compiler.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+
+Package: gobjc-4.6
+Architecture: any
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gcc-4.6 (= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, libobjc3 (>= ${gcc:Version}), ${misc:Depends}
+Suggests: ${gobjc:multilib}, gcc-4.6-doc (>= ${gcc:SoftVersion}), libobjc3-dbg
+Provides: objc-compiler
+Description: GNU Objective-C compiler
+ This is the GNU Objective-C compiler, which compiles
+ Objective-C on platforms supported by the gcc compiler. It uses the
+ gcc backend to generate optimized code.
+
+Package: gobjc-4.6-multilib
+Architecture: amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc
+Section: devel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gobjc-4.6 (= ${gcc:Version}), gcc-4.6-multilib (= ${gcc:Version}), ${dep:libobjcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GNU Objective-C compiler (multilib files)
+ This is the GNU Objective-C compiler, which compiles Objective-C on platforms
+ supported by the gcc compiler.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+
+Package: libobjc3
+Section: libs
+Architecture: any
+Multi-Arch: same
+Pre-Depends: multiarch-support
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: libobjc3-dbg
+Section: debug
+Architecture: any
+Multi-Arch: same
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libobjc3 (= ${gcc:Version}), libgcc1-dbg, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (debug symbols)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: lib64objc3
+Section: libs
+Architecture: i386 powerpc sparc s390 mips mipsel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (64bit)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: lib64objc3-dbg
+Section: debug
+Architecture: i386 powerpc sparc s390 mips mipsel
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib64objc3 (= ${gcc:Version}), lib64gcc1-dbg, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (64 bit debug symbols)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: lib32objc3
+Section: libs
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: Runtime library for GNU Objective-C applications (32bit)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: lib32objc3-dbg
+Section: debug
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib32objc3 (= ${gcc:Version}), lib32gcc1-dbg, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (32 bit debug symbols)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: libn32objc3
+Section: libs
+Architecture: mips mipsel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (n32)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: libn32objc3-dbg
+Section: debug
+Architecture: mips mipsel
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libn32objc3 (= ${gcc:Version}), libn32gcc1-dbg, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (n32 debug symbols)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: gfortran-4.6
+Architecture: any
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gcc-4.6 (= ${gcc:Version}), libgfortran3 (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends}
+Provides: fortran95-compiler
+Suggests: ${gfortran:multilib}, gfortran-4.6-doc, libgfortran3-dbg
+Replaces: libgfortran3-dev
+Description: GNU Fortran 95 compiler
+ This is the GNU Fortran compiler, which compiles
+ Fortran 95 on platforms supported by the gcc compiler. It uses the
+ gcc backend to generate optimized code.
+
+Package: gfortran-4.6-multilib
+Architecture: amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc
+Section: devel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gfortran-4.6 (= ${gcc:Version}), gcc-4.6-multilib (= ${gcc:Version}), ${dep:libgfortranbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GNU Fortran 95 compiler (multilib files)
+ This is the GNU Fortran compiler, which compiles Fortran 95 on platforms
+ supported by the gcc compiler.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+
+Package: libgfortran3
+Section: libs
+Architecture: any
+Multi-Arch: same
+Pre-Depends: multiarch-support
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Fortran applications
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: libgfortran3-dbg
+Section: debug
+Architecture: any
+Multi-Arch: same
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libgfortran3 (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (debug symbols)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: lib64gfortran3
+Section: libs
+Architecture: i386 powerpc sparc s390 mips mipsel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (64bit)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: lib64gfortran3-dbg
+Section: debug
+Architecture: i386 powerpc sparc s390 mips mipsel
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib64gfortran3 (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (64bit debug symbols)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: lib32gfortran3
+Section: libs
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: Runtime library for GNU Fortran applications (32bit)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: lib32gfortran3-dbg
+Section: debug
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib32gfortran3 (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (32 bit debug symbols)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: libn32gfortran3
+Section: libs
+Architecture: mips mipsel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (n32)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: libn32gfortran3-dbg
+Section: debug
+Architecture: mips mipsel
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libn32gfortran3 (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (n32 debug symbols)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: gccgo-4.6
+Architecture: any
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gcc-4.6 (= ${gcc:Version}), libgo0 (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends}
+Provides: go-compiler
+Suggests: ${go:multilib}, gccgo-4.6-doc, libgo0-dbg
+Description: GNU Go compiler
+ This is the GNU Go compiler, which compiles Go on platforms supported
+ by the gcc compiler. It uses the gcc backend to generate optimized code.
+
+Package: gccgo-4.6-multilib
+Architecture: amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc
+Section: devel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gccgo-4.6 (= ${gcc:Version}), gcc-4.6-multilib (= ${gcc:Version}), ${dep:libgobiarch}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: ${dep:libgobiarchdbg}
+Description: GNU Go compiler (multilib files)
+ This is the GNU Go compiler, which compiles Go on platforms supported
+ by the gcc compiler.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+
+Package: libgo0
+Section: libs
+Architecture: any
+Multi-Arch: same
+Pre-Depends: multiarch-support
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Go applications
+ Library needed for GNU Go applications linked against the
+ shared library.
+
+Package: libgo0-dbg
+Section: debug
+Architecture: any
+Multi-Arch: same
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libgo0 (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Go applications (debug symbols)
+ Library needed for GNU Go applications linked against the
+ shared library.
+
+Package: lib64go0
+Section: libs
+Architecture: i386 powerpc sparc s390 mips mipsel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Go applications (64bit)
+ Library needed for GNU Go applications linked against the
+ shared library.
+
+Package: lib64go0-dbg
+Section: debug
+Architecture: i386 powerpc sparc s390 mips mipsel
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib64go0 (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Go applications (64bit debug symbols)
+ Library needed for GNU Go applications linked against the
+ shared library.
+
+Package: lib32go0
+Section: libs
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: Runtime library for GNU Go applications (32bit)
+ Library needed for GNU Go applications linked against the
+ shared library.
+
+Package: lib32go0-dbg
+Section: debug
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib32go0 (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Go applications (32 bit debug symbols)
+ Library needed for GNU Go applications linked against the
+ shared library.
+
+Package: libn32go0
+Section: libs
+Architecture: mips mipsel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Go applications (n32)
+ Library needed for GNU Go applications linked against the
+ shared library.
+
+Package: libn32go0-dbg
+Section: debug
+Architecture: mips mipsel
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libn32go0 (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Go applications (n32 debug symbols)
+ Library needed for GNU Go applications linked against the
+ shared library.
+
+Package: libstdc++6
+Architecture: any
+Section: libs
+Priority: required
+Depends: gcc-4.6-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Multi-Arch: same
+Pre-Depends: multiarch-support
+Conflicts: scim (<< 1.4.2-1)
+Description: GNU Standard C++ Library v3
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+
+Package: lib32stdc++6
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Section: libs
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib32gcc1, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: GNU Standard C++ Library v3 (32 bit Version)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+
+Package: lib64stdc++6
+Architecture: i386 powerpc sparc s390 mips mipsel
+Section: libs
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${shlibs:Depends}, lib64gcc1, ${misc:Depends}
+Description: GNU Standard C++ Library v3 (64bit)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+
+Package: libn32stdc++6
+Architecture: mips mipsel
+Section: libs
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), ${shlibs:Depends}, libn32gcc1, ${misc:Depends}
+Description: GNU Standard C++ Library v3 (n32)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+
+Package: libstdc++6-4.6-dev
+Architecture: any
+Section: libdevel
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), g++-4.6 (= ${gcc:Version}), libstdc++6 (>= ${gcc:Version}), ${dep:libcdev}, ${misc:Depends}
+Conflicts: libg++27-dev, libg++272-dev (<< 2.7.2.8-1), libstdc++2.8-dev, libg++2.8-dev, libstdc++2.9-dev, libstdc++2.9-glibc2.1-dev, libstdc++2.10-dev (<< 1:2.95.3-2), libstdc++3.0-dev
+Suggests: libstdc++6-4.6-doc
+Provides: libstdc++-dev
+Description: GNU Standard C++ Library v3 (development files)
+ This package contains the headers and static library files necessary for
+ building C++ programs which use libstdc++.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+
+Package: libstdc++6-4.6-pic
+Architecture: any
+Section: libdevel
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libstdc++6 (>= ${gcc:Version}), libstdc++6-4.6-dev (= ${gcc:Version}), ${misc:Depends}
+Description: GNU Standard C++ Library v3 (shared library subset kit)
+ This is used to develop subsets of the libstdc++ shared libraries for
+ use on custom installation floppies and in embedded systems.
+ .
+ Unless you are making one of those, you will not need this package.
+
+Package: libstdc++6-4.6-dbg
+Architecture: any
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libstdc++6 (>= ${gcc:Version}), libgcc1-dbg, ${shlibs:Depends}, ${misc:Depends}
+Recommends: libstdc++6-4.6-dev (= ${gcc:Version})
+Conflicts: libstdc++5-dbg, libstdc++5-3.3-dbg, libstdc++6-dbg, libstdc++6-4.0-dbg, libstdc++6-4.1-dbg, libstdc++6-4.2-dbg, libstdc++6-4.3-dbg, libstdc++6-4.4-dbg, libstdc++6-4.5-dbg
+Description: GNU Standard C++ Library v3 (debugging files)
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+
+Package: lib32stdc++6-4.6-dbg
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib32stdc++6 (>= ${gcc:Version}), libstdc++6-4.6-dev (= ${gcc:Version}), lib32gcc1-dbg, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: lib32stdc++6-dbg, lib32stdc++6-4.0-dbg, lib32stdc++6-4.1-dbg, lib32stdc++6-4.2-dbg, lib32stdc++6-4.3-dbg, lib32stdc++6-4.4-dbg, lib32stdc++6-4.5-dbg
+Description: GNU Standard C++ Library v3 (debugging files)
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+
+Package: lib64stdc++6-4.6-dbg
+Architecture: i386 powerpc sparc s390 mips mipsel
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), lib64stdc++6 (>= ${gcc:Version}), libstdc++6-4.6-dev (= ${gcc:Version}), lib64gcc1-dbg, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: lib64stdc++6-dbg, lib64stdc++6-4.0-dbg, lib64stdc++6-4.1-dbg, lib64stdc++6-4.2-dbg, lib64stdc++6-4.3-dbg, lib64stdc++6-4.4-dbg, lib64stdc++6-4.5-dbg
+Description: GNU Standard C++ Library v3 (debugging files)
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+
+Package: libn32stdc++6-4.6-dbg
+Architecture: mips mipsel
+Section: debug
+Priority: extra
+Depends: gcc-4.6-base (= ${gcc:Version}), libn32stdc++6 (>= ${gcc:Version}), libstdc++6-4.6-dev (= ${gcc:Version}), libn32gcc1-dbg, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: libn32stdc++6-dbg, libn32stdc++6-4.0-dbg, libn32stdc++6-4.1-dbg, libn32stdc++6-4.2-dbg, libn32stdc++6-4.3-dbg, libn32stdc++6-4.4-dbg, libn32stdc++6-4.5-dbg
+Description: GNU Standard C++ Library v3 (debugging files)
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+
+Package: libstdc++6-4.6-doc
+Architecture: all
+Section: doc
+Priority: optional
+Depends: gcc-4.6-base (>= ${gcc:SoftVersion}), ${misc:Depends}
+Conflicts: libstdc++5-doc, libstdc++5-3.3-doc, libstdc++6-doc, libstdc++6-4.0-doc, libstdc++6-4.1-doc, libstdc++6-4.2-doc, libstdc++6-4.3-doc, libstdc++6-4.4-doc, libstdc++6-4.5-doc
+Description: GNU Standard C++ Library v3 (documentation files)
+ This package contains documentation files for the GNU stdc++ library.
+ .
+ One set is the distribution documentation, the other set is the
+ source documentation including a namespace list, class hierarchy,
+ alphabetical list, compound list, file list, namespace members,
+ compound members and file members.
+
+Package: gcc-4.6-soft-float
+Architecture: arm armel armhf
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gcc-4.6 (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Conflicts: gcc-4.4-soft-float, gcc-4.5-soft-float
+Description: GCC soft-floating-point gcc libraries (ARM)
+ These are versions of basic static libraries such as libgcc.a compiled
+ with the -msoft-float option, for CPUs without a floating-point unit.
+
+Package: fixincludes
+Architecture: any
+Priority: optional
+Depends: gcc-4.6-base (= ${gcc:Version}), gcc-4.6 (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: Fix non-ANSI header files
+ FixIncludes was created to fix non-ANSI system header files. Many
+ system manufacturers supply proprietary headers that are not ANSI compliant.
+ The GNU compilers cannot compile non-ANSI headers. Consequently, the
+ FixIncludes shell script was written to fix the header files.
+ .
+ Not all packages with header files are installed on the system, when the
+ package is built, so we make fixincludes available at build time of other
+ packages, such that checking tools like lintian can make use of it.
+
+Package: gcc-4.6-source
+Architecture: all
+Priority: optional
+Depends: make (>= 3.81), autoconf2.64, automake, quilt, patchutils, gawk, ${misc:Depends}
+Description: Source of the GNU Compiler Collection
+ This package contains the sources and patches which are needed to
+ build the GNU Compiler Collection (GCC).
diff --git a/debian/control.m4 b/debian/control.m4
new file mode 100644
index 0000000..f6900f8
--- /dev/null
+++ b/debian/control.m4
@@ -0,0 +1,2447 @@
+divert(-1)
+
+define(`checkdef',`ifdef($1, , `errprint(`error: undefined macro $1
+')m4exit(1)')')
+define(`errexit',`errprint(`error: undefined macro `$1'
+')m4exit(1)')
+
+dnl The following macros must be defined, when called:
+dnl ifdef(`SRCNAME', , errexit(`SRCNAME'))
+dnl ifdef(`PV', , errexit(`PV'))
+dnl ifdef(`ARCH', , errexit(`ARCH'))
+
+dnl The architecture will also be defined (-D__i386__, -D__powerpc__, etc.)
+
+define(`PN', `$1')
+ifdef(`PRI', `', `
+ define(`PRI', `$1')
+')
+define(`MAINTAINER', `Debian GCC Maintainers <debian-gcc@lists.debian.org>')
+
+define(`ifenabled', `ifelse(index(enabled_languages, `$1'), -1, `dnl', `$2')')
+
+divert`'dnl
+dnl --------------------------------------------------------------------------
+Source: SRCNAME
+Section: devel
+Priority: PRI(optional)
+ifelse(DIST,`Ubuntu',`dnl
+ifelse(regexp(SRCNAME, `gnat\|gdc-'),0,`dnl
+Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
+', `dnl
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+')dnl SRCNAME
+XSBC-Original-Maintainer: MAINTAINER
+', `dnl
+Maintainer: MAINTAINER
+')dnl DIST
+ifelse(regexp(SRCNAME, `gnat'),0,`dnl
+Uploaders: Ludovic Brenta <lbrenta@debian.org>
+', regexp(SRCNAME, `gdc'),0,`dnl
+Uploaders: Iain Buclaw <ibuclaw@ubuntu.com>, Arthur Loiret <aloiret@debian.org>
+', `dnl
+Uploaders: Matthias Klose <doko@debian.org>, Arthur Loiret <aloiret@debian.org>
+')dnl SRCNAME
+Standards-Version: 3.9.2
+ifdef(`TARGET',`dnl cross
+Build-Depends: DPKG_BUILD_DEP debhelper (>= 5.0.62), LIBC_BUILD_DEP, LIBC_BIARCH_BUILD_DEP LIBUNWIND_BUILD_DEP LIBATOMIC_OPS_BUILD_DEP AUTOGEN_BUILD_DEP AUTO_BUILD_DEP SOURCE_BUILD_DEP CROSS_BUILD_DEP CLOOG_BUILD_DEP MPC_BUILD_DEP MPFR_BUILD_DEP GMP_BUILD_DEP ELF_BUILD_DEP, zlib1g-dev, gawk, lzma, xz-utils, patchutils, BINUTILS_BUILD_DEP, bison (>= 1:2.3), flex, realpath (>= 1.9.12), lsb-release, make (>= 3.81), quilt
+',`dnl native
+Build-Depends: DPKG_BUILD_DEP debhelper (>= 5.0.62), GCC_MULTILIB_BUILD_DEP LIBC_BUILD_DEP, LIBC_BIARCH_BUILD_DEP AUTO_BUILD_DEP AUTOGEN_BUILD_DEP libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], zlib1g-dev, gawk, lzma, xz-utils, patchutils, BINUTILS_BUILD_DEP, binutils-hppa64 (>= BINUTILSV) [hppa], gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext, texinfo (>= 4.3), FORTRAN_BUILD_DEP locales [locale_no_archs], procps, sharutils, JAVA_BUILD_DEP GNAT_BUILD_DEP GDC_BUILD_DEP SPU_BUILD_DEP CLOOG_BUILD_DEP MPC_BUILD_DEP MPFR_BUILD_DEP GMP_BUILD_DEP ELF_BUILD_DEP CHECK_BUILD_DEP realpath (>= 1.9.12), chrpath, lsb-release, make (>= 3.81), quilt
+ifelse(regexp(SRCNAME, `gcc-snapshot'),0,`dnl
+Build-Depends-Indep: LIBSTDCXX_BUILD_INDEP JAVA_BUILD_INDEP
+')dnl
+')dnl
+Build-Conflicts: binutils-gold
+ifelse(regexp(SRCNAME, `gnat'),0,`dnl
+Homepage: http://gcc.gnu.org/
+', regexp(SRCNAME, `gdc'),0,`dnl
+Homepage: http://bitbucket.org/goshawk/gdc/
+', `dnl
+Homepage: http://gcc.gnu.org/
+')dnl SRCNAME
+XS-Vcs-Browser: http://svn.debian.org/viewsvn/gcccvs/branches/sid/gcc`'PV/
+XS-Vcs-Svn: svn://svn.debian.org/svn/gcccvs/branches/sid/gcc`'PV
+
+ifelse(regexp(SRCNAME, `gcc-snapshot'),0,`dnl
+Package: gcc-snapshot`'TS
+Architecture: any
+Section: devel
+Priority: extra
+Depends: binutils`'TS (>= ${binutils:Version}), ${dep:libcbiarchdev}, ${dep:libcdev}, ${dep:libunwinddev}, ${snap:depends}, ${shlibs:Depends}, ${dep:ecj}, python, ${misc:Depends}
+Recommends: ${snap:recommends}
+Suggests: ${dep:gold}
+Provides: c++-compiler`'TS`'ifdef(`TARGET)',`',`, c++abi2-dev')
+Description: A SNAPSHOT of the GNU Compiler Collection
+ This package contains a recent development SNAPSHOT of all files
+ contained in the GNU Compiler Collection (GCC).
+ .
+ The source code for this package has been exported from SVN trunk.
+ .
+ DO NOT USE THIS SNAPSHOT FOR BUILDING DEBIAN PACKAGES!
+ .
+ This package will NEVER hit the testing distribution. It is used for
+ tracking gcc bugs submitted to the Debian BTS in recent development
+ versions of gcc.
+',`dnl gcc-X.Y
+
+dnl default base package dependencies
+define(`BASETARGET', `')
+define(`BASEDEP', `gcc`'PV-base (= ${gcc:Version})')
+define(`SOFTBASEDEP', `gcc`'PV-base (>= ${gcc:SoftVersion})')
+
+dnl base, when building libgcc out of the gcj source; needed if new symbols
+dnl in libgcc are used in libgcj.
+ifelse(index(SRCNAME, `gcj'), 0, `
+define(`BASEDEP', `gcj`'PV-base (= ${gcj:Version})')
+define(`SOFTBASEDEP', `gcj`'PV-base (>= ${gcj:SoftVersion})')
+')
+
+ifdef(`TARGET', `', `
+ifenabled(`gccbase',`
+
+Package: gcc`'PV-base
+Architecture: any
+ifdef(`MULTIARCH', `Multi-Arch: same
+')`'dnl
+Section: libs
+Priority: PRI(required)
+Depends: ${misc:Depends}
+Replaces: ${base:Replaces}
+Breaks: gcj-4.6-base (<< 4.6.1-4~), gnat-4.6 (<< 4.6.1-5~), dehydra (<= 0.9.hg20110609-2)
+Description: GCC, the GNU Compiler Collection (base package)
+ This package contains files common to all languages and libraries
+ contained in the GNU Compiler Collection (GCC).
+ifdef(`BASE_ONLY', `dnl
+ .
+ This version of GCC is not yet available for this architecture.
+ Please use the compilers from the gcc-snapshot package for testing.
+')`'dnl
+')`'dnl
+')`'dnl native
+
+ifenabled(`gccxbase',`
+dnl override default base package dependencies to cross version
+dnl This creates a toolchain that doesnt depend on the system -base packages
+define(`BASETARGET', `PV`'TS')
+define(`BASEDEP', `gcc`'BASETARGET-base (= ${gcc:Version})')
+define(`SOFTBASEDEP', `gcc`'BASETARGET-base (>= ${gcc:SoftVersion})')
+
+Package: gcc`'BASETARGET-base
+Architecture: any
+Section: devel
+Priority: PRI(extra)
+Depends: ${misc:Depends}
+Description: GCC, the GNU Compiler Collection (base package)
+ This package contains files common to all languages and libraries
+ contained in the GNU Compiler Collection (GCC).
+')`'dnl
+
+ifenabled(`java',`
+Package: gcj`'PV-base
+Architecture: any
+Section: libs
+Priority: PRI(optional)
+Depends: ${misc:Depends}
+Description: GCC, the GNU Compiler Collection (gcj base package)
+ This package contains files common to all java related packages
+ built from the GNU Compiler Collection (GCC).
+')`'dnl java
+
+ifenabled(`ada',`
+Package: gnat`'PV-base
+Architecture: any
+Section: libs
+Priority: PRI(optional)
+Depends: ${misc:Depends}
+Breaks: gcc-4.6 (<< 4.6.1-8~)
+Description: GNU Ada compiler (common files)
+ GNAT is a compiler for the Ada programming language. It produces optimized
+ code on platforms supported by the GNU Compiler Collection (GCC).
+ .
+ This package contains files common to all GNAT related packages.
+')`'dnl ada
+
+ifenabled(`libgcc',`
+Package: libgcc1`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',required)
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libgcc1-TARGET-dcv1
+',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+Breaks: ${multiarch:breaks}
+'))`'dnl
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `')
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libgcc1-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libgcc1`'LS (= ${gcc:EpochVersion}), ${misc:Depends}
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `')
+ Debug symbols for the GCC support library.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libgcc2`'LS
+Architecture: ifdef(`TARGET',`all',`m68k')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',required)
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libgcc2-TARGET-dcv1
+',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+Breaks: ${multiarch:breaks}
+'))`'dnl
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `')
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libgcc2-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`m68k')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libgcc2`'LS (= ${gcc:Version}), ${misc:Depends}
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `')
+ Debug symbols for the GCC support library.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libgcc
+
+ifenabled(`lib4gcc',`
+Package: libgcc4`'LS
+Architecture: ifdef(`TARGET',`all',`hppa')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+Breaks: ${multiarch:breaks}
+'))`'dnl
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',required)
+Depends: ifdef(`STANDALONEJAVA',`gcj`'PV-base (>= ${gcj:Version})',`BASEDEP'), ${shlibs:Depends}, ${misc:Depends}
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `')
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libgcc4-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`hppa')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Section: debug
+Priority: extra
+Depends: BASEDEP, libgcc4`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `')
+ Debug symbols for the GCC support library.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl lib4gcc
+
+ifenabled(`lib64gcc',`
+Package: lib64gcc1`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${misc:Depends}
+ifdef(`TARGET',`Provides: lib64gcc1-TARGET-dcv1
+',`')`'dnl
+Conflicts: libgcc`'GCC_SO`'LS (<= 1:3.3-0pre9)
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') (64bit)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: lib64gcc1-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib64gcc1`'LS (= ${gcc:EpochVersion}), ${misc:Depends}
+Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `')
+ Debug symbols for the GCC support library.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl lib64gcc
+
+ifenabled(`lib32gcc',`
+Package: lib32gcc1`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: extra
+Depends: BASEDEP, ${dep:libcbiarch}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+ifdef(`TARGET',`Provides: lib32gcc1-TARGET-dcv1
+',`')`'dnl
+Description: GCC support library (32 bit Version)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: lib32gcc1-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib32gcc1`'LS (= ${gcc:EpochVersion}), ${misc:Depends}
+Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `')
+ Debug symbols for the GCC support library.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl lib32gcc1
+
+ifenabled(`libneongcc',`
+Package: libgcc1-neon`'LS
+Architecture: NEON_ARCHS
+Section: libs
+Priority: extra
+Depends: BASEDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC support library [neon optimized]
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ .
+ This set of libraries is optimized to use a NEON coprocessor, and will
+ be selected instead when running under systems which have one.
+')`'dnl libneongcc1
+
+ifenabled(`libhfgcc',`
+Package: libhfgcc1`'LS
+Architecture: ifdef(`TARGET',`all',`biarchhf_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libhfgcc1-TARGET-dcv1
+',`')`'dnl
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') (hard float ABI)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libhfgcc1-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchhf_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libhfgcc1`'LS (= ${gcc:EpochVersion}), ${misc:Depends}
+Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `')
+ Debug symbols for the GCC support library.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libhfgcc
+
+ifenabled(`libsfgcc',`
+Package: libsfgcc1`'LS
+Architecture: ifdef(`TARGET',`all',`biarchsf_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libsfgcc1-TARGET-dcv1
+',`')`'dnl
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') (soft float ABI)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libsfgcc1-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchsf_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libsfgcc1`'LS (= ${gcc:EpochVersion}), ${misc:Depends}
+Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `')
+ Debug symbols for the GCC support library.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libsfgcc
+
+ifenabled(`libn32gcc',`
+Package: libn32gcc1`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libn32gcc1-TARGET-dcv1
+',`')`'dnl
+Conflicts: libgcc`'GCC_SO`'LS (<= 1:3.3-0pre9)
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') (n32)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libn32gcc1-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libn32gcc1`'LS (= ${gcc:EpochVersion}), ${misc:Depends}
+Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `')
+ Debug symbols for the GCC support library.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libn32gcc
+
+ifdef(`TARGET', `', `
+ifenabled(`libgmath',`
+Package: libgccmath`'GCCMATH_SO`'LS
+Architecture: i386
+ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+')`'dnl
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC math support library
+ Support library for GCC.
+
+Package: lib32gccmath`'GCCMATH_SO`'LS
+Architecture: amd64
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC math support library (32bit)
+ Support library for GCC.
+
+Package: lib64gccmath`'GCCMATH_SO`'LS
+Architecture: i386
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC math support library (64bit)
+ Support library for GCC.
+')`'dnl
+')`'dnl native
+
+ifenabled(`cdev',`
+Package: gcc`'PV`'TS
+Architecture: any
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, cpp`'PV`'TS (= ${gcc:Version}), binutils`'TS (>= ${binutils:Version}), ${dep:libgcc}, ${dep:libssp}, ${dep:libgomp}, ${dep:libqmath}, ${dep:libunwinddev}, ${shlibs:Depends}, ${misc:Depends}
+Recommends: ${dep:libcdev}
+Suggests: ${gcc:multilib}, libmudflap`'MF_SO`'PV-dev`'LS (>= ${gcc:Version}), gcc`'PV-doc (>= ${gcc:SoftVersion}), gcc`'PV-locales (>= ${gcc:SoftVersion}), libgcc`'GCC_SO-dbg`'LS, libgomp`'GOMP_SO-dbg`'LS, libquadmath`'QMATH_SO-dbg`'LS, libmudflap`'MF_SO-dbg`'LS, ${dep:libcloog}, ${dep:gold}
+Provides: c-compiler`'TS
+Description: GNU C compiler`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+ifdef(`TARGET', `dnl
+ .
+ This package contains C cross-compiler for TARGET architecture.
+')`'dnl
+
+ifenabled(`multilib',`
+Package: gcc`'PV-multilib`'TS
+Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS)
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), ${dep:libcbiarchdev}, ${dep:libgccbiarch}, ${dep:libsspbiarch}, ${dep:libgompbiarch}, ${dep:libqmathbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: ${dep:libmudflapbiarch}
+Description: GNU C compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+
+ifenabled(`plugindev',`
+Package: gcc`'PV-plugin-dev`'TS
+Architecture: any
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), GMP_BUILD_DEP ${shlibs:Depends}, ${misc:Depends}
+Description: Files for GNU GCC plugin development.
+ This package contains (header) files for GNU GCC plugin development. It
+ is only used for the development of GCC plugins, but not needed to run
+ plugins.
+')`'dnl plugindev
+')`'dnl cdev
+
+ifenabled(`cdev',`
+Package: gcc`'PV-hppa64
+Architecture: ifdef(`TARGET',`any',hppa)
+Section: devel
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: gcc-3.3-hppa64 (<= 1:3.3.4-5), gcc-3.4-hppa64 (<= 3.4.1-3)
+Description: GNU C compiler (cross compiler for hppa64)
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+
+ifdef(`TARGET', `', `
+Package: gcc`'PV-spu
+Architecture: powerpc ppc64
+Section: devel
+Priority: PRI(optional)
+Depends: BASEDEP, binutils-spu (>= 2.18.1~cvs20080103-3), newlib-spu, ${shlibs:Depends}, ${misc:Depends}
+Provides: spu-gcc
+Description: SPU cross-compiler (preprocessor and C compiler)
+ GNU Compiler Collection for the Cell Broadband Engine SPU (preprocessor
+ and C compiler).
+
+Package: g++`'PV-spu
+Architecture: powerpc ppc64
+Section: devel
+Priority: PRI(optional)
+Depends: BASEDEP, gcc`'PV-spu (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Provides: spu-g++
+Description: SPU cross-compiler (C++ compiler)
+ GNU Compiler Collection for the Cell Broadband Engine SPU (C++ compiler).
+
+Package: gfortran`'PV-spu
+Architecture: powerpc ppc64
+Section: devel
+Priority: PRI(optional)
+Depends: BASEDEP, gcc`'PV-spu (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Provides: spu-gfortran
+Description: SPU cross-compiler (Fortran compiler)
+ GNU Compiler Collection for the Cell Broadband Engine SPU (Fortran compiler).
+
+')`'dnl native
+')`'dnl cdev
+
+ifenabled(`cdev',`
+Package: cpp`'PV`'TS
+Architecture: any
+Section: ifdef(`TARGET',`devel',`interpreters')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Suggests: gcc`'PV-locales (>= ${gcc:SoftVersion})
+Replaces: gcc-4.6 (<< 4.6.1-9)
+Description: GNU C preprocessor
+ A macro processor that is used automatically by the GNU C compiler
+ to transform programs before actual compilation.
+ .
+ This package has been separated from gcc for the benefit of those who
+ require the preprocessor but not the compiler.
+ifdef(`TARGET', `dnl
+ .
+ This package contains preprocessor configured for TARGET architecture.
+')`'dnl
+
+ifdef(`TARGET', `', `
+ifenabled(`gfdldoc',`
+Package: cpp`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends}
+Description: Documentation for the GNU C preprocessor (cpp)
+ Documentation for the GNU C preprocessor in info `format'.
+')`'dnl gfdldoc
+')`'dnl native
+
+ifdef(`TARGET', `', `
+Package: gcc`'PV-locales
+Architecture: all
+Section: devel
+Priority: PRI(optional)
+Depends: SOFTBASEDEP, cpp`'PV (>= ${gcc:SoftVersion}), ${misc:Depends}
+Recommends: gcc`'PV (>= ${gcc:SoftVersion})
+Description: GCC, the GNU compiler collection (native language support files)
+ Native language support for GCC. Lets GCC speak your language,
+ if translations are available.
+ .
+ Please do NOT submit bug reports in other languages than "C".
+ Always reset your language settings to use the "C" locales.
+')`'dnl native
+')`'dnl cdev
+
+ifenabled(`c++',`
+ifenabled(`c++dev',`
+Package: g++`'PV`'TS
+Architecture: any
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Provides: c++-compiler`'TS`'ifdef(`TARGET)',`',`, c++abi2-dev')
+Suggests: ${gxx:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}), libstdc++CXX_SO`'PV-dbg`'LS
+Description: GNU C++ compiler`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.
+ifdef(`TARGET', `dnl
+ .
+ This package contains C++ cross-compiler for TARGET architecture.
+')`'dnl
+
+ifenabled(`multilib',`
+Package: g++`'PV-multilib`'TS
+Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS)
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, g++`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libcxxbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: ${dep:libcxxbiarchdbg}
+Description: GNU C++ compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+')`'dnl c++dev
+')`'dnl c++
+
+ifenabled(`mudflap',`
+ifenabled(`libmudf',`
+Package: libmudflap`'MF_SO`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC mudflap shared support libraries
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: libmudflap`'MF_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Section: debug
+Priority: extra
+Depends: BASEDEP, libmudflap`'MF_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC mudflap shared support libraries (debug symbols)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib32mudflap`'MF_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libmudflap0 (<< 4.1)
+Conflicts: ${confl:lib32}
+Description: GCC mudflap shared support libraries (32bit)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib32mudflap`'MF_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib32mudflap`'MF_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC mudflap shared support libraries (32 bit debug symbols)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib64mudflap`'MF_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libmudflap0 (<< 4.1)
+Description: GCC mudflap shared support libraries (64bit)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib64mudflap`'MF_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib64mudflap`'MF_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC mudflap shared support libraries (64 bit debug symbols)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: libn32mudflap`'MF_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libmudflap0 (<< 4.1)
+Description: GCC mudflap shared support libraries (n32)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: libn32mudflap`'MF_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libn32mudflap`'MF_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC mudflap shared support libraries (n32 debug symbols)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+ifenabled(`libhfmudflap',`
+Package: libhfmudflap`'MF_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarchhf_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC mudflap shared support libraries (hard float)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: libhfmudflap`'MF_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchhf_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libhfmudflap`'MF_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC mudflap shared support libraries (hard float debug symbols)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+')`'dnl libhfmudflap
+
+ifenabled(`libsfmudflap',`
+Package: libsfmudflap`'MF_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarchsf_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC mudflap shared support libraries (soft float)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: libsfmudflap`'MF_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchsf_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libsfmudflap`'MF_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC mudflap shared support libraries (soft float debug symbols)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+')`'dnl libsfmudflap
+')`'dnl libmudf
+
+Package: libmudflap`'MF_SO`'PV-dev`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libdevel')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, libmudflap`'MF_SO`'LS (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: ${sug:libmudflapdev}
+Conflicts: libmudflap0-dev
+Description: GCC mudflap support libraries (development files)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+ .
+ This package contains the headers and the static libraries.
+')`'dnl mudflap
+
+ifdef(`TARGET', `', `
+ifenabled(`ssp',`
+Package: libssp`'SSP_SO`'LS
+Architecture: any
+ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+')`'dnl
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC stack smashing protection library
+ GCC can now emit code for protecting applications from stack-smashing attacks.
+ The protection is realized by buffer overflow detection and reordering of
+ stack variables to avoid pointer corruption.
+
+Package: lib32ssp`'SSP_SO`'LS
+Architecture: biarch32_archs
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libssp0 (<< 4.1)
+Conflicts: ${confl:lib32}
+Description: GCC stack smashing protection library (32bit)
+ GCC can now emit code for protecting applications from stack-smashing attacks.
+ The protection is realized by buffer overflow detection and reordering of
+ stack variables to avoid pointer corruption.
+
+Package: lib64ssp`'SSP_SO`'LS
+Architecture: biarch64_archs
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libssp0 (<< 4.1)
+Description: GCC stack smashing protection library (64bit)
+ GCC can now emit code for protecting applications from stack-smashing attacks.
+ The protection is realized by buffer overflow detection and reordering of
+ stack variables to avoid pointer corruption.
+
+Package: libn32ssp`'SSP_SO`'LS
+Architecture: biarchn32_archs
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libssp0 (<< 4.1)
+Description: GCC stack smashing protection library (n32)
+ GCC can now emit code for protecting applications from stack-smashing attacks.
+ The protection is realized by buffer overflow detection and reordering of
+ stack variables to avoid pointer corruption.
+
+Package: libhfssp`'SSP_SO`'LS
+Architecture: biarchhf_archs
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC stack smashing protection library (hard float ABI)
+ GCC can now emit code for protecting applications from stack-smashing attacks.
+ The protection is realized by buffer overflow detection and reordering of
+ stack variables to avoid pointer corruption.
+
+Package: libsfssp`'SSP_SO`'LS
+Architecture: biarchsf_archs
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC stack smashing protection library (soft float ABI)
+ GCC can now emit code for protecting applications from stack-smashing attacks.
+ The protection is realized by buffer overflow detection and reordering of
+ stack variables to avoid pointer corruption.
+')`'dnl
+')`'dnl native
+
+ifenabled(`libgomp',`
+Package: libgomp`'GOMP_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: libgomp`'GOMP_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libgomp`'GOMP_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Description: GCC OpenMP (GOMP) support library (debug symbols)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: lib32gomp`'GOMP_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: GCC OpenMP (GOMP) support library (32bit)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: lib32gomp`'GOMP_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib32gomp`'GOMP_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (32 bit debug symbols)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: lib64gomp`'GOMP_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (64bit)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: lib64gomp`'GOMP_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib64gomp`'GOMP_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (64bit debug symbols)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: libn32gomp`'GOMP_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (n32)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: libn32gomp`'GOMP_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libn32gomp`'GOMP_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (n32 debug symbols)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+
+ifenabled(`libhfgomp',`
+Package: libhfgomp`'GOMP_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchhf_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (hard float ABI)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: libhfgomp`'GOMP_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchhf_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libhfgomp`'GOMP_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (hard float ABI debug symbols)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+')`'dnl libhfgomp
+
+ifenabled(`libsfgomp',`
+Package: libsfgomp`'GOMP_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchsf_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (soft float ABI)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: libsfgomp`'GOMP_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchsf_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libsfgomp`'GOMP_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (hard float ABI debug symbols)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+')`'dnl libsfgomp
+
+ifenabled(`libneongomp',`
+Package: libgomp`'GOMP_SO-neon`'LS
+Architecture: NEON_ARCHS
+Section: libs
+Priority: extra
+Depends: BASEDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library [neon optimized]
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+ .
+ This set of libraries is optimized to use a NEON coprocessor, and will
+ be selected instead when running under systems which have one.
+')`'dnl libneongomp
+')`'dnl libgomp
+
+ifenabled(`libqmath',`
+Package: libquadmath`'QMATH_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC Quad-Precision Math Library
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype. The library is used to provide on such
+ targets the REAL(16) type in the GNU Fortran compiler.
+
+Package: libquadmath`'QMATH_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libquadmath`'QMATH_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Description: GCC Quad-Precision Math Library (debug symbols)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype.
+
+Package: lib32quadmath`'QMATH_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: GCC Quad-Precision Math Library (32bit)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype. The library is used to provide on such
+ targets the REAL(16) type in the GNU Fortran compiler.
+
+Package: lib32quadmath`'QMATH_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib32quadmath`'QMATH_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC Quad-Precision Math Library (32 bit debug symbols)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype.
+
+Package: lib64quadmath`'QMATH_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC Quad-Precision Math Library (64bit)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype. The library is used to provide on such
+ targets the REAL(16) type in the GNU Fortran compiler.
+
+Package: lib64quadmath`'QMATH_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib64quadmath`'QMATH_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC Quad-Precision Math Library (64bit debug symbols)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype.
+
+Package: libn32quadmath`'QMATH_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC Quad-Precision Math Library (n32)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype. The library is used to provide on such
+ targets the REAL(16) type in the GNU Fortran compiler.
+
+Package: libn32quadmath`'QMATH_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libn32quadmath`'QMATH_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC Quad-Precision Math Library (n32 debug symbols)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype.
+
+ifenabled(`libhfqmath',`
+Package: libhfquadmath`'QMATH_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchhf_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC Quad-Precision Math Library (hard float ABI)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype. The library is used to provide on such
+ targets the REAL(16) type in the GNU Fortran compiler.
+
+Package: libhfquadmath`'QMATH_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchhf_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libhfquadmath`'QMATH_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC Quad-Precision Math Library (hard float ABI debug symbols)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype.
+')`'dnl libhfqmath
+
+ifenabled(`libsfqmath',`
+Package: libsfquadmath`'QMATH_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchsf_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC Quad-Precision Math Library (soft float ABI)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype. The library is used to provide on such
+ targets the REAL(16) type in the GNU Fortran compiler.
+
+Package: libsfquadmath`'QMATH_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchsf_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libsfquadmath`'QMATH_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC Quad-Precision Math Library (hard float ABI debug symbols)
+ A library, which provides quad-precision mathematical functions on targets
+ supporting the __float128 datatype.
+')`'dnl libsfqmath
+')`'dnl libqmath
+
+ifenabled(`objpp',`
+ifenabled(`objppdev',`
+Package: gobjc++`'PV`'TS
+Architecture: any
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gobjc`'PV`'TS (= ${gcc:Version}), g++`'PV`'TS (= ${gcc:Version}), ${shlibs:Depends}, libobjc`'OBJC_SO`'LS (>= ${gcc:Version}), ${misc:Depends}
+Suggests: ${gobjcxx:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion})
+Provides: objc++-compiler`'TS
+Description: GNU Objective-C++ compiler
+ This is the GNU Objective-C++ compiler, which compiles
+ Objective-C++ on platforms supported by the gcc compiler. It uses the
+ gcc backend to generate optimized code.
+')`'dnl obcppdev
+
+ifenabled(`multilib',`
+Package: gobjc++`'PV-multilib`'TS
+Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS)
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gobjc++`'PV`'TS (= ${gcc:Version}), g++`'PV-multilib`'TS (= ${gcc:Version}), gobjc`'PV-multilib`'TS (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: GNU Objective-C++ compiler (multilib files)
+ This is the GNU Objective-C++ compiler, which compiles Objective-C++ on
+ platforms supported by the gcc compiler.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+')`'dnl obcpp
+
+ifenabled(`objc',`
+ifenabled(`objcdev',`
+Package: gobjc`'PV`'TS
+Architecture: any
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, libobjc`'OBJC_SO`'LS (>= ${gcc:Version}), ${misc:Depends}
+Suggests: ${gobjc:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}), libobjc`'OBJC_SO-dbg`'LS
+Provides: objc-compiler`'TS
+ifdef(`__sparc__',`Conflicts: gcc`'PV-sparc64', `dnl')
+Description: GNU Objective-C compiler
+ This is the GNU Objective-C compiler, which compiles
+ Objective-C on platforms supported by the gcc compiler. It uses the
+ gcc backend to generate optimized code.
+
+ifenabled(`multilib',`
+Package: gobjc`'PV-multilib`'TS
+Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS)
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gobjc`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libobjcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GNU Objective-C compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU Objective-C compiler, which compiles Objective-C on platforms
+ supported by the gcc compiler.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+')`'dnl objcdev
+
+ifenabled(`libobjc',`
+Package: libobjc`'OBJC_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: libobjc`'OBJC_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Priority: extra
+Depends: BASEDEP, libobjc`'OBJC_SO`'LS (= ${gcc:Version}), libgcc`'GCC_SO-dbg`'LS, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (debug symbols)
+ Library needed for GNU ObjC applications linked against the shared library.
+')`'dnl libobjc
+
+ifenabled(`lib64objc',`
+Package: lib64objc`'OBJC_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (64bit)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: lib64objc`'OBJC_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Priority: extra
+Depends: BASEDEP, lib64objc`'OBJC_SO`'LS (= ${gcc:Version}), lib64gcc`'GCC_SO-dbg`'LS, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (64 bit debug symbols)
+ Library needed for GNU ObjC applications linked against the shared library.
+')`'dnl lib64objc
+
+ifenabled(`lib32objc',`
+Package: lib32objc`'OBJC_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: Runtime library for GNU Objective-C applications (32bit)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: lib32objc`'OBJC_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Priority: extra
+Depends: BASEDEP, lib32objc`'OBJC_SO`'LS (= ${gcc:Version}), lib32gcc`'GCC_SO-dbg`'LS, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (32 bit debug symbols)
+ Library needed for GNU ObjC applications linked against the shared library.
+')`'dnl lib32objc
+
+ifenabled(`libn32objc',`
+Package: libn32objc`'OBJC_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (n32)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: libn32objc`'OBJC_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Priority: extra
+Depends: BASEDEP, libn32objc`'OBJC_SO`'LS (= ${gcc:Version}), libn32gcc`'GCC_SO-dbg`'LS, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (n32 debug symbols)
+ Library needed for GNU ObjC applications linked against the shared library.
+')`'dnl libn32objc
+
+ifenabled(`libhfobjc',`
+Package: libhfobjc`'OBJC_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchhf_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (hard float ABI)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: libhfobjc`'OBJC_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarchhf_archs')
+Priority: extra
+Depends: BASEDEP, libhfobjc`'OBJC_SO`'LS (= ${gcc:Version}), libhfgcc`'GCC_SO-dbg`'LS, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (hard float ABI debug symbols)
+ Library needed for GNU ObjC applications linked against the shared library.
+')`'dnl libhfobjc
+
+ifenabled(`libsfobjc',`
+Package: libsfobjc`'OBJC_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchsf_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (soft float ABI)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: libsfobjc`'OBJC_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarchsf_archs')
+Priority: extra
+Depends: BASEDEP, libsfobjc`'OBJC_SO`'LS (= ${gcc:Version}), libsfgcc`'GCC_SO-dbg`'LS, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (soft float ABI debug symbols)
+ Library needed for GNU ObjC applications linked against the shared library.
+')`'dnl libsfobjc
+
+ifenabled(`libneonobjc',`
+Package: libobjc`'OBJC_SO-neon`'LS
+Section: libs
+Architecture: NEON_ARCHS
+Priority: PRI(optional)
+Depends: BASEDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications [NEON version]
+ Library needed for GNU ObjC applications linked against the shared library.
+ .
+ This set of libraries is optimized to use a NEON coprocessor, and will
+ be selected instead when running under systems which have one.
+')`'dnl libneonobjc
+')`'dnl objc
+
+ifenabled(`fortran',`
+ifenabled(`fdev',`
+Package: gfortran`'PV`'TS
+Architecture: any
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), libgfortran`'FORTRAN_SO`'LS (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends}
+Provides: fortran95-compiler
+Suggests: ${gfortran:multilib}, gfortran`'PV-doc, libgfortran`'FORTRAN_SO-dbg`'LS
+Replaces: libgfortran`'FORTRAN_SO-dev
+Description: GNU Fortran 95 compiler
+ This is the GNU Fortran compiler, which compiles
+ Fortran 95 on platforms supported by the gcc compiler. It uses the
+ gcc backend to generate optimized code.
+
+ifenabled(`multilib',`
+Package: gfortran`'PV-multilib`'TS
+Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS)
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gfortran`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libgfortranbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GNU Fortran 95 compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU Fortran compiler, which compiles Fortran 95 on platforms
+ supported by the gcc compiler.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+
+ifenabled(`gfdldoc',`
+Package: gfortran`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends}
+Description: Documentation for the GNU Fortran compiler (gfortran)
+ Documentation for the GNU Fortran 95 compiler in info `format'.
+')`'dnl gfdldoc
+')`'dnl fdev
+
+ifenabled(`libgfortran',`
+Package: libgfortran`'FORTRAN_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Fortran applications
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: libgfortran`'FORTRAN_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Priority: extra
+Depends: BASEDEP, libgfortran`'FORTRAN_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (debug symbols)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+')`'dnl libgfortran
+
+ifenabled(`lib64gfortran',`
+Package: lib64gfortran`'FORTRAN_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (64bit)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: lib64gfortran`'FORTRAN_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Priority: extra
+Depends: BASEDEP, lib64gfortran`'FORTRAN_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (64bit debug symbols)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+')`'dnl lib64gfortran
+
+ifenabled(`lib32gfortran',`
+Package: lib32gfortran`'FORTRAN_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: Runtime library for GNU Fortran applications (32bit)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: lib32gfortran`'FORTRAN_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Priority: extra
+Depends: BASEDEP, lib32gfortran`'FORTRAN_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (32 bit debug symbols)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+')`'dnl lib32gfortran
+
+ifenabled(`libn32gfortran',`
+Package: libn32gfortran`'FORTRAN_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (n32)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: libn32gfortran`'FORTRAN_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Priority: extra
+Depends: BASEDEP, libn32gfortran`'FORTRAN_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (n32 debug symbols)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+')`'dnl libn32gfortran
+
+ifenabled(`libhfgfortran',`
+Package: libhfgfortran`'FORTRAN_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchhf_archs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (hard float ABI)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: libhfgfortran`'FORTRAN_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarchhf_archs')
+Priority: extra
+Depends: BASEDEP, libhfgfortran`'FORTRAN_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (hard float ABI debug symbols)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+')`'dnl libhfgfortran
+
+ifenabled(`libsfgfortran',`
+Package: libsfgfortran`'FORTRAN_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchsf_archs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (soft float ABI)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: libsfgfortran`'FORTRAN_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarchsf_archs')
+Priority: extra
+Depends: BASEDEP, libsfgfortran`'FORTRAN_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (hard float ABI debug symbols)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+')`'dnl libsfgfortran
+
+ifenabled(`libneongfortran',`
+Package: libgfortran`'FORTRAN_SO-neon`'LS
+Section: libs
+Architecture: NEON_ARCHS
+ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+')`'dnl
+Priority: extra
+Depends: BASEDEP, libgcc1-neon`'LS, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Fortran applications [NEON version]
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+ .
+ This set of libraries is optimized to use a NEON coprocessor, and will
+ be selected instead when running under systems which have one.
+')`'dnl libneongfortran
+')`'dnl fortran
+
+ifenabled(`ggo',`
+ifenabled(`godev',`
+Package: gccgo`'PV`'TS
+Architecture: any
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), libgo`'GO_SO`'LS (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends}
+Provides: go-compiler
+Suggests: ${go:multilib}, gccgo`'PV-doc, libgo`'GO_SO-dbg`'LS
+Description: GNU Go compiler
+ This is the GNU Go compiler, which compiles Go on platforms supported
+ by the gcc compiler. It uses the gcc backend to generate optimized code.
+
+ifenabled(`multilib',`
+Package: gccgo`'PV-multilib`'TS
+Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS)
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gccgo`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libgobiarch}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: ${dep:libgobiarchdbg}
+Description: GNU Go compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU Go compiler, which compiles Go on platforms supported
+ by the gcc compiler.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+
+ifenabled(`gfdldoc',`
+Package: gccgo`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends}
+Description: Documentation for the GNU Go compiler (gccgo)
+ Documentation for the GNU Go compiler in info `format'.
+')`'dnl gfdldoc
+')`'dnl fdev
+
+ifenabled(`libggo',`
+Package: libgo`'GO_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Go applications
+ Library needed for GNU Go applications linked against the
+ shared library.
+
+Package: libgo`'GO_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Priority: extra
+Depends: BASEDEP, libgo`'GO_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Go applications (debug symbols)
+ Library needed for GNU Go applications linked against the
+ shared library.
+')`'dnl libgo
+
+ifenabled(`lib64go',`
+Package: lib64go`'GO_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Go applications (64bit)
+ Library needed for GNU Go applications linked against the
+ shared library.
+
+Package: lib64go`'GO_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Priority: extra
+Depends: BASEDEP, lib64go`'GO_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Go applications (64bit debug symbols)
+ Library needed for GNU Go applications linked against the
+ shared library.
+')`'dnl lib64go
+
+ifenabled(`lib32go',`
+Package: lib32go`'GO_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: Runtime library for GNU Go applications (32bit)
+ Library needed for GNU Go applications linked against the
+ shared library.
+
+Package: lib32go`'GO_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Priority: extra
+Depends: BASEDEP, lib32go`'GO_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Go applications (32 bit debug symbols)
+ Library needed for GNU Go applications linked against the
+ shared library.
+')`'dnl lib32go
+
+ifenabled(`libn32go',`
+Package: libn32go`'GO_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Go applications (n32)
+ Library needed for GNU Go applications linked against the
+ shared library.
+
+Package: libn32go`'GO_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Priority: extra
+Depends: BASEDEP, libn32go`'GO_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Go applications (n32 debug symbols)
+ Library needed for GNU Go applications linked against the
+ shared library.
+')`'dnl libn32go
+')`'dnl ggo
+
+ifenabled(`java',`
+ifenabled(`gcj',`
+Package: gcj`'PV-jdk
+Section: java
+Architecture: any
+Priority: PRI(optional)
+Depends: gcj`'PV-base (= ${gcj:Version}), ${dep:gcj}, ${dep:libcdev}, gcj`'PV-jre (= ${gcj:Version}), libgcj`'GCJ_SO-dev (= ${gcj:Version}), gcj`'PV-jre-lib (>= ${gcj:SoftVersion}), ${dep:ecj}, fastjar, libgcj-bc, java-common, libantlr-java, ${shlibs:Depends}, dpkg (>= 1.15.4) | install-info, ${misc:Depends}
+Recommends: libecj-java-gcj
+Suggests: gcj`'PV-source (>= ${gcj:SoftVersion}), libgcj`'GCJ_SO-dbg
+Provides: java-compiler, java-sdk, java2-sdk, java5-sdk
+Conflicts: gcj-4.4, cpp-4.1 (<< 4.1.1), gcc-4.1 (<< 4.1.1)
+Replaces: libgcj11 (<< 4.5-20100101-1)
+Description: gcj and classpath development tools for Java(TM)
+ GCJ is a front end to the GCC compiler which can natively compile both
+ Java(tm) source and bytecode files. The compiler can also generate class
+ files. Other java development tools from classpath are included in this
+ package.
+ .
+ The package contains as well a collection of wrapper scripts and symlinks.
+ It is meant to provide a Java-SDK-like interface to the GCJ tool set.
+')`'dnl gcj
+
+ifenabled(`libgcj',`
+ifenabled(`libgcjcommon',`
+Package: libgcj-common
+Section: java
+Architecture: all
+Priority: PRI(optional)
+Depends: gcj`'PV-base (>= ${gcj:SoftVersion}), ${misc:Depends}
+Conflicts: classpath (<= 0.04-4)
+Replaces: java-gcj-compat (<< 1.0.65-3), java-gcj-compat-dev (<< 1.0.65-3)
+Description: Java runtime library (common files)
+ This package contains files shared by classpath and libgcj libraries.
+')`'dnl libgcjcommon
+
+Package: gcj`'PV-jre-headless
+Priority: optional
+Section: java
+Architecture: any
+Depends: gcj`'PV-base (= ${gcj:Version}), libgcj`'LIBGCJ_EXT (= ${gcj:Version}), ${dep:prctl}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: fastjar, gcj`'PV-jdk (= ${gcj:Version}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version})
+Conflicts: gij-4.4, java-gcj-compat (<< 1.0.76-4)
+Provides: java5-runtime-headless, java2-runtime-headless, java1-runtime-headless, java-runtime-headless
+Description: Java runtime environment using GIJ/classpath (headless version)
+ GIJ is a Java bytecode interpreter, not limited to interpreting bytecode.
+ It includes a class loader which can dynamically load shared objects, so
+ it is possible to give it the name of a class which has been compiled and
+ put into a shared library on the class path.
+ .
+ The package contains as well a collection of wrapper scripts and symlinks.
+ It is meant to provide a Java-RTE-like interface to the GIJ/GCJ tool set,
+ limited to the headless tools and libraries.
+
+Package: gcj`'PV-jre
+Section: java
+Architecture: any
+Priority: PRI(optional)
+Depends: gcj`'PV-base (= ${gcj:Version}), gcj`'PV-jre-headless (= ${gcj:Version}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version}), ${shlibs:Depends}, ${misc:Depends}
+Provides: java5-runtime, java2-runtime, java1-runtime, java-runtime
+Description: Java runtime environment using GIJ/classpath
+ GIJ is a Java bytecode interpreter, not limited to interpreting bytecode.
+ It includes a class loader which can dynamically load shared objects, so
+ it is possible to give it the name of a class which has been compiled and
+ put into a shared library on the class path.
+ .
+ The package contains as well a collection of wrapper scripts and symlinks.
+ It is meant to provide a Java-RTE-like interface to the GIJ/GCJ tool set.
+
+Package: libgcj`'LIBGCJ_EXT
+Section: libs
+Architecture: any
+Priority: PRI(optional)
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gcj`'PV-base (>= ${gcj:Version}), libgcj-common (>= 1:4.1.1-21), ${shlibs:Depends}, ${misc:Depends}
+Recommends: gcj`'PV-jre-lib (>= ${gcj:SoftVersion})
+Suggests: libgcj`'GCJ_SO-dbg, libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version})
+Replaces: gij-4.4 (<< 4.4.0-1)
+Description: Java runtime library for use with gcj
+ This is the runtime that goes along with the gcj front end to
+ gcc. libgcj includes parts of the Java Class Libraries, plus glue to
+ connect the libraries to the compiler and the underlying OS.
+ .
+ To show file names and line numbers in stack traces, the packages
+ libgcj`'GCJ_SO-dbg and binutils are required.
+
+Package: gcj`'PV-jre-lib
+Section: java
+Architecture: all
+Priority: PRI(optional)
+Depends: gcj`'PV-base (>= ${gcj:SoftVersion}), libgcj`'LIBGCJ_EXT (>= ${gcj:SoftVersion}), ${misc:Depends}
+Description: Java runtime library for use with gcj (jar files)
+ This is the jar file that goes along with the gcj front end to gcc.
+
+ifenabled(`gcjbc',`
+Package: libgcj-bc
+Section: java
+Architecture: any
+Priority: PRI(optional)
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gcj`'PV-base (>= ${gcj:Version}), libgcj`'LIBGCJ_EXT (>= ${gcj:Version}), ${misc:Depends}
+Description: Link time only library for use with gcj
+ A fake library that is used at link time only. It ensures that
+ binaries built with the BC-ABI link against a constant SONAME.
+ This way, BC-ABI binaries continue to work if the SONAME underlying
+ libgcj.so changes.
+')`'dnl gcjbc
+
+Package: libgcj`'LIBGCJ_EXT-awt
+Section: libs
+Architecture: any
+Priority: PRI(optional)
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gcj`'PV-base (>= ${gcj:Version}), libgcj`'LIBGCJ_EXT (= ${gcj:Version}), ${shlibs:Depends}, ${misc:Depends}
+Suggests: ${pkg:gcjqt}
+Description: AWT peer runtime libraries for use with gcj
+ These are runtime libraries holding the AWT peer implementations
+ for libgcj (currently the GTK+ based peer library is required, the
+ QT bases library is not built).
+
+ifenabled(`gtkpeer',`
+Package: libgcj`'GCJ_SO-awt-gtk
+Section: libs
+Architecture: any
+Priority: PRI(optional)
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gcj`'PV-base (= ${gcj:Version}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: AWT GTK+ peer runtime library for use with libgcj
+ This is the runtime library holding the GTK+ based AWT peer
+ implementation for libgcj.
+')`'dnl gtkpeer
+
+ifenabled(`qtpeer',`
+Package: libgcj`'GCJ_SO-awt-qt
+Section: libs
+Architecture: any
+Priority: PRI(optional)
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gcj`'PV-base (= ${gcj:Version}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: AWT QT peer runtime library for use with libgcj
+ This is the runtime library holding the QT based AWT peer
+ implementation for libgcj.
+')`'dnl qtpeer
+')`'dnl libgcj
+
+ifenabled(`libgcjdev',`
+Package: libgcj`'GCJ_SO-dev
+Section: libdevel
+Architecture: any
+Priority: PRI(optional)
+Depends: gcj`'PV-base (= ${gcj:Version}), gcj`'PV-jdk (= ${gcj:Version}), gcj`'PV-jre-lib (>= ${gcj:SoftVersion}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version}), libgcj-bc, ${pkg:gcjgtk}, ${pkg:gcjqt}, zlib1g-dev, ${shlibs:Depends}, ${misc:Depends}
+Suggests: libgcj-doc
+Description: Java development headers for use with gcj
+ These are the development headers that go along with the gcj front end
+ to gcc. libgcj includes parts of the Java Class Libraries, plus glue
+ to connect the libraries to the compiler and the underlying OS.
+
+Package: libgcj`'GCJ_SO-dbg
+Section: debug
+Architecture: any
+Priority: extra
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gcj`'PV-base (= ${gcj:Version}), libgcj`'LIBGCJ_EXT (= ${gcj:Version}), ${misc:Depends}
+Recommends: binutils, libc6-dbg | libc-dbg
+Description: Debugging symbols for libraries provided in libgcj`'GCJ_SO-dev
+ The package provides debugging symbols for the libraries provided
+ in libgcj`'GCJ_SO-dev.
+ .
+ binutils is required to show file names and line numbers in stack traces.
+
+Package: gcj`'PV-source
+Section: java
+Architecture: all
+Priority: PRI(optional)
+Depends: gcj`'PV-base (>= ${gcj:SoftVersion}), gcj`'PV-jdk (>= ${gcj:SoftVersion}), ${misc:Depends}
+Description: GCJ java sources for use in IDEs like eclipse and netbeans
+ These are the java source files packaged as a zip file for use in development
+ environments like eclipse and netbeans.
+
+ifenabled(`gcjdoc',`
+Package: libgcj-doc
+Section: doc
+Architecture: all
+Priority: PRI(optional)
+Depends: gcj`'PV-base (>= ${gcj:SoftVersion}), ${misc:Depends}
+Enhances: libgcj`'GCJ_SO-dev
+Provides: classpath-doc
+Description: libgcj API documentation and example programs
+ Autogenerated documentation describing the API of the libgcj library.
+ Sources and precompiled example programs from the classpath library.
+')`'dnl gcjdoc
+')`'dnl libgcjdev
+')`'dnl java
+
+ifenabled(`c++',`
+ifenabled(`libcxx',`
+Package: libstdc++CXX_SO`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(required))
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libstdc++CXX_SO-TARGET-dcv1
+',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Conflicts: scim (<< 1.4.2-1)
+Description: GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libcxx
+
+ifenabled(`lib32cxx',`
+Package: lib32stdc++CXX_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: extra
+Depends: BASEDEP, lib32gcc1`'LS, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+ifdef(`TARGET',`Provides: lib32stdc++CXX_SO-TARGET-dcv1
+',`')`'dnl
+Description: GNU Standard C++ Library v3 (32 bit Version)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl lib32cxx
+
+ifenabled(`lib64cxx',`
+Package: lib64stdc++CXX_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${shlibs:Depends}, lib64gcc1`'LS, ${misc:Depends}
+ifdef(`TARGET',`Provides: lib64stdc++CXX_SO-TARGET-dcv1
+',`')`'dnl
+Description: GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') (64bit)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl lib64cxx
+
+ifenabled(`libn32cxx',`
+Package: libn32stdc++CXX_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${shlibs:Depends}, libn32gcc1`'LS, ${misc:Depends}
+ifdef(`TARGET',`Provides: libn32stdc++CXX_SO-TARGET-dcv1
+',`')`'dnl
+Description: GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') (n32)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libn32cxx
+
+ifenabled(`libhfcxx',`
+Package: libhfstdc++CXX_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarchhf_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${shlibs:Depends}, libhfgcc1`'LS, ${misc:Depends}
+ifdef(`TARGET',`Provides: libhfstdc++CXX_SO-TARGET-dcv1
+',`')`'dnl
+Description: GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') (hard float ABI)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libhfcxx
+
+ifenabled(`libsfcxx',`
+Package: libsfstdc++CXX_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarchsf_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${shlibs:Depends}, libsfgcc1`'LS, ${misc:Depends}
+ifdef(`TARGET',`Provides: libsfstdc++CXX_SO-TARGET-dcv1
+',`')`'dnl
+Description: GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') (soft float ABI)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libsfcxx
+
+ifenabled(`libneoncxx',`
+Package: libstdc++CXX_SO-neon`'LS
+Architecture: NEON_ARCHS
+Section: libs
+Priority: extra
+Depends: BASEDEP, libc6-neon`'LS, libgcc1-neon`'LS, ${shlibs:Depends}, ${misc:Depends}
+Description: GNU Standard C++ Library v3 [NEON version]
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ This set of libraries is optimized to use a NEON coprocessor, and will
+ be selected instead when running under systems which have one.
+')`'dnl
+
+ifenabled(`c++dev',`
+Package: libstdc++CXX_SO`'PV-dev`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libdevel')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, g++`'PV`'TS (= ${gcc:Version}), libstdc++CXX_SO`'LS (>= ${gcc:Version}), ${dep:libcdev}, ${misc:Depends}
+ifdef(`TARGET',`',`dnl native
+Conflicts: libg++27-dev, libg++272-dev (<< 2.7.2.8-1), libstdc++2.8-dev, libg++2.8-dev, libstdc++2.9-dev, libstdc++2.9-glibc2.1-dev, libstdc++2.10-dev (<< 1:2.95.3-2), libstdc++3.0-dev
+Suggests: libstdc++CXX_SO`'PV-doc
+')`'dnl native
+Provides: libstdc++-dev`'LS`'dnl
+ifdef(`TARGET',`, libstdc++-dev-TARGET-dcv1, libstdc++CXX_SO-dev-TARGET-dcv1
+',`
+')`'dnl
+Description: GNU Standard C++ Library v3 (development files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the headers and static library files necessary for
+ building C++ programs which use libstdc++.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libstdc++CXX_SO`'PV-pic`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libdevel')
+Priority: extra
+Depends: BASEDEP, libstdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), ${misc:Depends}
+ifdef(`TARGET',`Provides: libstdc++CXX_SO-pic-TARGET-dcv1
+',`')`'dnl
+Description: GNU Standard C++ Library v3 (shared library subset kit)`'ifdef(`TARGET)',` (TARGET)', `')
+ This is used to develop subsets of the libstdc++ shared libraries for
+ use on custom installation floppies and in embedded systems.
+ .
+ Unless you are making one of those, you will not need this package.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libstdc++CXX_SO`'PV-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libstdc++CXX_SO`'LS (>= ${gcc:Version}), libgcc`'GCC_SO-dbg`'LS, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libstdc++CXX_SO-dbg-TARGET-dcv1
+',`')`'dnl
+Recommends: libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version})
+Conflicts: libstdc++5-dbg`'LS, libstdc++5-3.3-dbg`'LS, libstdc++6-dbg`'LS, libstdc++6-4.0-dbg`'LS, libstdc++6-4.1-dbg`'LS, libstdc++6-4.2-dbg`'LS, libstdc++6-4.3-dbg`'LS, libstdc++6-4.4-dbg`'LS, libstdc++6-4.5-dbg`'LS
+Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: lib32stdc++CXX_SO`'PV-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib32stdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), lib32gcc`'GCC_SO-dbg`'LS, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: lib32stdc++CXX_SO-dbg-TARGET-dcv1
+',`')`'dnl
+Conflicts: lib32stdc++6-dbg`'LS, lib32stdc++6-4.0-dbg`'LS, lib32stdc++6-4.1-dbg`'LS, lib32stdc++6-4.2-dbg`'LS, lib32stdc++6-4.3-dbg`'LS, lib32stdc++6-4.4-dbg`'LS, lib32stdc++6-4.5-dbg`'LS
+Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: lib64stdc++CXX_SO`'PV-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib64stdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), lib64gcc`'GCC_SO-dbg`'LS, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: lib64stdc++CXX_SO-dbg-TARGET-dcv1
+',`')`'dnl
+Conflicts: lib64stdc++6-dbg`'LS, lib64stdc++6-4.0-dbg`'LS, lib64stdc++6-4.1-dbg`'LS, lib64stdc++6-4.2-dbg`'LS, lib64stdc++6-4.3-dbg`'LS, lib64stdc++6-4.4-dbg`'LS, lib64stdc++6-4.5-dbg`'LS
+Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libn32stdc++CXX_SO`'PV-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libn32stdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), libn32gcc`'GCC_SO-dbg`'LS, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libn32stdc++CXX_SO-dbg-TARGET-dcv1
+',`')`'dnl
+Conflicts: libn32stdc++6-dbg`'LS, libn32stdc++6-4.0-dbg`'LS, libn32stdc++6-4.1-dbg`'LS, libn32stdc++6-4.2-dbg`'LS, libn32stdc++6-4.3-dbg`'LS, libn32stdc++6-4.4-dbg`'LS, libn32stdc++6-4.5-dbg`'LS
+Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+ifenabled(`libhfcxx',`
+Package: libhfstdc++CXX_SO`'PV-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchhf_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libhfstdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), libhfgcc`'GCC_SO-dbg`'LS, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libhfstdc++CXX_SO-dbg-TARGET-dcv1
+',`')`'dnl
+Conflicts: libhfstdc++6-dbg`'LS, libhfstdc++6-4.3-dbg`'LS, libhfstdc++6-4.4-dbg`'LS, libhfstdc++6-4.5-dbg`'LS
+Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libhfcxx
+
+ifenabled(`libsfcxx',`
+Package: libsfstdc++CXX_SO`'PV-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchsf_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libsfstdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), libsfgcc`'GCC_SO-dbg`'LS, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libsfstdc++CXX_SO-dbg-TARGET-dcv1
+',`')`'dnl
+Conflicts: libsfstdc++6-dbg`'LS, libsfstdc++6-4.3-dbg`'LS, libsfstdc++6-4.4-dbg`'LS, libsfstdc++6-4.5-dbg`'LS
+Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libsfcxx
+
+ifdef(`TARGET', `', `
+Package: libstdc++CXX_SO`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), ${misc:Depends}
+Conflicts: libstdc++5-doc, libstdc++5-3.3-doc, libstdc++6-doc, libstdc++6-4.0-doc, libstdc++6-4.1-doc, libstdc++6-4.2-doc, libstdc++6-4.3-doc, libstdc++6-4.4-doc, libstdc++6-4.5-doc
+Description: GNU Standard C++ Library v3 (documentation files)
+ This package contains documentation files for the GNU stdc++ library.
+ .
+ One set is the distribution documentation, the other set is the
+ source documentation including a namespace list, class hierarchy,
+ alphabetical list, compound list, file list, namespace members,
+ compound members and file members.
+')`'dnl native
+')`'dnl c++dev
+')`'dnl c++
+
+ifenabled(`ada',`
+Package: gnat`'-GNAT_V
+Architecture: any
+Priority: PRI(optional)
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gnat`'PV-base (= ${gnat:Version}), gcc`'PV (>= ${gcc:SoftVersion}), ${dep:libgnat}, ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: gnat`'PV-doc, ada-reference-manual-html, ada-reference-manual-info, ada-reference-manual-pdf, ada-reference-manual-text, gnat`'-GNAT_V-sjlj
+Provides: ada-compiler
+Conflicts: gnat (<< 4.1), gnat-3.1, gnat-3.2, gnat-3.3, gnat-3.4, gnat-3.5, gnat-4.0, gnat-4.1, gnat-4.2, gnat-4.3, gnat-4.4
+Description: GNU Ada compiler
+ GNAT is a compiler for the Ada programming language. It produces optimized
+ code on platforms supported by the GNU Compiler Collection (GCC).
+ .
+ This package provides the compiler, tools and runtime library that handles
+ exceptions using the default zero-cost mechanism.
+
+Package: gnat`'-GNAT_V-sjlj
+Architecture: any
+Priority: extra
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gnat`'PV-base (= ${gnat:Version}), gnat`'-GNAT_V (= ${gnat:Version}), ${misc:Depends}
+Description: GNU Ada compiler (setjump/longjump runtime library)
+ GNAT is a compiler for the Ada programming language. It produces optimized
+ code on platforms supported by the GNU Compiler Collection (GCC).
+ .
+ This package provides an alternative runtime library that handles
+ exceptions using the setjump/longjump mechanism (as a static library
+ only). You can install it to supplement the normal compiler.
+
+ifenabled(`libgnat',`
+Package: libgnat`'-GNAT_V
+Section: libs
+Architecture: any
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: PRI(optional)
+Depends: gnat`'PV-base (= ${gnat:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: runtime for applications compiled with GNAT (shared library)
+ GNAT is a compiler for the Ada programming language. It produces optimized
+ code on platforms supported by the GNU Compiler Collection (GCC).
+ .
+ The libgnat library provides runtime components needed by most
+ applications produced with GNAT.
+ .
+ This package contains the runtime shared library.
+
+Package: libgnat`'-GNAT_V-dbg
+Section: debug
+Architecture: any
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: extra
+Depends: gnat`'PV-base (= ${gnat:Version}), libgnat`'-GNAT_V (= ${gnat:Version}), ${misc:Depends}
+Description: runtime for applications compiled with GNAT (debugging symbols)
+ GNAT is a compiler for the Ada programming language. It produces optimized
+ code on platforms supported by the GNU Compiler Collection (GCC).
+ .
+ The libgnat library provides runtime components needed by most
+ applications produced with GNAT.
+ .
+ This package contains the debugging symbols.
+
+Package: libgnatvsn`'GNAT_V-dev
+Section: libdevel
+Architecture: any
+Priority: extra
+Depends: gnat`'PV-base (= ${gnat:Version}), gnat`'PV (= ${gnat:Version}), ada-compiler,
+ libgnatvsn`'GNAT_V (= ${gnat:Version}), ${misc:Depends}
+Conflicts: libgnatvsn-dev (<< `'GNAT_V), libgnatvsn4.1-dev, libgnatvsn4.3-dev, libgnatvsn4.4-dev, libgnatvsn4.5-dev
+Description: GNU Ada compiler selected components (development files)
+ GNAT is a compiler for the Ada programming language. It produces optimized
+ code on platforms supported by the GNU Compiler Collection (GCC).
+ .
+ The libgnatvsn library exports selected GNAT components for use in other
+ packages, most notably ASIS tools. It is licensed under the GNAT-Modified
+ GPL, allowing to link proprietary programs with it.
+ .
+ This package contains the development files and static library.
+
+Package: libgnatvsn`'GNAT_V
+Architecture: any
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: PRI(optional)
+Section: libs
+Depends: gnat`'PV-base (= ${gnat:Version}), libgnat`'-GNAT_V (= ${gnat:Version}), ${misc:Depends}
+Description: GNU Ada compiler selected components (shared library)
+ GNAT is a compiler for the Ada programming language. It produces optimized
+ code on platforms supported by the GNU Compiler Collection (GCC).
+ .
+ The libgnatvsn library exports selected GNAT components for use in other
+ packages, most notably ASIS tools. It is licensed under the GNAT-Modified
+ GPL, allowing to link proprietary programs with it.
+ .
+ This package contains the runtime shared library.
+
+Package: libgnatvsn`'GNAT_V-dbg
+Architecture: any
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: extra
+Section: debug
+Depends: gnat`'PV-base (= ${gnat:Version}), libgnatvsn`'GNAT_V (= ${gnat:Version}), ${misc:Depends}
+Suggests: gnat, ada-compiler
+Description: GNU Ada compiler selected components (debugging symbols)
+ GNAT is a compiler for the Ada programming language. It produces optimized
+ code on platforms supported by the GNU Compiler Collection (GCC).
+ .
+ The libgnatvsn library exports selected GNAT components for use in other
+ packages, most notably ASIS tools. It is licensed under the GNAT-Modified
+ GPL, allowing to link proprietary programs with it.
+ .
+ This package contains the debugging symbols.
+
+Package: libgnatprj`'GNAT_V-dev
+Section: libdevel
+Architecture: any
+Priority: extra
+Depends: gnat`'PV-base (= ${gnat:Version}), gnat`'PV (= ${gnat:Version}), ada-compiler,
+ libgnatprj`'GNAT_V (= ${gnat:Version}), libgnatvsn`'GNAT_V-dev (= ${gnat:Version}), ${misc:Depends}
+Conflicts: libgnatprj-dev (<< `'GNAT_V), libgnatprj4.1-dev, libgnatprj4.3-dev, libgnatprj4.4-dev, libgnatprj4.5-dev
+Description: GNU Ada compiler Project Manager (development files)
+ GNAT is a compiler for the Ada programming language. It produces optimized
+ code on platforms supported by the GNU Compiler Collection (GCC).
+ .
+ GNAT uses project files to organise source and object files in large-scale
+ development efforts. The libgnatprj library exports GNAT project files
+ management for use in other packages, most notably ASIS tools (package
+ asis-programs) and GNAT Programming Studio (package gnat-gps). It is
+ licensed under the pure GPL; all programs that use it must also be
+ distributed under the GPL, or not distributed at all.
+ .
+ This package contains the development files and static library.
+
+Package: libgnatprj`'GNAT_V
+Architecture: any
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: PRI(optional)
+Section: libs
+Depends: gnat`'PV-base (= ${gnat:Version}), libgnat`'-GNAT_V (= ${gnat:Version}), libgnatvsn`'GNAT_V (= ${gnat:Version}), ${misc:Depends}
+Description: GNU Ada compiler Project Manager (shared library)
+ GNAT is a compiler for the Ada programming language. It produces optimized
+ code on platforms supported by the GNU Compiler Collection (GCC).
+ .
+ GNAT uses project files to organise source and object files in large-scale
+ development efforts. The libgnatprj library exports GNAT project files
+ management for use in other packages, most notably ASIS tools (package
+ asis-programs) and GNAT Programming Studio (package gnat-gps). It is
+ licensed under the pure GPL; all programs that use it must also be
+ distributed under the GPL, or not distributed at all.
+ .
+ This package contains the runtime shared library.
+
+Package: libgnatprj`'GNAT_V-dbg
+Architecture: any
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: extra
+Section: debug
+Depends: gnat`'PV-base (= ${gnat:Version}), libgnatprj`'GNAT_V (= ${gnat:Version}), ${misc:Depends}
+Suggests: gnat, ada-compiler
+Description: GNU Ada compiler Project Manager (debugging symbols)
+ GNAT is a compiler for the Ada programming language. It produces optimized
+ code on platforms supported by the GNU Compiler Collection (GCC).
+ .
+ GNAT uses project files to organise source and object files in large-scale
+ development efforts. The libgnatprj library exports GNAT project files
+ management for use in other packages, most notably ASIS tools (package
+ asis-programs) and GNAT Programming Studio (package gnat-gps). It is
+ licensed under the pure GPL; all programs that use it must also be
+ distributed under the GPL, or not distributed at all.
+ .
+ This package contains the debugging symbols.
+')`'dnl libgnat
+
+ifenabled(`lib64gnat',`
+Package: lib64gnat`'-GNAT_V
+Section: libs
+Architecture: biarch64_archs
+Priority: PRI(optional)
+Depends: gnat`'PV-base (= ${gnat:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: runtime for applications compiled with GNAT (64 bits shared library)
+ GNAT is a compiler for the Ada programming language. It produces optimized
+ code on platforms supported by the GNU Compiler Collection (GCC).
+ .
+ The libgnat library provides runtime components needed by most
+ applications produced with GNAT.
+ .
+ This package contains the runtime shared library for 64 bits architectures.
+')`'dnl libgnat
+
+ifenabled(`gfdldoc',`
+Package: gnat`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: dpkg (>= 1.15.4) | install-info, ${misc:Depends}
+Suggests: gnat`'PV
+Conflicts: gnat-4.1-doc, gnat-4.2-doc, gnat-4.3-doc, gnat-4.4-doc
+Description: GNU Ada compiler (documentation)
+ GNAT is a compiler for the Ada programming language. It produces optimized
+ code on platforms supported by the GNU Compiler Collection (GCC).
+ .
+ The libgnat library provides runtime components needed by most
+ applications produced with GNAT.
+ .
+ This package contains the documentation in info `format'.
+')`'dnl gfdldoc
+')`'dnl ada
+
+ifenabled(`d ',`
+Package: gdc`'PV
+Architecture: any
+Priority: PRI(optional)
+Depends: SOFTBASEDEP, g++`'PV (>= ${gcc:SoftVersion}), libphobos`'PHOBOS_V`'PV-dev (= ${gdc:Version}) [libphobos_no_archs], ${shlibs:Depends}, ${misc:Depends}
+Provides: gdc, d-compiler, d-v2-compiler
+Replaces: gdc (<< 4.4.6-5)
+Description: GNU D compiler (version 2), based on the GCC backend
+ This is the GNU D compiler, which compiles D on platforms supported by gcc.
+ It uses the gcc backend to generate optimised code.
+ .
+ This compiler supports D language version 2.
+
+ifenabled(`libphobos',`
+Package: libphobos`'PHOBOS_V`'PV`'TS-dev
+Architecture: any
+Section: libdevel
+Priority: PRI(optional)
+Depends: gdc`'PV`'TS (= ${gdc:Version}), zlib1g-dev, ${shlibs:Depends}, ${misc:Depends}
+Provides: libphobos`'PHOBOS_V`'TS-dev
+Description: Phobos D standard library
+ This is the Phobos standard library that comes with the D2 compiler.
+ .
+ For more information check http://www.d-programming-language.org/phobos/
+
+Package: libphobos`'PHOBOS_V`'PV`'TS-dbg
+Section: debug
+Architecture: ifdef(`TARGET',`all',`any')
+Priority: extra
+Depends: gdc`'PV`'TS (= ${gdc:Version}), libphobos`'PHOBOS_V`'PV-dev (= ${gdc:Version}), ${misc:Depends}
+Provides: libphobos`'PHOBOS_V`'TS-dbg
+Description: The Phobos D standard library (debug symbols)
+ This is the Phobos standard library that comes with the D2 compiler.
+ .
+ For more information check http://www.d-programming-language.org/phobos/
+')`'dnl libphobos
+')`'dnl d
+
+ifdef(`TARGET',`',`dnl
+ifenabled(`libs',`
+Package: gcc`'PV-soft-float
+Architecture: arm armel armhf
+Priority: PRI(optional)
+Depends: BASEDEP, ifenabled(`cdev',`gcc`'PV (= ${gcc:Version}),') ${shlibs:Depends}, ${misc:Depends}
+Conflicts: gcc-4.4-soft-float, gcc-4.5-soft-float
+Description: GCC soft-floating-point gcc libraries (ARM)
+ These are versions of basic static libraries such as libgcc.a compiled
+ with the -msoft-float option, for CPUs without a floating-point unit.
+')`'dnl commonlibs
+')`'dnl
+
+ifenabled(`fixincl',`
+Package: fixincludes
+Architecture: any
+Priority: PRI(optional)
+Depends: BASEDEP, gcc`'PV (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: Fix non-ANSI header files
+ FixIncludes was created to fix non-ANSI system header files. Many
+ system manufacturers supply proprietary headers that are not ANSI compliant.
+ The GNU compilers cannot compile non-ANSI headers. Consequently, the
+ FixIncludes shell script was written to fix the header files.
+ .
+ Not all packages with header files are installed on the system, when the
+ package is built, so we make fixincludes available at build time of other
+ packages, such that checking tools like lintian can make use of it.
+')`'dnl fixincl
+
+ifenabled(`cdev',`
+ifdef(`TARGET', `', `
+ifenabled(`gfdldoc',`
+Package: gcc`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends}
+Conflicts: gcc-docs (<< 2.95.2)
+Replaces: gcc (<=2.7.2.3-4.3), gcc-docs (<< 2.95.2)
+Description: Documentation for the GNU compilers (gcc, gobjc, g++)
+ Documentation for the GNU compilers in info `format'.
+')`'dnl gfdldoc
+')`'dnl native
+')`'dnl cdev
+
+ifdef(`TARGET',`',`dnl
+ifenabled(`libnof',`
+Package: gcc`'PV-nof
+Architecture: powerpc
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}ifenabled(`cdev',`, gcc`'PV (= ${gcc:Version})'), ${misc:Depends}
+Conflicts: gcc-3.2-nof
+Description: GCC no-floating-point gcc libraries (powerpc)
+ These are versions of basic static libraries such as libgcc.a compiled
+ with the -msoft-float option, for CPUs without a floating-point unit.
+')`'dnl libnof
+')`'dnl
+
+ifenabled(`source',`
+Package: gcc`'PV-source
+Architecture: all
+Priority: PRI(optional)
+Depends: make (>= 3.81), autoconf2.64, automake, quilt, patchutils, gawk, ${misc:Depends}
+Description: Source of the GNU Compiler Collection
+ This package contains the sources and patches which are needed to
+ build the GNU Compiler Collection (GCC).
+')`'dnl source
+dnl
+')`'dnl gcc-X.Y
+dnl last line in file
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..4a7ab69
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,567 @@
+This is the Debian GNU/Linux prepackaged version of the GNU compiler
+collection, containing Ada, C, C++, Fortran 95, Java, Objective-C,
+Objective-C++, and Treelang compilers, documentation, and support
+libraries. In addition, Debian provides the gdc compiler, either in
+the same source package, or built from a separate same source package.
+Packaging is done by the Debian GCC Maintainers
+<debian-gcc@lists.debian.org>, with sources obtained from:
+
+ ftp://gcc.gnu.org/pub/gcc/releases/ (for full releases)
+ svn://gcc.gnu.org/svn/gcc/ (for prereleases)
+ http://bitbucket.org/goshawk/gdc (for D)
+
+The current gcc-4.6 source package is taken from the SVN gcc-4_6-branch.
+
+Changes: See changelog.Debian.gz
+
+Debian splits the GNU Compiler Collection into packages for each language,
+library, and documentation as follows:
+
+Language Compiler package Library package Documentation
+---------------------------------------------------------------------------
+Ada gnat-4.6 libgnat-4.6 gnat-4.6-doc
+C gcc-4.6 gcc-4.6-doc
+C++ g++-4.6 libstdc++6 libstdc++6-4.6-doc
+D gdc-4.6
+Fortran 95 gfortran-4.6 libgfortran3 gfortran-4.6-doc
+Go gccgo-4.6 libgo0
+Java gcj-4.6 libgcj10 libgcj-doc
+Objective C gobjc-4.6 libobjc2
+Objective C++ gobjc++-4.6
+
+For some language run-time libraries, Debian provides source files,
+development files, debugging symbols and libraries containing position-
+independent code in separate packages:
+
+Language Sources Development Debugging Position-Independent
+------------------------------------------------------------------------------
+C++ libstdc++6-4.6-dbg libstdc++6-4.6-pic
+D libphobos-4.6-dev
+Java libgcj10-src libgcj10-dev libgcj10-dbg
+
+Additional packages include:
+
+All languages:
+libgcc1, libgcc2, libgcc4 GCC intrinsics (platform-dependent)
+gcc-4.6-base Base files common to all compilers
+gcc-4.6-soft-float Software floating point (ARM only)
+gcc-4.6-source The sources with patches
+
+Ada:
+libgnatvsn-dev, libgnatvsn4.6 GNAT version library
+libgnatprj-dev, libgnatprj4.6 GNAT Project Manager library
+
+C:
+cpp-4.6, cpp-4.6-doc GNU C Preprocessor
+libmudflap0-dev, libmudflap0 Library for instrumenting pointers
+libssp0-dev, libssp0 GCC stack smashing protection library
+libquadmath0 Math routines for the __float128 type
+fixincludes Fix non-ANSI header files
+protoize Create/remove ANSI prototypes from C code
+
+Java:
+gij The Java bytecode interpreter and VM
+libgcj-common Common files for the Java run-time
+libgcj10-awt The Abstract Windowing Toolkit
+libgcj10-jar Java ARchive for the Java run-time
+
+C, C++ and Fortran 95:
+libgomp1-dev, libgomp1 GCC OpenMP (GOMP) support library
+
+Biarch support: On some 64-bit platforms which can also run 32-bit code,
+Debian provides additional packages containing 32-bit versions of some
+libraries. These packages have names beginning with 'lib32' instead of
+'lib', for example lib32stdc++6. Similarly, on some 32-bit platforms which
+can also run 64-bit code, Debian provides additional packages with names
+beginning with 'lib64' instead of 'lib'. These packages contain 64-bit
+versions of the libraries. (At this time, not all platforms and not all
+libraries support biarch.) The license terms for these lib32 or lib64
+packages are identical to the ones for the lib packages.
+
+
+COPYRIGHT STATEMENTS AND LICENSING TERMS
+
+
+GCC is Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, 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.
+
+Files that have exception clauses are licensed under the terms of the
+GNU General Public License; either version 3, or (at your option) any
+later version.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License is in `/usr/share/common-licenses/GPL', version 3 of this
+license in `/usr/share/common-licenses/GPL-3'.
+
+The following runtime libraries are licensed under the terms of the
+GNU General Public License (v3 or later) with version 3.1 of the GCC
+Runtime Library Exception (included in this file):
+
+ - libgcc (libgcc/, gcc/libgcc2.[ch], gcc/unwind*, gcc/gthr*,
+ gcc/coretypes.h, gcc/crtstuff.c, gcc/defaults.h, gcc/dwarf2.h,
+ gcc/emults.c, gcc/gbl-ctors.h, gcc/gcov-io.h, gcc/libgcov.c,
+ gcc/tsystem.h, gcc/typeclass.h).
+ - libdecnumber
+ - libgomp
+ - libssp
+ - libstdc++-v3
+ - libobjc
+ - libmudflap
+ - libgfortran
+ - The libgnat-4.6 Ada support library and libgnatvsn library.
+ - Various config files in gcc/config/ used in runtime libraries.
+
+In contrast, libgnatprj is licensed under the terms of the pure GNU
+General Public License.
+
+The libgcj library is licensed under the terms of the GNU General
+Public License, with a special exception:
+
+ Linking this library statically or dynamically with other modules
+ is making a combined work based on this library. Thus, the terms
+ and conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give
+ you permission to link this library with independent modules to
+ produce an executable, regardless of the license terms of these
+ independent modules, and to copy and distribute the resulting
+ executable under terms of your choice, provided that you also
+ meet, for each linked independent module, the terms and conditions
+ of the license of that module. An independent module is a module
+ which is not derived from or based on this library. If you modify
+ this library, you may extend this exception to your version of the
+ library, but you are not obligated to do so. If you do not wish
+ to do so, delete this exception statement from your version.
+
+The libffi library is licensed under the following terms:
+
+ libffi - Copyright (c) 1996-2003 Red Hat, Inc.
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ ``Software''), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+
+
+The documentation is licensed under the GNU Free Documentation License (v1.2).
+On Debian GNU/Linux systems, the complete text of this license is in
+`/usr/share/common-licenses/GFDL-1.2'.
+
+
+GCC RUNTIME LIBRARY EXCEPTION
+
+Version 3.1, 31 March 2009
+
+Copyright (C) 2009 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+This GCC Runtime Library Exception ("Exception") is an additional
+permission under section 7 of the GNU General Public License, version
+3 ("GPLv3"). It applies to a given file (the "Runtime Library") that
+bears a notice placed by the copyright holder of the file stating that
+the file is governed by GPLv3 along with this Exception.
+
+When you use GCC to compile a program, GCC may combine portions of
+certain GCC header files and runtime libraries with the compiled
+program. The purpose of this Exception is to allow compilation of
+non-GPL (including proprietary) programs to use, in this way, the
+header files and runtime libraries covered by this Exception.
+
+0. Definitions.
+
+A file is an "Independent Module" if it either requires the Runtime
+Library for execution after a Compilation Process, or makes use of an
+interface provided by the Runtime Library, but is not otherwise based
+on the Runtime Library.
+
+"GCC" means a version of the GNU Compiler Collection, with or without
+modifications, governed by version 3 (or a specified later version) of
+the GNU General Public License (GPL) with the option of using any
+subsequent versions published by the FSF.
+
+"GPL-compatible Software" is software whose conditions of propagation,
+modification and use would permit combination with GCC in accord with
+the license of GCC.
+
+"Target Code" refers to output from any compiler for a real or virtual
+target processor architecture, in executable form or suitable for
+input to an assembler, loader, linker and/or execution
+phase. Notwithstanding that, Target Code does not include data in any
+format that is used as a compiler intermediate representation, or used
+for producing a compiler intermediate representation.
+
+The "Compilation Process" transforms code entirely represented in
+non-intermediate languages designed for human-written code, and/or in
+Java Virtual Machine byte code, into Target Code. Thus, for example,
+use of source code generators and preprocessors need not be considered
+part of the Compilation Process, since the Compilation Process can be
+understood as starting with the output of the generators or
+preprocessors.
+
+A Compilation Process is "Eligible" if it is done using GCC, alone or
+with other GPL-compatible software, or if it is done without using any
+work based on GCC. For example, using non-GPL-compatible Software to
+optimize any GCC intermediate representations would not qualify as an
+Eligible Compilation Process.
+
+1. Grant of Additional Permission.
+
+You have permission to propagate a work of Target Code formed by
+combining the Runtime Library with Independent Modules, even if such
+propagation would otherwise violate the terms of GPLv3, provided that
+all Target Code was generated by Eligible Compilation Processes. You
+may then convey such a combination under terms of your choice,
+consistent with the licensing of the Independent Modules.
+
+2. No Weakening of GCC Copyleft.
+
+The availability of this Exception does not imply any general
+presumption that third-party software is unaffected by the copyleft
+requirements of the license of GCC.
+
+
+libquadmath/*.[hc]:
+
+ Copyright (C) 2010 Free Software Foundation, Inc.
+ Written by Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+ Written by Tobias Burnus <burnus@net-b.de>
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty 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
+Library General Public License for more details.
+
+libquadmath/gdtoa:
+
+The author of this software is David M. Gay.
+
+Copyright (C) 1998, 1999, 2000, 2001 by Lucent Technologies
+All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the name of Lucent or any of its entities
+not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
+SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+
+libquadmath/math:
+
+atanq.c, expm1q.c, j0q.c, j1q.c, log1pq.c, logq.c:
+ Copyright 2001 by Stephen L. Moshier <moshier@na-net.ornl.gov>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+coshq.c, erfq.c, jnq.c, lgammaq.c, powq.c, roundq.c:
+ Changes for 128-bit __float128 are
+ Copyright (C) 2001 Stephen L. Moshier <moshier@na-net.ornl.gov>
+ and are incorporated herein by permission of the author. The author
+ reserves the right to distribute this material elsewhere under different
+ copying permissions. These modifications are distributed here under
+ the following terms:
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ldexpq.c:
+ * Conversion to long double by Ulrich Drepper,
+ * Cygnus Support, drepper@cygnus.com.
+
+cosq_kernel.c, expq.c, sincos_table.c, sincosq.c, sincosq_kernel.c,
+sinq_kernel.c, truncq.c:
+ Copyright (C) 1997, 1999 Free Software Foundation, Inc.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+isinfq.c:
+ * Written by J.T. Conklin <jtc@netbsd.org>.
+ * Change for long double by Jakub Jelinek <jj@ultra.linux.cz>
+ * Public domain.
+
+llroundq.c, lroundq.c, tgammaq.c:
+ Copyright (C) 1997, 1999, 2002, 2004 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997 and
+ Jakub Jelinek <jj@ultra.linux.cz>, 1999.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+log10q.c:
+ Cephes Math Library Release 2.2: January, 1991
+ Copyright 1984, 1991 by Stephen L. Moshier
+ Adapted for glibc November, 2001
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+remaining files:
+
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+
+
+libjava/classpath/resource/gnu/java/locale/*
+
+They are copyrighted and covered by the terms of use:
+http://www.unicode.org/copyright.html
+
+EXHIBIT 1
+UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
+
+ Unicode Data Files include all data files under the directories
+http://www.unicode.org/Public/ and http://www.unicode.org/reports/.
+Unicode Software includes any source code published in the Unicode Standard or
+under the directories http://www.unicode.org/Public/ and
+http://www.unicode.org/reports/.
+
+NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING,
+INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES ("DATA FILES"),
+AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY,
+ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE,
+DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
+
+ COPYRIGHT AND PERMISSION NOTICE
+
+Copyrigh (c) 1991-2011 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of the Unicode data files and any associated documentation (the "Data Files")
+or Unicode software and any associated documentation (the "Software") to deal
+in the Data Files or Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, and/or sell copies
+ of the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that (a) the above copyright notice(s)
+and this permission notice appear with all copies of the Data Files or Software,
+(b) both the above copyright notice(s) and this permission notice appear
+in associated documentation, and (c) there is clear notice in each modified
+Data File or in the Software as well as in the documentation associated with
+the Data File(s) or Software that the data or software has been modified.
+
+THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE
+ FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not be used
+ in advertising or otherwise to promote the sale, use or other dealings in these
+Data Files or Software without prior written authorization of the copyright holder.
+
+Unicode and the Unicode logo are trademarks of Unicode, Inc., and may be registered
+ in some jurisdictions. All other trademarks and registered trademarks mentioned
+herein are the property of their respective owners.
+
+
+gcc/go/gofrontend, libgo:
+
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+D:
+gdc-4.6 GNU D Compiler
+libphobos-4.6-dev D standard runtime library
+
+The D source package is made up of the following components.
+
+The D front-end for GCC:
+ - d/*
+
+Copyright (C) 2004-2007 David Friedman
+Modified by Vincenzo Ampolo, Michael Parrot, Iain Buclaw, (C) 2009, 2010
+
+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.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License is in `/usr/share/common-licenses/GPL', version 2 of this
+license in `/usr/share/common-licenses/GPL-2'.
+
+
+The DMD Compiler implementation of the D programming language:
+ - d/dmd/*
+
+Copyright (c) 1999-2010 by Digital Mars
+All Rights Reserved
+written by Walter Bright
+http://www.digitalmars.com
+License for redistribution is by either the Artistic License or
+the GNU General Public License (v1).
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License is in `/usr/share/common-licenses/GPL', the Artistic
+license in `/usr/share/common-licenses/Artistic'.
+
+
+The Zlib data compression library:
+ - d/phobos/etc/c/zlib/*
+
+ (C) 1995-2004 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+
+The Phobos standard runtime library:
+ - d/phobos/*
+
+Unless otherwise marked within the file, each file in the source
+is under the following licenses:
+
+Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com
+Written by Walter Bright
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, in both source and binary form, subject to the following
+restrictions:
+
+ o The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ o Altered source versions must be plainly marked as such, and must not
+ be misrepresented as being the original software.
+ o This notice may not be removed or altered from any source
+ distribution.
+
+By plainly marking modifications, something along the lines of adding to each
+file that has been changed a "Modified by Foo Bar" line
+underneath the "Written by" line would be adequate.
+
diff --git a/debian/copyright.in b/debian/copyright.in
new file mode 100644
index 0000000..2b1b5c1
--- /dev/null
+++ b/debian/copyright.in
@@ -0,0 +1,567 @@
+This is the Debian GNU/Linux prepackaged version of the GNU compiler
+collection, containing Ada, C, C++, Fortran 95, Java, Objective-C,
+Objective-C++, and Treelang compilers, documentation, and support
+libraries. In addition, Debian provides the gdc compiler, either in
+the same source package, or built from a separate same source package.
+Packaging is done by the Debian GCC Maintainers
+<debian-gcc@lists.debian.org>, with sources obtained from:
+
+ ftp://gcc.gnu.org/pub/gcc/releases/ (for full releases)
+ svn://gcc.gnu.org/svn/gcc/ (for prereleases)
+ http://bitbucket.org/goshawk/gdc (for D)
+
+The current gcc-@BV@ source package is taken from the SVN @SVN_BRANCH@.
+
+Changes: See changelog.Debian.gz
+
+Debian splits the GNU Compiler Collection into packages for each language,
+library, and documentation as follows:
+
+Language Compiler package Library package Documentation
+---------------------------------------------------------------------------
+Ada gnat-@BV@ libgnat-@BV@ gnat-@BV@-doc
+C gcc-@BV@ gcc-@BV@-doc
+C++ g++-@BV@ libstdc++6 libstdc++6-@BV@-doc
+D gdc-@BV@
+Fortran 95 gfortran-@BV@ libgfortran3 gfortran-@BV@-doc
+Go gccgo-@BV@ libgo0
+Java gcj-@BV@ libgcj10 libgcj-doc
+Objective C gobjc-@BV@ libobjc2
+Objective C++ gobjc++-@BV@
+
+For some language run-time libraries, Debian provides source files,
+development files, debugging symbols and libraries containing position-
+independent code in separate packages:
+
+Language Sources Development Debugging Position-Independent
+------------------------------------------------------------------------------
+C++ libstdc++6-@BV@-dbg libstdc++6-@BV@-pic
+D libphobos-@BV@-dev
+Java libgcj10-src libgcj10-dev libgcj10-dbg
+
+Additional packages include:
+
+All languages:
+libgcc1, libgcc2, libgcc4 GCC intrinsics (platform-dependent)
+gcc-@BV@-base Base files common to all compilers
+gcc-@BV@-soft-float Software floating point (ARM only)
+gcc-@BV@-source The sources with patches
+
+Ada:
+libgnatvsn-dev, libgnatvsn@BV@ GNAT version library
+libgnatprj-dev, libgnatprj@BV@ GNAT Project Manager library
+
+C:
+cpp-@BV@, cpp-@BV@-doc GNU C Preprocessor
+libmudflap0-dev, libmudflap0 Library for instrumenting pointers
+libssp0-dev, libssp0 GCC stack smashing protection library
+libquadmath0 Math routines for the __float128 type
+fixincludes Fix non-ANSI header files
+protoize Create/remove ANSI prototypes from C code
+
+Java:
+gij The Java bytecode interpreter and VM
+libgcj-common Common files for the Java run-time
+libgcj10-awt The Abstract Windowing Toolkit
+libgcj10-jar Java ARchive for the Java run-time
+
+C, C++ and Fortran 95:
+libgomp1-dev, libgomp1 GCC OpenMP (GOMP) support library
+
+Biarch support: On some 64-bit platforms which can also run 32-bit code,
+Debian provides additional packages containing 32-bit versions of some
+libraries. These packages have names beginning with 'lib32' instead of
+'lib', for example lib32stdc++6. Similarly, on some 32-bit platforms which
+can also run 64-bit code, Debian provides additional packages with names
+beginning with 'lib64' instead of 'lib'. These packages contain 64-bit
+versions of the libraries. (At this time, not all platforms and not all
+libraries support biarch.) The license terms for these lib32 or lib64
+packages are identical to the ones for the lib packages.
+
+
+COPYRIGHT STATEMENTS AND LICENSING TERMS
+
+
+GCC is Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, 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.
+
+Files that have exception clauses are licensed under the terms of the
+GNU General Public License; either version 3, or (at your option) any
+later version.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License is in `/usr/share/common-licenses/GPL', version 3 of this
+license in `/usr/share/common-licenses/GPL-3'.
+
+The following runtime libraries are licensed under the terms of the
+GNU General Public License (v3 or later) with version 3.1 of the GCC
+Runtime Library Exception (included in this file):
+
+ - libgcc (libgcc/, gcc/libgcc2.[ch], gcc/unwind*, gcc/gthr*,
+ gcc/coretypes.h, gcc/crtstuff.c, gcc/defaults.h, gcc/dwarf2.h,
+ gcc/emults.c, gcc/gbl-ctors.h, gcc/gcov-io.h, gcc/libgcov.c,
+ gcc/tsystem.h, gcc/typeclass.h).
+ - libdecnumber
+ - libgomp
+ - libssp
+ - libstdc++-v3
+ - libobjc
+ - libmudflap
+ - libgfortran
+ - The libgnat-@BV@ Ada support library and libgnatvsn library.
+ - Various config files in gcc/config/ used in runtime libraries.
+
+In contrast, libgnatprj is licensed under the terms of the pure GNU
+General Public License.
+
+The libgcj library is licensed under the terms of the GNU General
+Public License, with a special exception:
+
+ Linking this library statically or dynamically with other modules
+ is making a combined work based on this library. Thus, the terms
+ and conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give
+ you permission to link this library with independent modules to
+ produce an executable, regardless of the license terms of these
+ independent modules, and to copy and distribute the resulting
+ executable under terms of your choice, provided that you also
+ meet, for each linked independent module, the terms and conditions
+ of the license of that module. An independent module is a module
+ which is not derived from or based on this library. If you modify
+ this library, you may extend this exception to your version of the
+ library, but you are not obligated to do so. If you do not wish
+ to do so, delete this exception statement from your version.
+
+The libffi library is licensed under the following terms:
+
+ libffi - Copyright (c) 1996-2003 Red Hat, Inc.
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ ``Software''), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+
+
+The documentation is licensed under the GNU Free Documentation License (v1.2).
+On Debian GNU/Linux systems, the complete text of this license is in
+`/usr/share/common-licenses/GFDL-1.2'.
+
+
+GCC RUNTIME LIBRARY EXCEPTION
+
+Version 3.1, 31 March 2009
+
+Copyright (C) 2009 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+This GCC Runtime Library Exception ("Exception") is an additional
+permission under section 7 of the GNU General Public License, version
+3 ("GPLv3"). It applies to a given file (the "Runtime Library") that
+bears a notice placed by the copyright holder of the file stating that
+the file is governed by GPLv3 along with this Exception.
+
+When you use GCC to compile a program, GCC may combine portions of
+certain GCC header files and runtime libraries with the compiled
+program. The purpose of this Exception is to allow compilation of
+non-GPL (including proprietary) programs to use, in this way, the
+header files and runtime libraries covered by this Exception.
+
+0. Definitions.
+
+A file is an "Independent Module" if it either requires the Runtime
+Library for execution after a Compilation Process, or makes use of an
+interface provided by the Runtime Library, but is not otherwise based
+on the Runtime Library.
+
+"GCC" means a version of the GNU Compiler Collection, with or without
+modifications, governed by version 3 (or a specified later version) of
+the GNU General Public License (GPL) with the option of using any
+subsequent versions published by the FSF.
+
+"GPL-compatible Software" is software whose conditions of propagation,
+modification and use would permit combination with GCC in accord with
+the license of GCC.
+
+"Target Code" refers to output from any compiler for a real or virtual
+target processor architecture, in executable form or suitable for
+input to an assembler, loader, linker and/or execution
+phase. Notwithstanding that, Target Code does not include data in any
+format that is used as a compiler intermediate representation, or used
+for producing a compiler intermediate representation.
+
+The "Compilation Process" transforms code entirely represented in
+non-intermediate languages designed for human-written code, and/or in
+Java Virtual Machine byte code, into Target Code. Thus, for example,
+use of source code generators and preprocessors need not be considered
+part of the Compilation Process, since the Compilation Process can be
+understood as starting with the output of the generators or
+preprocessors.
+
+A Compilation Process is "Eligible" if it is done using GCC, alone or
+with other GPL-compatible software, or if it is done without using any
+work based on GCC. For example, using non-GPL-compatible Software to
+optimize any GCC intermediate representations would not qualify as an
+Eligible Compilation Process.
+
+1. Grant of Additional Permission.
+
+You have permission to propagate a work of Target Code formed by
+combining the Runtime Library with Independent Modules, even if such
+propagation would otherwise violate the terms of GPLv3, provided that
+all Target Code was generated by Eligible Compilation Processes. You
+may then convey such a combination under terms of your choice,
+consistent with the licensing of the Independent Modules.
+
+2. No Weakening of GCC Copyleft.
+
+The availability of this Exception does not imply any general
+presumption that third-party software is unaffected by the copyleft
+requirements of the license of GCC.
+
+
+libquadmath/*.[hc]:
+
+ Copyright (C) 2010 Free Software Foundation, Inc.
+ Written by Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+ Written by Tobias Burnus <burnus@net-b.de>
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty 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
+Library General Public License for more details.
+
+libquadmath/gdtoa:
+
+The author of this software is David M. Gay.
+
+Copyright (C) 1998, 1999, 2000, 2001 by Lucent Technologies
+All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all
+copies and that both that the copyright notice and this
+permission notice and warranty disclaimer appear in supporting
+documentation, and that the name of Lucent or any of its entities
+not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
+SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+
+libquadmath/math:
+
+atanq.c, expm1q.c, j0q.c, j1q.c, log1pq.c, logq.c:
+ Copyright 2001 by Stephen L. Moshier <moshier@na-net.ornl.gov>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+coshq.c, erfq.c, jnq.c, lgammaq.c, powq.c, roundq.c:
+ Changes for 128-bit __float128 are
+ Copyright (C) 2001 Stephen L. Moshier <moshier@na-net.ornl.gov>
+ and are incorporated herein by permission of the author. The author
+ reserves the right to distribute this material elsewhere under different
+ copying permissions. These modifications are distributed here under
+ the following terms:
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ldexpq.c:
+ * Conversion to long double by Ulrich Drepper,
+ * Cygnus Support, drepper@cygnus.com.
+
+cosq_kernel.c, expq.c, sincos_table.c, sincosq.c, sincosq_kernel.c,
+sinq_kernel.c, truncq.c:
+ Copyright (C) 1997, 1999 Free Software Foundation, Inc.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+isinfq.c:
+ * Written by J.T. Conklin <jtc@netbsd.org>.
+ * Change for long double by Jakub Jelinek <jj@ultra.linux.cz>
+ * Public domain.
+
+llroundq.c, lroundq.c, tgammaq.c:
+ Copyright (C) 1997, 1999, 2002, 2004 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997 and
+ Jakub Jelinek <jj@ultra.linux.cz>, 1999.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+log10q.c:
+ Cephes Math Library Release 2.2: January, 1991
+ Copyright 1984, 1991 by Stephen L. Moshier
+ Adapted for glibc November, 2001
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+remaining files:
+
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+
+
+libjava/classpath/resource/gnu/java/locale/*
+
+They are copyrighted and covered by the terms of use:
+http://www.unicode.org/copyright.html
+
+EXHIBIT 1
+UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
+
+ Unicode Data Files include all data files under the directories
+http://www.unicode.org/Public/ and http://www.unicode.org/reports/.
+Unicode Software includes any source code published in the Unicode Standard or
+under the directories http://www.unicode.org/Public/ and
+http://www.unicode.org/reports/.
+
+NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING,
+INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES ("DATA FILES"),
+AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY,
+ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE,
+DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
+
+ COPYRIGHT AND PERMISSION NOTICE
+
+Copyrigh (c) 1991-2011 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of the Unicode data files and any associated documentation (the "Data Files")
+or Unicode software and any associated documentation (the "Software") to deal
+in the Data Files or Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, and/or sell copies
+ of the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that (a) the above copyright notice(s)
+and this permission notice appear with all copies of the Data Files or Software,
+(b) both the above copyright notice(s) and this permission notice appear
+in associated documentation, and (c) there is clear notice in each modified
+Data File or in the Software as well as in the documentation associated with
+the Data File(s) or Software that the data or software has been modified.
+
+THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE
+ FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not be used
+ in advertising or otherwise to promote the sale, use or other dealings in these
+Data Files or Software without prior written authorization of the copyright holder.
+
+Unicode and the Unicode logo are trademarks of Unicode, Inc., and may be registered
+ in some jurisdictions. All other trademarks and registered trademarks mentioned
+herein are the property of their respective owners.
+
+
+gcc/go/gofrontend, libgo:
+
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+D:
+gdc-@BV@ GNU D Compiler
+libphobos-@BV@-dev D standard runtime library
+
+The D source package is made up of the following components.
+
+The D front-end for GCC:
+ - d/*
+
+Copyright (C) 2004-2007 David Friedman
+Modified by Vincenzo Ampolo, Michael Parrot, Iain Buclaw, (C) 2009, 2010
+
+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.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License is in `/usr/share/common-licenses/GPL', version 2 of this
+license in `/usr/share/common-licenses/GPL-2'.
+
+
+The DMD Compiler implementation of the D programming language:
+ - d/dmd/*
+
+Copyright (c) 1999-2010 by Digital Mars
+All Rights Reserved
+written by Walter Bright
+http://www.digitalmars.com
+License for redistribution is by either the Artistic License or
+the GNU General Public License (v1).
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License is in `/usr/share/common-licenses/GPL', the Artistic
+license in `/usr/share/common-licenses/Artistic'.
+
+
+The Zlib data compression library:
+ - d/phobos/etc/c/zlib/*
+
+ (C) 1995-2004 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+
+The Phobos standard runtime library:
+ - d/phobos/*
+
+Unless otherwise marked within the file, each file in the source
+is under the following licenses:
+
+Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com
+Written by Walter Bright
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, in both source and binary form, subject to the following
+restrictions:
+
+ o The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ o Altered source versions must be plainly marked as such, and must not
+ be misrepresented as being the original software.
+ o This notice may not be removed or altered from any source
+ distribution.
+
+By plainly marking modifications, something along the lines of adding to each
+file that has been changed a "Modified by Foo Bar" line
+underneath the "Written by" line would be adequate.
+
diff --git a/debian/cpp-BV-CRB.preinst.in b/debian/cpp-BV-CRB.preinst.in
new file mode 100644
index 0000000..408889b
--- /dev/null
+++ b/debian/cpp-BV-CRB.preinst.in
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+set -e
+
+if [ "$1" = "upgrade" ] || [ "$1" = "configure" ]; then
+ update-alternatives --quiet --remove @TARGET@-cpp /usr/bin/@TARGET@-cpp-@BV@
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/cpp-BV-doc.doc-base.cpp b/debian/cpp-BV-doc.doc-base.cpp
new file mode 100644
index 0000000..d64e86f
--- /dev/null
+++ b/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: 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@*
diff --git a/debian/cpp-BV-doc.doc-base.cppint b/debian/cpp-BV-doc.doc-base.cppint
new file mode 100644
index 0000000..151d319
--- /dev/null
+++ b/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: 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@*
diff --git a/debian/dh_doclink b/debian/dh_doclink
new file mode 100755
index 0000000..8372658
--- /dev/null
+++ b/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
diff --git a/debian/dh_rmemptydirs b/debian/dh_rmemptydirs
new file mode 100755
index 0000000..4a010c7
--- /dev/null
+++ b/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
diff --git a/debian/dummy-man.1 b/debian/dummy-man.1
new file mode 100644
index 0000000..966d935
--- /dev/null
+++ b/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.
diff --git a/debian/dummy.texi b/debian/dummy.texi
new file mode 100644
index 0000000..127ccaa
--- /dev/null
+++ b/debian/dummy.texi
@@ -0,0 +1 @@
+@c This file is empty because the original one has a non DFSG free license (GFDL)
diff --git a/debian/fixincludes.in b/debian/fixincludes.in
new file mode 100644
index 0000000..23c6e71
--- /dev/null
+++ b/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 "$@"
diff --git a/debian/g++-BV-CRB.preinst.in b/debian/g++-BV-CRB.preinst.in
new file mode 100644
index 0000000..b69c8f8
--- /dev/null
+++ b/debian/g++-BV-CRB.preinst.in
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+set -e
+
+if [ "$1" = "upgrade" ] || [ "$1" = "configure" ]; then
+ update-alternatives --quiet --remove @TARGET@-g++ /usr/bin/@TARGET@-g++-@BV@
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/g++-BV-spu.overrides b/debian/g++-BV-spu.overrides
new file mode 100644
index 0000000..efafa86
--- /dev/null
+++ b/debian/g++-BV-spu.overrides
@@ -0,0 +1,2 @@
+g++-@BV@-spu: non-standard-dir-in-usr usr/spu/
+g++-@BV@-spu: file-in-unusual-dir
diff --git a/debian/gcc-BV-CRB.preinst.in b/debian/gcc-BV-CRB.preinst.in
new file mode 100644
index 0000000..ca34796
--- /dev/null
+++ b/debian/gcc-BV-CRB.preinst.in
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+set -e
+
+if [ "$1" = "upgrade" ] || [ "$1" = "configure" ]; then
+ update-alternatives --quiet --remove @TARGET@-gcc /usr/bin/@TARGET@-gcc-@BV@
+ update-alternatives --quiet --remove @TARGET@-gcov /usr/bin/@TARGET@-gcov-@BV@
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/gcc-BV-doc.doc-base.gcc b/debian/gcc-BV-doc.doc-base.gcc
new file mode 100644
index 0000000..106e18d
--- /dev/null
+++ b/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: 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@*
diff --git a/debian/gcc-BV-doc.doc-base.gccint b/debian/gcc-BV-doc.doc-base.gccint
new file mode 100644
index 0000000..85f4af1
--- /dev/null
+++ b/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: 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@*
diff --git a/debian/gcc-BV-doc.doc-base.gomp b/debian/gcc-BV-doc.doc-base.gomp
new file mode 100644
index 0000000..69ccede
--- /dev/null
+++ b/debian/gcc-BV-doc.doc-base.gomp
@@ -0,0 +1,15 @@
+Document: gcc-@BV@-gomp
+Title: The GNU OpenMP Implementation (for GCC @BV@)
+Author: Various
+Abstract: This manual documents the usage of libgomp, the GNU implementation
+ of the OpenMP Application Programming Interface (API) for multi-platform
+ shared-memory parallel programming in C/C++ and Fortran.
+Section: Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/libgomp.html
+Files: /usr/share/doc/gcc-@BV@-base/libgomp.html
+
+Format: info
+Index: /usr/share/info/libgomp-@BV@.info.gz
+Files: /usr/share/info/libgomp-@BV@*
diff --git a/debian/gcc-BV-hppa64.postinst b/debian/gcc-BV-hppa64.postinst
new file mode 100644
index 0000000..ed5d095
--- /dev/null
+++ b/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
diff --git a/debian/gcc-BV-hppa64.prerm b/debian/gcc-BV-hppa64.prerm
new file mode 100644
index 0000000..88aa45b
--- /dev/null
+++ b/debian/gcc-BV-hppa64.prerm
@@ -0,0 +1,10 @@
+#! /bin/sh -e
+
+if [ "$1" != "upgrade" ]; then
+ update-alternatives --quiet \
+ --remove hppa64-linux-gcc /usr/bin/hppa64-linux-gnu-gcc-@BV@
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/gcc-BV-source.overrides b/debian/gcc-BV-source.overrides
new file mode 100644
index 0000000..46e8559
--- /dev/null
+++ b/debian/gcc-BV-source.overrides
@@ -0,0 +1,5 @@
+gcc-@BV@-source: changelog-file-not-compressed
+
+# these are patches taken over unmodified from 4.3
+gcc-@BV@-source: script-not-executable
+gcc-@BV@-source: shell-script-fails-syntax-check
diff --git a/debian/gcc-BV-spu.overrides b/debian/gcc-BV-spu.overrides
new file mode 100644
index 0000000..8d78a8f
--- /dev/null
+++ b/debian/gcc-BV-spu.overrides
@@ -0,0 +1,2 @@
+gcc-@BV@-spu: non-standard-dir-in-usr usr/spu/
+gcc-@BV@-spu: file-in-unusual-dir
diff --git a/debian/gcc-dummy.texi b/debian/gcc-dummy.texi
new file mode 100644
index 0000000..b84b670
--- /dev/null
+++ b/debian/gcc-dummy.texi
@@ -0,0 +1,41 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+
+@settitle The GNU Compiler Collection (GCC)
+
+@c Create a separate index for command line options.
+@defcodeindex op
+@c Merge the standard indexes into a single one.
+@syncodeindex fn cp
+@syncodeindex vr cp
+@syncodeindex ky cp
+@syncodeindex pg cp
+@syncodeindex tp cp
+
+@paragraphindent 1
+
+@c %**end of header
+
+@copying
+The current documentation is licensed under the same terms as the Debian packaging.
+@end copying
+@ifnottex
+@dircategory Programming
+@direntry
+* @name@: (@name@). The GNU Compiler Collection (@name@).
+@end direntry
+@sp 1
+@end ifnottex
+
+@summarycontents
+@contents
+@page
+
+@node Top
+@top Introduction
+@cindex introduction
+The official GNU compilers' documentation is released under the terms
+of the GNU Free Documentation License with cover texts. This has been
+considered non free by the Debian Project. Thus you will find it in the
+non-free section of the Debian archive.
+@bye
diff --git a/debian/gcc-snapshot.overrides b/debian/gcc-snapshot.overrides
new file mode 100644
index 0000000..98261f3
--- /dev/null
+++ b/debian/gcc-snapshot.overrides
@@ -0,0 +1,4 @@
+gcc-snapshot binary: bad-permissions-for-ali-file
+
+# keep patched ltdl copy
+gcc-snapshot binary: embedded-library
diff --git a/debian/gcc-snapshot.prerm b/debian/gcc-snapshot.prerm
new file mode 100644
index 0000000..0e3d9bb
--- /dev/null
+++ b/debian/gcc-snapshot.prerm
@@ -0,0 +1,5 @@
+#! /bin/sh -e
+
+rm -f /usr/lib/gcc-snapshot/share/python/*.py[co]
+
+#DEBHELPER#
diff --git a/debian/gcj-BV-jdk.doc-base b/debian/gcj-BV-jdk.doc-base
new file mode 100644
index 0000000..4483852
--- /dev/null
+++ b/debian/gcj-BV-jdk.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: Programming/Java
+
+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@*
diff --git a/debian/gcj-BV-jdk.overrides b/debian/gcj-BV-jdk.overrides
new file mode 100644
index 0000000..6390e70
--- /dev/null
+++ b/debian/gcj-BV-jdk.overrides
@@ -0,0 +1 @@
+gcj-@BV@-jdk binary: wrong-name-for-upstream-changelog
diff --git a/debian/gcj-BV-jdk.postinst b/debian/gcj-BV-jdk.postinst
new file mode 100644
index 0000000..3da014d
--- /dev/null
+++ b/debian/gcj-BV-jdk.postinst
@@ -0,0 +1,45 @@
+#! /bin/sh -e
+
+if [ -d /usr/share/doc/gcc-@BV@-base/java ] && [ ! -h /usr/share/doc/gcc-@BV@-base/java ]; then
+ rm -rf /usr/share/doc/gcc-@BV@-base/java
+ ln -s ../gcj-@BV@-base /usr/share/doc/gcc-@BV@-base/java
+fi
+
+prio=@java_priority@
+update-alternatives --quiet \
+ --install /usr/bin/javac javac /usr/bin/gcj-wrapper-@BV@ $prio \
+ @GFDL@--slave /usr/share/man/man1/javac.1.gz javac.1.gz /usr/share/man/man1/gcj-wrapper-@BV@.1.gz
+
+update-alternatives --quiet \
+ --install /usr/bin/jar jar /usr/bin/gjar-@BV@ $prio \
+ --slave /usr/share/man/man1/jar.1.gz jar.1.gz /usr/share/man/man1/gjar-@BV@.1.gz
+
+update-alternatives --quiet \
+ --install /usr/bin/jarsigner jarsigner /usr/bin/gjarsigner-@BV@ $prio \
+ --slave /usr/share/man/man1/jarsigner.1.gz jarsigner.1.gz /usr/share/man/man1/gjarsigner-@BV@.1.gz
+
+update-alternatives --quiet \
+ --install /usr/bin/javah javah /usr/bin/gjavah-@BV@ $prio \
+ --slave /usr/share/man/man1/javah.1.gz javah.1.gz /usr/share/man/man1/gjavah-@BV@.1.gz
+
+update-alternatives --quiet \
+ --install /usr/bin/javadoc javadoc /usr/bin/gjdoc-@BV@ $prio \
+ --slave /usr/share/man/man1/javadoc.1.gz javadoc.1.gz /usr/share/man/man1/gjdoc-@BV@.1.gz
+
+update-alternatives --quiet \
+ --install /usr/bin/native2ascii native2ascii /usr/bin/gnative2ascii-@BV@ $prio \
+ --slave /usr/share/man/man1/native2ascii.1.gz native2ascii.1.gz /usr/share/man/man1/gnative2ascii-@BV@.1.gz
+
+update-alternatives --quiet \
+ --install /usr/bin/rmic rmic /usr/bin/grmic-@BV@ $prio \
+ @GFDL@--slave /usr/share/man/man1/rmic.1.gz rmic.1.gz /usr/share/man/man1/grmic-@BV@.1.gz
+
+update-alternatives --quiet \
+ --install /usr/bin/serialver serialver /usr/bin/gserialver-@BV@ $prio \
+ --slave /usr/share/man/man1/serialver.1.gz serialver.1.gz /usr/share/man/man1/gserialver-@BV@.1.gz
+
+update-alternatives --quiet \
+ --install /usr/bin/tnameserv tnameserv /usr/bin/gtnameserv-@BV@ $prio \
+ --slave /usr/share/man/man1/tnameserv.1.gz tnameserv.1.gz /usr/share/man/man1/gtnameserv-@BV@.1.gz
+
+#DEBHELPER#
diff --git a/debian/gcj-BV-jdk.prerm b/debian/gcj-BV-jdk.prerm
new file mode 100644
index 0000000..f69a11b
--- /dev/null
+++ b/debian/gcj-BV-jdk.prerm
@@ -0,0 +1,15 @@
+#! /bin/sh -e
+
+if [ "$1" = "remove" ] || [ "$1" = "deconfigure" ]; then
+ update-alternatives --quiet --remove javac /usr/bin/gcj-wrapper-@BV@
+ update-alternatives --quiet --remove jar /usr/bin/gjar-@BV@
+ update-alternatives --quiet --remove jarsigner /usr/bin/gjarsigner-@BV@
+ update-alternatives --quiet --remove javah /usr/bin/gjavah-@BV@
+ update-alternatives --quiet --remove javadoc /usr/bin/gjdoc-@BV@
+ update-alternatives --quiet --remove native2ascii /usr/bin/gnative2ascii-@BV@
+ update-alternatives --quiet --remove rmic /usr/bin/grmic-@BV@
+ update-alternatives --quiet --remove serialver /usr/bin/gserialver-@BV@
+ update-alternatives --quiet --remove tnameserv /usr/bin/gtnameserv-@BV@
+fi
+
+#DEBHELPER#
diff --git a/debian/gcj-BV-jre-headless.overrides b/debian/gcj-BV-jre-headless.overrides
new file mode 100644
index 0000000..9994d88
--- /dev/null
+++ b/debian/gcj-BV-jre-headless.overrides
@@ -0,0 +1,2 @@
+# pick up the exact version, in case another gcj version is installed
+gcj-@BV@-jre-headless binary: binary-or-shlib-defines-rpath
diff --git a/debian/gcj-BV-jre-headless.postinst b/debian/gcj-BV-jre-headless.postinst
new file mode 100644
index 0000000..da2b813
--- /dev/null
+++ b/debian/gcj-BV-jre-headless.postinst
@@ -0,0 +1,48 @@
+#! /bin/sh -e
+
+prio=@java_priority@
+
+update-alternatives --quiet \
+ --install /usr/bin/java java /usr/bin/gij-@BV@ $prio \
+ @GFDL@--slave /usr/share/man/man1/java.1.gz java.1.gz /usr/share/man/man1/gij-@BV@.1.gz
+
+update-alternatives --quiet \
+ --install /usr/bin/rmiregistry rmiregistry /usr/bin/grmiregistry-@BV@ $prio \
+ --slave /usr/share/man/man1/rmiregistry.1.gz rmiregistry.1.gz /usr/share/man/man1/grmiregistry-@BV@.1.gz
+
+update-alternatives --quiet \
+ --install /usr/bin/keytool keytool /usr/bin/gkeytool-@BV@ $prio \
+ --slave /usr/share/man/man1/keytool.1.gz keytool.1.gz /usr/share/man/man1/gkeytool-@BV@.1.gz
+
+update-alternatives --quiet \
+ --install /usr/bin/orbd orbd /usr/bin/gorbd-@BV@ $prio \
+ --slave /usr/share/man/man1/orbd.1.gz orbd.1.gz /usr/share/man/man1/gorbd-@BV@.1.gz
+
+update-alternatives --quiet \
+ --install /usr/bin/rmid rmid /usr/bin/grmid-@BV@ $prio \
+ --slave /usr/share/man/man1/rmid.1.gz rmid.1.gz /usr/share/man/man1/grmid-@BV@.1.gz
+
+case "$1" in
+configure)
+ if [ ! -f /var/lib/gcj-@BV@/classmap.db ]; then
+ uname=$(uname -m)
+ mkdir -p /var/lib/gcj-@BV@
+ if gcj-dbtool-@BV@ -n /var/lib/gcj-@BV@/classmap.db; then
+ case "$uname" in arm*|m68k|parisc*)
+ echo >&2 "gcj-dbtool succeeded unexpectedly"
+ esac
+ else
+ case "$uname" in
+ arm*|m68k|parisc*)
+ echo >&2 "ERROR: gcj-dbtool did fail; known problem on $uname";;
+ *)
+ exit 2
+ esac
+ touch /var/lib/gcj-@BV@/classmap.db
+ fi
+ fi
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/gcj-BV-jre-headless.postrm b/debian/gcj-BV-jre-headless.postrm
new file mode 100644
index 0000000..24eb42a
--- /dev/null
+++ b/debian/gcj-BV-jre-headless.postrm
@@ -0,0 +1,10 @@
+#! /bin/sh -e
+
+case "$1" in
+ purge)
+ rm -f /var/lib/gcj-@BV@/classmap.db
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/gcj-BV-jre-headless.prerm b/debian/gcj-BV-jre-headless.prerm
new file mode 100644
index 0000000..1d66dc3
--- /dev/null
+++ b/debian/gcj-BV-jre-headless.prerm
@@ -0,0 +1,13 @@
+#! /bin/sh -e
+
+if [ "$1" = "remove" ] || [ "$1" = "deconfigure" ]; then
+ update-alternatives --quiet --remove java /usr/bin/gij-@BV@
+ update-alternatives --quiet --remove rmiregistry /usr/bin/grmiregistry-@BV@
+ update-alternatives --quiet --remove keytool /usr/bin/gkeytool-@BV@
+ update-alternatives --quiet --remove orbd /usr/bin/gorbd-@BV@
+ update-alternatives --quiet --remove rmid /usr/bin/grmid-@BV@
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/gcj-wrapper-BV b/debian/gcj-wrapper-BV
new file mode 100644
index 0000000..4648d79
--- /dev/null
+++ b/debian/gcj-wrapper-BV
@@ -0,0 +1,91 @@
+#!/usr/bin/perl -w
+#
+# Starts the GNU Java compiler.
+#
+# Command-line arguments should be in the style of Sun's Java compiler;
+# these will be converted to gcj arguments before being passed to the
+# gcj itself.
+#
+# Copyright (C) 2002-2003 by Ben Burton <bab@debian.org>
+# Based on the original gcj-wrapper-3.2 shell script.
+
+use strict;
+
+# The real Java compiler:
+my $javaCompiler = '/usr/bin/gcj-@BV@';
+
+# The command-line arguments to pass to the real Java compiler:
+my @commandLine;
+
+# The warning flags to pass to the GNU Java compiler:
+my $warnings = '-Wall';
+
+# Build the command-line from the arguments given.
+my $parsingOptions = 1;
+my $copyNextArg = 0;
+my $ignoreNextArg = 0;
+my $appendNextArg = '';
+foreach my $arg (@ARGV) {
+ # See if we already know what to do with this argument.
+ if ($ignoreNextArg) {
+ # Throw it away.
+ $ignoreNextArg = 0;
+ next;
+ } elsif ($copyNextArg or not $parsingOptions) {
+ # Copy it directly.
+ push @commandLine, $arg;
+ $copyNextArg = 0;
+ next;
+ } elsif ($appendNextArg) {
+ # Append it to $appendNextArg and then copy directly.
+ push @commandLine, ($appendNextArg . $arg);
+ $appendNextArg = '';
+ next;
+ }
+
+ # Try to interpret Sun-style options.
+ if ($arg eq '-version') {
+ push @commandLine, '--version';
+ } elsif ($arg eq '-h' or $arg eq '-help') {
+ push @commandLine, '--help';
+ } elsif ($arg eq '-classpath' or $arg eq '--classpath' or $arg eq '--cp') {
+ $appendNextArg = '--classpath=';
+ } elsif ($arg eq '-encoding' or $arg eq '-bootclasspath' or
+ $arg eq '-extdirs') {
+ $appendNextArg = '-' . $arg . '=';
+ } elsif ($arg eq '-d') {
+ push @commandLine, '-d';
+ $copyNextArg = 1;
+ } elsif ($arg eq '-nowarn') {
+ $warnings = '';
+ } elsif ($arg =~ /^-g/) {
+ # Some kind of debugging option - just switch debugging on.
+ push @commandLine, '-g' if ($arg ne '-g:none');
+ } elsif ($arg eq '-O') {
+ push @commandLine, '-O2';
+ } elsif ($arg eq '-Xss') {
+ push @commandLine, $arg;
+ } elsif ($arg =~ /^-X/) {
+ # An extended Sun option (which we don't support).
+ push @commandLine, '--help' if ($arg eq '-X');
+ } elsif ($arg eq '-source' or $arg eq '-sourcepath' or $arg eq '-target') {
+ # An unsupported option with a following argument.
+ $ignoreNextArg = 1;
+ } elsif ($arg =~ /^-/) {
+ # An unsupported standalone option.
+ } else {
+ # Some non-option argument has been given.
+ # Stop parsing options at this point.
+ push @commandLine, $arg;
+ $parsingOptions = 0;
+ }
+}
+
+# Was there a partial argument that was never completed?
+push @commandLine, $appendNextArg if ($appendNextArg);
+
+# Call the real Java compiler.
+my @fullCommandLine = ( $javaCompiler, '-C' );
+push @fullCommandLine, $warnings if ($warnings);
+push @fullCommandLine, @commandLine;
+exec @fullCommandLine or exit(1);
diff --git a/debian/gcj-wrapper-BV.1 b/debian/gcj-wrapper-BV.1
new file mode 100644
index 0000000..8625073
--- /dev/null
+++ b/debian/gcj-wrapper-BV.1
@@ -0,0 +1,20 @@
+.TH GCJ-WRAPPER 1 "June 6, 2002" gcj-wrapper "Java User's Manual"
+.SH NAME
+gcj-wrapper \- a wrapper around gcj
+
+.SH SYNOPSIS
+gcj-wrapper [\fB\s-1OPTION\s0\fR] ... [\fI\s-1ARGS\s0\fR...]
+
+.SH DESCRIPTION
+
+\fBgcj-wrapper\fR is a wrapper around gcj(1) to be called as the java
+compiler. Options different for javac(1) and gcj(1) are translated,
+options unknown to gcj(1) are silently ignored.
+
+.SH OPTIONS
+See gcj-@BV@(1) for a list of options that gcj understands.
+
+.SH "SEE ALSO"
+.BR gcj-@BV@(1)
+,
+.BR javac(1)
diff --git a/debian/gcjh-wrapper-BV b/debian/gcjh-wrapper-BV
new file mode 100644
index 0000000..312c02c
--- /dev/null
+++ b/debian/gcjh-wrapper-BV
@@ -0,0 +1,86 @@
+#!/usr/bin/perl -w
+#
+# Starts the GNU Java header generator.
+#
+# Command-line arguments should be in the style of Sun's javah command;
+# these will be converted to gcjh arguments before being passed to the
+# gcjh itself.
+#
+# Copyright (C) 2003 by Peter Hawkins <peterh@debian.org>
+# Haphazardly hacked up based on the gcj-wrapper perl script.
+# Copyright (C) 2002-2003 by Ben Burton <bab@debian.org>
+# Based on the original gcj-wrapper-3.2 shell script.
+
+use strict;
+
+# The real Java header generator:
+my $javaHeaderGen = '/usr/bin/gcjh-@BV@';
+
+# The command-line arguments to pass to the real Java compiler:
+my @commandLine;
+
+# Build the command-line from the arguments given.
+my $parsingOptions = 1;
+my $copyNextArg = 0;
+my $ignoreNextArg = 0;
+my $appendNextArg = '';
+foreach my $arg (@ARGV) {
+ # See if we already know what to do with this argument.
+ if ($ignoreNextArg) {
+ # Throw it away.
+ $ignoreNextArg = 0;
+ next;
+ } elsif ($copyNextArg or not $parsingOptions) {
+ # Copy it directly.
+ push @commandLine, $arg;
+ $copyNextArg = 0;
+ next;
+ } elsif ($appendNextArg) {
+ # Append it to $appendNextArg and then copy directly.
+ push @commandLine, ($appendNextArg . $arg);
+ $appendNextArg = '';
+ next;
+ }
+
+ # Try to interpret Sun-style options.
+ if ($arg eq '-version') {
+ push @commandLine, '--version';
+ } elsif ($arg eq '-h' or $arg eq '-help') {
+ push @commandLine, '--help';
+ } elsif ($arg eq '-verbose') {
+ push @commandLine, '--verbose';
+ } elsif ($arg eq '-classpath' or $arg eq '--classpath' or $arg eq '--cp') {
+ $appendNextArg = '--classpath=';
+ } elsif ($arg eq '-encoding' or $arg eq '-bootclasspath' or
+ $arg eq '-extdirs') {
+ $appendNextArg = "-".$arg . '=';
+ } elsif ($arg eq '-d') {
+ push @commandLine, '-d';
+ $copyNextArg = 1;
+ } elsif ($arg eq '-o') {
+ push @commandLine, '-o';
+ $copyNextArg = 1;
+ } elsif ($arg eq '-stubs') {
+ push @commandLine, '-stubs';
+ } elsif ($arg eq '-jni') {
+ push @commandLine, '-jni';
+ } elsif ($arg =~ /^-old/) {
+ # An extended Sun option (which we don't support).
+ push @commandLine, '--help' if ($arg eq '-old');
+ } elsif ($arg =~ /^-/) {
+ # An unsupported standalone option.
+ } else {
+ # Some non-option argument has been given.
+ # Stop parsing options at this point.
+ push @commandLine, $arg;
+ $parsingOptions = 0;
+ }
+}
+
+# Was there a partial argument that was never completed?
+push @commandLine, $appendNextArg if ($appendNextArg);
+
+# Call the real Java header generator.
+my @fullCommandLine = ( $javaHeaderGen );
+push @fullCommandLine, @commandLine;
+exec @fullCommandLine or exit(1);
diff --git a/debian/gcjh-wrapper-BV.1 b/debian/gcjh-wrapper-BV.1
new file mode 100644
index 0000000..fa1ad03
--- /dev/null
+++ b/debian/gcjh-wrapper-BV.1
@@ -0,0 +1,20 @@
+.TH GCJH-WRAPPER 1 "June 6, 2002" gcjh-wrapper "Java User's Manual"
+.SH NAME
+gcjh-wrapper \- a wrapper around gcjh
+
+.SH SYNOPSIS
+gcjh-wrapper [\fB\s-1OPTION\s0\fR] ... [\fI\s-1ARGS\s0\fR...]
+
+.SH DESCRIPTION
+
+\fBgcjh-wrapper\fR is a wrapper around gcjh(1) to be called as the java header
+compiler. Options different for javah(1) and gcjh(1) are translated,
+options unknown to gcjh(1) are silently ignored.
+
+.SH OPTIONS
+See gcjh-@BV@(1) for a list of options that gcj understands.
+
+.SH "SEE ALSO"
+.BR gcjh-@BV@(1)
+,
+.BR javah(1)
diff --git a/debian/gfortran-BV-CRB.preinst.in b/debian/gfortran-BV-CRB.preinst.in
new file mode 100644
index 0000000..f6e7cfd
--- /dev/null
+++ b/debian/gfortran-BV-CRB.preinst.in
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+set -e
+
+if [ "$1" = "upgrade" ] || [ "$1" = "configure" ]; then
+ update-alternatives --quiet --remove @TARGET@-gfortran /usr/bin/@TARGET@-gfortran-@BV@
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/gfortran-BV-doc.doc-base b/debian/gfortran-BV-doc.doc-base
new file mode 100644
index 0000000..485d458
--- /dev/null
+++ b/debian/gfortran-BV-doc.doc-base
@@ -0,0 +1,14 @@
+Document: gfortran-@BV@
+Title: The GNU Fortran Compiler
+Author: Various
+Abstract: This manual documents how to run, install and port `gfortran',
+ as well as its new features and incompatibilities, and how to report bugs.
+Section: Programming/Fortran
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/fortran/gfortran.html
+Files: /usr/share/doc/gcc-@BV@-base/fortran/gfortran.html
+
+Format: info
+Index: /usr/share/info/gfortran-@BV@.info.gz
+Files: /usr/share/info/gfortran-@BV@*
diff --git a/debian/gfortran-BV-spu.overrides b/debian/gfortran-BV-spu.overrides
new file mode 100644
index 0000000..1e7904d
--- /dev/null
+++ b/debian/gfortran-BV-spu.overrides
@@ -0,0 +1,2 @@
+gfortran-@BV@-spu: non-standard-dir-in-usr usr/spu/
+gfortran-@BV@-spu: file-in-unusual-dir
diff --git a/debian/gij-hppa b/debian/gij-hppa
new file mode 100644
index 0000000..60dc3af
--- /dev/null
+++ b/debian/gij-hppa
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+prctl=
+
+case "$(prctl --unaligned=)" in *signal)
+ echo >&2 "$(basename $0): ignore unaligned memory accesses"
+ prctl="prctl --unaligned=default"
+esac
+
+exec $prctl /usr/bin/gij-4.4.bin "$@"
+#! /bin/sh
+
+prctl=
+
+case "$(prctl --unaligned=)" in *signal)
+ echo >&2 "$(basename $0): ignore unaligned memory accesses"
+ prctl="prctl --unaligned=default"
+esac
+
+exec $prctl /usr/bin/gij-4.4.bin "$@"
diff --git a/debian/gij-wrapper-BV b/debian/gij-wrapper-BV
new file mode 100644
index 0000000..114ec1b
--- /dev/null
+++ b/debian/gij-wrapper-BV
@@ -0,0 +1,98 @@
+#!/usr/bin/perl -w
+#
+# Starts the GNU Java interpreter.
+#
+# Command-line arguments should be in the style of Sun's Java runtime;
+# these will be converted to gij arguments before being passed to the
+# gij itself.
+#
+# The Debian JNI module directory and any other specified JNI
+# directories will be included on the JNI search path.
+#
+# Copyright (C) 2002-2003 by Ben Burton <bab@debian.org>
+# Based on the original gij-wrapper-3.2 shell script.
+
+use strict;
+
+# The real Java runtime:
+my $javaRuntime = '/usr/bin/gij-@BV@';
+
+# The debian JNI module directory:
+my $debianJNIDir = '/usr/lib/jni';
+
+# The command-line arguments to pass to the real Java runtime:
+my @commandLine;
+
+# The full JNI search path to use:
+my $JNIPath = '';
+
+# Build the command-line from the arguments given.
+my $parsingOptions = 1;
+
+# Flag used to copy argument to -classpath or -cp.
+my $copyNext = 0;
+foreach my $arg (@ARGV) {
+ if (not $parsingOptions) {
+ # We're done parsing options; just copy all remaining arguments directly.
+ push @commandLine, $arg;
+ next;
+ }
+ if ($copyNext) {
+ push @commandLine, $arg;
+ $copyNext = 0;
+ next;
+ }
+
+ # Try to interpret Sun-style options.
+ if ($arg eq '-version') {
+ push @commandLine, '--version';
+ } elsif ($arg eq '-h' or $arg eq '-help') {
+ push @commandLine, '--help';
+ } elsif ($arg eq '-cp' or $arg eq '--cp') {
+ push @commandLine, '-cp';
+ $copyNext = 1;
+ } elsif ($arg eq '-classpath' or $arg eq '--classpath') {
+ push @commandLine, '-classpath';
+ $copyNext = 1;
+ } elsif ($arg =~ /^-Djava.library.path=(.+)$/) {
+ # A component of the JNI search path has been given.
+ if ($JNIPath) {
+ $JNIPath = $JNIPath . ':' . $1;
+ } else {
+ $JNIPath = $1;
+ }
+ } elsif ($arg eq '-jar' or $arg =~ /^-D/) {
+ # Copy the argument directly.
+ push @commandLine, $arg;
+ } elsif ($arg =~ /^-/) {
+ # An unrecognised option has been passed - just drop it.
+ } else {
+ # Some non-option argument has been given.
+ # Stop parsing options at this point.
+ push @commandLine, $arg;
+ $parsingOptions = 0;
+ }
+}
+
+# Add the debian JNI module directory to the JNI search path if it's not
+# already there.
+if ($JNIPath !~ /(^|:)$debianJNIDir($|:)/) {
+ if ($JNIPath) {
+ $JNIPath = $JNIPath . ':' . $debianJNIDir;
+ } else {
+ $JNIPath = $debianJNIDir;
+ }
+}
+
+# Use environment variable $LTDL_LIBRARY_PATH to store the JNI path,
+# since gij uses libltdl to dlopen JNI modules.
+if ($ENV{LTDL_LIBRARY_PATH}) {
+ $ENV{LTDL_LIBRARY_PATH} = $ENV{LTDL_LIBRARY_PATH} . ':' . $JNIPath;
+} else {
+ $ENV{LTDL_LIBRARY_PATH} = $JNIPath;
+}
+
+# Call the real Java runtime.
+my @fullCommandLine = ( $javaRuntime );
+push @fullCommandLine, @commandLine;
+exec @fullCommandLine or exit(1);
diff --git a/debian/gij-wrapper-BV.1 b/debian/gij-wrapper-BV.1
new file mode 100644
index 0000000..fe7d768
--- /dev/null
+++ b/debian/gij-wrapper-BV.1
@@ -0,0 +1,22 @@
+.TH GIJ-WRAPPER 1 "August 11, 2001" gij-wrapper "Java User's Manual"
+.SH NAME
+gij-wrapper \- a wrapper around gij
+
+.SH SYNOPSIS
+gij-wrapper [\fB\s-1OPTION\s0\fR] ... \fI\s-1JARFILE\s0\fR [\fI\s-1ARGS\s0\fR...]
+.PP
+gij-wrapper [\fB\-jar\fR] [\fB\s-1OPTION\s0\fR] ... \fI\s-1CLASS\s0\fR [\fI\s-1ARGS\s0\fR...]
+
+.SH DESCRIPTION
+
+\fBgij-wrapper\fR is a wrapper around gij(1) to be called as the java
+interpreter. Options different for java(1) and gij(1) are translated,
+options unknown to gij(1) are silently ignored.
+
+.SH OPTIONS
+See gij-@BV@(1) for a list of options that gij understands.
+
+.SH "SEE ALSO"
+.BR gij-@BV@(1)
+,
+.BR java(1)
diff --git a/debian/gnat-BV-doc.doc-base.rm b/debian/gnat-BV-doc.doc-base.rm
new file mode 100644
index 0000000..7957275
--- /dev/null
+++ b/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: Programming/Ada
+
+Format: html
+Index: /usr/share/doc/gnat-@BV@-doc/gnat_rm.html
+Files: /usr/share/doc/gnat-@BV@-doc/gnat_rm.html
+
+Format: info
+Index: /usr/share/info/gnat_rm-@BV@.info.gz
+Files: /usr/share/info/gnat_rm-@BV@*
diff --git a/debian/gnat-BV-doc.doc-base.style b/debian/gnat-BV-doc.doc-base.style
new file mode 100644
index 0000000..db6dfc8
--- /dev/null
+++ b/debian/gnat-BV-doc.doc-base.style
@@ -0,0 +1,16 @@
+Document: gnat-style-@BV@
+Title: GNAT Coding Style
+Author: Various
+Abstract: Most of GNAT is written in Ada using a consistent style to
+ ensure readability of the code. This document has been written to
+ help maintain this consistent style, while having a large group of
+ developers work on the compiler.
+Section: Programming/Ada
+
+Format: html
+Index: /usr/share/doc/gnat-@BV@-doc/gnat-style.html
+Files: /usr/share/doc/gnat-@BV@-doc/gnat-style.html
+
+Format: info
+Index: /usr/share/info/gnat-style-@BV@.info.gz
+Files: /usr/share/info/gnat-style-@BV@*
diff --git a/debian/gnat-BV-doc.doc-base.ug b/debian/gnat-BV-doc.doc-base.ug
new file mode 100644
index 0000000..00dedf1
--- /dev/null
+++ b/debian/gnat-BV-doc.doc-base.ug
@@ -0,0 +1,16 @@
+Document: gnat-ugn-@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: Programming/Ada
+
+Format: html
+Index: /usr/share/doc/gnat-@BV@-doc/gnat_ugn.html
+Files: /usr/share/doc/gnat-@BV@-doc/gnat_ugn.html
+
+Format: info
+Index: /usr/share/info/gnat_ugn-@BV@.info.gz
+Files: /usr/share/info/gnat_ugn-@BV@*
diff --git a/debian/gnat-BV.overrides b/debian/gnat-BV.overrides
new file mode 100644
index 0000000..3fe023a
--- /dev/null
+++ b/debian/gnat-BV.overrides
@@ -0,0 +1 @@
+gnat-@BV@: quilt-build-dep-but-no-series-file
diff --git a/debian/gnat.1 b/debian/gnat.1
new file mode 100644
index 0000000..c90bc13
--- /dev/null
+++ b/debian/gnat.1
@@ -0,0 +1,43 @@
+.\" Hey, Emacs! This is an -*- nroff -*- source file.
+.\"
+.\" Copyright (C) 1996 Erick Branderhorst <branderh@debian.org>
+.\" Copyright (C) 2011 Nicolas Boulenguez <nicolas.boulenguez@free.fr>
+.\"
+.\" 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, gnathtml, gnatkr, gnatlink,
+gnatls, gnatmake, gnatprep, gnatpsta, gnatpsys, gnatxref \-
+GNAT toolbox
+.SH DESCRIPTION
+Those programs are part of GNU GNAT, a freely available Ada 95 compiler.
+.PP
+For accessing the full GNAT manuals, use
+.B info gnat-ug-4.6
+and
+.B info gnat-rm-4.6
+for the sections related to the reference manual.
+If those sections cannot be found, you will have to install the
+gnat-4.4-doc package as well (since these manuals contain invariant parts,
+the package is located in the non-free part of the Debian archive).
+You may also browse
+.B http://gcc.gnu.org/onlinedocs
+which provides the GCC online documentation.
+.SH AUTHOR
+This manpage has been written by Samuel Tardieu <sam@debian.org>, for the
+Debian GNU/Linux project.
diff --git a/debian/gnatprj.gpr b/debian/gnatprj.gpr
new file mode 100644
index 0000000..087869e
--- /dev/null
+++ b/debian/gnatprj.gpr
@@ -0,0 +1,32 @@
+-- Project file for use with GNAT
+-- Copyright (c) 2005, 2008 Ludovic Brenta <ludovic@ludovic-brenta.org>
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- This project file is designed to help build applications that use
+-- GNAT project files. Here is an example of how to use this project file:
+--
+-- with "gnatprj";
+-- project Example is
+-- for Object_Dir use "obj";
+-- for Exec_Dir use ".";
+-- for Main use ("example");
+-- end Example;
+
+with "gnatvsn.gpr";
+project Gnatprj is
+ for Library_Name use "gnatprj";
+ for Library_Dir use "/usr/lib";
+ for Library_Kind use "dynamic";
+ for Source_Dirs use ("/usr/share/ada/adainclude/gnatprj");
+ for Library_ALI_Dir use "/usr/lib/ada/adalib/gnatprj";
+ for Externally_Built use "true";
+end Gnatprj;
diff --git a/debian/gnatvsn.gpr b/debian/gnatvsn.gpr
new file mode 100644
index 0000000..461ca0d
--- /dev/null
+++ b/debian/gnatvsn.gpr
@@ -0,0 +1,31 @@
+-- Project file for use with GNAT
+-- Copyright (c) 2005, 2008 Ludovic Brenta <ludovic@ludovic-brenta.org>
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- This project file is designed to help build applications that use
+-- GNAT project files. Here is an example of how to use this project file:
+--
+-- with "gnatvsn";
+-- project Example is
+-- for Object_Dir use "obj";
+-- for Exec_Dir use ".";
+-- for Main use ("example");
+-- end Example;
+
+project Gnatvsn is
+ for Library_Name use "gnatvsn";
+ for Library_Dir use "/usr/lib";
+ for Library_Kind use "dynamic";
+ for Source_Dirs use ("/usr/share/ada/adainclude/gnatvsn");
+ for Library_ALI_Dir use "/usr/lib/ada/adalib/gnatvsn";
+ for Externally_Built use "true";
+end Gnatvsn;
diff --git a/debian/jdb.sh b/debian/jdb.sh
new file mode 100644
index 0000000..d14f139
--- /dev/null
+++ b/debian/jdb.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Placeholder script to fake a
+# JDK compatible JAVA_HOME directory.
+
+echo >&2 "This script is only a placeholder."
+echo >&2 "Some programs need a JDK rather than only a JRE to work."
+echo >&2 "They test for this tool to detect a JDK installation, but"
+echo >&2 "don't really need its functionality to work correctly."
diff --git a/debian/lib32gcc1.symbols.amd64 b/debian/lib32gcc1.symbols.amd64
new file mode 100644
index 0000000..30dd227
--- /dev/null
+++ b/debian/lib32gcc1.symbols.amd64
@@ -0,0 +1,134 @@
+libgcc_s.so.1 lib32gcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GCC_4.5.0@GCC_4.5.0 1:4.5.0
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addtf3@GCC_4.4.0 1:4.4.0
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __copysigntf3@GCC_4.4.0 1:4.4.0
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.4.0 1:4.4.0
+ __divtf3@GCC_4.4.0 1:4.4.0
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.4.0 1:4.4.0
+ __extenddftf2@GCC_4.4.0 1:4.4.0
+ __extendsftf2@GCC_4.4.0 1:4.4.0
+ __extendxftf2@GCC_4.5.0 1:4.5.0
+ __fabstf2@GCC_4.4.0 1:4.4.0
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.4.0 1:4.4.0
+ __fixtfsi@GCC_4.4.0 1:4.4.0
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.4.0 1:4.4.0
+ __fixunstfsi@GCC_4.4.0 1:4.4.0
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfsi@GCC_3.0 1:4.1.1
+ __fixxfdi@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.4.0 1:4.4.0
+ __floatdixf@GCC_3.0 1:4.1.1
+ __floatsitf@GCC_4.4.0 1:4.4.0
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.4.0 1:4.4.0
+ __floatundixf@GCC_4.2.0 1:4.2.1
+ __floatunsitf@GCC_4.4.0 1:4.4.0
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.4.0 1:4.4.0
+ __gttf2@GCC_4.4.0 1:4.4.0
+ __letf2@GCC_4.4.0 1:4.4.0
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_4.4.0 1:4.4.0
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.4.0 1:4.4.0
+ __multf3@GCC_4.4.0 1:4.4.0
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negtf2@GCC_4.4.0 1:4.4.0
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __netf2@GCC_4.4.0 1:4.4.0
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.4.0 1:4.4.0
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subtf3@GCC_4.4.0 1:4.4.0
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __trunctfdf2@GCC_4.4.0 1:4.4.0
+ __trunctfsf2@GCC_4.4.0 1:4.4.0
+ __trunctfxf2@GCC_4.4.0 1:4.4.0
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unordtf2@GCC_4.4.0 1:4.4.0
diff --git a/debian/lib32gcc1.symbols.kfreebsd-amd64 b/debian/lib32gcc1.symbols.kfreebsd-amd64
new file mode 100644
index 0000000..30dd227
--- /dev/null
+++ b/debian/lib32gcc1.symbols.kfreebsd-amd64
@@ -0,0 +1,134 @@
+libgcc_s.so.1 lib32gcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GCC_4.5.0@GCC_4.5.0 1:4.5.0
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addtf3@GCC_4.4.0 1:4.4.0
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __copysigntf3@GCC_4.4.0 1:4.4.0
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.4.0 1:4.4.0
+ __divtf3@GCC_4.4.0 1:4.4.0
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.4.0 1:4.4.0
+ __extenddftf2@GCC_4.4.0 1:4.4.0
+ __extendsftf2@GCC_4.4.0 1:4.4.0
+ __extendxftf2@GCC_4.5.0 1:4.5.0
+ __fabstf2@GCC_4.4.0 1:4.4.0
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.4.0 1:4.4.0
+ __fixtfsi@GCC_4.4.0 1:4.4.0
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.4.0 1:4.4.0
+ __fixunstfsi@GCC_4.4.0 1:4.4.0
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfsi@GCC_3.0 1:4.1.1
+ __fixxfdi@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.4.0 1:4.4.0
+ __floatdixf@GCC_3.0 1:4.1.1
+ __floatsitf@GCC_4.4.0 1:4.4.0
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.4.0 1:4.4.0
+ __floatundixf@GCC_4.2.0 1:4.2.1
+ __floatunsitf@GCC_4.4.0 1:4.4.0
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.4.0 1:4.4.0
+ __gttf2@GCC_4.4.0 1:4.4.0
+ __letf2@GCC_4.4.0 1:4.4.0
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_4.4.0 1:4.4.0
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.4.0 1:4.4.0
+ __multf3@GCC_4.4.0 1:4.4.0
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negtf2@GCC_4.4.0 1:4.4.0
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __netf2@GCC_4.4.0 1:4.4.0
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.4.0 1:4.4.0
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subtf3@GCC_4.4.0 1:4.4.0
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __trunctfdf2@GCC_4.4.0 1:4.4.0
+ __trunctfsf2@GCC_4.4.0 1:4.4.0
+ __trunctfxf2@GCC_4.4.0 1:4.4.0
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unordtf2@GCC_4.4.0 1:4.4.0
diff --git a/debian/lib32gcc1.symbols.ppc64 b/debian/lib32gcc1.symbols.ppc64
new file mode 100644
index 0000000..782c9bb
--- /dev/null
+++ b/debian/lib32gcc1.symbols.ppc64
@@ -0,0 +1,139 @@
+libgcc_s.so.1 lib32gcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3.4@GCC_3.3.4 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.1.0@GCC_4.1.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __adddf3@GCC_3.0 1:4.1.1
+ __addsf3@GCC_3.0 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdf3@GCC_3.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divsf3@GCC_3.0 1:4.1.1
+ __divtc3@GCC_4.1.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqdf2@GCC_3.0 1:4.1.1
+ __eqsf2@GCC_3.0 1:4.1.1
+ __extendsfdf2@GCC_3.0 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixdfsi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixsfsi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.1.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.1.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.1.0 1:4.1.1
+ __floatsidf@GCC_3.0 1:4.1.1
+ __floatsisf@GCC_3.0 1:4.1.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.2.0 1:4.2.1
+ __floatunsidf@GCC_4.2.0 1:4.2.1
+ __floatunsisf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __gcc_qadd@GCC_4.1.0 1:4.1.1
+ __gcc_qdiv@GCC_4.1.0 1:4.1.1
+ __gcc_qmul@GCC_4.1.0 1:4.1.1
+ __gcc_qsub@GCC_4.1.0 1:4.1.1
+ __gedf2@GCC_3.0 1:4.1.1
+ __gesf2@GCC_3.0 1:4.1.1
+ __gtdf2@GCC_3.0 1:4.1.1
+ __gtsf2@GCC_3.0 1:4.1.1
+ __ledf2@GCC_3.0 1:4.1.1
+ __lesf2@GCC_3.0 1:4.1.1
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __ltdf2@GCC_3.0 1:4.1.1
+ __ltsf2@GCC_3.0 1:4.1.1
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldf3@GCC_3.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __mulsf3@GCC_3.0 1:4.1.1
+ __multc3@GCC_4.1.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __nedf2@GCC_3.0 1:4.1.1
+ __negdf2@GCC_3.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negsf2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __nesf2@GCC_3.0 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.1.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subdf3@GCC_3.0 1:4.1.1
+ __subsf3@GCC_3.0 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __trampoline_setup@GCC_3.4.2 1:4.1.1
+ __truncdfsf2@GCC_3.0 1:4.1.1
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unorddf2@GCC_3.3.4 1:4.1.1
+ __unordsf2@GCC_3.3.4 1:4.1.1
diff --git a/debian/lib32gcc1.symbols.s390x b/debian/lib32gcc1.symbols.s390x
new file mode 100644
index 0000000..7cc6184
--- /dev/null
+++ b/debian/lib32gcc1.symbols.s390x
@@ -0,0 +1,101 @@
+libgcc_s.so.1 lib32gcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.1.0@GCC_4.1.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.1.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.1.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.1.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.1.0 1:4.1.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.1.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.1.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
diff --git a/debian/lib32gccLC.postinst b/debian/lib32gccLC.postinst
new file mode 100644
index 0000000..0163e03
--- /dev/null
+++ b/debian/lib32gccLC.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+ configure)
+ docdir=/usr/share/doc/lib32gcc@LC@
+ if [ -d $docdir ] && [ ! -h $docdir ]; then
+ rm -rf $docdir
+ ln -s gcc-@BV@-base $docdir
+ fi
+esac
+
+#DEBHELPER#
diff --git a/debian/lib32gfortran3.overrides b/debian/lib32gfortran3.overrides
new file mode 100644
index 0000000..374349f
--- /dev/null
+++ b/debian/lib32gfortran3.overrides
@@ -0,0 +1,2 @@
+# automake gets it wrong for the multilib build
+lib32gfortran3 binary: binary-or-shlib-defines-rpath
diff --git a/debian/lib32gfortran3.symbols b/debian/lib32gfortran3.symbols
new file mode 100644
index 0000000..4a20f01
--- /dev/null
+++ b/debian/lib32gfortran3.symbols
@@ -0,0 +1,3 @@
+libgfortran.so.3 lib32gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
diff --git a/debian/lib32gfortran3.symbols.amd64 b/debian/lib32gfortran3.symbols.amd64
new file mode 100644
index 0000000..80cb3b3
--- /dev/null
+++ b/debian/lib32gfortran3.symbols.amd64
@@ -0,0 +1,9 @@
+libgfortran.so.3 lib32gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
+#include "libgfortran3.symbols.16.powerpc"
+ _gfortran_norm2_r10@GFORTRAN_1.4 4.6
+ _gfortran_transfer_complex128@GFORTRAN_1.4 4.6
+ _gfortran_transfer_complex128_write@GFORTRAN_1.4 4.6
+ _gfortran_transfer_real128@GFORTRAN_1.4 4.6
+ _gfortran_transfer_real128_write@GFORTRAN_1.4 4.6
diff --git a/debian/lib32gfortran3.symbols.ppc64 b/debian/lib32gfortran3.symbols.ppc64
new file mode 100644
index 0000000..c4efd7a
--- /dev/null
+++ b/debian/lib32gfortran3.symbols.ppc64
@@ -0,0 +1,3 @@
+libgfortran.so.3 lib32gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
diff --git a/debian/lib32gfortran3.symbols.s390x b/debian/lib32gfortran3.symbols.s390x
new file mode 100644
index 0000000..c4efd7a
--- /dev/null
+++ b/debian/lib32gfortran3.symbols.s390x
@@ -0,0 +1,3 @@
+libgfortran.so.3 lib32gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
diff --git a/debian/lib32gomp1.symbols b/debian/lib32gomp1.symbols
new file mode 100644
index 0000000..e767444
--- /dev/null
+++ b/debian/lib32gomp1.symbols
@@ -0,0 +1,4 @@
+libgomp.so.1 lib32gomp1 #MINVER#
+#include "libgomp1.symbols.common"
+ GOMP_atomic_end@GOMP_1.0 4.2.1
+ GOMP_atomic_start@GOMP_1.0 4.2.1
diff --git a/debian/lib32objc3.symbols b/debian/lib32objc3.symbols
new file mode 100644
index 0000000..7bddf2c
--- /dev/null
+++ b/debian/lib32objc3.symbols
@@ -0,0 +1,3 @@
+libobjc.so.3 lib32objc3 #MINVER#
+#include "libobjc3.symbols.common"
+ __gnu_objc_personality_v0@Base 4.2.1
diff --git a/debian/lib32quadmath0.symbols b/debian/lib32quadmath0.symbols
new file mode 100644
index 0000000..5952443
--- /dev/null
+++ b/debian/lib32quadmath0.symbols
@@ -0,0 +1,2 @@
+libquadmath.so.0 lib32quadmath0 #MINVER#
+#include "libquadmath0.symbols.common"
diff --git a/debian/lib32stdc++6.symbols.amd64 b/debian/lib32stdc++6.symbols.amd64
new file mode 100644
index 0000000..c930e07
--- /dev/null
+++ b/debian/lib32stdc++6.symbols.amd64
@@ -0,0 +1,6 @@
+libstdc++.so.6 lib32stdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
diff --git a/debian/lib32stdc++6.symbols.kfreebsd-amd64 b/debian/lib32stdc++6.symbols.kfreebsd-amd64
new file mode 100644
index 0000000..c930e07
--- /dev/null
+++ b/debian/lib32stdc++6.symbols.kfreebsd-amd64
@@ -0,0 +1,6 @@
+libstdc++.so.6 lib32stdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
diff --git a/debian/lib32stdc++6.symbols.ppc64 b/debian/lib32stdc++6.symbols.ppc64
new file mode 100644
index 0000000..f5f1e0d
--- /dev/null
+++ b/debian/lib32stdc++6.symbols.ppc64
@@ -0,0 +1,8 @@
+libstdc++.so.6 lib32stdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.32bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
diff --git a/debian/lib32stdc++6.symbols.s390x b/debian/lib32stdc++6.symbols.s390x
new file mode 100644
index 0000000..52a3182
--- /dev/null
+++ b/debian/lib32stdc++6.symbols.s390x
@@ -0,0 +1,549 @@
+libstdc++.so.6 lib32stdc++6 #MINVER#
+#include "libstdc++6.symbols.common"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base16_M_get_free_listEm@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base9_M_refillEm@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reclaim_blockEPcm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reserve_blockEmm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reclaim_blockEPcm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reserve_blockEmm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx9free_list6_M_getEm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNK10__cxxabiv117__class_type_info12__do_dyncastEiNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcEiPKvPKS0_S2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEmmPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE2atEm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE6substrEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEEixEm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEmmPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSs16find_last_not_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs2atEm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4copyEPcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs6substrEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_checkEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_limitEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSsixEm@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE6_M_putEPcmPKcPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE6_M_putEPwmPKwPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt7codecvtIcc11__mbstate_tE9do_lengthERS0_PKcS4_m@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE9do_lengthERS0_PKcS4_m@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE12_M_transformEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE12_M_transformEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcmcRSt8ios_basePcS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcmcS6_PcS7_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEciRSt8ios_basePcPKcRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcmwRSt8ios_basePwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcmwPKwPwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwiRSt8ios_basePwPKwRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_numES3_S3_RiiimRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES3_S3_RiPPKcmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE24_M_extract_wday_or_monthES3_S3_RiPPKcmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4.14 4.5.0
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_numES3_S3_RiiimRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES3_S3_RiPPKwmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE24_M_extract_wday_or_monthES3_S3_RiPPKwmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4.14 4.5.0
+ _ZNKSt8valarrayImE4sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEmmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2EmwRKS1_@GLIBCXX_3.4.14 4.5.0
+ _ZNSbIwSt11char_traitsIwESaIwEE2atEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_m@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEmmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5eraseEmm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_mw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EPKwmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EPKwmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEixEm@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPcic@GLIBCXX_3.4 4.1.1
+ _ZNSi4readEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi5seekgExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEi@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEi@GLIBCXX_3.4.5 4.1.1
+ _ZNSi6ignoreEii@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPcic@GLIBCXX_3.4 4.1.1
+ _ZNSi8readsomeEPci@GLIBCXX_3.4 4.1.1
+ _ZNSo5seekpExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSo5writeEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSo8_M_writeEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSs12_S_constructEmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs14_M_replace_auxEmmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs15_M_replace_safeEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs18_S_construct_aux_2EmcRKSaIcE@GLIBCXX_3.4.14 4.5.0
+ _ZNSs2atEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs4_Rep8_M_cloneERKSaIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep9_S_createEmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs5eraseEmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEm@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7_M_moveEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_moveEPcPKcm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_mc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs7reserveEm@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcmc@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcmc@GLIBCXX_3.4.5 4.1.1
+ _ZNSs9_M_mutateEmmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EPKcmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EPKcmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsixEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPci@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EPSt18__moneypunct_cacheIcLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EPSt18__moneypunct_cacheIcLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EPSt18__moneypunct_cacheIcLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EPSt18__moneypunct_cacheIcLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EPSt18__moneypunct_cacheIwLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EPSt18__moneypunct_cacheIwLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EPSt18__moneypunct_cacheIwLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EPSt18__moneypunct_cacheIwLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EPSt17__timepunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EPSt17__timepunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EPSt17__timepunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EPSt17__timepunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE7seekoffExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE8xsputn_2EPKciS2_i@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_allocEm@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_setupEPcS0_i@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPFPvmEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKai@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKhi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPaiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPciS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPhiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1Ei@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPFPvmEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKai@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKhi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPaiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPciS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPhiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2Ei@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE13_M_set_bufferEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE22_M_convert_to_externalEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE13_M_set_bufferEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE22_M_convert_to_externalEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwiw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE4readEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5seekgExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4.5 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEij@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwiw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE8readsomeEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_writeEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9pubsetbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9pubsetbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EP15__locale_structPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EP15__locale_structPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC1EmRKSt8valarrayImES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC2EmRKSt8valarrayImES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl16_M_install_cacheEPKNS_5facetEm@GLIBCXX_3.4.7 4.1.1
+ _ZNSt6locale5_ImplC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1ERKS0_m@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2ERKS0_m@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EPSt16__numpunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EPSt16__numpunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EPSt16__numpunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EPSt16__numpunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC1ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC2ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEixEm@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZSt11_Hash_bytesPKvmm@CXXABI_1.3.5 4.6
+ _ZSt15_Fnv_hash_bytesPKvmm@CXXABI_1.3.5 4.6
+ _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i@GLIBCXX_3.4.9 4.2.1
+ _ZSt16__ostream_insertIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKS3_i@GLIBCXX_3.4.9 4.2.1
+ _ZSt17__copy_streambufsIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.6 4.1.1
+ _ZSt17__copy_streambufsIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.6 4.1.1
+ _ZSt17__verify_groupingPKcmRKSs@GLIBCXX_3.4.10 4.3
+ _ZSt21__copy_streambufs_eofIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZSt21__copy_streambufs_eofIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZThn8_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSiD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSiD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSoD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSoD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10istrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10istrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10ostrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10ostrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _Znam@GLIBCXX_3.4 4.1.1
+ _ZnamRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _Znwm@GLIBCXX_3.4 4.1.1
+ _ZnwmRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.32bit.s390"
+ _ZNSt12__basic_fileIcEC1EP15pthread_mutex_t@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcEC2EP15pthread_mutex_t@GLIBCXX_3.4 4.1.1
diff --git a/debian/lib32stdc++CXX.postinst b/debian/lib32stdc++CXX.postinst
new file mode 100644
index 0000000..0ebbeb0
--- /dev/null
+++ b/debian/lib32stdc++CXX.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+ configure)
+ docdir=/usr/share/doc/lib32stdc++@CXX@
+ if [ -d $docdir ] && [ ! -h $docdir ]; then
+ rm -rf $docdir
+ ln -s gcc-@BV@-base $docdir
+ fi
+esac
+
+#DEBHELPER#
diff --git a/debian/lib64gcc1.symbols.i386 b/debian/lib64gcc1.symbols.i386
new file mode 100644
index 0000000..c62fcf9
--- /dev/null
+++ b/debian/lib64gcc1.symbols.i386
@@ -0,0 +1,144 @@
+libgcc_s.so.1 lib64gcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addtf3@GCC_4.3.0 1:4.3
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GCC_3.0 1:4.1.1
+ __deregister_frame_info@GCC_3.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.0.0 1:4.3
+ __divtc3@GCC_4.3.0 1:4.4.0
+ __divtf3@GCC_4.3.0 1:4.3
+ __divti3@GCC_3.0 1:4.1.1
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.3.0 1:4.3
+ __extenddftf2@GCC_4.3.0 1:4.3
+ __extendsftf2@GCC_4.3.0 1:4.3
+ __extendxftf2@GCC_4.3.0 1:4.3
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.3.0 1:4.3
+ __fixtfsi@GCC_4.3.0 1:4.3
+ __fixtfti@GCC_4.3.0 1:4.3
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.3.0 1:4.3
+ __fixunstfsi@GCC_4.3.0 1:4.3
+ __fixunstfti@GCC_4.3.0 1:4.3
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfti@GCC_3.0 1:4.1.1
+ __fixxfti@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.3.0 1:4.3
+ __floatsitf@GCC_4.3.0 1:4.3
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_4.3.0 1:4.3
+ __floattixf@GCC_3.0 1:4.1.1
+ __floatunditf@GCC_4.3.0 1:4.3
+ __floatunsitf@GCC_4.3.0 1:4.3
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.3.0 1:4.3
+ __floatuntixf@GCC_4.2.0 1:4.2.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.3.0 1:4.3
+ __gttf2@GCC_3.0 1:4.3
+ __gttf2@GCC_4.3.0 1:4.4.0
+ __letf2@GCC_4.3.0 1:4.3
+ __lshrti3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_3.0 1:4.3
+ __lttf2@GCC_4.3.0 1:4.4.0
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.0.0 1:4.3
+ __multc3@GCC_4.3.0 1:4.4.0
+ __multf3@GCC_4.3.0 1:4.3
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negtf2@GCC_4.3.0 1:4.3
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __netf2@GCC_3.0 1:4.3
+ __netf2@GCC_4.3.0 1:4.4.0
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.0.0 1:4.3
+ __powitf2@GCC_4.3.0 1:4.4.0
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GCC_3.0 1:4.1.1
+ __register_frame_info@GCC_3.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GCC_3.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GCC_3.0 1:4.1.1
+ __subtf3@GCC_4.3.0 1:4.3
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __trunctfdf2@GCC_4.3.0 1:4.3
+ __trunctfsf2@GCC_4.3.0 1:4.3
+ __trunctfxf2@GCC_4.3.0 1:4.3
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
+ __unordtf2@GCC_4.3.0 1:4.3
diff --git a/debian/lib64gcc1.symbols.powerpc b/debian/lib64gcc1.symbols.powerpc
new file mode 100644
index 0000000..989d2a1
--- /dev/null
+++ b/debian/lib64gcc1.symbols.powerpc
@@ -0,0 +1,126 @@
+libgcc_s.so.1 lib64gcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.0.0 1:4.1.1
+ __divti3@GCC_3.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_3.0 1:4.1.1
+ __fixtfti@GCC_3.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_3.0 1:4.1.1
+ __fixunstfti@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_3.0 1:4.1.1
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_3.0 1:4.1.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.2.0 1:4.2.1
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __gcc_qadd@GCC_3.4.4 1:4.1.1
+ __gcc_qdiv@GCC_3.4.4 1:4.1.1
+ __gcc_qmul@GCC_3.4.4 1:4.1.1
+ __gcc_qsub@GCC_3.4.4 1:4.1.1
+ __lshrti3@GCC_3.0 1:4.1.1
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.0.0 1:4.1.1
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
+ _xlqadd@GCC_3.4 1:4.1.1
+ _xlqdiv@GCC_3.4 1:4.1.1
+ _xlqmul@GCC_3.4 1:4.1.1
+ _xlqsub@GCC_3.4 1:4.1.1
diff --git a/debian/lib64gcc1.symbols.s390 b/debian/lib64gcc1.symbols.s390
new file mode 100644
index 0000000..1423e5e
--- /dev/null
+++ b/debian/lib64gcc1.symbols.s390
@@ -0,0 +1,107 @@
+libgcc_s.so.1 lib64gcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.1.0@GCC_4.1.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.2@GLIBC_2.2 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.2 1:4.1.1
+ __deregister_frame_info@GLIBC_2.2 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.1.0 1:4.1.1
+ __divti3@GCC_3.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfti@GCC_4.1.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfti@GCC_4.1.0 1:4.1.1
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_4.1.0 1:4.1.1
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.2 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __lshrti3@GCC_3.0 1:4.1.1
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.1.0 1:4.1.1
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.1.0 1:4.1.1
+ __register_frame@GLIBC_2.2 1:4.1.1
+ __register_frame_info@GLIBC_2.2 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.2 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.2 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
diff --git a/debian/lib64gcc1.symbols.sparc b/debian/lib64gcc1.symbols.sparc
new file mode 100644
index 0000000..46c8bfd
--- /dev/null
+++ b/debian/lib64gcc1.symbols.sparc
@@ -0,0 +1,106 @@
+libgcc_s.so.1 lib64gcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.2@GLIBC_2.2 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.2 1:4.1.1
+ __deregister_frame_info@GLIBC_2.2 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.0.0 1:4.1.1
+ __divti3@GCC_3.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfti@GCC_3.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfti@GCC_3.0 1:4.1.1
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_3.0 1:4.1.1
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.2 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __lshrti3@GCC_3.0 1:4.1.1
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.0.0 1:4.1.1
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.2 1:4.1.1
+ __register_frame_info@GLIBC_2.2 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.2 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.2 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
diff --git a/debian/lib64gccLC.postinst b/debian/lib64gccLC.postinst
new file mode 100644
index 0000000..f671fd6
--- /dev/null
+++ b/debian/lib64gccLC.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+ configure)
+ docdir=/usr/share/doc/lib64gcc@LC@
+ if [ -d $docdir ] && [ ! -h $docdir ]; then
+ rm -rf $docdir
+ ln -s gcc-@BV@-base $docdir
+ fi
+esac
+
+#DEBHELPER#
diff --git a/debian/lib64gfortran3.overrides b/debian/lib64gfortran3.overrides
new file mode 100644
index 0000000..0df5ffa
--- /dev/null
+++ b/debian/lib64gfortran3.overrides
@@ -0,0 +1,2 @@
+# automake gets it wrong for the multilib build
+lib64gfortran3 binary: binary-or-shlib-defines-rpath
diff --git a/debian/lib64gfortran3.symbols b/debian/lib64gfortran3.symbols
new file mode 100644
index 0000000..c6bf66f
--- /dev/null
+++ b/debian/lib64gfortran3.symbols
@@ -0,0 +1,7 @@
+libgfortran.so.3 lib64gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
+#include "libgfortran3.symbols.16"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.64"
+#include "libgfortran3.symbols.qf"
diff --git a/debian/lib64gfortran3.symbols.mips b/debian/lib64gfortran3.symbols.mips
new file mode 100644
index 0000000..af59c6c
--- /dev/null
+++ b/debian/lib64gfortran3.symbols.mips
@@ -0,0 +1,5 @@
+libgfortran.so.3 lib64gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
diff --git a/debian/lib64gfortran3.symbols.mipsel b/debian/lib64gfortran3.symbols.mipsel
new file mode 100644
index 0000000..af59c6c
--- /dev/null
+++ b/debian/lib64gfortran3.symbols.mipsel
@@ -0,0 +1,5 @@
+libgfortran.so.3 lib64gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
diff --git a/debian/lib64gfortran3.symbols.powerpc b/debian/lib64gfortran3.symbols.powerpc
new file mode 100644
index 0000000..af59c6c
--- /dev/null
+++ b/debian/lib64gfortran3.symbols.powerpc
@@ -0,0 +1,5 @@
+libgfortran.so.3 lib64gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
diff --git a/debian/lib64gfortran3.symbols.s390 b/debian/lib64gfortran3.symbols.s390
new file mode 100644
index 0000000..af59c6c
--- /dev/null
+++ b/debian/lib64gfortran3.symbols.s390
@@ -0,0 +1,5 @@
+libgfortran.so.3 lib64gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
diff --git a/debian/lib64gfortran3.symbols.sparc b/debian/lib64gfortran3.symbols.sparc
new file mode 100644
index 0000000..af59c6c
--- /dev/null
+++ b/debian/lib64gfortran3.symbols.sparc
@@ -0,0 +1,5 @@
+libgfortran.so.3 lib64gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
diff --git a/debian/lib64gomp1.symbols b/debian/lib64gomp1.symbols
new file mode 100644
index 0000000..a9b08b0
--- /dev/null
+++ b/debian/lib64gomp1.symbols
@@ -0,0 +1,4 @@
+libgomp.so.1 lib64gomp1 #MINVER#
+#include "libgomp1.symbols.common"
+ GOMP_atomic_end@GOMP_1.0 4.2.1
+ GOMP_atomic_start@GOMP_1.0 4.2.1
diff --git a/debian/lib64objc3.symbols b/debian/lib64objc3.symbols
new file mode 100644
index 0000000..6684f94
--- /dev/null
+++ b/debian/lib64objc3.symbols
@@ -0,0 +1,3 @@
+libobjc.so.3 lib64objc3 #MINVER#
+#include "libobjc3.symbols.common"
+ __gnu_objc_personality_v0@Base 4.2.1
diff --git a/debian/lib64quadmath0.symbols b/debian/lib64quadmath0.symbols
new file mode 100644
index 0000000..daef25e
--- /dev/null
+++ b/debian/lib64quadmath0.symbols
@@ -0,0 +1,2 @@
+libquadmath.so.0 lib64quadmath0 #MINVER#
+#include "libquadmath0.symbols.common"
diff --git a/debian/lib64stdc++6.symbols.i386 b/debian/lib64stdc++6.symbols.i386
new file mode 100644
index 0000000..590aaa4
--- /dev/null
+++ b/debian/lib64stdc++6.symbols.i386
@@ -0,0 +1,31 @@
+libstdc++.so.6 lib64stdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# acosl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# asinl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# atan2l@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# atanl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# ceill@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# coshl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# cosl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# expl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# floorl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# fmodl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# frexpl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# hypotl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# ldexpf@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# ldexpl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# log10l@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# logl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# modfl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# powf@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# powl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# sinhl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# sinl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# sqrtl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# tanhl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# tanl@GLIBCXX_3.4 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
diff --git a/debian/lib64stdc++6.symbols.powerpc b/debian/lib64stdc++6.symbols.powerpc
new file mode 100644
index 0000000..2a2c33b
--- /dev/null
+++ b/debian/lib64stdc++6.symbols.powerpc
@@ -0,0 +1,9 @@
+libstdc++.so.6 lib64stdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.64bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
diff --git a/debian/lib64stdc++6.symbols.s390 b/debian/lib64stdc++6.symbols.s390
new file mode 100644
index 0000000..80262e7
--- /dev/null
+++ b/debian/lib64stdc++6.symbols.s390
@@ -0,0 +1,11 @@
+libstdc++.so.6 lib64stdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# ldexpf@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# powf@GLIBCXX_3.4 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.64bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
diff --git a/debian/lib64stdc++6.symbols.sparc b/debian/lib64stdc++6.symbols.sparc
new file mode 100644
index 0000000..481c757
--- /dev/null
+++ b/debian/lib64stdc++6.symbols.sparc
@@ -0,0 +1,9 @@
+libstdc++.so.6 lib64stdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVli@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVli@GLIBCXX_3.4 4.1.1
+# FIXME: Currently no ldbl symbols in the 64bit libstdc++ on sparc.
+# #include "libstdc++6.symbols.ldbl.64bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
diff --git a/debian/lib64stdc++CXX.postinst b/debian/lib64stdc++CXX.postinst
new file mode 100644
index 0000000..1c8e979
--- /dev/null
+++ b/debian/lib64stdc++CXX.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+ configure)
+ docdir=/usr/share/doc/lib64stdc++@CXX@
+ if [ -d $docdir ] && [ ! -h $docdir ]; then
+ rm -rf $docdir
+ ln -s gcc-@BV@-base $docdir
+ fi
+esac
+
+#DEBHELPER#
diff --git a/debian/libgcc1.symbols.aeabi b/debian/libgcc1.symbols.aeabi
new file mode 100644
index 0000000..a109d62
--- /dev/null
+++ b/debian/libgcc1.symbols.aeabi
@@ -0,0 +1,67 @@
+ __aeabi_cdcmpeq@GCC_3.5 1:4.4.0
+ __aeabi_cdcmple@GCC_3.5 1:4.4.0
+ __aeabi_cdrcmple@GCC_3.5 1:4.4.0
+ __aeabi_cfcmpeq@GCC_3.5 1:4.4.0
+ __aeabi_cfcmple@GCC_3.5 1:4.4.0
+ __aeabi_cfrcmple@GCC_3.5 1:4.4.0
+ __aeabi_d2f@GCC_3.5 1:4.4.0
+ __aeabi_d2iz@GCC_3.5 1:4.4.0
+ __aeabi_d2lz@GCC_3.5 1:4.4.0
+ __aeabi_d2uiz@GCC_3.5 1:4.4.0
+ __aeabi_d2ulz@GCC_3.5 1:4.4.0
+ __aeabi_dadd@GCC_3.5 1:4.4.0
+ __aeabi_dcmpeq@GCC_3.5 1:4.4.0
+ __aeabi_dcmpge@GCC_3.5 1:4.4.0
+ __aeabi_dcmpgt@GCC_3.5 1:4.4.0
+ __aeabi_dcmple@GCC_3.5 1:4.4.0
+ __aeabi_dcmplt@GCC_3.5 1:4.4.0
+ __aeabi_dcmpun@GCC_3.5 1:4.4.0
+ __aeabi_ddiv@GCC_3.5 1:4.4.0
+ __aeabi_dmul@GCC_3.5 1:4.4.0
+ __aeabi_dneg@GCC_3.5 1:4.4.0
+ __aeabi_drsub@GCC_3.5 1:4.4.0
+ __aeabi_dsub@GCC_3.5 1:4.4.0
+ __aeabi_f2d@GCC_3.5 1:4.4.0
+ __aeabi_f2iz@GCC_3.5 1:4.4.0
+ __aeabi_f2lz@GCC_3.5 1:4.4.0
+ __aeabi_f2uiz@GCC_3.5 1:4.4.0
+ __aeabi_f2ulz@GCC_3.5 1:4.4.0
+ __aeabi_fadd@GCC_3.5 1:4.4.0
+ __aeabi_fcmpeq@GCC_3.5 1:4.4.0
+ __aeabi_fcmpge@GCC_3.5 1:4.4.0
+ __aeabi_fcmpgt@GCC_3.5 1:4.4.0
+ __aeabi_fcmple@GCC_3.5 1:4.4.0
+ __aeabi_fcmplt@GCC_3.5 1:4.4.0
+ __aeabi_fcmpun@GCC_3.5 1:4.4.0
+ __aeabi_fdiv@GCC_3.5 1:4.4.0
+ __aeabi_fmul@GCC_3.5 1:4.4.0
+ __aeabi_fneg@GCC_3.5 1:4.4.0
+ __aeabi_frsub@GCC_3.5 1:4.4.0
+ __aeabi_fsub@GCC_3.5 1:4.4.0
+ __aeabi_i2d@GCC_3.5 1:4.4.0
+ __aeabi_i2f@GCC_3.5 1:4.4.0
+ __aeabi_idiv@GCC_3.5 1:4.4.0
+ __aeabi_idiv0@GCC_3.5 1:4.5.0
+ __aeabi_idivmod@GCC_3.5 1:4.4.0
+ __aeabi_l2d@GCC_3.5 1:4.4.0
+ __aeabi_l2f@GCC_3.5 1:4.4.0
+ __aeabi_lasr@GCC_3.5 1:4.4.0
+ __aeabi_lcmp@GCC_3.5 1:4.4.0
+ __aeabi_ldivmod@GCC_3.5 1:4.4.0
+ __aeabi_ldiv0@GCC_3.5 1:4.5.0
+ __aeabi_llsl@GCC_3.5 1:4.4.0
+ __aeabi_llsr@GCC_3.5 1:4.4.0
+ __aeabi_lmul@GCC_3.5 1:4.4.0
+ __aeabi_ui2d@GCC_3.5 1:4.4.0
+ __aeabi_ui2f@GCC_3.5 1:4.4.0
+ __aeabi_uidiv@GCC_3.5 1:4.4.0
+ __aeabi_uidivmod@GCC_3.5 1:4.4.0
+ __aeabi_ul2d@GCC_3.5 1:4.4.0
+ __aeabi_ul2f@GCC_3.5 1:4.4.0
+ __aeabi_ulcmp@GCC_3.5 1:4.4.0
+ __aeabi_uldivmod@GCC_3.5 1:4.4.0
+ __aeabi_unwind_cpp_pr0@GCC_3.5 1:4.4.0
+ __aeabi_uread4@GCC_3.5 1:4.4.0
+ __aeabi_uread8@GCC_3.5 1:4.4.0
+ __aeabi_uwrite4@GCC_3.5 1:4.4.0
+ __aeabi_uwrite8@GCC_3.5 1:4.4.0
diff --git a/debian/libgcc1.symbols.alpha b/debian/libgcc1.symbols.alpha
new file mode 100644
index 0000000..2797555
--- /dev/null
+++ b/debian/libgcc1.symbols.alpha
@@ -0,0 +1,107 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_LDBL_4.0.0@GCC_LDBL_4.0.0 1:4.2.1
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_LDBL_4.0.0 1:4.2.1
+ __divti3@GCC_3.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfti@GCC_3.0 1:4.2.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfti@GCC_3.0 1:4.2.1
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_3.0 1:4.2.1
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __lshrti3@GCC_3.0 1:4.1.1
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_LDBL_4.0.0 1:4.2.1
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_LDBL_4.0.0 1:4.2.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
diff --git a/debian/libgcc1.symbols.amd64 b/debian/libgcc1.symbols.amd64
new file mode 100644
index 0000000..28926d1
--- /dev/null
+++ b/debian/libgcc1.symbols.amd64
@@ -0,0 +1,144 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addtf3@GCC_4.3.0 1:4.3
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GCC_3.0 1:4.1.1
+ __deregister_frame_info@GCC_3.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.0.0 1:4.3
+ __divtc3@GCC_4.3.0 1:4.4.0
+ __divtf3@GCC_4.3.0 1:4.3
+ __divti3@GCC_3.0 1:4.1.1
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.3.0 1:4.3
+ __extenddftf2@GCC_4.3.0 1:4.3
+ __extendsftf2@GCC_4.3.0 1:4.3
+ __extendxftf2@GCC_4.3.0 1:4.3
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.3.0 1:4.3
+ __fixtfsi@GCC_4.3.0 1:4.3
+ __fixtfti@GCC_4.3.0 1:4.3
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.3.0 1:4.3
+ __fixunstfsi@GCC_4.3.0 1:4.3
+ __fixunstfti@GCC_4.3.0 1:4.3
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfti@GCC_3.0 1:4.1.1
+ __fixxfti@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.3.0 1:4.3
+ __floatsitf@GCC_4.3.0 1:4.3
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_4.3.0 1:4.3
+ __floattixf@GCC_3.0 1:4.1.1
+ __floatunditf@GCC_4.3.0 1:4.3
+ __floatunsitf@GCC_4.3.0 1:4.3
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.3.0 1:4.3
+ __floatuntixf@GCC_4.2.0 1:4.2.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.3.0 1:4.3
+ __gttf2@GCC_3.0 1:4.3
+ __gttf2@GCC_4.3.0 1:4.4.0
+ __letf2@GCC_4.3.0 1:4.3
+ __lshrti3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_3.0 1:4.3
+ __lttf2@GCC_4.3.0 1:4.4.0
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.0.0 1:4.3
+ __multc3@GCC_4.3.0 1:4.4.0
+ __multf3@GCC_4.3.0 1:4.3
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negtf2@GCC_4.3.0 1:4.3
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __netf2@GCC_3.0 1:4.3
+ __netf2@GCC_4.3.0 1:4.4.0
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.0.0 1:4.3
+ __powitf2@GCC_4.3.0 1:4.4.0
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GCC_3.0 1:4.1.1
+ __register_frame_info@GCC_3.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GCC_3.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GCC_3.0 1:4.1.1
+ __subtf3@GCC_4.3.0 1:4.3
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __trunctfdf2@GCC_4.3.0 1:4.3
+ __trunctfsf2@GCC_4.3.0 1:4.3
+ __trunctfxf2@GCC_4.3.0 1:4.3
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
+ __unordtf2@GCC_4.3.0 1:4.3
diff --git a/debian/libgcc1.symbols.armel b/debian/libgcc1.symbols.armel
new file mode 100644
index 0000000..886604f
--- /dev/null
+++ b/debian/libgcc1.symbols.armel
@@ -0,0 +1,120 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+(ignore-blacklist)#include "libgcc1.symbols.aeabi"
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3.4@GCC_3.3.4 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_3.5@GCC_3.5 1:4.3.0
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_4.3.0 1:4.3.0
+ _Unwind_Complete@GCC_3.5 1:4.3.0
+ _Unwind_DeleteException@GCC_3.0 1:4.3.0
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.3.0
+ _Unwind_GetCFA@GCC_3.3 1:4.3.0
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.3.0
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.3.0
+ _Unwind_GetRegionStart@GCC_3.0 1:4.3.0
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.3.0
+ _Unwind_RaiseException@GCC_3.0 1:4.3.0
+ _Unwind_Resume@GCC_3.0 1:4.3.0
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.3.0
+ _Unwind_VRS_Get@GCC_3.5 1:4.3.0
+ _Unwind_VRS_Pop@GCC_3.5 1:4.3.0
+ _Unwind_VRS_Set@GCC_3.5 1:4.3.0
+ __absvdi2@GCC_3.0 1:4.3.0
+ __absvsi2@GCC_3.0 1:4.3.0
+ __adddf3@GCC_3.0 1:4.3.0
+ __addsf3@GCC_3.0 1:4.3.0
+ __addvdi3@GCC_3.0 1:4.3.0
+ __addvsi3@GCC_3.0 1:4.3.0
+ __ashldi3@GCC_3.0 1:4.3.0
+ __ashrdi3@GCC_3.0 1:4.3.0
+ __bswapdi2@GCC_4.3.0 1:4.3.0
+ __bswapsi2@GCC_4.3.0 1:4.3.0
+ __clear_cache@GCC_3.0 1:4.3.0
+ __clzdi2@GCC_3.4 1:4.3.0
+ __clzsi2@GCC_3.4 1:4.3.0
+ __cmpdi2@GCC_3.0 1:4.3.0
+ __ctzdi2@GCC_3.4 1:4.3.0
+ __ctzsi2@GCC_3.4 1:4.3.0
+ __divdc3@GCC_4.0.0 1:4.3.0
+ __divdf3@GCC_3.0 1:4.3.0
+ __divdi3@GLIBC_2.0 1:4.3.0
+ __divsc3@GCC_4.0.0 1:4.3.0
+ __divsf3@GCC_3.0 1:4.3.0
+ __divsi3@GCC_3.0 1:4.3.0
+ __emutls_get_address@GCC_4.3.0 1:4.3.0
+ __emutls_register_common@GCC_4.3.0 1:4.3.0
+ __enable_execute_stack@GCC_3.4.2 1:4.3.0
+ __eqdf2@GCC_3.0 1:4.3.0
+ __eqsf2@GCC_3.0 1:4.3.0
+ __extendsfdf2@GCC_3.0 1:4.3.0
+ __ffsdi2@GCC_3.0 1:4.3.0
+ __ffssi2@GCC_4.3.0 1:4.3.0
+ __fixdfdi@GCC_3.0 1:4.3.0
+ __fixdfsi@GCC_3.0 1:4.3.0
+ __fixsfdi@GCC_3.0 1:4.3.0
+ __fixsfsi@GCC_3.0 1:4.3.0
+ __fixunsdfdi@GCC_3.0 1:4.3.0
+ __fixunsdfsi@GCC_3.0 1:4.3.0
+ __fixunssfdi@GCC_3.0 1:4.3.0
+ __fixunssfsi@GCC_3.0 1:4.3.0
+ __floatdidf@GCC_3.0 1:4.3.0
+ __floatdisf@GCC_3.0 1:4.3.0
+ __floatsidf@GCC_3.0 1:4.3.0
+ __floatsisf@GCC_3.0 1:4.3.0
+ __floatundidf@GCC_4.2.0 1:4.3.0
+ __floatundisf@GCC_4.2.0 1:4.3.0
+ __floatunsidf@GCC_4.2.0 1:4.3.0
+ __floatunsisf@GCC_4.2.0 1:4.3.0
+ __gcc_personality_v0@GCC_3.3.1 1:4.3.0
+ __gedf2@GCC_3.0 1:4.3.0
+ __gesf2@GCC_3.0 1:4.3.0
+ __gnu_unwind_frame@GCC_3.5 1:4.3.0
+ __gtdf2@GCC_3.0 1:4.3.0
+ __gtsf2@GCC_3.0 1:4.3.0
+ __ledf2@GCC_3.0 1:4.3.0
+ __lesf2@GCC_3.0 1:4.3.0
+ __lshrdi3@GCC_3.0 1:4.3.0
+ __ltdf2@GCC_3.0 1:4.3.0
+ __ltsf2@GCC_3.0 1:4.3.0
+ __moddi3@GLIBC_2.0 1:4.3.0
+ __modsi3@GCC_3.0 1:4.3.0
+ __muldc3@GCC_4.0.0 1:4.3.0
+ __muldf3@GCC_3.0 1:4.3.0
+ __muldi3@GCC_3.0 1:4.3.0
+ __mulsc3@GCC_4.0.0 1:4.3.0
+ __mulsf3@GCC_3.0 1:4.3.0
+ __mulvdi3@GCC_3.0 1:4.3.0
+ __mulvsi3@GCC_3.0 1:4.3.0
+ __nedf2@GCC_3.0 1:4.3.0
+ __negdf2@GCC_3.0 1:4.3.0
+ __negdi2@GCC_3.0 1:4.3.0
+ __negsf2@GCC_3.0 1:4.3.0
+ __negvdi2@GCC_3.0 1:4.3.0
+ __negvsi2@GCC_3.0 1:4.3.0
+ __nesf2@GCC_3.0 1:4.3.0
+ __paritydi2@GCC_3.4 1:4.3.0
+ __paritysi2@GCC_3.4 1:4.3.0
+ __popcountdi2@GCC_3.4 1:4.3.0
+ __popcountsi2@GCC_3.4 1:4.3.0
+ __powidf2@GCC_4.0.0 1:4.3.0
+ __powisf2@GCC_4.0.0 1:4.3.0
+ __subdf3@GCC_3.0 1:4.3.0
+ __subsf3@GCC_3.0 1:4.3.0
+ __subvdi3@GCC_3.0 1:4.3.0
+ __subvsi3@GCC_3.0 1:4.3.0
+ __truncdfsf2@GCC_3.0 1:4.3.0
+ __ucmpdi2@GCC_3.0 1:4.3.0
+ __udivdi3@GLIBC_2.0 1:4.3.0
+ __udivmoddi4@GCC_3.0 1:4.3.0
+ __udivsi3@GCC_3.0 1:4.3.0
+ __umoddi3@GLIBC_2.0 1:4.3.0
+ __umodsi3@GCC_3.0 1:4.3.0
+ __unorddf2@GCC_3.3.4 1:4.3.0
+ __unordsf2@GCC_3.3.4 1:4.3.0
diff --git a/debian/libgcc1.symbols.armhf b/debian/libgcc1.symbols.armhf
new file mode 100644
index 0000000..886604f
--- /dev/null
+++ b/debian/libgcc1.symbols.armhf
@@ -0,0 +1,120 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+(ignore-blacklist)#include "libgcc1.symbols.aeabi"
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3.4@GCC_3.3.4 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_3.5@GCC_3.5 1:4.3.0
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_4.3.0 1:4.3.0
+ _Unwind_Complete@GCC_3.5 1:4.3.0
+ _Unwind_DeleteException@GCC_3.0 1:4.3.0
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.3.0
+ _Unwind_GetCFA@GCC_3.3 1:4.3.0
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.3.0
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.3.0
+ _Unwind_GetRegionStart@GCC_3.0 1:4.3.0
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.3.0
+ _Unwind_RaiseException@GCC_3.0 1:4.3.0
+ _Unwind_Resume@GCC_3.0 1:4.3.0
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.3.0
+ _Unwind_VRS_Get@GCC_3.5 1:4.3.0
+ _Unwind_VRS_Pop@GCC_3.5 1:4.3.0
+ _Unwind_VRS_Set@GCC_3.5 1:4.3.0
+ __absvdi2@GCC_3.0 1:4.3.0
+ __absvsi2@GCC_3.0 1:4.3.0
+ __adddf3@GCC_3.0 1:4.3.0
+ __addsf3@GCC_3.0 1:4.3.0
+ __addvdi3@GCC_3.0 1:4.3.0
+ __addvsi3@GCC_3.0 1:4.3.0
+ __ashldi3@GCC_3.0 1:4.3.0
+ __ashrdi3@GCC_3.0 1:4.3.0
+ __bswapdi2@GCC_4.3.0 1:4.3.0
+ __bswapsi2@GCC_4.3.0 1:4.3.0
+ __clear_cache@GCC_3.0 1:4.3.0
+ __clzdi2@GCC_3.4 1:4.3.0
+ __clzsi2@GCC_3.4 1:4.3.0
+ __cmpdi2@GCC_3.0 1:4.3.0
+ __ctzdi2@GCC_3.4 1:4.3.0
+ __ctzsi2@GCC_3.4 1:4.3.0
+ __divdc3@GCC_4.0.0 1:4.3.0
+ __divdf3@GCC_3.0 1:4.3.0
+ __divdi3@GLIBC_2.0 1:4.3.0
+ __divsc3@GCC_4.0.0 1:4.3.0
+ __divsf3@GCC_3.0 1:4.3.0
+ __divsi3@GCC_3.0 1:4.3.0
+ __emutls_get_address@GCC_4.3.0 1:4.3.0
+ __emutls_register_common@GCC_4.3.0 1:4.3.0
+ __enable_execute_stack@GCC_3.4.2 1:4.3.0
+ __eqdf2@GCC_3.0 1:4.3.0
+ __eqsf2@GCC_3.0 1:4.3.0
+ __extendsfdf2@GCC_3.0 1:4.3.0
+ __ffsdi2@GCC_3.0 1:4.3.0
+ __ffssi2@GCC_4.3.0 1:4.3.0
+ __fixdfdi@GCC_3.0 1:4.3.0
+ __fixdfsi@GCC_3.0 1:4.3.0
+ __fixsfdi@GCC_3.0 1:4.3.0
+ __fixsfsi@GCC_3.0 1:4.3.0
+ __fixunsdfdi@GCC_3.0 1:4.3.0
+ __fixunsdfsi@GCC_3.0 1:4.3.0
+ __fixunssfdi@GCC_3.0 1:4.3.0
+ __fixunssfsi@GCC_3.0 1:4.3.0
+ __floatdidf@GCC_3.0 1:4.3.0
+ __floatdisf@GCC_3.0 1:4.3.0
+ __floatsidf@GCC_3.0 1:4.3.0
+ __floatsisf@GCC_3.0 1:4.3.0
+ __floatundidf@GCC_4.2.0 1:4.3.0
+ __floatundisf@GCC_4.2.0 1:4.3.0
+ __floatunsidf@GCC_4.2.0 1:4.3.0
+ __floatunsisf@GCC_4.2.0 1:4.3.0
+ __gcc_personality_v0@GCC_3.3.1 1:4.3.0
+ __gedf2@GCC_3.0 1:4.3.0
+ __gesf2@GCC_3.0 1:4.3.0
+ __gnu_unwind_frame@GCC_3.5 1:4.3.0
+ __gtdf2@GCC_3.0 1:4.3.0
+ __gtsf2@GCC_3.0 1:4.3.0
+ __ledf2@GCC_3.0 1:4.3.0
+ __lesf2@GCC_3.0 1:4.3.0
+ __lshrdi3@GCC_3.0 1:4.3.0
+ __ltdf2@GCC_3.0 1:4.3.0
+ __ltsf2@GCC_3.0 1:4.3.0
+ __moddi3@GLIBC_2.0 1:4.3.0
+ __modsi3@GCC_3.0 1:4.3.0
+ __muldc3@GCC_4.0.0 1:4.3.0
+ __muldf3@GCC_3.0 1:4.3.0
+ __muldi3@GCC_3.0 1:4.3.0
+ __mulsc3@GCC_4.0.0 1:4.3.0
+ __mulsf3@GCC_3.0 1:4.3.0
+ __mulvdi3@GCC_3.0 1:4.3.0
+ __mulvsi3@GCC_3.0 1:4.3.0
+ __nedf2@GCC_3.0 1:4.3.0
+ __negdf2@GCC_3.0 1:4.3.0
+ __negdi2@GCC_3.0 1:4.3.0
+ __negsf2@GCC_3.0 1:4.3.0
+ __negvdi2@GCC_3.0 1:4.3.0
+ __negvsi2@GCC_3.0 1:4.3.0
+ __nesf2@GCC_3.0 1:4.3.0
+ __paritydi2@GCC_3.4 1:4.3.0
+ __paritysi2@GCC_3.4 1:4.3.0
+ __popcountdi2@GCC_3.4 1:4.3.0
+ __popcountsi2@GCC_3.4 1:4.3.0
+ __powidf2@GCC_4.0.0 1:4.3.0
+ __powisf2@GCC_4.0.0 1:4.3.0
+ __subdf3@GCC_3.0 1:4.3.0
+ __subsf3@GCC_3.0 1:4.3.0
+ __subvdi3@GCC_3.0 1:4.3.0
+ __subvsi3@GCC_3.0 1:4.3.0
+ __truncdfsf2@GCC_3.0 1:4.3.0
+ __ucmpdi2@GCC_3.0 1:4.3.0
+ __udivdi3@GLIBC_2.0 1:4.3.0
+ __udivmoddi4@GCC_3.0 1:4.3.0
+ __udivsi3@GCC_3.0 1:4.3.0
+ __umoddi3@GLIBC_2.0 1:4.3.0
+ __umodsi3@GCC_3.0 1:4.3.0
+ __unorddf2@GCC_3.3.4 1:4.3.0
+ __unordsf2@GCC_3.3.4 1:4.3.0
diff --git a/debian/libgcc1.symbols.hurd-i386 b/debian/libgcc1.symbols.hurd-i386
new file mode 100644
index 0000000..049adbe
--- /dev/null
+++ b/debian/libgcc1.symbols.hurd-i386
@@ -0,0 +1,101 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 4.2.1
+ GCC_3.3.1@GCC_3.3.1 4.2.1
+ GCC_3.3@GCC_3.3 4.2.1
+ GCC_3.4.2@GCC_3.4.2 4.2.1
+ GCC_3.4@GCC_3.4 4.2.1
+ GCC_4.0.0@GCC_4.0.0 4.2.1
+ GCC_4.2.0@GCC_4.2.0 4.2.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3.0
+ GLIBC_2.0@GLIBC_2.0 4.2.1
+ _Unwind_Backtrace@GCC_3.3 4.2.1
+ _Unwind_DeleteException@GCC_3.0 4.2.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 4.2.1
+ _Unwind_Find_FDE@GCC_3.0 4.2.1
+ _Unwind_ForcedUnwind@GCC_3.0 4.2.1
+ _Unwind_GetCFA@GCC_3.3 4.2.1
+ _Unwind_GetDataRelBase@GCC_3.0 4.2.1
+ _Unwind_GetGR@GCC_3.0 4.2.1
+ _Unwind_GetIP@GCC_3.0 4.2.1
+ _Unwind_GetIPInfo@GCC_4.2.0 4.2.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 4.2.1
+ _Unwind_GetRegionStart@GCC_3.0 4.2.1
+ _Unwind_GetTextRelBase@GCC_3.0 4.2.1
+ _Unwind_RaiseException@GCC_3.0 4.2.1
+ _Unwind_Resume@GCC_3.0 4.2.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 4.2.1
+ _Unwind_SetGR@GCC_3.0 4.2.1
+ _Unwind_SetIP@GCC_3.0 4.2.1
+ __absvdi2@GCC_3.0 4.2.1
+ __absvsi2@GCC_3.0 4.2.1
+ __addvdi3@GCC_3.0 4.2.1
+ __addvsi3@GCC_3.0 4.2.1
+ __ashldi3@GCC_3.0 4.2.1
+ __ashrdi3@GCC_3.0 4.2.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 4.2.1
+ __clzdi2@GCC_3.4 4.2.1
+ __clzsi2@GCC_3.4 4.2.1
+ __cmpdi2@GCC_3.0 4.2.1
+ __ctzdi2@GCC_3.4 4.2.1
+ __ctzsi2@GCC_3.4 4.2.1
+ __deregister_frame@GLIBC_2.0 4.2.1
+ __deregister_frame_info@GLIBC_2.0 4.2.1
+ __deregister_frame_info_bases@GCC_3.0 4.2.1
+ __divdc3@GCC_4.0.0 4.2.1
+ __divdi3@GLIBC_2.0 4.2.1
+ __divsc3@GCC_4.0.0 4.2.1
+ __divxc3@GCC_4.0.0 4.2.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 4.2.1
+ __ffsdi2@GCC_3.0 4.2.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 4.2.1
+ __fixsfdi@GCC_3.0 4.2.1
+ __fixunsdfdi@GCC_3.0 4.2.1
+ __fixunsdfsi@GCC_3.0 4.2.1
+ __fixunssfdi@GCC_3.0 4.2.1
+ __fixunssfsi@GCC_3.0 4.2.1
+ __fixunsxfdi@GCC_3.0 4.2.1
+ __fixunsxfsi@GCC_3.0 4.2.1
+ __fixxfdi@GCC_3.0 4.2.1
+ __floatdidf@GCC_3.0 4.2.1
+ __floatdisf@GCC_3.0 4.2.1
+ __floatdixf@GCC_3.0 4.2.1
+ __floatundidf@GCC_4.2.0 4.2.1
+ __floatundisf@GCC_4.2.0 4.2.1
+ __floatundixf@GCC_4.2.0 4.2.1
+ __frame_state_for@GLIBC_2.0 4.2.1
+ __gcc_personality_v0@GCC_3.3.1 4.2.1
+ __lshrdi3@GCC_3.0 4.2.1
+ __moddi3@GLIBC_2.0 4.2.1
+ __muldc3@GCC_4.0.0 4.2.1
+ __muldi3@GCC_3.0 4.2.1
+ __mulsc3@GCC_4.0.0 4.2.1
+ __mulvdi3@GCC_3.0 4.2.1
+ __mulvsi3@GCC_3.0 4.2.1
+ __mulxc3@GCC_4.0.0 4.2.1
+ __negdi2@GCC_3.0 4.2.1
+ __negvdi2@GCC_3.0 4.2.1
+ __negvsi2@GCC_3.0 4.2.1
+ __paritydi2@GCC_3.4 4.2.1
+ __paritysi2@GCC_3.4 4.2.1
+ __popcountdi2@GCC_3.4 4.2.1
+ __popcountsi2@GCC_3.4 4.2.1
+ __powidf2@GCC_4.0.0 4.2.1
+ __powisf2@GCC_4.0.0 4.2.1
+ __powixf2@GCC_4.0.0 4.2.1
+ __register_frame@GLIBC_2.0 4.2.1
+ __register_frame_info@GLIBC_2.0 4.2.1
+ __register_frame_info_bases@GCC_3.0 4.2.1
+ __register_frame_info_table@GLIBC_2.0 4.2.1
+ __register_frame_info_table_bases@GCC_3.0 4.2.1
+ __register_frame_table@GLIBC_2.0 4.2.1
+ __subvdi3@GCC_3.0 4.2.1
+ __subvsi3@GCC_3.0 4.2.1
+ __ucmpdi2@GCC_3.0 4.2.1
+ __udivdi3@GLIBC_2.0 4.2.1
+ __udivmoddi4@GCC_3.0 4.2.1
+ __umoddi3@GLIBC_2.0 4.2.1
diff --git a/debian/libgcc1.symbols.i386 b/debian/libgcc1.symbols.i386
new file mode 100644
index 0000000..fd9b1aa
--- /dev/null
+++ b/debian/libgcc1.symbols.i386
@@ -0,0 +1,134 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GCC_4.5.0@GCC_4.5.0 1:4.5.0
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addtf3@GCC_4.4.0 1:4.4.0
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __copysigntf3@GCC_4.4.0 1:4.4.0
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.4.0 1:4.4.0
+ __divtf3@GCC_4.4.0 1:4.4.0
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.4.0 1:4.4.0
+ __extenddftf2@GCC_4.4.0 1:4.4.0
+ __extendsftf2@GCC_4.4.0 1:4.4.0
+ __extendxftf2@GCC_4.5.0 1:4.5.0
+ __fabstf2@GCC_4.4.0 1:4.4.0
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.4.0 1:4.4.0
+ __fixtfsi@GCC_4.4.0 1:4.4.0
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.4.0 1:4.4.0
+ __fixunstfsi@GCC_4.4.0 1:4.4.0
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfsi@GCC_3.0 1:4.1.1
+ __fixxfdi@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.4.0 1:4.4.0
+ __floatdixf@GCC_3.0 1:4.1.1
+ __floatsitf@GCC_4.4.0 1:4.4.0
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.4.0 1:4.4.0
+ __floatundixf@GCC_4.2.0 1:4.2.1
+ __floatunsitf@GCC_4.4.0 1:4.4.0
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.4.0 1:4.4.0
+ __gttf2@GCC_4.4.0 1:4.4.0
+ __letf2@GCC_4.4.0 1:4.4.0
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_4.4.0 1:4.4.0
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.4.0 1:4.4.0
+ __multf3@GCC_4.4.0 1:4.4.0
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negtf2@GCC_4.4.0 1:4.4.0
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __netf2@GCC_4.4.0 1:4.4.0
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.4.0 1:4.4.0
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subtf3@GCC_4.4.0 1:4.4.0
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __trunctfdf2@GCC_4.4.0 1:4.4.0
+ __trunctfsf2@GCC_4.4.0 1:4.4.0
+ __trunctfxf2@GCC_4.4.0 1:4.4.0
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unordtf2@GCC_4.4.0 1:4.4.0
diff --git a/debian/libgcc1.symbols.ia64 b/debian/libgcc1.symbols.ia64
new file mode 100644
index 0000000..3212dd8
--- /dev/null
+++ b/debian/libgcc1.symbols.ia64
@@ -0,0 +1,145 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3.2@GCC_3.3.2 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetBSP@GCC_3.3.2 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addtf3@GCC_4.4.0 1:4.4.0
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __copysigntf3@GCC_4.4.0 1:4.4.0
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdf3@GCC_3.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divsf3@GCC_3.0 1:4.1.1
+ __divsi3@GCC_3.0 1:4.1.1
+ __divtc3@GCC_4.4.0 1:4.4.0
+ __divtf3@GCC_3.0 1:4.1.1
+ __divti3@GCC_3.0 1:4.1.1
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __divxf3@GCC_3.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.4.0 1:4.4.0
+ __extenddftf2@GCC_4.4.0 1:4.4.0
+ __extendsftf2@GCC_4.4.0 1:4.4.0
+ __fabstf2@GCC_4.4.0 1:4.4.0
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.4.0 1:4.4.0
+ __fixtfsi@GCC_4.4.0 1:4.4.0
+ __fixtfti@GCC_3.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.4.0 1:4.4.0
+ __fixunstfsi@GCC_4.4.0 1:4.4.0
+ __fixunstfti@GCC_3.0 1:4.1.1
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfti@GCC_3.0 1:4.1.1
+ __fixxfti@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.4.0 1:4.4.0
+ __floatsitf@GCC_4.4.0 1:4.4.0
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_3.0 1:4.1.1
+ __floattixf@GCC_3.0 1:4.1.1
+ __floatunditf@GCC_4.4.0 1:4.4.0
+ __floatunsitf@GCC_4.4.0 1:4.4.0
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntixf@GCC_4.2.0 1:4.2.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.4.0 1:4.4.0
+ __gttf2@GCC_4.4.0 1:4.4.0
+ __ia64_nonlocal_goto@GCC_3.0 1:4.1.1
+ __ia64_restore_stack_nonlocal@GCC_3.0 1:4.1.1
+ __ia64_save_stack_nonlocal@GCC_3.0 1:4.1.1
+ __ia64_trampoline@GCC_3.0 1:4.1.1
+ __letf2@GCC_4.4.0 1:4.4.0
+ __lshrti3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_4.4.0 1:4.4.0
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __modsi3@GCC_3.0 1:4.1.1
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.4.0 1:4.4.0
+ __multf3@GCC_4.4.0 1:4.4.0
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negtf2@GCC_4.4.0 1:4.4.0
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __netf2@GCC_4.4.0 1:4.4.0
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.4.0 1:4.4.0
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __subtf3@GCC_4.4.0 1:4.4.0
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __trunctfdf2@GCC_4.4.0 1:4.4.0
+ __trunctfsf2@GCC_4.4.0 1:4.4.0
+ __trunctfxf2@GCC_4.4.0 1:4.4.0
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivsi3@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __umodsi3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
+ __unordtf2@GCC_4.4.0 1:4.4.0
diff --git a/debian/libgcc1.symbols.kfreebsd-amd64 b/debian/libgcc1.symbols.kfreebsd-amd64
new file mode 100644
index 0000000..a3c0435
--- /dev/null
+++ b/debian/libgcc1.symbols.kfreebsd-amd64
@@ -0,0 +1,138 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addtf3@GCC_4.3.0 1:4.3
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GCC_3.0 1:4.1.1
+ __deregister_frame_info@GCC_3.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.0.0 1:4.3
+ __divtf3@GCC_4.3.0 1:4.3
+ __divti3@GCC_3.0 1:4.1.1
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.3.0 1:4.3
+ __extenddftf2@GCC_4.3.0 1:4.3
+ __extendsftf2@GCC_4.3.0 1:4.3
+ __extendxftf2@GCC_4.3.0 1:4.3
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.3.0 1:4.3
+ __fixtfsi@GCC_4.3.0 1:4.3
+ __fixtfti@GCC_4.3.0 1:4.3
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.3.0 1:4.3
+ __fixunstfsi@GCC_4.3.0 1:4.3
+ __fixunstfti@GCC_4.3.0 1:4.3
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfti@GCC_3.0 1:4.1.1
+ __fixxfti@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.3.0 1:4.3
+ __floatsitf@GCC_4.3.0 1:4.3
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_4.3.0 1:4.3
+ __floattixf@GCC_3.0 1:4.1.1
+ __floatunditf@GCC_4.3.0 1:4.3
+ __floatunsitf@GCC_4.3.0 1:4.3
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.3.0 1:4.3
+ __floatuntixf@GCC_4.2.0 1:4.2.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.3.0 1:4.3
+ __gttf2@GCC_3.0 1:4.3
+ __letf2@GCC_4.3.0 1:4.3
+ __lshrti3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_3.0 1:4.3
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.0.0 1:4.3
+ __multf3@GCC_4.3.0 1:4.3
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negtf2@GCC_4.3.0 1:4.3
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __netf2@GCC_3.0 1:4.3
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.0.0 1:4.3
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GCC_3.0 1:4.1.1
+ __register_frame_info@GCC_3.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GCC_3.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GCC_3.0 1:4.1.1
+ __subtf3@GCC_4.3.0 1:4.3
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __trunctfdf2@GCC_4.3.0 1:4.3
+ __trunctfsf2@GCC_4.3.0 1:4.3
+ __trunctfxf2@GCC_4.3.0 1:4.3
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
+ __unordtf2@GCC_4.3.0 1:4.3
diff --git a/debian/libgcc1.symbols.kfreebsd-i386 b/debian/libgcc1.symbols.kfreebsd-i386
new file mode 100644
index 0000000..fd9b1aa
--- /dev/null
+++ b/debian/libgcc1.symbols.kfreebsd-i386
@@ -0,0 +1,134 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GCC_4.5.0@GCC_4.5.0 1:4.5.0
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addtf3@GCC_4.4.0 1:4.4.0
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __copysigntf3@GCC_4.4.0 1:4.4.0
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.4.0 1:4.4.0
+ __divtf3@GCC_4.4.0 1:4.4.0
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.4.0 1:4.4.0
+ __extenddftf2@GCC_4.4.0 1:4.4.0
+ __extendsftf2@GCC_4.4.0 1:4.4.0
+ __extendxftf2@GCC_4.5.0 1:4.5.0
+ __fabstf2@GCC_4.4.0 1:4.4.0
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.4.0 1:4.4.0
+ __fixtfsi@GCC_4.4.0 1:4.4.0
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.4.0 1:4.4.0
+ __fixunstfsi@GCC_4.4.0 1:4.4.0
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfsi@GCC_3.0 1:4.1.1
+ __fixxfdi@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.4.0 1:4.4.0
+ __floatdixf@GCC_3.0 1:4.1.1
+ __floatsitf@GCC_4.4.0 1:4.4.0
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.4.0 1:4.4.0
+ __floatundixf@GCC_4.2.0 1:4.2.1
+ __floatunsitf@GCC_4.4.0 1:4.4.0
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.4.0 1:4.4.0
+ __gttf2@GCC_4.4.0 1:4.4.0
+ __letf2@GCC_4.4.0 1:4.4.0
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_4.4.0 1:4.4.0
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.4.0 1:4.4.0
+ __multf3@GCC_4.4.0 1:4.4.0
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negtf2@GCC_4.4.0 1:4.4.0
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __netf2@GCC_4.4.0 1:4.4.0
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.4.0 1:4.4.0
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subtf3@GCC_4.4.0 1:4.4.0
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __trunctfdf2@GCC_4.4.0 1:4.4.0
+ __trunctfsf2@GCC_4.4.0 1:4.4.0
+ __trunctfxf2@GCC_4.4.0 1:4.4.0
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unordtf2@GCC_4.4.0 1:4.4.0
diff --git a/debian/libgcc1.symbols.lpia b/debian/libgcc1.symbols.lpia
new file mode 100644
index 0000000..2a71fc9
--- /dev/null
+++ b/debian/libgcc1.symbols.lpia
@@ -0,0 +1,133 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GCC_4.5.0@GCC_4.5.0 1:4.5.0
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addtf3@GCC_4.4.0 1:4.4.0
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __copysigntf3@GCC_4.4.0 1:4.4.0
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.4.0 1:4.4.0
+ __divtf3@GCC_4.4.0 1:4.4.0
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.4.0 1:4.4.0
+ __extenddftf2@GCC_4.4.0 1:4.4.0
+ __extendsftf2@GCC_4.4.0 1:4.4.0
+ __fabstf2@GCC_4.4.0 1:4.4.0
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.4.0 1:4.4.0
+ __fixtfsi@GCC_4.4.0 1:4.4.0
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.4.0 1:4.4.0
+ __fixunstfsi@GCC_4.4.0 1:4.4.0
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfsi@GCC_3.0 1:4.1.1
+ __fixxfdi@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.4.0 1:4.4.0
+ __floatdixf@GCC_3.0 1:4.1.1
+ __floatsitf@GCC_4.4.0 1:4.4.0
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.4.0 1:4.4.0
+ __floatundixf@GCC_4.2.0 1:4.2.1
+ __floatunsitf@GCC_4.4.0 1:4.4.0
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.4.0 1:4.4.0
+ __gttf2@GCC_4.4.0 1:4.4.0
+ __letf2@GCC_4.4.0 1:4.4.0
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_4.4.0 1:4.4.0
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.4.0 1:4.4.0
+ __multf3@GCC_4.4.0 1:4.4.0
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negtf2@GCC_4.4.0 1:4.4.0
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __netf2@GCC_4.4.0 1:4.4.0
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.4.0 1:4.4.0
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subtf3@GCC_4.4.0 1:4.4.0
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __trunctfdf2@GCC_4.4.0 1:4.4.0
+ __trunctfsf2@GCC_4.4.0 1:4.4.0
+ __trunctfxf2@GCC_4.4.0 1:4.4.0
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unordtf2@GCC_4.4.0 1:4.4.0
diff --git a/debian/libgcc1.symbols.mips b/debian/libgcc1.symbols.mips
new file mode 100644
index 0000000..ca9f1df
--- /dev/null
+++ b/debian/libgcc1.symbols.mips
@@ -0,0 +1,1219 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3.4@GCC_3.3.4 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addda3@GCC_4.3.0 1:4.3
+ __adddf3@GCC_3.0 1:4.1.1
+ __adddq3@GCC_4.3.0 1:4.3
+ __addha3@GCC_4.3.0 1:4.3
+ __addhq3@GCC_4.3.0 1:4.3
+ __addqq3@GCC_4.3.0 1:4.3
+ __addsa3@GCC_4.3.0 1:4.3
+ __addsf3@GCC_3.0 1:4.1.1
+ __addsq3@GCC_4.3.0 1:4.3
+ __adduda3@GCC_4.3.0 1:4.3
+ __addudq3@GCC_4.3.0 1:4.3
+ __adduha3@GCC_4.3.0 1:4.3
+ __adduhq3@GCC_4.3.0 1:4.3
+ __adduqq3@GCC_4.3.0 1:4.3
+ __addusa3@GCC_4.3.0 1:4.3
+ __addusq3@GCC_4.3.0 1:4.3
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashlda3@GCC_4.3.0 1:4.3
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashldq3@GCC_4.3.0 1:4.3
+ __ashlha3@GCC_4.3.0 1:4.3
+ __ashlhq3@GCC_4.3.0 1:4.3
+ __ashlqq3@GCC_4.3.0 1:4.3
+ __ashlsa3@GCC_4.3.0 1:4.3
+ __ashlsq3@GCC_4.3.0 1:4.3
+ __ashluda3@GCC_4.3.0 1:4.3
+ __ashludq3@GCC_4.3.0 1:4.3
+ __ashluha3@GCC_4.3.0 1:4.3
+ __ashluhq3@GCC_4.3.0 1:4.3
+ __ashluqq3@GCC_4.3.0 1:4.3
+ __ashlusa3@GCC_4.3.0 1:4.3
+ __ashlusq3@GCC_4.3.0 1:4.3
+ __ashrda3@GCC_4.3.0 1:4.3
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __ashrdq3@GCC_4.3.0 1:4.3
+ __ashrha3@GCC_4.3.0 1:4.3
+ __ashrhq3@GCC_4.3.0 1:4.3
+ __ashrqq3@GCC_4.3.0 1:4.3
+ __ashrsa3@GCC_4.3.0 1:4.3
+ __ashrsq3@GCC_4.3.0 1:4.3
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpda2@GCC_4.3.0 1:4.3
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __cmpdq2@GCC_4.3.0 1:4.3
+ __cmpha2@GCC_4.3.0 1:4.3
+ __cmphq2@GCC_4.3.0 1:4.3
+ __cmpqq2@GCC_4.3.0 1:4.3
+ __cmpsa2@GCC_4.3.0 1:4.3
+ __cmpsq2@GCC_4.3.0 1:4.3
+ __cmpuda2@GCC_4.3.0 1:4.3
+ __cmpudq2@GCC_4.3.0 1:4.3
+ __cmpuha2@GCC_4.3.0 1:4.3
+ __cmpuhq2@GCC_4.3.0 1:4.3
+ __cmpuqq2@GCC_4.3.0 1:4.3
+ __cmpusa2@GCC_4.3.0 1:4.3
+ __cmpusq2@GCC_4.3.0 1:4.3
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divda3@GCC_4.3.0 1:4.3
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdf3@GCC_3.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divdq3@GCC_4.3.0 1:4.3
+ __divha3@GCC_4.3.0 1:4.3
+ __divhq3@GCC_4.3.0 1:4.3
+ __divqq3@GCC_4.3.0 1:4.3
+ __divsa3@GCC_4.3.0 1:4.3
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divsf3@GCC_3.0 1:4.1.1
+ __divsq3@GCC_4.3.0 1:4.3
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqdf2@GCC_3.0 1:4.1.1
+ __eqsf2@GCC_3.0 1:4.1.1
+ __extendsfdf2@GCC_3.0 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixdfsi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixsfsi@GCC_3.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatsidf@GCC_3.0 1:4.1.1
+ __floatsisf@GCC_3.0 1:4.1.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunsidf@GCC_4.2.0 1:4.2.1
+ __floatunsisf@GCC_4.2.0 1:4.2.1
+ __fractdadf@GCC_4.3.0 1:4.3
+ __fractdadi@GCC_4.3.0 1:4.3
+ __fractdadq@GCC_4.3.0 1:4.3
+ __fractdaha2@GCC_4.3.0 1:4.3
+ __fractdahi@GCC_4.3.0 1:4.3
+ __fractdahq@GCC_4.3.0 1:4.3
+ __fractdaqi@GCC_4.3.0 1:4.3
+ __fractdaqq@GCC_4.3.0 1:4.3
+ __fractdasa2@GCC_4.3.0 1:4.3
+ __fractdasf@GCC_4.3.0 1:4.3
+ __fractdasi@GCC_4.3.0 1:4.3
+ __fractdasq@GCC_4.3.0 1:4.3
+ __fractdauda@GCC_4.3.0 1:4.3
+ __fractdaudq@GCC_4.3.0 1:4.3
+ __fractdauha@GCC_4.3.0 1:4.3
+ __fractdauhq@GCC_4.3.0 1:4.3
+ __fractdauqq@GCC_4.3.0 1:4.3
+ __fractdausa@GCC_4.3.0 1:4.3
+ __fractdausq@GCC_4.3.0 1:4.3
+ __fractdfda@GCC_4.3.0 1:4.3
+ __fractdfdq@GCC_4.3.0 1:4.3
+ __fractdfha@GCC_4.3.0 1:4.3
+ __fractdfhq@GCC_4.3.0 1:4.3
+ __fractdfqq@GCC_4.3.0 1:4.3
+ __fractdfsa@GCC_4.3.0 1:4.3
+ __fractdfsq@GCC_4.3.0 1:4.3
+ __fractdfuda@GCC_4.3.0 1:4.3
+ __fractdfudq@GCC_4.3.0 1:4.3
+ __fractdfuha@GCC_4.3.0 1:4.3
+ __fractdfuhq@GCC_4.3.0 1:4.3
+ __fractdfuqq@GCC_4.3.0 1:4.3
+ __fractdfusa@GCC_4.3.0 1:4.3
+ __fractdfusq@GCC_4.3.0 1:4.3
+ __fractdida@GCC_4.3.0 1:4.3
+ __fractdidq@GCC_4.3.0 1:4.3
+ __fractdiha@GCC_4.3.0 1:4.3
+ __fractdihq@GCC_4.3.0 1:4.3
+ __fractdiqq@GCC_4.3.0 1:4.3
+ __fractdisa@GCC_4.3.0 1:4.3
+ __fractdisq@GCC_4.3.0 1:4.3
+ __fractdiuda@GCC_4.3.0 1:4.3
+ __fractdiudq@GCC_4.3.0 1:4.3
+ __fractdiuha@GCC_4.3.0 1:4.3
+ __fractdiuhq@GCC_4.3.0 1:4.3
+ __fractdiuqq@GCC_4.3.0 1:4.3
+ __fractdiusa@GCC_4.3.0 1:4.3
+ __fractdiusq@GCC_4.3.0 1:4.3
+ __fractdqda@GCC_4.3.0 1:4.3
+ __fractdqdf@GCC_4.3.0 1:4.3
+ __fractdqdi@GCC_4.3.0 1:4.3
+ __fractdqha@GCC_4.3.0 1:4.3
+ __fractdqhi@GCC_4.3.0 1:4.3
+ __fractdqhq2@GCC_4.3.0 1:4.3
+ __fractdqqi@GCC_4.3.0 1:4.3
+ __fractdqqq2@GCC_4.3.0 1:4.3
+ __fractdqsa@GCC_4.3.0 1:4.3
+ __fractdqsf@GCC_4.3.0 1:4.3
+ __fractdqsi@GCC_4.3.0 1:4.3
+ __fractdqsq2@GCC_4.3.0 1:4.3
+ __fractdquda@GCC_4.3.0 1:4.3
+ __fractdqudq@GCC_4.3.0 1:4.3
+ __fractdquha@GCC_4.3.0 1:4.3
+ __fractdquhq@GCC_4.3.0 1:4.3
+ __fractdquqq@GCC_4.3.0 1:4.3
+ __fractdqusa@GCC_4.3.0 1:4.3
+ __fractdqusq@GCC_4.3.0 1:4.3
+ __fracthada2@GCC_4.3.0 1:4.3
+ __fracthadf@GCC_4.3.0 1:4.3
+ __fracthadi@GCC_4.3.0 1:4.3
+ __fracthadq@GCC_4.3.0 1:4.3
+ __fracthahi@GCC_4.3.0 1:4.3
+ __fracthahq@GCC_4.3.0 1:4.3
+ __fracthaqi@GCC_4.3.0 1:4.3
+ __fracthaqq@GCC_4.3.0 1:4.3
+ __fracthasa2@GCC_4.3.0 1:4.3
+ __fracthasf@GCC_4.3.0 1:4.3
+ __fracthasi@GCC_4.3.0 1:4.3
+ __fracthasq@GCC_4.3.0 1:4.3
+ __fracthauda@GCC_4.3.0 1:4.3
+ __fracthaudq@GCC_4.3.0 1:4.3
+ __fracthauha@GCC_4.3.0 1:4.3
+ __fracthauhq@GCC_4.3.0 1:4.3
+ __fracthauqq@GCC_4.3.0 1:4.3
+ __fracthausa@GCC_4.3.0 1:4.3
+ __fracthausq@GCC_4.3.0 1:4.3
+ __fracthida@GCC_4.3.0 1:4.3
+ __fracthidq@GCC_4.3.0 1:4.3
+ __fracthiha@GCC_4.3.0 1:4.3
+ __fracthihq@GCC_4.3.0 1:4.3
+ __fracthiqq@GCC_4.3.0 1:4.3
+ __fracthisa@GCC_4.3.0 1:4.3
+ __fracthisq@GCC_4.3.0 1:4.3
+ __fracthiuda@GCC_4.3.0 1:4.3
+ __fracthiudq@GCC_4.3.0 1:4.3
+ __fracthiuha@GCC_4.3.0 1:4.3
+ __fracthiuhq@GCC_4.3.0 1:4.3
+ __fracthiuqq@GCC_4.3.0 1:4.3
+ __fracthiusa@GCC_4.3.0 1:4.3
+ __fracthiusq@GCC_4.3.0 1:4.3
+ __fracthqda@GCC_4.3.0 1:4.3
+ __fracthqdf@GCC_4.3.0 1:4.3
+ __fracthqdi@GCC_4.3.0 1:4.3
+ __fracthqdq2@GCC_4.3.0 1:4.3
+ __fracthqha@GCC_4.3.0 1:4.3
+ __fracthqhi@GCC_4.3.0 1:4.3
+ __fracthqqi@GCC_4.3.0 1:4.3
+ __fracthqqq2@GCC_4.3.0 1:4.3
+ __fracthqsa@GCC_4.3.0 1:4.3
+ __fracthqsf@GCC_4.3.0 1:4.3
+ __fracthqsi@GCC_4.3.0 1:4.3
+ __fracthqsq2@GCC_4.3.0 1:4.3
+ __fracthquda@GCC_4.3.0 1:4.3
+ __fracthqudq@GCC_4.3.0 1:4.3
+ __fracthquha@GCC_4.3.0 1:4.3
+ __fracthquhq@GCC_4.3.0 1:4.3
+ __fracthquqq@GCC_4.3.0 1:4.3
+ __fracthqusa@GCC_4.3.0 1:4.3
+ __fracthqusq@GCC_4.3.0 1:4.3
+ __fractqida@GCC_4.3.0 1:4.3
+ __fractqidq@GCC_4.3.0 1:4.3
+ __fractqiha@GCC_4.3.0 1:4.3
+ __fractqihq@GCC_4.3.0 1:4.3
+ __fractqiqq@GCC_4.3.0 1:4.3
+ __fractqisa@GCC_4.3.0 1:4.3
+ __fractqisq@GCC_4.3.0 1:4.3
+ __fractqiuda@GCC_4.3.0 1:4.3
+ __fractqiudq@GCC_4.3.0 1:4.3
+ __fractqiuha@GCC_4.3.0 1:4.3
+ __fractqiuhq@GCC_4.3.0 1:4.3
+ __fractqiuqq@GCC_4.3.0 1:4.3
+ __fractqiusa@GCC_4.3.0 1:4.3
+ __fractqiusq@GCC_4.3.0 1:4.3
+ __fractqqda@GCC_4.3.0 1:4.3
+ __fractqqdf@GCC_4.3.0 1:4.3
+ __fractqqdi@GCC_4.3.0 1:4.3
+ __fractqqdq2@GCC_4.3.0 1:4.3
+ __fractqqha@GCC_4.3.0 1:4.3
+ __fractqqhi@GCC_4.3.0 1:4.3
+ __fractqqhq2@GCC_4.3.0 1:4.3
+ __fractqqqi@GCC_4.3.0 1:4.3
+ __fractqqsa@GCC_4.3.0 1:4.3
+ __fractqqsf@GCC_4.3.0 1:4.3
+ __fractqqsi@GCC_4.3.0 1:4.3
+ __fractqqsq2@GCC_4.3.0 1:4.3
+ __fractqquda@GCC_4.3.0 1:4.3
+ __fractqqudq@GCC_4.3.0 1:4.3
+ __fractqquha@GCC_4.3.0 1:4.3
+ __fractqquhq@GCC_4.3.0 1:4.3
+ __fractqquqq@GCC_4.3.0 1:4.3
+ __fractqqusa@GCC_4.3.0 1:4.3
+ __fractqqusq@GCC_4.3.0 1:4.3
+ __fractsada2@GCC_4.3.0 1:4.3
+ __fractsadf@GCC_4.3.0 1:4.3
+ __fractsadi@GCC_4.3.0 1:4.3
+ __fractsadq@GCC_4.3.0 1:4.3
+ __fractsaha2@GCC_4.3.0 1:4.3
+ __fractsahi@GCC_4.3.0 1:4.3
+ __fractsahq@GCC_4.3.0 1:4.3
+ __fractsaqi@GCC_4.3.0 1:4.3
+ __fractsaqq@GCC_4.3.0 1:4.3
+ __fractsasf@GCC_4.3.0 1:4.3
+ __fractsasi@GCC_4.3.0 1:4.3
+ __fractsasq@GCC_4.3.0 1:4.3
+ __fractsauda@GCC_4.3.0 1:4.3
+ __fractsaudq@GCC_4.3.0 1:4.3
+ __fractsauha@GCC_4.3.0 1:4.3
+ __fractsauhq@GCC_4.3.0 1:4.3
+ __fractsauqq@GCC_4.3.0 1:4.3
+ __fractsausa@GCC_4.3.0 1:4.3
+ __fractsausq@GCC_4.3.0 1:4.3
+ __fractsfda@GCC_4.3.0 1:4.3
+ __fractsfdq@GCC_4.3.0 1:4.3
+ __fractsfha@GCC_4.3.0 1:4.3
+ __fractsfhq@GCC_4.3.0 1:4.3
+ __fractsfqq@GCC_4.3.0 1:4.3
+ __fractsfsa@GCC_4.3.0 1:4.3
+ __fractsfsq@GCC_4.3.0 1:4.3
+ __fractsfuda@GCC_4.3.0 1:4.3
+ __fractsfudq@GCC_4.3.0 1:4.3
+ __fractsfuha@GCC_4.3.0 1:4.3
+ __fractsfuhq@GCC_4.3.0 1:4.3
+ __fractsfuqq@GCC_4.3.0 1:4.3
+ __fractsfusa@GCC_4.3.0 1:4.3
+ __fractsfusq@GCC_4.3.0 1:4.3
+ __fractsida@GCC_4.3.0 1:4.3
+ __fractsidq@GCC_4.3.0 1:4.3
+ __fractsiha@GCC_4.3.0 1:4.3
+ __fractsihq@GCC_4.3.0 1:4.3
+ __fractsiqq@GCC_4.3.0 1:4.3
+ __fractsisa@GCC_4.3.0 1:4.3
+ __fractsisq@GCC_4.3.0 1:4.3
+ __fractsiuda@GCC_4.3.0 1:4.3
+ __fractsiudq@GCC_4.3.0 1:4.3
+ __fractsiuha@GCC_4.3.0 1:4.3
+ __fractsiuhq@GCC_4.3.0 1:4.3
+ __fractsiuqq@GCC_4.3.0 1:4.3
+ __fractsiusa@GCC_4.3.0 1:4.3
+ __fractsiusq@GCC_4.3.0 1:4.3
+ __fractsqda@GCC_4.3.0 1:4.3
+ __fractsqdf@GCC_4.3.0 1:4.3
+ __fractsqdi@GCC_4.3.0 1:4.3
+ __fractsqdq2@GCC_4.3.0 1:4.3
+ __fractsqha@GCC_4.3.0 1:4.3
+ __fractsqhi@GCC_4.3.0 1:4.3
+ __fractsqhq2@GCC_4.3.0 1:4.3
+ __fractsqqi@GCC_4.3.0 1:4.3
+ __fractsqqq2@GCC_4.3.0 1:4.3
+ __fractsqsa@GCC_4.3.0 1:4.3
+ __fractsqsf@GCC_4.3.0 1:4.3
+ __fractsqsi@GCC_4.3.0 1:4.3
+ __fractsquda@GCC_4.3.0 1:4.3
+ __fractsqudq@GCC_4.3.0 1:4.3
+ __fractsquha@GCC_4.3.0 1:4.3
+ __fractsquhq@GCC_4.3.0 1:4.3
+ __fractsquqq@GCC_4.3.0 1:4.3
+ __fractsqusa@GCC_4.3.0 1:4.3
+ __fractsqusq@GCC_4.3.0 1:4.3
+ __fractudada@GCC_4.3.0 1:4.3
+ __fractudadf@GCC_4.3.0 1:4.3
+ __fractudadi@GCC_4.3.0 1:4.3
+ __fractudadq@GCC_4.3.0 1:4.3
+ __fractudaha@GCC_4.3.0 1:4.3
+ __fractudahi@GCC_4.3.0 1:4.3
+ __fractudahq@GCC_4.3.0 1:4.3
+ __fractudaqi@GCC_4.3.0 1:4.3
+ __fractudaqq@GCC_4.3.0 1:4.3
+ __fractudasa@GCC_4.3.0 1:4.3
+ __fractudasf@GCC_4.3.0 1:4.3
+ __fractudasi@GCC_4.3.0 1:4.3
+ __fractudasq@GCC_4.3.0 1:4.3
+ __fractudaudq@GCC_4.3.0 1:4.3
+ __fractudauha2@GCC_4.3.0 1:4.3
+ __fractudauhq@GCC_4.3.0 1:4.3
+ __fractudauqq@GCC_4.3.0 1:4.3
+ __fractudausa2@GCC_4.3.0 1:4.3
+ __fractudausq@GCC_4.3.0 1:4.3
+ __fractudqda@GCC_4.3.0 1:4.3
+ __fractudqdf@GCC_4.3.0 1:4.3
+ __fractudqdi@GCC_4.3.0 1:4.3
+ __fractudqdq@GCC_4.3.0 1:4.3
+ __fractudqha@GCC_4.3.0 1:4.3
+ __fractudqhi@GCC_4.3.0 1:4.3
+ __fractudqhq@GCC_4.3.0 1:4.3
+ __fractudqqi@GCC_4.3.0 1:4.3
+ __fractudqqq@GCC_4.3.0 1:4.3
+ __fractudqsa@GCC_4.3.0 1:4.3
+ __fractudqsf@GCC_4.3.0 1:4.3
+ __fractudqsi@GCC_4.3.0 1:4.3
+ __fractudqsq@GCC_4.3.0 1:4.3
+ __fractudquda@GCC_4.3.0 1:4.3
+ __fractudquha@GCC_4.3.0 1:4.3
+ __fractudquhq2@GCC_4.3.0 1:4.3
+ __fractudquqq2@GCC_4.3.0 1:4.3
+ __fractudqusa@GCC_4.3.0 1:4.3
+ __fractudqusq2@GCC_4.3.0 1:4.3
+ __fractuhada@GCC_4.3.0 1:4.3
+ __fractuhadf@GCC_4.3.0 1:4.3
+ __fractuhadi@GCC_4.3.0 1:4.3
+ __fractuhadq@GCC_4.3.0 1:4.3
+ __fractuhaha@GCC_4.3.0 1:4.3
+ __fractuhahi@GCC_4.3.0 1:4.3
+ __fractuhahq@GCC_4.3.0 1:4.3
+ __fractuhaqi@GCC_4.3.0 1:4.3
+ __fractuhaqq@GCC_4.3.0 1:4.3
+ __fractuhasa@GCC_4.3.0 1:4.3
+ __fractuhasf@GCC_4.3.0 1:4.3
+ __fractuhasi@GCC_4.3.0 1:4.3
+ __fractuhasq@GCC_4.3.0 1:4.3
+ __fractuhauda2@GCC_4.3.0 1:4.3
+ __fractuhaudq@GCC_4.3.0 1:4.3
+ __fractuhauhq@GCC_4.3.0 1:4.3
+ __fractuhauqq@GCC_4.3.0 1:4.3
+ __fractuhausa2@GCC_4.3.0 1:4.3
+ __fractuhausq@GCC_4.3.0 1:4.3
+ __fractuhqda@GCC_4.3.0 1:4.3
+ __fractuhqdf@GCC_4.3.0 1:4.3
+ __fractuhqdi@GCC_4.3.0 1:4.3
+ __fractuhqdq@GCC_4.3.0 1:4.3
+ __fractuhqha@GCC_4.3.0 1:4.3
+ __fractuhqhi@GCC_4.3.0 1:4.3
+ __fractuhqhq@GCC_4.3.0 1:4.3
+ __fractuhqqi@GCC_4.3.0 1:4.3
+ __fractuhqqq@GCC_4.3.0 1:4.3
+ __fractuhqsa@GCC_4.3.0 1:4.3
+ __fractuhqsf@GCC_4.3.0 1:4.3
+ __fractuhqsi@GCC_4.3.0 1:4.3
+ __fractuhqsq@GCC_4.3.0 1:4.3
+ __fractuhquda@GCC_4.3.0 1:4.3
+ __fractuhqudq2@GCC_4.3.0 1:4.3
+ __fractuhquha@GCC_4.3.0 1:4.3
+ __fractuhquqq2@GCC_4.3.0 1:4.3
+ __fractuhqusa@GCC_4.3.0 1:4.3
+ __fractuhqusq2@GCC_4.3.0 1:4.3
+ __fractunsdadi@GCC_4.3.0 1:4.3
+ __fractunsdahi@GCC_4.3.0 1:4.3
+ __fractunsdaqi@GCC_4.3.0 1:4.3
+ __fractunsdasi@GCC_4.3.0 1:4.3
+ __fractunsdida@GCC_4.3.0 1:4.3
+ __fractunsdidq@GCC_4.3.0 1:4.3
+ __fractunsdiha@GCC_4.3.0 1:4.3
+ __fractunsdihq@GCC_4.3.0 1:4.3
+ __fractunsdiqq@GCC_4.3.0 1:4.3
+ __fractunsdisa@GCC_4.3.0 1:4.3
+ __fractunsdisq@GCC_4.3.0 1:4.3
+ __fractunsdiuda@GCC_4.3.0 1:4.3
+ __fractunsdiudq@GCC_4.3.0 1:4.3
+ __fractunsdiuha@GCC_4.3.0 1:4.3
+ __fractunsdiuhq@GCC_4.3.0 1:4.3
+ __fractunsdiuqq@GCC_4.3.0 1:4.3
+ __fractunsdiusa@GCC_4.3.0 1:4.3
+ __fractunsdiusq@GCC_4.3.0 1:4.3
+ __fractunsdqdi@GCC_4.3.0 1:4.3
+ __fractunsdqhi@GCC_4.3.0 1:4.3
+ __fractunsdqqi@GCC_4.3.0 1:4.3
+ __fractunsdqsi@GCC_4.3.0 1:4.3
+ __fractunshadi@GCC_4.3.0 1:4.3
+ __fractunshahi@GCC_4.3.0 1:4.3
+ __fractunshaqi@GCC_4.3.0 1:4.3
+ __fractunshasi@GCC_4.3.0 1:4.3
+ __fractunshida@GCC_4.3.0 1:4.3
+ __fractunshidq@GCC_4.3.0 1:4.3
+ __fractunshiha@GCC_4.3.0 1:4.3
+ __fractunshihq@GCC_4.3.0 1:4.3
+ __fractunshiqq@GCC_4.3.0 1:4.3
+ __fractunshisa@GCC_4.3.0 1:4.3
+ __fractunshisq@GCC_4.3.0 1:4.3
+ __fractunshiuda@GCC_4.3.0 1:4.3
+ __fractunshiudq@GCC_4.3.0 1:4.3
+ __fractunshiuha@GCC_4.3.0 1:4.3
+ __fractunshiuhq@GCC_4.3.0 1:4.3
+ __fractunshiuqq@GCC_4.3.0 1:4.3
+ __fractunshiusa@GCC_4.3.0 1:4.3
+ __fractunshiusq@GCC_4.3.0 1:4.3
+ __fractunshqdi@GCC_4.3.0 1:4.3
+ __fractunshqhi@GCC_4.3.0 1:4.3
+ __fractunshqqi@GCC_4.3.0 1:4.3
+ __fractunshqsi@GCC_4.3.0 1:4.3
+ __fractunsqida@GCC_4.3.0 1:4.3
+ __fractunsqidq@GCC_4.3.0 1:4.3
+ __fractunsqiha@GCC_4.3.0 1:4.3
+ __fractunsqihq@GCC_4.3.0 1:4.3
+ __fractunsqiqq@GCC_4.3.0 1:4.3
+ __fractunsqisa@GCC_4.3.0 1:4.3
+ __fractunsqisq@GCC_4.3.0 1:4.3
+ __fractunsqiuda@GCC_4.3.0 1:4.3
+ __fractunsqiudq@GCC_4.3.0 1:4.3
+ __fractunsqiuha@GCC_4.3.0 1:4.3
+ __fractunsqiuhq@GCC_4.3.0 1:4.3
+ __fractunsqiuqq@GCC_4.3.0 1:4.3
+ __fractunsqiusa@GCC_4.3.0 1:4.3
+ __fractunsqiusq@GCC_4.3.0 1:4.3
+ __fractunsqqdi@GCC_4.3.0 1:4.3
+ __fractunsqqhi@GCC_4.3.0 1:4.3
+ __fractunsqqqi@GCC_4.3.0 1:4.3
+ __fractunsqqsi@GCC_4.3.0 1:4.3
+ __fractunssadi@GCC_4.3.0 1:4.3
+ __fractunssahi@GCC_4.3.0 1:4.3
+ __fractunssaqi@GCC_4.3.0 1:4.3
+ __fractunssasi@GCC_4.3.0 1:4.3
+ __fractunssida@GCC_4.3.0 1:4.3
+ __fractunssidq@GCC_4.3.0 1:4.3
+ __fractunssiha@GCC_4.3.0 1:4.3
+ __fractunssihq@GCC_4.3.0 1:4.3
+ __fractunssiqq@GCC_4.3.0 1:4.3
+ __fractunssisa@GCC_4.3.0 1:4.3
+ __fractunssisq@GCC_4.3.0 1:4.3
+ __fractunssiuda@GCC_4.3.0 1:4.3
+ __fractunssiudq@GCC_4.3.0 1:4.3
+ __fractunssiuha@GCC_4.3.0 1:4.3
+ __fractunssiuhq@GCC_4.3.0 1:4.3
+ __fractunssiuqq@GCC_4.3.0 1:4.3
+ __fractunssiusa@GCC_4.3.0 1:4.3
+ __fractunssiusq@GCC_4.3.0 1:4.3
+ __fractunssqdi@GCC_4.3.0 1:4.3
+ __fractunssqhi@GCC_4.3.0 1:4.3
+ __fractunssqqi@GCC_4.3.0 1:4.3
+ __fractunssqsi@GCC_4.3.0 1:4.3
+ __fractunsudadi@GCC_4.3.0 1:4.3
+ __fractunsudahi@GCC_4.3.0 1:4.3
+ __fractunsudaqi@GCC_4.3.0 1:4.3
+ __fractunsudasi@GCC_4.3.0 1:4.3
+ __fractunsudqdi@GCC_4.3.0 1:4.3
+ __fractunsudqhi@GCC_4.3.0 1:4.3
+ __fractunsudqqi@GCC_4.3.0 1:4.3
+ __fractunsudqsi@GCC_4.3.0 1:4.3
+ __fractunsuhadi@GCC_4.3.0 1:4.3
+ __fractunsuhahi@GCC_4.3.0 1:4.3
+ __fractunsuhaqi@GCC_4.3.0 1:4.3
+ __fractunsuhasi@GCC_4.3.0 1:4.3
+ __fractunsuhqdi@GCC_4.3.0 1:4.3
+ __fractunsuhqhi@GCC_4.3.0 1:4.3
+ __fractunsuhqqi@GCC_4.3.0 1:4.3
+ __fractunsuhqsi@GCC_4.3.0 1:4.3
+ __fractunsuqqdi@GCC_4.3.0 1:4.3
+ __fractunsuqqhi@GCC_4.3.0 1:4.3
+ __fractunsuqqqi@GCC_4.3.0 1:4.3
+ __fractunsuqqsi@GCC_4.3.0 1:4.3
+ __fractunsusadi@GCC_4.3.0 1:4.3
+ __fractunsusahi@GCC_4.3.0 1:4.3
+ __fractunsusaqi@GCC_4.3.0 1:4.3
+ __fractunsusasi@GCC_4.3.0 1:4.3
+ __fractunsusqdi@GCC_4.3.0 1:4.3
+ __fractunsusqhi@GCC_4.3.0 1:4.3
+ __fractunsusqqi@GCC_4.3.0 1:4.3
+ __fractunsusqsi@GCC_4.3.0 1:4.3
+ __fractuqqda@GCC_4.3.0 1:4.3
+ __fractuqqdf@GCC_4.3.0 1:4.3
+ __fractuqqdi@GCC_4.3.0 1:4.3
+ __fractuqqdq@GCC_4.3.0 1:4.3
+ __fractuqqha@GCC_4.3.0 1:4.3
+ __fractuqqhi@GCC_4.3.0 1:4.3
+ __fractuqqhq@GCC_4.3.0 1:4.3
+ __fractuqqqi@GCC_4.3.0 1:4.3
+ __fractuqqqq@GCC_4.3.0 1:4.3
+ __fractuqqsa@GCC_4.3.0 1:4.3
+ __fractuqqsf@GCC_4.3.0 1:4.3
+ __fractuqqsi@GCC_4.3.0 1:4.3
+ __fractuqqsq@GCC_4.3.0 1:4.3
+ __fractuqquda@GCC_4.3.0 1:4.3
+ __fractuqqudq2@GCC_4.3.0 1:4.3
+ __fractuqquha@GCC_4.3.0 1:4.3
+ __fractuqquhq2@GCC_4.3.0 1:4.3
+ __fractuqqusa@GCC_4.3.0 1:4.3
+ __fractuqqusq2@GCC_4.3.0 1:4.3
+ __fractusada@GCC_4.3.0 1:4.3
+ __fractusadf@GCC_4.3.0 1:4.3
+ __fractusadi@GCC_4.3.0 1:4.3
+ __fractusadq@GCC_4.3.0 1:4.3
+ __fractusaha@GCC_4.3.0 1:4.3
+ __fractusahi@GCC_4.3.0 1:4.3
+ __fractusahq@GCC_4.3.0 1:4.3
+ __fractusaqi@GCC_4.3.0 1:4.3
+ __fractusaqq@GCC_4.3.0 1:4.3
+ __fractusasa@GCC_4.3.0 1:4.3
+ __fractusasf@GCC_4.3.0 1:4.3
+ __fractusasi@GCC_4.3.0 1:4.3
+ __fractusasq@GCC_4.3.0 1:4.3
+ __fractusauda2@GCC_4.3.0 1:4.3
+ __fractusaudq@GCC_4.3.0 1:4.3
+ __fractusauha2@GCC_4.3.0 1:4.3
+ __fractusauhq@GCC_4.3.0 1:4.3
+ __fractusauqq@GCC_4.3.0 1:4.3
+ __fractusausq@GCC_4.3.0 1:4.3
+ __fractusqda@GCC_4.3.0 1:4.3
+ __fractusqdf@GCC_4.3.0 1:4.3
+ __fractusqdi@GCC_4.3.0 1:4.3
+ __fractusqdq@GCC_4.3.0 1:4.3
+ __fractusqha@GCC_4.3.0 1:4.3
+ __fractusqhi@GCC_4.3.0 1:4.3
+ __fractusqhq@GCC_4.3.0 1:4.3
+ __fractusqqi@GCC_4.3.0 1:4.3
+ __fractusqqq@GCC_4.3.0 1:4.3
+ __fractusqsa@GCC_4.3.0 1:4.3
+ __fractusqsf@GCC_4.3.0 1:4.3
+ __fractusqsi@GCC_4.3.0 1:4.3
+ __fractusqsq@GCC_4.3.0 1:4.3
+ __fractusquda@GCC_4.3.0 1:4.3
+ __fractusqudq2@GCC_4.3.0 1:4.3
+ __fractusquha@GCC_4.3.0 1:4.3
+ __fractusquhq2@GCC_4.3.0 1:4.3
+ __fractusquqq2@GCC_4.3.0 1:4.3
+ __fractusqusa@GCC_4.3.0 1:4.3
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __gedf2@GCC_3.0 1:4.1.1
+ __gesf2@GCC_3.0 1:4.1.1
+ __gtdf2@GCC_3.0 1:4.1.1
+ __gtsf2@GCC_3.0 1:4.1.1
+ __ledf2@GCC_3.0 1:4.1.1
+ __lesf2@GCC_3.0 1:4.1.1
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __lshruda3@GCC_4.3.0 1:4.3
+ __lshrudq3@GCC_4.3.0 1:4.3
+ __lshruha3@GCC_4.3.0 1:4.3
+ __lshruhq3@GCC_4.3.0 1:4.3
+ __lshruqq3@GCC_4.3.0 1:4.3
+ __lshrusa3@GCC_4.3.0 1:4.3
+ __lshrusq3@GCC_4.3.0 1:4.3
+ __ltdf2@GCC_3.0 1:4.1.1
+ __ltsf2@GCC_3.0 1:4.1.1
+ __mips16_adddf3@GCC_4.4.0 1:4.4.0
+ __mips16_addsf3@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_9@GCC_4.4.0 1:4.4.0
+ __mips16_divdf3@GCC_4.4.0 1:4.4.0
+ __mips16_divsf3@GCC_4.4.0 1:4.4.0
+ __mips16_eqdf2@GCC_4.4.0 1:4.4.0
+ __mips16_eqsf2@GCC_4.4.0 1:4.4.0
+ __mips16_extendsfdf2@GCC_4.4.0 1:4.4.0
+ __mips16_fix_truncdfsi@GCC_4.4.0 1:4.4.0
+ __mips16_fix_truncsfsi@GCC_4.4.0 1:4.4.0
+ __mips16_floatsidf@GCC_4.4.0 1:4.4.0
+ __mips16_floatsisf@GCC_4.4.0 1:4.4.0
+ __mips16_floatunsidf@GCC_4.4.0 1:4.4.0
+ __mips16_floatunsisf@GCC_4.4.0 1:4.4.0
+ __mips16_gedf2@GCC_4.4.0 1:4.4.0
+ __mips16_gesf2@GCC_4.4.0 1:4.4.0
+ __mips16_gtdf2@GCC_4.4.0 1:4.4.0
+ __mips16_gtsf2@GCC_4.4.0 1:4.4.0
+ __mips16_ledf2@GCC_4.4.0 1:4.4.0
+ __mips16_lesf2@GCC_4.4.0 1:4.4.0
+ __mips16_ltdf2@GCC_4.4.0 1:4.4.0
+ __mips16_ltsf2@GCC_4.4.0 1:4.4.0
+ __mips16_muldf3@GCC_4.4.0 1:4.4.0
+ __mips16_mulsf3@GCC_4.4.0 1:4.4.0
+ __mips16_nedf2@GCC_4.4.0 1:4.4.0
+ __mips16_nesf2@GCC_4.4.0 1:4.4.0
+ __mips16_ret_dc@GCC_4.4.0 1:4.4.0
+ __mips16_ret_df@GCC_4.4.0 1:4.4.0
+ __mips16_ret_sc@GCC_4.4.0 1:4.4.0
+ __mips16_ret_sf@GCC_4.4.0 1:4.4.0
+ __mips16_subdf3@GCC_4.4.0 1:4.4.0
+ __mips16_subsf3@GCC_4.4.0 1:4.4.0
+ __mips16_truncdfsf2@GCC_4.4.0 1:4.4.0
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __mulda3@GCC_4.3.0 1:4.3
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldf3@GCC_3.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __muldq3@GCC_4.3.0 1:4.3
+ __mulha3@GCC_4.3.0 1:4.3
+ __mulhq3@GCC_4.3.0 1:4.3
+ __mulqq3@GCC_4.3.0 1:4.3
+ __mulsa3@GCC_4.3.0 1:4.3
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __mulsf3@GCC_3.0 1:4.1.1
+ __mulsq3@GCC_4.3.0 1:4.3
+ __muluda3@GCC_4.3.0 1:4.3
+ __muludq3@GCC_4.3.0 1:4.3
+ __muluha3@GCC_4.3.0 1:4.3
+ __muluhq3@GCC_4.3.0 1:4.3
+ __muluqq3@GCC_4.3.0 1:4.3
+ __mulusa3@GCC_4.3.0 1:4.3
+ __mulusq3@GCC_4.3.0 1:4.3
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __nedf2@GCC_3.0 1:4.1.1
+ __negda2@GCC_4.3.0 1:4.3
+ __negdf2@GCC_3.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negdq2@GCC_4.3.0 1:4.3
+ __negha2@GCC_4.3.0 1:4.3
+ __neghq2@GCC_4.3.0 1:4.3
+ __negqq2@GCC_4.3.0 1:4.3
+ __negsa2@GCC_4.3.0 1:4.3
+ __negsf2@GCC_3.0 1:4.1.1
+ __negsq2@GCC_4.3.0 1:4.3
+ __neguda2@GCC_4.3.0 1:4.3
+ __negudq2@GCC_4.3.0 1:4.3
+ __neguha2@GCC_4.3.0 1:4.3
+ __neguhq2@GCC_4.3.0 1:4.3
+ __neguqq2@GCC_4.3.0 1:4.3
+ __negusa2@GCC_4.3.0 1:4.3
+ __negusq2@GCC_4.3.0 1:4.3
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __nesf2@GCC_3.0 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __satfractdadq@GCC_4.3.0 1:4.3
+ __satfractdaha2@GCC_4.3.0 1:4.3
+ __satfractdahq@GCC_4.3.0 1:4.3
+ __satfractdaqq@GCC_4.3.0 1:4.3
+ __satfractdasa2@GCC_4.3.0 1:4.3
+ __satfractdasq@GCC_4.3.0 1:4.3
+ __satfractdauda@GCC_4.3.0 1:4.3
+ __satfractdaudq@GCC_4.3.0 1:4.3
+ __satfractdauha@GCC_4.3.0 1:4.3
+ __satfractdauhq@GCC_4.3.0 1:4.3
+ __satfractdauqq@GCC_4.3.0 1:4.3
+ __satfractdausa@GCC_4.3.0 1:4.3
+ __satfractdausq@GCC_4.3.0 1:4.3
+ __satfractdfda@GCC_4.3.0 1:4.3
+ __satfractdfdq@GCC_4.3.0 1:4.3
+ __satfractdfha@GCC_4.3.0 1:4.3
+ __satfractdfhq@GCC_4.3.0 1:4.3
+ __satfractdfqq@GCC_4.3.0 1:4.3
+ __satfractdfsa@GCC_4.3.0 1:4.3
+ __satfractdfsq@GCC_4.3.0 1:4.3
+ __satfractdfuda@GCC_4.3.0 1:4.3
+ __satfractdfudq@GCC_4.3.0 1:4.3
+ __satfractdfuha@GCC_4.3.0 1:4.3
+ __satfractdfuhq@GCC_4.3.0 1:4.3
+ __satfractdfuqq@GCC_4.3.0 1:4.3
+ __satfractdfusa@GCC_4.3.0 1:4.3
+ __satfractdfusq@GCC_4.3.0 1:4.3
+ __satfractdida@GCC_4.3.0 1:4.3
+ __satfractdidq@GCC_4.3.0 1:4.3
+ __satfractdiha@GCC_4.3.0 1:4.3
+ __satfractdihq@GCC_4.3.0 1:4.3
+ __satfractdiqq@GCC_4.3.0 1:4.3
+ __satfractdisa@GCC_4.3.0 1:4.3
+ __satfractdisq@GCC_4.3.0 1:4.3
+ __satfractdiuda@GCC_4.3.0 1:4.3
+ __satfractdiudq@GCC_4.3.0 1:4.3
+ __satfractdiuha@GCC_4.3.0 1:4.3
+ __satfractdiuhq@GCC_4.3.0 1:4.3
+ __satfractdiuqq@GCC_4.3.0 1:4.3
+ __satfractdiusa@GCC_4.3.0 1:4.3
+ __satfractdiusq@GCC_4.3.0 1:4.3
+ __satfractdqda@GCC_4.3.0 1:4.3
+ __satfractdqha@GCC_4.3.0 1:4.3
+ __satfractdqhq2@GCC_4.3.0 1:4.3
+ __satfractdqqq2@GCC_4.3.0 1:4.3
+ __satfractdqsa@GCC_4.3.0 1:4.3
+ __satfractdqsq2@GCC_4.3.0 1:4.3
+ __satfractdquda@GCC_4.3.0 1:4.3
+ __satfractdqudq@GCC_4.3.0 1:4.3
+ __satfractdquha@GCC_4.3.0 1:4.3
+ __satfractdquhq@GCC_4.3.0 1:4.3
+ __satfractdquqq@GCC_4.3.0 1:4.3
+ __satfractdqusa@GCC_4.3.0 1:4.3
+ __satfractdqusq@GCC_4.3.0 1:4.3
+ __satfracthada2@GCC_4.3.0 1:4.3
+ __satfracthadq@GCC_4.3.0 1:4.3
+ __satfracthahq@GCC_4.3.0 1:4.3
+ __satfracthaqq@GCC_4.3.0 1:4.3
+ __satfracthasa2@GCC_4.3.0 1:4.3
+ __satfracthasq@GCC_4.3.0 1:4.3
+ __satfracthauda@GCC_4.3.0 1:4.3
+ __satfracthaudq@GCC_4.3.0 1:4.3
+ __satfracthauha@GCC_4.3.0 1:4.3
+ __satfracthauhq@GCC_4.3.0 1:4.3
+ __satfracthauqq@GCC_4.3.0 1:4.3
+ __satfracthausa@GCC_4.3.0 1:4.3
+ __satfracthausq@GCC_4.3.0 1:4.3
+ __satfracthida@GCC_4.3.0 1:4.3
+ __satfracthidq@GCC_4.3.0 1:4.3
+ __satfracthiha@GCC_4.3.0 1:4.3
+ __satfracthihq@GCC_4.3.0 1:4.3
+ __satfracthiqq@GCC_4.3.0 1:4.3
+ __satfracthisa@GCC_4.3.0 1:4.3
+ __satfracthisq@GCC_4.3.0 1:4.3
+ __satfracthiuda@GCC_4.3.0 1:4.3
+ __satfracthiudq@GCC_4.3.0 1:4.3
+ __satfracthiuha@GCC_4.3.0 1:4.3
+ __satfracthiuhq@GCC_4.3.0 1:4.3
+ __satfracthiuqq@GCC_4.3.0 1:4.3
+ __satfracthiusa@GCC_4.3.0 1:4.3
+ __satfracthiusq@GCC_4.3.0 1:4.3
+ __satfracthqda@GCC_4.3.0 1:4.3
+ __satfracthqdq2@GCC_4.3.0 1:4.3
+ __satfracthqha@GCC_4.3.0 1:4.3
+ __satfracthqqq2@GCC_4.3.0 1:4.3
+ __satfracthqsa@GCC_4.3.0 1:4.3
+ __satfracthqsq2@GCC_4.3.0 1:4.3
+ __satfracthquda@GCC_4.3.0 1:4.3
+ __satfracthqudq@GCC_4.3.0 1:4.3
+ __satfracthquha@GCC_4.3.0 1:4.3
+ __satfracthquhq@GCC_4.3.0 1:4.3
+ __satfracthquqq@GCC_4.3.0 1:4.3
+ __satfracthqusa@GCC_4.3.0 1:4.3
+ __satfracthqusq@GCC_4.3.0 1:4.3
+ __satfractqida@GCC_4.3.0 1:4.3
+ __satfractqidq@GCC_4.3.0 1:4.3
+ __satfractqiha@GCC_4.3.0 1:4.3
+ __satfractqihq@GCC_4.3.0 1:4.3
+ __satfractqiqq@GCC_4.3.0 1:4.3
+ __satfractqisa@GCC_4.3.0 1:4.3
+ __satfractqisq@GCC_4.3.0 1:4.3
+ __satfractqiuda@GCC_4.3.0 1:4.3
+ __satfractqiudq@GCC_4.3.0 1:4.3
+ __satfractqiuha@GCC_4.3.0 1:4.3
+ __satfractqiuhq@GCC_4.3.0 1:4.3
+ __satfractqiuqq@GCC_4.3.0 1:4.3
+ __satfractqiusa@GCC_4.3.0 1:4.3
+ __satfractqiusq@GCC_4.3.0 1:4.3
+ __satfractqqda@GCC_4.3.0 1:4.3
+ __satfractqqdq2@GCC_4.3.0 1:4.3
+ __satfractqqha@GCC_4.3.0 1:4.3
+ __satfractqqhq2@GCC_4.3.0 1:4.3
+ __satfractqqsa@GCC_4.3.0 1:4.3
+ __satfractqqsq2@GCC_4.3.0 1:4.3
+ __satfractqquda@GCC_4.3.0 1:4.3
+ __satfractqqudq@GCC_4.3.0 1:4.3
+ __satfractqquha@GCC_4.3.0 1:4.3
+ __satfractqquhq@GCC_4.3.0 1:4.3
+ __satfractqquqq@GCC_4.3.0 1:4.3
+ __satfractqqusa@GCC_4.3.0 1:4.3
+ __satfractqqusq@GCC_4.3.0 1:4.3
+ __satfractsada2@GCC_4.3.0 1:4.3
+ __satfractsadq@GCC_4.3.0 1:4.3
+ __satfractsaha2@GCC_4.3.0 1:4.3
+ __satfractsahq@GCC_4.3.0 1:4.3
+ __satfractsaqq@GCC_4.3.0 1:4.3
+ __satfractsasq@GCC_4.3.0 1:4.3
+ __satfractsauda@GCC_4.3.0 1:4.3
+ __satfractsaudq@GCC_4.3.0 1:4.3
+ __satfractsauha@GCC_4.3.0 1:4.3
+ __satfractsauhq@GCC_4.3.0 1:4.3
+ __satfractsauqq@GCC_4.3.0 1:4.3
+ __satfractsausa@GCC_4.3.0 1:4.3
+ __satfractsausq@GCC_4.3.0 1:4.3
+ __satfractsfda@GCC_4.3.0 1:4.3
+ __satfractsfdq@GCC_4.3.0 1:4.3
+ __satfractsfha@GCC_4.3.0 1:4.3
+ __satfractsfhq@GCC_4.3.0 1:4.3
+ __satfractsfqq@GCC_4.3.0 1:4.3
+ __satfractsfsa@GCC_4.3.0 1:4.3
+ __satfractsfsq@GCC_4.3.0 1:4.3
+ __satfractsfuda@GCC_4.3.0 1:4.3
+ __satfractsfudq@GCC_4.3.0 1:4.3
+ __satfractsfuha@GCC_4.3.0 1:4.3
+ __satfractsfuhq@GCC_4.3.0 1:4.3
+ __satfractsfuqq@GCC_4.3.0 1:4.3
+ __satfractsfusa@GCC_4.3.0 1:4.3
+ __satfractsfusq@GCC_4.3.0 1:4.3
+ __satfractsida@GCC_4.3.0 1:4.3
+ __satfractsidq@GCC_4.3.0 1:4.3
+ __satfractsiha@GCC_4.3.0 1:4.3
+ __satfractsihq@GCC_4.3.0 1:4.3
+ __satfractsiqq@GCC_4.3.0 1:4.3
+ __satfractsisa@GCC_4.3.0 1:4.3
+ __satfractsisq@GCC_4.3.0 1:4.3
+ __satfractsiuda@GCC_4.3.0 1:4.3
+ __satfractsiudq@GCC_4.3.0 1:4.3
+ __satfractsiuha@GCC_4.3.0 1:4.3
+ __satfractsiuhq@GCC_4.3.0 1:4.3
+ __satfractsiuqq@GCC_4.3.0 1:4.3
+ __satfractsiusa@GCC_4.3.0 1:4.3
+ __satfractsiusq@GCC_4.3.0 1:4.3
+ __satfractsqda@GCC_4.3.0 1:4.3
+ __satfractsqdq2@GCC_4.3.0 1:4.3
+ __satfractsqha@GCC_4.3.0 1:4.3
+ __satfractsqhq2@GCC_4.3.0 1:4.3
+ __satfractsqqq2@GCC_4.3.0 1:4.3
+ __satfractsqsa@GCC_4.3.0 1:4.3
+ __satfractsquda@GCC_4.3.0 1:4.3
+ __satfractsqudq@GCC_4.3.0 1:4.3
+ __satfractsquha@GCC_4.3.0 1:4.3
+ __satfractsquhq@GCC_4.3.0 1:4.3
+ __satfractsquqq@GCC_4.3.0 1:4.3
+ __satfractsqusa@GCC_4.3.0 1:4.3
+ __satfractsqusq@GCC_4.3.0 1:4.3
+ __satfractudada@GCC_4.3.0 1:4.3
+ __satfractudadq@GCC_4.3.0 1:4.3
+ __satfractudaha@GCC_4.3.0 1:4.3
+ __satfractudahq@GCC_4.3.0 1:4.3
+ __satfractudaqq@GCC_4.3.0 1:4.3
+ __satfractudasa@GCC_4.3.0 1:4.3
+ __satfractudasq@GCC_4.3.0 1:4.3
+ __satfractudaudq@GCC_4.3.0 1:4.3
+ __satfractudauha2@GCC_4.3.0 1:4.3
+ __satfractudauhq@GCC_4.3.0 1:4.3
+ __satfractudauqq@GCC_4.3.0 1:4.3
+ __satfractudausa2@GCC_4.3.0 1:4.3
+ __satfractudausq@GCC_4.3.0 1:4.3
+ __satfractudqda@GCC_4.3.0 1:4.3
+ __satfractudqdq@GCC_4.3.0 1:4.3
+ __satfractudqha@GCC_4.3.0 1:4.3
+ __satfractudqhq@GCC_4.3.0 1:4.3
+ __satfractudqqq@GCC_4.3.0 1:4.3
+ __satfractudqsa@GCC_4.3.0 1:4.3
+ __satfractudqsq@GCC_4.3.0 1:4.3
+ __satfractudquda@GCC_4.3.0 1:4.3
+ __satfractudquha@GCC_4.3.0 1:4.3
+ __satfractudquhq2@GCC_4.3.0 1:4.3
+ __satfractudquqq2@GCC_4.3.0 1:4.3
+ __satfractudqusa@GCC_4.3.0 1:4.3
+ __satfractudqusq2@GCC_4.3.0 1:4.3
+ __satfractuhada@GCC_4.3.0 1:4.3
+ __satfractuhadq@GCC_4.3.0 1:4.3
+ __satfractuhaha@GCC_4.3.0 1:4.3
+ __satfractuhahq@GCC_4.3.0 1:4.3
+ __satfractuhaqq@GCC_4.3.0 1:4.3
+ __satfractuhasa@GCC_4.3.0 1:4.3
+ __satfractuhasq@GCC_4.3.0 1:4.3
+ __satfractuhauda2@GCC_4.3.0 1:4.3
+ __satfractuhaudq@GCC_4.3.0 1:4.3
+ __satfractuhauhq@GCC_4.3.0 1:4.3
+ __satfractuhauqq@GCC_4.3.0 1:4.3
+ __satfractuhausa2@GCC_4.3.0 1:4.3
+ __satfractuhausq@GCC_4.3.0 1:4.3
+ __satfractuhqda@GCC_4.3.0 1:4.3
+ __satfractuhqdq@GCC_4.3.0 1:4.3
+ __satfractuhqha@GCC_4.3.0 1:4.3
+ __satfractuhqhq@GCC_4.3.0 1:4.3
+ __satfractuhqqq@GCC_4.3.0 1:4.3
+ __satfractuhqsa@GCC_4.3.0 1:4.3
+ __satfractuhqsq@GCC_4.3.0 1:4.3
+ __satfractuhquda@GCC_4.3.0 1:4.3
+ __satfractuhqudq2@GCC_4.3.0 1:4.3
+ __satfractuhquha@GCC_4.3.0 1:4.3
+ __satfractuhquqq2@GCC_4.3.0 1:4.3
+ __satfractuhqusa@GCC_4.3.0 1:4.3
+ __satfractuhqusq2@GCC_4.3.0 1:4.3
+ __satfractunsdida@GCC_4.3.0 1:4.3
+ __satfractunsdidq@GCC_4.3.0 1:4.3
+ __satfractunsdiha@GCC_4.3.0 1:4.3
+ __satfractunsdihq@GCC_4.3.0 1:4.3
+ __satfractunsdiqq@GCC_4.3.0 1:4.3
+ __satfractunsdisa@GCC_4.3.0 1:4.3
+ __satfractunsdisq@GCC_4.3.0 1:4.3
+ __satfractunsdiuda@GCC_4.3.0 1:4.3
+ __satfractunsdiudq@GCC_4.3.0 1:4.3
+ __satfractunsdiuha@GCC_4.3.0 1:4.3
+ __satfractunsdiuhq@GCC_4.3.0 1:4.3
+ __satfractunsdiuqq@GCC_4.3.0 1:4.3
+ __satfractunsdiusa@GCC_4.3.0 1:4.3
+ __satfractunsdiusq@GCC_4.3.0 1:4.3
+ __satfractunshida@GCC_4.3.0 1:4.3
+ __satfractunshidq@GCC_4.3.0 1:4.3
+ __satfractunshiha@GCC_4.3.0 1:4.3
+ __satfractunshihq@GCC_4.3.0 1:4.3
+ __satfractunshiqq@GCC_4.3.0 1:4.3
+ __satfractunshisa@GCC_4.3.0 1:4.3
+ __satfractunshisq@GCC_4.3.0 1:4.3
+ __satfractunshiuda@GCC_4.3.0 1:4.3
+ __satfractunshiudq@GCC_4.3.0 1:4.3
+ __satfractunshiuha@GCC_4.3.0 1:4.3
+ __satfractunshiuhq@GCC_4.3.0 1:4.3
+ __satfractunshiuqq@GCC_4.3.0 1:4.3
+ __satfractunshiusa@GCC_4.3.0 1:4.3
+ __satfractunshiusq@GCC_4.3.0 1:4.3
+ __satfractunsqida@GCC_4.3.0 1:4.3
+ __satfractunsqidq@GCC_4.3.0 1:4.3
+ __satfractunsqiha@GCC_4.3.0 1:4.3
+ __satfractunsqihq@GCC_4.3.0 1:4.3
+ __satfractunsqiqq@GCC_4.3.0 1:4.3
+ __satfractunsqisa@GCC_4.3.0 1:4.3
+ __satfractunsqisq@GCC_4.3.0 1:4.3
+ __satfractunsqiuda@GCC_4.3.0 1:4.3
+ __satfractunsqiudq@GCC_4.3.0 1:4.3
+ __satfractunsqiuha@GCC_4.3.0 1:4.3
+ __satfractunsqiuhq@GCC_4.3.0 1:4.3
+ __satfractunsqiuqq@GCC_4.3.0 1:4.3
+ __satfractunsqiusa@GCC_4.3.0 1:4.3
+ __satfractunsqiusq@GCC_4.3.0 1:4.3
+ __satfractunssida@GCC_4.3.0 1:4.3
+ __satfractunssidq@GCC_4.3.0 1:4.3
+ __satfractunssiha@GCC_4.3.0 1:4.3
+ __satfractunssihq@GCC_4.3.0 1:4.3
+ __satfractunssiqq@GCC_4.3.0 1:4.3
+ __satfractunssisa@GCC_4.3.0 1:4.3
+ __satfractunssisq@GCC_4.3.0 1:4.3
+ __satfractunssiuda@GCC_4.3.0 1:4.3
+ __satfractunssiudq@GCC_4.3.0 1:4.3
+ __satfractunssiuha@GCC_4.3.0 1:4.3
+ __satfractunssiuhq@GCC_4.3.0 1:4.3
+ __satfractunssiuqq@GCC_4.3.0 1:4.3
+ __satfractunssiusa@GCC_4.3.0 1:4.3
+ __satfractunssiusq@GCC_4.3.0 1:4.3
+ __satfractuqqda@GCC_4.3.0 1:4.3
+ __satfractuqqdq@GCC_4.3.0 1:4.3
+ __satfractuqqha@GCC_4.3.0 1:4.3
+ __satfractuqqhq@GCC_4.3.0 1:4.3
+ __satfractuqqqq@GCC_4.3.0 1:4.3
+ __satfractuqqsa@GCC_4.3.0 1:4.3
+ __satfractuqqsq@GCC_4.3.0 1:4.3
+ __satfractuqquda@GCC_4.3.0 1:4.3
+ __satfractuqqudq2@GCC_4.3.0 1:4.3
+ __satfractuqquha@GCC_4.3.0 1:4.3
+ __satfractuqquhq2@GCC_4.3.0 1:4.3
+ __satfractuqqusa@GCC_4.3.0 1:4.3
+ __satfractuqqusq2@GCC_4.3.0 1:4.3
+ __satfractusada@GCC_4.3.0 1:4.3
+ __satfractusadq@GCC_4.3.0 1:4.3
+ __satfractusaha@GCC_4.3.0 1:4.3
+ __satfractusahq@GCC_4.3.0 1:4.3
+ __satfractusaqq@GCC_4.3.0 1:4.3
+ __satfractusasa@GCC_4.3.0 1:4.3
+ __satfractusasq@GCC_4.3.0 1:4.3
+ __satfractusauda2@GCC_4.3.0 1:4.3
+ __satfractusaudq@GCC_4.3.0 1:4.3
+ __satfractusauha2@GCC_4.3.0 1:4.3
+ __satfractusauhq@GCC_4.3.0 1:4.3
+ __satfractusauqq@GCC_4.3.0 1:4.3
+ __satfractusausq@GCC_4.3.0 1:4.3
+ __satfractusqda@GCC_4.3.0 1:4.3
+ __satfractusqdq@GCC_4.3.0 1:4.3
+ __satfractusqha@GCC_4.3.0 1:4.3
+ __satfractusqhq@GCC_4.3.0 1:4.3
+ __satfractusqqq@GCC_4.3.0 1:4.3
+ __satfractusqsa@GCC_4.3.0 1:4.3
+ __satfractusqsq@GCC_4.3.0 1:4.3
+ __satfractusquda@GCC_4.3.0 1:4.3
+ __satfractusqudq2@GCC_4.3.0 1:4.3
+ __satfractusquha@GCC_4.3.0 1:4.3
+ __satfractusquhq2@GCC_4.3.0 1:4.3
+ __satfractusquqq2@GCC_4.3.0 1:4.3
+ __satfractusqusa@GCC_4.3.0 1:4.3
+ __ssaddda3@GCC_4.3.0 1:4.3
+ __ssadddq3@GCC_4.3.0 1:4.3
+ __ssaddha3@GCC_4.3.0 1:4.3
+ __ssaddhq3@GCC_4.3.0 1:4.3
+ __ssaddqq3@GCC_4.3.0 1:4.3
+ __ssaddsa3@GCC_4.3.0 1:4.3
+ __ssaddsq3@GCC_4.3.0 1:4.3
+ __ssashlda3@GCC_4.3.0 1:4.3
+ __ssashldq3@GCC_4.3.0 1:4.3
+ __ssashlha3@GCC_4.3.0 1:4.3
+ __ssashlhq3@GCC_4.3.0 1:4.3
+ __ssashlqq3@GCC_4.3.0 1:4.3
+ __ssashlsa3@GCC_4.3.0 1:4.3
+ __ssashlsq3@GCC_4.3.0 1:4.3
+ __ssdivda3@GCC_4.3.0 1:4.3
+ __ssdivdq3@GCC_4.3.0 1:4.3
+ __ssdivha3@GCC_4.3.0 1:4.3
+ __ssdivhq3@GCC_4.3.0 1:4.3
+ __ssdivqq3@GCC_4.3.0 1:4.3
+ __ssdivsa3@GCC_4.3.0 1:4.3
+ __ssdivsq3@GCC_4.3.0 1:4.3
+ __ssmulda3@GCC_4.3.0 1:4.3
+ __ssmuldq3@GCC_4.3.0 1:4.3
+ __ssmulha3@GCC_4.3.0 1:4.3
+ __ssmulhq3@GCC_4.3.0 1:4.3
+ __ssmulqq3@GCC_4.3.0 1:4.3
+ __ssmulsa3@GCC_4.3.0 1:4.3
+ __ssmulsq3@GCC_4.3.0 1:4.3
+ __ssnegda2@GCC_4.3.0 1:4.3
+ __ssnegdq2@GCC_4.3.0 1:4.3
+ __ssnegha2@GCC_4.3.0 1:4.3
+ __ssneghq2@GCC_4.3.0 1:4.3
+ __ssnegqq2@GCC_4.3.0 1:4.3
+ __ssnegsa2@GCC_4.3.0 1:4.3
+ __ssnegsq2@GCC_4.3.0 1:4.3
+ __sssubda3@GCC_4.3.0 1:4.3
+ __sssubdq3@GCC_4.3.0 1:4.3
+ __sssubha3@GCC_4.3.0 1:4.3
+ __sssubhq3@GCC_4.3.0 1:4.3
+ __sssubqq3@GCC_4.3.0 1:4.3
+ __sssubsa3@GCC_4.3.0 1:4.3
+ __sssubsq3@GCC_4.3.0 1:4.3
+ __subda3@GCC_4.3.0 1:4.3
+ __subdf3@GCC_3.0 1:4.1.1
+ __subdq3@GCC_4.3.0 1:4.3
+ __subha3@GCC_4.3.0 1:4.3
+ __subhq3@GCC_4.3.0 1:4.3
+ __subqq3@GCC_4.3.0 1:4.3
+ __subsa3@GCC_4.3.0 1:4.3
+ __subsf3@GCC_3.0 1:4.1.1
+ __subsq3@GCC_4.3.0 1:4.3
+ __subuda3@GCC_4.3.0 1:4.3
+ __subudq3@GCC_4.3.0 1:4.3
+ __subuha3@GCC_4.3.0 1:4.3
+ __subuhq3@GCC_4.3.0 1:4.3
+ __subuqq3@GCC_4.3.0 1:4.3
+ __subusa3@GCC_4.3.0 1:4.3
+ __subusq3@GCC_4.3.0 1:4.3
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __sync_add_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_add_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_add_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_and_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_and_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_and_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_bool_compare_and_swap_1@GCC_4.4.0 1:4.4.0
+ __sync_bool_compare_and_swap_2@GCC_4.4.0 1:4.4.0
+ __sync_bool_compare_and_swap_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_add_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_add_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_add_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_and_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_and_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_and_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_nand_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_nand_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_nand_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_or_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_or_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_or_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_sub_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_sub_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_sub_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_xor_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_xor_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_xor_4@GCC_4.4.0 1:4.4.0
+ __sync_lock_test_and_set_1@GCC_4.4.0 1:4.4.0
+ __sync_lock_test_and_set_2@GCC_4.4.0 1:4.4.0
+ __sync_lock_test_and_set_4@GCC_4.4.0 1:4.4.0
+ __sync_nand_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_nand_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_nand_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_or_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_or_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_or_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_sub_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_sub_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_sub_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_synchronize@GCC_4.4.0 1:4.4.0
+ __sync_val_compare_and_swap_1@GCC_4.4.0 1:4.4.0
+ __sync_val_compare_and_swap_2@GCC_4.4.0 1:4.4.0
+ __sync_val_compare_and_swap_4@GCC_4.4.0 1:4.4.0
+ __sync_xor_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_xor_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_xor_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __truncdfsf2@GCC_3.0 1:4.1.1
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __udivuda3@GCC_4.3.0 1:4.3
+ __udivudq3@GCC_4.3.0 1:4.3
+ __udivuha3@GCC_4.3.0 1:4.3
+ __udivuhq3@GCC_4.3.0 1:4.3
+ __udivuqq3@GCC_4.3.0 1:4.3
+ __udivusa3@GCC_4.3.0 1:4.3
+ __udivusq3@GCC_4.3.0 1:4.3
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unorddf2@GCC_3.3.4 1:4.1.1
+ __unordsf2@GCC_3.3.4 1:4.1.1
+ __usadduda3@GCC_4.3.0 1:4.3
+ __usaddudq3@GCC_4.3.0 1:4.3
+ __usadduha3@GCC_4.3.0 1:4.3
+ __usadduhq3@GCC_4.3.0 1:4.3
+ __usadduqq3@GCC_4.3.0 1:4.3
+ __usaddusa3@GCC_4.3.0 1:4.3
+ __usaddusq3@GCC_4.3.0 1:4.3
+ __usashluda3@GCC_4.3.0 1:4.3
+ __usashludq3@GCC_4.3.0 1:4.3
+ __usashluha3@GCC_4.3.0 1:4.3
+ __usashluhq3@GCC_4.3.0 1:4.3
+ __usashluqq3@GCC_4.3.0 1:4.3
+ __usashlusa3@GCC_4.3.0 1:4.3
+ __usashlusq3@GCC_4.3.0 1:4.3
+ __usdivuda3@GCC_4.3.0 1:4.3
+ __usdivudq3@GCC_4.3.0 1:4.3
+ __usdivuha3@GCC_4.3.0 1:4.3
+ __usdivuhq3@GCC_4.3.0 1:4.3
+ __usdivuqq3@GCC_4.3.0 1:4.3
+ __usdivusa3@GCC_4.3.0 1:4.3
+ __usdivusq3@GCC_4.3.0 1:4.3
+ __usmuluda3@GCC_4.3.0 1:4.3
+ __usmuludq3@GCC_4.3.0 1:4.3
+ __usmuluha3@GCC_4.3.0 1:4.3
+ __usmuluhq3@GCC_4.3.0 1:4.3
+ __usmuluqq3@GCC_4.3.0 1:4.3
+ __usmulusa3@GCC_4.3.0 1:4.3
+ __usmulusq3@GCC_4.3.0 1:4.3
+ __usneguda2@GCC_4.3.0 1:4.3
+ __usnegudq2@GCC_4.3.0 1:4.3
+ __usneguha2@GCC_4.3.0 1:4.3
+ __usneguhq2@GCC_4.3.0 1:4.3
+ __usneguqq2@GCC_4.3.0 1:4.3
+ __usnegusa2@GCC_4.3.0 1:4.3
+ __usnegusq2@GCC_4.3.0 1:4.3
+ __ussubuda3@GCC_4.3.0 1:4.3
+ __ussubudq3@GCC_4.3.0 1:4.3
+ __ussubuha3@GCC_4.3.0 1:4.3
+ __ussubuhq3@GCC_4.3.0 1:4.3
+ __ussubuqq3@GCC_4.3.0 1:4.3
+ __ussubusa3@GCC_4.3.0 1:4.3
+ __ussubusq3@GCC_4.3.0 1:4.3
diff --git a/debian/libgcc1.symbols.mipsel b/debian/libgcc1.symbols.mipsel
new file mode 100644
index 0000000..ca9f1df
--- /dev/null
+++ b/debian/libgcc1.symbols.mipsel
@@ -0,0 +1,1219 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3.4@GCC_3.3.4 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addda3@GCC_4.3.0 1:4.3
+ __adddf3@GCC_3.0 1:4.1.1
+ __adddq3@GCC_4.3.0 1:4.3
+ __addha3@GCC_4.3.0 1:4.3
+ __addhq3@GCC_4.3.0 1:4.3
+ __addqq3@GCC_4.3.0 1:4.3
+ __addsa3@GCC_4.3.0 1:4.3
+ __addsf3@GCC_3.0 1:4.1.1
+ __addsq3@GCC_4.3.0 1:4.3
+ __adduda3@GCC_4.3.0 1:4.3
+ __addudq3@GCC_4.3.0 1:4.3
+ __adduha3@GCC_4.3.0 1:4.3
+ __adduhq3@GCC_4.3.0 1:4.3
+ __adduqq3@GCC_4.3.0 1:4.3
+ __addusa3@GCC_4.3.0 1:4.3
+ __addusq3@GCC_4.3.0 1:4.3
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashlda3@GCC_4.3.0 1:4.3
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashldq3@GCC_4.3.0 1:4.3
+ __ashlha3@GCC_4.3.0 1:4.3
+ __ashlhq3@GCC_4.3.0 1:4.3
+ __ashlqq3@GCC_4.3.0 1:4.3
+ __ashlsa3@GCC_4.3.0 1:4.3
+ __ashlsq3@GCC_4.3.0 1:4.3
+ __ashluda3@GCC_4.3.0 1:4.3
+ __ashludq3@GCC_4.3.0 1:4.3
+ __ashluha3@GCC_4.3.0 1:4.3
+ __ashluhq3@GCC_4.3.0 1:4.3
+ __ashluqq3@GCC_4.3.0 1:4.3
+ __ashlusa3@GCC_4.3.0 1:4.3
+ __ashlusq3@GCC_4.3.0 1:4.3
+ __ashrda3@GCC_4.3.0 1:4.3
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __ashrdq3@GCC_4.3.0 1:4.3
+ __ashrha3@GCC_4.3.0 1:4.3
+ __ashrhq3@GCC_4.3.0 1:4.3
+ __ashrqq3@GCC_4.3.0 1:4.3
+ __ashrsa3@GCC_4.3.0 1:4.3
+ __ashrsq3@GCC_4.3.0 1:4.3
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpda2@GCC_4.3.0 1:4.3
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __cmpdq2@GCC_4.3.0 1:4.3
+ __cmpha2@GCC_4.3.0 1:4.3
+ __cmphq2@GCC_4.3.0 1:4.3
+ __cmpqq2@GCC_4.3.0 1:4.3
+ __cmpsa2@GCC_4.3.0 1:4.3
+ __cmpsq2@GCC_4.3.0 1:4.3
+ __cmpuda2@GCC_4.3.0 1:4.3
+ __cmpudq2@GCC_4.3.0 1:4.3
+ __cmpuha2@GCC_4.3.0 1:4.3
+ __cmpuhq2@GCC_4.3.0 1:4.3
+ __cmpuqq2@GCC_4.3.0 1:4.3
+ __cmpusa2@GCC_4.3.0 1:4.3
+ __cmpusq2@GCC_4.3.0 1:4.3
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divda3@GCC_4.3.0 1:4.3
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdf3@GCC_3.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divdq3@GCC_4.3.0 1:4.3
+ __divha3@GCC_4.3.0 1:4.3
+ __divhq3@GCC_4.3.0 1:4.3
+ __divqq3@GCC_4.3.0 1:4.3
+ __divsa3@GCC_4.3.0 1:4.3
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divsf3@GCC_3.0 1:4.1.1
+ __divsq3@GCC_4.3.0 1:4.3
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqdf2@GCC_3.0 1:4.1.1
+ __eqsf2@GCC_3.0 1:4.1.1
+ __extendsfdf2@GCC_3.0 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixdfsi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixsfsi@GCC_3.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatsidf@GCC_3.0 1:4.1.1
+ __floatsisf@GCC_3.0 1:4.1.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunsidf@GCC_4.2.0 1:4.2.1
+ __floatunsisf@GCC_4.2.0 1:4.2.1
+ __fractdadf@GCC_4.3.0 1:4.3
+ __fractdadi@GCC_4.3.0 1:4.3
+ __fractdadq@GCC_4.3.0 1:4.3
+ __fractdaha2@GCC_4.3.0 1:4.3
+ __fractdahi@GCC_4.3.0 1:4.3
+ __fractdahq@GCC_4.3.0 1:4.3
+ __fractdaqi@GCC_4.3.0 1:4.3
+ __fractdaqq@GCC_4.3.0 1:4.3
+ __fractdasa2@GCC_4.3.0 1:4.3
+ __fractdasf@GCC_4.3.0 1:4.3
+ __fractdasi@GCC_4.3.0 1:4.3
+ __fractdasq@GCC_4.3.0 1:4.3
+ __fractdauda@GCC_4.3.0 1:4.3
+ __fractdaudq@GCC_4.3.0 1:4.3
+ __fractdauha@GCC_4.3.0 1:4.3
+ __fractdauhq@GCC_4.3.0 1:4.3
+ __fractdauqq@GCC_4.3.0 1:4.3
+ __fractdausa@GCC_4.3.0 1:4.3
+ __fractdausq@GCC_4.3.0 1:4.3
+ __fractdfda@GCC_4.3.0 1:4.3
+ __fractdfdq@GCC_4.3.0 1:4.3
+ __fractdfha@GCC_4.3.0 1:4.3
+ __fractdfhq@GCC_4.3.0 1:4.3
+ __fractdfqq@GCC_4.3.0 1:4.3
+ __fractdfsa@GCC_4.3.0 1:4.3
+ __fractdfsq@GCC_4.3.0 1:4.3
+ __fractdfuda@GCC_4.3.0 1:4.3
+ __fractdfudq@GCC_4.3.0 1:4.3
+ __fractdfuha@GCC_4.3.0 1:4.3
+ __fractdfuhq@GCC_4.3.0 1:4.3
+ __fractdfuqq@GCC_4.3.0 1:4.3
+ __fractdfusa@GCC_4.3.0 1:4.3
+ __fractdfusq@GCC_4.3.0 1:4.3
+ __fractdida@GCC_4.3.0 1:4.3
+ __fractdidq@GCC_4.3.0 1:4.3
+ __fractdiha@GCC_4.3.0 1:4.3
+ __fractdihq@GCC_4.3.0 1:4.3
+ __fractdiqq@GCC_4.3.0 1:4.3
+ __fractdisa@GCC_4.3.0 1:4.3
+ __fractdisq@GCC_4.3.0 1:4.3
+ __fractdiuda@GCC_4.3.0 1:4.3
+ __fractdiudq@GCC_4.3.0 1:4.3
+ __fractdiuha@GCC_4.3.0 1:4.3
+ __fractdiuhq@GCC_4.3.0 1:4.3
+ __fractdiuqq@GCC_4.3.0 1:4.3
+ __fractdiusa@GCC_4.3.0 1:4.3
+ __fractdiusq@GCC_4.3.0 1:4.3
+ __fractdqda@GCC_4.3.0 1:4.3
+ __fractdqdf@GCC_4.3.0 1:4.3
+ __fractdqdi@GCC_4.3.0 1:4.3
+ __fractdqha@GCC_4.3.0 1:4.3
+ __fractdqhi@GCC_4.3.0 1:4.3
+ __fractdqhq2@GCC_4.3.0 1:4.3
+ __fractdqqi@GCC_4.3.0 1:4.3
+ __fractdqqq2@GCC_4.3.0 1:4.3
+ __fractdqsa@GCC_4.3.0 1:4.3
+ __fractdqsf@GCC_4.3.0 1:4.3
+ __fractdqsi@GCC_4.3.0 1:4.3
+ __fractdqsq2@GCC_4.3.0 1:4.3
+ __fractdquda@GCC_4.3.0 1:4.3
+ __fractdqudq@GCC_4.3.0 1:4.3
+ __fractdquha@GCC_4.3.0 1:4.3
+ __fractdquhq@GCC_4.3.0 1:4.3
+ __fractdquqq@GCC_4.3.0 1:4.3
+ __fractdqusa@GCC_4.3.0 1:4.3
+ __fractdqusq@GCC_4.3.0 1:4.3
+ __fracthada2@GCC_4.3.0 1:4.3
+ __fracthadf@GCC_4.3.0 1:4.3
+ __fracthadi@GCC_4.3.0 1:4.3
+ __fracthadq@GCC_4.3.0 1:4.3
+ __fracthahi@GCC_4.3.0 1:4.3
+ __fracthahq@GCC_4.3.0 1:4.3
+ __fracthaqi@GCC_4.3.0 1:4.3
+ __fracthaqq@GCC_4.3.0 1:4.3
+ __fracthasa2@GCC_4.3.0 1:4.3
+ __fracthasf@GCC_4.3.0 1:4.3
+ __fracthasi@GCC_4.3.0 1:4.3
+ __fracthasq@GCC_4.3.0 1:4.3
+ __fracthauda@GCC_4.3.0 1:4.3
+ __fracthaudq@GCC_4.3.0 1:4.3
+ __fracthauha@GCC_4.3.0 1:4.3
+ __fracthauhq@GCC_4.3.0 1:4.3
+ __fracthauqq@GCC_4.3.0 1:4.3
+ __fracthausa@GCC_4.3.0 1:4.3
+ __fracthausq@GCC_4.3.0 1:4.3
+ __fracthida@GCC_4.3.0 1:4.3
+ __fracthidq@GCC_4.3.0 1:4.3
+ __fracthiha@GCC_4.3.0 1:4.3
+ __fracthihq@GCC_4.3.0 1:4.3
+ __fracthiqq@GCC_4.3.0 1:4.3
+ __fracthisa@GCC_4.3.0 1:4.3
+ __fracthisq@GCC_4.3.0 1:4.3
+ __fracthiuda@GCC_4.3.0 1:4.3
+ __fracthiudq@GCC_4.3.0 1:4.3
+ __fracthiuha@GCC_4.3.0 1:4.3
+ __fracthiuhq@GCC_4.3.0 1:4.3
+ __fracthiuqq@GCC_4.3.0 1:4.3
+ __fracthiusa@GCC_4.3.0 1:4.3
+ __fracthiusq@GCC_4.3.0 1:4.3
+ __fracthqda@GCC_4.3.0 1:4.3
+ __fracthqdf@GCC_4.3.0 1:4.3
+ __fracthqdi@GCC_4.3.0 1:4.3
+ __fracthqdq2@GCC_4.3.0 1:4.3
+ __fracthqha@GCC_4.3.0 1:4.3
+ __fracthqhi@GCC_4.3.0 1:4.3
+ __fracthqqi@GCC_4.3.0 1:4.3
+ __fracthqqq2@GCC_4.3.0 1:4.3
+ __fracthqsa@GCC_4.3.0 1:4.3
+ __fracthqsf@GCC_4.3.0 1:4.3
+ __fracthqsi@GCC_4.3.0 1:4.3
+ __fracthqsq2@GCC_4.3.0 1:4.3
+ __fracthquda@GCC_4.3.0 1:4.3
+ __fracthqudq@GCC_4.3.0 1:4.3
+ __fracthquha@GCC_4.3.0 1:4.3
+ __fracthquhq@GCC_4.3.0 1:4.3
+ __fracthquqq@GCC_4.3.0 1:4.3
+ __fracthqusa@GCC_4.3.0 1:4.3
+ __fracthqusq@GCC_4.3.0 1:4.3
+ __fractqida@GCC_4.3.0 1:4.3
+ __fractqidq@GCC_4.3.0 1:4.3
+ __fractqiha@GCC_4.3.0 1:4.3
+ __fractqihq@GCC_4.3.0 1:4.3
+ __fractqiqq@GCC_4.3.0 1:4.3
+ __fractqisa@GCC_4.3.0 1:4.3
+ __fractqisq@GCC_4.3.0 1:4.3
+ __fractqiuda@GCC_4.3.0 1:4.3
+ __fractqiudq@GCC_4.3.0 1:4.3
+ __fractqiuha@GCC_4.3.0 1:4.3
+ __fractqiuhq@GCC_4.3.0 1:4.3
+ __fractqiuqq@GCC_4.3.0 1:4.3
+ __fractqiusa@GCC_4.3.0 1:4.3
+ __fractqiusq@GCC_4.3.0 1:4.3
+ __fractqqda@GCC_4.3.0 1:4.3
+ __fractqqdf@GCC_4.3.0 1:4.3
+ __fractqqdi@GCC_4.3.0 1:4.3
+ __fractqqdq2@GCC_4.3.0 1:4.3
+ __fractqqha@GCC_4.3.0 1:4.3
+ __fractqqhi@GCC_4.3.0 1:4.3
+ __fractqqhq2@GCC_4.3.0 1:4.3
+ __fractqqqi@GCC_4.3.0 1:4.3
+ __fractqqsa@GCC_4.3.0 1:4.3
+ __fractqqsf@GCC_4.3.0 1:4.3
+ __fractqqsi@GCC_4.3.0 1:4.3
+ __fractqqsq2@GCC_4.3.0 1:4.3
+ __fractqquda@GCC_4.3.0 1:4.3
+ __fractqqudq@GCC_4.3.0 1:4.3
+ __fractqquha@GCC_4.3.0 1:4.3
+ __fractqquhq@GCC_4.3.0 1:4.3
+ __fractqquqq@GCC_4.3.0 1:4.3
+ __fractqqusa@GCC_4.3.0 1:4.3
+ __fractqqusq@GCC_4.3.0 1:4.3
+ __fractsada2@GCC_4.3.0 1:4.3
+ __fractsadf@GCC_4.3.0 1:4.3
+ __fractsadi@GCC_4.3.0 1:4.3
+ __fractsadq@GCC_4.3.0 1:4.3
+ __fractsaha2@GCC_4.3.0 1:4.3
+ __fractsahi@GCC_4.3.0 1:4.3
+ __fractsahq@GCC_4.3.0 1:4.3
+ __fractsaqi@GCC_4.3.0 1:4.3
+ __fractsaqq@GCC_4.3.0 1:4.3
+ __fractsasf@GCC_4.3.0 1:4.3
+ __fractsasi@GCC_4.3.0 1:4.3
+ __fractsasq@GCC_4.3.0 1:4.3
+ __fractsauda@GCC_4.3.0 1:4.3
+ __fractsaudq@GCC_4.3.0 1:4.3
+ __fractsauha@GCC_4.3.0 1:4.3
+ __fractsauhq@GCC_4.3.0 1:4.3
+ __fractsauqq@GCC_4.3.0 1:4.3
+ __fractsausa@GCC_4.3.0 1:4.3
+ __fractsausq@GCC_4.3.0 1:4.3
+ __fractsfda@GCC_4.3.0 1:4.3
+ __fractsfdq@GCC_4.3.0 1:4.3
+ __fractsfha@GCC_4.3.0 1:4.3
+ __fractsfhq@GCC_4.3.0 1:4.3
+ __fractsfqq@GCC_4.3.0 1:4.3
+ __fractsfsa@GCC_4.3.0 1:4.3
+ __fractsfsq@GCC_4.3.0 1:4.3
+ __fractsfuda@GCC_4.3.0 1:4.3
+ __fractsfudq@GCC_4.3.0 1:4.3
+ __fractsfuha@GCC_4.3.0 1:4.3
+ __fractsfuhq@GCC_4.3.0 1:4.3
+ __fractsfuqq@GCC_4.3.0 1:4.3
+ __fractsfusa@GCC_4.3.0 1:4.3
+ __fractsfusq@GCC_4.3.0 1:4.3
+ __fractsida@GCC_4.3.0 1:4.3
+ __fractsidq@GCC_4.3.0 1:4.3
+ __fractsiha@GCC_4.3.0 1:4.3
+ __fractsihq@GCC_4.3.0 1:4.3
+ __fractsiqq@GCC_4.3.0 1:4.3
+ __fractsisa@GCC_4.3.0 1:4.3
+ __fractsisq@GCC_4.3.0 1:4.3
+ __fractsiuda@GCC_4.3.0 1:4.3
+ __fractsiudq@GCC_4.3.0 1:4.3
+ __fractsiuha@GCC_4.3.0 1:4.3
+ __fractsiuhq@GCC_4.3.0 1:4.3
+ __fractsiuqq@GCC_4.3.0 1:4.3
+ __fractsiusa@GCC_4.3.0 1:4.3
+ __fractsiusq@GCC_4.3.0 1:4.3
+ __fractsqda@GCC_4.3.0 1:4.3
+ __fractsqdf@GCC_4.3.0 1:4.3
+ __fractsqdi@GCC_4.3.0 1:4.3
+ __fractsqdq2@GCC_4.3.0 1:4.3
+ __fractsqha@GCC_4.3.0 1:4.3
+ __fractsqhi@GCC_4.3.0 1:4.3
+ __fractsqhq2@GCC_4.3.0 1:4.3
+ __fractsqqi@GCC_4.3.0 1:4.3
+ __fractsqqq2@GCC_4.3.0 1:4.3
+ __fractsqsa@GCC_4.3.0 1:4.3
+ __fractsqsf@GCC_4.3.0 1:4.3
+ __fractsqsi@GCC_4.3.0 1:4.3
+ __fractsquda@GCC_4.3.0 1:4.3
+ __fractsqudq@GCC_4.3.0 1:4.3
+ __fractsquha@GCC_4.3.0 1:4.3
+ __fractsquhq@GCC_4.3.0 1:4.3
+ __fractsquqq@GCC_4.3.0 1:4.3
+ __fractsqusa@GCC_4.3.0 1:4.3
+ __fractsqusq@GCC_4.3.0 1:4.3
+ __fractudada@GCC_4.3.0 1:4.3
+ __fractudadf@GCC_4.3.0 1:4.3
+ __fractudadi@GCC_4.3.0 1:4.3
+ __fractudadq@GCC_4.3.0 1:4.3
+ __fractudaha@GCC_4.3.0 1:4.3
+ __fractudahi@GCC_4.3.0 1:4.3
+ __fractudahq@GCC_4.3.0 1:4.3
+ __fractudaqi@GCC_4.3.0 1:4.3
+ __fractudaqq@GCC_4.3.0 1:4.3
+ __fractudasa@GCC_4.3.0 1:4.3
+ __fractudasf@GCC_4.3.0 1:4.3
+ __fractudasi@GCC_4.3.0 1:4.3
+ __fractudasq@GCC_4.3.0 1:4.3
+ __fractudaudq@GCC_4.3.0 1:4.3
+ __fractudauha2@GCC_4.3.0 1:4.3
+ __fractudauhq@GCC_4.3.0 1:4.3
+ __fractudauqq@GCC_4.3.0 1:4.3
+ __fractudausa2@GCC_4.3.0 1:4.3
+ __fractudausq@GCC_4.3.0 1:4.3
+ __fractudqda@GCC_4.3.0 1:4.3
+ __fractudqdf@GCC_4.3.0 1:4.3
+ __fractudqdi@GCC_4.3.0 1:4.3
+ __fractudqdq@GCC_4.3.0 1:4.3
+ __fractudqha@GCC_4.3.0 1:4.3
+ __fractudqhi@GCC_4.3.0 1:4.3
+ __fractudqhq@GCC_4.3.0 1:4.3
+ __fractudqqi@GCC_4.3.0 1:4.3
+ __fractudqqq@GCC_4.3.0 1:4.3
+ __fractudqsa@GCC_4.3.0 1:4.3
+ __fractudqsf@GCC_4.3.0 1:4.3
+ __fractudqsi@GCC_4.3.0 1:4.3
+ __fractudqsq@GCC_4.3.0 1:4.3
+ __fractudquda@GCC_4.3.0 1:4.3
+ __fractudquha@GCC_4.3.0 1:4.3
+ __fractudquhq2@GCC_4.3.0 1:4.3
+ __fractudquqq2@GCC_4.3.0 1:4.3
+ __fractudqusa@GCC_4.3.0 1:4.3
+ __fractudqusq2@GCC_4.3.0 1:4.3
+ __fractuhada@GCC_4.3.0 1:4.3
+ __fractuhadf@GCC_4.3.0 1:4.3
+ __fractuhadi@GCC_4.3.0 1:4.3
+ __fractuhadq@GCC_4.3.0 1:4.3
+ __fractuhaha@GCC_4.3.0 1:4.3
+ __fractuhahi@GCC_4.3.0 1:4.3
+ __fractuhahq@GCC_4.3.0 1:4.3
+ __fractuhaqi@GCC_4.3.0 1:4.3
+ __fractuhaqq@GCC_4.3.0 1:4.3
+ __fractuhasa@GCC_4.3.0 1:4.3
+ __fractuhasf@GCC_4.3.0 1:4.3
+ __fractuhasi@GCC_4.3.0 1:4.3
+ __fractuhasq@GCC_4.3.0 1:4.3
+ __fractuhauda2@GCC_4.3.0 1:4.3
+ __fractuhaudq@GCC_4.3.0 1:4.3
+ __fractuhauhq@GCC_4.3.0 1:4.3
+ __fractuhauqq@GCC_4.3.0 1:4.3
+ __fractuhausa2@GCC_4.3.0 1:4.3
+ __fractuhausq@GCC_4.3.0 1:4.3
+ __fractuhqda@GCC_4.3.0 1:4.3
+ __fractuhqdf@GCC_4.3.0 1:4.3
+ __fractuhqdi@GCC_4.3.0 1:4.3
+ __fractuhqdq@GCC_4.3.0 1:4.3
+ __fractuhqha@GCC_4.3.0 1:4.3
+ __fractuhqhi@GCC_4.3.0 1:4.3
+ __fractuhqhq@GCC_4.3.0 1:4.3
+ __fractuhqqi@GCC_4.3.0 1:4.3
+ __fractuhqqq@GCC_4.3.0 1:4.3
+ __fractuhqsa@GCC_4.3.0 1:4.3
+ __fractuhqsf@GCC_4.3.0 1:4.3
+ __fractuhqsi@GCC_4.3.0 1:4.3
+ __fractuhqsq@GCC_4.3.0 1:4.3
+ __fractuhquda@GCC_4.3.0 1:4.3
+ __fractuhqudq2@GCC_4.3.0 1:4.3
+ __fractuhquha@GCC_4.3.0 1:4.3
+ __fractuhquqq2@GCC_4.3.0 1:4.3
+ __fractuhqusa@GCC_4.3.0 1:4.3
+ __fractuhqusq2@GCC_4.3.0 1:4.3
+ __fractunsdadi@GCC_4.3.0 1:4.3
+ __fractunsdahi@GCC_4.3.0 1:4.3
+ __fractunsdaqi@GCC_4.3.0 1:4.3
+ __fractunsdasi@GCC_4.3.0 1:4.3
+ __fractunsdida@GCC_4.3.0 1:4.3
+ __fractunsdidq@GCC_4.3.0 1:4.3
+ __fractunsdiha@GCC_4.3.0 1:4.3
+ __fractunsdihq@GCC_4.3.0 1:4.3
+ __fractunsdiqq@GCC_4.3.0 1:4.3
+ __fractunsdisa@GCC_4.3.0 1:4.3
+ __fractunsdisq@GCC_4.3.0 1:4.3
+ __fractunsdiuda@GCC_4.3.0 1:4.3
+ __fractunsdiudq@GCC_4.3.0 1:4.3
+ __fractunsdiuha@GCC_4.3.0 1:4.3
+ __fractunsdiuhq@GCC_4.3.0 1:4.3
+ __fractunsdiuqq@GCC_4.3.0 1:4.3
+ __fractunsdiusa@GCC_4.3.0 1:4.3
+ __fractunsdiusq@GCC_4.3.0 1:4.3
+ __fractunsdqdi@GCC_4.3.0 1:4.3
+ __fractunsdqhi@GCC_4.3.0 1:4.3
+ __fractunsdqqi@GCC_4.3.0 1:4.3
+ __fractunsdqsi@GCC_4.3.0 1:4.3
+ __fractunshadi@GCC_4.3.0 1:4.3
+ __fractunshahi@GCC_4.3.0 1:4.3
+ __fractunshaqi@GCC_4.3.0 1:4.3
+ __fractunshasi@GCC_4.3.0 1:4.3
+ __fractunshida@GCC_4.3.0 1:4.3
+ __fractunshidq@GCC_4.3.0 1:4.3
+ __fractunshiha@GCC_4.3.0 1:4.3
+ __fractunshihq@GCC_4.3.0 1:4.3
+ __fractunshiqq@GCC_4.3.0 1:4.3
+ __fractunshisa@GCC_4.3.0 1:4.3
+ __fractunshisq@GCC_4.3.0 1:4.3
+ __fractunshiuda@GCC_4.3.0 1:4.3
+ __fractunshiudq@GCC_4.3.0 1:4.3
+ __fractunshiuha@GCC_4.3.0 1:4.3
+ __fractunshiuhq@GCC_4.3.0 1:4.3
+ __fractunshiuqq@GCC_4.3.0 1:4.3
+ __fractunshiusa@GCC_4.3.0 1:4.3
+ __fractunshiusq@GCC_4.3.0 1:4.3
+ __fractunshqdi@GCC_4.3.0 1:4.3
+ __fractunshqhi@GCC_4.3.0 1:4.3
+ __fractunshqqi@GCC_4.3.0 1:4.3
+ __fractunshqsi@GCC_4.3.0 1:4.3
+ __fractunsqida@GCC_4.3.0 1:4.3
+ __fractunsqidq@GCC_4.3.0 1:4.3
+ __fractunsqiha@GCC_4.3.0 1:4.3
+ __fractunsqihq@GCC_4.3.0 1:4.3
+ __fractunsqiqq@GCC_4.3.0 1:4.3
+ __fractunsqisa@GCC_4.3.0 1:4.3
+ __fractunsqisq@GCC_4.3.0 1:4.3
+ __fractunsqiuda@GCC_4.3.0 1:4.3
+ __fractunsqiudq@GCC_4.3.0 1:4.3
+ __fractunsqiuha@GCC_4.3.0 1:4.3
+ __fractunsqiuhq@GCC_4.3.0 1:4.3
+ __fractunsqiuqq@GCC_4.3.0 1:4.3
+ __fractunsqiusa@GCC_4.3.0 1:4.3
+ __fractunsqiusq@GCC_4.3.0 1:4.3
+ __fractunsqqdi@GCC_4.3.0 1:4.3
+ __fractunsqqhi@GCC_4.3.0 1:4.3
+ __fractunsqqqi@GCC_4.3.0 1:4.3
+ __fractunsqqsi@GCC_4.3.0 1:4.3
+ __fractunssadi@GCC_4.3.0 1:4.3
+ __fractunssahi@GCC_4.3.0 1:4.3
+ __fractunssaqi@GCC_4.3.0 1:4.3
+ __fractunssasi@GCC_4.3.0 1:4.3
+ __fractunssida@GCC_4.3.0 1:4.3
+ __fractunssidq@GCC_4.3.0 1:4.3
+ __fractunssiha@GCC_4.3.0 1:4.3
+ __fractunssihq@GCC_4.3.0 1:4.3
+ __fractunssiqq@GCC_4.3.0 1:4.3
+ __fractunssisa@GCC_4.3.0 1:4.3
+ __fractunssisq@GCC_4.3.0 1:4.3
+ __fractunssiuda@GCC_4.3.0 1:4.3
+ __fractunssiudq@GCC_4.3.0 1:4.3
+ __fractunssiuha@GCC_4.3.0 1:4.3
+ __fractunssiuhq@GCC_4.3.0 1:4.3
+ __fractunssiuqq@GCC_4.3.0 1:4.3
+ __fractunssiusa@GCC_4.3.0 1:4.3
+ __fractunssiusq@GCC_4.3.0 1:4.3
+ __fractunssqdi@GCC_4.3.0 1:4.3
+ __fractunssqhi@GCC_4.3.0 1:4.3
+ __fractunssqqi@GCC_4.3.0 1:4.3
+ __fractunssqsi@GCC_4.3.0 1:4.3
+ __fractunsudadi@GCC_4.3.0 1:4.3
+ __fractunsudahi@GCC_4.3.0 1:4.3
+ __fractunsudaqi@GCC_4.3.0 1:4.3
+ __fractunsudasi@GCC_4.3.0 1:4.3
+ __fractunsudqdi@GCC_4.3.0 1:4.3
+ __fractunsudqhi@GCC_4.3.0 1:4.3
+ __fractunsudqqi@GCC_4.3.0 1:4.3
+ __fractunsudqsi@GCC_4.3.0 1:4.3
+ __fractunsuhadi@GCC_4.3.0 1:4.3
+ __fractunsuhahi@GCC_4.3.0 1:4.3
+ __fractunsuhaqi@GCC_4.3.0 1:4.3
+ __fractunsuhasi@GCC_4.3.0 1:4.3
+ __fractunsuhqdi@GCC_4.3.0 1:4.3
+ __fractunsuhqhi@GCC_4.3.0 1:4.3
+ __fractunsuhqqi@GCC_4.3.0 1:4.3
+ __fractunsuhqsi@GCC_4.3.0 1:4.3
+ __fractunsuqqdi@GCC_4.3.0 1:4.3
+ __fractunsuqqhi@GCC_4.3.0 1:4.3
+ __fractunsuqqqi@GCC_4.3.0 1:4.3
+ __fractunsuqqsi@GCC_4.3.0 1:4.3
+ __fractunsusadi@GCC_4.3.0 1:4.3
+ __fractunsusahi@GCC_4.3.0 1:4.3
+ __fractunsusaqi@GCC_4.3.0 1:4.3
+ __fractunsusasi@GCC_4.3.0 1:4.3
+ __fractunsusqdi@GCC_4.3.0 1:4.3
+ __fractunsusqhi@GCC_4.3.0 1:4.3
+ __fractunsusqqi@GCC_4.3.0 1:4.3
+ __fractunsusqsi@GCC_4.3.0 1:4.3
+ __fractuqqda@GCC_4.3.0 1:4.3
+ __fractuqqdf@GCC_4.3.0 1:4.3
+ __fractuqqdi@GCC_4.3.0 1:4.3
+ __fractuqqdq@GCC_4.3.0 1:4.3
+ __fractuqqha@GCC_4.3.0 1:4.3
+ __fractuqqhi@GCC_4.3.0 1:4.3
+ __fractuqqhq@GCC_4.3.0 1:4.3
+ __fractuqqqi@GCC_4.3.0 1:4.3
+ __fractuqqqq@GCC_4.3.0 1:4.3
+ __fractuqqsa@GCC_4.3.0 1:4.3
+ __fractuqqsf@GCC_4.3.0 1:4.3
+ __fractuqqsi@GCC_4.3.0 1:4.3
+ __fractuqqsq@GCC_4.3.0 1:4.3
+ __fractuqquda@GCC_4.3.0 1:4.3
+ __fractuqqudq2@GCC_4.3.0 1:4.3
+ __fractuqquha@GCC_4.3.0 1:4.3
+ __fractuqquhq2@GCC_4.3.0 1:4.3
+ __fractuqqusa@GCC_4.3.0 1:4.3
+ __fractuqqusq2@GCC_4.3.0 1:4.3
+ __fractusada@GCC_4.3.0 1:4.3
+ __fractusadf@GCC_4.3.0 1:4.3
+ __fractusadi@GCC_4.3.0 1:4.3
+ __fractusadq@GCC_4.3.0 1:4.3
+ __fractusaha@GCC_4.3.0 1:4.3
+ __fractusahi@GCC_4.3.0 1:4.3
+ __fractusahq@GCC_4.3.0 1:4.3
+ __fractusaqi@GCC_4.3.0 1:4.3
+ __fractusaqq@GCC_4.3.0 1:4.3
+ __fractusasa@GCC_4.3.0 1:4.3
+ __fractusasf@GCC_4.3.0 1:4.3
+ __fractusasi@GCC_4.3.0 1:4.3
+ __fractusasq@GCC_4.3.0 1:4.3
+ __fractusauda2@GCC_4.3.0 1:4.3
+ __fractusaudq@GCC_4.3.0 1:4.3
+ __fractusauha2@GCC_4.3.0 1:4.3
+ __fractusauhq@GCC_4.3.0 1:4.3
+ __fractusauqq@GCC_4.3.0 1:4.3
+ __fractusausq@GCC_4.3.0 1:4.3
+ __fractusqda@GCC_4.3.0 1:4.3
+ __fractusqdf@GCC_4.3.0 1:4.3
+ __fractusqdi@GCC_4.3.0 1:4.3
+ __fractusqdq@GCC_4.3.0 1:4.3
+ __fractusqha@GCC_4.3.0 1:4.3
+ __fractusqhi@GCC_4.3.0 1:4.3
+ __fractusqhq@GCC_4.3.0 1:4.3
+ __fractusqqi@GCC_4.3.0 1:4.3
+ __fractusqqq@GCC_4.3.0 1:4.3
+ __fractusqsa@GCC_4.3.0 1:4.3
+ __fractusqsf@GCC_4.3.0 1:4.3
+ __fractusqsi@GCC_4.3.0 1:4.3
+ __fractusqsq@GCC_4.3.0 1:4.3
+ __fractusquda@GCC_4.3.0 1:4.3
+ __fractusqudq2@GCC_4.3.0 1:4.3
+ __fractusquha@GCC_4.3.0 1:4.3
+ __fractusquhq2@GCC_4.3.0 1:4.3
+ __fractusquqq2@GCC_4.3.0 1:4.3
+ __fractusqusa@GCC_4.3.0 1:4.3
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __gedf2@GCC_3.0 1:4.1.1
+ __gesf2@GCC_3.0 1:4.1.1
+ __gtdf2@GCC_3.0 1:4.1.1
+ __gtsf2@GCC_3.0 1:4.1.1
+ __ledf2@GCC_3.0 1:4.1.1
+ __lesf2@GCC_3.0 1:4.1.1
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __lshruda3@GCC_4.3.0 1:4.3
+ __lshrudq3@GCC_4.3.0 1:4.3
+ __lshruha3@GCC_4.3.0 1:4.3
+ __lshruhq3@GCC_4.3.0 1:4.3
+ __lshruqq3@GCC_4.3.0 1:4.3
+ __lshrusa3@GCC_4.3.0 1:4.3
+ __lshrusq3@GCC_4.3.0 1:4.3
+ __ltdf2@GCC_3.0 1:4.1.1
+ __ltsf2@GCC_3.0 1:4.1.1
+ __mips16_adddf3@GCC_4.4.0 1:4.4.0
+ __mips16_addsf3@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_9@GCC_4.4.0 1:4.4.0
+ __mips16_divdf3@GCC_4.4.0 1:4.4.0
+ __mips16_divsf3@GCC_4.4.0 1:4.4.0
+ __mips16_eqdf2@GCC_4.4.0 1:4.4.0
+ __mips16_eqsf2@GCC_4.4.0 1:4.4.0
+ __mips16_extendsfdf2@GCC_4.4.0 1:4.4.0
+ __mips16_fix_truncdfsi@GCC_4.4.0 1:4.4.0
+ __mips16_fix_truncsfsi@GCC_4.4.0 1:4.4.0
+ __mips16_floatsidf@GCC_4.4.0 1:4.4.0
+ __mips16_floatsisf@GCC_4.4.0 1:4.4.0
+ __mips16_floatunsidf@GCC_4.4.0 1:4.4.0
+ __mips16_floatunsisf@GCC_4.4.0 1:4.4.0
+ __mips16_gedf2@GCC_4.4.0 1:4.4.0
+ __mips16_gesf2@GCC_4.4.0 1:4.4.0
+ __mips16_gtdf2@GCC_4.4.0 1:4.4.0
+ __mips16_gtsf2@GCC_4.4.0 1:4.4.0
+ __mips16_ledf2@GCC_4.4.0 1:4.4.0
+ __mips16_lesf2@GCC_4.4.0 1:4.4.0
+ __mips16_ltdf2@GCC_4.4.0 1:4.4.0
+ __mips16_ltsf2@GCC_4.4.0 1:4.4.0
+ __mips16_muldf3@GCC_4.4.0 1:4.4.0
+ __mips16_mulsf3@GCC_4.4.0 1:4.4.0
+ __mips16_nedf2@GCC_4.4.0 1:4.4.0
+ __mips16_nesf2@GCC_4.4.0 1:4.4.0
+ __mips16_ret_dc@GCC_4.4.0 1:4.4.0
+ __mips16_ret_df@GCC_4.4.0 1:4.4.0
+ __mips16_ret_sc@GCC_4.4.0 1:4.4.0
+ __mips16_ret_sf@GCC_4.4.0 1:4.4.0
+ __mips16_subdf3@GCC_4.4.0 1:4.4.0
+ __mips16_subsf3@GCC_4.4.0 1:4.4.0
+ __mips16_truncdfsf2@GCC_4.4.0 1:4.4.0
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __mulda3@GCC_4.3.0 1:4.3
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldf3@GCC_3.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __muldq3@GCC_4.3.0 1:4.3
+ __mulha3@GCC_4.3.0 1:4.3
+ __mulhq3@GCC_4.3.0 1:4.3
+ __mulqq3@GCC_4.3.0 1:4.3
+ __mulsa3@GCC_4.3.0 1:4.3
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __mulsf3@GCC_3.0 1:4.1.1
+ __mulsq3@GCC_4.3.0 1:4.3
+ __muluda3@GCC_4.3.0 1:4.3
+ __muludq3@GCC_4.3.0 1:4.3
+ __muluha3@GCC_4.3.0 1:4.3
+ __muluhq3@GCC_4.3.0 1:4.3
+ __muluqq3@GCC_4.3.0 1:4.3
+ __mulusa3@GCC_4.3.0 1:4.3
+ __mulusq3@GCC_4.3.0 1:4.3
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __nedf2@GCC_3.0 1:4.1.1
+ __negda2@GCC_4.3.0 1:4.3
+ __negdf2@GCC_3.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negdq2@GCC_4.3.0 1:4.3
+ __negha2@GCC_4.3.0 1:4.3
+ __neghq2@GCC_4.3.0 1:4.3
+ __negqq2@GCC_4.3.0 1:4.3
+ __negsa2@GCC_4.3.0 1:4.3
+ __negsf2@GCC_3.0 1:4.1.1
+ __negsq2@GCC_4.3.0 1:4.3
+ __neguda2@GCC_4.3.0 1:4.3
+ __negudq2@GCC_4.3.0 1:4.3
+ __neguha2@GCC_4.3.0 1:4.3
+ __neguhq2@GCC_4.3.0 1:4.3
+ __neguqq2@GCC_4.3.0 1:4.3
+ __negusa2@GCC_4.3.0 1:4.3
+ __negusq2@GCC_4.3.0 1:4.3
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __nesf2@GCC_3.0 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __satfractdadq@GCC_4.3.0 1:4.3
+ __satfractdaha2@GCC_4.3.0 1:4.3
+ __satfractdahq@GCC_4.3.0 1:4.3
+ __satfractdaqq@GCC_4.3.0 1:4.3
+ __satfractdasa2@GCC_4.3.0 1:4.3
+ __satfractdasq@GCC_4.3.0 1:4.3
+ __satfractdauda@GCC_4.3.0 1:4.3
+ __satfractdaudq@GCC_4.3.0 1:4.3
+ __satfractdauha@GCC_4.3.0 1:4.3
+ __satfractdauhq@GCC_4.3.0 1:4.3
+ __satfractdauqq@GCC_4.3.0 1:4.3
+ __satfractdausa@GCC_4.3.0 1:4.3
+ __satfractdausq@GCC_4.3.0 1:4.3
+ __satfractdfda@GCC_4.3.0 1:4.3
+ __satfractdfdq@GCC_4.3.0 1:4.3
+ __satfractdfha@GCC_4.3.0 1:4.3
+ __satfractdfhq@GCC_4.3.0 1:4.3
+ __satfractdfqq@GCC_4.3.0 1:4.3
+ __satfractdfsa@GCC_4.3.0 1:4.3
+ __satfractdfsq@GCC_4.3.0 1:4.3
+ __satfractdfuda@GCC_4.3.0 1:4.3
+ __satfractdfudq@GCC_4.3.0 1:4.3
+ __satfractdfuha@GCC_4.3.0 1:4.3
+ __satfractdfuhq@GCC_4.3.0 1:4.3
+ __satfractdfuqq@GCC_4.3.0 1:4.3
+ __satfractdfusa@GCC_4.3.0 1:4.3
+ __satfractdfusq@GCC_4.3.0 1:4.3
+ __satfractdida@GCC_4.3.0 1:4.3
+ __satfractdidq@GCC_4.3.0 1:4.3
+ __satfractdiha@GCC_4.3.0 1:4.3
+ __satfractdihq@GCC_4.3.0 1:4.3
+ __satfractdiqq@GCC_4.3.0 1:4.3
+ __satfractdisa@GCC_4.3.0 1:4.3
+ __satfractdisq@GCC_4.3.0 1:4.3
+ __satfractdiuda@GCC_4.3.0 1:4.3
+ __satfractdiudq@GCC_4.3.0 1:4.3
+ __satfractdiuha@GCC_4.3.0 1:4.3
+ __satfractdiuhq@GCC_4.3.0 1:4.3
+ __satfractdiuqq@GCC_4.3.0 1:4.3
+ __satfractdiusa@GCC_4.3.0 1:4.3
+ __satfractdiusq@GCC_4.3.0 1:4.3
+ __satfractdqda@GCC_4.3.0 1:4.3
+ __satfractdqha@GCC_4.3.0 1:4.3
+ __satfractdqhq2@GCC_4.3.0 1:4.3
+ __satfractdqqq2@GCC_4.3.0 1:4.3
+ __satfractdqsa@GCC_4.3.0 1:4.3
+ __satfractdqsq2@GCC_4.3.0 1:4.3
+ __satfractdquda@GCC_4.3.0 1:4.3
+ __satfractdqudq@GCC_4.3.0 1:4.3
+ __satfractdquha@GCC_4.3.0 1:4.3
+ __satfractdquhq@GCC_4.3.0 1:4.3
+ __satfractdquqq@GCC_4.3.0 1:4.3
+ __satfractdqusa@GCC_4.3.0 1:4.3
+ __satfractdqusq@GCC_4.3.0 1:4.3
+ __satfracthada2@GCC_4.3.0 1:4.3
+ __satfracthadq@GCC_4.3.0 1:4.3
+ __satfracthahq@GCC_4.3.0 1:4.3
+ __satfracthaqq@GCC_4.3.0 1:4.3
+ __satfracthasa2@GCC_4.3.0 1:4.3
+ __satfracthasq@GCC_4.3.0 1:4.3
+ __satfracthauda@GCC_4.3.0 1:4.3
+ __satfracthaudq@GCC_4.3.0 1:4.3
+ __satfracthauha@GCC_4.3.0 1:4.3
+ __satfracthauhq@GCC_4.3.0 1:4.3
+ __satfracthauqq@GCC_4.3.0 1:4.3
+ __satfracthausa@GCC_4.3.0 1:4.3
+ __satfracthausq@GCC_4.3.0 1:4.3
+ __satfracthida@GCC_4.3.0 1:4.3
+ __satfracthidq@GCC_4.3.0 1:4.3
+ __satfracthiha@GCC_4.3.0 1:4.3
+ __satfracthihq@GCC_4.3.0 1:4.3
+ __satfracthiqq@GCC_4.3.0 1:4.3
+ __satfracthisa@GCC_4.3.0 1:4.3
+ __satfracthisq@GCC_4.3.0 1:4.3
+ __satfracthiuda@GCC_4.3.0 1:4.3
+ __satfracthiudq@GCC_4.3.0 1:4.3
+ __satfracthiuha@GCC_4.3.0 1:4.3
+ __satfracthiuhq@GCC_4.3.0 1:4.3
+ __satfracthiuqq@GCC_4.3.0 1:4.3
+ __satfracthiusa@GCC_4.3.0 1:4.3
+ __satfracthiusq@GCC_4.3.0 1:4.3
+ __satfracthqda@GCC_4.3.0 1:4.3
+ __satfracthqdq2@GCC_4.3.0 1:4.3
+ __satfracthqha@GCC_4.3.0 1:4.3
+ __satfracthqqq2@GCC_4.3.0 1:4.3
+ __satfracthqsa@GCC_4.3.0 1:4.3
+ __satfracthqsq2@GCC_4.3.0 1:4.3
+ __satfracthquda@GCC_4.3.0 1:4.3
+ __satfracthqudq@GCC_4.3.0 1:4.3
+ __satfracthquha@GCC_4.3.0 1:4.3
+ __satfracthquhq@GCC_4.3.0 1:4.3
+ __satfracthquqq@GCC_4.3.0 1:4.3
+ __satfracthqusa@GCC_4.3.0 1:4.3
+ __satfracthqusq@GCC_4.3.0 1:4.3
+ __satfractqida@GCC_4.3.0 1:4.3
+ __satfractqidq@GCC_4.3.0 1:4.3
+ __satfractqiha@GCC_4.3.0 1:4.3
+ __satfractqihq@GCC_4.3.0 1:4.3
+ __satfractqiqq@GCC_4.3.0 1:4.3
+ __satfractqisa@GCC_4.3.0 1:4.3
+ __satfractqisq@GCC_4.3.0 1:4.3
+ __satfractqiuda@GCC_4.3.0 1:4.3
+ __satfractqiudq@GCC_4.3.0 1:4.3
+ __satfractqiuha@GCC_4.3.0 1:4.3
+ __satfractqiuhq@GCC_4.3.0 1:4.3
+ __satfractqiuqq@GCC_4.3.0 1:4.3
+ __satfractqiusa@GCC_4.3.0 1:4.3
+ __satfractqiusq@GCC_4.3.0 1:4.3
+ __satfractqqda@GCC_4.3.0 1:4.3
+ __satfractqqdq2@GCC_4.3.0 1:4.3
+ __satfractqqha@GCC_4.3.0 1:4.3
+ __satfractqqhq2@GCC_4.3.0 1:4.3
+ __satfractqqsa@GCC_4.3.0 1:4.3
+ __satfractqqsq2@GCC_4.3.0 1:4.3
+ __satfractqquda@GCC_4.3.0 1:4.3
+ __satfractqqudq@GCC_4.3.0 1:4.3
+ __satfractqquha@GCC_4.3.0 1:4.3
+ __satfractqquhq@GCC_4.3.0 1:4.3
+ __satfractqquqq@GCC_4.3.0 1:4.3
+ __satfractqqusa@GCC_4.3.0 1:4.3
+ __satfractqqusq@GCC_4.3.0 1:4.3
+ __satfractsada2@GCC_4.3.0 1:4.3
+ __satfractsadq@GCC_4.3.0 1:4.3
+ __satfractsaha2@GCC_4.3.0 1:4.3
+ __satfractsahq@GCC_4.3.0 1:4.3
+ __satfractsaqq@GCC_4.3.0 1:4.3
+ __satfractsasq@GCC_4.3.0 1:4.3
+ __satfractsauda@GCC_4.3.0 1:4.3
+ __satfractsaudq@GCC_4.3.0 1:4.3
+ __satfractsauha@GCC_4.3.0 1:4.3
+ __satfractsauhq@GCC_4.3.0 1:4.3
+ __satfractsauqq@GCC_4.3.0 1:4.3
+ __satfractsausa@GCC_4.3.0 1:4.3
+ __satfractsausq@GCC_4.3.0 1:4.3
+ __satfractsfda@GCC_4.3.0 1:4.3
+ __satfractsfdq@GCC_4.3.0 1:4.3
+ __satfractsfha@GCC_4.3.0 1:4.3
+ __satfractsfhq@GCC_4.3.0 1:4.3
+ __satfractsfqq@GCC_4.3.0 1:4.3
+ __satfractsfsa@GCC_4.3.0 1:4.3
+ __satfractsfsq@GCC_4.3.0 1:4.3
+ __satfractsfuda@GCC_4.3.0 1:4.3
+ __satfractsfudq@GCC_4.3.0 1:4.3
+ __satfractsfuha@GCC_4.3.0 1:4.3
+ __satfractsfuhq@GCC_4.3.0 1:4.3
+ __satfractsfuqq@GCC_4.3.0 1:4.3
+ __satfractsfusa@GCC_4.3.0 1:4.3
+ __satfractsfusq@GCC_4.3.0 1:4.3
+ __satfractsida@GCC_4.3.0 1:4.3
+ __satfractsidq@GCC_4.3.0 1:4.3
+ __satfractsiha@GCC_4.3.0 1:4.3
+ __satfractsihq@GCC_4.3.0 1:4.3
+ __satfractsiqq@GCC_4.3.0 1:4.3
+ __satfractsisa@GCC_4.3.0 1:4.3
+ __satfractsisq@GCC_4.3.0 1:4.3
+ __satfractsiuda@GCC_4.3.0 1:4.3
+ __satfractsiudq@GCC_4.3.0 1:4.3
+ __satfractsiuha@GCC_4.3.0 1:4.3
+ __satfractsiuhq@GCC_4.3.0 1:4.3
+ __satfractsiuqq@GCC_4.3.0 1:4.3
+ __satfractsiusa@GCC_4.3.0 1:4.3
+ __satfractsiusq@GCC_4.3.0 1:4.3
+ __satfractsqda@GCC_4.3.0 1:4.3
+ __satfractsqdq2@GCC_4.3.0 1:4.3
+ __satfractsqha@GCC_4.3.0 1:4.3
+ __satfractsqhq2@GCC_4.3.0 1:4.3
+ __satfractsqqq2@GCC_4.3.0 1:4.3
+ __satfractsqsa@GCC_4.3.0 1:4.3
+ __satfractsquda@GCC_4.3.0 1:4.3
+ __satfractsqudq@GCC_4.3.0 1:4.3
+ __satfractsquha@GCC_4.3.0 1:4.3
+ __satfractsquhq@GCC_4.3.0 1:4.3
+ __satfractsquqq@GCC_4.3.0 1:4.3
+ __satfractsqusa@GCC_4.3.0 1:4.3
+ __satfractsqusq@GCC_4.3.0 1:4.3
+ __satfractudada@GCC_4.3.0 1:4.3
+ __satfractudadq@GCC_4.3.0 1:4.3
+ __satfractudaha@GCC_4.3.0 1:4.3
+ __satfractudahq@GCC_4.3.0 1:4.3
+ __satfractudaqq@GCC_4.3.0 1:4.3
+ __satfractudasa@GCC_4.3.0 1:4.3
+ __satfractudasq@GCC_4.3.0 1:4.3
+ __satfractudaudq@GCC_4.3.0 1:4.3
+ __satfractudauha2@GCC_4.3.0 1:4.3
+ __satfractudauhq@GCC_4.3.0 1:4.3
+ __satfractudauqq@GCC_4.3.0 1:4.3
+ __satfractudausa2@GCC_4.3.0 1:4.3
+ __satfractudausq@GCC_4.3.0 1:4.3
+ __satfractudqda@GCC_4.3.0 1:4.3
+ __satfractudqdq@GCC_4.3.0 1:4.3
+ __satfractudqha@GCC_4.3.0 1:4.3
+ __satfractudqhq@GCC_4.3.0 1:4.3
+ __satfractudqqq@GCC_4.3.0 1:4.3
+ __satfractudqsa@GCC_4.3.0 1:4.3
+ __satfractudqsq@GCC_4.3.0 1:4.3
+ __satfractudquda@GCC_4.3.0 1:4.3
+ __satfractudquha@GCC_4.3.0 1:4.3
+ __satfractudquhq2@GCC_4.3.0 1:4.3
+ __satfractudquqq2@GCC_4.3.0 1:4.3
+ __satfractudqusa@GCC_4.3.0 1:4.3
+ __satfractudqusq2@GCC_4.3.0 1:4.3
+ __satfractuhada@GCC_4.3.0 1:4.3
+ __satfractuhadq@GCC_4.3.0 1:4.3
+ __satfractuhaha@GCC_4.3.0 1:4.3
+ __satfractuhahq@GCC_4.3.0 1:4.3
+ __satfractuhaqq@GCC_4.3.0 1:4.3
+ __satfractuhasa@GCC_4.3.0 1:4.3
+ __satfractuhasq@GCC_4.3.0 1:4.3
+ __satfractuhauda2@GCC_4.3.0 1:4.3
+ __satfractuhaudq@GCC_4.3.0 1:4.3
+ __satfractuhauhq@GCC_4.3.0 1:4.3
+ __satfractuhauqq@GCC_4.3.0 1:4.3
+ __satfractuhausa2@GCC_4.3.0 1:4.3
+ __satfractuhausq@GCC_4.3.0 1:4.3
+ __satfractuhqda@GCC_4.3.0 1:4.3
+ __satfractuhqdq@GCC_4.3.0 1:4.3
+ __satfractuhqha@GCC_4.3.0 1:4.3
+ __satfractuhqhq@GCC_4.3.0 1:4.3
+ __satfractuhqqq@GCC_4.3.0 1:4.3
+ __satfractuhqsa@GCC_4.3.0 1:4.3
+ __satfractuhqsq@GCC_4.3.0 1:4.3
+ __satfractuhquda@GCC_4.3.0 1:4.3
+ __satfractuhqudq2@GCC_4.3.0 1:4.3
+ __satfractuhquha@GCC_4.3.0 1:4.3
+ __satfractuhquqq2@GCC_4.3.0 1:4.3
+ __satfractuhqusa@GCC_4.3.0 1:4.3
+ __satfractuhqusq2@GCC_4.3.0 1:4.3
+ __satfractunsdida@GCC_4.3.0 1:4.3
+ __satfractunsdidq@GCC_4.3.0 1:4.3
+ __satfractunsdiha@GCC_4.3.0 1:4.3
+ __satfractunsdihq@GCC_4.3.0 1:4.3
+ __satfractunsdiqq@GCC_4.3.0 1:4.3
+ __satfractunsdisa@GCC_4.3.0 1:4.3
+ __satfractunsdisq@GCC_4.3.0 1:4.3
+ __satfractunsdiuda@GCC_4.3.0 1:4.3
+ __satfractunsdiudq@GCC_4.3.0 1:4.3
+ __satfractunsdiuha@GCC_4.3.0 1:4.3
+ __satfractunsdiuhq@GCC_4.3.0 1:4.3
+ __satfractunsdiuqq@GCC_4.3.0 1:4.3
+ __satfractunsdiusa@GCC_4.3.0 1:4.3
+ __satfractunsdiusq@GCC_4.3.0 1:4.3
+ __satfractunshida@GCC_4.3.0 1:4.3
+ __satfractunshidq@GCC_4.3.0 1:4.3
+ __satfractunshiha@GCC_4.3.0 1:4.3
+ __satfractunshihq@GCC_4.3.0 1:4.3
+ __satfractunshiqq@GCC_4.3.0 1:4.3
+ __satfractunshisa@GCC_4.3.0 1:4.3
+ __satfractunshisq@GCC_4.3.0 1:4.3
+ __satfractunshiuda@GCC_4.3.0 1:4.3
+ __satfractunshiudq@GCC_4.3.0 1:4.3
+ __satfractunshiuha@GCC_4.3.0 1:4.3
+ __satfractunshiuhq@GCC_4.3.0 1:4.3
+ __satfractunshiuqq@GCC_4.3.0 1:4.3
+ __satfractunshiusa@GCC_4.3.0 1:4.3
+ __satfractunshiusq@GCC_4.3.0 1:4.3
+ __satfractunsqida@GCC_4.3.0 1:4.3
+ __satfractunsqidq@GCC_4.3.0 1:4.3
+ __satfractunsqiha@GCC_4.3.0 1:4.3
+ __satfractunsqihq@GCC_4.3.0 1:4.3
+ __satfractunsqiqq@GCC_4.3.0 1:4.3
+ __satfractunsqisa@GCC_4.3.0 1:4.3
+ __satfractunsqisq@GCC_4.3.0 1:4.3
+ __satfractunsqiuda@GCC_4.3.0 1:4.3
+ __satfractunsqiudq@GCC_4.3.0 1:4.3
+ __satfractunsqiuha@GCC_4.3.0 1:4.3
+ __satfractunsqiuhq@GCC_4.3.0 1:4.3
+ __satfractunsqiuqq@GCC_4.3.0 1:4.3
+ __satfractunsqiusa@GCC_4.3.0 1:4.3
+ __satfractunsqiusq@GCC_4.3.0 1:4.3
+ __satfractunssida@GCC_4.3.0 1:4.3
+ __satfractunssidq@GCC_4.3.0 1:4.3
+ __satfractunssiha@GCC_4.3.0 1:4.3
+ __satfractunssihq@GCC_4.3.0 1:4.3
+ __satfractunssiqq@GCC_4.3.0 1:4.3
+ __satfractunssisa@GCC_4.3.0 1:4.3
+ __satfractunssisq@GCC_4.3.0 1:4.3
+ __satfractunssiuda@GCC_4.3.0 1:4.3
+ __satfractunssiudq@GCC_4.3.0 1:4.3
+ __satfractunssiuha@GCC_4.3.0 1:4.3
+ __satfractunssiuhq@GCC_4.3.0 1:4.3
+ __satfractunssiuqq@GCC_4.3.0 1:4.3
+ __satfractunssiusa@GCC_4.3.0 1:4.3
+ __satfractunssiusq@GCC_4.3.0 1:4.3
+ __satfractuqqda@GCC_4.3.0 1:4.3
+ __satfractuqqdq@GCC_4.3.0 1:4.3
+ __satfractuqqha@GCC_4.3.0 1:4.3
+ __satfractuqqhq@GCC_4.3.0 1:4.3
+ __satfractuqqqq@GCC_4.3.0 1:4.3
+ __satfractuqqsa@GCC_4.3.0 1:4.3
+ __satfractuqqsq@GCC_4.3.0 1:4.3
+ __satfractuqquda@GCC_4.3.0 1:4.3
+ __satfractuqqudq2@GCC_4.3.0 1:4.3
+ __satfractuqquha@GCC_4.3.0 1:4.3
+ __satfractuqquhq2@GCC_4.3.0 1:4.3
+ __satfractuqqusa@GCC_4.3.0 1:4.3
+ __satfractuqqusq2@GCC_4.3.0 1:4.3
+ __satfractusada@GCC_4.3.0 1:4.3
+ __satfractusadq@GCC_4.3.0 1:4.3
+ __satfractusaha@GCC_4.3.0 1:4.3
+ __satfractusahq@GCC_4.3.0 1:4.3
+ __satfractusaqq@GCC_4.3.0 1:4.3
+ __satfractusasa@GCC_4.3.0 1:4.3
+ __satfractusasq@GCC_4.3.0 1:4.3
+ __satfractusauda2@GCC_4.3.0 1:4.3
+ __satfractusaudq@GCC_4.3.0 1:4.3
+ __satfractusauha2@GCC_4.3.0 1:4.3
+ __satfractusauhq@GCC_4.3.0 1:4.3
+ __satfractusauqq@GCC_4.3.0 1:4.3
+ __satfractusausq@GCC_4.3.0 1:4.3
+ __satfractusqda@GCC_4.3.0 1:4.3
+ __satfractusqdq@GCC_4.3.0 1:4.3
+ __satfractusqha@GCC_4.3.0 1:4.3
+ __satfractusqhq@GCC_4.3.0 1:4.3
+ __satfractusqqq@GCC_4.3.0 1:4.3
+ __satfractusqsa@GCC_4.3.0 1:4.3
+ __satfractusqsq@GCC_4.3.0 1:4.3
+ __satfractusquda@GCC_4.3.0 1:4.3
+ __satfractusqudq2@GCC_4.3.0 1:4.3
+ __satfractusquha@GCC_4.3.0 1:4.3
+ __satfractusquhq2@GCC_4.3.0 1:4.3
+ __satfractusquqq2@GCC_4.3.0 1:4.3
+ __satfractusqusa@GCC_4.3.0 1:4.3
+ __ssaddda3@GCC_4.3.0 1:4.3
+ __ssadddq3@GCC_4.3.0 1:4.3
+ __ssaddha3@GCC_4.3.0 1:4.3
+ __ssaddhq3@GCC_4.3.0 1:4.3
+ __ssaddqq3@GCC_4.3.0 1:4.3
+ __ssaddsa3@GCC_4.3.0 1:4.3
+ __ssaddsq3@GCC_4.3.0 1:4.3
+ __ssashlda3@GCC_4.3.0 1:4.3
+ __ssashldq3@GCC_4.3.0 1:4.3
+ __ssashlha3@GCC_4.3.0 1:4.3
+ __ssashlhq3@GCC_4.3.0 1:4.3
+ __ssashlqq3@GCC_4.3.0 1:4.3
+ __ssashlsa3@GCC_4.3.0 1:4.3
+ __ssashlsq3@GCC_4.3.0 1:4.3
+ __ssdivda3@GCC_4.3.0 1:4.3
+ __ssdivdq3@GCC_4.3.0 1:4.3
+ __ssdivha3@GCC_4.3.0 1:4.3
+ __ssdivhq3@GCC_4.3.0 1:4.3
+ __ssdivqq3@GCC_4.3.0 1:4.3
+ __ssdivsa3@GCC_4.3.0 1:4.3
+ __ssdivsq3@GCC_4.3.0 1:4.3
+ __ssmulda3@GCC_4.3.0 1:4.3
+ __ssmuldq3@GCC_4.3.0 1:4.3
+ __ssmulha3@GCC_4.3.0 1:4.3
+ __ssmulhq3@GCC_4.3.0 1:4.3
+ __ssmulqq3@GCC_4.3.0 1:4.3
+ __ssmulsa3@GCC_4.3.0 1:4.3
+ __ssmulsq3@GCC_4.3.0 1:4.3
+ __ssnegda2@GCC_4.3.0 1:4.3
+ __ssnegdq2@GCC_4.3.0 1:4.3
+ __ssnegha2@GCC_4.3.0 1:4.3
+ __ssneghq2@GCC_4.3.0 1:4.3
+ __ssnegqq2@GCC_4.3.0 1:4.3
+ __ssnegsa2@GCC_4.3.0 1:4.3
+ __ssnegsq2@GCC_4.3.0 1:4.3
+ __sssubda3@GCC_4.3.0 1:4.3
+ __sssubdq3@GCC_4.3.0 1:4.3
+ __sssubha3@GCC_4.3.0 1:4.3
+ __sssubhq3@GCC_4.3.0 1:4.3
+ __sssubqq3@GCC_4.3.0 1:4.3
+ __sssubsa3@GCC_4.3.0 1:4.3
+ __sssubsq3@GCC_4.3.0 1:4.3
+ __subda3@GCC_4.3.0 1:4.3
+ __subdf3@GCC_3.0 1:4.1.1
+ __subdq3@GCC_4.3.0 1:4.3
+ __subha3@GCC_4.3.0 1:4.3
+ __subhq3@GCC_4.3.0 1:4.3
+ __subqq3@GCC_4.3.0 1:4.3
+ __subsa3@GCC_4.3.0 1:4.3
+ __subsf3@GCC_3.0 1:4.1.1
+ __subsq3@GCC_4.3.0 1:4.3
+ __subuda3@GCC_4.3.0 1:4.3
+ __subudq3@GCC_4.3.0 1:4.3
+ __subuha3@GCC_4.3.0 1:4.3
+ __subuhq3@GCC_4.3.0 1:4.3
+ __subuqq3@GCC_4.3.0 1:4.3
+ __subusa3@GCC_4.3.0 1:4.3
+ __subusq3@GCC_4.3.0 1:4.3
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __sync_add_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_add_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_add_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_and_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_and_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_and_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_bool_compare_and_swap_1@GCC_4.4.0 1:4.4.0
+ __sync_bool_compare_and_swap_2@GCC_4.4.0 1:4.4.0
+ __sync_bool_compare_and_swap_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_add_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_add_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_add_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_and_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_and_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_and_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_nand_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_nand_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_nand_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_or_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_or_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_or_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_sub_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_sub_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_sub_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_xor_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_xor_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_xor_4@GCC_4.4.0 1:4.4.0
+ __sync_lock_test_and_set_1@GCC_4.4.0 1:4.4.0
+ __sync_lock_test_and_set_2@GCC_4.4.0 1:4.4.0
+ __sync_lock_test_and_set_4@GCC_4.4.0 1:4.4.0
+ __sync_nand_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_nand_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_nand_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_or_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_or_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_or_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_sub_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_sub_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_sub_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_synchronize@GCC_4.4.0 1:4.4.0
+ __sync_val_compare_and_swap_1@GCC_4.4.0 1:4.4.0
+ __sync_val_compare_and_swap_2@GCC_4.4.0 1:4.4.0
+ __sync_val_compare_and_swap_4@GCC_4.4.0 1:4.4.0
+ __sync_xor_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_xor_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_xor_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __truncdfsf2@GCC_3.0 1:4.1.1
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __udivuda3@GCC_4.3.0 1:4.3
+ __udivudq3@GCC_4.3.0 1:4.3
+ __udivuha3@GCC_4.3.0 1:4.3
+ __udivuhq3@GCC_4.3.0 1:4.3
+ __udivuqq3@GCC_4.3.0 1:4.3
+ __udivusa3@GCC_4.3.0 1:4.3
+ __udivusq3@GCC_4.3.0 1:4.3
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unorddf2@GCC_3.3.4 1:4.1.1
+ __unordsf2@GCC_3.3.4 1:4.1.1
+ __usadduda3@GCC_4.3.0 1:4.3
+ __usaddudq3@GCC_4.3.0 1:4.3
+ __usadduha3@GCC_4.3.0 1:4.3
+ __usadduhq3@GCC_4.3.0 1:4.3
+ __usadduqq3@GCC_4.3.0 1:4.3
+ __usaddusa3@GCC_4.3.0 1:4.3
+ __usaddusq3@GCC_4.3.0 1:4.3
+ __usashluda3@GCC_4.3.0 1:4.3
+ __usashludq3@GCC_4.3.0 1:4.3
+ __usashluha3@GCC_4.3.0 1:4.3
+ __usashluhq3@GCC_4.3.0 1:4.3
+ __usashluqq3@GCC_4.3.0 1:4.3
+ __usashlusa3@GCC_4.3.0 1:4.3
+ __usashlusq3@GCC_4.3.0 1:4.3
+ __usdivuda3@GCC_4.3.0 1:4.3
+ __usdivudq3@GCC_4.3.0 1:4.3
+ __usdivuha3@GCC_4.3.0 1:4.3
+ __usdivuhq3@GCC_4.3.0 1:4.3
+ __usdivuqq3@GCC_4.3.0 1:4.3
+ __usdivusa3@GCC_4.3.0 1:4.3
+ __usdivusq3@GCC_4.3.0 1:4.3
+ __usmuluda3@GCC_4.3.0 1:4.3
+ __usmuludq3@GCC_4.3.0 1:4.3
+ __usmuluha3@GCC_4.3.0 1:4.3
+ __usmuluhq3@GCC_4.3.0 1:4.3
+ __usmuluqq3@GCC_4.3.0 1:4.3
+ __usmulusa3@GCC_4.3.0 1:4.3
+ __usmulusq3@GCC_4.3.0 1:4.3
+ __usneguda2@GCC_4.3.0 1:4.3
+ __usnegudq2@GCC_4.3.0 1:4.3
+ __usneguha2@GCC_4.3.0 1:4.3
+ __usneguhq2@GCC_4.3.0 1:4.3
+ __usneguqq2@GCC_4.3.0 1:4.3
+ __usnegusa2@GCC_4.3.0 1:4.3
+ __usnegusq2@GCC_4.3.0 1:4.3
+ __ussubuda3@GCC_4.3.0 1:4.3
+ __ussubudq3@GCC_4.3.0 1:4.3
+ __ussubuha3@GCC_4.3.0 1:4.3
+ __ussubuhq3@GCC_4.3.0 1:4.3
+ __ussubuqq3@GCC_4.3.0 1:4.3
+ __ussubusa3@GCC_4.3.0 1:4.3
+ __ussubusq3@GCC_4.3.0 1:4.3
diff --git a/debian/libgcc1.symbols.powerpc b/debian/libgcc1.symbols.powerpc
new file mode 100644
index 0000000..fd51361
--- /dev/null
+++ b/debian/libgcc1.symbols.powerpc
@@ -0,0 +1,139 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3.4@GCC_3.3.4 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.1.0@GCC_4.1.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __adddf3@GCC_3.0 1:4.1.1
+ __addsf3@GCC_3.0 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdf3@GCC_3.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divsf3@GCC_3.0 1:4.1.1
+ __divtc3@GCC_4.1.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqdf2@GCC_3.0 1:4.1.1
+ __eqsf2@GCC_3.0 1:4.1.1
+ __extendsfdf2@GCC_3.0 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixdfsi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixsfsi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.1.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.1.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.1.0 1:4.1.1
+ __floatsidf@GCC_3.0 1:4.1.1
+ __floatsisf@GCC_3.0 1:4.1.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.2.0 1:4.2.1
+ __floatunsidf@GCC_4.2.0 1:4.2.1
+ __floatunsisf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __gcc_qadd@GCC_4.1.0 1:4.1.1
+ __gcc_qdiv@GCC_4.1.0 1:4.1.1
+ __gcc_qmul@GCC_4.1.0 1:4.1.1
+ __gcc_qsub@GCC_4.1.0 1:4.1.1
+ __gedf2@GCC_3.0 1:4.1.1
+ __gesf2@GCC_3.0 1:4.1.1
+ __gtdf2@GCC_3.0 1:4.1.1
+ __gtsf2@GCC_3.0 1:4.1.1
+ __ledf2@GCC_3.0 1:4.1.1
+ __lesf2@GCC_3.0 1:4.1.1
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __ltdf2@GCC_3.0 1:4.1.1
+ __ltsf2@GCC_3.0 1:4.1.1
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldf3@GCC_3.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __mulsf3@GCC_3.0 1:4.1.1
+ __multc3@GCC_4.1.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __nedf2@GCC_3.0 1:4.1.1
+ __negdf2@GCC_3.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negsf2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __nesf2@GCC_3.0 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.1.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subdf3@GCC_3.0 1:4.1.1
+ __subsf3@GCC_3.0 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __trampoline_setup@GCC_3.4.2 1:4.1.1
+ __truncdfsf2@GCC_3.0 1:4.1.1
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unorddf2@GCC_3.3.4 1:4.1.1
+ __unordsf2@GCC_3.3.4 1:4.1.1
diff --git a/debian/libgcc1.symbols.ppc64 b/debian/libgcc1.symbols.ppc64
new file mode 100644
index 0000000..545b223
--- /dev/null
+++ b/debian/libgcc1.symbols.ppc64
@@ -0,0 +1,126 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.0.0 1:4.1.1
+ __divti3@GCC_3.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_3.0 1:4.1.1
+ __fixtfti@GCC_3.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_3.0 1:4.1.1
+ __fixunstfti@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_3.0 1:4.1.1
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_3.0 1:4.1.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.2.0 1:4.2.1
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __gcc_qadd@GCC_3.4.4 1:4.1.1
+ __gcc_qdiv@GCC_3.4.4 1:4.1.1
+ __gcc_qmul@GCC_3.4.4 1:4.1.1
+ __gcc_qsub@GCC_3.4.4 1:4.1.1
+ __lshrti3@GCC_3.0 1:4.1.1
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.0.0 1:4.1.1
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
+ _xlqadd@GCC_3.4 1:4.1.1
+ _xlqdiv@GCC_3.4 1:4.1.1
+ _xlqmul@GCC_3.4 1:4.1.1
+ _xlqsub@GCC_3.4 1:4.1.1
diff --git a/debian/libgcc1.symbols.s390 b/debian/libgcc1.symbols.s390
new file mode 100644
index 0000000..eafd72b
--- /dev/null
+++ b/debian/libgcc1.symbols.s390
@@ -0,0 +1,101 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.1.0@GCC_4.1.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.1.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.1.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.1.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.1.0 1:4.1.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.1.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.1.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
diff --git a/debian/libgcc1.symbols.s390x b/debian/libgcc1.symbols.s390x
new file mode 100644
index 0000000..fa98d74
--- /dev/null
+++ b/debian/libgcc1.symbols.s390x
@@ -0,0 +1,107 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.1.0@GCC_4.1.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.2@GLIBC_2.2 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.2 1:4.1.1
+ __deregister_frame_info@GLIBC_2.2 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.1.0 1:4.1.1
+ __divti3@GCC_3.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfti@GCC_4.1.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfti@GCC_4.1.0 1:4.1.1
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_4.1.0 1:4.1.1
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.2 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __lshrti3@GCC_3.0 1:4.1.1
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.1.0 1:4.1.1
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.1.0 1:4.1.1
+ __register_frame@GLIBC_2.2 1:4.1.1
+ __register_frame_info@GLIBC_2.2 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.2 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.2 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
diff --git a/debian/libgcc1.symbols.sh4 b/debian/libgcc1.symbols.sh4
new file mode 100644
index 0000000..c60cb8f
--- /dev/null
+++ b/debian/libgcc1.symbols.sh4
@@ -0,0 +1,127 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3.4@GCC_3.3.4 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GLIBC_2.2@GLIBC_2.2 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __adddf3@GCC_3.0 1:4.1.1
+ __addsf3@GCC_3.0 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.2 1:4.1.1
+ __deregister_frame_info@GLIBC_2.2 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdf3@GCC_3.0 1:4.1.1
+ __divdi3@GCC_3.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divsf3@GCC_3.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqdf2@GCC_3.0 1:4.1.1
+ __eqsf2@GCC_3.0 1:4.1.1
+ __extendsfdf2@GCC_3.0 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixdfsi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixsfsi@GCC_3.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatsidf@GCC_3.0 1:4.1.1
+ __floatsisf@GCC_3.0 1:4.1.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunsidf@GCC_4.2.0 1:4.2.1
+ __floatunsisf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.2 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __gedf2@GCC_3.0 1:4.1.1
+ __gesf2@GCC_3.0 1:4.1.1
+ __gtdf2@GCC_3.0 1:4.1.1
+ __gtsf2@GCC_3.0 1:4.1.1
+ __ledf2@GCC_3.0 1:4.1.1
+ __lesf2@GCC_3.0 1:4.1.1
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __ltdf2@GCC_3.0 1:4.1.1
+ __ltsf2@GCC_3.0 1:4.1.1
+ __moddi3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldf3@GCC_3.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __mulsf3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __nedf2@GCC_3.0 1:4.1.1
+ __negdf2@GCC_3.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negsf2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __nesf2@GCC_3.0 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.2 1:4.1.1
+ __register_frame_info@GLIBC_2.2 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.2 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.2 1:4.1.1
+ __subdf3@GCC_3.0 1:4.1.1
+ __subsf3@GCC_3.0 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __truncdfsf2@GCC_3.0 1:4.1.1
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GCC_3.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GCC_3.0 1:4.1.1
+ __unorddf2@GCC_3.3.4 1:4.1.1
+ __unordsf2@GCC_3.3.4 1:4.1.1
diff --git a/debian/libgcc1.symbols.sparc b/debian/libgcc1.symbols.sparc
new file mode 100644
index 0000000..b53759a
--- /dev/null
+++ b/debian/libgcc1.symbols.sparc
@@ -0,0 +1,102 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_LDBL_3.0@GCC_LDBL_3.0 1:4.2.1
+ GCC_LDBL_4.0.0@GCC_LDBL_4.0.0 1:4.2.1
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_LDBL_4.0.0 1:4.2.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_LDBL_3.0 1:4.2.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_LDBL_3.0 1:4.2.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_LDBL_3.0 1:4.2.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_LDBL_4.0.0 1:4.2.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_LDBL_4.0.0 1:4.2.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
diff --git a/debian/libgcc1.symbols.sparc64 b/debian/libgcc1.symbols.sparc64
new file mode 100644
index 0000000..e8c86be
--- /dev/null
+++ b/debian/libgcc1.symbols.sparc64
@@ -0,0 +1,106 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.2@GLIBC_2.2 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.2 1:4.1.1
+ __deregister_frame_info@GLIBC_2.2 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.0.0 1:4.1.1
+ __divti3@GCC_3.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfti@GCC_3.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfti@GCC_3.0 1:4.1.1
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_3.0 1:4.1.1
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.2 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __lshrti3@GCC_3.0 1:4.1.1
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.0.0 1:4.1.1
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.2 1:4.1.1
+ __register_frame_info@GLIBC_2.2 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.2 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.2 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
diff --git a/debian/libgcc2.symbols.m68k b/debian/libgcc2.symbols.m68k
new file mode 100644
index 0000000..1250895
--- /dev/null
+++ b/debian/libgcc2.symbols.m68k
@@ -0,0 +1,157 @@
+libgcc_s.so.2 libgcc2 #MINVER#
+ GCC_3.0@GCC_3.0 4.2.1
+ GCC_3.3.1@GCC_3.3.1 4.2.1
+ GCC_3.3.4@GCC_3.3.4 4.4.5
+ GCC_3.3@GCC_3.3 4.2.1
+ GCC_3.4.2@GCC_3.4.2 4.2.1
+ GCC_3.4@GCC_3.4 4.2.1
+ GCC_4.0.0@GCC_4.0.0 4.2.1
+ GCC_4.2.0@GCC_4.2.0 4.2.1
+ GCC_4.3.0@GCC_4.3.0 4.3.0
+ GLIBC_2.0@GLIBC_2.0 4.2.1
+ _Unwind_Backtrace@GCC_3.3 4.2.1
+ _Unwind_DeleteException@GCC_3.0 4.2.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 4.2.1
+ _Unwind_Find_FDE@GCC_3.0 4.2.1
+ _Unwind_ForcedUnwind@GCC_3.0 4.2.1
+ _Unwind_GetCFA@GCC_3.3 4.2.1
+ _Unwind_GetDataRelBase@GCC_3.0 4.2.1
+ _Unwind_GetGR@GCC_3.0 4.2.1
+ _Unwind_GetIP@GCC_3.0 4.2.1
+ _Unwind_GetIPInfo@GCC_4.2.0 4.2.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 4.2.1
+ _Unwind_GetRegionStart@GCC_3.0 4.2.1
+ _Unwind_GetTextRelBase@GCC_3.0 4.2.1
+ _Unwind_RaiseException@GCC_3.0 4.2.1
+ _Unwind_Resume@GCC_3.0 4.2.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 4.2.1
+ _Unwind_SetGR@GCC_3.0 4.2.1
+ _Unwind_SetIP@GCC_3.0 4.2.1
+ __absvdi2@GCC_3.0 4.2.1
+ __absvsi2@GCC_3.0 4.2.1
+ __adddf3@GCC_3.0 4.4.5
+ __addsf3@GCC_3.0 4.4.5
+ __addvdi3@GCC_3.0 4.2.1
+ __addvsi3@GCC_3.0 4.2.1
+ __addxf3@GCC_3.0 4.4.5
+ __ashldi3@GCC_3.0 4.2.1
+ __ashrdi3@GCC_3.0 4.2.1
+ __bswapdi2@GCC_4.3.0 4.3.0
+ __bswapsi2@GCC_4.3.0 4.3.0
+ __clear_cache@GCC_3.0 4.2.1
+ __clzdi2@GCC_3.4 4.2.1
+ __clzsi2@GCC_3.4 4.2.1
+ __cmpdi2@GCC_3.0 4.2.1
+ __ctzdi2@GCC_3.4 4.2.1
+ __ctzsi2@GCC_3.4 4.2.1
+ __deregister_frame@GLIBC_2.0 4.2.1
+ __deregister_frame_info@GLIBC_2.0 4.2.1
+ __deregister_frame_info_bases@GCC_3.0 4.2.1
+ __divdc3@GCC_4.0.0 4.2.1
+ __divdf3@GCC_3.0 4.4.5
+ __divdi3@GLIBC_2.0 4.2.1
+ __divsc3@GCC_4.0.0 4.2.1
+ __divsf3@GCC_3.0 4.4.5
+ __divsi3@GCC_3.0 4.4.5
+ __divxc3@GCC_4.0.0 4.2.1
+ __divxf3@GCC_3.0 4.4.5
+ __emutls_get_address@GCC_4.3.0 4.3.0
+ __emutls_register_common@GCC_4.3.0 4.3.0
+ __enable_execute_stack@GCC_3.4.2 4.2.1
+ __eqdf2@GCC_3.0 4.4.5
+ __eqsf2@GCC_3.0 4.4.5
+ __eqxf2@GCC_3.0 4.4.5
+ __extenddfxf2@GCC_3.0 4.4.5
+ __extendsfdf2@GCC_3.0 4.4.5
+ __extendsfxf2@GCC_3.0 4.4.5
+ __ffsdi2@GCC_3.0 4.2.1
+ __ffssi2@GCC_4.3.0 4.3.0
+ __fixdfdi@GCC_3.0 4.2.1
+ __fixdfsi@GCC_3.0 4.4.5
+ __fixsfdi@GCC_3.0 4.2.1
+ __fixsfsi@GCC_3.0 4.4.5
+ __fixunsdfdi@GCC_3.0 4.2.1
+ __fixunsdfsi@GCC_3.0 4.2.1
+ __fixunssfdi@GCC_3.0 4.2.1
+ __fixunssfsi@GCC_3.0 4.2.1
+ __fixunsxfdi@GCC_3.0 4.2.1
+ __fixunsxfsi@GCC_3.0 4.2.1
+ __fixxfdi@GCC_3.0 4.2.1
+ __fixxfsi@GCC_3.0 4.4.5
+ __floatdidf@GCC_3.0 4.2.1
+ __floatdisf@GCC_3.0 4.2.1
+ __floatdixf@GCC_3.0 4.2.1
+ __floatsidf@GCC_3.0 4.4.5
+ __floatsisf@GCC_3.0 4.4.5
+ __floatsixf@GCC_3.0 4.4.5
+ __floatundidf@GCC_4.2.0 4.2.1
+ __floatundisf@GCC_4.2.0 4.2.1
+ __floatundixf@GCC_4.2.0 4.2.1
+ __floatunsidf@GCC_4.2.0 4.4.5
+ __floatunsisf@GCC_4.2.0 4.4.5
+ __floatunsixf@GCC_4.2.0 4.4.5
+ __frame_state_for@GLIBC_2.0 4.2.1
+ __gcc_personality_v0@GCC_3.3.1 4.2.1
+ __gedf2@GCC_3.0 4.4.5
+ __gesf2@GCC_3.0 4.4.5
+ __gexf2@GCC_3.0 4.4.5
+ __gtdf2@GCC_3.0 4.4.5
+ __gtsf2@GCC_3.0 4.4.5
+ __gtxf2@GCC_3.0 4.4.5
+ __ledf2@GCC_3.0 4.4.5
+ __lesf2@GCC_3.0 4.4.5
+ __lexf2@GCC_3.0 4.4.5
+ __lshrdi3@GCC_3.0 4.2.1
+ __ltdf2@GCC_3.0 4.4.5
+ __ltsf2@GCC_3.0 4.4.5
+ __ltxf2@GCC_3.0 4.4.5
+ __moddi3@GLIBC_2.0 4.2.1
+ __modsi3@GCC_3.0 4.4.5
+ __muldc3@GCC_4.0.0 4.2.1
+ __muldf3@GCC_3.0 4.4.5
+ __muldi3@GCC_3.0 4.2.1
+ __mulsc3@GCC_4.0.0 4.2.1
+ __mulsf3@GCC_3.0 4.4.5
+ __mulsi3@GCC_3.0 4.4.5
+ __mulvdi3@GCC_3.0 4.2.1
+ __mulvsi3@GCC_3.0 4.2.1
+ __mulxc3@GCC_4.0.0 4.2.1
+ __mulxf3@GCC_3.0 4.4.5
+ __nedf2@GCC_3.0 4.4.5
+ __negdf2@GCC_3.0 4.4.5
+ __negdi2@GCC_3.0 4.2.1
+ __negsf2@GCC_3.0 4.4.5
+ __negvdi2@GCC_3.0 4.2.1
+ __negvsi2@GCC_3.0 4.2.1
+ __negxf2@GCC_3.0 4.4.5
+ __nesf2@GCC_3.0 4.4.5
+ __nexf2@GCC_3.0 4.4.5
+ __paritydi2@GCC_3.4 4.2.1
+ __paritysi2@GCC_3.4 4.2.1
+ __popcountdi2@GCC_3.4 4.2.1
+ __popcountsi2@GCC_3.4 4.2.1
+ __powidf2@GCC_4.0.0 4.2.1
+ __powisf2@GCC_4.0.0 4.2.1
+ __powixf2@GCC_4.0.0 4.2.1
+ __register_frame@GLIBC_2.0 4.2.1
+ __register_frame_info@GLIBC_2.0 4.2.1
+ __register_frame_info_bases@GCC_3.0 4.2.1
+ __register_frame_info_table@GLIBC_2.0 4.2.1
+ __register_frame_info_table_bases@GCC_3.0 4.2.1
+ __register_frame_table@GLIBC_2.0 4.2.1
+ __subdf3@GCC_3.0 4.4.5
+ __subsf3@GCC_3.0 4.4.5
+ __subvdi3@GCC_3.0 4.2.1
+ __subvsi3@GCC_3.0 4.2.1
+ __subxf3@GCC_3.0 4.4.5
+ __truncdfsf2@GCC_3.0 4.4.5
+ __truncxfdf2@GCC_3.0 4.4.5
+ __truncxfsf2@GCC_3.0 4.4.5
+ __ucmpdi2@GCC_3.0 4.2.1
+ __udivdi3@GLIBC_2.0 4.2.1
+ __udivmoddi4@GCC_3.0 4.2.1
+ __udivsi3@GCC_3.0 4.4.5
+ __umoddi3@GLIBC_2.0 4.2.1
+ __umodsi3@GCC_3.0 4.4.5
+ __unorddf2@GCC_3.3.4 4.4.5
+ __unordsf2@GCC_3.3.4 4.4.5
diff --git a/debian/libgcc4.symbols.hppa b/debian/libgcc4.symbols.hppa
new file mode 100644
index 0000000..f5220f2
--- /dev/null
+++ b/debian/libgcc4.symbols.hppa
@@ -0,0 +1,93 @@
+libgcc_s.so.4 libgcc4 #MINVER#
+ GCC_3.0@GCC_3.0 4.1.1
+ GCC_3.3.1@GCC_3.3.1 4.1.1
+ GCC_3.3@GCC_3.3 4.1.1
+ GCC_3.4.2@GCC_3.4.2 4.1.1
+ GCC_3.4@GCC_3.4 4.1.1
+ GCC_4.0.0@GCC_4.0.0 4.1.1
+ GCC_4.2.0@GCC_4.2.0 4.1.1
+ GCC_4.3.0@GCC_4.3.0 4.3
+ GLIBC_2.0@GLIBC_2.0 4.1.1
+ _Unwind_Backtrace@GCC_3.3 4.1.1
+ _Unwind_DeleteException@GCC_3.0 4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 4.1.1
+ _Unwind_Find_FDE@GCC_3.0 4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 4.1.1
+ _Unwind_GetCFA@GCC_3.3 4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 4.1.1
+ _Unwind_GetGR@GCC_3.0 4.1.1
+ _Unwind_GetIP@GCC_3.0 4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 4.1.1
+ _Unwind_RaiseException@GCC_3.0 4.1.1
+ _Unwind_Resume@GCC_3.0 4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 4.1.1
+ _Unwind_SetGR@GCC_3.0 4.1.1
+ _Unwind_SetIP@GCC_3.0 4.1.1
+ __absvdi2@GCC_3.0 4.1.1
+ __absvsi2@GCC_3.0 4.1.1
+ __addvdi3@GCC_3.0 4.1.1
+ __addvsi3@GCC_3.0 4.1.1
+ __ashldi3@GCC_3.0 4.1.1
+ __ashrdi3@GCC_3.0 4.1.1
+ __bswapdi2@GCC_4.3.0 4.3
+ __bswapsi2@GCC_4.3.0 4.3
+ __clear_cache@GCC_3.0 4.1.1
+ __clzdi2@GCC_3.4 4.1.1
+ __clzsi2@GCC_3.4 4.1.1
+ __cmpdi2@GCC_3.0 4.1.1
+ __ctzdi2@GCC_3.4 4.1.1
+ __ctzsi2@GCC_3.4 4.1.1
+ __deregister_frame@GLIBC_2.0 4.1.1
+ __deregister_frame_info@GLIBC_2.0 4.1.1
+ __deregister_frame_info_bases@GCC_3.0 4.1.1
+ __divdc3@GCC_4.0.0 4.1.1
+ __divdi3@GLIBC_2.0 4.1.1
+ __divsc3@GCC_4.0.0 4.1.1
+ __emutls_get_address@GCC_4.3.0 4.3
+ __emutls_register_common@GCC_4.3.0 4.3
+ __enable_execute_stack@GCC_3.4.2 4.1.1
+ __ffsdi2@GCC_3.0 4.1.1
+ __ffssi2@GCC_4.3.0 4.3
+ __fixdfdi@GCC_3.0 4.1.1
+ __fixsfdi@GCC_3.0 4.1.1
+ __fixunsdfdi@GCC_3.0 4.1.1
+ __fixunsdfsi@GCC_3.0 4.1.1
+ __fixunssfdi@GCC_3.0 4.1.1
+ __fixunssfsi@GCC_3.0 4.1.1
+ __floatdidf@GCC_3.0 4.1.1
+ __floatdisf@GCC_3.0 4.1.1
+ __floatundidf@GCC_4.2.0 4.2.1
+ __floatundisf@GCC_4.2.0 4.2.1
+ __frame_state_for@GLIBC_2.0 4.1.1
+ __gcc_personality_v0@GCC_3.3.1 4.1.1
+ __lshrdi3@GCC_3.0 4.1.1
+ __moddi3@GLIBC_2.0 4.1.1
+ __muldc3@GCC_4.0.0 4.1.1
+ __muldi3@GCC_3.0 4.1.1
+ __mulsc3@GCC_4.0.0 4.1.1
+ __mulvdi3@GCC_3.0 4.1.1
+ __mulvsi3@GCC_3.0 4.1.1
+ __negdi2@GCC_3.0 4.1.1
+ __negvdi2@GCC_3.0 4.1.1
+ __negvsi2@GCC_3.0 4.1.1
+ __paritydi2@GCC_3.4 4.1.1
+ __paritysi2@GCC_3.4 4.1.1
+ __popcountdi2@GCC_3.4 4.1.1
+ __popcountsi2@GCC_3.4 4.1.1
+ __powidf2@GCC_4.0.0 4.1.1
+ __powisf2@GCC_4.0.0 4.1.1
+ __register_frame@GLIBC_2.0 4.1.1
+ __register_frame_info@GLIBC_2.0 4.1.1
+ __register_frame_info_bases@GCC_3.0 4.1.1
+ __register_frame_info_table@GLIBC_2.0 4.1.1
+ __register_frame_info_table_bases@GCC_3.0 4.1.1
+ __register_frame_table@GLIBC_2.0 4.1.1
+ __subvdi3@GCC_3.0 4.1.1
+ __subvsi3@GCC_3.0 4.1.1
+ __ucmpdi2@GCC_3.0 4.1.1
+ __udivdi3@GLIBC_2.0 4.1.1
+ __udivmoddi4@GCC_3.0 4.1.1
+ __umoddi3@GLIBC_2.0 4.1.1
diff --git a/debian/libgccLC.postinst b/debian/libgccLC.postinst
new file mode 100644
index 0000000..36abb94
--- /dev/null
+++ b/debian/libgccLC.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+ configure)
+ docdir=/usr/share/doc/libgcc@LC@
+ if [ -d $docdir ] && [ ! -h $docdir ]; then
+ rm -rf $docdir
+ ln -s gcc-@BV@-base $docdir
+ fi
+esac
+
+#DEBHELPER#
diff --git a/debian/libgcj-common.postinst b/debian/libgcj-common.postinst
new file mode 100644
index 0000000..de6d589
--- /dev/null
+++ b/debian/libgcj-common.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+ configure)
+ docdir=/usr/share/doc/libgcj-common
+ if [ -d $docdir ] && [ ! -h $docdir ]; then
+ rm -rf $docdir
+ ln -s gcj-@BV@-base $docdir
+ fi
+esac
+
+#DEBHELPER#
diff --git a/debian/libgcj-common.preinst b/debian/libgcj-common.preinst
new file mode 100644
index 0000000..510299f
--- /dev/null
+++ b/debian/libgcj-common.preinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+ upgrade|install)
+ if [ -n "$2" ] && [ -h /usr/share/doc/libgcj-common ] \
+ && dpkg --compare-versions "$2" lt 1:4.0.2-10
+ then
+ rm -f /usr/share/doc/libgcj-common
+ fi
+esac
+
+#DEBHELPER#
diff --git a/debian/libgcj-doc.doc-base b/debian/libgcj-doc.doc-base
new file mode 100644
index 0000000..c58c9b9
--- /dev/null
+++ b/debian/libgcj-doc.doc-base
@@ -0,0 +1,10 @@
+Document: libgcj-doc
+Title: The GNU LibGCJ Classpath library
+Author: Various
+Abstract: Autogenerated documentation describing the libgcj
+ library (GCC 4.6), based on the classpath library.
+Section: Programming/Java
+
+Format: html
+Index: /usr/share/doc/gcj-4.6-base/api/index.html
+Files: /usr/share/doc/gcj-4.6-base/api/*.html
diff --git a/debian/libgcjGCJ-awt.overrides b/debian/libgcjGCJ-awt.overrides
new file mode 100644
index 0000000..c93ae10
--- /dev/null
+++ b/debian/libgcjGCJ-awt.overrides
@@ -0,0 +1,2 @@
+# pick up the exact version, in case another gcj version is installed
+libgcj@GCJ@-awt binary: binary-or-shlib-defines-rpath
diff --git a/debian/libgcjGCJ-dev.overrides b/debian/libgcjGCJ-dev.overrides
new file mode 100644
index 0000000..e1a110d
--- /dev/null
+++ b/debian/libgcjGCJ-dev.overrides
@@ -0,0 +1 @@
+libgcj@GCJ@-dev binary: library-not-linked-against-libc
diff --git a/debian/libgcjGCJ.overrides b/debian/libgcjGCJ.overrides
new file mode 100644
index 0000000..b9600ae
--- /dev/null
+++ b/debian/libgcjGCJ.overrides
@@ -0,0 +1,9 @@
+# pick up the exact version, in case another gcj version is installed
+libgcj@GCJ@ binary: binary-or-shlib-defines-rpath
+
+# intended
+libgcj@GCJ@ binary: unused-shlib-entry-in-control-file
+libgcj@GCJ@ binary: shlibs-declares-dependency-on-other-package
+
+# keep patched ltdl copy
+libgcj@GCJ@ binary: embedded-library
diff --git a/debian/libgcjLGCJ.postinst b/debian/libgcjLGCJ.postinst
new file mode 100644
index 0000000..cbde44c
--- /dev/null
+++ b/debian/libgcjLGCJ.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+ configure)
+ docdir=/usr/share/doc/libgcj@GCJ@
+ if [ -d $docdir ] && [ ! -h $docdir ]; then
+ rm -rf /usr/share/doc/libgcj@GCJ@
+ ln -s gcj-@BV@-base /usr/share/doc/libgcj@GCJ@
+ fi
+esac
+
+#DEBHELPER#
diff --git a/debian/libgcjLGCJ.postrm b/debian/libgcjLGCJ.postrm
new file mode 100644
index 0000000..2de6718
--- /dev/null
+++ b/debian/libgcjLGCJ.postrm
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+ remove|purge)
+ # only purge if no other library is installed.
+ if [ -z "$(ls /usr/lib/libgcj.so.@GCJ@* 2>/dev/null)" ]; then
+ rm -f /var/lib/gcj-@BV@/classmap.db
+ rmdir --ignore-fail-on-non-empty /var/lib/gcj-@BV@ 2>/dev/null || true
+ fi
+esac
+
+#DEBHELPER#
diff --git a/debian/libgfortran3.symbols.10 b/debian/libgfortran3.symbols.10
new file mode 100644
index 0000000..2e2f1b8
--- /dev/null
+++ b/debian/libgfortran3.symbols.10
@@ -0,0 +1,98 @@
+ __iso_c_binding_c_f_pointer_c10@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_r10@GFORTRAN_1.0 4.3
+ _gfortran_arandom_r10@GFORTRAN_1.0 4.3
+ _gfortran_bessel_jn_r10@GFORTRAN_1.4 4.6
+ _gfortran_bessel_yn_r10@GFORTRAN_1.4 4.6
+ _gfortran_cpu_time_10@GFORTRAN_1.0 4.3
+ _gfortran_erfc_scaled_r10@GFORTRAN_1.1 4.4.0
+ _gfortran_exponent_r10@GFORTRAN_1.0 4.3
+ _gfortran_fraction_r10@GFORTRAN_1.0 4.3
+ _gfortran_matmul_c10@GFORTRAN_1.0 4.3
+ _gfortran_matmul_r10@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_maxval_r10@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_minval_r10@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_r10@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_mminval_r10@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_c10@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_r10@GFORTRAN_1.0 4.3
+ _gfortran_msum_c10@GFORTRAN_1.0 4.3
+ _gfortran_msum_r10@GFORTRAN_1.0 4.3
+ _gfortran_nearest_r10@GFORTRAN_1.0 4.3
+ _gfortran_pow_c10_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_c10_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_r10_i8@GFORTRAN_1.0 4.3
+ _gfortran_product_c10@GFORTRAN_1.0 4.3
+ _gfortran_product_r10@GFORTRAN_1.0 4.3
+ _gfortran_random_r10@GFORTRAN_1.0 4.3
+ _gfortran_reshape_c10@GFORTRAN_1.0 4.3
+ _gfortran_reshape_r10@GFORTRAN_1.0 4.3
+ _gfortran_rrspacing_r10@GFORTRAN_1.0 4.3
+ _gfortran_set_exponent_r10@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_r10@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_sminval_r10@GFORTRAN_1.0 4.3
+ _gfortran_spacing_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_c10@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__acos_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__acosh_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__aimag_c10@GFORTRAN_1.0 4.3
+ _gfortran_specific__aint_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__anint_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__asin_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__asinh_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan2_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__atanh_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__conjg_10@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_c10@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__cosh_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_c10@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__log10_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_c10@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_4_10@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_8_10@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_c10@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__sinh_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_c10@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__tan_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__tanh_r10@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_c10@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_r10@GFORTRAN_1.0 4.3
+ _gfortran_ssum_c10@GFORTRAN_1.0 4.3
+ _gfortran_ssum_r10@GFORTRAN_1.0 4.3
+ _gfortran_sum_c10@GFORTRAN_1.0 4.3
+ _gfortran_sum_r10@GFORTRAN_1.0 4.3
+ _gfortran_transpose_c10@GFORTRAN_1.0 4.3
+ _gfortran_transpose_r10@GFORTRAN_1.0 4.3
diff --git a/debian/libgfortran3.symbols.16 b/debian/libgfortran3.symbols.16
new file mode 100644
index 0000000..ea8c84f
--- /dev/null
+++ b/debian/libgfortran3.symbols.16
@@ -0,0 +1,199 @@
+ __iso_c_binding_c_f_pointer_i16@GFORTRAN_1.0 4.3
+ _gfortran_all_l16@GFORTRAN_1.0 4.3
+ _gfortran_any_l16@GFORTRAN_1.0 4.3
+ _gfortran_count_16_l@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_16@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift0_16_char4@GFORTRAN_1.4 4.6
+ _gfortran_cshift0_16_char@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift1_16@GFORTRAN_1.0 4.3
+ _gfortran_cshift1_16_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift1_16_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_16@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift0_16_char4@GFORTRAN_1.4 4.6
+ _gfortran_eoshift0_16_char@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift1_16@GFORTRAN_1.0 4.3
+ _gfortran_eoshift1_16_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift1_16_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_16@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift2_16_char4@GFORTRAN_1.4 4.6
+ _gfortran_eoshift2_16_char@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift3_16@GFORTRAN_1.0 4.3
+ _gfortran_eoshift3_16_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift3_16_char@GFORTRAN_1.0 4.3
+ _gfortran_iall_i16@GFORTRAN_1.4 4.6
+ _gfortran_iany_i16@GFORTRAN_1.4 4.6
+ _gfortran_iparity_i16@GFORTRAN_1.4 4.6
+ _gfortran_ishftc16@GFORTRAN_1.0 4.3
+ _gfortran_matmul_i16@GFORTRAN_1.0 4.3
+ _gfortran_matmul_l16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxval_i16@GFORTRAN_1.0 4.3
+ _gfortran_miall_i16@GFORTRAN_1.4 4.6
+ _gfortran_miany_i16@GFORTRAN_1.4 4.6
+ _gfortran_minloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_minval_i16@GFORTRAN_1.0 4.3
+ _gfortran_miparity_i16@GFORTRAN_1.4 4.6
+ _gfortran_mmaxloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminval_i16@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_i16@GFORTRAN_1.0 4.3
+ _gfortran_msum_i16@GFORTRAN_1.0 4.3
+ _gfortran_norm2_r10@GFORTRAN_1.4 4.6
+ _gfortran_parity_l16@GFORTRAN_1.4 4.6
+ _gfortran_pow_c10_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_c16_i16@GFORTRAN_1.0 4.6
+ _gfortran_pow_c16_i4@GFORTRAN_1.0 4.6
+ _gfortran_pow_c16_i8@GFORTRAN_1.0 4.6
+ _gfortran_pow_c4_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_c8_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_i16_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_i16_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_i16_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_i4_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_i8_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_r10_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_r16_i16@GFORTRAN_1.0 4.6
+ _gfortran_pow_r16_i4@GFORTRAN_1.0 4.6
+ _gfortran_pow_r16_i8@GFORTRAN_1.0 4.6
+ _gfortran_pow_r4_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_r8_i16@GFORTRAN_1.0 4.3
+ _gfortran_product_i16@GFORTRAN_1.0 4.3
+ _gfortran_reshape_16@GFORTRAN_1.0 4.3
+ _gfortran_shape_16@GFORTRAN_1.0 4.3
+ _gfortran_siall_i16@GFORTRAN_1.4 4.6
+ _gfortran_siany_i16@GFORTRAN_1.4 4.6
+ _gfortran_siparity_i16@GFORTRAN_1.4 4.6
+ _gfortran_smaxloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminval_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__char_1_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__index_1_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__len_1_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_16_10@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_16_16@GFORTRAN_1.0 4.6
+ _gfortran_specific__nint_16_4@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_16_8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_i16@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_i16@GFORTRAN_1.0 4.3
+ _gfortran_ssum_i16@GFORTRAN_1.0 4.3
+ _gfortran_sum_i16@GFORTRAN_1.0 4.3
+ _gfortran_transpose_i16@GFORTRAN_1.0 4.3
diff --git a/debian/libgfortran3.symbols.16.powerpc b/debian/libgfortran3.symbols.16.powerpc
new file mode 100644
index 0000000..ef8332b
--- /dev/null
+++ b/debian/libgfortran3.symbols.16.powerpc
@@ -0,0 +1,100 @@
+ __iso_c_binding_c_f_pointer_c16@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_r16@GFORTRAN_1.0 4.3
+ _gfortran_arandom_r16@GFORTRAN_1.0 4.3
+ _gfortran_bessel_jn_r16@GFORTRAN_1.4 4.6
+ _gfortran_bessel_yn_r16@GFORTRAN_1.4 4.6
+ _gfortran_cpu_time_16@GFORTRAN_1.0 4.3
+ _gfortran_erfc_scaled_r16@GFORTRAN_1.1 4.4.0
+ _gfortran_exponent_r16@GFORTRAN_1.0 4.3
+ _gfortran_fraction_r16@GFORTRAN_1.0 4.3
+ _gfortran_matmul_c16@GFORTRAN_1.0 4.3
+ _gfortran_matmul_r16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_maxval_r16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_minval_r16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_r16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_mminval_r16@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_c16@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_r16@GFORTRAN_1.0 4.3
+ _gfortran_msum_c16@GFORTRAN_1.0 4.3
+ _gfortran_msum_r16@GFORTRAN_1.0 4.3
+ _gfortran_nearest_r16@GFORTRAN_1.0 4.3
+ _gfortran_norm2_r16@GFORTRAN_1.4 4.6
+ _gfortran_pow_c16_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_c16_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_r16_i4@GFORTRAN_1.0 4.6
+ _gfortran_pow_r16_i8@GFORTRAN_1.0 4.3
+ _gfortran_product_c16@GFORTRAN_1.0 4.3
+ _gfortran_product_r16@GFORTRAN_1.0 4.3
+ _gfortran_random_r16@GFORTRAN_1.0 4.3
+ _gfortran_reshape_c16@GFORTRAN_1.0 4.3
+ _gfortran_reshape_r16@GFORTRAN_1.0 4.3
+ _gfortran_rrspacing_r16@GFORTRAN_1.0 4.3
+ _gfortran_set_exponent_r16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_r16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_sminval_r16@GFORTRAN_1.0 4.3
+ _gfortran_spacing_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_c16@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__acos_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__acosh_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__aimag_c16@GFORTRAN_1.0 4.3
+ _gfortran_specific__aint_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__anint_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__asin_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__asinh_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan2_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__atanh_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__conjg_16@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_c16@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__cosh_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_c16@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__log10_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_c16@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_4_16@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_8_16@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_c16@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__sinh_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_c16@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__tan_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__tanh_r16@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_c16@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_r16@GFORTRAN_1.0 4.3
+ _gfortran_ssum_c16@GFORTRAN_1.0 4.3
+ _gfortran_ssum_r16@GFORTRAN_1.0 4.3
+ _gfortran_sum_c16@GFORTRAN_1.0 4.3
+ _gfortran_sum_r16@GFORTRAN_1.0 4.3
+ _gfortran_transpose_c16@GFORTRAN_1.0 4.3
+ _gfortran_transpose_r16@GFORTRAN_1.0 4.3
diff --git a/debian/libgfortran3.symbols.16.powerpc64 b/debian/libgfortran3.symbols.16.powerpc64
new file mode 100644
index 0000000..f231c34
--- /dev/null
+++ b/debian/libgfortran3.symbols.16.powerpc64
@@ -0,0 +1,191 @@
+ __iso_c_binding_c_f_pointer_i16@GFORTRAN_1.0 4.3
+ _gfortran_all_l16@GFORTRAN_1.0 4.3
+ _gfortran_any_l16@GFORTRAN_1.0 4.3
+ _gfortran_count_16_l@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_16@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift0_16_char4@GFORTRAN_1.4 4.6
+ _gfortran_cshift0_16_char@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift1_16@GFORTRAN_1.0 4.3
+ _gfortran_cshift1_16_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift1_16_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_16@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift0_16_char4@GFORTRAN_1.4 4.6
+ _gfortran_eoshift0_16_char@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift1_16@GFORTRAN_1.0 4.3
+ _gfortran_eoshift1_16_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift1_16_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_16@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift2_16_char4@GFORTRAN_1.4 4.6
+ _gfortran_eoshift2_16_char@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift3_16@GFORTRAN_1.0 4.3
+ _gfortran_eoshift3_16_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift3_16_char@GFORTRAN_1.0 4.3
+ _gfortran_iall_i16@GFORTRAN_1.4 4.6
+ _gfortran_iany_i16@GFORTRAN_1.4 4.6
+ _gfortran_iparity_i16@GFORTRAN_1.4 4.6
+ _gfortran_ishftc16@GFORTRAN_1.0 4.3
+ _gfortran_matmul_i16@GFORTRAN_1.0 4.3
+ _gfortran_matmul_l16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxval_i16@GFORTRAN_1.0 4.3
+ _gfortran_miall_i16@GFORTRAN_1.4 4.6
+ _gfortran_miany_i16@GFORTRAN_1.4 4.6
+ _gfortran_minloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_minval_i16@GFORTRAN_1.0 4.3
+ _gfortran_miparity_i16@GFORTRAN_1.4 4.6
+ _gfortran_mmaxloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminval_i16@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_i16@GFORTRAN_1.0 4.3
+ _gfortran_msum_i16@GFORTRAN_1.0 4.3
+ _gfortran_parity_l16@GFORTRAN_1.4 4.6
+ _gfortran_pow_c16_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_c4_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_c8_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_i16_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_i16_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_i16_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_i4_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_i8_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_r16_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_r4_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_r8_i16@GFORTRAN_1.0 4.3
+ _gfortran_product_i16@GFORTRAN_1.0 4.3
+ _gfortran_reshape_16@GFORTRAN_1.0 4.3
+ _gfortran_shape_16@GFORTRAN_1.0 4.3
+ _gfortran_siall_i16@GFORTRAN_1.4 4.6
+ _gfortran_siany_i16@GFORTRAN_1.4 4.6
+ _gfortran_siparity_i16@GFORTRAN_1.4 4.6
+ _gfortran_smaxloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminval_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__char_1_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__index_1_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__len_1_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_16_16@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_16_4@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_16_8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_i16@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_i16@GFORTRAN_1.0 4.3
+ _gfortran_ssum_i16@GFORTRAN_1.0 4.3
+ _gfortran_sum_i16@GFORTRAN_1.0 4.3
+ _gfortran_transpose_i16@GFORTRAN_1.0 4.3
diff --git a/debian/libgfortran3.symbols.64 b/debian/libgfortran3.symbols.64
new file mode 100644
index 0000000..869a95a
--- /dev/null
+++ b/debian/libgfortran3.symbols.64
@@ -0,0 +1,2 @@
+ _gfortran_clz128@GFORTRAN_1.2 4.4.0
+ _gfortran_ctz128@GFORTRAN_1.2 4.4.0
diff --git a/debian/libgfortran3.symbols.alpha b/debian/libgfortran3.symbols.alpha
new file mode 100644
index 0000000..87e8e77
--- /dev/null
+++ b/debian/libgfortran3.symbols.alpha
@@ -0,0 +1,5 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
diff --git a/debian/libgfortran3.symbols.amd64 b/debian/libgfortran3.symbols.amd64
new file mode 100644
index 0000000..16e07bb
--- /dev/null
+++ b/debian/libgfortran3.symbols.amd64
@@ -0,0 +1,7 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
+#include "libgfortran3.symbols.16"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.qf"
+#include "libgfortran3.symbols.64"
diff --git a/debian/libgfortran3.symbols.armel b/debian/libgfortran3.symbols.armel
new file mode 100644
index 0000000..1baa35e
--- /dev/null
+++ b/debian/libgfortran3.symbols.armel
@@ -0,0 +1,2 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
diff --git a/debian/libgfortran3.symbols.armhf b/debian/libgfortran3.symbols.armhf
new file mode 100644
index 0000000..1baa35e
--- /dev/null
+++ b/debian/libgfortran3.symbols.armhf
@@ -0,0 +1,2 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
diff --git a/debian/libgfortran3.symbols.common b/debian/libgfortran3.symbols.common
new file mode 100644
index 0000000..99a4119
--- /dev/null
+++ b/debian/libgfortran3.symbols.common
@@ -0,0 +1,803 @@
+ F2C_1.0@F2C_1.0 4.3
+ GFORTRAN_1.0@GFORTRAN_1.0 4.3
+ GFORTRAN_1.1@GFORTRAN_1.1 4.4.0
+ GFORTRAN_1.2@GFORTRAN_1.2 4.4.0
+ GFORTRAN_1.3@GFORTRAN_1.3 4.6
+ GFORTRAN_1.4@GFORTRAN_1.4 4.6
+ GFORTRAN_C99_1.0@GFORTRAN_C99_1.0 4.3
+ GFORTRAN_C99_1.1@GFORTRAN_C99_1.1 4.5
+ __iso_c_binding_c_f_pointer@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_c4@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_c8@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_d0@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_i1@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_i2@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_i4@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_i8@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_l1@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_l2@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_l4@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_l8@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_r4@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_r8@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_s0@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_u0@GFORTRAN_1.0 4.3
+ _gfortran_abort@GFORTRAN_1.0 4.3
+ _gfortran_access_func@GFORTRAN_1.0 4.3
+ _gfortran_adjustl@GFORTRAN_1.0 4.3
+ _gfortran_adjustl_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_adjustr@GFORTRAN_1.0 4.3
+ _gfortran_adjustr_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_alarm_sub_i4@GFORTRAN_1.0 4.3
+ _gfortran_alarm_sub_i8@GFORTRAN_1.0 4.3
+ _gfortran_alarm_sub_int_i4@GFORTRAN_1.0 4.3
+ _gfortran_alarm_sub_int_i8@GFORTRAN_1.0 4.3
+ _gfortran_all_l1@GFORTRAN_1.0 4.3
+ _gfortran_all_l2@GFORTRAN_1.0 4.3
+ _gfortran_all_l4@GFORTRAN_1.0 4.3
+ _gfortran_all_l8@GFORTRAN_1.0 4.3
+ _gfortran_any_l1@GFORTRAN_1.0 4.3
+ _gfortran_any_l2@GFORTRAN_1.0 4.3
+ _gfortran_any_l4@GFORTRAN_1.0 4.3
+ _gfortran_any_l8@GFORTRAN_1.0 4.3
+ _gfortran_arandom_r4@GFORTRAN_1.0 4.3
+ _gfortran_arandom_r8@GFORTRAN_1.0 4.3
+ _gfortran_associated@GFORTRAN_1.0 4.3
+ _gfortran_bessel_jn_r4@GFORTRAN_1.4 4.6
+ _gfortran_bessel_jn_r8@GFORTRAN_1.4 4.6
+ _gfortran_bessel_yn_r4@GFORTRAN_1.4 4.6
+ _gfortran_bessel_yn_r8@GFORTRAN_1.4 4.6
+ _gfortran_chdir_i4@GFORTRAN_1.0 4.3
+ _gfortran_chdir_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_chdir_i8@GFORTRAN_1.0 4.3
+ _gfortran_chdir_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_chmod_func@GFORTRAN_1.0 4.3
+ _gfortran_chmod_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_chmod_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_compare_string@GFORTRAN_1.0 4.3
+ _gfortran_compare_string_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_concat_string@GFORTRAN_1.0 4.3
+ _gfortran_concat_string_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_convert_char1_to_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_convert_char4_to_char1@GFORTRAN_1.1 4.4.0
+ _gfortran_count_1_l@GFORTRAN_1.0 4.3
+ _gfortran_count_2_l@GFORTRAN_1.0 4.3
+ _gfortran_count_4_l@GFORTRAN_1.0 4.3
+ _gfortran_count_8_l@GFORTRAN_1.0 4.3
+ _gfortran_cpu_time_4@GFORTRAN_1.0 4.3
+ _gfortran_cpu_time_8@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_1@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_1_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift0_1_char@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_2@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_2_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift0_2_char@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_4@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_4_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift0_4_char@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_8@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_8_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift0_8_char@GFORTRAN_1.0 4.3
+ _gfortran_cshift1_4@GFORTRAN_1.0 4.3
+ _gfortran_cshift1_4_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift1_4_char@GFORTRAN_1.0 4.3
+ _gfortran_cshift1_8@GFORTRAN_1.0 4.3
+ _gfortran_cshift1_8_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift1_8_char@GFORTRAN_1.0 4.3
+ _gfortran_ctime@GFORTRAN_1.0 4.3
+ _gfortran_ctime_sub@GFORTRAN_1.0 4.3
+ _gfortran_date_and_time@GFORTRAN_1.0 4.3
+ _gfortran_dtime@GFORTRAN_1.0 4.3
+ _gfortran_dtime_sub@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_1@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_1_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift0_1_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_2@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_2_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift0_2_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_4@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_4_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift0_4_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_8@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_8_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift0_8_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift1_4@GFORTRAN_1.0 4.3
+ _gfortran_eoshift1_4_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift1_4_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift1_8@GFORTRAN_1.0 4.3
+ _gfortran_eoshift1_8_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift1_8_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_1@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_1_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift2_1_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_2@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_2_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift2_2_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_4@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_4_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift2_4_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_8@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_8_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift2_8_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift3_4@GFORTRAN_1.0 4.3
+ _gfortran_eoshift3_4_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift3_4_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift3_8@GFORTRAN_1.0 4.3
+ _gfortran_eoshift3_8_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift3_8_char@GFORTRAN_1.0 4.3
+ _gfortran_erfc_scaled_r4@GFORTRAN_1.1 4.4.0
+ _gfortran_erfc_scaled_r8@GFORTRAN_1.1 4.4.0
+ _gfortran_error_stop_numeric@GFORTRAN_1.4 4.6
+ _gfortran_error_stop_string@GFORTRAN_1.3 4.6
+ _gfortran_etime@GFORTRAN_1.0 4.3
+ _gfortran_etime_sub@GFORTRAN_1.0 4.3
+ _gfortran_execute_command_line_i4@GFORTRAN_1.1 4.6
+ _gfortran_execute_command_line_i8@GFORTRAN_1.1 4.6
+ _gfortran_exit_i4@GFORTRAN_1.0 4.3
+ _gfortran_exit_i8@GFORTRAN_1.0 4.3
+ _gfortran_exponent_r4@GFORTRAN_1.0 4.3
+ _gfortran_exponent_r8@GFORTRAN_1.0 4.3
+ _gfortran_f2c_specific__abs_c4@F2C_1.0 4.3
+ _gfortran_f2c_specific__abs_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__acos_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__acosh_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__aimag_c4@F2C_1.0 4.3
+ _gfortran_f2c_specific__aimag_c8@F2C_1.0 4.3
+ _gfortran_f2c_specific__aint_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__anint_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__asin_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__asinh_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__atan2_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__atan_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__atanh_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__conjg_4@F2C_1.0 4.3
+ _gfortran_f2c_specific__conjg_8@F2C_1.0 4.3
+ _gfortran_f2c_specific__cos_c4@F2C_1.0 4.3
+ _gfortran_f2c_specific__cos_c8@F2C_1.0 4.3
+ _gfortran_f2c_specific__cos_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__cosh_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__dim_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__exp_c4@F2C_1.0 4.3
+ _gfortran_f2c_specific__exp_c8@F2C_1.0 4.3
+ _gfortran_f2c_specific__exp_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__log10_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__log_c4@F2C_1.0 4.3
+ _gfortran_f2c_specific__log_c8@F2C_1.0 4.3
+ _gfortran_f2c_specific__log_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__mod_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__sign_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__sin_c4@F2C_1.0 4.3
+ _gfortran_f2c_specific__sin_c8@F2C_1.0 4.3
+ _gfortran_f2c_specific__sin_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__sinh_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__sqrt_c4@F2C_1.0 4.3
+ _gfortran_f2c_specific__sqrt_c8@F2C_1.0 4.3
+ _gfortran_f2c_specific__sqrt_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__tan_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__tanh_r4@F2C_1.0 4.3
+ _gfortran_fdate@GFORTRAN_1.0 4.3
+ _gfortran_fdate_sub@GFORTRAN_1.0 4.3
+ _gfortran_fget@GFORTRAN_1.0 4.3
+ _gfortran_fget_i1_sub@GFORTRAN_1.0 4.3
+ _gfortran_fget_i2_sub@GFORTRAN_1.0 4.3
+ _gfortran_fget_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_fget_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_fgetc@GFORTRAN_1.0 4.3
+ _gfortran_fgetc_i1_sub@GFORTRAN_1.0 4.3
+ _gfortran_fgetc_i2_sub@GFORTRAN_1.0 4.3
+ _gfortran_fgetc_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_fgetc_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_flush_i4@GFORTRAN_1.0 4.3
+ _gfortran_flush_i8@GFORTRAN_1.0 4.3
+ _gfortran_fnum_i4@GFORTRAN_1.0 4.3
+ _gfortran_fnum_i8@GFORTRAN_1.0 4.3
+ _gfortran_fput@GFORTRAN_1.0 4.3
+ _gfortran_fput_i1_sub@GFORTRAN_1.0 4.3
+ _gfortran_fput_i2_sub@GFORTRAN_1.0 4.3
+ _gfortran_fput_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_fput_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_fputc@GFORTRAN_1.0 4.3
+ _gfortran_fputc_i1_sub@GFORTRAN_1.0 4.3
+ _gfortran_fputc_i2_sub@GFORTRAN_1.0 4.3
+ _gfortran_fputc_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_fputc_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_fraction_r4@GFORTRAN_1.0 4.3
+ _gfortran_fraction_r8@GFORTRAN_1.0 4.3
+ _gfortran_free@GFORTRAN_1.0 4.3
+ _gfortran_fseek_sub@GFORTRAN_1.0 4.3
+ _gfortran_fstat_i4@GFORTRAN_1.0 4.3
+ _gfortran_fstat_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_fstat_i8@GFORTRAN_1.0 4.3
+ _gfortran_fstat_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_ftell@GFORTRAN_1.0 4.3
+ _gfortran_ftell_i1_sub@GFORTRAN_1.0 4.3
+ _gfortran_ftell_i2_sub@GFORTRAN_1.0 4.3
+ _gfortran_ftell_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_ftell_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_generate_error@GFORTRAN_1.0 4.3
+ _gfortran_gerror@GFORTRAN_1.0 4.3
+ _gfortran_get_command_argument_i4@GFORTRAN_1.0 4.3
+ _gfortran_get_command_argument_i8@GFORTRAN_1.0 4.3
+ _gfortran_get_command_i4@GFORTRAN_1.0 4.3
+ _gfortran_get_command_i8@GFORTRAN_1.0 4.3
+ _gfortran_get_environment_variable_i4@GFORTRAN_1.0 4.3
+ _gfortran_get_environment_variable_i8@GFORTRAN_1.0 4.3
+ _gfortran_getarg_i4@GFORTRAN_1.0 4.3
+ _gfortran_getarg_i8@GFORTRAN_1.0 4.3
+ _gfortran_getcwd@GFORTRAN_1.0 4.3
+ _gfortran_getcwd_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_getcwd_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_getenv@GFORTRAN_1.0 4.3
+ _gfortran_getgid@GFORTRAN_1.0 4.3
+ _gfortran_getlog@GFORTRAN_1.0 4.3
+ _gfortran_getpid@GFORTRAN_1.0 4.3
+ _gfortran_getuid@GFORTRAN_1.0 4.3
+ _gfortran_gmtime_i4@GFORTRAN_1.0 4.3
+ _gfortran_gmtime_i8@GFORTRAN_1.0 4.3
+ _gfortran_hostnm@GFORTRAN_1.0 4.3
+ _gfortran_hostnm_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_hostnm_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_iall_i1@GFORTRAN_1.4 4.6
+ _gfortran_iall_i2@GFORTRAN_1.4 4.6
+ _gfortran_iall_i4@GFORTRAN_1.4 4.6
+ _gfortran_iall_i8@GFORTRAN_1.4 4.6
+ _gfortran_iany_i1@GFORTRAN_1.4 4.6
+ _gfortran_iany_i2@GFORTRAN_1.4 4.6
+ _gfortran_iany_i4@GFORTRAN_1.4 4.6
+ _gfortran_iany_i8@GFORTRAN_1.4 4.6
+ _gfortran_iargc@GFORTRAN_1.0 4.3
+ _gfortran_idate_i4@GFORTRAN_1.0 4.3
+ _gfortran_idate_i8@GFORTRAN_1.0 4.3
+ _gfortran_ierrno_i4@GFORTRAN_1.0 4.3
+ _gfortran_ierrno_i8@GFORTRAN_1.0 4.3
+ _gfortran_internal_pack@GFORTRAN_1.0 4.3
+ _gfortran_internal_unpack@GFORTRAN_1.0 4.3
+ _gfortran_iparity_i1@GFORTRAN_1.4 4.6
+ _gfortran_iparity_i2@GFORTRAN_1.4 4.6
+ _gfortran_iparity_i4@GFORTRAN_1.4 4.6
+ _gfortran_iparity_i8@GFORTRAN_1.4 4.6
+ _gfortran_irand@GFORTRAN_1.0 4.3
+ _gfortran_is_extension_of@GFORTRAN_1.2 4.5
+ _gfortran_isatty_l4@GFORTRAN_1.0 4.3
+ _gfortran_isatty_l8@GFORTRAN_1.0 4.3
+ _gfortran_ishftc4@GFORTRAN_1.0 4.3
+ _gfortran_ishftc8@GFORTRAN_1.0 4.3
+ _gfortran_itime_i4@GFORTRAN_1.0 4.3
+ _gfortran_itime_i8@GFORTRAN_1.0 4.3
+ _gfortran_kill_i4@GFORTRAN_1.0 4.3
+ _gfortran_kill_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_kill_i8@GFORTRAN_1.0 4.3
+ _gfortran_kill_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_link_i4@GFORTRAN_1.0 4.3
+ _gfortran_link_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_link_i8@GFORTRAN_1.0 4.3
+ _gfortran_link_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_lstat_i4@GFORTRAN_1.0 4.3
+ _gfortran_lstat_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_lstat_i8@GFORTRAN_1.0 4.3
+ _gfortran_lstat_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_ltime_i4@GFORTRAN_1.0 4.3
+ _gfortran_ltime_i8@GFORTRAN_1.0 4.3
+ _gfortran_malloc@GFORTRAN_1.0 4.3
+ _gfortran_matmul_c4@GFORTRAN_1.0 4.3
+ _gfortran_matmul_c8@GFORTRAN_1.0 4.3
+ _gfortran_matmul_i1@GFORTRAN_1.0 4.3
+ _gfortran_matmul_i2@GFORTRAN_1.0 4.3
+ _gfortran_matmul_i4@GFORTRAN_1.0 4.3
+ _gfortran_matmul_i8@GFORTRAN_1.0 4.3
+ _gfortran_matmul_l4@GFORTRAN_1.0 4.3
+ _gfortran_matmul_l8@GFORTRAN_1.0 4.3
+ _gfortran_matmul_r4@GFORTRAN_1.0 4.3
+ _gfortran_matmul_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxval_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxval_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxval_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxval_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxval_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxval_r8@GFORTRAN_1.0 4.3
+ _gfortran_mclock8@GFORTRAN_1.0 4.3
+ _gfortran_mclock@GFORTRAN_1.0 4.3
+ _gfortran_miall_i1@GFORTRAN_1.4 4.6
+ _gfortran_miall_i2@GFORTRAN_1.4 4.6
+ _gfortran_miall_i4@GFORTRAN_1.4 4.6
+ _gfortran_miall_i8@GFORTRAN_1.4 4.6
+ _gfortran_miany_i1@GFORTRAN_1.4 4.6
+ _gfortran_miany_i2@GFORTRAN_1.4 4.6
+ _gfortran_miany_i4@GFORTRAN_1.4 4.6
+ _gfortran_miany_i8@GFORTRAN_1.4 4.6
+ _gfortran_minloc0_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_minval_i1@GFORTRAN_1.0 4.3
+ _gfortran_minval_i2@GFORTRAN_1.0 4.3
+ _gfortran_minval_i4@GFORTRAN_1.0 4.3
+ _gfortran_minval_i8@GFORTRAN_1.0 4.3
+ _gfortran_minval_r4@GFORTRAN_1.0 4.3
+ _gfortran_minval_r8@GFORTRAN_1.0 4.3
+ _gfortran_miparity_i1@GFORTRAN_1.4 4.6
+ _gfortran_miparity_i2@GFORTRAN_1.4 4.6
+ _gfortran_miparity_i4@GFORTRAN_1.4 4.6
+ _gfortran_miparity_i8@GFORTRAN_1.4 4.6
+ _gfortran_mmaxloc0_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminval_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminval_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminval_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminval_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminval_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminval_r8@GFORTRAN_1.0 4.3
+ _gfortran_move_alloc@GFORTRAN_1.0 4.3
+ _gfortran_move_alloc_c@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_c4@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_c8@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_i1@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_i2@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_i4@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_i8@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_r4@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_r8@GFORTRAN_1.0 4.3
+ _gfortran_msum_c4@GFORTRAN_1.0 4.3
+ _gfortran_msum_c8@GFORTRAN_1.0 4.3
+ _gfortran_msum_i1@GFORTRAN_1.0 4.3
+ _gfortran_msum_i2@GFORTRAN_1.0 4.3
+ _gfortran_msum_i4@GFORTRAN_1.0 4.3
+ _gfortran_msum_i8@GFORTRAN_1.0 4.3
+ _gfortran_msum_r4@GFORTRAN_1.0 4.3
+ _gfortran_msum_r8@GFORTRAN_1.0 4.3
+ _gfortran_mvbits_i1@GFORTRAN_1.0 4.3
+ _gfortran_mvbits_i2@GFORTRAN_1.0 4.3
+ _gfortran_mvbits_i4@GFORTRAN_1.0 4.3
+ _gfortran_mvbits_i8@GFORTRAN_1.0 4.3
+ _gfortran_nearest_r4@GFORTRAN_1.0 4.3
+ _gfortran_nearest_r8@GFORTRAN_1.0 4.3
+ _gfortran_norm2_r4@GFORTRAN_1.4 4.6
+ _gfortran_norm2_r8@GFORTRAN_1.4 4.6
+ _gfortran_os_error@GFORTRAN_1.0 4.3
+ _gfortran_pack@GFORTRAN_1.0 4.3
+ _gfortran_pack_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_pack_char@GFORTRAN_1.0 4.3
+ _gfortran_pack_s@GFORTRAN_1.0 4.3
+ _gfortran_pack_s_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_pack_s_char@GFORTRAN_1.0 4.3
+ _gfortran_parity_l1@GFORTRAN_1.4 4.6
+ _gfortran_parity_l2@GFORTRAN_1.4 4.6
+ _gfortran_parity_l4@GFORTRAN_1.4 4.6
+ _gfortran_parity_l8@GFORTRAN_1.4 4.6
+ _gfortran_pause_numeric@GFORTRAN_1.0 4.3
+ _gfortran_pause_string@GFORTRAN_1.0 4.3
+ _gfortran_perror_sub@GFORTRAN_1.0 4.3
+ _gfortran_pow_c4_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_c4_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_c8_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_c8_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_i4_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_i4_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_i8_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_i8_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_r4_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_r8_i8@GFORTRAN_1.0 4.3
+ _gfortran_product_c4@GFORTRAN_1.0 4.3
+ _gfortran_product_c8@GFORTRAN_1.0 4.3
+ _gfortran_product_i1@GFORTRAN_1.0 4.3
+ _gfortran_product_i2@GFORTRAN_1.0 4.3
+ _gfortran_product_i4@GFORTRAN_1.0 4.3
+ _gfortran_product_i8@GFORTRAN_1.0 4.3
+ _gfortran_product_r4@GFORTRAN_1.0 4.3
+ _gfortran_product_r8@GFORTRAN_1.0 4.3
+ _gfortran_rand@GFORTRAN_1.0 4.3
+ _gfortran_random_r4@GFORTRAN_1.0 4.3
+ _gfortran_random_r8@GFORTRAN_1.0 4.3
+ _gfortran_random_seed_i4@GFORTRAN_1.0 4.3
+ _gfortran_random_seed_i8@GFORTRAN_1.0 4.3
+ _gfortran_rename_i4@GFORTRAN_1.0 4.3
+ _gfortran_rename_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_rename_i8@GFORTRAN_1.0 4.3
+ _gfortran_rename_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_reshape@GFORTRAN_1.0 4.3
+ _gfortran_reshape_4@GFORTRAN_1.0 4.3
+ _gfortran_reshape_8@GFORTRAN_1.0 4.3
+ _gfortran_reshape_c4@GFORTRAN_1.0 4.3
+ _gfortran_reshape_c8@GFORTRAN_1.0 4.3
+ _gfortran_reshape_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_reshape_char@GFORTRAN_1.0 4.3
+ _gfortran_reshape_r4@GFORTRAN_1.0 4.3
+ _gfortran_reshape_r8@GFORTRAN_1.0 4.3
+ _gfortran_rrspacing_r4@GFORTRAN_1.0 4.3
+ _gfortran_rrspacing_r8@GFORTRAN_1.0 4.3
+ _gfortran_runtime_error@GFORTRAN_1.0 4.3
+ _gfortran_runtime_error_at@GFORTRAN_1.0 4.3
+ _gfortran_runtime_warning_at@GFORTRAN_1.1 4.4.0
+ _gfortran_secnds@GFORTRAN_1.0 4.3
+ _gfortran_second@GFORTRAN_1.0 4.3
+ _gfortran_second_sub@GFORTRAN_1.0 4.3
+ _gfortran_select_string@GFORTRAN_1.0 4.3
+ _gfortran_select_string_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_selected_char_kind@GFORTRAN_1.1 4.4.0
+ _gfortran_selected_int_kind@GFORTRAN_1.0 4.3
+ _gfortran_selected_real_kind2008@GFORTRAN_1.4 4.6
+ _gfortran_selected_real_kind@GFORTRAN_1.0 4.3
+ _gfortran_set_args@GFORTRAN_1.0 4.3
+ _gfortran_set_convert@GFORTRAN_1.0 4.3
+ _gfortran_set_exponent_r4@GFORTRAN_1.0 4.3
+ _gfortran_set_exponent_r8@GFORTRAN_1.0 4.3
+ _gfortran_set_fpe@GFORTRAN_1.0 4.3
+ _gfortran_set_max_subrecord_length@GFORTRAN_1.0 4.3
+ _gfortran_set_options@GFORTRAN_1.0 4.3
+ _gfortran_set_record_marker@GFORTRAN_1.0 4.3
+ _gfortran_shape_4@GFORTRAN_1.0 4.3
+ _gfortran_shape_8@GFORTRAN_1.0 4.3
+ _gfortran_siall_i1@GFORTRAN_1.4 4.6
+ _gfortran_siall_i2@GFORTRAN_1.4 4.6
+ _gfortran_siall_i4@GFORTRAN_1.4 4.6
+ _gfortran_siall_i8@GFORTRAN_1.4 4.6
+ _gfortran_siany_i1@GFORTRAN_1.4 4.6
+ _gfortran_siany_i2@GFORTRAN_1.4 4.6
+ _gfortran_siany_i4@GFORTRAN_1.4 4.6
+ _gfortran_siany_i8@GFORTRAN_1.4 4.6
+ _gfortran_signal_func@GFORTRAN_1.0 4.3
+ _gfortran_signal_func_int@GFORTRAN_1.0 4.3
+ _gfortran_signal_sub@GFORTRAN_1.0 4.3
+ _gfortran_signal_sub_int@GFORTRAN_1.0 4.3
+ _gfortran_siparity_i1@GFORTRAN_1.4 4.6
+ _gfortran_siparity_i2@GFORTRAN_1.4 4.6
+ _gfortran_siparity_i4@GFORTRAN_1.4 4.6
+ _gfortran_siparity_i8@GFORTRAN_1.4 4.6
+ _gfortran_size0@GFORTRAN_1.0 4.3
+ _gfortran_size1@GFORTRAN_1.0 4.3
+ _gfortran_sleep_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_sleep_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminval_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminval_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminval_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminval_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminval_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminval_r8@GFORTRAN_1.0 4.3
+ _gfortran_spacing_r4@GFORTRAN_1.0 4.3
+ _gfortran_spacing_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_c4@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_c8@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_i4@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_i8@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__acos_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__acos_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__acosh_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__acosh_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__aimag_c4@GFORTRAN_1.0 4.3
+ _gfortran_specific__aimag_c8@GFORTRAN_1.0 4.3
+ _gfortran_specific__aint_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__aint_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__anint_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__anint_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__asin_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__asin_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__asinh_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__asinh_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan2_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan2_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__atanh_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__atanh_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__char_1_i4@GFORTRAN_1.0 4.3
+ _gfortran_specific__char_1_i8@GFORTRAN_1.0 4.3
+ _gfortran_specific__conjg_4@GFORTRAN_1.0 4.3
+ _gfortran_specific__conjg_8@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_c4@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_c8@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__cosh_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__cosh_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_i4@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_i8@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__dprod_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_c4@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_c8@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__index_1_i4@GFORTRAN_1.0 4.3
+ _gfortran_specific__index_1_i8@GFORTRAN_1.0 4.3
+ _gfortran_specific__len_1_i4@GFORTRAN_1.0 4.3
+ _gfortran_specific__len_1_i8@GFORTRAN_1.0 4.3
+ _gfortran_specific__log10_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__log10_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_c4@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_c8@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_i4@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_i8@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_4_4@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_4_8@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_8_4@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_8_8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_i4@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_i8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_c4@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_c8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sinh_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__sinh_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_c4@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_c8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__tan_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__tan_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__tanh_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__tanh_r8@GFORTRAN_1.0 4.3
+ _gfortran_spread@GFORTRAN_1.0 4.3
+ _gfortran_spread_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_spread_char4_scalar@GFORTRAN_1.1 4.4.0
+ _gfortran_spread_char@GFORTRAN_1.0 4.3
+ _gfortran_spread_char_scalar@GFORTRAN_1.0 4.3
+ _gfortran_spread_scalar@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_c4@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_c8@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_i1@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_i2@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_i4@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_i8@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_r4@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_r8@GFORTRAN_1.0 4.3
+ _gfortran_srand@GFORTRAN_1.0 4.3
+ _gfortran_ssum_c4@GFORTRAN_1.0 4.3
+ _gfortran_ssum_c8@GFORTRAN_1.0 4.3
+ _gfortran_ssum_i1@GFORTRAN_1.0 4.3
+ _gfortran_ssum_i2@GFORTRAN_1.0 4.3
+ _gfortran_ssum_i4@GFORTRAN_1.0 4.3
+ _gfortran_ssum_i8@GFORTRAN_1.0 4.3
+ _gfortran_ssum_r4@GFORTRAN_1.0 4.3
+ _gfortran_ssum_r8@GFORTRAN_1.0 4.3
+ _gfortran_st_backspace@GFORTRAN_1.0 4.3
+ _gfortran_st_close@GFORTRAN_1.0 4.3
+ _gfortran_st_endfile@GFORTRAN_1.0 4.3
+ _gfortran_st_flush@GFORTRAN_1.0 4.3
+ _gfortran_st_inquire@GFORTRAN_1.0 4.3
+ _gfortran_st_iolength@GFORTRAN_1.0 4.3
+ _gfortran_st_iolength_done@GFORTRAN_1.0 4.3
+ _gfortran_st_open@GFORTRAN_1.0 4.3
+ _gfortran_st_read@GFORTRAN_1.0 4.3
+ _gfortran_st_read_done@GFORTRAN_1.0 4.3
+ _gfortran_st_rewind@GFORTRAN_1.0 4.3
+ _gfortran_st_set_nml_var@GFORTRAN_1.0 4.3
+ _gfortran_st_set_nml_var_dim@GFORTRAN_1.0 4.3
+ _gfortran_st_wait@GFORTRAN_1.1 4.4.0
+ _gfortran_st_write@GFORTRAN_1.0 4.3
+ _gfortran_st_write_done@GFORTRAN_1.0 4.3
+ _gfortran_stat_i4@GFORTRAN_1.0 4.3
+ _gfortran_stat_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_stat_i8@GFORTRAN_1.0 4.3
+ _gfortran_stat_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_stop_numeric@GFORTRAN_1.0 4.3
+ _gfortran_stop_numeric_f08@GFORTRAN_1.4 4.6
+ _gfortran_stop_string@GFORTRAN_1.0 4.3
+ _gfortran_store_exe_path@GFORTRAN_1.0 4.3
+ _gfortran_string_index@GFORTRAN_1.0 4.3
+ _gfortran_string_index_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_string_len_trim@GFORTRAN_1.0 4.3
+ _gfortran_string_len_trim_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_string_minmax@GFORTRAN_1.0 4.3
+ _gfortran_string_minmax_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_string_scan@GFORTRAN_1.0 4.3
+ _gfortran_string_scan_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_string_trim@GFORTRAN_1.0 4.3
+ _gfortran_string_trim_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_string_verify@GFORTRAN_1.0 4.3
+ _gfortran_string_verify_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_sum_c4@GFORTRAN_1.0 4.3
+ _gfortran_sum_c8@GFORTRAN_1.0 4.3
+ _gfortran_sum_i1@GFORTRAN_1.0 4.3
+ _gfortran_sum_i2@GFORTRAN_1.0 4.3
+ _gfortran_sum_i4@GFORTRAN_1.0 4.3
+ _gfortran_sum_i8@GFORTRAN_1.0 4.3
+ _gfortran_sum_r4@GFORTRAN_1.0 4.3
+ _gfortran_sum_r8@GFORTRAN_1.0 4.3
+ _gfortran_symlnk_i4@GFORTRAN_1.0 4.3
+ _gfortran_symlnk_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_symlnk_i8@GFORTRAN_1.0 4.3
+ _gfortran_symlnk_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_system@GFORTRAN_1.0 4.3
+ _gfortran_system_clock_4@GFORTRAN_1.0 4.3
+ _gfortran_system_clock_8@GFORTRAN_1.0 4.3
+ _gfortran_system_sub@GFORTRAN_1.0 4.3
+ _gfortran_time8_func@GFORTRAN_1.0 4.3
+ _gfortran_time_func@GFORTRAN_1.0 4.3
+ _gfortran_transfer_array@GFORTRAN_1.0 4.3
+ _gfortran_transfer_array_write@GFORTRAN_1.4 4.6
+ _gfortran_transfer_character@GFORTRAN_1.0 4.3
+ _gfortran_transfer_character_wide@GFORTRAN_1.1 4.4.0
+ _gfortran_transfer_character_wide_write@GFORTRAN_1.4 4.6
+ _gfortran_transfer_character_write@GFORTRAN_1.4 4.6
+ _gfortran_transfer_complex@GFORTRAN_1.0 4.3
+ _gfortran_transfer_complex_write@GFORTRAN_1.4 4.6
+ _gfortran_transfer_integer@GFORTRAN_1.0 4.3
+ _gfortran_transfer_integer_write@GFORTRAN_1.4 4.6
+ _gfortran_transfer_logical@GFORTRAN_1.0 4.3
+ _gfortran_transfer_logical_write@GFORTRAN_1.4 4.6
+ _gfortran_transfer_real@GFORTRAN_1.0 4.3
+ _gfortran_transfer_real_write@GFORTRAN_1.4 4.6
+ _gfortran_transpose@GFORTRAN_1.0 4.3
+ _gfortran_transpose_c4@GFORTRAN_1.0 4.3
+ _gfortran_transpose_c8@GFORTRAN_1.0 4.3
+ _gfortran_transpose_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_transpose_char@GFORTRAN_1.0 4.3
+ _gfortran_transpose_i4@GFORTRAN_1.0 4.3
+ _gfortran_transpose_i8@GFORTRAN_1.0 4.3
+ _gfortran_transpose_r4@GFORTRAN_1.0 4.3
+ _gfortran_transpose_r8@GFORTRAN_1.0 4.3
+ _gfortran_ttynam@GFORTRAN_1.0 4.3
+ _gfortran_ttynam_sub@GFORTRAN_1.0 4.3
+ _gfortran_umask_i4@GFORTRAN_1.0 4.3
+ _gfortran_umask_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_umask_i8@GFORTRAN_1.0 4.3
+ _gfortran_umask_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_unlink@GFORTRAN_1.0 4.3
+ _gfortran_unlink_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_unlink_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_unpack0@GFORTRAN_1.0 4.3
+ _gfortran_unpack0_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_unpack0_char@GFORTRAN_1.0 4.3
+ _gfortran_unpack1@GFORTRAN_1.0 4.3
+ _gfortran_unpack1_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_unpack1_char@GFORTRAN_1.0 4.3
diff --git a/debian/libgfortran3.symbols.hurd-i386 b/debian/libgfortran3.symbols.hurd-i386
new file mode 100644
index 0000000..a4e4187
--- /dev/null
+++ b/debian/libgfortran3.symbols.hurd-i386
@@ -0,0 +1,3 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
diff --git a/debian/libgfortran3.symbols.i386 b/debian/libgfortran3.symbols.i386
new file mode 100644
index 0000000..a4e4187
--- /dev/null
+++ b/debian/libgfortran3.symbols.i386
@@ -0,0 +1,3 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
diff --git a/debian/libgfortran3.symbols.ia64 b/debian/libgfortran3.symbols.ia64
new file mode 100644
index 0000000..86447b0
--- /dev/null
+++ b/debian/libgfortran3.symbols.ia64
@@ -0,0 +1,7 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
+#include "libgfortran3.symbols.16"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.64"
+#include "libgfortran3.symbols.qf"
diff --git a/debian/libgfortran3.symbols.kfreebsd-amd64 b/debian/libgfortran3.symbols.kfreebsd-amd64
new file mode 100644
index 0000000..8c61340
--- /dev/null
+++ b/debian/libgfortran3.symbols.kfreebsd-amd64
@@ -0,0 +1,5 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
+#include "libgfortran3.symbols.16"
+#include "libgfortran3.symbols.64"
diff --git a/debian/libgfortran3.symbols.kfreebsd-i386 b/debian/libgfortran3.symbols.kfreebsd-i386
new file mode 100644
index 0000000..a4e4187
--- /dev/null
+++ b/debian/libgfortran3.symbols.kfreebsd-i386
@@ -0,0 +1,3 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
diff --git a/debian/libgfortran3.symbols.lpia b/debian/libgfortran3.symbols.lpia
new file mode 100644
index 0000000..a4e4187
--- /dev/null
+++ b/debian/libgfortran3.symbols.lpia
@@ -0,0 +1,3 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
diff --git a/debian/libgfortran3.symbols.mips b/debian/libgfortran3.symbols.mips
new file mode 100644
index 0000000..1baa35e
--- /dev/null
+++ b/debian/libgfortran3.symbols.mips
@@ -0,0 +1,2 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
diff --git a/debian/libgfortran3.symbols.mipsel b/debian/libgfortran3.symbols.mipsel
new file mode 100644
index 0000000..1baa35e
--- /dev/null
+++ b/debian/libgfortran3.symbols.mipsel
@@ -0,0 +1,2 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
diff --git a/debian/libgfortran3.symbols.powerpc b/debian/libgfortran3.symbols.powerpc
new file mode 100644
index 0000000..0067896
--- /dev/null
+++ b/debian/libgfortran3.symbols.powerpc
@@ -0,0 +1,3 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
diff --git a/debian/libgfortran3.symbols.ppc64 b/debian/libgfortran3.symbols.ppc64
new file mode 100644
index 0000000..87e8e77
--- /dev/null
+++ b/debian/libgfortran3.symbols.ppc64
@@ -0,0 +1,5 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
diff --git a/debian/libgfortran3.symbols.qf b/debian/libgfortran3.symbols.qf
new file mode 100644
index 0000000..f282425
--- /dev/null
+++ b/debian/libgfortran3.symbols.qf
@@ -0,0 +1,16 @@
+ _gfortran_maxloc0_16_r16@GFORTRAN_1.0 4.6
+ _gfortran_maxloc1_16_r16@GFORTRAN_1.0 4.6
+ _gfortran_minloc0_16_r16@GFORTRAN_1.0 4.6
+ _gfortran_minloc1_16_r16@GFORTRAN_1.0 4.6
+ _gfortran_mmaxloc0_16_r16@GFORTRAN_1.0 4.6
+ _gfortran_mmaxloc1_16_r16@GFORTRAN_1.0 4.6
+ _gfortran_mminloc0_16_r16@GFORTRAN_1.0 4.6
+ _gfortran_mminloc1_16_r16@GFORTRAN_1.0 4.6
+ _gfortran_smaxloc0_16_r16@GFORTRAN_1.0 4.6
+ _gfortran_smaxloc1_16_r16@GFORTRAN_1.0 4.6
+ _gfortran_sminloc0_16_r16@GFORTRAN_1.0 4.6
+ _gfortran_sminloc1_16_r16@GFORTRAN_1.0 4.6
+ _gfortran_transfer_complex128@GFORTRAN_1.4 4.6
+ _gfortran_transfer_complex128_write@GFORTRAN_1.4 4.6
+ _gfortran_transfer_real128@GFORTRAN_1.4 4.6
+ _gfortran_transfer_real128_write@GFORTRAN_1.4 4.6
diff --git a/debian/libgfortran3.symbols.s390 b/debian/libgfortran3.symbols.s390
new file mode 100644
index 0000000..0067896
--- /dev/null
+++ b/debian/libgfortran3.symbols.s390
@@ -0,0 +1,3 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
diff --git a/debian/libgfortran3.symbols.s390x b/debian/libgfortran3.symbols.s390x
new file mode 100644
index 0000000..87e8e77
--- /dev/null
+++ b/debian/libgfortran3.symbols.s390x
@@ -0,0 +1,5 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
diff --git a/debian/libgfortran3.symbols.sh4 b/debian/libgfortran3.symbols.sh4
new file mode 100644
index 0000000..1baa35e
--- /dev/null
+++ b/debian/libgfortran3.symbols.sh4
@@ -0,0 +1,2 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
diff --git a/debian/libgfortran3.symbols.sparc b/debian/libgfortran3.symbols.sparc
new file mode 100644
index 0000000..0067896
--- /dev/null
+++ b/debian/libgfortran3.symbols.sparc
@@ -0,0 +1,3 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
diff --git a/debian/libgfortran3.symbols.sparc64 b/debian/libgfortran3.symbols.sparc64
new file mode 100644
index 0000000..87e8e77
--- /dev/null
+++ b/debian/libgfortran3.symbols.sparc64
@@ -0,0 +1,5 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
diff --git a/debian/libgnat-BV.overrides b/debian/libgnat-BV.overrides
new file mode 100644
index 0000000..fe6aafe
--- /dev/null
+++ b/debian/libgnat-BV.overrides
@@ -0,0 +1 @@
+libgnat-@BV@: package-name-doesnt-match-sonames
diff --git a/debian/libgnatprjBV.overrides b/debian/libgnatprjBV.overrides
new file mode 100644
index 0000000..c525dbd
--- /dev/null
+++ b/debian/libgnatprjBV.overrides
@@ -0,0 +1 @@
+libgnatprj@BV@: missing-dependency-on-libc
diff --git a/debian/libgnatvsnBV.overrides b/debian/libgnatvsnBV.overrides
new file mode 100644
index 0000000..427ddea
--- /dev/null
+++ b/debian/libgnatvsnBV.overrides
@@ -0,0 +1 @@
+libgnatvsn@BV@: missing-dependency-on-libc
diff --git a/debian/libgomp1.symbols b/debian/libgomp1.symbols
new file mode 100644
index 0000000..41111d2
--- /dev/null
+++ b/debian/libgomp1.symbols
@@ -0,0 +1,4 @@
+libgomp.so.1 libgomp1 #MINVER#
+#include "libgomp1.symbols.common"
+ GOMP_atomic_end@GOMP_1.0 4.2.1
+ GOMP_atomic_start@GOMP_1.0 4.2.1
diff --git a/debian/libgomp1.symbols.common b/debian/libgomp1.symbols.common
new file mode 100644
index 0000000..491d4d8
--- /dev/null
+++ b/debian/libgomp1.symbols.common
@@ -0,0 +1,154 @@
+ GOMP_1.0@GOMP_1.0 4.2.1
+ GOMP_2.0@GOMP_2.0 4.4
+ GOMP_atomic_end@GOMP_1.0 4.2.1
+ GOMP_atomic_start@GOMP_1.0 4.2.1
+ GOMP_barrier@GOMP_1.0 4.2.1
+ GOMP_critical_end@GOMP_1.0 4.2.1
+ GOMP_critical_name_end@GOMP_1.0 4.2.1
+ GOMP_critical_name_start@GOMP_1.0 4.2.1
+ GOMP_critical_start@GOMP_1.0 4.2.1
+ GOMP_loop_dynamic_next@GOMP_1.0 4.2.1
+ GOMP_loop_dynamic_start@GOMP_1.0 4.2.1
+ GOMP_loop_end@GOMP_1.0 4.2.1
+ GOMP_loop_end_nowait@GOMP_1.0 4.2.1
+ GOMP_loop_guided_next@GOMP_1.0 4.2.1
+ GOMP_loop_guided_start@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_dynamic_next@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_dynamic_start@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_guided_next@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_guided_start@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_runtime_next@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_runtime_start@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_static_next@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_static_start@GOMP_1.0 4.2.1
+ GOMP_loop_runtime_next@GOMP_1.0 4.2.1
+ GOMP_loop_runtime_start@GOMP_1.0 4.2.1
+ GOMP_loop_static_next@GOMP_1.0 4.2.1
+ GOMP_loop_static_start@GOMP_1.0 4.2.1
+ GOMP_loop_ull_dynamic_next@GOMP_2.0 4.4
+ GOMP_loop_ull_dynamic_start@GOMP_2.0 4.4
+ GOMP_loop_ull_guided_next@GOMP_2.0 4.4
+ GOMP_loop_ull_guided_start@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_dynamic_next@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_dynamic_start@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_guided_next@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_guided_start@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_runtime_next@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_runtime_start@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_static_next@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_static_start@GOMP_2.0 4.4
+ GOMP_loop_ull_runtime_next@GOMP_2.0 4.4
+ GOMP_loop_ull_runtime_start@GOMP_2.0 4.4
+ GOMP_loop_ull_static_next@GOMP_2.0 4.4
+ GOMP_loop_ull_static_start@GOMP_2.0 4.4
+ GOMP_ordered_end@GOMP_1.0 4.2.1
+ GOMP_ordered_start@GOMP_1.0 4.2.1
+ GOMP_parallel_end@GOMP_1.0 4.2.1
+ GOMP_parallel_loop_dynamic_start@GOMP_1.0 4.2.1
+ GOMP_parallel_loop_guided_start@GOMP_1.0 4.2.1
+ GOMP_parallel_loop_runtime_start@GOMP_1.0 4.2.1
+ GOMP_parallel_loop_static_start@GOMP_1.0 4.2.1
+ GOMP_parallel_sections_start@GOMP_1.0 4.2.1
+ GOMP_parallel_start@GOMP_1.0 4.2.1
+ GOMP_sections_end@GOMP_1.0 4.2.1
+ GOMP_sections_end_nowait@GOMP_1.0 4.2.1
+ GOMP_sections_next@GOMP_1.0 4.2.1
+ GOMP_sections_start@GOMP_1.0 4.2.1
+ GOMP_single_copy_end@GOMP_1.0 4.2.1
+ GOMP_single_copy_start@GOMP_1.0 4.2.1
+ GOMP_single_start@GOMP_1.0 4.2.1
+ GOMP_task@GOMP_2.0 4.4
+ GOMP_taskwait@GOMP_2.0 4.4
+ OMP_1.0@OMP_1.0 4.2.1
+ OMP_2.0@OMP_2.0 4.2.1
+ OMP_3.0@OMP_3.0 4.4
+ omp_destroy_lock@OMP_1.0 4.2.1
+ omp_destroy_lock@OMP_3.0 4.4
+ omp_destroy_lock_@OMP_1.0 4.2.1
+ omp_destroy_lock_@OMP_3.0 4.4
+ omp_destroy_nest_lock@OMP_1.0 4.2.1
+ omp_destroy_nest_lock@OMP_3.0 4.4
+ omp_destroy_nest_lock_@OMP_1.0 4.2.1
+ omp_destroy_nest_lock_@OMP_3.0 4.4
+ omp_get_active_level@OMP_3.0 4.4
+ omp_get_active_level_@OMP_3.0 4.4
+ omp_get_ancestor_thread_num@OMP_3.0 4.4
+ omp_get_ancestor_thread_num_8_@OMP_3.0 4.4
+ omp_get_ancestor_thread_num_@OMP_3.0 4.4
+ omp_get_dynamic@OMP_1.0 4.2.1
+ omp_get_dynamic_@OMP_1.0 4.2.1
+ omp_get_level@OMP_3.0 4.4
+ omp_get_level_@OMP_3.0 4.4
+ omp_get_max_active_levels@OMP_3.0 4.4
+ omp_get_max_active_levels_@OMP_3.0 4.4
+ omp_get_max_threads@OMP_1.0 4.2.1
+ omp_get_max_threads_@OMP_1.0 4.2.1
+ omp_get_nested@OMP_1.0 4.2.1
+ omp_get_nested_@OMP_1.0 4.2.1
+ omp_get_num_procs@OMP_1.0 4.2.1
+ omp_get_num_procs_@OMP_1.0 4.2.1
+ omp_get_num_threads@OMP_1.0 4.2.1
+ omp_get_num_threads_@OMP_1.0 4.2.1
+ omp_get_schedule@OMP_3.0 4.4
+ omp_get_schedule_8_@OMP_3.0 4.4
+ omp_get_schedule_@OMP_3.0 4.4
+ omp_get_team_size@OMP_3.0 4.4
+ omp_get_team_size_8_@OMP_3.0 4.4
+ omp_get_team_size_@OMP_3.0 4.4
+ omp_get_thread_limit@OMP_3.0 4.4
+ omp_get_thread_limit_@OMP_3.0 4.4
+ omp_get_thread_num@OMP_1.0 4.2.1
+ omp_get_thread_num_@OMP_1.0 4.2.1
+ omp_get_wtick@OMP_2.0 4.2.1
+ omp_get_wtick_@OMP_2.0 4.2.1
+ omp_get_wtime@OMP_2.0 4.2.1
+ omp_get_wtime_@OMP_2.0 4.2.1
+ omp_in_parallel@OMP_1.0 4.2.1
+ omp_in_parallel_@OMP_1.0 4.2.1
+ omp_init_lock@OMP_1.0 4.2.1
+ omp_init_lock@OMP_3.0 4.4
+ omp_init_lock_@OMP_1.0 4.2.1
+ omp_init_lock_@OMP_3.0 4.4
+ omp_init_nest_lock@OMP_1.0 4.2.1
+ omp_init_nest_lock@OMP_3.0 4.4
+ omp_init_nest_lock_@OMP_1.0 4.2.1
+ omp_init_nest_lock_@OMP_3.0 4.4
+ omp_set_dynamic@OMP_1.0 4.2.1
+ omp_set_dynamic_8_@OMP_1.0 4.2.1
+ omp_set_dynamic_@OMP_1.0 4.2.1
+ omp_set_lock@OMP_1.0 4.2.1
+ omp_set_lock@OMP_3.0 4.4
+ omp_set_lock_@OMP_1.0 4.2.1
+ omp_set_lock_@OMP_3.0 4.4
+ omp_set_max_active_levels@OMP_3.0 4.4
+ omp_set_max_active_levels_8_@OMP_3.0 4.4
+ omp_set_max_active_levels_@OMP_3.0 4.4
+ omp_set_nest_lock@OMP_1.0 4.2.1
+ omp_set_nest_lock@OMP_3.0 4.4
+ omp_set_nest_lock_@OMP_1.0 4.2.1
+ omp_set_nest_lock_@OMP_3.0 4.4
+ omp_set_nested@OMP_1.0 4.2.1
+ omp_set_nested_8_@OMP_1.0 4.2.1
+ omp_set_nested_@OMP_1.0 4.2.1
+ omp_set_num_threads@OMP_1.0 4.2.1
+ omp_set_num_threads_8_@OMP_1.0 4.2.1
+ omp_set_num_threads_@OMP_1.0 4.2.1
+ omp_set_schedule@OMP_3.0 4.4
+ omp_set_schedule_8_@OMP_3.0 4.4
+ omp_set_schedule_@OMP_3.0 4.4
+ omp_test_lock@OMP_1.0 4.2.1
+ omp_test_lock@OMP_3.0 4.4
+ omp_test_lock_@OMP_1.0 4.2.1
+ omp_test_lock_@OMP_3.0 4.4
+ omp_test_nest_lock@OMP_1.0 4.2.1
+ omp_test_nest_lock@OMP_3.0 4.4
+ omp_test_nest_lock_@OMP_1.0 4.2.1
+ omp_test_nest_lock_@OMP_3.0 4.4
+ omp_unset_lock@OMP_1.0 4.2.1
+ omp_unset_lock@OMP_3.0 4.4
+ omp_unset_lock_@OMP_1.0 4.2.1
+ omp_unset_lock_@OMP_3.0 4.4
+ omp_unset_nest_lock@OMP_1.0 4.2.1
+ omp_unset_nest_lock@OMP_3.0 4.4
+ omp_unset_nest_lock_@OMP_1.0 4.2.1
+ omp_unset_nest_lock_@OMP_3.0 4.4
diff --git a/debian/libhfgcc1.symbols.armel b/debian/libhfgcc1.symbols.armel
new file mode 100644
index 0000000..4f36260
--- /dev/null
+++ b/debian/libhfgcc1.symbols.armel
@@ -0,0 +1,120 @@
+libgcc_s.so.1 libhfgcc1 #MINVER#
+(ignore-blacklist)#include "libgcc1.symbols.aeabi"
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3.4@GCC_3.3.4 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_3.5@GCC_3.5 1:4.3.0
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_4.3.0 1:4.3.0
+ _Unwind_Complete@GCC_3.5 1:4.3.0
+ _Unwind_DeleteException@GCC_3.0 1:4.3.0
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.3.0
+ _Unwind_GetCFA@GCC_3.3 1:4.3.0
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.3.0
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.3.0
+ _Unwind_GetRegionStart@GCC_3.0 1:4.3.0
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.3.0
+ _Unwind_RaiseException@GCC_3.0 1:4.3.0
+ _Unwind_Resume@GCC_3.0 1:4.3.0
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.3.0
+ _Unwind_VRS_Get@GCC_3.5 1:4.3.0
+ _Unwind_VRS_Pop@GCC_3.5 1:4.3.0
+ _Unwind_VRS_Set@GCC_3.5 1:4.3.0
+ __absvdi2@GCC_3.0 1:4.3.0
+ __absvsi2@GCC_3.0 1:4.3.0
+ __adddf3@GCC_3.0 1:4.3.0
+ __addsf3@GCC_3.0 1:4.3.0
+ __addvdi3@GCC_3.0 1:4.3.0
+ __addvsi3@GCC_3.0 1:4.3.0
+ __ashldi3@GCC_3.0 1:4.3.0
+ __ashrdi3@GCC_3.0 1:4.3.0
+ __bswapdi2@GCC_4.3.0 1:4.3.0
+ __bswapsi2@GCC_4.3.0 1:4.3.0
+ __clear_cache@GCC_3.0 1:4.3.0
+ __clzdi2@GCC_3.4 1:4.3.0
+ __clzsi2@GCC_3.4 1:4.3.0
+ __cmpdi2@GCC_3.0 1:4.3.0
+ __ctzdi2@GCC_3.4 1:4.3.0
+ __ctzsi2@GCC_3.4 1:4.3.0
+ __divdc3@GCC_4.0.0 1:4.3.0
+ __divdf3@GCC_3.0 1:4.3.0
+ __divdi3@GLIBC_2.0 1:4.3.0
+ __divsc3@GCC_4.0.0 1:4.3.0
+ __divsf3@GCC_3.0 1:4.3.0
+ __divsi3@GCC_3.0 1:4.3.0
+ __emutls_get_address@GCC_4.3.0 1:4.3.0
+ __emutls_register_common@GCC_4.3.0 1:4.3.0
+ __enable_execute_stack@GCC_3.4.2 1:4.3.0
+ __eqdf2@GCC_3.0 1:4.3.0
+ __eqsf2@GCC_3.0 1:4.3.0
+ __extendsfdf2@GCC_3.0 1:4.3.0
+ __ffsdi2@GCC_3.0 1:4.3.0
+ __ffssi2@GCC_4.3.0 1:4.3.0
+ __fixdfdi@GCC_3.0 1:4.3.0
+ __fixdfsi@GCC_3.0 1:4.3.0
+ __fixsfdi@GCC_3.0 1:4.3.0
+ __fixsfsi@GCC_3.0 1:4.3.0
+ __fixunsdfdi@GCC_3.0 1:4.3.0
+ __fixunsdfsi@GCC_3.0 1:4.3.0
+ __fixunssfdi@GCC_3.0 1:4.3.0
+ __fixunssfsi@GCC_3.0 1:4.3.0
+ __floatdidf@GCC_3.0 1:4.3.0
+ __floatdisf@GCC_3.0 1:4.3.0
+ __floatsidf@GCC_3.0 1:4.3.0
+ __floatsisf@GCC_3.0 1:4.3.0
+ __floatundidf@GCC_4.2.0 1:4.3.0
+ __floatundisf@GCC_4.2.0 1:4.3.0
+ __floatunsidf@GCC_4.2.0 1:4.3.0
+ __floatunsisf@GCC_4.2.0 1:4.3.0
+ __gcc_personality_v0@GCC_3.3.1 1:4.3.0
+ __gedf2@GCC_3.0 1:4.3.0
+ __gesf2@GCC_3.0 1:4.3.0
+ __gnu_unwind_frame@GCC_3.5 1:4.3.0
+ __gtdf2@GCC_3.0 1:4.3.0
+ __gtsf2@GCC_3.0 1:4.3.0
+ __ledf2@GCC_3.0 1:4.3.0
+ __lesf2@GCC_3.0 1:4.3.0
+ __lshrdi3@GCC_3.0 1:4.3.0
+ __ltdf2@GCC_3.0 1:4.3.0
+ __ltsf2@GCC_3.0 1:4.3.0
+ __moddi3@GLIBC_2.0 1:4.3.0
+ __modsi3@GCC_3.0 1:4.3.0
+ __muldc3@GCC_4.0.0 1:4.3.0
+ __muldf3@GCC_3.0 1:4.3.0
+ __muldi3@GCC_3.0 1:4.3.0
+ __mulsc3@GCC_4.0.0 1:4.3.0
+ __mulsf3@GCC_3.0 1:4.3.0
+ __mulvdi3@GCC_3.0 1:4.3.0
+ __mulvsi3@GCC_3.0 1:4.3.0
+ __nedf2@GCC_3.0 1:4.3.0
+ __negdf2@GCC_3.0 1:4.3.0
+ __negdi2@GCC_3.0 1:4.3.0
+ __negsf2@GCC_3.0 1:4.3.0
+ __negvdi2@GCC_3.0 1:4.3.0
+ __negvsi2@GCC_3.0 1:4.3.0
+ __nesf2@GCC_3.0 1:4.3.0
+ __paritydi2@GCC_3.4 1:4.3.0
+ __paritysi2@GCC_3.4 1:4.3.0
+ __popcountdi2@GCC_3.4 1:4.3.0
+ __popcountsi2@GCC_3.4 1:4.3.0
+ __powidf2@GCC_4.0.0 1:4.3.0
+ __powisf2@GCC_4.0.0 1:4.3.0
+ __subdf3@GCC_3.0 1:4.3.0
+ __subsf3@GCC_3.0 1:4.3.0
+ __subvdi3@GCC_3.0 1:4.3.0
+ __subvsi3@GCC_3.0 1:4.3.0
+ __truncdfsf2@GCC_3.0 1:4.3.0
+ __ucmpdi2@GCC_3.0 1:4.3.0
+ __udivdi3@GLIBC_2.0 1:4.3.0
+ __udivmoddi4@GCC_3.0 1:4.3.0
+ __udivsi3@GCC_3.0 1:4.3.0
+ __umoddi3@GLIBC_2.0 1:4.3.0
+ __umodsi3@GCC_3.0 1:4.3.0
+ __unorddf2@GCC_3.3.4 1:4.3.0
+ __unordsf2@GCC_3.3.4 1:4.3.0
diff --git a/debian/libmudflap.copyright b/debian/libmudflap.copyright
new file mode 100644
index 0000000..82ed25d
--- /dev/null
+++ b/debian/libmudflap.copyright
@@ -0,0 +1,30 @@
+This package was debianized by Matthias Klose <doko@debian.org> on
+Mon, 5 Jul 2004 21:29:57 +0200
+
+Mudflap is part of GCC.
+
+Authors: Frank Ch. Eigler <fche@redhat.com>, Graydon Hoare <graydon@redhat.com>
+
+Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+In addition to the permissions in the GNU General Public License, the
+Free Software Foundation gives you unlimited permission to link the
+compiled version of this file into combinations with other programs,
+and to distribute those combinations without any restriction coming
+from the use of this file. (The General Public License restrictions
+do apply in other respects; for example, they cover modification of
+the file, and distribution when not linked into a combine
+executable.)
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
diff --git a/debian/libmudflapMF.postinst b/debian/libmudflapMF.postinst
new file mode 100644
index 0000000..a84d711
--- /dev/null
+++ b/debian/libmudflapMF.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+set -e
+
+case "$1" in configure)
+ if [ -d /usr/share/doc/libmudflap@MF@ ] && [ ! -h /usr/share/doc/libmudflap@MF@ ]; then
+ rm -rf /usr/share/doc/libmudflap@MF@
+ ln -s gcc-@BV@-base /usr/share/doc/libmudflap@MF@
+ fi
+esac
+
+#DEBHELPER#
diff --git a/debian/libobjc2.symbols.arm b/debian/libobjc2.symbols.arm
new file mode 100644
index 0000000..b48ea0f
--- /dev/null
+++ b/debian/libobjc2.symbols.arm
@@ -0,0 +1,4 @@
+libobjc.so.3 libobjc3 #MINVER#
+#include "libobjc3.symbols.common"
+ __gnu_objc_personality_sj0@Base 4.2.1
+ __objc_exception_class@Base 4.4.0
diff --git a/debian/libobjc3.symbols b/debian/libobjc3.symbols
new file mode 100644
index 0000000..227af17
--- /dev/null
+++ b/debian/libobjc3.symbols
@@ -0,0 +1,3 @@
+libobjc.so.3 libobjc3 #MINVER#
+#include "libobjc3.symbols.common"
+ __gnu_objc_personality_v0@Base 4.2.1
diff --git a/debian/libobjc3.symbols.armel b/debian/libobjc3.symbols.armel
new file mode 100644
index 0000000..7026ad3
--- /dev/null
+++ b/debian/libobjc3.symbols.armel
@@ -0,0 +1,4 @@
+libobjc.so.3 libobjc3 #MINVER#
+#include "libobjc3.symbols.common"
+ __gnu_objc_personality_v0@Base 4.2.1
+ __objc_exception_class@Base 4.3.0
diff --git a/debian/libobjc3.symbols.armhf b/debian/libobjc3.symbols.armhf
new file mode 100644
index 0000000..7026ad3
--- /dev/null
+++ b/debian/libobjc3.symbols.armhf
@@ -0,0 +1,4 @@
+libobjc.so.3 libobjc3 #MINVER#
+#include "libobjc3.symbols.common"
+ __gnu_objc_personality_v0@Base 4.2.1
+ __objc_exception_class@Base 4.3.0
diff --git a/debian/libobjc3.symbols.common b/debian/libobjc3.symbols.common
new file mode 100644
index 0000000..bd8153a
--- /dev/null
+++ b/debian/libobjc3.symbols.common
@@ -0,0 +1,283 @@
+ __objc_accessors_init@Base 4.6
+ __objc_add_class_to_hash@Base 4.2.1
+ __objc_category_name_Object_Deprecated@Base 4.6
+ __objc_category_name_Protocol_Deprecated@Base 4.6
+ __objc_class_links_resolved@Base 4.2.1
+ __objc_class_name_NXConstantString@Base 4.2.1
+ __objc_class_name_Object@Base 4.2.1
+ __objc_class_name_Protocol@Base 4.2.1
+ __objc_dangling_categories@Base 4.2.1
+ __objc_exec_class@Base 4.2.1
+ __objc_force_linking@Base 4.2.1
+ __objc_generate_gc_type_description@Base 4.2.1
+ __objc_get_forward_imp@Base 4.2.1
+ __objc_init_class@Base 4.6
+ __objc_init_class_tables@Base 4.2.1
+ __objc_init_dispatch_tables@Base 4.2.1
+ __objc_init_selector_tables@Base 4.2.1
+ __objc_init_thread_system@Base 4.2.1
+ __objc_install_premature_dtable@Base 4.2.1
+ __objc_is_multi_threaded@Base 4.2.1
+ __objc_linking@Base 4.2.1
+ __objc_msg_forward@Base 4.2.1
+ __objc_msg_forward2@Base 4.3
+ __objc_print_dtable_stats@Base 4.2.1
+ __objc_protocols_add_protocol@Base 4.6
+ __objc_protocols_init@Base 4.6
+ __objc_read_nbyte_uint@Base 4.2.1
+ __objc_read_nbyte_ulong@Base 4.2.1
+ __objc_register_instance_methods_to_class@Base 4.2.1
+ __objc_register_selectors_from_class@Base 4.2.1
+ __objc_register_selectors_from_description_list@Base 4.6
+ __objc_register_selectors_from_list@Base 4.2.1
+ __objc_register_selectors_from_module@Base 4.6
+ __objc_resolve_class_links@Base 4.2.1
+ __objc_responds_to@Base 4.2.1
+ __objc_runtime_mutex@Base 4.2.1
+ __objc_runtime_threads_alive@Base 4.2.1
+ __objc_selector_max_index@Base 4.2.1
+ __objc_sparse2_id@Base 4.2.1
+ __objc_sync_init@Base 4.6
+ __objc_thread_exit_status@Base 4.2.1
+ __objc_uninstalled_dtable@Base 4.2.1
+ __objc_update_classes_with_methods@Base 4.6
+ __objc_update_dispatch_table_for_class@Base 4.2.1
+ __objc_write_class@Base 4.2.1
+ __objc_write_object@Base 4.2.1
+ __objc_write_selector@Base 4.2.1
+ _objc_abort@Base 4.6
+ _objc_atomic_malloc@Base 4.2.1
+ _objc_became_multi_threaded@Base 4.2.1
+ _objc_calloc@Base 4.2.1
+ _objc_free@Base 4.2.1
+ _objc_load_callback@Base 4.2.1
+ _objc_lookup_class@Base 4.6
+ _objc_malloc@Base 4.2.1
+ _objc_object_alloc@Base 4.2.1
+ _objc_object_copy@Base 4.2.1
+ _objc_object_dispose@Base 4.2.1
+ _objc_realloc@Base 4.2.1
+ _objc_unexpected_exception@Base 4.4.0
+ _objc_valloc@Base 4.2.1
+ class_addIvar@Base 4.6
+ class_addMethod@Base 4.6
+ class_addProtocol@Base 4.6
+ class_add_method_list@Base 4.2.1
+ class_conformsToProtocol@Base 4.6
+ class_copyIvarList@Base 4.6
+ class_copyMethodList@Base 4.6
+ class_copyPropertyList@Base 4.6
+ class_copyProtocolList@Base 4.6
+ class_createInstance@Base 4.6
+ class_create_instance@Base 4.2.1
+ class_getClassMethod@Base 4.6
+ class_getClassVariable@Base 4.6
+ class_getInstanceMethod@Base 4.6
+ class_getInstanceSize@Base 4.6
+ class_getInstanceVariable@Base 4.6
+ class_getIvarLayout@Base 4.6
+ class_getMethodImplementation@Base 4.6
+ class_getName@Base 4.6
+ class_getProperty@Base 4.6
+ class_getSuperclass@Base 4.6
+ class_getVersion@Base 4.6
+ class_getWeakIvarLayout@Base 4.6
+ class_get_class_method@Base 4.2.1
+ class_get_instance_method@Base 4.2.1
+ class_isMetaClass@Base 4.6
+ class_ivar_set_gcinvisible@Base 4.2.1
+ class_pose_as@Base 4.2.1
+ class_replaceMethod@Base 4.6
+ class_respondsToSelector@Base 4.6
+ class_setIvarLayout@Base 4.6
+ class_setVersion@Base 4.6
+ class_setWeakIvarLayout@Base 4.6
+ get_imp@Base 4.2.1
+ idxsize@Base 4.2.1
+ ivar_getName@Base 4.6
+ ivar_getOffset@Base 4.6
+ ivar_getTypeEncoding@Base 4.6
+ method_copyArgumentType@Base 4.6
+ method_copyReturnType@Base 4.6
+ method_exchangeImplementations@Base 4.6
+ method_getArgumentType@Base 4.6
+ method_getDescription@Base 4.6
+ method_getImplementation@Base 4.6
+ method_getName@Base 4.6
+ method_getNumberOfArguments@Base 4.6
+ method_getReturnType@Base 4.6
+ method_getTypeEncoding@Base 4.6
+ method_get_first_argument@Base 4.2.1
+ method_get_imp@Base 4.6
+ method_get_next_argument@Base 4.2.1
+ method_get_nth_argument@Base 4.2.1
+ method_get_number_of_arguments@Base 4.2.1
+ method_get_sizeof_arguments@Base 4.2.1
+ method_setImplementation@Base 4.6
+ narrays@Base 4.2.1
+ nbuckets@Base 4.2.1
+ nil_method@Base 4.2.1
+ nindices@Base 4.2.1
+ objc_aligned_size@Base 4.2.1
+ objc_alignof_type@Base 4.2.1
+ objc_allocateClassPair@Base 4.6
+ objc_atomic_malloc@Base 4.2.1
+ objc_calloc@Base 4.2.1
+ objc_close_typed_stream@Base 4.2.1
+ objc_condition_allocate@Base 4.2.1
+ objc_condition_broadcast@Base 4.2.1
+ objc_condition_deallocate@Base 4.2.1
+ objc_condition_signal@Base 4.2.1
+ objc_condition_wait@Base 4.2.1
+ objc_copyProtocolList@Base 4.6
+ objc_copyStruct@Base 4.6
+ objc_disposeClassPair@Base 4.6
+ objc_end_of_typed_stream@Base 4.2.1
+ objc_enumerationMutation@Base 4.6
+ objc_error@Base 4.2.1
+ objc_exception_throw@Base 4.2.1
+ objc_flush_typed_stream@Base 4.2.1
+ objc_free@Base 4.2.1
+ objc_getClass@Base 4.6
+ objc_getClassList@Base 4.6
+ objc_getMetaClass@Base 4.6
+ objc_getProperty@Base 4.6
+ objc_getPropertyStruct@Base 4.6
+ objc_getProtocol@Base 4.6
+ objc_getRequiredClass@Base 4.6
+ objc_get_class@Base 4.2.1
+ objc_get_meta_class@Base 4.2.1
+ objc_get_stream_class_version@Base 4.2.1
+ objc_get_type_qualifiers@Base 4.2.1
+ objc_get_uninstalled_dtable@Base 4.2.1
+ objc_hash_add@Base 4.2.1
+ objc_hash_delete@Base 4.2.1
+ objc_hash_is_key_in_hash@Base 4.2.1
+ objc_hash_new@Base 4.2.1
+ objc_hash_next@Base 4.2.1
+ objc_hash_remove@Base 4.2.1
+ objc_hash_value_for_key@Base 4.2.1
+ objc_layout_finish_structure@Base 4.2.1
+ objc_layout_structure@Base 4.2.1
+ objc_layout_structure_get_info@Base 4.2.1
+ objc_layout_structure_next_member@Base 4.2.1
+ objc_lookUpClass@Base 4.6
+ objc_lookup_class@Base 4.2.1
+ objc_malloc@Base 4.2.1
+ objc_msg_lookup@Base 4.2.1
+ objc_msg_lookup_super@Base 4.2.1
+ objc_msg_sendv@Base 4.2.1
+ objc_mutex_allocate@Base 4.2.1
+ objc_mutex_deallocate@Base 4.2.1
+ objc_mutex_lock@Base 4.2.1
+ objc_mutex_trylock@Base 4.2.1
+ objc_mutex_unlock@Base 4.2.1
+ objc_next_class@Base 4.2.1
+ objc_open_typed_stream@Base 4.2.1
+ objc_open_typed_stream_for_file@Base 4.2.1
+ objc_promoted_size@Base 4.2.1
+ objc_read_array@Base 4.2.1
+ objc_read_char@Base 4.2.1
+ objc_read_int@Base 4.2.1
+ objc_read_long@Base 4.2.1
+ objc_read_object@Base 4.2.1
+ objc_read_selector@Base 4.2.1
+ objc_read_short@Base 4.2.1
+ objc_read_string@Base 4.2.1
+ objc_read_type@Base 4.2.1
+ objc_read_types@Base 4.2.1
+ objc_read_unsigned_char@Base 4.2.1
+ objc_read_unsigned_int@Base 4.2.1
+ objc_read_unsigned_long@Base 4.2.1
+ objc_read_unsigned_short@Base 4.2.1
+ objc_realloc@Base 4.2.1
+ objc_registerClassPair@Base 4.6
+ objc_setEnumerationMutationHandler@Base 4.6
+ objc_setExceptionMatcher@Base 4.6
+ objc_setGetUnknownClassHandler@Base 4.6
+ objc_setProperty@Base 4.6
+ objc_setPropertyStruct@Base 4.6
+ objc_setUncaughtExceptionHandler@Base 4.6
+ objc_set_error_handler@Base 4.2.1
+ objc_set_thread_callback@Base 4.2.1
+ objc_sizeof_type@Base 4.2.1
+ objc_skip_argspec@Base 4.2.1
+ objc_skip_offset@Base 4.2.1
+ objc_skip_type_qualifiers@Base 4.2.1
+ objc_skip_typespec@Base 4.2.1
+ objc_sync_enter@Base 4.6
+ objc_sync_exit@Base 4.6
+ objc_thread_add@Base 4.2.1
+ objc_thread_detach@Base 4.2.1
+ objc_thread_exit@Base 4.2.1
+ objc_thread_get_data@Base 4.2.1
+ objc_thread_get_priority@Base 4.2.1
+ objc_thread_id@Base 4.2.1
+ objc_thread_remove@Base 4.2.1
+ objc_thread_set_data@Base 4.2.1
+ objc_thread_set_priority@Base 4.2.1
+ objc_thread_yield@Base 4.2.1
+ objc_valloc@Base 4.2.1
+ objc_verror@Base 4.2.1
+ objc_write_array@Base 4.2.1
+ objc_write_char@Base 4.2.1
+ objc_write_int@Base 4.2.1
+ objc_write_long@Base 4.2.1
+ objc_write_object@Base 4.2.1
+ objc_write_object_reference@Base 4.2.1
+ objc_write_root_object@Base 4.2.1
+ objc_write_selector@Base 4.2.1
+ objc_write_short@Base 4.2.1
+ objc_write_string@Base 4.2.1
+ objc_write_string_atomic@Base 4.2.1
+ objc_write_type@Base 4.2.1
+ objc_write_types@Base 4.2.1
+ objc_write_unsigned_char@Base 4.2.1
+ objc_write_unsigned_int@Base 4.2.1
+ objc_write_unsigned_long@Base 4.2.1
+ objc_write_unsigned_short@Base 4.2.1
+ object_copy@Base 4.2.1
+ object_dispose@Base 4.2.1
+ object_getClassName@Base 4.6
+ object_getIndexedIvars@Base 4.6
+ object_getInstanceVariable@Base 4.6
+ object_getIvar@Base 4.6
+ object_setClass@Base 4.6
+ object_setInstanceVariable@Base 4.6
+ object_setIvar@Base 4.6
+ property_getAttributes@Base 4.6
+ property_getName@Base 4.6
+ protocol_conformsToProtocol@Base 4.6
+ protocol_copyMethodDescriptionList@Base 4.6
+ protocol_copyPropertyList@Base 4.6
+ protocol_copyProtocolList@Base 4.6
+ protocol_getMethodDescription@Base 4.6
+ protocol_getName@Base 4.6
+ protocol_getProperty@Base 4.6
+ protocol_isEqual@Base 4.6
+ sarray_at_put@Base 4.2.1
+ sarray_at_put_safe@Base 4.2.1
+ sarray_free@Base 4.2.1
+ sarray_lazy_copy@Base 4.2.1
+ sarray_new@Base 4.2.1
+ sarray_realloc@Base 4.2.1
+ sarray_remove_garbage@Base 4.2.1
+ search_for_method_in_list@Base 4.2.1
+ sel_copyTypedSelectorList@Base 4.6
+ sel_getName@Base 4.6
+ sel_getTypeEncoding@Base 4.6
+ sel_getTypedSelector@Base 4.6
+ sel_getUid@Base 4.6
+ sel_get_any_typed_uid@Base 4.2.1
+ sel_get_any_uid@Base 4.2.1
+ sel_get_name@Base 4.2.1
+ sel_get_type@Base 4.2.1
+ sel_get_typed_uid@Base 4.2.1
+ sel_get_uid@Base 4.2.1
+ sel_isEqual@Base 4.6
+ sel_is_mapped@Base 4.2.1
+ sel_registerName@Base 4.6
+ sel_registerTypedName@Base 4.6
+ sel_register_name@Base 4.2.1
+ sel_register_typed_name@Base 4.2.1
+ sel_types_match@Base 4.2.1
diff --git a/debian/libquadmath0.symbols b/debian/libquadmath0.symbols
new file mode 100644
index 0000000..1fa13b2
--- /dev/null
+++ b/debian/libquadmath0.symbols
@@ -0,0 +1,2 @@
+libquadmath.so.0 libquadmath0 #MINVER#
+#include "libquadmath0.symbols.common"
diff --git a/debian/libquadmath0.symbols.common b/debian/libquadmath0.symbols.common
new file mode 100644
index 0000000..f30c7ef
--- /dev/null
+++ b/debian/libquadmath0.symbols.common
@@ -0,0 +1,92 @@
+ QUADMATH_1.0@QUADMATH_1.0 4.6
+ acoshq@QUADMATH_1.0 4.6
+ acosq@QUADMATH_1.0 4.6
+ asinhq@QUADMATH_1.0 4.6
+ asinq@QUADMATH_1.0 4.6
+ atan2q@QUADMATH_1.0 4.6
+ atanhq@QUADMATH_1.0 4.6
+ atanq@QUADMATH_1.0 4.6
+ cabsq@QUADMATH_1.0 4.6
+ cacoshq@QUADMATH_1.0 4.6
+ cacosq@QUADMATH_1.0 4.6
+ cargq@QUADMATH_1.0 4.6
+ casinhq@QUADMATH_1.0 4.6
+ casinq@QUADMATH_1.0 4.6
+ catanhq@QUADMATH_1.0 4.6
+ catanq@QUADMATH_1.0 4.6
+ cbrtq@QUADMATH_1.0 4.6
+ ccoshq@QUADMATH_1.0 4.6
+ ccosq@QUADMATH_1.0 4.6
+ ceilq@QUADMATH_1.0 4.6
+ cexpiq@QUADMATH_1.0 4.6
+ cexpq@QUADMATH_1.0 4.6
+ cimagq@QUADMATH_1.0 4.6
+ clog10q@QUADMATH_1.0 4.6
+ clogq@QUADMATH_1.0 4.6
+ conjq@QUADMATH_1.0 4.6
+ copysignq@QUADMATH_1.0 4.6
+ coshq@QUADMATH_1.0 4.6
+ cosq@QUADMATH_1.0 4.6
+ cpowq@QUADMATH_1.0 4.6
+ cprojq@QUADMATH_1.0 4.6
+ crealq@QUADMATH_1.0 4.6
+ csinhq@QUADMATH_1.0 4.6
+ csinq@QUADMATH_1.0 4.6
+ csqrtq@QUADMATH_1.0 4.6
+ ctanhq@QUADMATH_1.0 4.6
+ ctanq@QUADMATH_1.0 4.6
+ erfcq@QUADMATH_1.0 4.6
+ erfq@QUADMATH_1.0 4.6
+ expm1q@QUADMATH_1.0 4.6
+ expq@QUADMATH_1.0 4.6
+ fabsq@QUADMATH_1.0 4.6
+ fdimq@QUADMATH_1.0 4.6
+ finiteq@QUADMATH_1.0 4.6
+ floorq@QUADMATH_1.0 4.6
+ fmaq@QUADMATH_1.0 4.6
+ fmaxq@QUADMATH_1.0 4.6
+ fminq@QUADMATH_1.0 4.6
+ fmodq@QUADMATH_1.0 4.6
+ frexpq@QUADMATH_1.0 4.6
+ hypotq@QUADMATH_1.0 4.6
+ ilogbq@QUADMATH_1.0 4.6
+ isinfq@QUADMATH_1.0 4.6
+ isnanq@QUADMATH_1.0 4.6
+ j0q@QUADMATH_1.0 4.6
+ j1q@QUADMATH_1.0 4.6
+ jnq@QUADMATH_1.0 4.6
+ ldexpq@QUADMATH_1.0 4.6
+ lgammaq@QUADMATH_1.0 4.6
+ llrintq@QUADMATH_1.0 4.6
+ llroundq@QUADMATH_1.0 4.6
+ log10q@QUADMATH_1.0 4.6
+ log1pq@QUADMATH_1.0 4.6
+ log2q@QUADMATH_1.0 4.6
+ logq@QUADMATH_1.0 4.6
+ lrintq@QUADMATH_1.0 4.6
+ lroundq@QUADMATH_1.0 4.6
+ modfq@QUADMATH_1.0 4.6
+ nanq@QUADMATH_1.0 4.6
+ nearbyintq@QUADMATH_1.0 4.6
+ nextafterq@QUADMATH_1.0 4.6
+ powq@QUADMATH_1.0 4.6
+ quadmath_snprintf@QUADMATH_1.0 4.6
+ remainderq@QUADMATH_1.0 4.6
+ remquoq@QUADMATH_1.0 4.6
+ rintq@QUADMATH_1.0 4.6
+ roundq@QUADMATH_1.0 4.6
+ scalblnq@QUADMATH_1.0 4.6
+ scalbnq@QUADMATH_1.0 4.6
+ signbitq@QUADMATH_1.0 4.6
+ sincosq@QUADMATH_1.0 4.6
+ sinhq@QUADMATH_1.0 4.6
+ sinq@QUADMATH_1.0 4.6
+ sqrtq@QUADMATH_1.0 4.6
+ strtoflt128@QUADMATH_1.0 4.6
+ tanhq@QUADMATH_1.0 4.6
+ tanq@QUADMATH_1.0 4.6
+ tgammaq@QUADMATH_1.0 4.6
+ truncq@QUADMATH_1.0 4.6
+ y0q@QUADMATH_1.0 4.6
+ y1q@QUADMATH_1.0 4.6
+ ynq@QUADMATH_1.0 4.6
diff --git a/debian/libstdc++6.symbols.32bit b/debian/libstdc++6.symbols.32bit
new file mode 100644
index 0000000..32f3d16
--- /dev/null
+++ b/debian/libstdc++6.symbols.32bit
@@ -0,0 +1,551 @@
+#include "libstdc++6.symbols.common"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base16_M_get_free_listEj@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base9_M_refillEj@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reclaim_blockEPcj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reserve_blockEjj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reclaim_blockEPcj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reserve_blockEjj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx9free_list6_M_getEj@GLIBCXX_3.4.4 4.1.1
+ _ZNK10__cxxabiv117__class_type_info12__do_dyncastEiNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcEiPKvPKS0_S2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE2atEj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE6substrEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEEixEj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEjjPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSs16find_last_not_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs2atEj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4copyEPcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs6substrEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjRKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_checkEjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_limitEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSsixEj@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE6_M_putEPcjPKcPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE6_M_putEPwjPKwPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE9do_lengthERS0_PKcS4_j@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE9do_lengthERS0_PKcS4_j@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE12_M_transformEPcPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE12_M_transformEPwPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcjcRSt8ios_basePcS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcjcS6_PcS7_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEciRSt8ios_basePcPKcRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcjwRSt8ios_basePwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcjwPKwPwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwiRSt8ios_basePwPKwRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_numES3_S3_RiiijRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES3_S3_RiPPKcjRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE24_M_extract_wday_or_monthES3_S3_RiPPKcjRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4.14 4.5
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_numES3_S3_RiiijRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES3_S3_RiPPKwjRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE24_M_extract_wday_or_monthES3_S3_RiPPKwjRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4.14 4.5
+ _ZNKSt8valarrayIjE4sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj@GLIBCXX_3.4.16 4.6.0
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEjwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEjjjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2EjwRKS1_@GLIBCXX_3.4.14 4.5
+ _ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEjjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE2atEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_j@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEjjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5eraseEjj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_jw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EPKwjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EjwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EPKwjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EjwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEixEj@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPcic@GLIBCXX_3.4 4.1.1
+ _ZNSi4readEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi5seekgExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEi@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEi@GLIBCXX_3.4.5 4.1.1
+ _ZNSi6ignoreEii@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPcic@GLIBCXX_3.4 4.1.1
+ _ZNSi8readsomeEPci@GLIBCXX_3.4 4.1.1
+ _ZNSo5seekpExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSo5writeEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSo8_M_writeEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSs10_S_compareEjj@GLIBCXX_3.4.16 4.6.0
+ _ZNSs12_S_constructEjcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs14_M_replace_auxEjjjc@GLIBCXX_3.4 4.1.1
+ _ZNSs15_M_replace_safeEjjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs18_S_construct_aux_2EjcRKSaIcE@GLIBCXX_3.4.14 4.5
+ _ZNSs2atEj@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4.5 4.1.1
+ _ZNSs4_Rep8_M_cloneERKSaIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep9_S_createEjjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs5eraseEjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjRKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEj@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcj@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7_M_moveEPcPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_moveEPcPKcj@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_jc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjRKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjjc@GLIBCXX_3.4 4.1.1
+ _ZNSs7reserveEj@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcjc@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcjc@GLIBCXX_3.4.5 4.1.1
+ _ZNSs9_M_mutateEjjj@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EPKcjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsjjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EjcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EPKcjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsjjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EjcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsixEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPci@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EPSt18__moneypunct_cacheIcLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EPSt18__moneypunct_cacheIcLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EPSt18__moneypunct_cacheIcLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EPSt18__moneypunct_cacheIcLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EPSt18__moneypunct_cacheIwLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EPSt18__moneypunct_cacheIwLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EPSt18__moneypunct_cacheIwLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EPSt18__moneypunct_cacheIwLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EPSt17__timepunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EPSt17__timepunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EPSt17__timepunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EPSt17__timepunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE7seekoffExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE8xsputn_2EPKciS2_i@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_allocEj@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_setupEPcS0_i@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPFPvjEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKai@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKhi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPaiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPciS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPhiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1Ei@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPFPvjEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKai@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKhi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPaiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPciS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPhiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2Ei@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE13_M_set_bufferEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE22_M_convert_to_externalEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE13_M_set_bufferEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE22_M_convert_to_externalEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwiw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE4readEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5seekgExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4.5 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEij@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwiw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE8readsomeEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_writeEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ (arch=!powerpc !ppc64 !sparc)_ZNSt14numeric_limitsIeE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@GLIBCXX_3.4.16 4.6.0
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@GLIBCXX_3.4.16 4.6.0
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9pubsetbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@GLIBCXX_3.4.16 4.6.0
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@GLIBCXX_3.4.16 4.6.0
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9pubsetbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@GLIBCXX_3.4.16 4.6.0
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@GLIBCXX_3.4.16 4.6.0
+ _ZNSt15messages_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EP15__locale_structPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EP15__locale_structPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC1EjRKSt8valarrayIjES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC2EjRKSt8valarrayIjES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl16_M_install_cacheEPKNS_5facetEj@GLIBCXX_3.4.7 4.1.1
+ _ZNSt6locale5_ImplC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1ERKS0_j@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2ERKS0_j@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EPSt16__numpunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EPSt16__numpunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EPSt16__numpunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EPSt16__numpunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC1ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC2ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEixEj@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZSt11_Hash_bytesPKvjj@CXXABI_1.3.5 4.6
+ _ZSt15_Fnv_hash_bytesPKvjj@CXXABI_1.3.5 4.6
+ _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i@GLIBCXX_3.4.9 4.2.1
+ _ZSt16__ostream_insertIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKS3_i@GLIBCXX_3.4.9 4.2.1
+ _ZSt17__copy_streambufsIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.6 4.1.1
+ _ZSt17__copy_streambufsIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.6 4.1.1
+ _ZSt17__verify_groupingPKcjRKSs@GLIBCXX_3.4.10 4.3
+ _ZSt21__copy_streambufs_eofIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZSt21__copy_streambufs_eofIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZThn8_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSiD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSiD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSoD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSoD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10istrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10istrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10ostrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10ostrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _Znaj@GLIBCXX_3.4 4.1.1
+ _ZnajRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _Znwj@GLIBCXX_3.4 4.1.1
+ _ZnwjRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcEC1EP15pthread_mutex_t@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcEC2EP15pthread_mutex_t@GLIBCXX_3.4 4.1.1
diff --git a/debian/libstdc++6.symbols.32bit.hurd b/debian/libstdc++6.symbols.32bit.hurd
new file mode 100644
index 0000000..24952b1
--- /dev/null
+++ b/debian/libstdc++6.symbols.32bit.hurd
@@ -0,0 +1,536 @@
+#include "libstdc++6.symbols.common"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base16_M_get_free_listEj@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base9_M_refillEj@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reclaim_blockEPcj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reserve_blockEjj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reclaim_blockEPcj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reserve_blockEjj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx9free_list6_M_getEj@GLIBCXX_3.4.4 4.1.1
+ _ZNK10__cxxabiv117__class_type_info12__do_dyncastEiNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcEiPKvPKS0_S2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE2atEj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE6substrEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEEixEj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEjjPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSs16find_last_not_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs2atEj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4copyEPcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs6substrEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjRKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_checkEjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_limitEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSsixEj@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE6_M_putEPcjPKcPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE6_M_putEPwjPKwPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE9do_lengthERS0_PKcS4_j@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE9do_lengthERS0_PKcS4_j@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE12_M_transformEPcPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE12_M_transformEPwPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcjcRSt8ios_basePcS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcjcS6_PcS7_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEciRSt8ios_basePcPKcRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcjwRSt8ios_basePwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcjwPKwPwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwiRSt8ios_basePwPKwRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_numES3_S3_RiiijRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES3_S3_RiPPKcjRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_numES3_S3_RiiijRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES3_S3_RiPPKwjRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8valarrayIjE4sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEjwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEjjjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEjjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE2atEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_j@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEjjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5eraseEjj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_jw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EPKwjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EjwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EPKwjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EjwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEixEj@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPcic@GLIBCXX_3.4 4.1.1
+ _ZNSi4readEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi5seekgExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEi@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEi@GLIBCXX_3.4.5 4.1.1
+ _ZNSi6ignoreEii@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPcic@GLIBCXX_3.4 4.1.1
+ _ZNSi8readsomeEPci@GLIBCXX_3.4 4.1.1
+ _ZNSo5seekpExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSo5writeEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSo8_M_writeEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSs12_S_constructEjcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs14_M_replace_auxEjjjc@GLIBCXX_3.4 4.1.1
+ _ZNSs15_M_replace_safeEjjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs2atEj@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4.5 4.1.1
+ _ZNSs4_Rep8_M_cloneERKSaIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep9_S_createEjjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs5eraseEjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjRKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEj@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcj@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7_M_moveEPcPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_moveEPcPKcj@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_jc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjRKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjjc@GLIBCXX_3.4 4.1.1
+ _ZNSs7reserveEj@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcjc@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcjc@GLIBCXX_3.4.5 4.1.1
+ _ZNSs9_M_mutateEjjj@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EPKcjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsjjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EjcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EPKcjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsjjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EjcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsixEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPci@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EPSt18__moneypunct_cacheIcLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EPSt18__moneypunct_cacheIcLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EPSt18__moneypunct_cacheIcLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EPSt18__moneypunct_cacheIcLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EPSt18__moneypunct_cacheIwLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EPSt18__moneypunct_cacheIwLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EPSt18__moneypunct_cacheIwLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EPSt18__moneypunct_cacheIwLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EPSt17__timepunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EPSt17__timepunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EPSt17__timepunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EPSt17__timepunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE7seekoffExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE8xsputn_2EPKciS2_i@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_allocEj@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_setupEPcS0_i@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPFPvjEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKai@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKhi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPaiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPciS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPhiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1Ei@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPFPvjEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKai@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKhi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPaiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPciS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPhiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2Ei@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE13_M_set_bufferEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE22_M_convert_to_externalEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE13_M_set_bufferEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE22_M_convert_to_externalEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwiw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE4readEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5seekgExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4.5 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEij@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwiw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE8readsomeEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_writeEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9pubsetbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9pubsetbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EP15__locale_structPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EP15__locale_structPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC1EjRKSt8valarrayIjES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC2EjRKSt8valarrayIjES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl16_M_install_cacheEPKNS_5facetEj@GLIBCXX_3.4.7 4.1.1
+ _ZNSt6locale5_ImplC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1ERKS0_j@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2ERKS0_j@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EPSt16__numpunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EPSt16__numpunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EPSt16__numpunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EPSt16__numpunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC1ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC2ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEixEj@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i@GLIBCXX_3.4.9 4.2.1
+ _ZSt16__ostream_insertIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKS3_i@GLIBCXX_3.4.9 4.2.1
+ _ZSt17__copy_streambufsIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.6 4.1.1
+ _ZSt17__copy_streambufsIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.6 4.1.1
+ _ZSt17__verify_groupingPKcjRKSs@GLIBCXX_3.4.10 4.3
+ _ZSt21__copy_streambufs_eofIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZSt21__copy_streambufs_eofIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZThn8_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSiD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSiD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSoD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSoD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10istrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10istrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10ostrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10ostrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _Znaj@GLIBCXX_3.4 4.1.1
+ _ZnajRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _Znwj@GLIBCXX_3.4 4.1.1
+ _ZnwjRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcEC1EP15__pthread_mutex@GLIBCXX_3.4 4.3.0
+ _ZNSt12__basic_fileIcEC2EP15__pthread_mutex@GLIBCXX_3.4 4.3.0
diff --git a/debian/libstdc++6.symbols.64bit b/debian/libstdc++6.symbols.64bit
new file mode 100644
index 0000000..b024cf2
--- /dev/null
+++ b/debian/libstdc++6.symbols.64bit
@@ -0,0 +1,556 @@
+#include "libstdc++6.symbols.common"
+ _ZN9__gnu_cxx17__pool_alloc_base16_M_get_free_listEm@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base9_M_refillEm@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsgetnEPcl@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsputnEPKcl@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsgetnEPwl@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsputnEPKwl@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reclaim_blockEPcm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reserve_blockEmm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reclaim_blockEPcm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reserve_blockEmm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx9free_list6_M_getEm@GLIBCXX_3.4.4 4.1.1
+ _ZNK10__cxxabiv117__class_type_info12__do_dyncastElNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcElPKvPKS0_S2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastElNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcElPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastElNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcElPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEmmPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE2atEm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE6substrEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEEixEm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEmmPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSs16find_last_not_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs2atEm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4copyEPcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs6substrEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_checkEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_limitEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSsixEm@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE6_M_putEPcmPKcPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE6_M_putEPwmPKwPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE9do_lengthERS0_PKcS4_m@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE9do_lengthERS0_PKcS4_m@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE12_M_transformEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE12_M_transformEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcmcRSt8ios_basePcS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcmcS6_PcS7_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEclRSt8ios_basePcPKcRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcmwRSt8ios_basePwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcmwPKwPwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwlRSt8ios_basePwPKwRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_numES3_S3_RiiimRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES3_S3_RiPPKcmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE24_M_extract_wday_or_monthES3_S3_RiPPKcmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4.14 4.5
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_numES3_S3_RiiimRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES3_S3_RiPPKwmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE24_M_extract_wday_or_monthES3_S3_RiPPKwmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4.14 4.5
+ _ZNKSt8valarrayImE4sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEmm@GLIBCXX_3.4.16 4.6.0
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEmmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2EmwRKS1_@GLIBCXX_3.4.14 4.5
+ _ZNSbIwSt11char_traitsIwESaIwEE2atEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_m@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEmmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5eraseEmm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_mw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EPKwmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EPKwmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEixEm@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPclc@GLIBCXX_3.4 4.1.1
+ _ZNSi4readEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSi5seekgElSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEl@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEl@GLIBCXX_3.4.5 4.1.1
+ _ZNSi6ignoreEli@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPclc@GLIBCXX_3.4 4.1.1
+ _ZNSi8readsomeEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSo5seekpElSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSo5writeEPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSo8_M_writeEPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSs10_S_compareEmm@GLIBCXX_3.4.16 4.6.0
+ _ZNSs12_S_constructEmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs14_M_replace_auxEmmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs15_M_replace_safeEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs18_S_construct_aux_2EmcRKSaIcE@GLIBCXX_3.4.14 4.5
+ _ZNSs2atEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs4_Rep8_M_cloneERKSaIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep9_S_createEmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs5eraseEmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEm@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7_M_moveEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_moveEPcPKcm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_mc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs7reserveEm@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcmc@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcmc@GLIBCXX_3.4.5 4.1.1
+ _ZNSs9_M_mutateEmmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EPKcmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EPKcmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsixEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EPSt18__moneypunct_cacheIcLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EPSt18__moneypunct_cacheIcLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EPSt18__moneypunct_cacheIcLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EPSt18__moneypunct_cacheIcLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EPSt18__moneypunct_cacheIwLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EPSt18__moneypunct_cacheIwLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EPSt18__moneypunct_cacheIwLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EPSt18__moneypunct_cacheIwLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EPSt17__timepunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EPSt17__timepunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EPSt17__timepunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EPSt17__timepunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsgetnEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsputnEPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE7seekoffElSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE8xsputn_2EPKclS2_l@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf6setbufEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_allocEm@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_setupEPcS0_l@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPFPvmEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKal@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKhl@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPalS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPclS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPhlS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1El@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPFPvmEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKal@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKhl@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPalS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPclS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPhlS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2El@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE13_M_set_bufferEl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE22_M_convert_to_externalEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6setbufEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsgetnEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsputnEPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7_M_seekElSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE13_M_set_bufferEl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE22_M_convert_to_externalEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6setbufEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsgetnEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsputnEPKwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7_M_seekElSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwlw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE4readEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5seekgElSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEl@GLIBCXX_3.4.5 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreElj@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwlw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE8readsomeEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpElSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_writeEPKwl@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ (arch=!alpha !powerpc !ppc64 !s390)_ZNSt14numeric_limitsIeE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEl@GLIBCXX_3.4.16 4.6.0
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEl@GLIBCXX_3.4.16 4.6.0
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetnEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sputnEPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsgetnEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsputnEPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9pubsetbufEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_l@GLIBCXX_3.4.16 4.6.0
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sgetnEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sputnEPKwl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6setbufEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsgetnEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsputnEPKwl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9pubsetbufEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEl@GLIBCXX_3.4.16 4.6.0
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEl@GLIBCXX_3.4.16 4.6.0
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_l@GLIBCXX_3.4.16 4.6.0
+ _ZNSt15messages_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EP15__locale_structPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EP15__locale_structPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC1EmRKSt8valarrayImES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC2EmRKSt8valarrayImES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl16_M_install_cacheEPKNS_5facetEm@GLIBCXX_3.4.7 4.1.1
+ _ZNSt6locale5_ImplC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1ERKS0_m@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2ERKS0_m@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EPSt16__numpunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EPSt16__numpunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EPSt16__numpunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EPSt16__numpunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC1ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC2ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEixEm@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZSt11_Hash_bytesPKvmm@CXXABI_1.3.5 4.6
+ _ZSt15_Fnv_hash_bytesPKvmm@CXXABI_1.3.5 4.6
+ _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l@GLIBCXX_3.4.9 4.2.1
+ _ZSt16__ostream_insertIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKS3_l@GLIBCXX_3.4.9 4.2.1
+ _ZSt17__copy_streambufsIcSt11char_traitsIcEElPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.8 4.1.1
+ _ZSt17__copy_streambufsIwSt11char_traitsIwEElPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.8 4.1.1
+ _ZSt17__verify_groupingPKcmRKSs@GLIBCXX_3.4.10 4.3
+ _ZSt21__copy_streambufs_eofIcSt11char_traitsIcEElPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZSt21__copy_streambufs_eofIwSt11char_traitsIwEElPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZTIPKn@CXXABI_1.3.5 4.6
+ _ZTIPKo@CXXABI_1.3.5 4.6
+ _ZTIPn@CXXABI_1.3.5 4.6
+ _ZTIPo@CXXABI_1.3.5 4.6
+ _ZTIn@CXXABI_1.3.5 4.6
+ _ZTIo@CXXABI_1.3.5 4.6
+ _ZThn16_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSiD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSiD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSoD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSoD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt10istrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt10istrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt10ostrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt10ostrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_istreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_istreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_ostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_ostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ifstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ifstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ofstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ofstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _Znam@GLIBCXX_3.4 4.1.1
+ _ZnamRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _Znwm@GLIBCXX_3.4 4.1.1
+ _ZnwmRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+ _ZNSt12__basic_fileIcEC1EP15pthread_mutex_t@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcEC2EP15pthread_mutex_t@GLIBCXX_3.4 4.1.1
diff --git a/debian/libstdc++6.symbols.alpha b/debian/libstdc++6.symbols.alpha
new file mode 100644
index 0000000..19ac683
--- /dev/null
+++ b/debian/libstdc++6.symbols.alpha
@@ -0,0 +1,9 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.64bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
diff --git a/debian/libstdc++6.symbols.amd64 b/debian/libstdc++6.symbols.amd64
new file mode 100644
index 0000000..ba58be0
--- /dev/null
+++ b/debian/libstdc++6.symbols.amd64
@@ -0,0 +1,7 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
diff --git a/debian/libstdc++6.symbols.arm b/debian/libstdc++6.symbols.arm
new file mode 100644
index 0000000..6369a31
--- /dev/null
+++ b/debian/libstdc++6.symbols.arm
@@ -0,0 +1,6 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+ __gxx_personality_sj0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0
diff --git a/debian/libstdc++6.symbols.armel b/debian/libstdc++6.symbols.armel
new file mode 100644
index 0000000..b04b08a
--- /dev/null
+++ b/debian/libstdc++6.symbols.armel
@@ -0,0 +1,26 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+ CXXABI_ARM_1.3.3@CXXABI_ARM_1.3.3 4.4.0
+ _ZNKSt9type_info6beforeERKS_@GLIBCXX_3.4 4.3.0
+ _ZNKSt9type_infoeqERKS_@GLIBCXX_3.4 4.3.0
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ __aeabi_atexit@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_cctor_nocookie_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_ctor_cookie_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_ctor_nocookie_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_delete3@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_delete3_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_delete@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_dtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_dtor_cookie@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_new_cookie@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_new_cookie_noctor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_new_cookie_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_new_nocookie@CXXABI_ARM_1.3.3 4.4.0
+ __cxa_begin_cleanup@CXXABI_1.3 4.3.0
+ __cxa_end_cleanup@CXXABI_1.3 4.3.0
+ __cxa_type_match@CXXABI_1.3 4.3.0
diff --git a/debian/libstdc++6.symbols.armhf b/debian/libstdc++6.symbols.armhf
new file mode 100644
index 0000000..b04b08a
--- /dev/null
+++ b/debian/libstdc++6.symbols.armhf
@@ -0,0 +1,26 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+ CXXABI_ARM_1.3.3@CXXABI_ARM_1.3.3 4.4.0
+ _ZNKSt9type_info6beforeERKS_@GLIBCXX_3.4 4.3.0
+ _ZNKSt9type_infoeqERKS_@GLIBCXX_3.4 4.3.0
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ __aeabi_atexit@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_cctor_nocookie_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_ctor_cookie_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_ctor_nocookie_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_delete3@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_delete3_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_delete@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_dtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_dtor_cookie@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_new_cookie@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_new_cookie_noctor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_new_cookie_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_new_nocookie@CXXABI_ARM_1.3.3 4.4.0
+ __cxa_begin_cleanup@CXXABI_1.3 4.3.0
+ __cxa_end_cleanup@CXXABI_1.3 4.3.0
+ __cxa_type_match@CXXABI_1.3 4.3.0
diff --git a/debian/libstdc++6.symbols.common b/debian/libstdc++6.symbols.common
new file mode 100644
index 0000000..b8794f8
--- /dev/null
+++ b/debian/libstdc++6.symbols.common
@@ -0,0 +1,3052 @@
+ CXXABI_1.3.1@CXXABI_1.3.1 4.1.1
+ CXXABI_1.3.2@CXXABI_1.3.2 4.3
+ CXXABI_1.3.3@CXXABI_1.3.3 4.4.0
+ CXXABI_1.3.4@CXXABI_1.3.4 4.5
+ CXXABI_1.3.5@CXXABI_1.3.5 4.6
+ CXXABI_1.3@CXXABI_1.3 4.1.1
+ GLIBCXX_3.4.10@GLIBCXX_3.4.10 4.3
+ GLIBCXX_3.4.11@GLIBCXX_3.4.11 4.4.0
+ GLIBCXX_3.4.12@GLIBCXX_3.4.12 4.4.0
+ GLIBCXX_3.4.13@GLIBCXX_3.4.13 4.4.1-4
+ GLIBCXX_3.4.14@GLIBCXX_3.4.14 4.5
+ GLIBCXX_3.4.15@GLIBCXX_3.4.15 4.6
+ GLIBCXX_3.4.16@GLIBCXX_3.4.16 4.6.0
+ GLIBCXX_3.4.1@GLIBCXX_3.4.1 4.1.1
+ GLIBCXX_3.4.2@GLIBCXX_3.4.2 4.1.1
+ GLIBCXX_3.4.3@GLIBCXX_3.4.3 4.1.1
+ GLIBCXX_3.4.4@GLIBCXX_3.4.4 4.1.1
+ GLIBCXX_3.4.5@GLIBCXX_3.4.5 4.1.1
+ GLIBCXX_3.4.6@GLIBCXX_3.4.6 4.1.1
+ GLIBCXX_3.4.7@GLIBCXX_3.4.7 4.1.1
+ GLIBCXX_3.4.8@GLIBCXX_3.4.8 4.1.1
+ GLIBCXX_3.4.9@GLIBCXX_3.4.9 4.2.1
+ GLIBCXX_3.4@GLIBCXX_3.4 4.1.1
+ _ZGVNSt10moneypunctIcLb0EE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt10moneypunctIcLb1EE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt10moneypunctIwLb0EE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt10moneypunctIwLb1EE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt11__timepunctIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt11__timepunctIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt7collateIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt7collateIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8messagesIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8messagesIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8numpunctIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8numpunctIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZN10__cxxabiv116__enum_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv116__enum_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv116__enum_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__array_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__array_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__array_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__class_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__class_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__class_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__pbase_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__pbase_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__pbase_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv119__pointer_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv119__pointer_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv119__pointer_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv120__function_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv120__function_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv120__function_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv120__si_class_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv120__si_class_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv120__si_class_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv121__vmi_class_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv121__vmi_class_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv121__vmi_class_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv123__fundamental_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv123__fundamental_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv123__fundamental_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv129__pointer_to_member_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv129__pointer_to_member_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv129__pointer_to_member_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__gnu_norm15_List_node_base4hookEPS0_@GLIBCXX_3.4 4.1.1
+ _ZN10__gnu_norm15_List_node_base4swapERS0_S1_@GLIBCXX_3.4 4.1.1
+ _ZN10__gnu_norm15_List_node_base6unhookEv@GLIBCXX_3.4 4.1.1
+ _ZN10__gnu_norm15_List_node_base7reverseEv@GLIBCXX_3.4 4.1.1
+ _ZN10__gnu_norm15_List_node_base8transferEPS0_S1_@GLIBCXX_3.4 4.1.1
+ _ZN11__gnu_debug19_Safe_iterator_base12_M_get_mutexEv@GLIBCXX_3.4.9 4.2.1
+ _ZN11__gnu_debug19_Safe_iterator_base16_M_attach_singleEPNS_19_Safe_sequence_baseEb@GLIBCXX_3.4.9 4.2.1
+ _ZN11__gnu_debug19_Safe_iterator_base16_M_detach_singleEv@GLIBCXX_3.4.9 4.2.1
+ _ZN11__gnu_debug19_Safe_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@GLIBCXX_3.4 4.1.1
+ _ZN11__gnu_debug19_Safe_iterator_base9_M_detachEv@GLIBCXX_3.4 4.1.1
+ _ZN11__gnu_debug19_Safe_sequence_base12_M_get_mutexEv@GLIBCXX_3.4.9 4.2.1
+ _ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@GLIBCXX_3.4 4.1.1
+ _ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@GLIBCXX_3.4 4.1.1
+ _ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@GLIBCXX_3.4 4.1.1
+ _ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@GLIBCXX_3.4 4.1.1
+ _ZN14__gnu_parallel9_Settings3getEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN14__gnu_parallel9_Settings3setERS0_@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx17__pool_alloc_base12_M_get_mutexEv@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE4fileEv@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE4syncEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE4syncEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE5uflowEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE5uflowEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE8overflowEi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE9pbackfailEi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE9underflowEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEC1EP8_IO_FILE@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEC2EP8_IO_FILE@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE4fileEv@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE4syncEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE5uflowEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE8overflowEj@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE9pbackfailEj@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE9underflowEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEC1EP8_IO_FILE@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEC2EP8_IO_FILE@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx27__verbose_terminate_handlerEv@CXXABI_1.3 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE10_M_destroyEv@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE13_M_initializeEv@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE10_M_destroyEv@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE13_M_initializeEPFvPvE@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE13_M_initializeEv@GLIBCXX_3.4.6 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_get_thread_idEv@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE21_M_destroy_thread_keyEPv@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx9free_list8_M_clearEv@GLIBCXX_3.4.4 4.1.1
+ _ZNK10__cxxabiv117__class_type_info10__do_catchEPKSt9type_infoPPvj@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PKvRNS0_15__upcast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PPv@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__pbase_type_info10__do_catchEPKSt9type_infoPPvj@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__pbase_type_info15__pointer_catchEPKS0_PPvj@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv119__pointer_type_info14__is_pointer_pEv@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv119__pointer_type_info15__pointer_catchEPKNS_17__pbase_type_infoEPPvj@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__function_type_info15__is_function_pEv@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv129__pointer_to_member_type_info15__pointer_catchEPKNS_17__pbase_type_infoEPPvj@CXXABI_1.3 4.1.1
+ _ZNK11__gnu_debug16_Error_formatter10_M_messageENS_13_Debug_msg_idE@GLIBCXX_3.4 4.1.1
+ _ZNK11__gnu_debug16_Error_formatter10_Parameter14_M_print_fieldEPKS0_PKc@GLIBCXX_3.4 4.1.1
+ _ZNK11__gnu_debug16_Error_formatter10_Parameter20_M_print_descriptionEPKS0_@GLIBCXX_3.4 4.1.1
+ _ZNK11__gnu_debug16_Error_formatter13_M_print_wordEPKc@GLIBCXX_3.4 4.1.1
+ _ZNK11__gnu_debug16_Error_formatter15_M_print_stringEPKc@GLIBCXX_3.4 4.1.1
+ _ZNK11__gnu_debug16_Error_formatter17_M_get_max_lengthEv@GLIBCXX_3.4.10 4.3
+ _ZNK11__gnu_debug16_Error_formatter8_M_errorEv@GLIBCXX_3.4 4.1.1
+ _ZNK11__gnu_debug19_Safe_iterator_base11_M_singularEv@GLIBCXX_3.4 4.1.1
+ _ZNK11__gnu_debug19_Safe_iterator_base14_M_can_compareERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@GLIBCXX_3.4.5 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13get_allocatorEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE3endEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_leakedEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_sharedEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4backEv@GLIBCXX_3.4.15 4.6
+ _ZNKSbIwSt11char_traitsIwESaIwEE4cendEv@GLIBCXX_3.4.14 4.5
+ _ZNKSbIwSt11char_traitsIwESaIwEE4dataEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4rendEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5beginEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5crendEv@GLIBCXX_3.4.14 4.5
+ _ZNKSbIwSt11char_traitsIwESaIwEE5c_strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5emptyEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5frontEv@GLIBCXX_3.4.15 4.6
+ _ZNKSbIwSt11char_traitsIwESaIwEE6_M_repEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE6cbeginEv@GLIBCXX_3.4.14 4.5
+ _ZNKSbIwSt11char_traitsIwESaIwEE6lengthEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE6rbeginEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7_M_dataEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7_M_iendEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7crbeginEv@GLIBCXX_3.4.14 4.5
+ _ZNKSbIwSt11char_traitsIwESaIwEE8capacityEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8max_sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE9_M_ibeginEv@GLIBCXX_3.4 4.1.1
+ _ZNKSi6gcountEv@GLIBCXX_3.4 4.1.1
+ _ZNKSi6sentrycvbEv@GLIBCXX_3.4 4.1.1
+ _ZNKSo6sentrycvbEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs11_M_disjunctEPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs11_M_disjunctEPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSs13get_allocatorEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs3endEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs4_Rep12_M_is_leakedEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs4_Rep12_M_is_sharedEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs4backEv@GLIBCXX_3.4.15 4.6
+ _ZNKSs4cendEv@GLIBCXX_3.4.14 4.5
+ _ZNKSs4dataEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs4rendEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs4sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs5beginEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs5c_strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs5crendEv@GLIBCXX_3.4.14 4.5
+ _ZNKSs5emptyEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs5frontEv@GLIBCXX_3.4.15 4.6
+ _ZNKSs6_M_repEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs6cbeginEv@GLIBCXX_3.4.14 4.5
+ _ZNKSs6lengthEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs6rbeginEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs7_M_dataEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs7_M_iendEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareERKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSs7crbeginEv@GLIBCXX_3.4.14 4.5
+ _ZNKSs8capacityEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs8max_sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs9_M_ibeginEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10bad_typeid4whatEv@GLIBCXX_3.4.9 4.2.1
+ _ZNKSt10error_code23default_error_conditionEv@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt10istrstream5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10lock_error4whatEv@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt10moneypunctIcLb0EE10neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE10pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE11curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE11do_groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE11frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE13decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE13do_neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE13do_pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE13negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE13positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE13thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE14do_curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE14do_frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE16do_decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE16do_negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE16do_positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE16do_thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE8groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE10neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE10pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE11curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE11do_groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE11frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE13decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE13do_neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE13do_pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE13negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE13positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE13thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE14do_curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE14do_frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE16do_decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE16do_negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE16do_positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE16do_thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE8groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE10neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE10pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE11curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE11do_groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE11frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE13decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE13do_neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE13do_pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE13negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE13positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE13thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE14do_curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE14do_frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE16do_decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE16do_negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE16do_positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE16do_thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE8groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE10neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE10pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE11curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE11do_groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE11frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE13decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE13do_neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE13do_pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE13negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE13positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE13thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE14do_curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE14do_frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE16do_decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE16do_negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE16do_positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE16do_thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE8groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10ostrstream5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10ostrstream6pcountEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE15_M_am_pm_formatEPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE15_M_date_formatsEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE15_M_time_formatsEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE19_M_days_abbreviatedEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE20_M_date_time_formatsEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE21_M_months_abbreviatedEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE7_M_daysEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE8_M_am_pmEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE9_M_monthsEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE15_M_am_pm_formatEPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE15_M_date_formatsEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE15_M_time_formatsEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE19_M_days_abbreviatedEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE20_M_date_time_formatsEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE21_M_months_abbreviatedEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE7_M_daysEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE8_M_am_pmEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE9_M_monthsEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11logic_error4whatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt12__basic_fileIcE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt12bad_weak_ptr4whatEv@GLIBCXX_3.4.15 4.6
+ _ZNKSt12future_error4whatEv@GLIBCXX_3.4.14 4.5
+ _ZNKSt12strstreambuf6pcountEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13bad_exception4whatEv@GLIBCXX_3.4.9 4.2.1
+ _ZNKSt13basic_filebufIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_filebufIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_fstreamIcSt11char_traitsIcEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4.5 4.1.1
+ _ZNKSt13basic_fstreamIwSt11char_traitsIwEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4.5 4.1.1
+ _ZNKSt13basic_istreamIwSt11char_traitsIwEE6gcountEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_istreamIwSt11char_traitsIwEE6sentrycvbEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_ostreamIwSt11char_traitsIwEE6sentrycvbEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13runtime_error4whatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ifstreamIcSt11char_traitsIcEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4.5 4.1.1
+ _ZNKSt14basic_ifstreamIwSt11char_traitsIwEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4.5 4.1.1
+ _ZNKSt14basic_ofstreamIcSt11char_traitsIcEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4.5 4.1.1
+ _ZNKSt14basic_ofstreamIwSt11char_traitsIwEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4.5 4.1.1
+ _ZNKSt14error_category10equivalentERKSt10error_codei@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt14error_category10equivalentEiRKSt15error_condition@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt14error_category23default_error_conditionEi@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt15basic_streambufIcSt11char_traitsIcEE4gptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIcSt11char_traitsIcEE4pptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIcSt11char_traitsIcEE5ebackEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIcSt11char_traitsIcEE5egptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIcSt11char_traitsIcEE5epptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIcSt11char_traitsIcEE5pbaseEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIcSt11char_traitsIcEE6getlocEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIwSt11char_traitsIwEE4gptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIwSt11char_traitsIwEE4pptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIwSt11char_traitsIwEE5ebackEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIwSt11char_traitsIwEE5egptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIwSt11char_traitsIwEE5epptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIwSt11char_traitsIwEE5pbaseEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIwSt11char_traitsIwEE6getlocEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt18basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt18basic_stringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_istringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_istringstreamIwSt11char_traitsIwESaIwEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_istringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt3tr14hashIRKSbIwSt11char_traitsIwESaIwEEEclES6_@GLIBCXX_3.4.10 4.3
+ _ZNKSt3tr14hashIRKSsEclES2_@GLIBCXX_3.4.10 4.3
+ _ZNKSt3tr14hashISbIwSt11char_traitsIwESaIwEEEclES4_@GLIBCXX_3.4.10 4.3
+ _ZNKSt3tr14hashISsEclESs@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIRKSbIwSt11char_traitsIwESaIwEEEclES5_@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIRKSsEclES1_@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashISbIwSt11char_traitsIwESaIwEEEclES3_@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashISsEclESs@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashISt10error_codeEclES0_@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt5ctypeIcE10do_tolowerEPcPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIcE10do_tolowerEc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIcE10do_toupperEPcPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIcE10do_toupperEc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIcE13_M_widen_initEv@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt5ctypeIcE14_M_narrow_initEv@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt5ctypeIcE8do_widenEPKcS2_Pc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIcE8do_widenEc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIcE9do_narrowEPKcS2_cPc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIcE9do_narrowEcc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE10do_scan_isEtPKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE10do_tolowerEPwPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE10do_tolowerEw@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE10do_toupperEPwPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE10do_toupperEw@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE11do_scan_notEtPKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE19_M_convert_to_wmaskEt@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE5do_isEPKwS2_Pt@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE5do_isEtw@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE8do_widenEPKcS2_Pw@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE8do_widenEc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE9do_narrowEPKwS2_cPc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE9do_narrowEwc@GLIBCXX_3.4 4.1.1
+ _ZNKSt6locale2id5_M_idEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt6locale4nameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt6localeeqERKS_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE11do_encodingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE13do_max_lengthEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE16do_always_noconvEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE5do_inERS0_PKcS4_RS4_PcS6_RS6_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE6do_outERS0_PKcS4_RS4_PcS6_RS6_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE11do_encodingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE13do_max_lengthEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE16do_always_noconvEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE5do_inERS0_PKcS4_RS4_PwS6_RS6_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE6do_outERS0_PKwS4_RS4_PcS6_RS6_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE10_M_compareEPKcS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE10do_compareEPKcS2_S2_S2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE12do_transformEPKcS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE4hashEPKcS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE7compareEPKcS2_S2_S2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE7do_hashEPKcS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE9transformEPKcS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE10_M_compareEPKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE10do_compareEPKwS2_S2_S2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE12do_transformEPKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE4hashEPKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE7compareEPKwS2_S2_S2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE7do_hashEPKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE9transformEPKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16_M_extract_floatES3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16_M_extract_floatES3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES3_S3_RSt8ios_basecT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES3_S3_RSt8ios_basecT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES3_S3_RSt8ios_basecT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES3_S3_RSt8ios_basecT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES3_S3_RSt8ios_baseccT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIeEES3_S3_RSt8ios_baseccT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPKv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basece@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecy@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecPKv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basece@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecy@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES3_S3_RSt8ios_basewT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES3_S3_RSt8ios_basewT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES3_S3_RSt8ios_basewT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES3_S3_RSt8ios_basewT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES3_S3_RSt8ios_basewcT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIeEES3_S3_RSt8ios_basewcT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewPKv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewe@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewy@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewPKv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewe@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewy@GLIBCXX_3.4 4.1.1
+ _ZNKSt8bad_cast4whatEv@GLIBCXX_3.4.9 4.2.1
+ _ZNKSt8ios_base7failure4whatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE18_M_convert_to_charERKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE20_M_convert_from_charEPc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE3getEiiiRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE4openERKSsRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE4openERKSsRKSt6localePKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE5closeEi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE6do_getEiiiRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE7do_openERKSsRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE8do_closeEi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE18_M_convert_to_charERKSbIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE20_M_convert_from_charEPc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE3getEiiiRKSbIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE4openERKSsRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE4openERKSsRKSt6localePKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE5closeEi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE6do_getEiiiRKSbIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE7do_openERKSsRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE8do_closeEi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE11do_groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE11do_truenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE12do_falsenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE13decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE13thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE16do_decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE16do_thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE8groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE8truenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE9falsenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE11do_groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE11do_truenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE12do_falsenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE13decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE13thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE16do_decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE16do_thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE8groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE8truenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE9falsenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10date_orderEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11do_get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11do_get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11do_get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11get_weekdayES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE13do_date_orderEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE13get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14do_get_weekdayES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16do_get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10date_orderEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE11do_get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE11do_get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE11do_get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE11get_weekdayES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE13do_date_orderEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE13get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14do_get_weekdayES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16do_get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPK2tmPKcSB_@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPK2tmcc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecPK2tmcc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewPK2tmPKwSB_@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewPK2tmcc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewPK2tmcc@GLIBCXX_3.4 4.1.1
+ _ZNKSt9bad_alloc4whatEv@GLIBCXX_3.4.9 4.2.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE10exceptionsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE3badEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE3eofEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE3tieEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE4failEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE4goodEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE6narrowEcc@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE7rdstateEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEEcvPvEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEEntEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE10exceptionsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE3badEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE3eofEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE3tieEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE4failEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE4fillEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE4goodEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE5widenEc@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE6narrowEwc@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE7rdstateEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEEcvPvEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEEntEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9exception4whatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSbIwS2_SaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSbIwS2_SaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_bRSt8ios_basecRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_bRSt8ios_basece@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_bRSt8ios_basecRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_bRSt8ios_basece@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES3_S3_RSt8ios_basecRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES3_S3_RSt8ios_basecRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_bRSt8ios_basewRKSbIwS2_SaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_bRSt8ios_basewe@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_bRSt8ios_basewRKSbIwS2_SaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_bRSt8ios_basewe@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES3_S3_RSt8ios_basewRKSbIwS2_SaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES3_S3_RSt8ios_basewRKSbIwS2_SaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt9strstream5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9strstream6pcountEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9type_info10__do_catchEPKS_PPvj@GLIBCXX_3.4 4.1.1
+ _ZNKSt9type_info11__do_upcastEPKN10__cxxabiv117__class_type_infoEPPv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9type_info14__is_pointer_pEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9type_info15__is_function_pEv@GLIBCXX_3.4 4.1.1
+ _ZNSaIcEC1ERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSaIcEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSaIcEC2ERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSaIcEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSaIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSaIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSaIwEC1ERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSaIwEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSaIwEC2ERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSaIwEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSaIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSaIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIN9__gnu_cxx17__normal_iteratorIPwS2_EEEES6_T_S8_RKS1_St20forward_iterator_tag@GLIBCXX_3.4.14 4.5
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIPKwEEPwT_S7_RKS1_St20forward_iterator_tag@GLIBCXX_3.4.14 4.5
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIPwEES4_T_S5_RKS1_St20forward_iterator_tag@GLIBCXX_3.4.14 4.5
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIPKwS2_EES8_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIS3_S2_EES6_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwPKwS5_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwS3_S3_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE13shrink_to_fitEv@GLIBCXX_3.4.14 4.5
+ _ZNSbIwSt11char_traitsIwESaIwEE3endEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroyERKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_disposeERKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refcopyEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refdataEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep11_S_max_sizeE@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep11_S_terminalE@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep12_S_empty_repEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep13_M_set_leakedEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep15_M_set_sharableEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep7_M_grabERKS1_S5_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4backEv@GLIBCXX_3.4.15 4.6
+ _ZNSbIwSt11char_traitsIwESaIwEE4nposE@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4rendEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4swapERS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5beginEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5clearEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EE@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5frontEv@GLIBCXX_3.4.15 4.6
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendESt16initializer_listIwE@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEOS2_@GLIBCXX_3.4.14 4.5
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignESt16initializer_listIwE@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EESt16initializer_listIwE@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6rbeginEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_dataEPw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_leakEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_NS4_IPKwS2_EES9_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwS8_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_RKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S5_S5_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S6_S6_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_St16initializer_listIwE@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EOS2_@GLIBCXX_3.4.14 4.5
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EPKwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1IN9__gnu_cxx17__normal_iteratorIPwS2_EEEET_S8_RKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1IPKwEET_S6_RKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1IPwEET_S5_RKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EOS2_@GLIBCXX_3.4.15 4.6
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EPKwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ESt16initializer_listIwERKS1_@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ESt16initializer_listIwERKS1_@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2IN9__gnu_cxx17__normal_iteratorIPwS2_EEEET_S8_RKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2IPKwEET_S6_RKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2IPwEET_S5_RKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEaSEOS2_@GLIBCXX_3.4.14 4.5
+ _ZNSbIwSt11char_traitsIwESaIwEEaSEPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEaSERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEaSESt16initializer_listIwE@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEEaSEw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEpLEPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEpLERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEpLESt16initializer_listIwE@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEEpLEw@GLIBCXX_3.4 4.1.1
+ _ZNSdC1EPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSdC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSdC2EPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSdC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSdD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSi10_M_extractIPvEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIbEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIdEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIeEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIfEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIjEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIlEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractImEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractItEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIxEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIyEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi3getERSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSi3getERSt15basic_streambufIcSt11char_traitsIcEEc@GLIBCXX_3.4 4.1.1
+ _ZNSi3getERc@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEv@GLIBCXX_3.4 4.1.1
+ _ZNSi4peekEv@GLIBCXX_3.4 4.1.1
+ _ZNSi4syncEv@GLIBCXX_3.4 4.1.1
+ _ZNSi5seekgESt4fposI11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZNSi5tellgEv@GLIBCXX_3.4 4.1.1
+ _ZNSi5ungetEv@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEv@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEv@GLIBCXX_3.4.5 4.1.1
+ _ZNSi6sentryC1ERSib@GLIBCXX_3.4 4.1.1
+ _ZNSi6sentryC2ERSib@GLIBCXX_3.4 4.1.1
+ _ZNSi7putbackEc@GLIBCXX_3.4 4.1.1
+ _ZNSiC1EPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSiC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSiC2EPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSiC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSiD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSiD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSiD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSirsEPFRSiS_E@GLIBCXX_3.4 4.1.1
+ _ZNSirsEPFRSt8ios_baseS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSirsEPFRSt9basic_iosIcSt11char_traitsIcEES3_E@GLIBCXX_3.4 4.1.1
+ _ZNSirsEPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSirsERPv@GLIBCXX_3.4 4.1.1
+ _ZNSirsERb@GLIBCXX_3.4 4.1.1
+ _ZNSirsERd@GLIBCXX_3.4 4.1.1
+ _ZNSirsERe@GLIBCXX_3.4 4.1.1
+ _ZNSirsERf@GLIBCXX_3.4 4.1.1
+ _ZNSirsERi@GLIBCXX_3.4 4.1.1
+ _ZNSirsERj@GLIBCXX_3.4 4.1.1
+ _ZNSirsERl@GLIBCXX_3.4 4.1.1
+ _ZNSirsERm@GLIBCXX_3.4 4.1.1
+ _ZNSirsERs@GLIBCXX_3.4 4.1.1
+ _ZNSirsERt@GLIBCXX_3.4 4.1.1
+ _ZNSirsERx@GLIBCXX_3.4 4.1.1
+ _ZNSirsERy@GLIBCXX_3.4 4.1.1
+ _ZNSo3putEc@GLIBCXX_3.4 4.1.1
+ _ZNSo5flushEv@GLIBCXX_3.4 4.1.1
+ _ZNSo5seekpESt4fposI11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZNSo5tellpEv@GLIBCXX_3.4 4.1.1
+ _ZNSo6sentryC1ERSo@GLIBCXX_3.4 4.1.1
+ _ZNSo6sentryC2ERSo@GLIBCXX_3.4 4.1.1
+ _ZNSo6sentryD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSo6sentryD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSo9_M_insertIPKvEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSo9_M_insertIbEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSo9_M_insertIdEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSo9_M_insertIeEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSo9_M_insertIlEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSo9_M_insertImEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSo9_M_insertIxEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSo9_M_insertIyEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSoC1EPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSoC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSoC2EPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSoC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSoD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSoD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSoD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSolsEPFRSoS_E@GLIBCXX_3.4 4.1.1
+ _ZNSolsEPFRSt8ios_baseS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSolsEPFRSt9basic_iosIcSt11char_traitsIcEES3_E@GLIBCXX_3.4 4.1.1
+ _ZNSolsEPKv@GLIBCXX_3.4 4.1.1
+ _ZNSolsEPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSolsEb@GLIBCXX_3.4 4.1.1
+ _ZNSolsEd@GLIBCXX_3.4 4.1.1
+ _ZNSolsEe@GLIBCXX_3.4 4.1.1
+ _ZNSolsEf@GLIBCXX_3.4 4.1.1
+ _ZNSolsEi@GLIBCXX_3.4 4.1.1
+ _ZNSolsEj@GLIBCXX_3.4 4.1.1
+ _ZNSolsEl@GLIBCXX_3.4 4.1.1
+ _ZNSolsEm@GLIBCXX_3.4 4.1.1
+ _ZNSolsEs@GLIBCXX_3.4 4.1.1
+ _ZNSolsEt@GLIBCXX_3.4 4.1.1
+ _ZNSolsEx@GLIBCXX_3.4 4.1.1
+ _ZNSolsEy@GLIBCXX_3.4 4.1.1
+ _ZNSs12_Alloc_hiderC1EPcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs12_Alloc_hiderC2EPcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs12_M_leak_hardEv@GLIBCXX_3.4 4.1.1
+ _ZNSs12_S_constructIN9__gnu_cxx17__normal_iteratorIPcSsEEEES2_T_S4_RKSaIcESt20forward_iterator_tag@GLIBCXX_3.4.14 4.5
+ _ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag@GLIBCXX_3.4.14 4.5
+ _ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag@GLIBCXX_3.4.14 4.5
+ _ZNSs12_S_empty_repEv@GLIBCXX_3.4 4.1.1
+ _ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4_@GLIBCXX_3.4 4.1.1
+ _ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2_@GLIBCXX_3.4 4.1.1
+ _ZNSs13_S_copy_charsEPcPKcS1_@GLIBCXX_3.4 4.1.1
+ _ZNSs13_S_copy_charsEPcS_S_@GLIBCXX_3.4 4.1.1
+ _ZNSs13shrink_to_fitEv@GLIBCXX_3.4.14 4.5
+ _ZNSs3endEv@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep10_M_destroyERKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep10_M_disposeERKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep10_M_refcopyEv@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep10_M_refdataEv@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep11_S_max_sizeE@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep11_S_terminalE@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep12_S_empty_repEv@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep13_M_set_leakedEv@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep15_M_set_sharableEv@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep20_S_empty_rep_storageE@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep7_M_grabERKSaIcES2_@GLIBCXX_3.4 4.1.1
+ _ZNSs4backEv@GLIBCXX_3.4.15 4.6
+ _ZNSs4nposE@GLIBCXX_3.4 4.1.1
+ _ZNSs4rendEv@GLIBCXX_3.4 4.1.1
+ _ZNSs4swapERSs@GLIBCXX_3.4 4.1.1
+ _ZNSs5beginEv@GLIBCXX_3.4 4.1.1
+ _ZNSs5clearEv@GLIBCXX_3.4 4.1.1
+ _ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEE@GLIBCXX_3.4 4.1.1
+ _ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEES2_@GLIBCXX_3.4 4.1.1
+ _ZNSs5frontEv@GLIBCXX_3.4.15 4.6
+ _ZNSs6appendEPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendESt16initializer_listIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSs6assignEOSs@GLIBCXX_3.4.14 4.5
+ _ZNSs6assignEPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignESt16initializer_listIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEESt16initializer_listIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEc@GLIBCXX_3.4 4.1.1
+ _ZNSs6rbeginEv@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_dataEPc@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_leakEv@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_NS0_IPKcSsEES5_@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcS4_@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_RKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S1_S1_@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S2_S2_@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_St16initializer_listIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSs9push_backEc@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EOSs@GLIBCXX_3.4.14 4.5
+ _ZNSsC1EPKcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ESt16initializer_listIcERKSaIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSsC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSsC1IN9__gnu_cxx17__normal_iteratorIPcSsEEEET_S4_RKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1IPKcEET_S2_RKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1IPcEET_S1_RKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EOSs@GLIBCXX_3.4.15 4.6
+ _ZNSsC2EPKcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ESt16initializer_listIcERKSaIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSsC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSsC2IN9__gnu_cxx17__normal_iteratorIPcSsEEEET_S4_RKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2IPKcEET_S2_RKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2IPcEET_S1_RKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSsD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSsaSEOSs@GLIBCXX_3.4.14 4.5
+ _ZNSsaSEPKc@GLIBCXX_3.4 4.1.1
+ _ZNSsaSERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSsaSESt16initializer_listIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSsaSEc@GLIBCXX_3.4 4.1.1
+ _ZNSspLEPKc@GLIBCXX_3.4 4.1.1
+ _ZNSspLERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSspLESt16initializer_listIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSspLEc@GLIBCXX_3.4 4.1.1
+ _ZNSt10__num_base11_S_atoms_inE@GLIBCXX_3.4 4.1.1
+ _ZNSt10__num_base12_S_atoms_outE@GLIBCXX_3.4 4.1.1
+ _ZNSt10__num_base15_S_format_floatERKSt8ios_basePcc@GLIBCXX_3.4 4.1.1
+ _ZNSt10bad_typeidD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10bad_typeidD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10bad_typeidD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5alnumE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5alphaE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5cntrlE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5digitE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5graphE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5lowerE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5printE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5punctE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5spaceE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5upperE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base6xdigitE@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstream3strEv@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPc@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPc@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10money_base18_S_default_patternE@GLIBCXX_3.4 4.1.1
+ _ZNSt10money_base20_S_construct_patternEccc@GLIBCXX_3.4 4.1.1
+ _ZNSt10money_base8_S_atomsE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EE24_M_initialize_moneypunctEP15__locale_structPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EE24_M_initialize_moneypunctEP15__locale_structPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EE24_M_initialize_moneypunctEP15__locale_structPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EE24_M_initialize_moneypunctEP15__locale_structPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstream3strEv@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstream6freezeEb@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstreamC1EPciSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstreamC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstreamC2EPciSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstreamC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstreamD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcE23_M_initialize_timepunctEP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwE23_M_initialize_timepunctEP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11char_traitsIcE2eqERKcS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt11char_traitsIcE2eqERKcS2_@GLIBCXX_3.4.5 4.1.1
+ _ZNSt11char_traitsIwE2eqERKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt11char_traitsIwE2eqERKwS2_@GLIBCXX_3.4.5 4.1.1
+ _ZNSt11logic_errorC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt11logic_errorC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt11logic_errorD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11logic_errorD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11logic_errorD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11range_errorC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt11range_errorC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt11range_errorD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11range_errorD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11range_errorD2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt11regex_errorD0Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt11regex_errorD1Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt11regex_errorD2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt12__basic_fileIcE2fdEv@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE4fileEv@GLIBCXX_3.4.1 4.1.1
+ _ZNSt12__basic_fileIcE4openEPKcSt13_Ios_Openmodei@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE4syncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE8sys_openEP8_IO_FILESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE8sys_openEiSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE9showmanycEv@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12bad_weak_ptrD0Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt12bad_weak_ptrD1Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt12bad_weak_ptrD2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt12ctype_bynameIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12domain_errorC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt12domain_errorC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt12domain_errorD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12domain_errorD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12domain_errorD2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt12future_errorD0Ev@GLIBCXX_3.4.14 4.5
+ _ZNSt12future_errorD1Ev@GLIBCXX_3.4.14 4.5
+ _ZNSt12future_errorD2Ev@GLIBCXX_3.4.14 4.5
+ _ZNSt12length_errorC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt12length_errorC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt12length_errorD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12length_errorD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12length_errorD2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt12out_of_rangeC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt12out_of_rangeC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt12out_of_rangeD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12out_of_rangeD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12out_of_rangeD2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders2_1E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders2_2E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders2_3E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders2_4E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders2_5E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders2_6E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders2_7E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders2_8E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders2_9E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_10E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_11E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_12E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_13E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_14E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_15E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_16E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_17E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_18E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_19E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_20E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_21E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_22E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_23E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_24E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_25E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_26E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_27E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_28E@GLIBCXX_3.4.15 4.6
+ _ZNSt12placeholders3_29E@GLIBCXX_3.4.15 4.6
+ _ZNSt12strstreambuf3strEv@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf6freezeEb@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf7_M_freeEPc@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8overflowEi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf9pbackfailEi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf9underflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12system_errorD0Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt12system_errorD1Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt12system_errorD2Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt13__future_base11_State_baseD0Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt13__future_base11_State_baseD1Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt13__future_base11_State_baseD2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt13__future_base12_Result_baseC1Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt13__future_base12_Result_baseC2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt13__future_base12_Result_baseD0Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt13__future_base12_Result_baseD1Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt13__future_base12_Result_baseD2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt13bad_exceptionD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13bad_exceptionD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13bad_exceptionD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE14_M_get_ext_posER11__mbstate_t@GLIBCXX_3.4.15 4.6
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE15_M_create_pbackEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE16_M_destroy_pbackEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE19_M_terminate_outputEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE26_M_destroy_internal_bufferEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE27_M_allocate_internal_bufferEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE4syncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE5imbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE8overflowEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE9pbackfailEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE9showmanycEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE9underflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE14_M_get_ext_posER11__mbstate_t@GLIBCXX_3.4.15 4.6
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE15_M_create_pbackEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE16_M_destroy_pbackEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE19_M_terminate_outputEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE26_M_destroy_internal_bufferEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE27_M_allocate_internal_bufferEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE4syncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE5imbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE8overflowEj@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE9pbackfailEj@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE9showmanycEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE9underflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEEC1EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEEC2EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIPvEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIbEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIdEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIeEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIfEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIjEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIlEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractImEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractItEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIxEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIyEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getERSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getERSt15basic_streambufIwS1_Ew@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getERw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE4peekEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE4syncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5seekgESt4fposI11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5tellgEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5ungetEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv@GLIBCXX_3.4.5 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6sentryC1ERS2_b@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6sentryC2ERS2_b@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7putbackEw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEEC1EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEEC2EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsEPFRS2_S3_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsEPFRSt8ios_baseS4_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsEPFRSt9basic_iosIwS1_ES5_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsEPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERPv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERb@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERd@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERe@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERf@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERj@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERm@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERs@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERt@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERx@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERy@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE3putEw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5flushEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpESt4fposI11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5tellpEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentryC1ERS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentryC2ERS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentryD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentryD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIPKvEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIbEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIdEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIeEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIlEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertImEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIxEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIyEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEEC1EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEEC2EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRS2_S3_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRSt8ios_baseS4_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRSt9basic_iosIwS1_ES5_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPKv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEb@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEd@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEe@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEf@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEj@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEm@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEs@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEt@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEx@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEy@GLIBCXX_3.4 4.1.1
+ _ZNSt13runtime_errorC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt13runtime_errorC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt13runtime_errorD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13runtime_errorD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13runtime_errorD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEEC1EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEEC2EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_iostreamIwSt11char_traitsIwEEC1EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_iostreamIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_iostreamIwSt11char_traitsIwEEC2EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_iostreamIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_iostreamIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEEC1EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEEC2EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14error_categoryC1Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt14error_categoryC2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt14error_categoryD0Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt14error_categoryD1Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt14error_categoryD2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt14numeric_limitsIDiE10has_denormE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE10is_boundedE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE10is_integerE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE11round_styleE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE12has_infinityE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIDiE12max_exponentE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE12min_exponentE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE13has_quiet_NaNE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE14is_specializedE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE14max_exponent10E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE14min_exponent10E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE15has_denorm_lossE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE15tinyness_beforeE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE17has_signaling_NaNE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE5radixE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE5trapsE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE6digitsE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE8digits10E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE8is_exactE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE9is_iec559E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE9is_moduloE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE9is_signedE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE10has_denormE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE10is_boundedE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE10is_integerE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE11round_styleE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE12has_infinityE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIDsE12max_exponentE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE12min_exponentE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE13has_quiet_NaNE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE14is_specializedE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE14max_exponent10E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE14min_exponent10E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE15has_denorm_lossE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE15tinyness_beforeE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE17has_signaling_NaNE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE5radixE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE5trapsE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE6digitsE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE8digits10E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE8is_exactE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE9is_iec559E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE9is_moduloE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE9is_signedE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIaE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIaE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIbE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIcE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIdE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIfE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIhE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIiE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIjE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIlE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsImE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIsE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsItE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIwE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIxE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt14numeric_limitsIyE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14overflow_errorC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt14overflow_errorC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt14overflow_errorD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14overflow_errorD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14overflow_errorD2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt15_List_node_base10_M_reverseEv@GLIBCXX_3.4.14 4.5
+ _ZNSt15_List_node_base11_M_transferEPS_S0_@GLIBCXX_3.4.14 4.5
+ _ZNSt15_List_node_base4hookEPS_@GLIBCXX_3.4 4.1.1
+ _ZNSt15_List_node_base4swapERS_S0_@GLIBCXX_3.4 4.1.1
+ _ZNSt15_List_node_base6unhookEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15_List_node_base7_M_hookEPS_@GLIBCXX_3.4.14 4.5
+ _ZNSt15_List_node_base7reverseEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15_List_node_base8transferEPS_S0_@GLIBCXX_3.4 4.1.1
+ _ZNSt15_List_node_base9_M_unhookEv@GLIBCXX_3.4.14 4.5
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5gbumpEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5imbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5pbumpEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sputcEc@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5uflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6sbumpcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6snextcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6stosscEv@GLIBCXX_3.4.10 4.3
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7pubsyncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7sungetcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE8in_availEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE8overflowEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE8pubimbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9pbackfailEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9showmanycEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9sputbackcEc@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9underflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEEC1ERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEEC2ERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5gbumpEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5imbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5pbumpEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sgetcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sputcEw@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5uflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6sbumpcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6snextcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6stosscEv@GLIBCXX_3.4.10 4.3
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7pubsyncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7sungetcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE8in_availEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE8overflowEj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE8pubimbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9pbackfailEj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9showmanycEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9sputbackcEw@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9underflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEEC1ERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEEC2ERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEEaSERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE15_M_update_egptrEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE17_M_stringbuf_initESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@GLIBCXX_3.4.6 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9underflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE15_M_update_egptrEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE17_M_stringbuf_initESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strERKSbIwS1_S2_E@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@GLIBCXX_3.4.6 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9underflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15underflow_errorC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt15underflow_errorC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt15underflow_errorD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15underflow_errorD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15underflow_errorD2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt16__numpunct_cacheIcE8_M_cacheERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwE8_M_cacheERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16invalid_argumentC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt16invalid_argumentC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt16invalid_argumentD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16invalid_argumentD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16invalid_argumentD2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt16nested_exceptionD0Ev@CXXABI_1.3.5 4.6
+ _ZNSt16nested_exceptionD1Ev@CXXABI_1.3.5 4.6
+ _ZNSt16nested_exceptionD2Ev@CXXABI_1.3.5 4.6
+ _ZNSt17__timepunct_cacheIcE12_S_timezonesE@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwE12_S_timezonesE@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwED2Ev@GLIBCXX_3.4 4.1.1
+#MISSING: 4.6# _ZNSt17bad_function_callD0Ev@CXXABI_1.3.5 4.6
+ _ZNSt17bad_function_callD0Ev@GLIBCXX_3.4.15 4.6
+#MISSING: 4.6# _ZNSt17bad_function_callD1Ev@CXXABI_1.3.5 4.6
+ _ZNSt17bad_function_callD1Ev@GLIBCXX_3.4.15 4.6
+#MISSING: 4.6# _ZNSt17bad_function_callD2Ev@CXXABI_1.3.5 4.6
+ _ZNSt17bad_function_callD2Ev@GLIBCXX_3.4.15 4.6
+ _ZNSt17moneypunct_bynameIcLb0EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EE8_M_cacheERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EE8_M_cacheERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EE8_M_cacheERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EE8_M_cacheERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEE3strERKSbIwS1_S2_E@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18condition_variable10notify_allEv@GLIBCXX_3.4.11 4.4.0
+ _ZNSt18condition_variable10notify_oneEv@GLIBCXX_3.4.11 4.4.0
+ _ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt18condition_variableC1Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt18condition_variableC2Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt18condition_variableD1Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt18condition_variableD2Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEE3strERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEE3strERKSbIwS1_S2_E@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE3strERKSbIwS1_S2_E@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv@GLIBCXX_3.4 4.1.1
+ _ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv@GLIBCXX_3.4.5 4.1.1
+ _ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv@GLIBCXX_3.4 4.1.1
+ _ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv@GLIBCXX_3.4.5 4.1.1
+ _ZNSt21__numeric_limits_base10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base12max_digits10E@GLIBCXX_3.4.14 4.5.0
+ _ZNSt21__numeric_limits_base12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt22condition_variable_anyC1Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt22condition_variable_anyC2Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt22condition_variable_anyD1Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt22condition_variable_anyD2Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt3tr18__detail12__prime_listE@GLIBCXX_3.4.10 4.3
+ _ZNSt5ctypeIcE10table_sizeE@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcE13classic_tableEv@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwE19_M_initialize_ctypeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6__norm15_List_node_base10_M_reverseEv@GLIBCXX_3.4.14 4.5
+ _ZNSt6__norm15_List_node_base11_M_transferEPS0_S1_@GLIBCXX_3.4.14 4.5
+ _ZNSt6__norm15_List_node_base4hookEPS0_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt6__norm15_List_node_base4swapERS0_S1_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt6__norm15_List_node_base6unhookEv@GLIBCXX_3.4.9 4.2.1
+ _ZNSt6__norm15_List_node_base7_M_hookEPS0_@GLIBCXX_3.4.14 4.5
+ _ZNSt6__norm15_List_node_base7reverseEv@GLIBCXX_3.4.9 4.2.1
+ _ZNSt6__norm15_List_node_base8transferEPS0_S1_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt6__norm15_List_node_base9_M_unhookEv@GLIBCXX_3.4.14 4.5
+ _ZNSt6chrono12system_clock12is_monotonicE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt6chrono12system_clock3nowEv@GLIBCXX_3.4.11 4.4.0
+ _ZNSt6locale11_M_coalesceERKS_S1_i@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale21_S_normalize_categoryEi@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale3allE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale4noneE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale4timeE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl16_M_install_facetEPKNS_2idEPKNS_5facetE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl16_M_replace_facetEPKS0_PKNS_2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl19_M_replace_categoryEPKS0_PKPKNS_2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl21_M_replace_categoriesEPKS0_i@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5ctypeE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5facet13_S_get_c_nameEv@GLIBCXX_3.4.6 4.1.1
+ _ZNSt6locale5facet15_S_get_c_localeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5facet17_S_clone_c_localeERP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5facet18_S_create_c_localeERP15__locale_structPKcS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5facet19_S_destroy_c_localeERP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5facetD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5facetD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5facetD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale6globalERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale7classicEv@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale7collateE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale7numericE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale8messagesE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale8monetaryE@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC1EPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC1EPNS_5_ImplE@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC1ERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC1ERKS_PKci@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC1ERKS_S1_i@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC2EPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC2EPNS_5_ImplE@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC2ERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC2ERKS_PKci@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC2ERKS_S1_i@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeaSERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt6thread4joinEv@GLIBCXX_3.4.11 4.4.0
+ _ZNSt6thread6detachEv@GLIBCXX_3.4.11 4.4.0
+ _ZNSt7codecvtIcc11__mbstate_tE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8__detail12__prime_listE@GLIBCXX_3.4.10 4.3
+ _ZNSt8__detail15_List_node_base10_M_reverseEv@GLIBCXX_3.4.15 4.6
+ _ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_@GLIBCXX_3.4.15 4.6
+ _ZNSt8__detail15_List_node_base4swapERS0_S1_@GLIBCXX_3.4.15 4.6
+ _ZNSt8__detail15_List_node_base7_M_hookEPS0_@GLIBCXX_3.4.15 4.6
+ _ZNSt8__detail15_List_node_base9_M_unhookEv@GLIBCXX_3.4.15 4.6
+ _ZNSt8bad_castD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8bad_castD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8bad_castD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base10floatfieldE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base10scientificE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base11adjustfieldE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base13_M_grow_wordsEib@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base15sync_with_stdioEb@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base17_M_call_callbacksENS_5eventE@GLIBCXX_3.4.6 4.1.1
+ _ZNSt8ios_base17register_callbackEPFvNS_5eventERS_iEi@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base20_M_dispose_callbacksEv@GLIBCXX_3.4.6 4.1.1
+ _ZNSt8ios_base2inE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3appE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3ateE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3begE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3curE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3decE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3endE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3hexE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3octE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3outE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base4InitC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base4InitC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base4InitD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base4InitD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base4leftE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base5fixedE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base5imbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base5rightE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base5truncE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base6badbitE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base6binaryE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base6eofbitE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base6skipwsE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base6xallocEv@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7_M_initEv@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7failbitE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7failureC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7failureC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7failureD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7failureD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7failureD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7goodbitE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7showposE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7unitbufE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base8internalE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base8showbaseE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base9basefieldE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base9boolalphaE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base9showpointE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base9uppercaseE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_baseC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_baseC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_baseD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_baseD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_baseD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcE22_M_initialize_numpunctEP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwE22_M_initialize_numpunctEP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9__atomic011atomic_flag12test_and_setESt12memory_order@GLIBCXX_3.4.14 4.5
+ _ZNSt9__atomic011atomic_flag5clearESt12memory_order@GLIBCXX_3.4.14 4.5
+ _ZNSt9__cxx199815_List_node_base10_M_reverseEv@GLIBCXX_3.4.14 4.5
+ _ZNSt9__cxx199815_List_node_base11_M_transferEPS0_S1_@GLIBCXX_3.4.14 4.5
+ _ZNSt9__cxx199815_List_node_base4hookEPS0_@GLIBCXX_3.4.10 4.3
+ _ZNSt9__cxx199815_List_node_base4swapERS0_S1_@GLIBCXX_3.4.10 4.3
+ _ZNSt9__cxx199815_List_node_base7_M_hookEPS0_@GLIBCXX_3.4.14 4.5
+ _ZNSt9__cxx199815_List_node_base6unhookEv@GLIBCXX_3.4.10 4.3
+ _ZNSt9__cxx199815_List_node_base7reverseEv@GLIBCXX_3.4.10 4.3
+ _ZNSt9__cxx199815_List_node_base8transferEPS0_S1_@GLIBCXX_3.4.10 4.3
+ _ZNSt9__cxx199815_List_node_base9_M_unhookEv@GLIBCXX_3.4.14 4.5
+ _ZNSt9bad_allocD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9bad_allocD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9bad_allocD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE10exceptionsESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE11_M_setstateESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE15_M_cache_localeERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE3tieEPSo@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE4fillEc@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE5imbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE5rdbufEPSt15basic_streambufIcS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE7copyfmtERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEEC1EPSt15basic_streambufIcS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEEC2EPSt15basic_streambufIcS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE10exceptionsESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE11_M_setstateESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE15_M_cache_localeERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE3tieEPSt13basic_ostreamIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE4fillEw@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE4initEPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE5clearESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE5imbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE5rdbufEPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE7copyfmtERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE8setstateESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEEC1EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEEC2EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9exceptionD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9exceptionD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9exceptionD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstream3strEv@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstream6freezeEb@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstreamC1EPciSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstreamC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstreamC2EPciSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstreamC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstreamD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9type_infoD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9type_infoD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9type_infoD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNVSt9__atomic011atomic_flag12test_and_setESt12memory_order@GLIBCXX_3.4.11 4.4.0
+ _ZNVSt9__atomic011atomic_flag5clearESt12memory_order@GLIBCXX_3.4.11 4.4.0
+ _ZSt10adopt_lock@GLIBCXX_3.4.11 4.4.0
+ _ZSt10defer_lock@GLIBCXX_3.4.11 4.4.0
+ _ZSt10unexpectedv@GLIBCXX_3.4 4.1.1
+ _ZSt11__once_call@GLIBCXX_3.4.11 4.4.0
+ _ZSt11try_to_lock@GLIBCXX_3.4.11 4.4.0
+ _ZSt13set_terminatePFvvE@GLIBCXX_3.4 4.1.1
+ _ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZSt14set_unexpectedPFvvE@GLIBCXX_3.4 4.1.1
+ _ZSt15__once_callable@GLIBCXX_3.4.11 4.4.0
+ _ZSt15future_category@GLIBCXX_3.4.14 4.5
+ _ZSt15future_categoryv@GLIBCXX_3.4.15 4.6
+ _ZSt15set_new_handlerPFvvE@GLIBCXX_3.4 4.1.1
+ _ZSt15system_categoryv@GLIBCXX_3.4.11 4.4.0
+ _ZSt16__throw_bad_castv@GLIBCXX_3.4 4.1.1
+ _ZSt16generic_categoryv@GLIBCXX_3.4.11 4.4.0
+ _ZSt17__throw_bad_allocv@GLIBCXX_3.4 4.1.1
+ _ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_base@GLIBCXX_3.4 4.1.1
+ _ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base@GLIBCXX_3.4 4.1.1
+ _ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base@GLIBCXX_3.4 4.1.1
+ _ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base@GLIBCXX_3.4 4.1.1
+ _ZSt18__throw_bad_typeidv@GLIBCXX_3.4 4.1.1
+ _ZSt18uncaught_exceptionv@GLIBCXX_3.4 4.1.1
+ _ZSt19__throw_ios_failurePKc@GLIBCXX_3.4 4.1.1
+ _ZSt19__throw_logic_errorPKc@GLIBCXX_3.4 4.1.1
+ _ZSt19__throw_range_errorPKc@GLIBCXX_3.4 4.1.1
+ _ZSt19__throw_regex_errorNSt15regex_constants10error_typeE@GLIBCXX_3.4.15 4.6
+ _ZSt20_Rb_tree_black_countPKSt18_Rb_tree_node_baseS1_@GLIBCXX_3.4 4.1.1
+ _ZSt20_Rb_tree_rotate_leftPSt18_Rb_tree_node_baseRS0_@GLIBCXX_3.4 4.1.1
+ _ZSt20__throw_domain_errorPKc@GLIBCXX_3.4 4.1.1
+ _ZSt20__throw_future_errori@GLIBCXX_3.4.14 4.5
+ _ZSt20__throw_length_errorPKc@GLIBCXX_3.4 4.1.1
+ _ZSt20__throw_out_of_rangePKc@GLIBCXX_3.4 4.1.1
+ _ZSt20__throw_system_errori@GLIBCXX_3.4.11 4.4.0
+ _ZSt21_Rb_tree_rotate_rightPSt18_Rb_tree_node_baseRS0_@GLIBCXX_3.4 4.1.1
+ _ZSt21__throw_bad_exceptionv@GLIBCXX_3.4 4.1.1
+ _ZSt21__throw_runtime_errorPKc@GLIBCXX_3.4 4.1.1
+ _ZSt22__throw_overflow_errorPKc@GLIBCXX_3.4 4.1.1
+ _ZSt23__throw_underflow_errorPKc@GLIBCXX_3.4 4.1.1
+ _ZSt24__throw_invalid_argumentPKc@GLIBCXX_3.4 4.1.1
+ _ZSt25__throw_bad_function_callv@GLIBCXX_3.4.14 4.5
+ _ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_@GLIBCXX_3.4 4.1.1
+ _ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_@GLIBCXX_3.4 4.1.1
+ _ZSt2wsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt2wsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt3cin@GLIBCXX_3.4 4.1.1
+ _ZSt4cerr@GLIBCXX_3.4 4.1.1
+ _ZSt4clog@GLIBCXX_3.4 4.1.1
+ _ZSt4cout@GLIBCXX_3.4 4.1.1
+ _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt4endlIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt4endsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt4endsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt4wcin@GLIBCXX_3.4 4.1.1
+ _ZSt5flushIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt5flushIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt5wcerr@GLIBCXX_3.4 4.1.1
+ _ZSt5wclog@GLIBCXX_3.4 4.1.1
+ _ZSt5wcout@GLIBCXX_3.4 4.1.1
+ _ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@GLIBCXX_3.4 4.1.1
+ _ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_ES4_@GLIBCXX_3.4 4.1.1
+ _ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@GLIBCXX_3.4 4.1.1
+ _ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_ES4_@GLIBCXX_3.4 4.1.1
+ _ZSt7nothrow@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt10moneypunctIcLb0EEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt10moneypunctIwLb0EEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt11__timepunctIcEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt11__timepunctIwEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt5ctypeIcEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt5ctypeIwEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7codecvtIcc11__mbstate_tEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7codecvtIwc11__mbstate_tEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7collateIcEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7collateIwEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8messagesIcEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8messagesIwEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8numpunctIcEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8numpunctIwEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9terminatev@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt10moneypunctIcLb0EEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt10moneypunctIcLb1EEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt10moneypunctIwLb0EEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt10moneypunctIwLb1EEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt11__timepunctIcEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt11__timepunctIwEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt5ctypeIcEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt5ctypeIwEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7codecvtIcc11__mbstate_tEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7codecvtIwc11__mbstate_tEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7collateIcEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7collateIwEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8messagesIcEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8messagesIwEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8numpunctIcEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8numpunctIwEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKa@GLIBCXX_3.4 4.1.1
+ _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@GLIBCXX_3.4 4.1.1
+ _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKh@GLIBCXX_3.4 4.1.1
+ _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_a@GLIBCXX_3.4 4.1.1
+ _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c@GLIBCXX_3.4 4.1.1
+ _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_h@GLIBCXX_3.4 4.1.1
+ _ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St12_Setiosflags@GLIBCXX_3.4 4.1.1
+ _ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St13_Setprecision@GLIBCXX_3.4 4.1.1
+ _ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St14_Resetiosflags@GLIBCXX_3.4 4.1.1
+ _ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St5_Setw@GLIBCXX_3.4 4.1.1
+ _ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St8_Setbase@GLIBCXX_3.4 4.1.1
+ _ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St8_SetfillIS3_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKSbIS4_S5_T1_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIdcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIdwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIecSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIewSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIfcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIfwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKS3_@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKc@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_S3_@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St12_Setiosflags@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St13_Setprecision@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St14_Resetiosflags@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St5_Setw@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St8_Setbase@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St8_SetfillIS3_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_c@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwESaIwEERSt13basic_ostreamIT_T0_ES7_RKSbIS4_S5_T1_E@GLIBCXX_3.4 4.1.1
+ _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_@GLIBCXX_3.4 4.1.1
+ _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_@GLIBCXX_3.4 4.1.1
+ _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ES3_RKS6_@GLIBCXX_3.4 4.1.1
+ _ZStplIwSt11char_traitsIwESaIwEESbIT_T0_T1_EPKS3_RKS6_@GLIBCXX_3.4 4.1.1
+ _ZStplIwSt11char_traitsIwESaIwEESbIT_T0_T1_ERKS6_S8_@GLIBCXX_3.4 4.1.1
+ _ZStplIwSt11char_traitsIwESaIwEESbIT_T0_T1_ES3_RKS6_@GLIBCXX_3.4 4.1.1
+ _ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Pa@GLIBCXX_3.4 4.1.1
+ _ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Ph@GLIBCXX_3.4 4.1.1
+ _ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Ra@GLIBCXX_3.4 4.1.1
+ _ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Rh@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_PS3_@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_RS3_@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St12_Setiosflags@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St13_Setprecision@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St14_Resetiosflags@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St5_Setw@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St8_Setbase@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St8_SetfillIS3_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIdcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIdwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIecSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIewSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIfcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIfwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_PS3_@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_RS3_@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St12_Setiosflags@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St13_Setprecision@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St14_Resetiosflags@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St5_Setw@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St8_Setbase@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St8_SetfillIS3_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@GLIBCXX_3.4 4.1.1
+ _ZTIDd@CXXABI_1.3.4 4.5
+ _ZTIDe@CXXABI_1.3.4 4.5
+ _ZTIDf@CXXABI_1.3.4 4.5
+ _ZTIDi@CXXABI_1.3.3 4.4.0
+ _ZTIDn@CXXABI_1.3.5 4.6
+ _ZTIDs@CXXABI_1.3.3 4.4.0
+ _ZTIN10__cxxabiv115__forced_unwindE@CXXABI_1.3.2 4.3
+ _ZTIN10__cxxabiv116__enum_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv117__array_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv117__class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv117__pbase_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv119__foreign_exceptionE@CXXABI_1.3.2 4.3
+ _ZTIN10__cxxabiv119__pointer_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv120__function_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv120__si_class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv121__vmi_class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv123__fundamental_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv129__pointer_to_member_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTINSt13__future_base11_State_baseE@GLIBCXX_3.4.15 4.6
+ _ZTINSt13__future_base12_Result_baseE@GLIBCXX_3.4.15 4.6
+ _ZTINSt6locale5facetE@GLIBCXX_3.4 4.1.1
+ _ZTINSt8ios_base7failureE@GLIBCXX_3.4 4.1.1
+ _ZTIPDd@CXXABI_1.3.4 4.5
+ _ZTIPDe@CXXABI_1.3.4 4.5
+ _ZTIPDf@CXXABI_1.3.4 4.5
+ _ZTIPDi@CXXABI_1.3.3 4.4.0
+ _ZTIPDn@CXXABI_1.3.5 4.6
+ _ZTIPDs@CXXABI_1.3.3 4.4.0
+ _ZTIPKDd@CXXABI_1.3.4 4.5
+ _ZTIPKDe@CXXABI_1.3.4 4.5
+ _ZTIPKDf@CXXABI_1.3.4 4.5
+ _ZTIPKDi@CXXABI_1.3.3 4.4.0
+ _ZTIPKDn@CXXABI_1.3.5 4.6
+ _ZTIPKDs@CXXABI_1.3.3 4.4.0
+ _ZTIPKa@CXXABI_1.3 4.1.1
+ _ZTIPKb@CXXABI_1.3 4.1.1
+ _ZTIPKc@CXXABI_1.3 4.1.1
+ _ZTIPKd@CXXABI_1.3 4.1.1
+ _ZTIPKe@CXXABI_1.3 4.1.1
+ _ZTIPKf@CXXABI_1.3 4.1.1
+ _ZTIPKh@CXXABI_1.3 4.1.1
+ _ZTIPKi@CXXABI_1.3 4.1.1
+ _ZTIPKj@CXXABI_1.3 4.1.1
+ _ZTIPKl@CXXABI_1.3 4.1.1
+ _ZTIPKm@CXXABI_1.3 4.1.1
+ _ZTIPKs@CXXABI_1.3 4.1.1
+ _ZTIPKt@CXXABI_1.3 4.1.1
+ _ZTIPKv@CXXABI_1.3 4.1.1
+ _ZTIPKw@CXXABI_1.3 4.1.1
+ _ZTIPKx@CXXABI_1.3 4.1.1
+ _ZTIPKy@CXXABI_1.3 4.1.1
+ _ZTIPa@CXXABI_1.3 4.1.1
+ _ZTIPb@CXXABI_1.3 4.1.1
+ _ZTIPc@CXXABI_1.3 4.1.1
+ _ZTIPd@CXXABI_1.3 4.1.1
+ _ZTIPe@CXXABI_1.3 4.1.1
+ _ZTIPf@CXXABI_1.3 4.1.1
+ _ZTIPh@CXXABI_1.3 4.1.1
+ _ZTIPi@CXXABI_1.3 4.1.1
+ _ZTIPj@CXXABI_1.3 4.1.1
+ _ZTIPl@CXXABI_1.3 4.1.1
+ _ZTIPm@CXXABI_1.3 4.1.1
+ _ZTIPs@CXXABI_1.3 4.1.1
+ _ZTIPt@CXXABI_1.3 4.1.1
+ _ZTIPv@CXXABI_1.3 4.1.1
+ _ZTIPw@CXXABI_1.3 4.1.1
+ _ZTIPx@CXXABI_1.3 4.1.1
+ _ZTIPy@CXXABI_1.3 4.1.1
+ _ZTISd@GLIBCXX_3.4 4.1.1
+ _ZTISi@GLIBCXX_3.4 4.1.1
+ _ZTISo@GLIBCXX_3.4 4.1.1
+ _ZTISt10bad_typeid@GLIBCXX_3.4 4.1.1
+ _ZTISt10ctype_base@GLIBCXX_3.4 4.1.1
+ _ZTISt10istrstream@GLIBCXX_3.4 4.1.1
+ _ZTISt10lock_error@GLIBCXX_3.4.11 4.4.0
+ _ZTISt10money_base@GLIBCXX_3.4 4.1.1
+ _ZTISt10moneypunctIcLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTISt10moneypunctIcLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTISt10moneypunctIwLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTISt10moneypunctIwLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTISt10ostrstream@GLIBCXX_3.4 4.1.1
+ _ZTISt11__timepunctIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt11__timepunctIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt11logic_error@GLIBCXX_3.4 4.1.1
+ _ZTISt11range_error@GLIBCXX_3.4 4.1.1
+ _ZTISt11regex_error@GLIBCXX_3.4.15 4.6
+ _ZTISt12bad_weak_ptr@GLIBCXX_3.4.15 4.6
+ _ZTISt12codecvt_base@GLIBCXX_3.4 4.1.1
+ _ZTISt12ctype_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt12ctype_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt12domain_error@GLIBCXX_3.4 4.1.1
+ _ZTISt12future_error@GLIBCXX_3.4.14 4.5
+ _ZTISt12length_error@GLIBCXX_3.4 4.1.1
+ _ZTISt12out_of_range@GLIBCXX_3.4 4.1.1
+ _ZTISt12strstreambuf@GLIBCXX_3.4 4.1.1
+ _ZTISt12system_error@GLIBCXX_3.4.11 4.4.0
+ _ZTISt13bad_exception@GLIBCXX_3.4 4.1.1
+ _ZTISt13basic_filebufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt13basic_filebufIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt13basic_fstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt13basic_fstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt13basic_istreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt13basic_ostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt13messages_base@GLIBCXX_3.4 4.1.1
+ _ZTISt13runtime_error@GLIBCXX_3.4 4.1.1
+ _ZTISt14basic_ifstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt14basic_ifstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt14basic_iostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt14basic_ofstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt14basic_ofstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt14codecvt_bynameIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTISt14codecvt_bynameIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTISt14collate_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt14collate_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt14error_category@GLIBCXX_3.4.11 4.4.0
+ _ZTISt14overflow_error@GLIBCXX_3.4 4.1.1
+ _ZTISt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15basic_streambufIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15basic_stringbufIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15basic_stringbufIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15messages_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt15messages_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt15numpunct_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt15numpunct_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15underflow_error@GLIBCXX_3.4 4.1.1
+ _ZTISt16invalid_argument@GLIBCXX_3.4 4.1.1
+ _ZTISt16nested_exception@CXXABI_1.3.5 4.6
+#MISSING: 4.6# _ZTISt17bad_function_call@CXXABI_1.3.5 4.6
+ _ZTISt17bad_function_call@GLIBCXX_3.4.15 4.6
+ _ZTISt17moneypunct_bynameIcLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTISt17moneypunct_bynameIcLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTISt17moneypunct_bynameIwLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTISt17moneypunct_bynameIwLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTISt18basic_stringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt18basic_stringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt19basic_istringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt19basic_istringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt21__ctype_abstract_baseIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt21__ctype_abstract_baseIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt23__codecvt_abstract_baseIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTISt23__codecvt_abstract_baseIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTISt5ctypeIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt5ctypeIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt7codecvtIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTISt7codecvtIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTISt7collateIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt7collateIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt8bad_cast@GLIBCXX_3.4 4.1.1
+ _ZTISt8ios_base@GLIBCXX_3.4 4.1.1
+ _ZTISt8messagesIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt8messagesIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt8numpunctIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt8numpunctIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt9bad_alloc@GLIBCXX_3.4 4.1.1
+ _ZTISt9basic_iosIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt9basic_iosIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt9exception@GLIBCXX_3.4 4.1.1
+ _ZTISt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt9strstream@GLIBCXX_3.4 4.1.1
+ _ZTISt9time_base@GLIBCXX_3.4 4.1.1
+ _ZTISt9type_info@GLIBCXX_3.4 4.1.1
+ _ZTIa@CXXABI_1.3 4.1.1
+ _ZTIb@CXXABI_1.3 4.1.1
+ _ZTIc@CXXABI_1.3 4.1.1
+ _ZTId@CXXABI_1.3 4.1.1
+ _ZTIe@CXXABI_1.3 4.1.1
+ _ZTIf@CXXABI_1.3 4.1.1
+ _ZTIh@CXXABI_1.3 4.1.1
+ _ZTIi@CXXABI_1.3 4.1.1
+ _ZTIj@CXXABI_1.3 4.1.1
+ _ZTIl@CXXABI_1.3 4.1.1
+ _ZTIm@CXXABI_1.3 4.1.1
+ _ZTIs@CXXABI_1.3 4.1.1
+ _ZTIt@CXXABI_1.3 4.1.1
+ _ZTIv@CXXABI_1.3 4.1.1
+ _ZTIw@CXXABI_1.3 4.1.1
+ _ZTIx@CXXABI_1.3 4.1.1
+ _ZTIy@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv116__enum_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv117__array_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv117__class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv117__pbase_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv119__pointer_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv120__function_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv120__si_class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv121__vmi_class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv123__fundamental_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv129__pointer_to_member_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSNSt6locale5facetE@GLIBCXX_3.4 4.1.1
+ _ZTSNSt8ios_base7failureE@GLIBCXX_3.4 4.1.1
+ _ZTSPKa@CXXABI_1.3 4.1.1
+ _ZTSPKb@CXXABI_1.3 4.1.1
+ _ZTSPKc@CXXABI_1.3 4.1.1
+ _ZTSPKd@CXXABI_1.3 4.1.1
+ _ZTSPKe@CXXABI_1.3 4.1.1
+ _ZTSPKf@CXXABI_1.3 4.1.1
+ _ZTSPKh@CXXABI_1.3 4.1.1
+ _ZTSPKi@CXXABI_1.3 4.1.1
+ _ZTSPKj@CXXABI_1.3 4.1.1
+ _ZTSPKl@CXXABI_1.3 4.1.1
+ _ZTSPKm@CXXABI_1.3 4.1.1
+ _ZTSPKs@CXXABI_1.3 4.1.1
+ _ZTSPKt@CXXABI_1.3 4.1.1
+ _ZTSPKv@CXXABI_1.3 4.1.1
+ _ZTSPKw@CXXABI_1.3 4.1.1
+ _ZTSPKx@CXXABI_1.3 4.1.1
+ _ZTSPKy@CXXABI_1.3 4.1.1
+ _ZTSPa@CXXABI_1.3 4.1.1
+ _ZTSPb@CXXABI_1.3 4.1.1
+ _ZTSPc@CXXABI_1.3 4.1.1
+ _ZTSPd@CXXABI_1.3 4.1.1
+ _ZTSPe@CXXABI_1.3 4.1.1
+ _ZTSPf@CXXABI_1.3 4.1.1
+ _ZTSPh@CXXABI_1.3 4.1.1
+ _ZTSPi@CXXABI_1.3 4.1.1
+ _ZTSPj@CXXABI_1.3 4.1.1
+ _ZTSPl@CXXABI_1.3 4.1.1
+ _ZTSPm@CXXABI_1.3 4.1.1
+ _ZTSPs@CXXABI_1.3 4.1.1
+ _ZTSPt@CXXABI_1.3 4.1.1
+ _ZTSPv@CXXABI_1.3 4.1.1
+ _ZTSPw@CXXABI_1.3 4.1.1
+ _ZTSPx@CXXABI_1.3 4.1.1
+ _ZTSPy@CXXABI_1.3 4.1.1
+ _ZTSSd@GLIBCXX_3.4 4.1.1
+ _ZTSSi@GLIBCXX_3.4 4.1.1
+ _ZTSSo@GLIBCXX_3.4 4.1.1
+ _ZTSSt10bad_typeid@GLIBCXX_3.4 4.1.1
+ _ZTSSt10ctype_base@GLIBCXX_3.4 4.1.1
+ _ZTSSt10istrstream@GLIBCXX_3.4 4.1.1
+ _ZTSSt10lock_error@GLIBCXX_3.4.11 4.4.0
+ _ZTSSt10money_base@GLIBCXX_3.4 4.1.1
+ _ZTSSt10moneypunctIcLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt10moneypunctIcLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt10moneypunctIwLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt10moneypunctIwLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt10ostrstream@GLIBCXX_3.4 4.1.1
+ _ZTSSt11__timepunctIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt11__timepunctIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt11logic_error@GLIBCXX_3.4 4.1.1
+ _ZTSSt11range_error@GLIBCXX_3.4 4.1.1
+ _ZTSSt12codecvt_base@GLIBCXX_3.4 4.1.1
+ _ZTSSt12ctype_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt12ctype_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt12domain_error@GLIBCXX_3.4 4.1.1
+ _ZTSSt12future_error@GLIBCXX_3.4.14 4.5
+ _ZTSSt12length_error@GLIBCXX_3.4 4.1.1
+ _ZTSSt12out_of_range@GLIBCXX_3.4 4.1.1
+ _ZTSSt12strstreambuf@GLIBCXX_3.4 4.1.1
+ _ZTSSt12system_error@GLIBCXX_3.4.11 4.4.0
+ _ZTSSt13bad_exception@GLIBCXX_3.4 4.1.1
+ _ZTSSt13basic_filebufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt13basic_filebufIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt13basic_fstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt13basic_fstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt13basic_istreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt13basic_ostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt13messages_base@GLIBCXX_3.4 4.1.1
+ _ZTSSt13runtime_error@GLIBCXX_3.4 4.1.1
+ _ZTSSt14basic_ifstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14basic_ifstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14basic_iostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14codecvt_bynameIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14codecvt_bynameIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14collate_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14collate_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14error_category@GLIBCXX_3.4.11 4.4.0
+ _ZTSSt14overflow_error@GLIBCXX_3.4 4.1.1
+ _ZTSSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15basic_streambufIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15basic_stringbufIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15basic_stringbufIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15messages_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15messages_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15numpunct_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15numpunct_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15underflow_error@GLIBCXX_3.4 4.1.1
+ _ZTSSt16invalid_argument@GLIBCXX_3.4 4.1.1
+ _ZTSSt17moneypunct_bynameIcLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt17moneypunct_bynameIcLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt17moneypunct_bynameIwLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt17moneypunct_bynameIwLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt18basic_stringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt19basic_istringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt19basic_istringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt21__ctype_abstract_baseIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt21__ctype_abstract_baseIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTSSt23__codecvt_abstract_baseIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTSSt5ctypeIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt5ctypeIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7codecvtIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7codecvtIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7collateIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7collateIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8bad_cast@GLIBCXX_3.4 4.1.1
+ _ZTSSt8ios_base@GLIBCXX_3.4 4.1.1
+ _ZTSSt8messagesIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8messagesIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8numpunctIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8numpunctIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt9bad_alloc@GLIBCXX_3.4 4.1.1
+ _ZTSSt9basic_iosIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt9basic_iosIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt9exception@GLIBCXX_3.4 4.1.1
+ _ZTSSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt9strstream@GLIBCXX_3.4 4.1.1
+ _ZTSSt9time_base@GLIBCXX_3.4 4.1.1
+ _ZTSSt9type_info@GLIBCXX_3.4 4.1.1
+ _ZTSa@CXXABI_1.3 4.1.1
+ _ZTSb@CXXABI_1.3 4.1.1
+ _ZTSc@CXXABI_1.3 4.1.1
+ _ZTSd@CXXABI_1.3 4.1.1
+ _ZTSe@CXXABI_1.3 4.1.1
+ _ZTSf@CXXABI_1.3 4.1.1
+ _ZTSh@CXXABI_1.3 4.1.1
+ _ZTSi@CXXABI_1.3 4.1.1
+ _ZTSj@CXXABI_1.3 4.1.1
+ _ZTSl@CXXABI_1.3 4.1.1
+ _ZTSm@CXXABI_1.3 4.1.1
+ _ZTSs@CXXABI_1.3 4.1.1
+ _ZTSt@CXXABI_1.3 4.1.1
+ _ZTSv@CXXABI_1.3 4.1.1
+ _ZTSw@CXXABI_1.3 4.1.1
+ _ZTSx@CXXABI_1.3 4.1.1
+ _ZTSy@CXXABI_1.3 4.1.1
+ _ZTTSd@GLIBCXX_3.4 4.1.1
+ _ZTTSi@GLIBCXX_3.4 4.1.1
+ _ZTTSo@GLIBCXX_3.4 4.1.1
+ _ZTTSt10istrstream@GLIBCXX_3.4 4.1.1
+ _ZTTSt10ostrstream@GLIBCXX_3.4 4.1.1
+ _ZTTSt13basic_fstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt13basic_fstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt13basic_istreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt13basic_ostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt14basic_ifstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt14basic_ifstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt14basic_iostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt14basic_ofstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt14basic_ofstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt18basic_stringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt19basic_istringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt19basic_istringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt9strstream@GLIBCXX_3.4 4.1.1
+ _ZTVN10__cxxabiv116__enum_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv117__array_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv117__pbase_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv119__pointer_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv120__function_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv120__si_class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv121__vmi_class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv123__fundamental_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv129__pointer_to_member_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVNSt13__future_base11_State_baseE@GLIBCXX_3.4.15 4.6
+ _ZTVNSt13__future_base12_Result_baseE@GLIBCXX_3.4.15 4.6
+ _ZTVNSt6locale5facetE@GLIBCXX_3.4 4.1.1
+ _ZTVNSt8ios_base7failureE@GLIBCXX_3.4 4.1.1
+ _ZTVSd@GLIBCXX_3.4 4.1.1
+ _ZTVSi@GLIBCXX_3.4 4.1.1
+ _ZTVSo@GLIBCXX_3.4 4.1.1
+ _ZTVSt10bad_typeid@GLIBCXX_3.4 4.1.1
+ _ZTVSt10istrstream@GLIBCXX_3.4 4.1.1
+ _ZTVSt10lock_error@GLIBCXX_3.4.11 4.4.0
+ _ZTVSt10moneypunctIcLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt10moneypunctIcLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt10moneypunctIwLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt10moneypunctIwLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt10ostrstream@GLIBCXX_3.4 4.1.1
+ _ZTVSt11__timepunctIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt11__timepunctIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt11logic_error@GLIBCXX_3.4 4.1.1
+ _ZTVSt11range_error@GLIBCXX_3.4 4.1.1
+ _ZTVSt11regex_error@GLIBCXX_3.4.15 4.6
+ _ZTVSt12bad_weak_ptr@GLIBCXX_3.4.15 4.6
+ _ZTVSt12ctype_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt12ctype_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt12domain_error@GLIBCXX_3.4 4.1.1
+ _ZTVSt12future_error@GLIBCXX_3.4.14 4.5
+ _ZTVSt12length_error@GLIBCXX_3.4 4.1.1
+ _ZTVSt12out_of_range@GLIBCXX_3.4 4.1.1
+ _ZTVSt12strstreambuf@GLIBCXX_3.4 4.1.1
+ _ZTVSt12system_error@GLIBCXX_3.4.11 4.4.0
+ _ZTVSt13bad_exception@GLIBCXX_3.4 4.1.1
+ _ZTVSt13basic_filebufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt13basic_filebufIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt13basic_fstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt13basic_fstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt13basic_istreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt13basic_ostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt13runtime_error@GLIBCXX_3.4 4.1.1
+ _ZTVSt14basic_ifstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14basic_ifstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14basic_iostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14basic_ofstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14basic_ofstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14codecvt_bynameIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14codecvt_bynameIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14collate_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14collate_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14error_category@GLIBCXX_3.4.11 4.4.0
+ _ZTVSt14overflow_error@GLIBCXX_3.4 4.1.1
+ _ZTVSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15basic_streambufIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15basic_stringbufIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15messages_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15messages_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15numpunct_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15numpunct_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15underflow_error@GLIBCXX_3.4 4.1.1
+ _ZTVSt16invalid_argument@GLIBCXX_3.4 4.1.1
+ _ZTVSt16nested_exception@CXXABI_1.3.5 4.6
+#MISSING: 4.6# _ZTVSt17bad_function_call@CXXABI_1.3.5 4.6
+ _ZTVSt17bad_function_call@GLIBCXX_3.4.15 4.6
+ _ZTVSt17moneypunct_bynameIcLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt17moneypunct_bynameIcLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt17moneypunct_bynameIwLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt17moneypunct_bynameIwLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt18basic_stringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt19basic_istringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt19basic_istringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt21__ctype_abstract_baseIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt21__ctype_abstract_baseIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt23__codecvt_abstract_baseIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTVSt23__codecvt_abstract_baseIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTVSt5ctypeIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt5ctypeIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7codecvtIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7codecvtIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7collateIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7collateIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8bad_cast@GLIBCXX_3.4 4.1.1
+ _ZTVSt8ios_base@GLIBCXX_3.4 4.1.1
+ _ZTVSt8messagesIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8messagesIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8numpunctIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8numpunctIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt9bad_alloc@GLIBCXX_3.4 4.1.1
+ _ZTVSt9basic_iosIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt9basic_iosIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt9exception@GLIBCXX_3.4 4.1.1
+ _ZTVSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt9strstream@GLIBCXX_3.4 4.1.1
+ _ZTVSt9type_info@GLIBCXX_3.4 4.1.1
+ _ZdaPv@GLIBCXX_3.4 4.1.1
+ _ZdaPvRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _ZdlPv@GLIBCXX_3.4 4.1.1
+ _ZdlPvRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ __atomic_flag_for_address@GLIBCXX_3.4.11 4.4.0
+ __atomic_flag_wait_explicit@GLIBCXX_3.4.11 4.4.0
+ __cxa_allocate_exception@CXXABI_1.3 4.1.1
+ __cxa_bad_cast@CXXABI_1.3 4.1.1
+ __cxa_bad_typeid@CXXABI_1.3 4.1.1
+ __cxa_begin_catch@CXXABI_1.3 4.1.1
+ __cxa_call_unexpected@CXXABI_1.3 4.1.1
+ __cxa_current_exception_type@CXXABI_1.3 4.1.1
+ __cxa_demangle@CXXABI_1.3 4.1.1
+ __cxa_end_catch@CXXABI_1.3 4.1.1
+ __cxa_free_exception@CXXABI_1.3 4.1.1
+ __cxa_get_exception_ptr@CXXABI_1.3.1 4.1.1
+ __cxa_get_globals@CXXABI_1.3 4.1.1
+ __cxa_get_globals_fast@CXXABI_1.3 4.1.1
+ __cxa_guard_abort@CXXABI_1.3 4.1.1
+ __cxa_guard_acquire@CXXABI_1.3 4.1.1
+ __cxa_guard_release@CXXABI_1.3 4.1.1
+ __cxa_pure_virtual@CXXABI_1.3 4.1.1
+ __cxa_rethrow@CXXABI_1.3 4.1.1
+ __cxa_throw@CXXABI_1.3 4.1.1
+ __cxa_vec_cctor@CXXABI_1.3 4.1.1
+ __cxa_vec_cleanup@CXXABI_1.3 4.1.1
+ __cxa_vec_ctor@CXXABI_1.3 4.1.1
+ __cxa_vec_delete2@CXXABI_1.3 4.1.1
+ __cxa_vec_delete3@CXXABI_1.3 4.1.1
+ __cxa_vec_delete@CXXABI_1.3 4.1.1
+ __cxa_vec_dtor@CXXABI_1.3 4.1.1
+ __cxa_vec_new2@CXXABI_1.3 4.1.1
+ __cxa_vec_new3@CXXABI_1.3 4.1.1
+ __cxa_vec_new@CXXABI_1.3 4.1.1
+ __dynamic_cast@CXXABI_1.3 4.1.1
+ __once_proxy@GLIBCXX_3.4.11 4.4.0
+ atomic_flag_clear_explicit@GLIBCXX_3.4.11 4.4.0
+ atomic_flag_test_and_set_explicit@GLIBCXX_3.4.11 4.4.0
diff --git a/debian/libstdc++6.symbols.excprop b/debian/libstdc++6.symbols.excprop
new file mode 100644
index 0000000..061e331
--- /dev/null
+++ b/debian/libstdc++6.symbols.excprop
@@ -0,0 +1,17 @@
+ _ZNKSt15__exception_ptr13exception_ptr20__cxa_exception_typeEv@CXXABI_1.3.3 4.4.0
+ _ZNKSt15__exception_ptr13exception_ptrcvMS0_FvvEEv@CXXABI_1.3.3 4.4.0
+ _ZNKSt15__exception_ptr13exception_ptrntEv@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptr4swapERS0_@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrC1EMS0_FvvE@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrC1ERKS0_@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrC1Ev@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrC2EMS0_FvvE@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrC2ERKS0_@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrC2Ev@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrD1Ev@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrD2Ev@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptraSERKS0_@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@CXXABI_1.3.3 4.4.0
+ _ZSt17current_exceptionv@CXXABI_1.3.3 4.4.0
+ _ZSt17rethrow_exceptionNSt15__exception_ptr13exception_ptrE@CXXABI_1.3.3 4.4.0
diff --git a/debian/libstdc++6.symbols.glibcxxmath b/debian/libstdc++6.symbols.glibcxxmath
new file mode 100644
index 0000000..04b7104
--- /dev/null
+++ b/debian/libstdc++6.symbols.glibcxxmath
@@ -0,0 +1,22 @@
+ acosl@GLIBCXX_3.4.3 4.1.1
+ asinl@GLIBCXX_3.4.3 4.1.1
+ atan2l@GLIBCXX_3.4 4.1.1
+ atanl@GLIBCXX_3.4.3 4.1.1
+ ceill@GLIBCXX_3.4.3 4.1.1
+ coshl@GLIBCXX_3.4 4.1.1
+ cosl@GLIBCXX_3.4 4.1.1
+ expl@GLIBCXX_3.4 4.1.1
+ floorl@GLIBCXX_3.4.3 4.1.1
+ fmodl@GLIBCXX_3.4.3 4.1.1
+ frexpl@GLIBCXX_3.4.3 4.1.1
+ hypotl@GLIBCXX_3.4 4.1.1
+ ldexpl@GLIBCXX_3.4.3 4.1.1
+ log10l@GLIBCXX_3.4 4.1.1
+ logl@GLIBCXX_3.4 4.1.1
+ modfl@GLIBCXX_3.4.3 4.1.1
+ powl@GLIBCXX_3.4 4.1.1
+ sinhl@GLIBCXX_3.4 4.1.1
+ sinl@GLIBCXX_3.4 4.1.1
+ sqrtl@GLIBCXX_3.4 4.1.1
+ tanhl@GLIBCXX_3.4 4.1.1
+ tanl@GLIBCXX_3.4 4.1.1
diff --git a/debian/libstdc++6.symbols.hppa b/debian/libstdc++6.symbols.hppa
new file mode 100644
index 0000000..c3ff1b1
--- /dev/null
+++ b/debian/libstdc++6.symbols.hppa
@@ -0,0 +1,8 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.excprop"
+# removed, see PR libstdc++/39491 __signbitl@GLIBCXX_3.4 4.2.1
+#include "libstdc++6.symbols.glibcxxmath"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
diff --git a/debian/libstdc++6.symbols.hurd-i386 b/debian/libstdc++6.symbols.hurd-i386
new file mode 100644
index 0000000..9825c81
--- /dev/null
+++ b/debian/libstdc++6.symbols.hurd-i386
@@ -0,0 +1,5 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit.hurd"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0
diff --git a/debian/libstdc++6.symbols.i386 b/debian/libstdc++6.symbols.i386
new file mode 100644
index 0000000..13c9c5c
--- /dev/null
+++ b/debian/libstdc++6.symbols.i386
@@ -0,0 +1,6 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
diff --git a/debian/libstdc++6.symbols.ia64 b/debian/libstdc++6.symbols.ia64
new file mode 100644
index 0000000..ba58be0
--- /dev/null
+++ b/debian/libstdc++6.symbols.ia64
@@ -0,0 +1,7 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
diff --git a/debian/libstdc++6.symbols.kfreebsd-amd64 b/debian/libstdc++6.symbols.kfreebsd-amd64
new file mode 100644
index 0000000..ba58be0
--- /dev/null
+++ b/debian/libstdc++6.symbols.kfreebsd-amd64
@@ -0,0 +1,7 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
diff --git a/debian/libstdc++6.symbols.kfreebsd-i386 b/debian/libstdc++6.symbols.kfreebsd-i386
new file mode 100644
index 0000000..13c9c5c
--- /dev/null
+++ b/debian/libstdc++6.symbols.kfreebsd-i386
@@ -0,0 +1,6 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
diff --git a/debian/libstdc++6.symbols.ldbl.32bit b/debian/libstdc++6.symbols.ldbl.32bit
new file mode 100644
index 0000000..feaffd3
--- /dev/null
+++ b/debian/libstdc++6.symbols.ldbl.32bit
@@ -0,0 +1,284 @@
+ CXXABI_LDBL_1.3@CXXABI_LDBL_1.3 4.2.1
+ GLIBCXX_LDBL_3.4.10@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ GLIBCXX_LDBL_3.4.7@GLIBCXX_LDBL_3.4.7 4.2.1
+ GLIBCXX_LDBL_3.4@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt3tr14hashIgEclEg@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIgEclEg@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ _ZGVNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16_M_extract_floatES4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8__do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16_M_extract_floatES4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8__do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcjcRSt8ios_basePcSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcjcS7_PcS8_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES4_S4_RSt8ios_baseccT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIgEES4_S4_RSt8ios_baseccT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEciRSt8ios_basePcPKcRi@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE8__do_putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcjwRSt8ios_basePwSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcjwPKwPwSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES4_S4_RSt8ios_basewcT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIgEES4_S4_RSt8ios_basewcT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwiRSt8ios_basePwPKwRi@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE8__do_putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8__do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8__do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_bRSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_bRSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_bRSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_bRSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE8__do_putES4_bRSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES4_S4_RSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES4_S4_RSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_bRSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_bRSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_bRSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_bRSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE8__do_putES4_bRSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSi10_M_extractIgEERSiRT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSirsERg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSo9_M_insertIgEERSoT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSolsEg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIgEERS2_RT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIgEERS2_T_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10has_denormE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10is_boundedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10is_integerE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE11round_styleE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12has_infinityE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12max_digits10E@GLIBCXX_LDBL_3.4 4.5.0
+ _ZNSt14numeric_limitsIgE12max_exponentE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12min_exponentE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE13has_quiet_NaNE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14is_specializedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14max_exponent10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14min_exponent10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE15has_denorm_lossE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE15tinyness_beforeE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE17has_signaling_NaNE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE5radixE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE5trapsE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE6digitsE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE8digits10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE8is_exactE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_iec559E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_moduloE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_signedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt14__convert_to_vIgEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStlsIgcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStlsIgwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStrsIgcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStrsIgwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTIPKg@CXXABI_LDBL_1.3 4.2.1
+ _ZTIPg@CXXABI_LDBL_1.3 4.2.1
+ _ZTIg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSPKg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSPg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSg@CXXABI_LDBL_1.3 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
diff --git a/debian/libstdc++6.symbols.ldbl.32bit.s390 b/debian/libstdc++6.symbols.ldbl.32bit.s390
new file mode 100644
index 0000000..8432138
--- /dev/null
+++ b/debian/libstdc++6.symbols.ldbl.32bit.s390
@@ -0,0 +1,284 @@
+ CXXABI_LDBL_1.3@CXXABI_LDBL_1.3 4.2.1
+ GLIBCXX_LDBL_3.4.10@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ GLIBCXX_LDBL_3.4.7@GLIBCXX_LDBL_3.4.7 4.2.1
+ GLIBCXX_LDBL_3.4@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt3tr14hashIgEclEg@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIgEclEg@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ _ZGVNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16_M_extract_floatES4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8__do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16_M_extract_floatES4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8__do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcmcRSt8ios_basePcSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcmcS7_PcS8_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES4_S4_RSt8ios_baseccT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIgEES4_S4_RSt8ios_baseccT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEciRSt8ios_basePcPKcRi@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE8__do_putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcmwRSt8ios_basePwSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcmwPKwPwSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES4_S4_RSt8ios_basewcT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIgEES4_S4_RSt8ios_basewcT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwiRSt8ios_basePwPKwRi@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE8__do_putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8__do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8__do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_bRSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_bRSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_bRSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_bRSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE8__do_putES4_bRSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES4_S4_RSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES4_S4_RSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_bRSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_bRSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_bRSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_bRSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE8__do_putES4_bRSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSi10_M_extractIgEERSiRT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSirsERg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSo9_M_insertIgEERSoT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSolsEg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIgEERS2_RT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIgEERS2_T_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10has_denormE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10is_boundedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10is_integerE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE11round_styleE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12has_infinityE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12max_digits10E@GLIBCXX_LDBL_3.4 4.5.0
+ _ZNSt14numeric_limitsIgE12max_exponentE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12min_exponentE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE13has_quiet_NaNE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14is_specializedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14max_exponent10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14min_exponent10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE15has_denorm_lossE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE15tinyness_beforeE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE17has_signaling_NaNE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE5radixE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE5trapsE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE6digitsE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE8digits10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE8is_exactE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_iec559E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_moduloE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_signedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt14__convert_to_vIgEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStlsIgcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStlsIgwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStrsIgcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStrsIgwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTIPKg@CXXABI_LDBL_1.3 4.2.1
+ _ZTIPg@CXXABI_LDBL_1.3 4.2.1
+ _ZTIg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSPKg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSPg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSg@CXXABI_LDBL_1.3 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
diff --git a/debian/libstdc++6.symbols.ldbl.64bit b/debian/libstdc++6.symbols.ldbl.64bit
new file mode 100644
index 0000000..a5c3abf
--- /dev/null
+++ b/debian/libstdc++6.symbols.ldbl.64bit
@@ -0,0 +1,284 @@
+ CXXABI_LDBL_1.3@CXXABI_LDBL_1.3 4.2.1
+ GLIBCXX_LDBL_3.4.10@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ GLIBCXX_LDBL_3.4.7@GLIBCXX_LDBL_3.4.7 4.2.1
+ GLIBCXX_LDBL_3.4@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt3tr14hashIgEclEg@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIgEclEg@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ _ZGVNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16_M_extract_floatES4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8__do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16_M_extract_floatES4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8__do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcmcRSt8ios_basePcSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcmcS7_PcS8_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES4_S4_RSt8ios_baseccT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIgEES4_S4_RSt8ios_baseccT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEclRSt8ios_basePcPKcRi@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE8__do_putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcmwRSt8ios_basePwSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcmwPKwPwSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES4_S4_RSt8ios_basewcT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIgEES4_S4_RSt8ios_basewcT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwlRSt8ios_basePwPKwRi@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE8__do_putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8__do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8__do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_bRSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_bRSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_bRSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_bRSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE8__do_putES4_bRSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES4_S4_RSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES4_S4_RSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_bRSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_bRSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_bRSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_bRSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE8__do_putES4_bRSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSi10_M_extractIgEERSiRT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSirsERg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSo9_M_insertIgEERSoT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSolsEg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIgEERS2_RT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIgEERS2_T_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10has_denormE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10is_boundedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10is_integerE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE11round_styleE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12has_infinityE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12max_digits10E@GLIBCXX_LDBL_3.4 4.5.0
+ _ZNSt14numeric_limitsIgE12max_exponentE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12min_exponentE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE13has_quiet_NaNE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14is_specializedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14max_exponent10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14min_exponent10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE15has_denorm_lossE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE15tinyness_beforeE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE17has_signaling_NaNE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE5radixE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE5trapsE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE6digitsE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE8digits10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE8is_exactE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_iec559E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_moduloE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_signedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt14__convert_to_vIgEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStlsIgcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStlsIgwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStrsIgcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStrsIgwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTIPKg@CXXABI_LDBL_1.3 4.2.1
+ _ZTIPg@CXXABI_LDBL_1.3 4.2.1
+ _ZTIg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSPKg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSPg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSg@CXXABI_LDBL_1.3 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
diff --git a/debian/libstdc++6.symbols.lpia b/debian/libstdc++6.symbols.lpia
new file mode 100644
index 0000000..13c9c5c
--- /dev/null
+++ b/debian/libstdc++6.symbols.lpia
@@ -0,0 +1,6 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
diff --git a/debian/libstdc++6.symbols.m68k b/debian/libstdc++6.symbols.m68k
new file mode 100644
index 0000000..46c49b1
--- /dev/null
+++ b/debian/libstdc++6.symbols.m68k
@@ -0,0 +1,5 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0
diff --git a/debian/libstdc++6.symbols.mips b/debian/libstdc++6.symbols.mips
new file mode 100644
index 0000000..885c8d1
--- /dev/null
+++ b/debian/libstdc++6.symbols.mips
@@ -0,0 +1,7 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.excprop"
+#include "libstdc++6.symbols.glibcxxmath"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0
diff --git a/debian/libstdc++6.symbols.mipsel b/debian/libstdc++6.symbols.mipsel
new file mode 100644
index 0000000..885c8d1
--- /dev/null
+++ b/debian/libstdc++6.symbols.mipsel
@@ -0,0 +1,7 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.excprop"
+#include "libstdc++6.symbols.glibcxxmath"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0
diff --git a/debian/libstdc++6.symbols.powerpc b/debian/libstdc++6.symbols.powerpc
new file mode 100644
index 0000000..653ed1a
--- /dev/null
+++ b/debian/libstdc++6.symbols.powerpc
@@ -0,0 +1,8 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.32bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
diff --git a/debian/libstdc++6.symbols.ppc64 b/debian/libstdc++6.symbols.ppc64
new file mode 100644
index 0000000..19ac683
--- /dev/null
+++ b/debian/libstdc++6.symbols.ppc64
@@ -0,0 +1,9 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.64bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
diff --git a/debian/libstdc++6.symbols.s390 b/debian/libstdc++6.symbols.s390
new file mode 100644
index 0000000..c4eeebe
--- /dev/null
+++ b/debian/libstdc++6.symbols.s390
@@ -0,0 +1,549 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.common"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base16_M_get_free_listEm@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base9_M_refillEm@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reclaim_blockEPcm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reserve_blockEmm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reclaim_blockEPcm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reserve_blockEmm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx9free_list6_M_getEm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNK10__cxxabiv117__class_type_info12__do_dyncastEiNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcEiPKvPKS0_S2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEmmPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE2atEm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE6substrEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEEixEm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEmmPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSs16find_last_not_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs2atEm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4copyEPcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs6substrEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_checkEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_limitEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSsixEm@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE6_M_putEPcmPKcPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE6_M_putEPwmPKwPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt7codecvtIcc11__mbstate_tE9do_lengthERS0_PKcS4_m@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE9do_lengthERS0_PKcS4_m@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE12_M_transformEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE12_M_transformEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcmcRSt8ios_basePcS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcmcS6_PcS7_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEciRSt8ios_basePcPKcRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcmwRSt8ios_basePwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcmwPKwPwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwiRSt8ios_basePwPKwRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_numES3_S3_RiiimRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES3_S3_RiPPKcmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE24_M_extract_wday_or_monthES3_S3_RiPPKcmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4.14 4.5.0
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_numES3_S3_RiiimRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES3_S3_RiPPKwmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE24_M_extract_wday_or_monthES3_S3_RiPPKwmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4.14 4.5.0
+ _ZNKSt8valarrayImE4sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEmmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2EmwRKS1_@GLIBCXX_3.4.14 4.5.0
+ _ZNSbIwSt11char_traitsIwESaIwEE2atEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_m@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEmmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5eraseEmm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_mw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EPKwmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EPKwmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEixEm@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPcic@GLIBCXX_3.4 4.1.1
+ _ZNSi4readEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi5seekgExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEi@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEi@GLIBCXX_3.4.5 4.1.1
+ _ZNSi6ignoreEii@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPcic@GLIBCXX_3.4 4.1.1
+ _ZNSi8readsomeEPci@GLIBCXX_3.4 4.1.1
+ _ZNSo5seekpExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSo5writeEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSo8_M_writeEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSs12_S_constructEmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs14_M_replace_auxEmmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs15_M_replace_safeEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs18_S_construct_aux_2EmcRKSaIcE@GLIBCXX_3.4.14 4.5.0
+ _ZNSs2atEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs4_Rep8_M_cloneERKSaIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep9_S_createEmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs5eraseEmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEm@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7_M_moveEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_moveEPcPKcm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_mc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs7reserveEm@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcmc@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcmc@GLIBCXX_3.4.5 4.1.1
+ _ZNSs9_M_mutateEmmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EPKcmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EPKcmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsixEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPci@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EPSt18__moneypunct_cacheIcLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EPSt18__moneypunct_cacheIcLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EPSt18__moneypunct_cacheIcLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EPSt18__moneypunct_cacheIcLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EPSt18__moneypunct_cacheIwLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EPSt18__moneypunct_cacheIwLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EPSt18__moneypunct_cacheIwLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EPSt18__moneypunct_cacheIwLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EPSt17__timepunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EPSt17__timepunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EPSt17__timepunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EPSt17__timepunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE7seekoffExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE8xsputn_2EPKciS2_i@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_allocEm@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_setupEPcS0_i@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPFPvmEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKai@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKhi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPaiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPciS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPhiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1Ei@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPFPvmEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKai@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKhi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPaiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPciS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPhiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2Ei@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE13_M_set_bufferEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE22_M_convert_to_externalEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE13_M_set_bufferEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE22_M_convert_to_externalEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwiw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE4readEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5seekgExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4.5 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEij@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwiw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE8readsomeEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_writeEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9pubsetbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9pubsetbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EP15__locale_structPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EP15__locale_structPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC1EmRKSt8valarrayImES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC2EmRKSt8valarrayImES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl16_M_install_cacheEPKNS_5facetEm@GLIBCXX_3.4.7 4.1.1
+ _ZNSt6locale5_ImplC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1ERKS0_m@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2ERKS0_m@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EPSt16__numpunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EPSt16__numpunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EPSt16__numpunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EPSt16__numpunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC1ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC2ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEixEm@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZSt11_Hash_bytesPKvmm@CXXABI_1.3.5 4.6
+ _ZSt15_Fnv_hash_bytesPKvmm@CXXABI_1.3.5 4.6
+ _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i@GLIBCXX_3.4.9 4.2.1
+ _ZSt16__ostream_insertIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKS3_i@GLIBCXX_3.4.9 4.2.1
+ _ZSt17__copy_streambufsIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.6 4.1.1
+ _ZSt17__copy_streambufsIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.6 4.1.1
+ _ZSt17__verify_groupingPKcmRKSs@GLIBCXX_3.4.10 4.3
+ _ZSt21__copy_streambufs_eofIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZSt21__copy_streambufs_eofIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZThn8_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSiD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSiD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSoD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSoD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10istrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10istrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10ostrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10ostrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _Znam@GLIBCXX_3.4 4.1.1
+ _ZnamRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _Znwm@GLIBCXX_3.4 4.1.1
+ _ZnwmRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.32bit.s390"
+ _ZNSt12__basic_fileIcEC1EP15pthread_mutex_t@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcEC2EP15pthread_mutex_t@GLIBCXX_3.4 4.1.1
diff --git a/debian/libstdc++6.symbols.s390x b/debian/libstdc++6.symbols.s390x
new file mode 100644
index 0000000..dd86968
--- /dev/null
+++ b/debian/libstdc++6.symbols.s390x
@@ -0,0 +1,11 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# ldexpf@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# powf@GLIBCXX_3.4 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.64bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
diff --git a/debian/libstdc++6.symbols.sh4 b/debian/libstdc++6.symbols.sh4
new file mode 100644
index 0000000..885c8d1
--- /dev/null
+++ b/debian/libstdc++6.symbols.sh4
@@ -0,0 +1,7 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.excprop"
+#include "libstdc++6.symbols.glibcxxmath"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0
diff --git a/debian/libstdc++6.symbols.sparc b/debian/libstdc++6.symbols.sparc
new file mode 100644
index 0000000..653ed1a
--- /dev/null
+++ b/debian/libstdc++6.symbols.sparc
@@ -0,0 +1,8 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.32bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
diff --git a/debian/libstdc++6.symbols.sparc64 b/debian/libstdc++6.symbols.sparc64
new file mode 100644
index 0000000..d313715
--- /dev/null
+++ b/debian/libstdc++6.symbols.sparc64
@@ -0,0 +1,9 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVli@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVli@GLIBCXX_3.4 4.1.1
+# FIXME: Currently no ldbl symbols in the 64bit libstdc++ on sparc.
+# #include "libstdc++6.symbols.ldbl.64bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
diff --git a/debian/libstdc++CXX-BV-doc.doc-base b/debian/libstdc++CXX-BV-doc.doc-base
new file mode 100644
index 0000000..3874ef0
--- /dev/null
+++ b/debian/libstdc++CXX-BV-doc.doc-base
@@ -0,0 +1,13 @@
+Document: libstdc++@CXX@-@BV@-doc
+Title: The GNU Standard C++ Library v3 (gcc-@BV@)
+Author: Various
+Abstract: This package contains documentation files for the GNU stdc++ library.
+ One set is the distribution documentation, the other set is the
+ source documentation including a namespace list, class hierarchy,
+ alphabetical list, compound list, file list, namespace members,
+ compound members and file members.
+Section: Programming/C++
+
+Format: html
+Index: /usr/share/doc/libstdc++@CXX@-@BV@-doc/libstdc++/html/index.html
+Files: /usr/share/doc/libstdc++@CXX@-@BV@-doc/libstdc++/html*/*
diff --git a/debian/libstdc++CXX-BV-doc.overrides b/debian/libstdc++CXX-BV-doc.overrides
new file mode 100644
index 0000000..585a805
--- /dev/null
+++ b/debian/libstdc++CXX-BV-doc.overrides
@@ -0,0 +1,2 @@
+libstdc++@CXX@-@BV@-doc: hyphen-used-as-minus-sign
+libstdc++@CXX@-@BV@-doc: manpage-has-bad-whatis-entry
diff --git a/debian/libstdc++CXX.postinst b/debian/libstdc++CXX.postinst
new file mode 100644
index 0000000..3cef3fb
--- /dev/null
+++ b/debian/libstdc++CXX.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+ configure)
+ docdir=/usr/share/doc/libstdc++@CXX@
+ if [ -d $docdir ] && [ ! -h $docdir ]; then
+ rm -rf $docdir
+ ln -s gcc-@BV@-base $docdir
+ fi
+esac
+
+#DEBHELPER#
diff --git a/debian/locale-gen b/debian/locale-gen
new file mode 100755
index 0000000..0dab8e1
--- /dev/null
+++ b/debian/locale-gen
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+LOCPATH=`pwd`/locales
+export LOCPATH
+
+[ -d $LOCPATH ] || mkdir -p $LOCPATH
+
+umask 022
+
+echo "Generating locales..."
+while read locale charset; do
+ case $locale in \#*) continue;; esac
+ [ -n "$locale" -a -n "$charset" ] || continue
+ echo -n " `echo $locale | sed 's/\([^.\@]*\).*/\1/'`"
+ echo -n ".$charset"
+ echo -n `echo $locale | sed 's/\([^\@]*\)\(\@.*\)*/\2/'`
+ echo -n '...'
+ if [ -f $LOCPATH/$locale ]; then
+ input=$locale
+ else
+ input=`echo $locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`
+ fi
+ localedef -i $input -c -f $charset $LOCPATH/$locale #-A /etc/locale.alias
+ echo ' done'; \
+done <<EOF
+# This file lists locales that the libstdc++ testsuite depends on
+de_DE ISO-8859-1
+de_DE@euro ISO-8859-15
+en_HK ISO-8859-1
+en_PH ISO-8859-1
+en_US ISO-8859-1
+en_US.ISO-8859-1 ISO-8859-1
+en_US.ISO-8859-15 ISO-8859-15
+en_US.UTF-8 UTF-8
+es_ES ISO-8859-1
+es_MX ISO-8859-1
+fr_FR ISO-8859-1
+fr_FR@euro ISO-8859-15
+is_IS ISO-8859-1
+is_IS.UTF-8 UTF-8
+it_IT ISO-8859-1
+ja_JP.eucjp EUC-JP
+se_NO.UTF-8 UTF-8
+ta_IN UTF-8
+zh_TW BIG5
+EOF
+
+echo "Generation complete."
diff --git a/debian/logwatch.sh b/debian/logwatch.sh
new file mode 100755
index 0000000..64c21ed
--- /dev/null
+++ b/debian/logwatch.sh
@@ -0,0 +1,104 @@
+#! /bin/sh
+
+# script to trick the build daemons and output something, if there is
+# still test/build activity
+
+# $1: primary file to watch. if there is activity on this file, we do nothing
+# $2+: files to watch to look for activity despite no output in $1
+# if the files are modified or are newly created, then the message
+# is printed on stdout.
+# if nothing is modified, don't output anything (so the buildd timeout
+# hits).
+
+pidfile=logwatch.pid
+timeout=3600
+message='\nlogwatch still running\n'
+
+usage()
+{
+ echo >&2 "usage: `basename $0` [-p <pidfile>] [-t <timeout>] [-m <message>]"
+ echo >&2 " <logfile> [<logfile> ...]"
+ exit 1
+}
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ -p)
+ pidfile=$2
+ shift
+ shift
+ ;;
+ -t)
+ timeout=$2
+ shift
+ shift
+ ;;
+ -m)
+ message="$2"
+ shift
+ shift
+ ;;
+ -*)
+ usage
+ ;;
+ *)
+ break
+ esac
+done
+
+[ $# -gt 0 ] || usage
+
+logfile="$1"
+shift
+otherlogs="$@"
+
+cleanup()
+{
+ rm -f $pidfile
+ exit 0
+}
+
+#trap cleanup 0 1 3 15
+
+echo $$ > $pidfile
+
+update()
+{
+ _logvar=$1
+ _othervar=$2
+
+ # logfile may not exist yet
+ if [ -r $logfile ]; then
+ _logtail="`tail -10 $logfile | md5sum` $f"
+ else
+ _logtail="does not exist: $logfile"
+ fi
+ eval $_logvar="'$_logtail'"
+
+ _othertails=''
+ for f in $otherlogs; do
+ if [ -r $f ]; then
+ _othertails="$_othertails `tail -10 $f | md5sum` $f"
+ else
+ _othertails="$_othertails does not exist: $f"
+ fi
+ done
+ eval $_othervar="'$_othertails'"
+}
+
+update logtail othertails
+while true; do
+ sleep $timeout
+ update newlogtail newothertails
+ if [ "$logtail" != "$newlogtail" ]; then
+ # there is still action in the primary logfile. do nothing.
+ logtail="$newlogtail"
+ elif [ "$othertails" != "$newothertails" ]; then
+ # there is still action in the other log files, so print the message
+ /bin/echo -e $message
+ othertails="$newothertails"
+ else
+ # nothing changed in the other log files. maybe a timeout ...
+ :
+ fi
+done
diff --git a/debian/patches/ada-acats.diff b/debian/patches/ada-acats.diff
new file mode 100644
index 0000000..ff33fb7
--- /dev/null
+++ b/debian/patches/ada-acats.diff
@@ -0,0 +1,199 @@
+# DP: - When running the ACATS, look for the gnat tools in their new
+# DP: directory (build/gnattools), and for the shared libraries in
+# DP: build/gcc/ada/rts-shared-zcx, build/libgnatvsn and build/libgnatprj.
+
+Index: b/src/gcc/testsuite/ada/acats/run_acats
+===================================================================
+--- a/src/gcc/testsuite/ada/acats/run_acats
++++ b/src/gcc/testsuite/ada/acats/run_acats
+@@ -20,52 +20,29 @@
+ return 1
+ }
+
++echo '#!/bin/sh' > host_gnatchop
++echo exec /usr/bin/gnatchop '$*' >> host_gnatchop
++
++chmod +x host_gnatchop
++
++echo '#!/bin/sh' > host_gnatmake
++echo echo '$PATH' '$*' >> host_gnatmake
++echo exec /usr/bin/gnatmake '$*' >> host_gnatmake
++
++chmod +x host_gnatmake
++
+ # Set up environment to use the Ada compiler from the object tree
+
+-host_gnatchop=`which gnatchop`
+-host_gnatmake=`which gnatmake`
+ ROOT=`${PWDCMD-pwd}`
+ BASE=`cd $ROOT/../../..; ${PWDCMD-pwd}`
+-
+ PATH=$BASE:$ROOT:$PATH
+-ADA_INCLUDE_PATH=$BASE/ada/rts
+-LD_LIBRARY_PATH=$ADA_INCLUDE_PATH:$BASE:$LD_LIBRARY_PATH
+-ADA_OBJECTS_PATH=$ADA_INCLUDE_PATH
+-
+-if [ ! -d $ADA_INCLUDE_PATH ]; then
+- echo gnatlib missing, exiting.
+- exit 1
+-fi
+-
+-if [ ! -f $BASE/gnatchop ]; then
+- echo gnattools missing, exiting.
+- exit 1
+-fi
+-
+-if [ ! -f $BASE/gnatmake ]; then
+- echo gnattools missing, exiting.
+- exit 1
+-fi
+-
++GNATTOOLS=`cd $BASE/../gnattools; ${PWDCMD-pwd}`
++LIBGNATVSN=`cd $BASE/../libgnatvsn; ${PWDCMD-pwd}`
++LIBGNATPRJ=`cd $BASE/../libgnatprj; ${PWDCMD-pwd}`
+ GCC_DRIVER="$BASE/xgcc"
+ GCC="$BASE/xgcc -B$BASE/"
+ export PATH ADA_INCLUDE_PATH ADA_OBJECTS_PATH GCC_DRIVER GCC LD_LIBRARY_PATH
+-
+-echo '#!/bin/sh' > host_gnatchop
+-echo PATH=`dirname $host_gnatchop`:'$PATH' >> host_gnatchop
+-echo unset ADA_INCLUDE_PATH ADA_OBJECTS_PATH GCC_EXEC_PREFIX >> host_gnatchop
+-echo export PATH >> host_gnatchop
+-echo exec gnatchop '"$@"' >> host_gnatchop
+-
+-chmod +x host_gnatchop
+-
+-echo '#!/bin/sh' > host_gnatmake
+-echo PATH=`dirname $host_gnatmake`:'$PATH' >> host_gnatmake
+-echo unset ADA_INCLUDE_PATH ADA_OBJECTS_PATH GCC_EXEC_PREFIX >> host_gnatmake
+-echo export PATH >> host_gnatmake
+-echo exec gnatmake '"$@"' >> host_gnatmake
+-
+-chmod +x host_gnatmake
++export GNATTOOLS LIBGNATVSN LIBGNATPRJ
+
+ # Limit the stack to 16MB for stack checking
+ ulimit -s 16384
+Index: b/src/gcc/testsuite/ada/acats/run_all.sh
+===================================================================
+--- a/src/gcc/testsuite/ada/acats/run_all.sh
++++ b/src/gcc/testsuite/ada/acats/run_all.sh
+@@ -12,6 +12,10 @@
+ gccflags="-O2"
+ gnatflags="-gnatws"
+
++RTS=`cd $GNATTOOLS/../gcc/ada/rts-shared-zcx; ${PWDCMD-pwd}`
++LD_LIBRARY_PATH=$RTS:$LIBGNATVSN:$LIBGNATPRJ
++export LD_LIBRARY_PATH
++
+ target_run () {
+ eval $EXPECT -f $testdir/run_test.exp $*
+ }
+@@ -48,15 +52,25 @@
+ fi
+
+ target_gnatchop () {
+- gnatchop --GCC="$GCC_DRIVER" $*
++ display ADA_INCLUDE_PATH=$GNATTOOLS/../../src/gcc/ada $GNATTOOLS/gnatchop --GCC="$GCC_DRIVER" $*
++ ADA_INCLUDE_PATH=$GNATTOOLS/../../src/gcc/ada $GNATTOOLS/gnatchop --GCC="$GCC_DRIVER" $*
+ }
+
+ target_gnatmake () {
+- echo gnatmake --GCC=\"$GCC\" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC=\"$GCC\"
+- gnatmake --GCC="$GCC" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC="$GCC"
++ RTS="$GNATTOOLS/../gcc/ada/rts-shared-zcx"
++ EXTERNAL_OBJECTS="$EXTERNAL_OBJECTS $RTS/adaint.o $RTS/sysdep.o $RTS/init.o $RTS/raise-gcc.o"
++ display $GNATTOOLS/gnatmake -I- -I$RTS -I. \
++ --GCC=\"$GCC\" --GNATBIND="$GNATTOOLS/gnatbind" \
++ --GNATLINK="$GNATTOOLS/gnatlink" $gnatflags $gccflags $* \
++ -bargs -static -largs $EXTERNAL_OBJECTS --GCC=\"$GCC -I- -I$RTS -I.\"
++ $GNATTOOLS/gnatmake -I- -I$RTS -I. \
++ --GCC="$GCC" --GNATBIND="$GNATTOOLS/gnatbind" \
++ --GNATLINK="$GNATTOOLS/gnatlink" $gnatflags $gccflags $* \
++ -bargs -static -largs $EXTERNAL_OBJECTS --GCC="$GCC -I- -I$RTS -I."
+ }
+
+ target_gcc () {
++ display $GCC $gccflags $*
+ $GCC $gccflags $*
+ }
+
+@@ -86,8 +100,8 @@
+ display `$GCC -v 2>&1`
+ display host=`gcc -dumpmachine`
+ display target=$target
+-display `type gnatmake`
+-gnatls -v >> $dir/acats.log
++display `type $GNATTOOLS/gnatmake`
++$GNATTOOLS/gnatls -I- -I$RTS -v >> $dir/acats.log
+ display ""
+
+ display " === acats support ==="
+Index: b/src/gcc/testsuite/lib/gnat.exp
+===================================================================
+--- a/src/gcc/testsuite/lib/gnat.exp
++++ b/src/gcc/testsuite/lib/gnat.exp
+@@ -89,18 +89,24 @@
+ global GNAT_UNDER_TEST
+ global TOOL_EXECUTABLE
+ global gnat_target_current
++ global ld_library_path
+
+ set gnat_target_current ""
+
+ if { $gnat_initialized == 1 } { return }
+
+- if ![info exists GNAT_UNDER_TEST] then {
+- if [info exists TOOL_EXECUTABLE] {
+- set GNAT_UNDER_TEST "$TOOL_EXECUTABLE"
+- } else {
+- set GNAT_UNDER_TEST "[local_find_gnatmake]"
+- }
+- }
++ set GNAT_UNDER_TEST "$rootme/../gnattools/gnatmake -I$rootme/ada/rts-shared-zcx --GCC=$rootme/xgcc --GNATBIND=$rootme/../gnattools/gnatbind --GNATLINK=$rootme/../gnattools/gnatlink -cargs -B$rootme -largs --GCC=$rootme/xgcc -B$rootme -margs"
++ append ld_library_path ":$rootme/ada/rts-shared-zcx"
++ append ld_library_path ":$rootme/../libgnatvsn"
++ append ld_library_path ":$rootme/../libgnatprj"
++ set_ld_library_path_env_vars
++
++ # gnatlink looks for system.ads itself and has no --RTS option, so
++ # specify via environment
++ verbose -log "ADA_INCLUDE_PATH=$rootme/ada/rts-shared-zcx"
++ verbose -log "ADA_OBJECTS_PATH=$rootme/ada/rts-shared-zcx"
++ setenv ADA_INCLUDE_PATH "$rootme/ada/rts-shared-zcx"
++ setenv ADA_OBJECTS_PATH "$rootme/ada/rts-shared-zcx"
+
+ if ![info exists tmpdir] then {
+ set tmpdir /tmp
+@@ -121,31 +127,6 @@
+ return [gcc_target_compile $source $dest $type $options]
+ }
+
+- # If we detect a change of target, we need to recompute both
+- # GNAT_UNDER_TEST and the appropriate RTS.
+- if { $gnat_target_current!="[current_target_name]" } {
+- set gnat_target_current "[current_target_name]"
+- if [info exists TOOL_OPTIONS] {
+- set rtsdir "[get_multilibs ${TOOL_OPTIONS}]/libada"
+- } else {
+- set rtsdir "[get_multilibs]/libada"
+- }
+- if [info exists TOOL_EXECUTABLE] {
+- set GNAT_UNDER_TEST "$TOOL_EXECUTABLE"
+- } else {
+- set GNAT_UNDER_TEST "[local_find_gnatmake]"
+- }
+- set GNAT_UNDER_TEST "$GNAT_UNDER_TEST --RTS=$rtsdir"
+-
+- # gnatlink looks for system.ads itself and has no --RTS option, so
+- # specify via environment
+- setenv ADA_INCLUDE_PATH "$rtsdir/adainclude"
+- setenv ADA_OBJECTS_PATH "$rtsdir/adainclude"
+- # Always log so compilations can be repeated manually.
+- verbose -log "ADA_INCLUDE_PATH=$rtsdir/adainclude"
+- verbose -log "ADA_OBJECTS_PATH=$rtsdir/adainclude"
+- }
+-
+ lappend options "compiler=$GNAT_UNDER_TEST -q -f"
+ lappend options "timeout=[timeout_value]"
+
diff --git a/debian/patches/ada-bug564232.diff b/debian/patches/ada-bug564232.diff
new file mode 100644
index 0000000..a5d949d
--- /dev/null
+++ b/debian/patches/ada-bug564232.diff
@@ -0,0 +1,11 @@
+--- a/src/gcc/ada/gsocket.h
++++ b/src/gcc/ada/gsocket.h
+@@ -225,7 +225,7 @@
+ # define Need_Netdb_Buffer 0
+ #endif
+
+-#if defined (__FreeBSD__) || defined (__vxworks) || defined(__rtems__)
++#if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__vxworks) || defined(__rtems__)
+ # define Has_Sockaddr_Len 1
+ #else
+ # define Has_Sockaddr_Len 0
diff --git a/debian/patches/ada-default-project-path.diff b/debian/patches/ada-default-project-path.diff
new file mode 100644
index 0000000..cc9abfe
--- /dev/null
+++ b/debian/patches/ada-default-project-path.diff
@@ -0,0 +1,113 @@
+# DP: - Change the default search path for project files to the one specified
+# DP: by the Debian Policy for Ada: /usr/share/ada/adainclude.
+
+--- a/src/gcc/ada/Make-generated.in
++++ b/src/gcc/ada/Make-generated.in
+@@ -104,7 +104,7 @@
+ $(ECHO) " S1 : constant String := \"$(ADA_INCLUDE_DIR)/\";" >>tmp-sdefault.adb
+ $(ECHO) " S2 : constant String := \"$(ADA_RTL_OBJ_DIR)/\";" >>tmp-sdefault.adb
+ $(ECHO) " S3 : constant String := \"$(target)/\";" >>tmp-sdefault.adb
+- $(ECHO) " S4 : constant String := \"$(libsubdir)/\";" >>tmp-sdefault.adb
++ $(ECHO) " S4 : constant String := \"/usr/share/ada/adainclude/\";" >>tmp-sdefault.adb
+ $(ECHO) " function Include_Dir_Default_Name return String_Ptr is" >>tmp-sdefault.adb
+ $(ECHO) " begin" >>tmp-sdefault.adb
+ $(ECHO) " return Relocate_Path (S0, S1);" >>tmp-sdefault.adb
+--- a/src/gcc/ada/prj-env.adb
++++ b/src/gcc/ada/prj-env.adb
+@@ -1923,41 +1923,10 @@
+
+ -- Set the initial value of Current_Project_Path
+
+- if Add_Default_Dir then
+- declare
+- Prefix : String_Ptr := Sdefault.Search_Dir_Prefix;
+-
+- begin
+- if Prefix = null then
+- Prefix := new String'(Executable_Prefix_Path);
+-
+- if Prefix.all /= "" then
+- if Target_Name /= "" then
+- Add_Str_To_Name_Buffer
+- (Path_Separator & Prefix.all &
+- "lib" & Directory_Separator & "gpr" &
+- Directory_Separator & Target_Name);
+- end if;
+-
+- Add_Str_To_Name_Buffer
+- (Path_Separator & Prefix.all &
+- "share" & Directory_Separator & "gpr");
+- Add_Str_To_Name_Buffer
+- (Path_Separator & Prefix.all &
+- "lib" & Directory_Separator & "gnat");
+- end if;
+-
+- else
+- Self.Path :=
+- new String'(Name_Buffer (1 .. Name_Len) & Path_Separator &
+- Prefix.all &
+- ".." & Directory_Separator &
+- ".." & Directory_Separator &
+- ".." & Directory_Separator & "gnat");
+- end if;
+-
+- Free (Prefix);
+- end;
++ if Add_Default_Dir and Sdefault.Search_Dir_Prefix /= null then
++ Self.Path :=
++ new String'(Name_Buffer (1 .. Name_Len) & Path_Separator &
++ Sdefault.Search_Dir_Prefix.all);
+ end if;
+
+ if Self.Path = null then
+--- a/src/gcc/ada/gnatls.adb
++++ b/src/gcc/ada/gnatls.adb
+@@ -1617,9 +1617,6 @@
+ declare
+ Project_Path : String_Access := Getenv (Gpr_Project_Path);
+
+- Lib : constant String :=
+- Directory_Separator & "lib" & Directory_Separator;
+-
+ First : Natural;
+ Last : Natural;
+
+@@ -1679,36 +1676,8 @@
+ if Add_Default_Dir then
+ Name_Len := 0;
+ Add_Str_To_Name_Buffer (Sdefault.Search_Dir_Prefix.all);
+-
+- -- On Windows, make sure that all directory separators are '\'
+-
+- if Directory_Separator /= '/' then
+- for J in 1 .. Name_Len loop
+- if Name_Buffer (J) = '/' then
+- Name_Buffer (J) := Directory_Separator;
+- end if;
+- end loop;
+- end if;
+-
+- -- Find the sequence "/lib/"
+-
+- while Name_Len >= Lib'Length
+- and then Name_Buffer (Name_Len - 4 .. Name_Len) /= Lib
+- loop
+- Name_Len := Name_Len - 1;
+- end loop;
+-
+- -- If the sequence "/lib"/ was found, display the default
+- -- directory <prefix>/lib/gnat/.
+-
+- if Name_Len >= 5 then
+- Name_Buffer (Name_Len + 1 .. Name_Len + 4) := "gnat";
+- Name_Buffer (Name_Len + 5) := Directory_Separator;
+- Name_Len := Name_Len + 5;
+- Write_Str (" ");
+- Write_Line
+- (To_Host_Dir_Spec (Name_Buffer (1 .. Name_Len), True).all);
+- end if;
++ Write_Str (" ");
++ Write_Line (Name_Buffer (1 .. Name_Len));
+ end if;
+ end;
+
diff --git a/debian/patches/ada-driver-check.diff b/debian/patches/ada-driver-check.diff
new file mode 100644
index 0000000..00de859
--- /dev/null
+++ b/debian/patches/ada-driver-check.diff
@@ -0,0 +1,26 @@
+# DP: Simplify Ada driver check (we always build using the required
+# DP: Ada version. Needed for warnings on alpha.
+
+--- a/src/config/acx.m4~ 2007-09-02 19:24:08.865326043 +0200
++++ b/src/config/acx.m4 2007-09-02 19:28:53.719623005 +0200
+@@ -380,7 +380,7 @@
+ # Other compilers, like HP Tru64 UNIX cc, exit successfully when
+ # given a .adb file, but produce no object file. So we must check
+ # if an object file was really produced to guard against this.
+-errors=`(${CC} $1[]m4_ifval([$1], [ ])-c conftest.adb) 2>&1 || echo failure`
++errors=`(${CC} $1[]m4_ifval([$1], [ ])-c conftest.adb) 2>/dev/null || echo failure`
+ if test x"$errors" = x && test -f conftest.$ac_objext; then
+ acx_cv_cc_gcc_supports_ada=yes
+ fi
+
+--- a/src/configure~ 2007-09-02 16:50:31.206279000 +0200
++++ b/src/configure 2007-09-02 19:28:58.259691491 +0200
+@@ -4448,7 +4448,7 @@
+ # Other compilers, like HP Tru64 UNIX cc, exit successfully when
+ # given a .adb file, but produce no object file. So we must check
+ # if an object file was really produced to guard against this.
+-errors=`(${CC} -c conftest.adb) 2>&1 || echo failure`
++errors=`(${CC} -c conftest.adb) 2>/dev/null || echo failure`
+ if test x"$errors" = x && test -f conftest.$ac_objext; then
+ acx_cv_cc_gcc_supports_ada=yes
+ fi
diff --git a/debian/patches/ada-gcc-name.diff b/debian/patches/ada-gcc-name.diff
new file mode 100644
index 0000000..0a98a78
--- /dev/null
+++ b/debian/patches/ada-gcc-name.diff
@@ -0,0 +1,112 @@
+# DP: use gcc-4.6 instead of gcc as the command name.
+
+Index: b/src/gcc/ada/comperr.adb
+===================================================================
+--- a/src/gcc/ada/comperr.adb
++++ b/src/gcc/ada/comperr.adb
+@@ -356,7 +356,7 @@
+ End_Line;
+
+ Write_Str
+- ("| Include the exact gcc or gnatmake command " &
++ ("| Include the exact gcc-4.6 or gnatmake command " &
+ "that you entered.");
+ End_Line;
+
+Index: b/src/gcc/ada/gnatlink.adb
+===================================================================
+--- a/src/gcc/ada/gnatlink.adb
++++ b/src/gcc/ada/gnatlink.adb
+@@ -137,7 +137,7 @@
+ -- This table collects the arguments to be passed to compile the binder
+ -- generated file.
+
+- Gcc : String_Access := Program_Name ("gcc", "gnatlink");
++ Gcc : String_Access := Program_Name ("gcc-4.6", "gnatlink");
+
+ Read_Mode : constant String := "r" & ASCII.NUL;
+
+@@ -1411,7 +1411,8 @@
+ end if;
+
+ 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-4.6'");
+ Write_Eol;
+ Write_Line (" [non-Ada-objects] list of non Ada object files");
+ Write_Line (" [linker-options] other options for the linker");
+Index: b/src/gcc/ada/make.adb
+===================================================================
+--- a/src/gcc/ada/make.adb
++++ b/src/gcc/ada/make.adb
+@@ -670,7 +670,7 @@
+ -- Compiler, Binder & Linker Data and Subprograms --
+ ----------------------------------------------------
+
+- Gcc : String_Access := Program_Name ("gcc", "gnatmake");
++ Gcc : String_Access := Program_Name ("gcc-4.6", "gnatmake");
+ Gnatbind : String_Access := Program_Name ("gnatbind", "gnatmake");
+ Gnatlink : String_Access := Program_Name ("gnatlink", "gnatmake");
+ -- Default compiler, binder, linker programs
+Index: b/src/gcc/ada/gnatchop.adb
+===================================================================
+--- a/src/gcc/ada/gnatchop.adb
++++ b/src/gcc/ada/gnatchop.adb
+@@ -44,7 +44,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-4.6");
+ -- May be modified by switch --GCC=
+
+ Gcc_Set : Boolean := False;
+Index: b/src/gcc/ada/mdll-utl.adb
+===================================================================
+--- a/src/gcc/ada/mdll-utl.adb
++++ b/src/gcc/ada/mdll-utl.adb
+@@ -39,7 +39,7 @@
+ Dlltool_Name : constant String := "dlltool";
+ Dlltool_Exec : OS_Lib.String_Access;
+
+- Gcc_Name : constant String := "gcc";
++ Gcc_Name : constant String := "gcc-4.6";
+ Gcc_Exec : OS_Lib.String_Access;
+
+ Gnatbind_Name : constant String := "gnatbind";
+@@ -212,7 +212,7 @@
+ end;
+ end if;
+
+- Print_Command ("gcc", Arguments (1 .. A));
++ Print_Command ("gcc-4.6", Arguments (1 .. A));
+
+ OS_Lib.Spawn (Gcc_Exec.all, Arguments (1 .. A), Success);
+
+Index: b/src/gcc/ada/mlib-utl.adb
+===================================================================
+--- a/src/gcc/ada/mlib-utl.adb
++++ b/src/gcc/ada/mlib-utl.adb
+@@ -412,7 +412,7 @@
+ if Driver_Name = No_Name then
+ if Gcc_Exec = null then
+ if Gcc_Name = null then
+- Gcc_Name := Osint.Program_Name ("gcc", "gnatmake");
++ Gcc_Name := Osint.Program_Name ("gcc-4.6", "gnatmake");
+ end if;
+
+ Gcc_Exec := Locate_Exec_On_Path (Gcc_Name.all);
+Index: b/src/gcc/ada/prj-makr.adb
+===================================================================
+--- a/src/gcc/ada/prj-makr.adb
++++ b/src/gcc/ada/prj-makr.adb
+@@ -109,7 +109,7 @@
+
+ procedure Dup2 (Old_Fd, New_Fd : File_Descriptor);
+
+- Gcc : constant String := "gcc";
++ Gcc : constant String := "gcc-4.6";
+ Gcc_Path : String_Access := null;
+
+ Non_Empty_Node : constant Project_Node_Id := 1;
diff --git a/debian/patches/ada-kfreebsd-gnu.diff b/debian/patches/ada-kfreebsd-gnu.diff
new file mode 100644
index 0000000..61b5298
--- /dev/null
+++ b/debian/patches/ada-kfreebsd-gnu.diff
@@ -0,0 +1,233 @@
+Index: b/src/gcc/ada/s-osinte-kfreebsd-gnu.adb
+===================================================================
+--- /dev/null
++++ b/src/gcc/ada/s-osinte-kfreebsd-gnu.adb
+@@ -0,0 +1,158 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- S Y S T E M . O S _ I N T E R F A C E --
++-- --
++-- B o d y --
++-- --
++-- Copyright (C) 1991-1994, Florida State University --
++-- Copyright (C) 1995-2006, AdaCore --
++-- --
++-- GNARL is free software; you can redistribute it and/or modify it under --
++-- terms of the GNU General Public License as published by the Free Soft- --
++-- ware Foundation; either version 2, or (at your option) any later ver- --
++-- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
++-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
++-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
++-- for more details. You should have received a copy of the GNU General --
++-- Public License distributed with GNARL; see file COPYING. If not, write --
++-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
++-- Boston, MA 02110-1301, USA. --
++-- --
++-- As a special exception, if other files instantiate generics from this --
++-- unit, or you link this unit with other files to produce an executable, --
++-- this unit does not by itself cause the resulting executable to be --
++-- covered by the GNU General Public License. This exception does not --
++-- however invalidate any other reasons why the executable file might be --
++-- covered by the GNU Public License. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. --
++-- Extensive contributions were provided by Ada Core Technologies, Inc. --
++-- --
++------------------------------------------------------------------------------
++
++-- This is the GNU/kFreeBSD version of this package.
++
++pragma Polling (Off);
++-- Turn off polling, we do not want ATC polling to take place during
++-- tasking operations. It causes infinite loops and other problems.
++
++-- This package encapsulates all direct interfaces to OS services
++-- that are needed by children of System.
++
++package body System.OS_Interface is
++
++ --------------------
++ -- Get_Stack_Base --
++ --------------------
++
++ function Get_Stack_Base (thread : pthread_t) return Address is
++ pragma Warnings (Off, thread);
++
++ begin
++ return Null_Address;
++ end Get_Stack_Base;
++
++ ------------------
++ -- pthread_init --
++ ------------------
++
++ procedure pthread_init is
++ begin
++ null;
++ end pthread_init;
++
++ -----------------------------------
++ -- pthread_mutexattr_setprotocol --
++ -----------------------------------
++
++ function pthread_mutexattr_setprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : int) return int is
++ pragma Unreferenced (attr, protocol);
++ begin
++ return 0;
++ end pthread_mutexattr_setprotocol;
++
++ -----------------------------------
++ -- pthread_mutexattr_getprotocol --
++ -----------------------------------
++
++ function pthread_mutexattr_getprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : access int) return int is
++ pragma Unreferenced (attr, protocol);
++ begin
++ return 0;
++ end pthread_mutexattr_getprotocol;
++
++ --------------------------------------
++ -- pthread_mutexattr_setprioceiling --
++ --------------------------------------
++
++ function pthread_mutexattr_setprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : int) return int is
++ pragma Unreferenced (attr, prioceiling);
++ begin
++ return 0;
++ end pthread_mutexattr_setprioceiling;
++
++ --------------------------------------
++ -- pthread_mutexattr_getprioceiling --
++ --------------------------------------
++
++ function pthread_mutexattr_getprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : access int) return int is
++ pragma Unreferenced (attr, prioceiling);
++ begin
++ return 0;
++ end pthread_mutexattr_getprioceiling;
++
++ -----------------
++ -- To_Duration --
++ -----------------
++
++ function To_Duration (TS : timespec) return Duration is
++ begin
++ return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
++ end To_Duration;
++
++ ------------------------
++ -- To_Target_Priority --
++ ------------------------
++
++ function To_Target_Priority
++ (Prio : System.Any_Priority) return Interfaces.C.int
++ is
++ begin
++ return Interfaces.C.int (Prio);
++ end To_Target_Priority;
++
++ -----------------
++ -- To_Timespec --
++ -----------------
++
++ function To_Timespec (D : Duration) return timespec is
++ S : time_t;
++ F : Duration;
++
++ begin
++ S := time_t (Long_Long_Integer (D));
++ F := D - Duration (S);
++
++ -- If F has negative value due to a round-up, adjust for positive F
++ -- value.
++
++ if F < 0.0 then
++ S := S - 1;
++ F := F + 1.0;
++ end if;
++
++ return timespec'(tv_sec => S,
++ tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
++ end To_Timespec;
++
++end System.OS_Interface;
+Index: b/src/gcc/ada/gcc-interface/Makefile.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -1097,7 +1097,7 @@
+ a-numaux.ads<a-numaux-x86.ads \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+- s-osinte.adb<s-osinte-posix.adb \
++ s-osinte.adb<s-osinte-kfreebsd-gnu.adb \
+ s-osinte.ads<s-osinte-kfreebsd-gnu.ads \
+ s-osprim.adb<s-osprim-posix.adb \
+ s-taprop.adb<s-taprop-posix.adb \
+@@ -1123,7 +1123,7 @@
+ a-numaux.ads<a-numaux-x86.ads \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+- s-osinte.adb<s-osinte-posix.adb \
++ s-osinte.adb<s-osinte-kfreebsd-gnu.adb \
+ s-osinte.ads<s-osinte-kfreebsd-gnu.ads \
+ s-osprim.adb<s-osprim-posix.adb \
+ s-taprop.adb<s-taprop-posix.adb \
+Index: b/src/gcc/ada/s-osinte-kfreebsd-gnu.ads
+===================================================================
+--- a/src/gcc/ada/s-osinte-kfreebsd-gnu.ads
++++ b/src/gcc/ada/s-osinte-kfreebsd-gnu.ads
+@@ -47,6 +47,7 @@
+ pragma Preelaborate;
+
+ pragma Linker_Options ("-lpthread");
++ pragma Linker_Options ("-lrt");
+
+ subtype int is Interfaces.C.int;
+ subtype char is Interfaces.C.char;
+@@ -431,31 +432,25 @@
+ PTHREAD_PRIO_PROTECT : constant := 2;
+ PTHREAD_PRIO_INHERIT : constant := 1;
+
++ -- GNU/kFreeBSD does not support Thread Priority Protection or Thread
++ -- Priority Inheritance and lacks some pthread_mutexattr_* functions.
++ -- Replace them with dummy versions.
++
+ function pthread_mutexattr_setprotocol
+ (attr : access pthread_mutexattr_t;
+ protocol : int) return int;
+- pragma Import
+- (C, pthread_mutexattr_setprotocol, "pthread_mutexattr_setprotocol");
+
+ function pthread_mutexattr_getprotocol
+ (attr : access pthread_mutexattr_t;
+ protocol : access int) return int;
+- pragma Import
+- (C, pthread_mutexattr_getprotocol, "pthread_mutexattr_getprotocol");
+
+ function pthread_mutexattr_setprioceiling
+ (attr : access pthread_mutexattr_t;
+ prioceiling : int) return int;
+- pragma Import
+- (C, pthread_mutexattr_setprioceiling,
+- "pthread_mutexattr_setprioceiling");
+
+ function pthread_mutexattr_getprioceiling
+ (attr : access pthread_mutexattr_t;
+ prioceiling : access int) return int;
+- pragma Import
+- (C, pthread_mutexattr_getprioceiling,
+- "pthread_mutexattr_getprioceiling");
+
+ type struct_sched_param is record
+ sched_priority : int; -- scheduling priority
diff --git a/debian/patches/ada-libgnatprj.diff b/debian/patches/ada-libgnatprj.diff
new file mode 100644
index 0000000..b424671
--- /dev/null
+++ b/debian/patches/ada-libgnatprj.diff
@@ -0,0 +1,1685 @@
+# DP: - Introduce a new shared library named libgnatprj, containing
+# DP: the GNAT project file manager licensed under the pure GPL, for
+# DP: use in GNAT tools, GLADE and GPS. Link the GNAT tools against
+# DP: this new library.
+
+# This patch seems large, but the hunks in Makefile.in are actually
+# generated from Makefile.def using autogen.
+
+# !!! Must be applied after ada-libgnatvsn.dpatch
+
+Index: b/src/gcc/ada/gcc-interface/config-lang.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/config-lang.in
++++ b/src/gcc/ada/gcc-interface/config-lang.in
+@@ -36,8 +36,8 @@
+
+ outputs="ada/gcc-interface/Makefile ada/Makefile"
+
+-target_libs="target-libada target-libgnatvsn"
+-lang_dirs="libada libgnatvsn gnattools"
++target_libs="target-libada target-libgnatvsn target-libgnatprj"
++lang_dirs="libada libgnatvsn libgnatprj gnattools"
+
+ # Ada is not enabled by default for the time being.
+ build_by_default=no
+Index: b/src/gnattools/Makefile.in
+===================================================================
+--- a/src/gnattools/Makefile.in
++++ b/src/gnattools/Makefile.in
+@@ -36,13 +36,13 @@
+ target_noncanonical=@target_noncanonical@
+
+ CFLAGS=-O2 -Wall
+-INCLUDES = -I@srcdir@/../gcc/ada -I@srcdir@/../gcc
+ ADA_CFLAGS=-O2 -gnatn
+-ADA_INCLUDES=-nostdinc -I- -I. -I../gcc/ada/rts -I../libgnatvsn
++ADA_INCLUDES=-nostdinc -I- -I. -I../gcc/ada/rts -I../libgnatvsn -I../libgnatprj
+ LIB_VERSION=$(strip $(shell grep ' Library_Version :' \
+ ../libgnatvsn/gnatvsn.ads | sed -e 's/.*"\(.*\)".*/\1/'))
+ ADA_LIBS := -L../gcc/ada/rts -lgnat-$(LIB_VERSION)
+ ADA_LIBS += -L../libgnatvsn -lgnatvsn
++ADA_LIBS += -L../libgnatprj -lgnatprj
+
+ # We will use the just-built compiler to compile and link everything.
+ GCC=../gcc/xgcc -B../gcc/
+@@ -67,74 +67,18 @@
+
+ # Since we don't have gnatmake, we must specify the full list of
+ # object files necessary to build gnatmake and gnatlink.
+-# TODO: remove from these lists the objects that are part of
+-# libgnatprj.
+ GNATLINK_OBJS = \
+-ali.o \
+-butil.o \
+-fmap.o \
+ gnatlink.o \
+ indepsw.o \
+-osint.o \
+-prefix.o \
+-rident.o \
+-sdefault.o \
+-stylesw.o \
+-switch.o \
+-targparm.o \
+ validsw.o
+
+ GNATMAKE_OBJS = \
+-ali-util.o \
+-ali.o \
+-binderr.o \
+-butil.o \
+-err_vars.o \
+-erroutc.o \
+-errutil.o \
+-fmap.o \
+ fname-sf.o \
+-fname-uf.o \
+ gnatmake.o \
+ make.o \
+ makeusg.o \
+-makeutl.o \
+-mlib-fil.o \
+ mlib-prj.o \
+-mlib-tgt.o \
+-mlib-tgt-specific.o \
+-mlib-utl.o \
+-mlib.o \
+ osint-m.o \
+-osint.o \
+-prefix.o \
+-prj-attr-pm.o \
+-prj-attr.o \
+-prj-com.o \
+-prj-dect.o \
+-prj-env.o \
+-prj-err.o \
+-prj-ext.o \
+-prj-nmsc.o \
+-prj-pars.o \
+-prj-part.o \
+-prj-proc.o \
+-prj-strt.o \
+-prj-tree.o \
+-prj-util.o \
+-prj.o \
+-rident.o \
+-scng.o \
+-sdefault.o \
+-sfn_scan.o \
+-sinput-c.o \
+-sinput-p.o \
+-styleg.o \
+-stylesw.o \
+-switch-m.o \
+-switch.o \
+-targparm.o \
+-tempdir.o \
+ usage.o \
+ validsw.o \
+ $(EXTRA_GNATMAKE_OBJS)
+@@ -176,11 +120,6 @@
+ for file in $(BODIES) $(SPECS); do \
+ $(LN_S) -f $$file .; \
+ done
+- rm -f sdefault.adb; $(LN_S) ../gcc/ada/sdefault.adb .
+- $(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
+- rm -f $(word 1,$(subst <, ,$(PAIR)));\
+- $(LN_S) @srcdir@/../gcc/ada/$(word 2,$(subst <, ,$(PAIR))) \
+- $(word 1,$(subst <, ,$(PAIR)));)
+ touch $@
+
+ gnattools-native: ../gcc/ada/rts/libgnat-$(LIB_VERSION).so
+@@ -193,19 +132,16 @@
+ vpath %.c @srcdir@/../gcc/ada:@srcdir@/../gcc
+ vpath %.h @srcdir@/../gcc/ada
+
+-# Because the just-built gcc is a host tool like us, we can use some
+-# of its object files, e.g. prefix.o.
+-vpath prefix.o ../gcc
+-
+ # gnatlink
+
+-gnatlink-static: $(GNATLINK_OBJS) b_gnatl.o link.o
++gnatlink-static: $(GNATLINK_OBJS) b_gnatl.o
+ $(GCC) -o $@ $^ \
++ ../libgnatprj/libgnatprj.a \
+ ../libgnatvsn/libgnatvsn.a \
+ ../gcc/ada/rts/libgnat.a \
+ ../libiberty/libiberty.a
+
+-gnatlink: $(GNATLINK_OBJS) b_gnatl.o link.o
++gnatlink: $(GNATLINK_OBJS) b_gnatl.o
+ $(GCC) -o $@ $^ $(ADA_LIBS) ../libiberty/libiberty.a
+
+ b_gnatl.o: b_gnatl.c adaint.h
+@@ -216,13 +152,14 @@
+
+ # gnatmake
+
+-gnatmake-static: $(GNATMAKE_OBJS) b_gnatm.o link.o
++gnatmake-static: $(GNATMAKE_OBJS) b_gnatm.o
+ $(GCC) -o $@ $(ADA_CFLAGS) $^ \
++ ../libgnatprj/libgnatprj.a \
+ ../libgnatvsn/libgnatvsn.a \
+ ../gcc/ada/rts/libgnat.a \
+ ../libiberty/libiberty.a
+
+-gnatmake: $(GNATMAKE_OBJS) b_gnatm.o link.o
++gnatmake: $(GNATMAKE_OBJS) b_gnatm.o
+ $(GCC) -o $@ $(ADA_CFLAGS) $^ $(ADA_LIBS) ../libiberty/libiberty.a
+
+ b_gnatm.o: b_gnatm.c adaint.h
+@@ -232,19 +169,11 @@
+ ../gcc/gnatbind -C -o $@ $(ADA_INCLUDES) gnatmake.ali
+
+ # Other tools
+-gnatkr:
+- if [ ! -f $@.adb ] ; then $(LN_S) ../../src/gcc/ada/$@.ad[bs] .; fi
+- ./gnatmake-static -c -b $@ $(ADA_CFLAGS) $(ADA_INCLUDES) \
+- --GCC="$(GCC)" \
+- --GNATBIND=../gcc/gnatbind
+- ./gnatlink-static -o $@ $@.ali $^ $(ADA_INCLUDES) $(ADA_LIBS) \
+- --GCC="$(GCC) $(ADA_INCLUDES)"
+-
+ gnat: gnatcmd
+ cp -lp $< $@
+
+-gnatbind gnatchop gnatclean gnatcmd gnatfind gnatls gnatname gnatprep gnatxref: \
+-link.o prefix.o
++gnatbind gnatchop gnatclean gnatcmd gnatfind gnatkr gnatls gnatname gnatprep \
++gnatxref:
+ if [ ! -f $@.adb ] ; then $(LN_S) ../../src/gcc/ada/$@.ad[bs] .; fi
+ ./gnatmake-static -c -b $@ $(ADA_CFLAGS) $(ADA_INCLUDES) \
+ --GCC="$(GCC)" \
+@@ -253,22 +182,12 @@
+ ../libiberty/libiberty.a \
+ --GCC="$(GCC) $(ADA_INCLUDES)"
+
+-# Force compiling sdefault.adb, not .ads, to produce sdefault.o
+-sdefault.o: sdefault.adb
+-
+-sdefault.adb: stamp-gnattools-sources
+-
+ %.o: %.adb
+ $(GCC) -c -o $@ $< $(ADA_CFLAGS) $(ADA_INCLUDES)
+
+ %.o: %.ads
+ $(GCC) -c -o $@ $< $(ADA_CFLAGS) $(ADA_INCLUDES)
+
+-%.o: %.c
+- $(GCC) -c -o $@ $< $(CFLAGS) $(INCLUDES)
+-
+-prefix.o:
+-
+ # Other
+ # -----
+
+Index: b/src/libgnatprj/Makefile.in
+===================================================================
+--- /dev/null
++++ b/src/libgnatprj/Makefile.in
+@@ -0,0 +1,178 @@
++# Makefile for libgnatprj.
++# Copyright (c) 2006 Ludovic Brenta <ludovic@ludovic-brenta.org>
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++
++# Default target; must be first.
++all: libgnatprj
++
++.SUFFIXES:
++
++CPUS := $(shell getconf _NPROCESSORS_ONLN)
++LIB_VERSION := $(strip $(shell grep ' Library_Version :' \
++ @srcdir@/../gcc/ada/gnatvsn.ads | \
++ sed -e 's/.*"\(.*\)".*/\1/'))
++GCC:=../gcc/xgcc -B../gcc/
++LIBGNAT_JUST_BUILT := -nostdinc -I../gcc/ada/rts
++LIBGNATVSN := -I../libgnatvsn
++CFLAGS := -g -O2
++ADAFLAGS := -g -O2 -gnatn
++BASEVER := $(shell cat @srcdir@/../gcc/BASE-VER)
++DEVPHASE := $(shell cat @srcdir@/../gcc/DEV-PHASE)
++DATESTAMP := $(shell cat @srcdir@/../gcc/DATESTAMP)
++TOOLS_TARGET_PAIRS := @TOOLS_TARGET_PAIRS@
++LN_S := @LN_S@
++
++ifneq (@build@,@host@)
++ CFLAGS += -b @host@
++endif
++
++.PHONY: libgnatprj install
++libgnatprj: libgnatprj.so.$(LIB_VERSION) libgnatprj.a
++
++# Here we list one file per Ada unit: the body file if the unit has a
++# body, the spec file otherwise.
++PRJ_SOURCES := ali.adb ali-util.adb butil.adb binderr.adb errout.adb \
++erroutc.adb errutil.adb err_vars.ads fname-uf.adb fmap.adb impunit.adb \
++lib-util.adb makeutl.adb mlib.adb mlib-fil.adb mlib-tgt.adb \
++mlib-tgt-specific.adb mlib-utl.adb osint.adb osint-c.adb prj.adb prj-attr.adb \
++prj-attr-pm.adb prj-com.ads prj-conf.adb prj-dect.adb prj-env.adb prj-err.adb \
++prj-ext.adb prj-nmsc.adb prj-pars.adb prj-part.adb prj-pp.adb prj-proc.adb \
++prj-strt.adb prj-tree.adb prj-util.adb rident.ads scng.adb sfn_scan.adb \
++sinfo-cn.adb sinput-c.adb sinput-p.adb style.adb styleg.adb stylesw.adb \
++switch.adb switch-m.adb targparm.adb tempdir.adb
++
++# Source files generated in build/gcc/ada, not src/gcc/ada.
++GENERATED_SOURCES := sdefault.adb
++
++SOURCES := $(PRJ_SOURCES) $(GENERATED_SOURCES)
++
++OBJECTS := $(patsubst %.ads,%.o,$(SOURCES:.adb=.o))
++
++# Add some object files compiled from C sources. prefix.o requires
++# some objects from libiberty.
++OBJECTS += concat.o link.o prefix.o xexit.o xmalloc.o xstrdup.o
++
++vpath %.c @srcdir@/../gcc/ada
++
++libgnatprj.so.$(LIB_VERSION): $(addprefix obj-shared/,$(OBJECTS))
++ : # Make libgnatprj.so
++ $(GCC) -o $@ -shared -fPIC -Wl,--soname,$@ $^ \
++ -L../gcc/ada/rts -lgnat-$(LIB_VERSION) \
++ -L../libgnatvsn -lgnatvsn
++ $(LN_S) -f libgnatprj.so.$(LIB_VERSION) libgnatprj.so
++ chmod a=r obj-shared/*.ali
++# Make the .ali files, but not the .o files, visible to the gnat tools.
++ cp -lp obj-shared/*.ali .
++
++$(addprefix obj-shared/,$(OBJECTS)): | stamp-libgnatprj-sources obj-shared
++
++obj-shared/%.o: %.adb
++ $(GCC) -c -fPIC $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) $(LIBGNATVSN) $< -o $@
++
++obj-shared/%.o: %.ads
++ $(GCC) -c -fPIC $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) $(LIBGNATVSN) $< -o $@
++
++obj-shared/%.o: %.c
++ $(GCC) -c -fPIC $(CFLAGS) -I@srcdir@/../gcc $< -o $@
++
++obj-shared/prefix.o: @srcdir@/../gcc/prefix.c
++ $(GCC) -c -fPIC $(CFLAGS) -DPREFIX=\"@prefix@\" -DBASEVER=\"$(BASEVER)\" \
++ -I@srcdir@/../gcc -I@srcdir@/../include -I../gcc -I../libiberty \
++ $< -o $@
++
++obj-shared/%.o: @srcdir@/../libiberty/%.c
++ $(GCC) -c -fPIC $(CFLAGS) \
++ -I@srcdir@/../libiberty -I@srcdir@/../include $< -o $@
++
++obj-shared:
++ -mkdir $@
++
++libgnatprj.a: $(addprefix obj-static/,$(OBJECTS))
++ : # Make libgnatprj.a
++ ar rc $@ $^
++ ranlib $@
++
++$(addprefix obj-static/,$(OBJECTS)): | stamp-libgnatprj-sources obj-static
++
++obj-static/%.o: %.adb
++ $(GCC) -c $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) $(LIBGNATVSN) $< -o $@
++
++obj-static/%.o: %.ads
++ $(GCC) -c $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) $(LIBGNATVSN) $< -o $@
++
++obj-static/%.o: %.c
++ $(GCC) -c $(CFLAGS) -I@srcdir@/../gcc $< -o $@
++
++obj-static/prefix.o: @srcdir@/../gcc/prefix.c
++ $(GCC) -c $(CFLAGS) -DPREFIX=\"@prefix@\" -DBASEVER=\"$(BASEVER)\" \
++ -I@srcdir@/../gcc -I@srcdir@/../include -I../gcc -I../libiberty \
++ $< -o $@
++
++obj-static/%.o: @srcdir@/../libiberty/%.c
++ $(GCC) -c -fPIC $(CFLAGS) \
++ -I@srcdir@/../libiberty -I@srcdir@/../include $< -o $@
++
++obj-static:
++ -mkdir $@
++
++$(SOURCES): stamp-libgnatprj-sources
++
++stamp-libgnatprj-sources:
++ for file in $(PRJ_SOURCES); do \
++ ads=$$(echo $$file | sed 's/\.adb/.ads/'); \
++ if [ -f @srcdir@/../gcc/ada/$$file -a ! -L $$file ] ; then $(LN_S) @srcdir@/../gcc/ada/$$file .; fi; \
++ if [ -f @srcdir@/../gcc/ada/$$ads -a ! -L $$ads ] ; then $(LN_S) @srcdir@/../gcc/ada/$$ads .; fi; \
++ done
++ for file in $(GENERATED_SOURCES); do \
++ ads=$$(echo $$file | sed 's/\.adb/.ads/'); \
++ if [ -f ../gcc/ada/$$file -a ! -L $$file ] ; then $(LN_S) ../gcc/ada/$$file .; fi; \
++ if [ -f ../gcc/ada/$$ads -a ! -L $$ads ] ; then $(LN_S) ../gcc/ada/$$ads .; \
++ else \
++ if [ -f @srcdir@/../gcc/ada/$$ads -a ! -L $$ads ] ; then $(LN_S) @srcdir@/../gcc/ada/$$ads .; fi; \
++ fi; \
++ done
++ $(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
++ rm -f $(word 1,$(subst <, ,$(PAIR)));\
++ $(LN_S) @srcdir@/../gcc/ada/$(word 2,$(subst <, ,$(PAIR))) \
++ $(word 1,$(subst <, ,$(PAIR)));)
++ touch $@
++
++# Generate a list of source files (.ads and .adb) to install. Almost
++# all of them are in src/gcc/ada, but some are generated during build
++# and are in build/gcc/ada.
++BODIES := $(filter %.adb,$(PRJ_SOURCES))
++SPECS := $(filter %.ads,$(PRJ_SOURCES)) $(patsubst %.adb,%.ads,$(BODIES) $(GENERATED_SOURCES))
++SOURCES_TO_INSTALL := \
++$(addprefix @srcdir@/../gcc/ada/,$(SPECS) $(BODIES)) \
++$(addprefix ../gcc/ada/,$(GENERATED_SOURCES))
++
++libdir = @libdir@
++
++install: libgnatprj
++ $(INSTALL_DATA) libgnatprj.a $(DESTDIR)$(libdir)
++ $(INSTALL_DATA) libgnatprj.so.$(LIB_VERSION) $(DESTDIR)$(libdir)
++ cd $(DESTDIR)$(libdir); ln -sf libgnatprj.so.$(LIB_VERSION) libgnatprj.so
++ mkdir -p $(DESTDIR)$(prefix)/share/ada/adainclude/gnatprj
++ $(INSTALL_DATA) $(SOURCES_TO_INSTALL) \
++ $(DESTDIR)$(prefix)/share/ada/adainclude/gnatprj
++ mkdir -p $(DESTDIR)$(prefix)/lib/ada/adalib/gnatprj
++ $(INSTALL) -m 0444 obj-shared/*.ali \
++ $(DESTDIR)$(prefix)/lib/ada/adalib/gnatprj
++ chmod a=r $(DESTDIR)$(prefix)/lib/ada/adalib/gnatprj/*.ali
++
++.PHONY: clean
++clean:
++ rm -rf *.ali obj-static obj-shared libgnatprj* *.adb *.ads stamp*
+Index: b/src/Makefile.def
+===================================================================
+--- a/src/Makefile.def
++++ b/src/Makefile.def
+@@ -158,6 +158,13 @@
+ missing= TAGS;
+ missing= install-info;
+ missing= installcheck; };
++host_modules= { module= libgnatprj; no_check=true;
++ missing= info;
++ missing= dvi;
++ missing= html;
++ missing= TAGS;
++ missing= install-info;
++ missing= installcheck; };
+ host_modules= { module= gnattools; no_check=true;
+ missing= info;
+ missing= dvi;
+@@ -210,6 +217,13 @@
+ missing= TAGS;
+ missing= install-info;
+ missing= installcheck; };
++target_modules = { module= libgnatprj; no_check=true;
++ missing= info;
++ missing= dvi;
++ missing= html;
++ missing= TAGS;
++ missing= install-info;
++ missing= installcheck; };
+ target_modules = { module= libgomp; bootstrap= true; lib_path=.libs; };
+
+ // These are (some of) the make targets to be done in each subdirectory.
+@@ -397,7 +411,10 @@
+
+ dependencies = { module=all-gnattools; on=all-libada; };
+ dependencies = { module=all-gnattools; on=all-libgnatvsn; };
++dependencies = { module=all-gnattools; on=all-libgnatprj; };
+ dependencies = { module=all-libgnatvsn; on=all-libada; };
++dependencies = { module=all-libgnatprj; on=all-libada; };
++dependencies = { module=all-libgnatprj; on=all-libgnatvsn; };
+
+ dependencies = { module=all-lto-plugin; on=all-libiberty; };
+
+Index: b/src/Makefile.in
+===================================================================
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -952,6 +952,7 @@
+ maybe-configure-utils \
+ maybe-configure-libada \
+ maybe-configure-libgnatvsn \
++ maybe-configure-libgnatprj \
+ maybe-configure-gnattools \
+ maybe-configure-lto-plugin
+ .PHONY: configure-target
+@@ -979,6 +980,7 @@
+ maybe-configure-target-rda \
+ maybe-configure-target-libada \
+ maybe-configure-target-libgnatvsn \
++ maybe-configure-target-libgnatprj \
+ maybe-configure-target-libgomp
+
+ # The target built for a native non-bootstrap build.
+@@ -1132,6 +1134,7 @@
+ all-host: maybe-all-utils
+ all-host: maybe-all-libada
+ all-host: maybe-all-libgnatvsn
++all-host: maybe-all-libgnatprj
+ all-host: maybe-all-gnattools
+ @if lto-plugin-no-bootstrap
+ all-host: maybe-all-lto-plugin
+@@ -1166,6 +1169,7 @@
+ all-target: maybe-all-target-rda
+ all-target: maybe-all-target-libada
+ all-target: maybe-all-target-libgnatvsn
++all-target: maybe-all-target-libgnatprj
+ @if target-libgomp-no-bootstrap
+ all-target: maybe-all-target-libgomp
+ @endif target-libgomp-no-bootstrap
+@@ -1264,6 +1268,7 @@
+ info-host: maybe-info-utils
+ info-host: maybe-info-libada
+ info-host: maybe-info-libgnatvsn
++info-host: maybe-info-libgnatprj
+ info-host: maybe-info-gnattools
+ info-host: maybe-info-lto-plugin
+
+@@ -1292,6 +1297,7 @@
+ info-target: maybe-info-target-rda
+ info-target: maybe-info-target-libada
+ info-target: maybe-info-target-libgnatvsn
++info-target: maybe-info-target-libgnatprj
+ info-target: maybe-info-target-libgomp
+
+ .PHONY: do-dvi
+@@ -1383,6 +1389,7 @@
+ dvi-host: maybe-dvi-utils
+ dvi-host: maybe-dvi-libada
+ dvi-host: maybe-dvi-libgnatvsn
++dvi-host: maybe-dvi-libgnatprj
+ dvi-host: maybe-dvi-gnattools
+ dvi-host: maybe-dvi-lto-plugin
+
+@@ -1411,6 +1418,7 @@
+ dvi-target: maybe-dvi-target-rda
+ dvi-target: maybe-dvi-target-libada
+ dvi-target: maybe-dvi-target-libgnatvsn
++dvi-target: maybe-dvi-target-libgnatprj
+ dvi-target: maybe-dvi-target-libgomp
+
+ .PHONY: do-pdf
+@@ -1502,6 +1510,7 @@
+ pdf-host: maybe-pdf-utils
+ pdf-host: maybe-pdf-libada
+ pdf-host: maybe-pdf-libgnatvsn
++pdf-host: maybe-pdf-libgnatprj
+ pdf-host: maybe-pdf-gnattools
+ pdf-host: maybe-pdf-lto-plugin
+
+@@ -1530,6 +1539,7 @@
+ pdf-target: maybe-pdf-target-rda
+ pdf-target: maybe-pdf-target-libada
+ pdf-target: maybe-pdf-target-libgnatvsn
++pdf-target: maybe-pdf-target-libgnatprj
+ pdf-target: maybe-pdf-target-libgomp
+
+ .PHONY: do-html
+@@ -1621,6 +1631,7 @@
+ html-host: maybe-html-utils
+ html-host: maybe-html-libada
+ html-host: maybe-html-libgnatvsn
++html-host: maybe-html-libgnatprj
+ html-host: maybe-html-gnattools
+ html-host: maybe-html-lto-plugin
+
+@@ -1649,6 +1660,7 @@
+ html-target: maybe-html-target-rda
+ html-target: maybe-html-target-libada
+ html-target: maybe-html-target-libgnatvsn
++html-target: maybe-html-target-libgnatprj
+ html-target: maybe-html-target-libgomp
+
+ .PHONY: do-TAGS
+@@ -1740,6 +1752,7 @@
+ TAGS-host: maybe-TAGS-utils
+ TAGS-host: maybe-TAGS-libada
+ TAGS-host: maybe-TAGS-libgnatvsn
++TAGS-host: maybe-TAGS-libgnatprj
+ TAGS-host: maybe-TAGS-gnattools
+ TAGS-host: maybe-TAGS-lto-plugin
+
+@@ -1768,6 +1781,7 @@
+ TAGS-target: maybe-TAGS-target-rda
+ TAGS-target: maybe-TAGS-target-libada
+ TAGS-target: maybe-TAGS-target-libgnatvsn
++TAGS-target: maybe-TAGS-target-libgnatprj
+ TAGS-target: maybe-TAGS-target-libgomp
+
+ .PHONY: do-install-info
+@@ -1859,6 +1873,7 @@
+ install-info-host: maybe-install-info-utils
+ install-info-host: maybe-install-info-libada
+ install-info-host: maybe-install-info-libgnatvsn
++install-info-host: maybe-install-info-libgnatprj
+ install-info-host: maybe-install-info-gnattools
+ install-info-host: maybe-install-info-lto-plugin
+
+@@ -1887,6 +1902,7 @@
+ install-info-target: maybe-install-info-target-rda
+ install-info-target: maybe-install-info-target-libada
+ install-info-target: maybe-install-info-target-libgnatvsn
++install-info-target: maybe-install-info-target-libgnatprj
+ install-info-target: maybe-install-info-target-libgomp
+
+ .PHONY: do-install-pdf
+@@ -1978,6 +1994,7 @@
+ install-pdf-host: maybe-install-pdf-utils
+ install-pdf-host: maybe-install-pdf-libada
+ install-pdf-host: maybe-install-pdf-libgnatvsn
++install-pdf-host: maybe-install-pdf-libgnatprj
+ install-pdf-host: maybe-install-pdf-gnattools
+ install-pdf-host: maybe-install-pdf-lto-plugin
+
+@@ -2006,6 +2023,7 @@
+ install-pdf-target: maybe-install-pdf-target-rda
+ install-pdf-target: maybe-install-pdf-target-libada
+ install-pdf-target: maybe-install-pdf-target-libgnatvsn
++install-pdf-target: maybe-install-pdf-target-libgnatprj
+ install-pdf-target: maybe-install-pdf-target-libgomp
+
+ .PHONY: do-install-html
+@@ -2097,6 +2115,7 @@
+ install-html-host: maybe-install-html-utils
+ install-html-host: maybe-install-html-libada
+ install-html-host: maybe-install-html-libgnatvsn
++install-html-host: maybe-install-html-libgnatprj
+ install-html-host: maybe-install-html-gnattools
+ install-html-host: maybe-install-html-lto-plugin
+
+@@ -2125,6 +2144,7 @@
+ install-html-target: maybe-install-html-target-rda
+ install-html-target: maybe-install-html-target-libada
+ install-html-target: maybe-install-html-target-libgnatvsn
++install-html-target: maybe-install-html-target-libgnatprj
+ install-html-target: maybe-install-html-target-libgomp
+
+ .PHONY: do-installcheck
+@@ -2216,6 +2236,7 @@
+ installcheck-host: maybe-installcheck-utils
+ installcheck-host: maybe-installcheck-libada
+ installcheck-host: maybe-installcheck-libgnatvsn
++installcheck-host: maybe-installcheck-libgnatprj
+ installcheck-host: maybe-installcheck-gnattools
+ installcheck-host: maybe-installcheck-lto-plugin
+
+@@ -2244,6 +2265,7 @@
+ installcheck-target: maybe-installcheck-target-rda
+ installcheck-target: maybe-installcheck-target-libada
+ installcheck-target: maybe-installcheck-target-libgnatvsn
++installcheck-target: maybe-installcheck-target-libgnatprj
+ installcheck-target: maybe-installcheck-target-libgomp
+
+ .PHONY: do-mostlyclean
+@@ -2335,6 +2357,7 @@
+ mostlyclean-host: maybe-mostlyclean-utils
+ mostlyclean-host: maybe-mostlyclean-libada
+ mostlyclean-host: maybe-mostlyclean-libgnatvsn
++mostlyclean-host: maybe-mostlyclean-libgnatprj
+ mostlyclean-host: maybe-mostlyclean-gnattools
+ mostlyclean-host: maybe-mostlyclean-lto-plugin
+
+@@ -2363,6 +2386,7 @@
+ mostlyclean-target: maybe-mostlyclean-target-rda
+ mostlyclean-target: maybe-mostlyclean-target-libada
+ mostlyclean-target: maybe-mostlyclean-target-libgnatvsn
++mostlyclean-target: maybe-mostlyclean-target-libgnatprj
+ mostlyclean-target: maybe-mostlyclean-target-libgomp
+
+ .PHONY: do-clean
+@@ -2454,6 +2478,7 @@
+ clean-host: maybe-clean-utils
+ clean-host: maybe-clean-libada
+ clean-host: maybe-clean-libgnatvsn
++clean-host: maybe-clean-libgnatprj
+ clean-host: maybe-clean-gnattools
+ clean-host: maybe-clean-lto-plugin
+
+@@ -2482,6 +2507,7 @@
+ clean-target: maybe-clean-target-rda
+ clean-target: maybe-clean-target-libada
+ clean-target: maybe-clean-target-libgnatvsn
++clean-target: maybe-clean-target-libgnatprj
+ clean-target: maybe-clean-target-libgomp
+
+ .PHONY: do-distclean
+@@ -2573,6 +2599,7 @@
+ distclean-host: maybe-distclean-utils
+ distclean-host: maybe-distclean-libada
+ distclean-host: maybe-distclean-libgnatvsn
++distclean-host: maybe-distclean-libgnatprj
+ distclean-host: maybe-distclean-gnattools
+ distclean-host: maybe-distclean-lto-plugin
+
+@@ -2601,6 +2628,7 @@
+ distclean-target: maybe-distclean-target-rda
+ distclean-target: maybe-distclean-target-libada
+ distclean-target: maybe-distclean-target-libgnatvsn
++distclean-target: maybe-distclean-target-libgnatprj
+ distclean-target: maybe-distclean-target-libgomp
+
+ .PHONY: do-maintainer-clean
+@@ -2692,6 +2720,7 @@
+ maintainer-clean-host: maybe-maintainer-clean-utils
+ maintainer-clean-host: maybe-maintainer-clean-libada
+ maintainer-clean-host: maybe-maintainer-clean-libgnatvsn
++maintainer-clean-host: maybe-maintainer-clean-libgnatprj
+ maintainer-clean-host: maybe-maintainer-clean-gnattools
+ maintainer-clean-host: maybe-maintainer-clean-lto-plugin
+
+@@ -2720,6 +2749,7 @@
+ maintainer-clean-target: maybe-maintainer-clean-target-rda
+ maintainer-clean-target: maybe-maintainer-clean-target-libada
+ maintainer-clean-target: maybe-maintainer-clean-target-libgnatvsn
++maintainer-clean-target: maybe-maintainer-clean-target-libgnatprj
+ maintainer-clean-target: maybe-maintainer-clean-target-libgomp
+
+
+@@ -2866,6 +2896,7 @@
+ maybe-check-utils \
+ maybe-check-libada \
+ maybe-check-libgnatvsn \
++ maybe-check-libgnatprj \
+ maybe-check-gnattools \
+ maybe-check-lto-plugin
+
+@@ -2894,6 +2925,7 @@
+ maybe-check-target-rda \
+ maybe-check-target-libada \
+ maybe-check-target-libgnatvsn \
++ maybe-check-target-libgnatprj \
+ maybe-check-target-libgomp
+
+ do-check:
+@@ -3011,6 +3043,7 @@
+ maybe-install-utils \
+ maybe-install-libada \
+ maybe-install-libgnatvsn \
++ maybe-install-libgnatprj \
+ maybe-install-gnattools \
+ maybe-install-lto-plugin
+
+@@ -3094,6 +3127,7 @@
+ maybe-install-utils \
+ maybe-install-libada \
+ maybe-install-libgnatvsn \
++ maybe-install-libgnatprj \
+ maybe-install-gnattools \
+ maybe-install-lto-plugin
+
+@@ -3122,6 +3156,7 @@
+ maybe-install-target-rda \
+ maybe-install-target-libada \
+ maybe-install-target-libgnatvsn \
++ maybe-install-target-libgnatprj \
+ maybe-install-target-libgomp
+
+ uninstall:
+@@ -3232,6 +3267,7 @@
+ maybe-install-strip-utils \
+ maybe-install-strip-libada \
+ maybe-install-strip-libgnatvsn \
++ maybe-install-strip-libgnatprj \
+ maybe-install-strip-gnattools \
+ maybe-install-strip-lto-plugin
+
+@@ -3260,6 +3296,7 @@
+ maybe-install-strip-target-rda \
+ maybe-install-strip-target-libada \
+ maybe-install-strip-target-libgnatvsn \
++ maybe-install-strip-target-libgnatprj \
+ maybe-install-strip-target-libgomp
+
+
+@@ -45502,6 +45539,343 @@
+
+
+
++.PHONY: configure-libgnatprj maybe-configure-libgnatprj
++maybe-configure-libgnatprj:
++@if gcc-bootstrap
++configure-libgnatprj: stage_current
++@endif gcc-bootstrap
++@if libgnatprj
++maybe-configure-libgnatprj: configure-libgnatprj
++configure-libgnatprj:
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ test ! -f $(HOST_SUBDIR)/libgnatprj/Makefile || exit 0; \
++ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libgnatprj ; \
++ $(HOST_EXPORTS) \
++ echo Configuring in $(HOST_SUBDIR)/libgnatprj; \
++ cd "$(HOST_SUBDIR)/libgnatprj" || exit 1; \
++ case $(srcdir) in \
++ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
++ *) topdir=`echo $(HOST_SUBDIR)/libgnatprj/ | \
++ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
++ esac; \
++ srcdiroption="--srcdir=$${topdir}/libgnatprj"; \
++ libsrcdir="$$s/libgnatprj"; \
++ $(SHELL) $${libsrcdir}/configure \
++ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
++ --target=${target_alias} $${srcdiroption} \
++ || exit 1
++@endif libgnatprj
++
++
++
++
++
++.PHONY: all-libgnatprj maybe-all-libgnatprj
++maybe-all-libgnatprj:
++@if gcc-bootstrap
++all-libgnatprj: stage_current
++@endif gcc-bootstrap
++@if libgnatprj
++TARGET-libgnatprj=all
++maybe-all-libgnatprj: all-libgnatprj
++all-libgnatprj: configure-libgnatprj
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ (cd $(HOST_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \
++ $(TARGET-libgnatprj))
++@endif libgnatprj
++
++
++
++
++.PHONY: check-libgnatprj maybe-check-libgnatprj
++maybe-check-libgnatprj:
++@if libgnatprj
++maybe-check-libgnatprj: check-libgnatprj
++
++check-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: install-libgnatprj maybe-install-libgnatprj
++maybe-install-libgnatprj:
++@if libgnatprj
++maybe-install-libgnatprj: install-libgnatprj
++
++install-libgnatprj: installdirs
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ (cd $(HOST_SUBDIR)/libgnatprj && \
++ $(MAKE) $(FLAGS_TO_PASS) install)
++
++@endif libgnatprj
++
++.PHONY: install-strip-libgnatprj maybe-install-strip-libgnatprj
++maybe-install-strip-libgnatprj:
++@if libgnatprj
++maybe-install-strip-libgnatprj: install-strip-libgnatprj
++
++install-strip-libgnatprj: installdirs
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ (cd $(HOST_SUBDIR)/libgnatprj && \
++ $(MAKE) $(FLAGS_TO_PASS) install-strip)
++
++@endif libgnatprj
++
++# Other targets (info, dvi, pdf, etc.)
++
++.PHONY: maybe-info-libgnatprj info-libgnatprj
++maybe-info-libgnatprj:
++@if libgnatprj
++maybe-info-libgnatprj: info-libgnatprj
++
++# libgnatprj doesn't support info.
++info-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-dvi-libgnatprj dvi-libgnatprj
++maybe-dvi-libgnatprj:
++@if libgnatprj
++maybe-dvi-libgnatprj: dvi-libgnatprj
++
++# libgnatprj doesn't support dvi.
++dvi-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-pdf-libgnatprj pdf-libgnatprj
++maybe-pdf-libgnatprj:
++@if libgnatprj
++maybe-pdf-libgnatprj: pdf-libgnatprj
++
++pdf-libgnatprj: \
++ configure-libgnatprj
++ @: $(MAKE); $(unstage)
++ @[ -f ./libgnatprj/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing pdf in libgnatprj" ; \
++ (cd $(HOST_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ pdf) \
++ || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-html-libgnatprj html-libgnatprj
++maybe-html-libgnatprj:
++@if libgnatprj
++maybe-html-libgnatprj: html-libgnatprj
++
++# libgnatprj doesn't support html.
++html-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-TAGS-libgnatprj TAGS-libgnatprj
++maybe-TAGS-libgnatprj:
++@if libgnatprj
++maybe-TAGS-libgnatprj: TAGS-libgnatprj
++
++# libgnatprj doesn't support TAGS.
++TAGS-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-install-info-libgnatprj install-info-libgnatprj
++maybe-install-info-libgnatprj:
++@if libgnatprj
++maybe-install-info-libgnatprj: install-info-libgnatprj
++
++# libgnatprj doesn't support install-info.
++install-info-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-install-pdf-libgnatprj install-pdf-libgnatprj
++maybe-install-pdf-libgnatprj:
++@if libgnatprj
++maybe-install-pdf-libgnatprj: install-pdf-libgnatprj
++
++install-pdf-libgnatprj: \
++ configure-libgnatprj \
++ pdf-libgnatprj
++ @: $(MAKE); $(unstage)
++ @[ -f ./libgnatprj/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing install-pdf in libgnatprj" ; \
++ (cd $(HOST_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ install-pdf) \
++ || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-install-html-libgnatprj install-html-libgnatprj
++maybe-install-html-libgnatprj:
++@if libgnatprj
++maybe-install-html-libgnatprj: install-html-libgnatprj
++
++install-html-libgnatprj: \
++ configure-libgnatprj \
++ html-libgnatprj
++ @: $(MAKE); $(unstage)
++ @[ -f ./libgnatprj/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing install-html in libgnatprj" ; \
++ (cd $(HOST_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ install-html) \
++ || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-installcheck-libgnatprj installcheck-libgnatprj
++maybe-installcheck-libgnatprj:
++@if libgnatprj
++maybe-installcheck-libgnatprj: installcheck-libgnatprj
++
++# libgnatprj doesn't support installcheck.
++installcheck-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-mostlyclean-libgnatprj mostlyclean-libgnatprj
++maybe-mostlyclean-libgnatprj:
++@if libgnatprj
++maybe-mostlyclean-libgnatprj: mostlyclean-libgnatprj
++
++mostlyclean-libgnatprj:
++ @: $(MAKE); $(unstage)
++ @[ -f ./libgnatprj/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing mostlyclean in libgnatprj" ; \
++ (cd $(HOST_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ mostlyclean) \
++ || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-clean-libgnatprj clean-libgnatprj
++maybe-clean-libgnatprj:
++@if libgnatprj
++maybe-clean-libgnatprj: clean-libgnatprj
++
++clean-libgnatprj:
++ @: $(MAKE); $(unstage)
++ @[ -f ./libgnatprj/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing clean in libgnatprj" ; \
++ (cd $(HOST_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ clean) \
++ || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-distclean-libgnatprj distclean-libgnatprj
++maybe-distclean-libgnatprj:
++@if libgnatprj
++maybe-distclean-libgnatprj: distclean-libgnatprj
++
++distclean-libgnatprj:
++ @: $(MAKE); $(unstage)
++ @[ -f ./libgnatprj/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing distclean in libgnatprj" ; \
++ (cd $(HOST_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ distclean) \
++ || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-maintainer-clean-libgnatprj maintainer-clean-libgnatprj
++maybe-maintainer-clean-libgnatprj:
++@if libgnatprj
++maybe-maintainer-clean-libgnatprj: maintainer-clean-libgnatprj
++
++maintainer-clean-libgnatprj:
++ @: $(MAKE); $(unstage)
++ @[ -f ./libgnatprj/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing maintainer-clean in libgnatprj" ; \
++ (cd $(HOST_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ maintainer-clean) \
++ || exit 1
++
++@endif libgnatprj
++
++
++
+ .PHONY: configure-gnattools maybe-configure-gnattools
+ maybe-configure-gnattools:
+ @if gcc-bootstrap
+@@ -57992,6 +58366,361 @@
+
+
+
++.PHONY: configure-target-libgnatprj maybe-configure-target-libgnatprj
++maybe-configure-target-libgnatprj:
++@if gcc-bootstrap
++configure-target-libgnatprj: stage_current
++@endif gcc-bootstrap
++@if target-libgnatprj
++maybe-configure-target-libgnatprj: configure-target-libgnatprj
++configure-target-libgnatprj:
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ echo "Checking multilib configuration for libgnatprj..."; \
++ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgnatprj ; \
++ $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgnatprj/multilib.tmp 2> /dev/null ; \
++ if test -r $(TARGET_SUBDIR)/libgnatprj/multilib.out; then \
++ if cmp -s $(TARGET_SUBDIR)/libgnatprj/multilib.tmp $(TARGET_SUBDIR)/libgnatprj/multilib.out; then \
++ rm -f $(TARGET_SUBDIR)/libgnatprj/multilib.tmp; \
++ else \
++ rm -f $(TARGET_SUBDIR)/libgnatprj/Makefile; \
++ mv $(TARGET_SUBDIR)/libgnatprj/multilib.tmp $(TARGET_SUBDIR)/libgnatprj/multilib.out; \
++ fi; \
++ else \
++ mv $(TARGET_SUBDIR)/libgnatprj/multilib.tmp $(TARGET_SUBDIR)/libgnatprj/multilib.out; \
++ fi; \
++ test ! -f $(TARGET_SUBDIR)/libgnatprj/Makefile || exit 0; \
++ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgnatprj ; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo Configuring in $(TARGET_SUBDIR)/libgnatprj; \
++ cd "$(TARGET_SUBDIR)/libgnatprj" || exit 1; \
++ case $(srcdir) in \
++ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
++ *) topdir=`echo $(TARGET_SUBDIR)/libgnatprj/ | \
++ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
++ esac; \
++ srcdiroption="--srcdir=$${topdir}/libgnatprj"; \
++ libsrcdir="$$s/libgnatprj"; \
++ rm -f no-such-file || : ; \
++ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
++ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
++ --target=${target_alias} $${srcdiroption} \
++ || exit 1
++@endif target-libgnatprj
++
++
++
++
++
++.PHONY: all-target-libgnatprj maybe-all-target-libgnatprj
++maybe-all-target-libgnatprj:
++@if gcc-bootstrap
++all-target-libgnatprj: stage_current
++@endif gcc-bootstrap
++@if target-libgnatprj
++TARGET-target-libgnatprj=all
++maybe-all-target-libgnatprj: all-target-libgnatprj
++all-target-libgnatprj: configure-target-libgnatprj
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ (cd $(TARGET_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \
++ $(TARGET-target-libgnatprj))
++@endif target-libgnatprj
++
++
++
++
++
++.PHONY: check-target-libgnatprj maybe-check-target-libgnatprj
++maybe-check-target-libgnatprj:
++@if target-libgnatprj
++maybe-check-target-libgnatprj: check-target-libgnatprj
++
++# Dummy target for uncheckable module.
++check-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: install-target-libgnatprj maybe-install-target-libgnatprj
++maybe-install-target-libgnatprj:
++@if target-libgnatprj
++maybe-install-target-libgnatprj: install-target-libgnatprj
++
++install-target-libgnatprj: installdirs
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ (cd $(TARGET_SUBDIR)/libgnatprj && \
++ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
++
++@endif target-libgnatprj
++
++.PHONY: install-strip-target-libgnatprj maybe-install-strip-target-libgnatprj
++maybe-install-strip-target-libgnatprj:
++@if target-libgnatprj
++maybe-install-strip-target-libgnatprj: install-strip-target-libgnatprj
++
++install-strip-target-libgnatprj: installdirs
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ (cd $(TARGET_SUBDIR)/libgnatprj && \
++ $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip)
++
++@endif target-libgnatprj
++
++# Other targets (info, dvi, pdf, etc.)
++
++.PHONY: maybe-info-target-libgnatprj info-target-libgnatprj
++maybe-info-target-libgnatprj:
++@if target-libgnatprj
++maybe-info-target-libgnatprj: info-target-libgnatprj
++
++# libgnatprj doesn't support info.
++info-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-dvi-target-libgnatprj dvi-target-libgnatprj
++maybe-dvi-target-libgnatprj:
++@if target-libgnatprj
++maybe-dvi-target-libgnatprj: dvi-target-libgnatprj
++
++# libgnatprj doesn't support dvi.
++dvi-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-pdf-target-libgnatprj pdf-target-libgnatprj
++maybe-pdf-target-libgnatprj:
++@if target-libgnatprj
++maybe-pdf-target-libgnatprj: pdf-target-libgnatprj
++
++pdf-target-libgnatprj: \
++ configure-target-libgnatprj
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing pdf in $(TARGET_SUBDIR)/libgnatprj" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ pdf) \
++ || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-html-target-libgnatprj html-target-libgnatprj
++maybe-html-target-libgnatprj:
++@if target-libgnatprj
++maybe-html-target-libgnatprj: html-target-libgnatprj
++
++# libgnatprj doesn't support html.
++html-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-TAGS-target-libgnatprj TAGS-target-libgnatprj
++maybe-TAGS-target-libgnatprj:
++@if target-libgnatprj
++maybe-TAGS-target-libgnatprj: TAGS-target-libgnatprj
++
++# libgnatprj doesn't support TAGS.
++TAGS-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-install-info-target-libgnatprj install-info-target-libgnatprj
++maybe-install-info-target-libgnatprj:
++@if target-libgnatprj
++maybe-install-info-target-libgnatprj: install-info-target-libgnatprj
++
++# libgnatprj doesn't support install-info.
++install-info-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-install-pdf-target-libgnatprj install-pdf-target-libgnatprj
++maybe-install-pdf-target-libgnatprj:
++@if target-libgnatprj
++maybe-install-pdf-target-libgnatprj: install-pdf-target-libgnatprj
++
++install-pdf-target-libgnatprj: \
++ configure-target-libgnatprj \
++ pdf-target-libgnatprj
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing install-pdf in $(TARGET_SUBDIR)/libgnatprj" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ install-pdf) \
++ || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-install-html-target-libgnatprj install-html-target-libgnatprj
++maybe-install-html-target-libgnatprj:
++@if target-libgnatprj
++maybe-install-html-target-libgnatprj: install-html-target-libgnatprj
++
++install-html-target-libgnatprj: \
++ configure-target-libgnatprj \
++ html-target-libgnatprj
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing install-html in $(TARGET_SUBDIR)/libgnatprj" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ install-html) \
++ || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-installcheck-target-libgnatprj installcheck-target-libgnatprj
++maybe-installcheck-target-libgnatprj:
++@if target-libgnatprj
++maybe-installcheck-target-libgnatprj: installcheck-target-libgnatprj
++
++# libgnatprj doesn't support installcheck.
++installcheck-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-mostlyclean-target-libgnatprj mostlyclean-target-libgnatprj
++maybe-mostlyclean-target-libgnatprj:
++@if target-libgnatprj
++maybe-mostlyclean-target-libgnatprj: mostlyclean-target-libgnatprj
++
++mostlyclean-target-libgnatprj:
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing mostlyclean in $(TARGET_SUBDIR)/libgnatprj" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ mostlyclean) \
++ || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-clean-target-libgnatprj clean-target-libgnatprj
++maybe-clean-target-libgnatprj:
++@if target-libgnatprj
++maybe-clean-target-libgnatprj: clean-target-libgnatprj
++
++clean-target-libgnatprj:
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing clean in $(TARGET_SUBDIR)/libgnatprj" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ clean) \
++ || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-distclean-target-libgnatprj distclean-target-libgnatprj
++maybe-distclean-target-libgnatprj:
++@if target-libgnatprj
++maybe-distclean-target-libgnatprj: distclean-target-libgnatprj
++
++distclean-target-libgnatprj:
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing distclean in $(TARGET_SUBDIR)/libgnatprj" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ distclean) \
++ || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-maintainer-clean-target-libgnatprj maintainer-clean-target-libgnatprj
++maybe-maintainer-clean-target-libgnatprj:
++@if target-libgnatprj
++maybe-maintainer-clean-target-libgnatprj: maintainer-clean-target-libgnatprj
++
++maintainer-clean-target-libgnatprj:
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libgnatprj" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libgnatprj && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ maintainer-clean) \
++ || exit 1
++
++@endif target-libgnatprj
++
++
++
++
++
+ .PHONY: configure-target-libgomp maybe-configure-target-libgomp
+ maybe-configure-target-libgomp:
+ @if gcc-bootstrap
+@@ -61056,6 +61785,7 @@
+ configure-target-rda: stage_last
+ configure-target-libada: stage_last
+ configure-target-libgnatvsn: stage_last
++configure-target-libgnatprj: stage_last
+ configure-stage1-target-libgomp: maybe-all-stage1-gcc
+ configure-stage2-target-libgomp: maybe-all-stage2-gcc
+ configure-stage3-target-libgomp: maybe-all-stage3-gcc
+@@ -61088,6 +61818,7 @@
+ configure-target-rda: maybe-all-gcc
+ configure-target-libada: maybe-all-gcc
+ configure-target-libgnatvsn: maybe-all-gcc
++configure-target-libgnatprj: maybe-all-gcc
+ configure-target-libgomp: maybe-all-gcc
+ @endif gcc-no-bootstrap
+
+@@ -61389,7 +62120,10 @@
+ all-fixincludes: maybe-all-libiberty
+ all-gnattools: maybe-all-libada
+ all-gnattools: maybe-all-libgnatvsn
++all-gnattools: maybe-all-libgnatprj
+ all-libgnatvsn: maybe-all-libada
++all-libgnatprj: maybe-all-libada
++all-libgnatprj: maybe-all-libgnatvsn
+ all-lto-plugin: maybe-all-libiberty
+
+ all-stage1-lto-plugin: maybe-all-stage1-libiberty
+@@ -61935,6 +62669,7 @@
+ configure-target-rda: maybe-all-target-libgcc
+ configure-target-libada: maybe-all-target-libgcc
+ configure-target-libgnatvsn: maybe-all-target-libgcc
++configure-target-libgnatprj: maybe-all-target-libgcc
+ configure-target-libgomp: maybe-all-target-libgcc
+ @endif gcc-no-bootstrap
+
+@@ -61983,6 +62718,8 @@
+
+ configure-target-libgnatvsn: maybe-all-target-newlib maybe-all-target-libgloss
+
++configure-target-libgnatprj: maybe-all-target-newlib maybe-all-target-libgloss
++
+ configure-target-libgomp: maybe-all-target-newlib maybe-all-target-libgloss
+
+
+Index: b/src/configure.ac
+===================================================================
+--- a/src/configure.ac
++++ b/src/configure.ac
+@@ -168,7 +168,7 @@
+
+ # these libraries are used by various programs built for the host environment
+ #
+-host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr mpc ppl cloog libelf libiconv libada libgnatvsn"
++host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr mpc ppl cloog libelf libiconv libada libgnatvsn libgnatprj"
+
+ # these tools are built for the host environment
+ # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
+@@ -202,6 +202,7 @@
+ target-libobjc \
+ target-libada \
+ target-libgnatvsn \
++ target-libgnatprj \
+ target-libgo"
+
+ # these tools are built using the target libraries, and are intended to
+@@ -303,7 +304,7 @@
+
+ # Similarly, some are only suitable for cross toolchains.
+ # Remove these if host=target.
+-cross_only="target-libgloss target-newlib target-opcodes target-libada target-libgnatvsn"
++cross_only="target-libgloss target-newlib target-opcodes target-libada target-libgnatvsn target-libgnatprj"
+
+ case $is_cross_compiler in
+ no) skipdirs="${skipdirs} ${cross_only}" ;;
+@@ -487,7 +488,7 @@
+ ENABLE_LIBADA=$enableval,
+ ENABLE_LIBADA=yes)
+ if test "${ENABLE_LIBADA}" != "yes" ; then
+- noconfigdirs="$noconfigdirs libgnatvsn gnattools"
++ noconfigdirs="$noconfigdirs libgnatvsn libgnatprj gnattools"
+ fi
+
+ AC_ARG_ENABLE(libssp,
+Index: b/src/libgnatprj/configure.ac
+===================================================================
+--- /dev/null
++++ b/src/libgnatprj/configure.ac
+@@ -0,0 +1,148 @@
++# Configure script for libada.
++# Copyright 2003, 2004 Free Software Foundation, Inc.
++#
++# This file is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++AC_INIT
++AC_PREREQ([2.59])
++
++AC_CONFIG_SRCDIR([Makefile.in])
++
++# Start of actual configure tests
++
++AC_PROG_INSTALL
++
++AC_CANONICAL_BUILD
++AC_CANONICAL_HOST
++AC_CANONICAL_TARGET
++
++sinclude(../config/acx.m4)
++ACX_NONCANONICAL_TARGET
++
++# Need to pass this down for now :-P
++AC_PROG_LN_S
++
++# Determine x_ada_cflags
++case $host in
++ hppa*) x_ada_cflags=-mdisable-indexing ;;
++ *) x_ada_cflags= ;;
++esac
++AC_SUBST([x_ada_cflags])
++
++# Determine what to build for 'gnattools'
++if test $build = $target ; then
++ # Note that build=target is almost certainly the wrong test; FIXME
++ default_gnattools_target="gnattools-native"
++else
++ default_gnattools_target="gnattools-cross"
++fi
++AC_SUBST([default_gnattools_target])
++
++# Target-specific stuff (defaults)
++TOOLS_TARGET_PAIRS=
++AC_SUBST(TOOLS_TARGET_PAIRS)
++
++# Per-target case statement
++# ---/----------------------
++case "${target}" in
++ alpha*-dec-vx*) # Unlike all other Vxworks
++ ;;
++ m68k*-wrs-vx* \
++ | powerpc*-wrs-vxworks \
++ | sparc*-wrs-vx* \
++ | *86-wrs-vxworks \
++ | xscale*-wrs-vx* \
++ | xscale*-wrs-coff \
++ | mips*-wrs-vx*)
++ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
++ ;;
++ sparc-sun-solaris*)
++ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
++ ;;
++ *86-*-solaris2*)
++ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
++ ;;
++ *86-*-linux* \
++ | arm*-*-linux* \
++ | powerpc*-*-linux* \
++ | *ia64-*-linux* \
++ | alpha*-*-linux* \
++ | sparc*-*-linux* \
++ | hppa*-*-linux* \
++ | mips*-*-linux* \
++ | *x86_64-*-linux* \
++ | *86-*-kfreebsd*-gnu \
++ | *x86_64-*-kfreebsd*-gnu )
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++ indepsw.adb<indepsw-gnu.adb"
++ ;;
++ s390*-*-linux*)
++ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
++ ;;
++ *86-*-freebsd*)
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++ indepsw.adb<indepsw-gnu.adb"
++ ;;
++ mips-sgi-irix*)
++ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-irix.adb"
++ ;;
++ hppa*-hp-hpux10*) # Unlike hpux11
++ ;;
++ hppa*-hp-hpux11*)
++ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
++ ;;
++ *-ibm-aix*)
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
++ indepsw.adb<indepsw-aix.adb"
++ ;;
++ alpha*-dec-osf*)
++ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-tru64.adb"
++ ;;
++ alpha*-dec-vms* | alpha*-dec-openvms* | alpha*-dec-vms* \
++ | alpha*-hp-vms* | alpha*-hp-openvms* | alpha*-hp-vms*)
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-specific-vms-alpha.adb \
++ symbols.adb<symbols-vms.adb \
++ symbols-processing.adb<symbols-processing-vms-alpha.adb"
++ ;;
++ ia64*-dec-vms* | ia64*-dec-openvms* | ia64*-dec-vms* \
++ | ia64*-hp-vms* | ia64*-hp-openvms* | ia64*-hp-vms*)
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-vms-ia64.adb \
++ symbols.adb<symbols-vms.adb \
++ symbols-processing.adb<symbols-processing-vms-ia64.adb"
++ ;;
++ *-*-cygwin32* | *-*-mingw32* | *-*-pe)
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-specific-mingw.adb \
++ indepsw.adb<indepsw-mingw.adb"
++ ;;
++ powerpc-*-darwin*)
++ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
++ ;;
++ *-*-lynxos)
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
++ indepsw.adb<indepsw-gnu.adb"
++ ;;
++esac
++
++# Output: create a Makefile.
++AC_CONFIG_FILES([Makefile])
++
++AC_OUTPUT
diff --git a/debian/patches/ada-libgnatvsn.diff b/debian/patches/ada-libgnatvsn.diff
new file mode 100644
index 0000000..fb2b01c
--- /dev/null
+++ b/debian/patches/ada-libgnatvsn.diff
@@ -0,0 +1,1625 @@
+# DP: - Introduce a new shared library named libgnatvsn, containing
+# DP: common components of GNAT under the GNAT-Modified GPL, for
+# DP: use in GNAT tools, ASIS, GLADE and GPS. Link the gnat tools
+# DP: against this new library.
+
+# This patch seems large, but the hunks in Makefile.in are actually
+# generated from Makefile.def using autogen.
+
+# !!! Must be applied after ada-link-lib.dpatch
+
+Index: b/src/gnattools/Makefile.in
+===================================================================
+--- a/src/gnattools/Makefile.in
++++ b/src/gnattools/Makefile.in
+@@ -38,10 +38,11 @@
+ CFLAGS=-O2 -Wall
+ INCLUDES = -I@srcdir@/../gcc/ada -I@srcdir@/../gcc
+ ADA_CFLAGS=-O2 -gnatn
+-ADA_INCLUDES=-nostdinc -I- -I. -I../gcc/ada/rts -I@srcdir@/../gcc/ada
++ADA_INCLUDES=-nostdinc -I- -I. -I../gcc/ada/rts -I../libgnatvsn
+ LIB_VERSION=$(strip $(shell grep ' Library_Version :' \
+- @srcdir@/../gcc/ada/gnatvsn.ads | sed -e 's/.*"\(.*\)".*/\1/'))
++ ../libgnatvsn/gnatvsn.ads | sed -e 's/.*"\(.*\)".*/\1/'))
+ ADA_LIBS := -L../gcc/ada/rts -lgnat-$(LIB_VERSION)
++ADA_LIBS += -L../libgnatvsn -lgnatvsn
+
+ # We will use the just-built compiler to compile and link everything.
+ GCC=../gcc/xgcc -B../gcc/
+@@ -67,62 +68,34 @@
+ # Since we don't have gnatmake, we must specify the full list of
+ # object files necessary to build gnatmake and gnatlink.
+ # TODO: remove from these lists the objects that are part of
+-# libgnatvsn and libgnatprj.
++# libgnatprj.
+ GNATLINK_OBJS = \
+ ali.o \
+-alloc.o \
+ butil.o \
+-casing.o \
+-csets.o \
+-debug.o \
+ fmap.o \
+-fname.o \
+ gnatlink.o \
+-gnatvsn.o \
+-hostparm.o \
+ indepsw.o \
+-namet.o \
+-opt.o \
+ osint.o \
+-output.o \
+ prefix.o \
+ rident.o \
+ sdefault.o \
+-snames.o \
+ stylesw.o \
+ switch.o \
+-table.o \
+ targparm.o \
+-tree_io.o \
+-types.o \
+-validsw.o \
+-version.o \
+-widechar.o
++validsw.o
+
+ GNATMAKE_OBJS = \
+ ali-util.o \
+ ali.o \
+-alloc.o \
+-atree.o \
+ binderr.o \
+ butil.o \
+-casing.o \
+-csets.o \
+-debug.o \
+-einfo.o\
+-elists.o \
+ err_vars.o \
+ erroutc.o \
+ errutil.o \
+ fmap.o \
+ fname-sf.o \
+ fname-uf.o \
+-fname.o \
+ gnatmake.o \
+-gnatvsn.o \
+-hostparm.o \
+-krunch.o \
+-lib.o \
+ make.o \
+ makeusg.o \
+ makeutl.o \
+@@ -132,12 +105,8 @@
+ mlib-tgt-specific.o \
+ mlib-utl.o \
+ mlib.o \
+-namet.o \
+-nlists.o \
+-opt.o \
+ osint-m.o \
+ osint.o \
+-output.o \
+ prefix.o \
+ prj-attr-pm.o \
+ prj-attr.o \
+@@ -155,47 +124,59 @@
+ prj-util.o \
+ prj.o \
+ rident.o \
+-scans.o \
+ scng.o \
+ sdefault.o \
+ sfn_scan.o \
+-sinfo.o \
+ sinput-c.o \
+ sinput-p.o \
+-sinput.o \
+-snames.o \
+-stand.o \
+-stringt.o \
+ styleg.o \
+ stylesw.o \
+ switch-m.o \
+ switch.o \
+-table.o \
+ targparm.o \
+ tempdir.o \
+-tree_io.o \
+-types.o \
+-uintp.o \
+-uname.o \
+-urealp.o \
+ usage.o \
+ validsw.o \
+-version.o \
+-widechar.o \
+ $(EXTRA_GNATMAKE_OBJS)
+
++EXTRA_TOOLS_OBJS = \
++bcheck.o \
++binde.o \
++bindgen.o \
++bindusg.o \
++clean.o \
++gprep.o \
++makegpr.o \
++osint-b.o \
++osint-l.o \
++prep.o \
++prj-makr.o \
++prj-pp.o \
++switch-b.o \
++vms_cmds.o \
++vms_conv.o \
++vms_data.o \
++xr_tabls.o \
++xref_lib.o
++
++OBJECTS = $(GNATLINK_OBJS) $(GNATMAKE_OBJS) $(EXTRA_TOOLS_OBJS)
++
+ # Makefile targets
+ # ----------------
+
+ .PHONY: gnattools gnattools-native gnattools-cross regnattools
+ gnattools: @default_gnattools_target@
+
+-# Build directory for the tools. Let's copy the target-dependent
+-# sources using the same mechanism as for gnatlib. The other sources are
+-# accessed using the vpath directive.
++BODIES := $(foreach f,$(OBJECTS),$(wildcard $(patsubst %.o,@srcdir@/../gcc/ada/%.adb,$(f))))
++SPECS := $(foreach f,$(OBJECTS),$(wildcard $(patsubst %.o,@srcdir@/../gcc/ada/%.ads,$(f))))
++
++$(notdir $(SPECS) $(BODIES)): stamp-gnattools-sources
+
+ stamp-gnattools-sources:
+- $(LN_S) ../gcc/ada/sdefault.adb .
++ for file in $(BODIES) $(SPECS); do \
++ $(LN_S) -f $$file .; \
++ done
++ rm -f sdefault.adb; $(LN_S) ../gcc/ada/sdefault.adb .
+ $(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
+ rm -f $(word 1,$(subst <, ,$(PAIR)));\
+ $(LN_S) @srcdir@/../gcc/ada/$(word 2,$(subst <, ,$(PAIR))) \
+@@ -203,6 +184,7 @@
+ touch $@
+
+ gnattools-native: ../gcc/ada/rts/libgnat-$(LIB_VERSION).so
++gnattools-native: ../libgnatvsn/libgnatvsn.so
+ gnattools-native: stamp-gnattools-sources
+ gnattools-native: $(TOOLS)
+
+@@ -210,18 +192,16 @@
+
+ vpath %.c @srcdir@/../gcc/ada:@srcdir@/../gcc
+ vpath %.h @srcdir@/../gcc/ada
+-vpath %.adb .:@srcdir@/../gcc/ada
+-vpath %.ads @srcdir@/../gcc/ada
+
+ # Because the just-built gcc is a host tool like us, we can use some
+-# of its object files, e.g. prefix.o and version.o.
++# of its object files, e.g. prefix.o.
+ vpath prefix.o ../gcc
+-vpath version.o ../gcc
+
+ # gnatlink
+
+ gnatlink-static: $(GNATLINK_OBJS) b_gnatl.o link.o
+ $(GCC) -o $@ $^ \
++ ../libgnatvsn/libgnatvsn.a \
+ ../gcc/ada/rts/libgnat.a \
+ ../libiberty/libiberty.a
+
+@@ -238,6 +218,7 @@
+
+ gnatmake-static: $(GNATMAKE_OBJS) b_gnatm.o link.o
+ $(GCC) -o $@ $(ADA_CFLAGS) $^ \
++ ../libgnatvsn/libgnatvsn.a \
+ ../gcc/ada/rts/libgnat.a \
+ ../libiberty/libiberty.a
+
+@@ -251,7 +232,8 @@
+ ../gcc/gnatbind -C -o $@ $(ADA_INCLUDES) gnatmake.ali
+
+ # Other tools
+-gnatkr: version.o
++gnatkr:
++ if [ ! -f $@.adb ] ; then $(LN_S) ../../src/gcc/ada/$@.ad[bs] .; fi
+ ./gnatmake-static -c -b $@ $(ADA_CFLAGS) $(ADA_INCLUDES) \
+ --GCC="$(GCC)" \
+ --GNATBIND=../gcc/gnatbind
+@@ -262,7 +244,8 @@
+ cp -lp $< $@
+
+ gnatbind gnatchop gnatclean gnatcmd gnatfind gnatls gnatname gnatprep gnatxref: \
+-link.o version.o prefix.o
++link.o prefix.o
++ if [ ! -f $@.adb ] ; then $(LN_S) ../../src/gcc/ada/$@.ad[bs] .; fi
+ ./gnatmake-static -c -b $@ $(ADA_CFLAGS) $(ADA_INCLUDES) \
+ --GCC="$(GCC)" \
+ --GNATBIND=../gcc/gnatbind
+@@ -284,6 +267,8 @@
+ %.o: %.c
+ $(GCC) -c -o $@ $< $(CFLAGS) $(INCLUDES)
+
++prefix.o:
++
+ # Other
+ # -----
+
+@@ -325,13 +310,15 @@
+ .PHONY: install install-strip install-info install-pdf install-html
+
+ # Cleaning rules.
++.PHONY: mostlyclean clean distclean
++
+ mostlyclean:
+ $(RM) gnatmake gnatlink $(TOOLS) *.o *.ali
+
+-clean:
++clean: mostlyclean
+ $(RM) *.ads *.adb stamp-gnattools-sources
+
+-distclean:
++distclean: clean
+ $(RM) Makefile config.status config.log
+
+ maintainer-clean:
+Index: b/src/libgnatvsn/configure
+===================================================================
+--- /dev/null
++++ b/src/libgnatvsn/configure
+@@ -0,0 +1,47 @@
++#!/bin/sh
++
++# Minimal configure script for libgnatvsn. We're only interested in
++# a few parameters.
++
++for arg in $*; do
++ case ${arg} in
++ --build=*)
++ build=`expr ${arg} : '--build=\(.\+\)'`;;
++ --host=*)
++ host=`expr ${arg} : '--host=\(.\+\)'`;;
++ --target=*)
++ target=`expr ${arg} : '--target=\(.\+\)'`;;
++ --prefix=*)
++ prefix=`expr ${arg} : '--prefix=\(.\+\)'`;;
++ --srcdir=*)
++ srcdir=`expr ${arg} : '--srcdir=\(.\+\)'`;;
++ --libdir=*)
++ libdir=`expr ${arg} : '--libdir=\(.\+\)'`;;
++ --with-pkgversion=*)
++ pkgversion=`expr ${arg} : '--with-pkgversion=\(.\+\)'`;;
++ --with-bugurl=*)
++ bugurl=`expr ${arg} : '--with-bugurl=\(.\+\)'`;;
++ *)
++ echo "Warning: ignoring option: ${arg}"
++ esac
++done
++
++echo "build: ${build}" | tee config.log
++echo "host: ${host}" | tee -a config.log
++echo "target: ${target}" | tee -a config.log
++echo "prefix: ${prefix}" | tee -a config.log
++echo "srcdir: ${srcdir}" | tee -a config.log
++echo "libdir: ${libdir}" | tee -a config.log
++echo "pkgversion: ${pkgversion}" | tee -a config.log
++echo "bugurl: ${bugurl}" | tee -a config.log
++
++echo "Creating Makefile..." | tee -a config.log
++sed -e "s,@build@,${build},g" \
++ -e "s,@host@,${host},g" \
++ -e "s,@target@,${target},g" \
++ -e "s,@prefix@,${prefix},g" \
++ -e "s,@srcdir@,${srcdir},g" \
++ -e "s,@libdir@,${libdir},g" \
++ -e "s,@PKGVERSION@,${pkgversion},g" \
++ -e "s,@REPORT_BUGS_TO@,${bugurl},g" \
++ < ${srcdir}/Makefile.in > Makefile
+Index: b/src/libgnatvsn/Makefile.in
+===================================================================
+--- /dev/null
++++ b/src/libgnatvsn/Makefile.in
+@@ -0,0 +1,157 @@
++# Makefile for libgnatvsn.
++# Copyright (c) 2006 Ludovic Brenta <ludovic@ludovic-brenta.org>
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++
++# Default target; must be first.
++all: libgnatvsn
++
++.SUFFIXES:
++
++CPUS := $(shell getconf _NPROCESSORS_ONLN)
++LIB_VERSION := $(strip $(shell grep ' Library_Version :' \
++ @srcdir@/../gcc/ada/gnatvsn.ads | \
++ sed -e 's/.*"\(.*\)".*/\1/'))
++GCC:=../gcc/xgcc -B../gcc/
++LIBGNAT_JUST_BUILT := -nostdinc -I../gcc/ada/rts
++CFLAGS := -g -O2 -gnatn
++BASEVER := $(shell cat @srcdir@/../gcc/BASE-VER)
++DEVPHASE := $(shell cat @srcdir@/../gcc/DEV-PHASE)
++DATESTAMP := $(shell cat @srcdir@/../gcc/DATESTAMP)
++
++# For use in version.c - double quoted strings, with appropriate
++# surrounding punctuation and spaces, and with the datestamp and
++# development phase collapsed to the empty string in release mode
++# (i.e. if DEVPHASE_c is empty). The space immediately after the
++# comma in the $(if ...) constructs is significant - do not remove it.
++BASEVER_s := "\"$(BASEVER)\""
++DEVPHASE_s := "\"$(if $(DEVPHASE), ($(DEVPHASE)))\""
++DATESTAMP_s := "\"$(if $(DEVPHASE), $(DATESTAMP))\""
++PKGVERSION_s:= "\"@PKGVERSION@\""
++BUGURL_s := "\"@REPORT_BUGS_TO@\""
++
++ifneq (@build@,@host@)
++ CFLAGS += -b @host@
++endif
++
++.PHONY: libgnatvsn install
++libgnatvsn: libgnatvsn.so.$(LIB_VERSION) libgnatvsn.a
++
++VSN_SOURCES := alloc.ads aspects.adb atree.adb casing.adb csets.adb debug.adb einfo.adb \
++elists.adb fname.adb gnatvsn.adb hostparm.ads krunch.adb lib.adb namet.adb \
++nlists.adb opt.adb output.adb repinfo.adb scans.adb sinfo.adb sem_aux.adb \
++sinput.adb stand.adb stringt.adb table.adb tree_in.adb tree_io.adb types.adb \
++uintp.adb uname.adb urealp.adb widechar.adb
++
++VSN_SEPARATES := lib-list.adb lib-sort.adb
++
++VSN_GENERATED_SOURCES := snames.adb
++
++OBJECTS=$(patsubst %.ads,%.o,$(VSN_SOURCES:.adb=.o) $(VSN_GENERATED_SOURCES:.adb=.o)) version.o
++
++vpath %.c @srcdir@/../gcc
++
++libgnatvsn.so.$(LIB_VERSION): $(addprefix obj-shared/,$(OBJECTS))
++ : # Make libgnatvsn.so
++ $(GCC) -o $@ -shared -fPIC -Wl,--soname,$@ $^ \
++ -L../gcc/ada/rts -lgnat-$(LIB_VERSION)
++ ln -s libgnatvsn.so.$(LIB_VERSION) libgnatvsn.so
++ chmod a=r obj-shared/*.ali
++# Make the .ali files, but not the .o files, visible to the gnat tools.
++ cp -lp obj-shared/*.ali .
++
++$(addprefix obj-shared/,$(OBJECTS)): | stamp-libgnatvsn-sources obj-shared
++
++obj-shared/%.o: %.adb
++ $(GCC) -c -fPIC $(CFLAGS) $(LIBGNAT_JUST_BUILT) $< -o $@
++
++obj-shared/%.o: %.ads
++ $(GCC) -c -fPIC $(CFLAGS) $(LIBGNAT_JUST_BUILT) $< -o $@
++
++obj-shared/version.o: version.c
++ $(GCC) -c -fPIC -g -O2 \
++ -DBASEVER=$(BASEVER_s) \
++ -DDATESTAMP=$(DATESTAMP_s) \
++ -DDEVPHASE=$(DEVPHASE_s) \
++ -DPKGVERSION=$(PKGVERSION_s) \
++ -DBUGURL=$(BUGURL_s) \
++ -DREVISION= \
++ $(realpath $<) -o $@
++
++obj-shared:
++ -mkdir $@
++
++libgnatvsn.a: $(addprefix obj-static/,$(OBJECTS))
++ : # Make libgnatvsn.a
++ ar rc $@ $^
++ ranlib $@
++
++$(addprefix obj-static/,$(OBJECTS)): | stamp-libgnatvsn-sources obj-static
++
++obj-static/%.o: %.adb
++ $(GCC) -c $(CFLAGS) $(LIBGNAT_JUST_BUILT) $< -o $@
++
++obj-static/%.o: %.ads
++ $(GCC) -c $(CFLAGS) $(LIBGNAT_JUST_BUILT) $< -o $@
++
++obj-static/version.o: version.c
++ $(GCC) -c -g -O2 \
++ -DBASEVER=$(BASEVER_s) \
++ -DDATESTAMP=$(DATESTAMP_s) \
++ -DDEVPHASE=$(DEVPHASE_s) \
++ -DPKGVERSION=$(PKGVERSION_s) \
++ -DBUGURL=$(BUGURL_s) \
++ -DREVISION= \
++ $< -o $@
++
++obj-static:
++ -mkdir $@
++
++$(VSN_SOURCES) $(VSN_SEPARATES) $(VSN_GENERATED_SOURCES): stamp-libgnatvsn-sources
++
++stamp-libgnatvsn-sources:
++ for file in $(VSN_SOURCES) $(VSN_SEPARATES); do \
++ ads=$$(echo $$file | sed 's/\.adb/.ads/'); \
++ if [ -f @srcdir@/../gcc/ada/$$file -a ! -L $$file ] ; then ln -s @srcdir@/../gcc/ada/$$file .; fi; \
++ if [ -f @srcdir@/../gcc/ada/$$ads -a ! -L $$ads ] ; then ln -s @srcdir@/../gcc/ada/$$ads .; fi; \
++ done
++ for file in $(VSN_GENERATED_SOURCES); do \
++ ads=$$(echo $$file | sed 's/\.adb/.ads/'); \
++ if [ -f ../gcc/ada/$$file -a ! -L $$file ] ; then ln -s ../gcc/ada/$$file .; fi; \
++ if [ -f ../gcc/ada/$$ads -a ! -L $$ads ] ; then ln -s ../gcc/ada/$$ads .; fi; \
++ done
++ touch $@
++
++libdir = @libdir@
++
++install: libgnatvsn
++ $(INSTALL_DATA) libgnatvsn.a $(DESTDIR)$(libdir)
++ $(INSTALL_DATA) libgnatvsn.so.$(LIB_VERSION) $(DESTDIR)$(libdir)
++ cd $(DESTDIR)$(libdir); ln -sf libgnatvsn.so.$(LIB_VERSION) libgnatvsn.so
++ mkdir -p $(DESTDIR)$(prefix)/share/ada/adainclude/gnatvsn
++ $(INSTALL_DATA) \
++ $(addprefix @srcdir@/../gcc/ada/,$(VSN_SOURCES) $(VSN_SEPARATES)) \
++ $(addprefix @srcdir@/../gcc/ada/,$(patsubst %.adb,%.ads,$(filter %.adb,$(VSN_SOURCES)))) \
++ $(addprefix ../gcc/ada/,$(VSN_GENERATED_SOURCES)) \
++ $(addprefix ../gcc/ada/,$(patsubst %.adb,%.ads,$(VSN_GENERATED_SOURCES))) \
++ $(DESTDIR)$(prefix)/share/ada/adainclude/gnatvsn
++ mkdir -p $(DESTDIR)$(prefix)/lib/ada/adalib/gnatvsn
++ $(INSTALL) -m 0444 obj-shared/*.ali \
++ $(DESTDIR)$(prefix)/lib/ada/adalib/gnatvsn
++ chmod a=r $(DESTDIR)$(prefix)/lib/ada/adalib/gnatvsn/*.ali
++
++.PHONY: clean
++clean:
++ rm -rf *.ali obj-static obj-shared libgnatvsn* *.adb *.ads stamp*
+Index: b/src/Makefile.def
+===================================================================
+--- a/src/Makefile.def
++++ b/src/Makefile.def
+@@ -151,6 +151,13 @@
+ missing= TAGS;
+ missing= install-info;
+ missing= installcheck; };
++host_modules= { module= libgnatvsn; no_check=true;
++ missing= info;
++ missing= dvi;
++ missing= html;
++ missing= TAGS;
++ missing= install-info;
++ missing= installcheck; };
+ host_modules= { module= gnattools; no_check=true;
+ missing= info;
+ missing= dvi;
+@@ -196,6 +203,13 @@
+ missing= TAGS;
+ missing= install-info;
+ missing= installcheck; };
++target_modules = { module= libgnatvsn; no_check=true;
++ missing= info;
++ missing= dvi;
++ missing= html;
++ missing= TAGS;
++ missing= install-info;
++ missing= installcheck; };
+ target_modules = { module= libgomp; bootstrap= true; lib_path=.libs; };
+
+ // These are (some of) the make targets to be done in each subdirectory.
+@@ -382,6 +396,8 @@
+ dependencies = { module=all-fixincludes; on=all-libiberty; };
+
+ dependencies = { module=all-gnattools; on=all-libada; };
++dependencies = { module=all-gnattools; on=all-libgnatvsn; };
++dependencies = { module=all-libgnatvsn; on=all-libada; };
+
+ dependencies = { module=all-lto-plugin; on=all-libiberty; };
+
+Index: b/src/Makefile.in
+===================================================================
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -951,6 +951,7 @@
+ maybe-configure-libtermcap \
+ maybe-configure-utils \
+ maybe-configure-libada \
++ maybe-configure-libgnatvsn \
+ maybe-configure-gnattools \
+ maybe-configure-lto-plugin
+ .PHONY: configure-target
+@@ -977,6 +978,7 @@
+ maybe-configure-target-qthreads \
+ maybe-configure-target-rda \
+ maybe-configure-target-libada \
++ maybe-configure-target-libgnatvsn \
+ maybe-configure-target-libgomp
+
+ # The target built for a native non-bootstrap build.
+@@ -1129,6 +1131,7 @@
+ all-host: maybe-all-libtermcap
+ all-host: maybe-all-utils
+ all-host: maybe-all-libada
++all-host: maybe-all-libgnatvsn
+ all-host: maybe-all-gnattools
+ @if lto-plugin-no-bootstrap
+ all-host: maybe-all-lto-plugin
+@@ -1162,6 +1165,7 @@
+ all-target: maybe-all-target-qthreads
+ all-target: maybe-all-target-rda
+ all-target: maybe-all-target-libada
++all-target: maybe-all-target-libgnatvsn
+ @if target-libgomp-no-bootstrap
+ all-target: maybe-all-target-libgomp
+ @endif target-libgomp-no-bootstrap
+@@ -1259,6 +1263,7 @@
+ info-host: maybe-info-libtermcap
+ info-host: maybe-info-utils
+ info-host: maybe-info-libada
++info-host: maybe-info-libgnatvsn
+ info-host: maybe-info-gnattools
+ info-host: maybe-info-lto-plugin
+
+@@ -1286,6 +1291,7 @@
+ info-target: maybe-info-target-qthreads
+ info-target: maybe-info-target-rda
+ info-target: maybe-info-target-libada
++info-target: maybe-info-target-libgnatvsn
+ info-target: maybe-info-target-libgomp
+
+ .PHONY: do-dvi
+@@ -1376,6 +1382,7 @@
+ dvi-host: maybe-dvi-libtermcap
+ dvi-host: maybe-dvi-utils
+ dvi-host: maybe-dvi-libada
++dvi-host: maybe-dvi-libgnatvsn
+ dvi-host: maybe-dvi-gnattools
+ dvi-host: maybe-dvi-lto-plugin
+
+@@ -1403,6 +1410,7 @@
+ dvi-target: maybe-dvi-target-qthreads
+ dvi-target: maybe-dvi-target-rda
+ dvi-target: maybe-dvi-target-libada
++dvi-target: maybe-dvi-target-libgnatvsn
+ dvi-target: maybe-dvi-target-libgomp
+
+ .PHONY: do-pdf
+@@ -1493,6 +1501,7 @@
+ pdf-host: maybe-pdf-libtermcap
+ pdf-host: maybe-pdf-utils
+ pdf-host: maybe-pdf-libada
++pdf-host: maybe-pdf-libgnatvsn
+ pdf-host: maybe-pdf-gnattools
+ pdf-host: maybe-pdf-lto-plugin
+
+@@ -1520,6 +1529,7 @@
+ pdf-target: maybe-pdf-target-qthreads
+ pdf-target: maybe-pdf-target-rda
+ pdf-target: maybe-pdf-target-libada
++pdf-target: maybe-pdf-target-libgnatvsn
+ pdf-target: maybe-pdf-target-libgomp
+
+ .PHONY: do-html
+@@ -1610,6 +1620,7 @@
+ html-host: maybe-html-libtermcap
+ html-host: maybe-html-utils
+ html-host: maybe-html-libada
++html-host: maybe-html-libgnatvsn
+ html-host: maybe-html-gnattools
+ html-host: maybe-html-lto-plugin
+
+@@ -1637,6 +1648,7 @@
+ html-target: maybe-html-target-qthreads
+ html-target: maybe-html-target-rda
+ html-target: maybe-html-target-libada
++html-target: maybe-html-target-libgnatvsn
+ html-target: maybe-html-target-libgomp
+
+ .PHONY: do-TAGS
+@@ -1727,6 +1739,7 @@
+ TAGS-host: maybe-TAGS-libtermcap
+ TAGS-host: maybe-TAGS-utils
+ TAGS-host: maybe-TAGS-libada
++TAGS-host: maybe-TAGS-libgnatvsn
+ TAGS-host: maybe-TAGS-gnattools
+ TAGS-host: maybe-TAGS-lto-plugin
+
+@@ -1754,6 +1767,7 @@
+ TAGS-target: maybe-TAGS-target-qthreads
+ TAGS-target: maybe-TAGS-target-rda
+ TAGS-target: maybe-TAGS-target-libada
++TAGS-target: maybe-TAGS-target-libgnatvsn
+ TAGS-target: maybe-TAGS-target-libgomp
+
+ .PHONY: do-install-info
+@@ -1844,6 +1858,7 @@
+ install-info-host: maybe-install-info-libtermcap
+ install-info-host: maybe-install-info-utils
+ install-info-host: maybe-install-info-libada
++install-info-host: maybe-install-info-libgnatvsn
+ install-info-host: maybe-install-info-gnattools
+ install-info-host: maybe-install-info-lto-plugin
+
+@@ -1871,6 +1886,7 @@
+ install-info-target: maybe-install-info-target-qthreads
+ install-info-target: maybe-install-info-target-rda
+ install-info-target: maybe-install-info-target-libada
++install-info-target: maybe-install-info-target-libgnatvsn
+ install-info-target: maybe-install-info-target-libgomp
+
+ .PHONY: do-install-pdf
+@@ -1961,6 +1977,7 @@
+ install-pdf-host: maybe-install-pdf-libtermcap
+ install-pdf-host: maybe-install-pdf-utils
+ install-pdf-host: maybe-install-pdf-libada
++install-pdf-host: maybe-install-pdf-libgnatvsn
+ install-pdf-host: maybe-install-pdf-gnattools
+ install-pdf-host: maybe-install-pdf-lto-plugin
+
+@@ -1988,6 +2005,7 @@
+ install-pdf-target: maybe-install-pdf-target-qthreads
+ install-pdf-target: maybe-install-pdf-target-rda
+ install-pdf-target: maybe-install-pdf-target-libada
++install-pdf-target: maybe-install-pdf-target-libgnatvsn
+ install-pdf-target: maybe-install-pdf-target-libgomp
+
+ .PHONY: do-install-html
+@@ -2078,6 +2096,7 @@
+ install-html-host: maybe-install-html-libtermcap
+ install-html-host: maybe-install-html-utils
+ install-html-host: maybe-install-html-libada
++install-html-host: maybe-install-html-libgnatvsn
+ install-html-host: maybe-install-html-gnattools
+ install-html-host: maybe-install-html-lto-plugin
+
+@@ -2105,6 +2124,7 @@
+ install-html-target: maybe-install-html-target-qthreads
+ install-html-target: maybe-install-html-target-rda
+ install-html-target: maybe-install-html-target-libada
++install-html-target: maybe-install-html-target-libgnatvsn
+ install-html-target: maybe-install-html-target-libgomp
+
+ .PHONY: do-installcheck
+@@ -2195,6 +2215,7 @@
+ installcheck-host: maybe-installcheck-libtermcap
+ installcheck-host: maybe-installcheck-utils
+ installcheck-host: maybe-installcheck-libada
++installcheck-host: maybe-installcheck-libgnatvsn
+ installcheck-host: maybe-installcheck-gnattools
+ installcheck-host: maybe-installcheck-lto-plugin
+
+@@ -2222,6 +2243,7 @@
+ installcheck-target: maybe-installcheck-target-qthreads
+ installcheck-target: maybe-installcheck-target-rda
+ installcheck-target: maybe-installcheck-target-libada
++installcheck-target: maybe-installcheck-target-libgnatvsn
+ installcheck-target: maybe-installcheck-target-libgomp
+
+ .PHONY: do-mostlyclean
+@@ -2312,6 +2334,7 @@
+ mostlyclean-host: maybe-mostlyclean-libtermcap
+ mostlyclean-host: maybe-mostlyclean-utils
+ mostlyclean-host: maybe-mostlyclean-libada
++mostlyclean-host: maybe-mostlyclean-libgnatvsn
+ mostlyclean-host: maybe-mostlyclean-gnattools
+ mostlyclean-host: maybe-mostlyclean-lto-plugin
+
+@@ -2339,6 +2362,7 @@
+ mostlyclean-target: maybe-mostlyclean-target-qthreads
+ mostlyclean-target: maybe-mostlyclean-target-rda
+ mostlyclean-target: maybe-mostlyclean-target-libada
++mostlyclean-target: maybe-mostlyclean-target-libgnatvsn
+ mostlyclean-target: maybe-mostlyclean-target-libgomp
+
+ .PHONY: do-clean
+@@ -2429,6 +2453,7 @@
+ clean-host: maybe-clean-libtermcap
+ clean-host: maybe-clean-utils
+ clean-host: maybe-clean-libada
++clean-host: maybe-clean-libgnatvsn
+ clean-host: maybe-clean-gnattools
+ clean-host: maybe-clean-lto-plugin
+
+@@ -2456,6 +2481,7 @@
+ clean-target: maybe-clean-target-qthreads
+ clean-target: maybe-clean-target-rda
+ clean-target: maybe-clean-target-libada
++clean-target: maybe-clean-target-libgnatvsn
+ clean-target: maybe-clean-target-libgomp
+
+ .PHONY: do-distclean
+@@ -2546,6 +2572,7 @@
+ distclean-host: maybe-distclean-libtermcap
+ distclean-host: maybe-distclean-utils
+ distclean-host: maybe-distclean-libada
++distclean-host: maybe-distclean-libgnatvsn
+ distclean-host: maybe-distclean-gnattools
+ distclean-host: maybe-distclean-lto-plugin
+
+@@ -2573,6 +2600,7 @@
+ distclean-target: maybe-distclean-target-qthreads
+ distclean-target: maybe-distclean-target-rda
+ distclean-target: maybe-distclean-target-libada
++distclean-target: maybe-distclean-target-libgnatvsn
+ distclean-target: maybe-distclean-target-libgomp
+
+ .PHONY: do-maintainer-clean
+@@ -2663,6 +2691,7 @@
+ maintainer-clean-host: maybe-maintainer-clean-libtermcap
+ maintainer-clean-host: maybe-maintainer-clean-utils
+ maintainer-clean-host: maybe-maintainer-clean-libada
++maintainer-clean-host: maybe-maintainer-clean-libgnatvsn
+ maintainer-clean-host: maybe-maintainer-clean-gnattools
+ maintainer-clean-host: maybe-maintainer-clean-lto-plugin
+
+@@ -2690,6 +2719,7 @@
+ maintainer-clean-target: maybe-maintainer-clean-target-qthreads
+ maintainer-clean-target: maybe-maintainer-clean-target-rda
+ maintainer-clean-target: maybe-maintainer-clean-target-libada
++maintainer-clean-target: maybe-maintainer-clean-target-libgnatvsn
+ maintainer-clean-target: maybe-maintainer-clean-target-libgomp
+
+
+@@ -2835,6 +2865,7 @@
+ maybe-check-libtermcap \
+ maybe-check-utils \
+ maybe-check-libada \
++ maybe-check-libgnatvsn \
+ maybe-check-gnattools \
+ maybe-check-lto-plugin
+
+@@ -2862,6 +2893,7 @@
+ maybe-check-target-qthreads \
+ maybe-check-target-rda \
+ maybe-check-target-libada \
++ maybe-check-target-libgnatvsn \
+ maybe-check-target-libgomp
+
+ do-check:
+@@ -2978,6 +3010,7 @@
+ maybe-install-libtermcap \
+ maybe-install-utils \
+ maybe-install-libada \
++ maybe-install-libgnatvsn \
+ maybe-install-gnattools \
+ maybe-install-lto-plugin
+
+@@ -3060,6 +3093,7 @@
+ maybe-install-libtermcap \
+ maybe-install-utils \
+ maybe-install-libada \
++ maybe-install-libgnatvsn \
+ maybe-install-gnattools \
+ maybe-install-lto-plugin
+
+@@ -3087,6 +3121,7 @@
+ maybe-install-target-qthreads \
+ maybe-install-target-rda \
+ maybe-install-target-libada \
++ maybe-install-target-libgnatvsn \
+ maybe-install-target-libgomp
+
+ uninstall:
+@@ -3196,6 +3231,7 @@
+ maybe-install-strip-libtermcap \
+ maybe-install-strip-utils \
+ maybe-install-strip-libada \
++ maybe-install-strip-libgnatvsn \
+ maybe-install-strip-gnattools \
+ maybe-install-strip-lto-plugin
+
+@@ -3223,6 +3259,7 @@
+ maybe-install-strip-target-qthreads \
+ maybe-install-strip-target-rda \
+ maybe-install-strip-target-libada \
++ maybe-install-strip-target-libgnatvsn \
+ maybe-install-strip-target-libgomp
+
+
+@@ -45128,6 +45165,343 @@
+
+
+
++.PHONY: configure-libgnatvsn maybe-configure-libgnatvsn
++maybe-configure-libgnatvsn:
++@if gcc-bootstrap
++configure-libgnatvsn: stage_current
++@endif gcc-bootstrap
++@if libgnatvsn
++maybe-configure-libgnatvsn: configure-libgnatvsn
++configure-libgnatvsn:
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ test ! -f $(HOST_SUBDIR)/libgnatvsn/Makefile || exit 0; \
++ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libgnatvsn ; \
++ $(HOST_EXPORTS) \
++ echo Configuring in $(HOST_SUBDIR)/libgnatvsn; \
++ cd "$(HOST_SUBDIR)/libgnatvsn" || exit 1; \
++ case $(srcdir) in \
++ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
++ *) topdir=`echo $(HOST_SUBDIR)/libgnatvsn/ | \
++ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
++ esac; \
++ srcdiroption="--srcdir=$${topdir}/libgnatvsn"; \
++ libsrcdir="$$s/libgnatvsn"; \
++ $(SHELL) $${libsrcdir}/configure \
++ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
++ --target=${target_alias} $${srcdiroption} \
++ || exit 1
++@endif libgnatvsn
++
++
++
++
++
++.PHONY: all-libgnatvsn maybe-all-libgnatvsn
++maybe-all-libgnatvsn:
++@if gcc-bootstrap
++all-libgnatvsn: stage_current
++@endif gcc-bootstrap
++@if libgnatvsn
++TARGET-libgnatvsn=all
++maybe-all-libgnatvsn: all-libgnatvsn
++all-libgnatvsn: configure-libgnatvsn
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ (cd $(HOST_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \
++ $(TARGET-libgnatvsn))
++@endif libgnatvsn
++
++
++
++
++.PHONY: check-libgnatvsn maybe-check-libgnatvsn
++maybe-check-libgnatvsn:
++@if libgnatvsn
++maybe-check-libgnatvsn: check-libgnatvsn
++
++check-libgnatvsn:
++
++@endif libgnatvsn
++
++.PHONY: install-libgnatvsn maybe-install-libgnatvsn
++maybe-install-libgnatvsn:
++@if libgnatvsn
++maybe-install-libgnatvsn: install-libgnatvsn
++
++install-libgnatvsn: installdirs
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ (cd $(HOST_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(FLAGS_TO_PASS) install)
++
++@endif libgnatvsn
++
++.PHONY: install-strip-libgnatvsn maybe-install-strip-libgnatvsn
++maybe-install-strip-libgnatvsn:
++@if libgnatvsn
++maybe-install-strip-libgnatvsn: install-strip-libgnatvsn
++
++install-strip-libgnatvsn: installdirs
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ (cd $(HOST_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(FLAGS_TO_PASS) install-strip)
++
++@endif libgnatvsn
++
++# Other targets (info, dvi, pdf, etc.)
++
++.PHONY: maybe-info-libgnatvsn info-libgnatvsn
++maybe-info-libgnatvsn:
++@if libgnatvsn
++maybe-info-libgnatvsn: info-libgnatvsn
++
++# libgnatvsn doesn't support info.
++info-libgnatvsn:
++
++@endif libgnatvsn
++
++.PHONY: maybe-dvi-libgnatvsn dvi-libgnatvsn
++maybe-dvi-libgnatvsn:
++@if libgnatvsn
++maybe-dvi-libgnatvsn: dvi-libgnatvsn
++
++# libgnatvsn doesn't support dvi.
++dvi-libgnatvsn:
++
++@endif libgnatvsn
++
++.PHONY: maybe-pdf-libgnatvsn pdf-libgnatvsn
++maybe-pdf-libgnatvsn:
++@if libgnatvsn
++maybe-pdf-libgnatvsn: pdf-libgnatvsn
++
++pdf-libgnatvsn: \
++ configure-libgnatvsn
++ @: $(MAKE); $(unstage)
++ @[ -f ./libgnatvsn/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing pdf in libgnatvsn" ; \
++ (cd $(HOST_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ pdf) \
++ || exit 1
++
++@endif libgnatvsn
++
++.PHONY: maybe-html-libgnatvsn html-libgnatvsn
++maybe-html-libgnatvsn:
++@if libgnatvsn
++maybe-html-libgnatvsn: html-libgnatvsn
++
++# libgnatvsn doesn't support html.
++html-libgnatvsn:
++
++@endif libgnatvsn
++
++.PHONY: maybe-TAGS-libgnatvsn TAGS-libgnatvsn
++maybe-TAGS-libgnatvsn:
++@if libgnatvsn
++maybe-TAGS-libgnatvsn: TAGS-libgnatvsn
++
++# libgnatvsn doesn't support TAGS.
++TAGS-libgnatvsn:
++
++@endif libgnatvsn
++
++.PHONY: maybe-install-info-libgnatvsn install-info-libgnatvsn
++maybe-install-info-libgnatvsn:
++@if libgnatvsn
++maybe-install-info-libgnatvsn: install-info-libgnatvsn
++
++# libgnatvsn doesn't support install-info.
++install-info-libgnatvsn:
++
++@endif libgnatvsn
++
++.PHONY: maybe-install-pdf-libgnatvsn install-pdf-libgnatvsn
++maybe-install-pdf-libgnatvsn:
++@if libgnatvsn
++maybe-install-pdf-libgnatvsn: install-pdf-libgnatvsn
++
++install-pdf-libgnatvsn: \
++ configure-libgnatvsn \
++ pdf-libgnatvsn
++ @: $(MAKE); $(unstage)
++ @[ -f ./libgnatvsn/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing install-pdf in libgnatvsn" ; \
++ (cd $(HOST_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ install-pdf) \
++ || exit 1
++
++@endif libgnatvsn
++
++.PHONY: maybe-install-html-libgnatvsn install-html-libgnatvsn
++maybe-install-html-libgnatvsn:
++@if libgnatvsn
++maybe-install-html-libgnatvsn: install-html-libgnatvsn
++
++install-html-libgnatvsn: \
++ configure-libgnatvsn \
++ html-libgnatvsn
++ @: $(MAKE); $(unstage)
++ @[ -f ./libgnatvsn/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing install-html in libgnatvsn" ; \
++ (cd $(HOST_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ install-html) \
++ || exit 1
++
++@endif libgnatvsn
++
++.PHONY: maybe-installcheck-libgnatvsn installcheck-libgnatvsn
++maybe-installcheck-libgnatvsn:
++@if libgnatvsn
++maybe-installcheck-libgnatvsn: installcheck-libgnatvsn
++
++# libgnatvsn doesn't support installcheck.
++installcheck-libgnatvsn:
++
++@endif libgnatvsn
++
++.PHONY: maybe-mostlyclean-libgnatvsn mostlyclean-libgnatvsn
++maybe-mostlyclean-libgnatvsn:
++@if libgnatvsn
++maybe-mostlyclean-libgnatvsn: mostlyclean-libgnatvsn
++
++mostlyclean-libgnatvsn:
++ @: $(MAKE); $(unstage)
++ @[ -f ./libgnatvsn/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing mostlyclean in libgnatvsn" ; \
++ (cd $(HOST_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ mostlyclean) \
++ || exit 1
++
++@endif libgnatvsn
++
++.PHONY: maybe-clean-libgnatvsn clean-libgnatvsn
++maybe-clean-libgnatvsn:
++@if libgnatvsn
++maybe-clean-libgnatvsn: clean-libgnatvsn
++
++clean-libgnatvsn:
++ @: $(MAKE); $(unstage)
++ @[ -f ./libgnatvsn/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing clean in libgnatvsn" ; \
++ (cd $(HOST_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ clean) \
++ || exit 1
++
++@endif libgnatvsn
++
++.PHONY: maybe-distclean-libgnatvsn distclean-libgnatvsn
++maybe-distclean-libgnatvsn:
++@if libgnatvsn
++maybe-distclean-libgnatvsn: distclean-libgnatvsn
++
++distclean-libgnatvsn:
++ @: $(MAKE); $(unstage)
++ @[ -f ./libgnatvsn/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing distclean in libgnatvsn" ; \
++ (cd $(HOST_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ distclean) \
++ || exit 1
++
++@endif libgnatvsn
++
++.PHONY: maybe-maintainer-clean-libgnatvsn maintainer-clean-libgnatvsn
++maybe-maintainer-clean-libgnatvsn:
++@if libgnatvsn
++maybe-maintainer-clean-libgnatvsn: maintainer-clean-libgnatvsn
++
++maintainer-clean-libgnatvsn:
++ @: $(MAKE); $(unstage)
++ @[ -f ./libgnatvsn/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing maintainer-clean in libgnatvsn" ; \
++ (cd $(HOST_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ maintainer-clean) \
++ || exit 1
++
++@endif libgnatvsn
++
++
++
+ .PHONY: configure-gnattools maybe-configure-gnattools
+ maybe-configure-gnattools:
+ @if gcc-bootstrap
+@@ -57263,6 +57637,361 @@
+
+
+
++.PHONY: configure-target-libgnatvsn maybe-configure-target-libgnatvsn
++maybe-configure-target-libgnatvsn:
++@if gcc-bootstrap
++configure-target-libgnatvsn: stage_current
++@endif gcc-bootstrap
++@if target-libgnatvsn
++maybe-configure-target-libgnatvsn: configure-target-libgnatvsn
++configure-target-libgnatvsn:
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ echo "Checking multilib configuration for libgnatvsn..."; \
++ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgnatvsn ; \
++ $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp 2> /dev/null ; \
++ if test -r $(TARGET_SUBDIR)/libgnatvsn/multilib.out; then \
++ if cmp -s $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp $(TARGET_SUBDIR)/libgnatvsn/multilib.out; then \
++ rm -f $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp; \
++ else \
++ rm -f $(TARGET_SUBDIR)/libgnatvsn/Makefile; \
++ mv $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp $(TARGET_SUBDIR)/libgnatvsn/multilib.out; \
++ fi; \
++ else \
++ mv $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp $(TARGET_SUBDIR)/libgnatvsn/multilib.out; \
++ fi; \
++ test ! -f $(TARGET_SUBDIR)/libgnatvsn/Makefile || exit 0; \
++ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgnatvsn ; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo Configuring in $(TARGET_SUBDIR)/libgnatvsn; \
++ cd "$(TARGET_SUBDIR)/libgnatvsn" || exit 1; \
++ case $(srcdir) in \
++ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
++ *) topdir=`echo $(TARGET_SUBDIR)/libgnatvsn/ | \
++ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
++ esac; \
++ srcdiroption="--srcdir=$${topdir}/libgnatvsn"; \
++ libsrcdir="$$s/libgnatvsn"; \
++ rm -f no-such-file || : ; \
++ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
++ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
++ --target=${target_alias} $${srcdiroption} \
++ || exit 1
++@endif target-libgnatvsn
++
++
++
++
++
++.PHONY: all-target-libgnatvsn maybe-all-target-libgnatvsn
++maybe-all-target-libgnatvsn:
++@if gcc-bootstrap
++all-target-libgnatvsn: stage_current
++@endif gcc-bootstrap
++@if target-libgnatvsn
++TARGET-target-libgnatvsn=all
++maybe-all-target-libgnatvsn: all-target-libgnatvsn
++all-target-libgnatvsn: configure-target-libgnatvsn
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ (cd $(TARGET_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \
++ $(TARGET-target-libgnatvsn))
++@endif target-libgnatvsn
++
++
++
++
++
++.PHONY: check-target-libgnatvsn maybe-check-target-libgnatvsn
++maybe-check-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-check-target-libgnatvsn: check-target-libgnatvsn
++
++# Dummy target for uncheckable module.
++check-target-libgnatvsn:
++
++@endif target-libgnatvsn
++
++.PHONY: install-target-libgnatvsn maybe-install-target-libgnatvsn
++maybe-install-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-install-target-libgnatvsn: install-target-libgnatvsn
++
++install-target-libgnatvsn: installdirs
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ (cd $(TARGET_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
++
++@endif target-libgnatvsn
++
++.PHONY: install-strip-target-libgnatvsn maybe-install-strip-target-libgnatvsn
++maybe-install-strip-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-install-strip-target-libgnatvsn: install-strip-target-libgnatvsn
++
++install-strip-target-libgnatvsn: installdirs
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ (cd $(TARGET_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip)
++
++@endif target-libgnatvsn
++
++# Other targets (info, dvi, pdf, etc.)
++
++.PHONY: maybe-info-target-libgnatvsn info-target-libgnatvsn
++maybe-info-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-info-target-libgnatvsn: info-target-libgnatvsn
++
++# libgnatvsn doesn't support info.
++info-target-libgnatvsn:
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-dvi-target-libgnatvsn dvi-target-libgnatvsn
++maybe-dvi-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-dvi-target-libgnatvsn: dvi-target-libgnatvsn
++
++# libgnatvsn doesn't support dvi.
++dvi-target-libgnatvsn:
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-pdf-target-libgnatvsn pdf-target-libgnatvsn
++maybe-pdf-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-pdf-target-libgnatvsn: pdf-target-libgnatvsn
++
++pdf-target-libgnatvsn: \
++ configure-target-libgnatvsn
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing pdf in $(TARGET_SUBDIR)/libgnatvsn" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ pdf) \
++ || exit 1
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-html-target-libgnatvsn html-target-libgnatvsn
++maybe-html-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-html-target-libgnatvsn: html-target-libgnatvsn
++
++# libgnatvsn doesn't support html.
++html-target-libgnatvsn:
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-TAGS-target-libgnatvsn TAGS-target-libgnatvsn
++maybe-TAGS-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-TAGS-target-libgnatvsn: TAGS-target-libgnatvsn
++
++# libgnatvsn doesn't support TAGS.
++TAGS-target-libgnatvsn:
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-install-info-target-libgnatvsn install-info-target-libgnatvsn
++maybe-install-info-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-install-info-target-libgnatvsn: install-info-target-libgnatvsn
++
++# libgnatvsn doesn't support install-info.
++install-info-target-libgnatvsn:
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-install-pdf-target-libgnatvsn install-pdf-target-libgnatvsn
++maybe-install-pdf-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-install-pdf-target-libgnatvsn: install-pdf-target-libgnatvsn
++
++install-pdf-target-libgnatvsn: \
++ configure-target-libgnatvsn \
++ pdf-target-libgnatvsn
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing install-pdf in $(TARGET_SUBDIR)/libgnatvsn" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ install-pdf) \
++ || exit 1
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-install-html-target-libgnatvsn install-html-target-libgnatvsn
++maybe-install-html-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-install-html-target-libgnatvsn: install-html-target-libgnatvsn
++
++install-html-target-libgnatvsn: \
++ configure-target-libgnatvsn \
++ html-target-libgnatvsn
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing install-html in $(TARGET_SUBDIR)/libgnatvsn" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ install-html) \
++ || exit 1
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-installcheck-target-libgnatvsn installcheck-target-libgnatvsn
++maybe-installcheck-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-installcheck-target-libgnatvsn: installcheck-target-libgnatvsn
++
++# libgnatvsn doesn't support installcheck.
++installcheck-target-libgnatvsn:
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-mostlyclean-target-libgnatvsn mostlyclean-target-libgnatvsn
++maybe-mostlyclean-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-mostlyclean-target-libgnatvsn: mostlyclean-target-libgnatvsn
++
++mostlyclean-target-libgnatvsn:
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing mostlyclean in $(TARGET_SUBDIR)/libgnatvsn" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ mostlyclean) \
++ || exit 1
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-clean-target-libgnatvsn clean-target-libgnatvsn
++maybe-clean-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-clean-target-libgnatvsn: clean-target-libgnatvsn
++
++clean-target-libgnatvsn:
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing clean in $(TARGET_SUBDIR)/libgnatvsn" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ clean) \
++ || exit 1
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-distclean-target-libgnatvsn distclean-target-libgnatvsn
++maybe-distclean-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-distclean-target-libgnatvsn: distclean-target-libgnatvsn
++
++distclean-target-libgnatvsn:
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing distclean in $(TARGET_SUBDIR)/libgnatvsn" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ distclean) \
++ || exit 1
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-maintainer-clean-target-libgnatvsn maintainer-clean-target-libgnatvsn
++maybe-maintainer-clean-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-maintainer-clean-target-libgnatvsn: maintainer-clean-target-libgnatvsn
++
++maintainer-clean-target-libgnatvsn:
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libgnatvsn" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libgnatvsn && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ maintainer-clean) \
++ || exit 1
++
++@endif target-libgnatvsn
++
++
++
++
++
+ .PHONY: configure-target-libgomp maybe-configure-target-libgomp
+ maybe-configure-target-libgomp:
+ @if gcc-bootstrap
+@@ -60326,6 +61055,7 @@
+ configure-target-qthreads: stage_last
+ configure-target-rda: stage_last
+ configure-target-libada: stage_last
++configure-target-libgnatvsn: stage_last
+ configure-stage1-target-libgomp: maybe-all-stage1-gcc
+ configure-stage2-target-libgomp: maybe-all-stage2-gcc
+ configure-stage3-target-libgomp: maybe-all-stage3-gcc
+@@ -60357,6 +61087,7 @@
+ configure-target-qthreads: maybe-all-gcc
+ configure-target-rda: maybe-all-gcc
+ configure-target-libada: maybe-all-gcc
++configure-target-libgnatvsn: maybe-all-gcc
+ configure-target-libgomp: maybe-all-gcc
+ @endif gcc-no-bootstrap
+
+@@ -60657,6 +61388,8 @@
+ all-stagefeedback-libcpp: maybe-all-stagefeedback-intl
+ all-fixincludes: maybe-all-libiberty
+ all-gnattools: maybe-all-libada
++all-gnattools: maybe-all-libgnatvsn
++all-libgnatvsn: maybe-all-libada
+ all-lto-plugin: maybe-all-libiberty
+
+ all-stage1-lto-plugin: maybe-all-stage1-libiberty
+@@ -61201,6 +61934,7 @@
+ configure-target-qthreads: maybe-all-target-libgcc
+ configure-target-rda: maybe-all-target-libgcc
+ configure-target-libada: maybe-all-target-libgcc
++configure-target-libgnatvsn: maybe-all-target-libgcc
+ configure-target-libgomp: maybe-all-target-libgcc
+ @endif gcc-no-bootstrap
+
+@@ -61247,6 +61981,8 @@
+
+ configure-target-libada: maybe-all-target-newlib maybe-all-target-libgloss
+
++configure-target-libgnatvsn: maybe-all-target-newlib maybe-all-target-libgloss
++
+ configure-target-libgomp: maybe-all-target-newlib maybe-all-target-libgloss
+
+
+Index: b/src/configure.ac
+===================================================================
+--- a/src/configure.ac
++++ b/src/configure.ac
+@@ -168,7 +168,7 @@
+
+ # these libraries are used by various programs built for the host environment
+ #
+-host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr mpc ppl cloog libelf libiconv libada"
++host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr mpc ppl cloog libelf libiconv libada libgnatvsn"
+
+ # these tools are built for the host environment
+ # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
+@@ -201,6 +201,7 @@
+ ${libgcj} \
+ target-libobjc \
+ target-libada \
++ target-libgnatvsn \
+ target-libgo"
+
+ # these tools are built using the target libraries, and are intended to
+@@ -302,7 +303,7 @@
+
+ # Similarly, some are only suitable for cross toolchains.
+ # Remove these if host=target.
+-cross_only="target-libgloss target-newlib target-opcodes target-libada"
++cross_only="target-libgloss target-newlib target-opcodes target-libada target-libgnatvsn"
+
+ case $is_cross_compiler in
+ no) skipdirs="${skipdirs} ${cross_only}" ;;
+@@ -486,7 +487,7 @@
+ ENABLE_LIBADA=$enableval,
+ ENABLE_LIBADA=yes)
+ if test "${ENABLE_LIBADA}" != "yes" ; then
+- noconfigdirs="$noconfigdirs gnattools"
++ noconfigdirs="$noconfigdirs libgnatvsn gnattools"
+ fi
+
+ AC_ARG_ENABLE(libssp,
+Index: b/src/gcc/ada/gcc-interface/config-lang.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/config-lang.in
++++ b/src/gcc/ada/gcc-interface/config-lang.in
+@@ -36,8 +36,8 @@
+
+ outputs="ada/gcc-interface/Makefile ada/Makefile"
+
+-target_libs="target-libada"
+-lang_dirs="libada gnattools"
++target_libs="target-libada target-libgnatvsn"
++lang_dirs="libada libgnatvsn gnattools"
+
+ # Ada is not enabled by default for the time being.
+ build_by_default=no
diff --git a/debian/patches/ada-library-project-files-soname.diff b/debian/patches/ada-library-project-files-soname.diff
new file mode 100644
index 0000000..1bf3fd4
--- /dev/null
+++ b/debian/patches/ada-library-project-files-soname.diff
@@ -0,0 +1,77 @@
+# DP: - in project files, use the exact Library_Version provided, if any, as
+# DP: the soname of libraries; do not strip minor version numbers
+# DP: (PR ada/40025).
+
+Index: b/src/gcc/ada/mlib-tgt-specific-linux.adb
+===================================================================
+--- a/src/gcc/ada/mlib-tgt-specific-linux.adb
++++ b/src/gcc/ada/mlib-tgt-specific-linux.adb
+@@ -50,6 +50,8 @@
+
+ function Is_Archive_Ext (Ext : String) return Boolean;
+
++ function Library_Major_Minor_Id_Supported return Boolean;
++
+ ---------------------------
+ -- Build_Dynamic_Library --
+ ---------------------------
+@@ -142,7 +144,18 @@
+ return Ext = ".a" or else Ext = ".so";
+ end Is_Archive_Ext;
+
++ --------------------------------------
++ -- Library_Major_Minor_Id_Supported --
++ --------------------------------------
++
++ function Library_Major_Minor_Id_Supported return Boolean is
++ begin
++ return False;
++ end Library_Major_Minor_Id_Supported;
++
+ begin
+ Build_Dynamic_Library_Ptr := Build_Dynamic_Library'Access;
+ Is_Archive_Ext_Ptr := Is_Archive_Ext'Access;
++ Library_Major_Minor_Id_Supported_Ptr :=
++ Library_Major_Minor_Id_Supported'Access;
+ end MLib.Tgt.Specific;
+Index: b/src/gcc/ada/mlib.adb
+===================================================================
+--- a/src/gcc/ada/mlib.adb
++++ b/src/gcc/ada/mlib.adb
+@@ -31,6 +31,7 @@
+ with Opt;
+ with Output; use Output;
+
++with Mlib.Tgt;
+ with MLib.Utl; use MLib.Utl;
+
+ with Prj.Com;
+@@ -384,7 +385,7 @@
+ -- Major_Id_Name --
+ -------------------
+
+- function Major_Id_Name
++ function Major_Id_Name_If_Supported
+ (Lib_Filename : String;
+ Lib_Version : String)
+ return String
+@@ -438,6 +439,19 @@
+ else
+ return "";
+ end if;
++ end Major_Id_Name_If_Supported;
++
++ function Major_Id_Name
++ (Lib_Filename : String;
++ Lib_Version : String)
++ return String
++ is
++ begin
++ if Mlib.Tgt.Library_Major_Minor_Id_Supported then
++ return Major_Id_Name_If_Supported (Lib_Filename, Lib_Version);
++ else
++ return "";
++ end if;
+ end Major_Id_Name;
+
+ -- Package elaboration
diff --git a/debian/patches/ada-link-lib.diff b/debian/patches/ada-link-lib.diff
new file mode 100644
index 0000000..3ee2fc1
--- /dev/null
+++ b/debian/patches/ada-link-lib.diff
@@ -0,0 +1,1863 @@
+# 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.
+# DP: - Instead of building libada as a target library only, build it as
+# DP: both a host and, if different, target library.
+# DP: - Build the GNAT tools in their top-level directory; do not use
+# DP: recursive makefiles.
+# DP: - Link the GNAT tools dynamically.
+# DP: - Fix a bug in src/gnattools/configure.ac whereby a nonexistent version
+# DP: of indepsw's body was selected. Regenerate configure. (PR ada/27300)
+
+# This patch seems large, but the hunks in Makefile.in are actually
+# generated from Makefile.def using autogen.
+
+Index: b/src/gcc/ada/gcc-interface/config-lang.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/config-lang.in
++++ b/src/gcc/ada/gcc-interface/config-lang.in
+@@ -37,7 +37,7 @@
+ outputs="ada/gcc-interface/Makefile ada/Makefile"
+
+ target_libs="target-libada"
+-lang_dirs="gnattools"
++lang_dirs="libada gnattools"
+
+ # Ada is not enabled by default for the time being.
+ build_by_default=no
+Index: b/src/gcc/ada/link.c
+===================================================================
+--- a/src/gcc/ada/link.c
++++ b/src/gcc/ada/link.c
+@@ -189,9 +189,9 @@
+
+ #elif defined (__FreeBSD__)
+ const char *__gnat_object_file_option = "";
+-const char *__gnat_run_path_option = "-Wl,-rpath,";
+-char __gnat_shared_libgnat_default = STATIC;
+-char __gnat_shared_libgcc_default = STATIC;
++const char *__gnat_run_path_option = "";
++char __gnat_shared_libgnat_default = SHARED;
++char __gnat_shared_libgcc_default = SHARED;
+ int __gnat_link_max = 8192;
+ unsigned char __gnat_objlist_file_supported = 1;
+ unsigned char __gnat_using_gnu_linker = 1;
+@@ -213,9 +213,9 @@
+
+ #elif defined (linux) || defined(__GLIBC__)
+ const char *__gnat_object_file_option = "";
+-const char *__gnat_run_path_option = "-Wl,-rpath,";
+-char __gnat_shared_libgnat_default = STATIC;
+-char __gnat_shared_libgcc_default = STATIC;
++const char *__gnat_run_path_option = "";
++char __gnat_shared_libgnat_default = SHARED;
++char __gnat_shared_libgcc_default = SHARED;
+ int __gnat_link_max = 8192;
+ unsigned char __gnat_objlist_file_supported = 1;
+ unsigned char __gnat_using_gnu_linker = 1;
+Index: b/src/gcc/ada/gcc-interface/Makefile.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -102,7 +102,7 @@
+ MAKEINFO = makeinfo
+ TEXI2DVI = texi2dvi
+ TEXI2PDF = texi2pdf
+-GNATBIND_FLAGS = -static -x
++GNATBIND_FLAGS = -shared -x
+ ADA_CFLAGS =
+ ADAFLAGS = -W -Wall -gnatpg -gnata
+ SOME_ADAFLAGS =-gnata
+@@ -241,7 +241,6 @@
+ LIBDEPS = $(LIBINTL_DEP) $(LIBIBERTY)
+ # Default is no TGT_LIB; one might be passed down or something
+ TGT_LIB =
+-TOOLS_LIBS = $(EXTRA_GNATTOOLS_OBJS) targext.o link.o $(LIBGNAT) ../../../libiberty/libiberty.a $(SYSLIBS) $(TGT_LIB)
+
+ # Specify the directories to be searched for header files.
+ # Both . and srcdir are used, in that order,
+@@ -287,30 +286,6 @@
+ # defined in this file into the environment.
+ .NOEXPORT:
+
+-# Lists of files for various purposes.
+-
+-GNATLINK_OBJS = gnatlink.o \
+- a-except.o ali.o alloc.o butil.o casing.o csets.o debug.o fmap.o fname.o \
+- gnatvsn.o hostparm.o indepsw.o interfac.o i-c.o i-cstrin.o namet.o opt.o \
+- osint.o output.o rident.o s-exctab.o s-secsta.o s-stalib.o s-stoele.o \
+- sdefault.o snames.o stylesw.o switch.o system.o table.o targparm.o tree_io.o \
+- types.o validsw.o widechar.o
+-
+-GNATMAKE_OBJS = a-except.o ali.o ali-util.o aspects.o s-casuti.o \
+- alloc.o atree.o binderr.o butil.o casing.o csets.o debug.o elists.o einfo.o\
+- erroutc.o errutil.o err_vars.o fmap.o fname.o fname-uf.o fname-sf.o \
+- gnatmake.o gnatvsn.o hostparm.o interfac.o i-c.o i-cstrin.o krunch.o lib.o \
+- make.o makeusg.o makeutl.o mlib.o mlib-fil.o mlib-prj.o mlib-tgt.o \
+- mlib-tgt-specific.o mlib-utl.o namet.o nlists.o opt.o osint.o osint-m.o \
+- output.o prj.o prj-attr.o prj-attr-pm.o prj-com.o prj-dect.o prj-env.o \
+- prj-conf.o prj-pp.o \
+- prj-err.o prj-ext.o prj-nmsc.o prj-pars.o prj-part.o prj-proc.o prj-strt.o \
+- prj-tree.o prj-util.o rident.o s-exctab.o s-secsta.o s-stalib.o s-stoele.o \
+- scans.o scng.o sdefault.o sfn_scan.o s-purexc.o s-htable.o sinfo.o sinput.o \
+- sinput-c.o sinput-p.o snames.o stand.o stringt.o styleg.o stylesw.o system.o \
+- validsw.o switch.o switch-m.o table.o targparm.o tempdir.o tree_io.o types.o \
+- uintp.o uname.o urealp.o usage.o widechar.o scil_ll.o \
+- $(EXTRA_GNATMAKE_OBJS)
+
+ # Convert the target variable into a space separated list of architecture,
+ # manufacturer, and operating system and assign each of those to its own
+@@ -1281,6 +1256,11 @@
+ GMEM_LIB = gmemlib
+ 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<a-excpol-abort.adb \
+@@ -2254,96 +2234,6 @@
+ a-[a-o]*.adb a-[p-z]*.adb a-[a-o]*.ads a-[p-z]*.ads g-*.ad? i-*.ad? \
+ s-[a-o]*.adb s-[p-z]*.adb s-[a-o]*.ads s-[p-z]*.ads
+
+-LIBGNAT=../$(RTSDIR)/libgnat.a
+-
+-GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES)
+-
+-# when compiling the tools, the runtime has to be first on the path so that
+-# it hides the runtime files lying with the rest of the sources
+-ifeq ($(TOOLSCASE),native)
+- vpath %.ads ../$(RTSDIR) ../
+- vpath %.adb ../$(RTSDIR) ../
+- vpath %.c ../$(RTSDIR) ../
+- vpath %.h ../$(RTSDIR) ../
+-endif
+-
+-# in the cross tools case, everything is compiled with the native
+-# gnatmake/link. Therefore only -I needs to be modified in ADA_INCLUDES
+-ifeq ($(TOOLSCASE),cross)
+- vpath %.ads ../
+- vpath %.adb ../
+- vpath %.c ../
+- vpath %.h ../
+-endif
+-
+-common-tools:
+- $(GNATMAKE) -c -b $(ADA_INCLUDES) \
+- --GNATBIND="$(GNATBIND)" --GCC="$(CC) $(ALL_ADAFLAGS)" \
+- gnatchop gnatcmd gnatkr gnatls gnatprep gnatxref gnatfind gnatname \
+- gnatclean -bargs $(ADA_INCLUDES) $(GNATBIND_FLAGS)
+- $(GNATLINK) -v gnatcmd -o ../../gnat$(exeext) \
+- --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+- $(GNATLINK) -v gnatchop -o ../../gnatchop$(exeext) \
+- --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+- $(GNATLINK) -v gnatkr -o ../../gnatkr$(exeext) \
+- --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+- $(GNATLINK) -v gnatls -o ../../gnatls$(exeext) \
+- --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+- $(GNATLINK) -v gnatprep -o ../../gnatprep$(exeext) \
+- --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+- $(GNATLINK) -v gnatxref -o ../../gnatxref$(exeext) \
+- --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+- $(GNATLINK) -v gnatfind -o ../../gnatfind$(exeext) \
+- --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+- $(GNATLINK) -v gnatname -o ../../gnatname$(exeext) \
+- --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+- $(GNATLINK) -v gnatclean -o ../../gnatclean$(exeext) \
+- --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-
+-../../gnatsym$(exeext):
+- $(GNATMAKE) -c $(ADA_INCLUDES) gnatsym --GCC="$(CC) $(ALL_ADAFLAGS)"
+- $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatsym
+- $(GNATLINK) -v gnatsym -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-
+-../../gnatdll$(exeext):
+- $(GNATMAKE) -c $(ADA_INCLUDES) gnatdll --GCC="$(CC) $(ALL_ADAFLAGS)"
+- $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatdll
+- $(GNATLINK) -v gnatdll -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-
+-../../vxaddr2line$(exeext): targext.o
+- $(GNATMAKE) -c $(ADA_INCLUDES) vxaddr2line --GCC="$(CC) $(ALL_ADAFLAGS)"
+- $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) vxaddr2line
+- $(GNATLINK) -v vxaddr2line -o $@ --GCC="$(GCC_LINK)" targext.o $(CLIB)
+-
+-gnatmake-re: link.o targext.o
+- $(GNATMAKE) $(ADA_INCLUDES) -u sdefault --GCC="$(CC) $(MOST_ADA_FLAGS)"
+- $(GNATMAKE) -c $(ADA_INCLUDES) gnatmake --GCC="$(CC) $(ALL_ADAFLAGS)"
+- $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatmake
+- $(GNATLINK) -v gnatmake -o ../../gnatmake$(exeext) \
+- --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-
+-# Note the use of the "mv" command in order to allow gnatlink to be linked with
+-# with the former version of gnatlink itself which cannot override itself.
+-gnatlink-re: link.o targext.o
+- $(GNATMAKE) -c $(ADA_INCLUDES) gnatlink --GCC="$(CC) $(ALL_ADAFLAGS)"
+- $(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatlink
+- $(GNATLINK) -v gnatlink -o ../../gnatlinknew$(exeext) \
+- --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+- $(MV) ../../gnatlinknew$(exeext) ../../gnatlink$(exeext)
+-
+-# Needs to be built with CC=gcc
+-# Since the RTL should be built with the latest compiler, remove the
+-# stamp target in the parent directory whenever gnat1 is rebuilt
+-
+-# Likewise for the tools
+-../../gnatmake$(exeext): $(P) b_gnatm.o link.o targext.o $(GNATMAKE_OBJS)
+- $(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) \
+- $(TOOLS_LIBS)
+-
+-../../gnatlink$(exeext): $(P) b_gnatl.o link.o targext.o $(GNATLINK_OBJS)
+- $(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) \
+- $(TOOLS_LIBS)
+-
+ ../stamp-gnatlib-$(RTSDIR):
+ @if [ ! -f stamp-gnatlib-$(RTSDIR) ] ; \
+ then \
+@@ -2381,13 +2271,9 @@
+ # contain the debug information for the shared libraries on darwin)
+ for file in gnat gnarl; do \
+ if [ -f $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) ]; then \
+- $(INSTALL) $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \
++ $(INSTALL) $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
+ $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
+ fi; \
+- if [ -f $(RTSDIR)/lib$${file}$(soext) ]; then \
+- $(LN_S) lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \
+- $(DESTDIR)$(ADA_RTL_OBJ_DIR)/lib$${file}$(soext); \
+- fi; \
+ if [ -d $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).dSYM ]; then \
+ $(CP) -r $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).dSYM \
+ $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
+@@ -2400,18 +2286,6 @@
+ cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.adb
+ cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.ads
+
+-../stamp-gnatlib2-$(RTSDIR):
+- $(RM) $(RTSDIR)/s-*.ali
+- $(RM) $(RTSDIR)/s-*$(objext)
+- $(RM) $(RTSDIR)/a-*.ali
+- $(RM) $(RTSDIR)/a-*$(objext)
+- $(RM) $(RTSDIR)/*.ali
+- $(RM) $(RTSDIR)/*$(objext)
+- $(RM) $(RTSDIR)/*$(arext)
+- $(RM) $(RTSDIR)/*$(soext)
+- touch ../stamp-gnatlib2-$(RTSDIR)
+- $(RM) ../stamp-gnatlib-$(RTSDIR)
+-
+ # NOTE: The $(foreach ...) commands assume ";" is the valid separator between
+ # successive target commands. Although the Gnu make documentation
+ # implies this is true on all systems, I suspect it may not be, So care
+@@ -2421,7 +2295,7 @@
+
+ # GNULLI Begin ###########################################################
+
+-../stamp-gnatlib1-$(RTSDIR): Makefile ../stamp-gnatlib2-$(RTSDIR)
++../stamp-gnatlib1-$(RTSDIR): Makefile
+ $(RMDIR) $(RTSDIR)
+ $(MKDIR) $(RTSDIR)
+ $(CHMOD) u+w $(RTSDIR)
+@@ -2486,7 +2360,7 @@
+ # Example: cd $(RTSDIR); ar rc libfoo.a $(LONG_LIST_OF_OBJS)
+ # is guaranteed to overflow the buffer.
+
+-gnatlib: ../stamp-gnatlib1-$(RTSDIR) ../stamp-gnatlib2-$(RTSDIR) $(RTSDIR)/s-oscons.ads
++gnatlib: ../stamp-gnatlib1-$(RTSDIR) $(RTSDIR)/s-oscons.ads
+ $(MAKE) -C $(RTSDIR) \
+ CC="`echo \"$(GCC_FOR_TARGET)\" \
+ | sed -e 's,\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
+@@ -2520,36 +2394,49 @@
+ $(RTSDIR)/memtrack.o
+ $(RANLIB_FOR_TARGET) $(RTSDIR)/libgmem$(arext)
+ endif
+- $(CHMOD) a-wx $(RTSDIR)/*.ali
+ touch ../stamp-gnatlib-$(RTSDIR)
+
+ # Warning: this target assumes that LIBRARY_VERSION has been set correctly.
+-gnatlib-shared-default:
+- $(MAKE) $(FLAGS_TO_PASS) \
+- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+- GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
+- GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+- MULTISUBDIR="$(MULTISUBDIR)" \
+- THREAD_KIND="$(THREAD_KIND)" \
+- gnatlib
+- $(RM) $(RTSDIR)/libgna*$(soext)
++gnatlib-shared-default: ../stamp-gnatlib1-$(RTSDIR)
++ $(MAKE) -C $(RTSDIR) \
++ CC="`echo \"$(GCC_FOR_TARGET)\" \
++ | sed -e 's,^\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
++ INCLUDES="$(INCLUDES_FOR_SUBDIR) -I./../.." \
++ CFLAGS="$(GNATLIBCFLAGS_FOR_C)" \
++ srcdir=$(fsrcdir) \
++ -f ../Makefile $(LIBGNAT_OBJS)
++ $(MAKE) -C $(RTSDIR) \
++ CC="`echo \"$(GCC_FOR_TARGET)\" \
++ | sed -e 's,^\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
++ ADA_INCLUDES="" \
++ CFLAGS="$(GNATLIBCFLAGS) $(GNATLIBCFLAGS_FOR_C) $(TARGET_LIBGCC2_CFLAGS)" \
++ ADAFLAGS="$(GNATLIBFLAGS)" \
++ THREAD_KIND="$(THREAD_KIND)" \
++ srcdir=$(fsrcdir) \
++ -f ../Makefile \
++ $(GNATRTL_OBJS)
++ $(RM) $(RTSDIR)/libgna*$(soext) $(RTSDIR)/libgna*$(soext).1
+ cd $(RTSDIR); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
+ $(TARGET_LIBGCC2_CFLAGS) \
+- -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
++ -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
+ $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
+ g-trasym.o convert_addresses.o \
+- $(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
++ $(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
+ $(MISCLIB) -lm
+ cd $(RTSDIR); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
+ $(TARGET_LIBGCC2_CFLAGS) \
+- -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
++ -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
+ $(GNATRTL_TASKING_OBJS) \
+- $(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
++ $(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
+ $(THREADSLIB)
+- cd $(RTSDIR); $(LN_S) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+- libgnat$(soext)
+- cd $(RTSDIR); $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+- libgnarl$(soext)
++ cd $(RTSDIR); for lib in gnat gnarl; do \
++ l=lib$${lib}$(hyphen)$(LIBRARY_VERSION)$(soext); \
++ $(LN_S) $$l.1 $$l; \
++ done
++# Delete the object files, lest they be linked statically into the tools
++# executables. Only the .ali, .a and .so files must remain.
++ rm -f $(RTSDIR)/*.o
++ $(CHMOD) a-wx $(RTSDIR)/*.ali
+
+ gnatlib-shared-dual:
+ $(MAKE) $(FLAGS_TO_PASS) \
+@@ -2558,36 +2445,32 @@
+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+ MULTISUBDIR="$(MULTISUBDIR)" \
+ THREAD_KIND="$(THREAD_KIND)" \
+- gnatlib-shared-default
+- $(MV) $(RTSDIR)/libgna*$(soext) .
+- $(RM) ../stamp-gnatlib2-$(RTSDIR)
++ gnatlib
++ $(RM) $(RTSDIR)/*.o $(RTSDIR)/*.ali
+ $(MAKE) $(FLAGS_TO_PASS) \
+ GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+ GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+ MULTISUBDIR="$(MULTISUBDIR)" \
+ THREAD_KIND="$(THREAD_KIND)" \
+- gnatlib
+- $(MV) libgna*$(soext) $(RTSDIR)
++ gnatlib-shared-default
+
+ gnatlib-shared-dual-win32:
+ $(MAKE) $(FLAGS_TO_PASS) \
+ GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+- GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
++ GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+ MULTISUBDIR="$(MULTISUBDIR)" \
+ THREAD_KIND="$(THREAD_KIND)" \
+- gnatlib-shared-win32
+- $(MV) $(RTSDIR)/libgna*$(soext) .
+- $(RM) ../stamp-gnatlib2-$(RTSDIR)
++ gnatlib
++ $(RM) $(RTSDIR)/*.o $(RTSDIR)/*.ali
+ $(MAKE) $(FLAGS_TO_PASS) \
+ GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+- GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
++ GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+ MULTISUBDIR="$(MULTISUBDIR)" \
+ THREAD_KIND="$(THREAD_KIND)" \
+- gnatlib
+- $(MV) libgna*$(soext) $(RTSDIR)
++ gnatlib-shared-win32
+
+ # ??? we need to add the option to support auto-import of arrays/records to
+ # the GNATLIBFLAGS when this will be supported by GNAT. At this point we will
+@@ -2713,22 +2596,6 @@
+ gnat-cross: force
+ make $(GNAT1_ADA_OBJS) CC="gcc -B../stage1/" CFLAGS="-S -gnatp"
+
+-# Compiling object files from source files.
+-
+-# Note that dependencies on obstack.h are not written
+-# because that file is not part of GCC.
+-# Dependencies on gvarargs.h are not written
+-# because all that file does, when not compiling with GCC,
+-# is include the system varargs.h.
+-
+-b_gnatl.c : $(GNATLINK_OBJS)
+- $(GNATBIND) -C $(ADA_INCLUDES) -o b_gnatl.c gnatlink.ali
+-b_gnatl.o : b_gnatl.c
+-
+-b_gnatm.c : $(GNATMAKE_OBJS)
+- $(GNATBIND) -C $(ADA_INCLUDES) -o b_gnatm.c gnatmake.ali
+-b_gnatm.o : b_gnatm.c
+-
+ ADA_INCLUDE_DIR = $(libsubdir)/adainclude
+ ADA_RTL_OBJ_DIR = $(libsubdir)/adalib
+
+Index: b/src/gnattools/Makefile.in
+===================================================================
+--- a/src/gnattools/Makefile.in
++++ b/src/gnattools/Makefile.in
+@@ -18,6 +18,8 @@
+ # Default target; must be first.
+ all: gnattools
+
++.SUFFIXES:
++
+ # Standard autoconf-set variables.
+ SHELL = @SHELL@
+ srcdir = @srcdir@
+@@ -33,102 +35,16 @@
+ LN_S=@LN_S@
+ target_noncanonical=@target_noncanonical@
+
+-# Variables for the user (or the top level) to override.
+-exeext = @EXEEXT@
+-objext=.o
+-TRACE=no
+-ADA_FOR_BUILD=
+-ADA_FOR_TARGET=
+-LDFLAGS=
+-PWD_COMMAND = $${PWDCMD-pwd}
+-
+-# The tedious process of getting CFLAGS right.
+-CFLAGS=-g
+-LOOSE_WARN = -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
+-GCC_WARN_CFLAGS = $(LOOSE_WARN)
+-WARN_CFLAGS = @warn_cflags@
+-
+-ADA_CFLAGS=@ADA_CFLAGS@
+-
+-# Variables for gnattools.
+-ADAFLAGS= -gnatpg -gnata
+-
+-# For finding the GCC build dir, which is used far too much
+-GCC_DIR=../gcc
+-
+-# Absolute srcdir for gcc (why do we want absolute? I dunno)
+-fsrcdir := $(shell cd $(srcdir)/../gcc/; ${PWD_COMMAND})
+-
+-# Useful "subroutines" for the excess includes
+-INCLUDES_FOR_SUBDIR = -I. -I.. -I../.. -I$(fsrcdir)/ada -I$(fsrcdir)/config \
+- -I$(fsrcdir)/../include -I$(fsrcdir)
+-ADA_INCLUDES_FOR_SUBDIR = -I. -I$(fsrcdir)/ada
+-
+-# Variables for gnattools1, native
+-TOOLS_FLAGS_TO_PASS_1= \
+- "CC=../../xgcc -B../../" \
+- "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
+- "LDFLAGS=$(LDFLAGS)" \
+- "ADAFLAGS=$(ADAFLAGS)" \
+- "ADA_CFLAGS=$(ADA_CFLAGS)" \
+- "INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
+- "ADA_INCLUDES=-I- -I../rts $(ADA_INCLUDES_FOR_SUBDIR)"\
+- "exeext=$(exeext)" \
+- "fsrcdir=$(fsrcdir)" \
+- "srcdir=$(fsrcdir)" \
+- "GNATBIND=../../gnatbind" \
+- "TOOLSCASE=native"
+-
+-# Variables for regnattools
+-TOOLS_FLAGS_TO_PASS_1re= \
+- "CC=../../xgcc -B../../" \
+- "CFLAGS=$(CFLAGS)" \
+- "ADAFLAGS=$(ADAFLAGS)" \
+- "ADA_CFLAGS=$(ADA_CFLAGS)" \
+- "INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
+- "ADA_INCLUDES=-I../rts $(ADA_INCLUDES_FOR_SUBDIR)"\
+- "exeext=$(exeext)" \
+- "fsrcdir=$(fsrcdir)" \
+- "srcdir=$(fsrcdir)" \
+- "GNATMAKE=../../gnatmake" \
+- "GNATLINK=../../gnatlink" \
+- "GNATBIND=../../gnatbind" \
+- "TOOLSCASE=cross" \
+- "INCLUDES="
+-
+-# Variables for gnattools2, native
+-TOOLS_FLAGS_TO_PASS_NATIVE= \
+- "CC=../../xgcc -B../../" \
+- "CFLAGS=$(CFLAGS)" \
+- "ADAFLAGS=$(ADAFLAGS)" \
+- "ADA_CFLAGS=$(ADA_CFLAGS)" \
+- "INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
+- "ADA_INCLUDES=-I../rts $(ADA_INCLUDES_FOR_SUBDIR)" \
+- "exeext=$(exeext)" \
+- "fsrcdir=$(fsrcdir)" \
+- "srcdir=$(fsrcdir)" \
+- "GNATMAKE=../../gnatmake" \
+- "GNATLINK=../../gnatlink" \
+- "GNATBIND=../../gnatbind" \
+- "TOOLSCASE=native"
+-
+-# Variables for gnattools, cross
+-TOOLS_FLAGS_TO_PASS_CROSS= \
+- "CC=$(CC)" \
+- "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
+- "LDFLAGS=$(LDFLAGS)" \
+- "ADAFLAGS=$(ADAFLAGS)" \
+- "ADA_CFLAGS=$(ADA_CFLAGS)" \
+- "INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
+- "ADA_INCLUDES=-I$(RTS_DIR)../adainclude -I$(RTS_DIR) $(ADA_INCLUDES_FOR_SUBDIR)" \
+- "exeext=$(exeext)" \
+- "fsrcdir=$(fsrcdir)" \
+- "srcdir=$(fsrcdir)" \
+- "GNATMAKE=gnatmake" \
+- "GNATLINK=gnatlink" \
+- "GNATBIND=gnatbind" \
+- "TOOLSCASE=cross" \
+- "LIBGNAT="
++CFLAGS=-O2 -Wall
++INCLUDES = -I@srcdir@/../gcc/ada -I@srcdir@/../gcc
++ADA_CFLAGS=-O2 -gnatn
++ADA_INCLUDES=-nostdinc -I- -I. -I../gcc/ada/rts -I@srcdir@/../gcc/ada
++LIB_VERSION=$(strip $(shell grep ' Library_Version :' \
++ @srcdir@/../gcc/ada/gnatvsn.ads | sed -e 's/.*"\(.*\)".*/\1/'))
++ADA_LIBS := -L../gcc/ada/rts -lgnat-$(LIB_VERSION)
++
++# We will use the just-built compiler to compile and link everything.
++GCC=../gcc/xgcc -B../gcc/
+
+ # File lists
+ # ----------
+@@ -137,121 +53,236 @@
+ EXTRA_GNATTOOLS = @EXTRA_GNATTOOLS@
+ TOOLS_TARGET_PAIRS = @TOOLS_TARGET_PAIRS@
+
++# Stage 1 builds xgcc and gnatbind; we can use them to build
++# gnatmake-static and gnatlink-static, then use gnatmake-static and
++# gnatlink-static to build the other tools. The reason we first build
++# statically-linked versions of gnatmake and gnatlink is so we can run
++# them with confidence on all build platforms, without LD_LIBRARY_PATH
++# or some such variable.
++
++# The tools we will build using gnatmake-static and gnatlink-static.
++TOOLS := gnat gnatbind gnatchop gnatclean gnatfind gnatkr gnatls gnatlink
++TOOLS += gnatmake gnatname gnatprep gnatxref
++
++# Since we don't have gnatmake, we must specify the full list of
++# object files necessary to build gnatmake and gnatlink.
++# TODO: remove from these lists the objects that are part of
++# libgnatvsn and libgnatprj.
++GNATLINK_OBJS = \
++ali.o \
++alloc.o \
++butil.o \
++casing.o \
++csets.o \
++debug.o \
++fmap.o \
++fname.o \
++gnatlink.o \
++gnatvsn.o \
++hostparm.o \
++indepsw.o \
++namet.o \
++opt.o \
++osint.o \
++output.o \
++prefix.o \
++rident.o \
++sdefault.o \
++snames.o \
++stylesw.o \
++switch.o \
++table.o \
++targparm.o \
++tree_io.o \
++types.o \
++validsw.o \
++version.o \
++widechar.o
++
++GNATMAKE_OBJS = \
++ali-util.o \
++ali.o \
++alloc.o \
++atree.o \
++binderr.o \
++butil.o \
++casing.o \
++csets.o \
++debug.o \
++einfo.o\
++elists.o \
++err_vars.o \
++erroutc.o \
++errutil.o \
++fmap.o \
++fname-sf.o \
++fname-uf.o \
++fname.o \
++gnatmake.o \
++gnatvsn.o \
++hostparm.o \
++krunch.o \
++lib.o \
++make.o \
++makeusg.o \
++makeutl.o \
++mlib-fil.o \
++mlib-prj.o \
++mlib-tgt.o \
++mlib-tgt-specific.o \
++mlib-utl.o \
++mlib.o \
++namet.o \
++nlists.o \
++opt.o \
++osint-m.o \
++osint.o \
++output.o \
++prefix.o \
++prj-attr-pm.o \
++prj-attr.o \
++prj-com.o \
++prj-dect.o \
++prj-env.o \
++prj-err.o \
++prj-ext.o \
++prj-nmsc.o \
++prj-pars.o \
++prj-part.o \
++prj-proc.o \
++prj-strt.o \
++prj-tree.o \
++prj-util.o \
++prj.o \
++rident.o \
++scans.o \
++scng.o \
++sdefault.o \
++sfn_scan.o \
++sinfo.o \
++sinput-c.o \
++sinput-p.o \
++sinput.o \
++snames.o \
++stand.o \
++stringt.o \
++styleg.o \
++stylesw.o \
++switch-m.o \
++switch.o \
++table.o \
++targparm.o \
++tempdir.o \
++tree_io.o \
++types.o \
++uintp.o \
++uname.o \
++urealp.o \
++usage.o \
++validsw.o \
++version.o \
++widechar.o \
++$(EXTRA_GNATMAKE_OBJS)
++
+ # Makefile targets
+ # ----------------
+
+ .PHONY: gnattools gnattools-native gnattools-cross regnattools
+ gnattools: @default_gnattools_target@
+
+-# Sanity check
+-$(GCC_DIR)/stamp-gnatlib-rts:
+- @if [ ! -f $(GCC_DIR)/stamp-gnatlib-rts ] ; \
+- then \
+- echo "Cannot build gnattools while gnatlib is out of date or unbuilt" ; \
+- false; \
+- else \
+- true; \
+- fi
+-
+-
+ # Build directory for the tools. Let's copy the target-dependent
+ # sources using the same mechanism as for gnatlib. The other sources are
+-# accessed using the vpath directive in ada/Makefile.in
++# accessed using the vpath directive.
++
++stamp-gnattools-sources:
++ $(LN_S) ../gcc/ada/sdefault.adb .
++ $(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
++ rm -f $(word 1,$(subst <, ,$(PAIR)));\
++ $(LN_S) @srcdir@/../gcc/ada/$(word 2,$(subst <, ,$(PAIR))) \
++ $(word 1,$(subst <, ,$(PAIR)));)
++ touch $@
++
++gnattools-native: ../gcc/ada/rts/libgnat-$(LIB_VERSION).so
++gnattools-native: stamp-gnattools-sources
++gnattools-native: $(TOOLS)
++
++$(TOOLS) gnatcmd: | gnatmake-static gnatlink-static
++
++vpath %.c @srcdir@/../gcc/ada:@srcdir@/../gcc
++vpath %.h @srcdir@/../gcc/ada
++vpath %.adb .:@srcdir@/../gcc/ada
++vpath %.ads @srcdir@/../gcc/ada
++
++# Because the just-built gcc is a host tool like us, we can use some
++# of its object files, e.g. prefix.o and version.o.
++vpath prefix.o ../gcc
++vpath version.o ../gcc
++
++# gnatlink
++
++gnatlink-static: $(GNATLINK_OBJS) b_gnatl.o link.o
++ $(GCC) -o $@ $^ \
++ ../gcc/ada/rts/libgnat.a \
++ ../libiberty/libiberty.a
++
++gnatlink: $(GNATLINK_OBJS) b_gnatl.o link.o
++ $(GCC) -o $@ $^ $(ADA_LIBS) ../libiberty/libiberty.a
++
++b_gnatl.o: b_gnatl.c adaint.h
++ $(GCC) -c -o $@ $(CFLAGS) $<
++
++b_gnatl.c: $(GNATLINK_OBJS)
++ ../gcc/gnatbind -C -o $@ $(ADA_INCLUDES) gnatlink.ali
++
++# gnatmake
++
++gnatmake-static: $(GNATMAKE_OBJS) b_gnatm.o link.o
++ $(GCC) -o $@ $(ADA_CFLAGS) $^ \
++ ../gcc/ada/rts/libgnat.a \
++ ../libiberty/libiberty.a
++
++gnatmake: $(GNATMAKE_OBJS) b_gnatm.o link.o
++ $(GCC) -o $@ $(ADA_CFLAGS) $^ $(ADA_LIBS) ../libiberty/libiberty.a
++
++b_gnatm.o: b_gnatm.c adaint.h
++ $(GCC) -c -o $@ $(CFLAGS) $<
++
++b_gnatm.c: $(GNATMAKE_OBJS) adaint.h
++ ../gcc/gnatbind -C -o $@ $(ADA_INCLUDES) gnatmake.ali
++
++# Other tools
++gnatkr: version.o
++ ./gnatmake-static -c -b $@ $(ADA_CFLAGS) $(ADA_INCLUDES) \
++ --GCC="$(GCC)" \
++ --GNATBIND=../gcc/gnatbind
++ ./gnatlink-static -o $@ $@.ali $^ $(ADA_INCLUDES) $(ADA_LIBS) \
++ --GCC="$(GCC) $(ADA_INCLUDES)"
++
++gnat: gnatcmd
++ cp -lp $< $@
++
++gnatbind gnatchop gnatclean gnatcmd gnatfind gnatls gnatname gnatprep gnatxref: \
++link.o version.o prefix.o
++ ./gnatmake-static -c -b $@ $(ADA_CFLAGS) $(ADA_INCLUDES) \
++ --GCC="$(GCC)" \
++ --GNATBIND=../gcc/gnatbind
++ ./gnatlink-static -o $@ $@.ali $^ $(ADA_INCLUDES) $(ADA_LIBS) \
++ ../libiberty/libiberty.a \
++ --GCC="$(GCC) $(ADA_INCLUDES)"
++
++# Force compiling sdefault.adb, not .ads, to produce sdefault.o
++sdefault.o: sdefault.adb
++
++sdefault.adb: stamp-gnattools-sources
++
++%.o: %.adb
++ $(GCC) -c -o $@ $< $(ADA_CFLAGS) $(ADA_INCLUDES)
++
++%.o: %.ads
++ $(GCC) -c -o $@ $< $(ADA_CFLAGS) $(ADA_INCLUDES)
+
+-$(GCC_DIR)/stamp-tools:
+- -rm -rf $(GCC_DIR)/ada/tools
+- -mkdir -p $(GCC_DIR)/ada/tools
+- -(cd $(GCC_DIR)/ada/tools; $(LN_S) ../sdefault.adb ../snames.ads ../snames.adb .)
+- -$(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
+- rm -f $(GCC_DIR)/ada/tools/$(word 1,$(subst <, ,$(PAIR)));\
+- $(LN_S) $(fsrcdir)/ada/$(word 2,$(subst <, ,$(PAIR))) \
+- $(GCC_DIR)/ada/tools/$(word 1,$(subst <, ,$(PAIR)));)
+- touch $(GCC_DIR)/stamp-tools
+-
+-# gnatmake/link tools cannot always be built with gnatmake/link for bootstrap
+-# reasons: gnatmake should be built with a recent compiler, a recent compiler
+-# may not generate ALI files compatible with an old gnatmake so it is important
+-# to be able to build gnatmake without a version of gnatmake around. Once
+-# everything has been compiled once, gnatmake can be recompiled with itself
+-# (see target regnattools)
+-gnattools-native: $(GCC_DIR)/stamp-tools $(GCC_DIR)/stamp-gnatlib-rts
+- # gnattools1
+- $(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
+- $(TOOLS_FLAGS_TO_PASS_1) \
+- ../../gnatmake$(exeext) ../../gnatlink$(exeext)
+- # gnattools2
+- $(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
+- $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
+-
+-# gnatmake/link can be built with recent gnatmake/link if they are available.
+-# This is especially convenient for building cross tools or for rebuilding
+-# the tools when the original bootstrap has already be done.
+-regnattools: $(GCC_DIR)/stamp-gnatlib-rts
+- # gnattools1-re
+- $(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
+- $(TOOLS_FLAGS_TO_PASS_1re) \
+- gnatmake-re gnatlink-re
+- # gnattools2
+- $(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
+- $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
+-
+-# For cross builds of gnattools,
+-# put the host RTS dir first in the PATH to hide the default runtime
+-# files that are among the sources
+-# FIXME: This should be done in configure.
+-RTS_DIR:=$(strip $(subst \,/,$(shell gnatls -v | grep adalib )))
+-gnattools-cross: $(GCC_DIR)/stamp-tools
+- # gnattools1-re
+- $(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
+- $(TOOLS_FLAGS_TO_PASS_CROSS) INCLUDES="" \
+- gnatmake-re gnatlink-re
+- # gnattools2
+- $(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
+- $(TOOLS_FLAGS_TO_PASS_CROSS) common-tools
+- # Rename cross tools to where the GCC makefile wants them when
+- # installing. FIXME: installation should be done elsewhere.
+- if [ -f $(GCC_DIR)/gnatbind$(exeext) ] ; then \
+- mv $(GCC_DIR)/gnatbind$(exeext) $(GCC_DIR)/gnatbind-cross$(exeext); \
+- fi
+- if [ -f $(GCC_DIR)/gnatchop$(exeext) ] ; then \
+- mv $(GCC_DIR)/gnatchop$(exeext) $(GCC_DIR)/gnatchop-cross$(exeext); \
+- fi
+- if [ -f $(GCC_DIR)/gnat$(exeext) ] ; then \
+- mv $(GCC_DIR)/gnat$(exeext) $(GCC_DIR)/gnat-cross$(exeext); \
+- fi
+- if [ -f $(GCC_DIR)/gnatkr$(exeext) ] ; then \
+- mv $(GCC_DIR)/gnatkr$(exeext) $(GCC_DIR)/gnatkr-cross$(exeext); \
+- fi
+- if [ -f $(GCC_DIR)/gnatlink$(exeext) ] ; then \
+- mv $(GCC_DIR)/gnatlink$(exeext) $(GCC_DIR)/gnatlink-cross$(exeext); \
+- fi
+- if [ -f $(GCC_DIR)/gnatls$(exeext) ] ; then \
+- mv $(GCC_DIR)/gnatls$(exeext) $(GCC_DIR)/gnatls-cross$(exeext); \
+- fi
+- if [ -f $(GCC_DIR)/gnatmake$(exeext) ] ; then \
+- mv $(GCC_DIR)/gnatmake$(exeext) $(GCC_DIR)/gnatmake-cross$(exeext); \
+- fi
+- if [ -f $(GCC_DIR)/gnatmem$(exeext) ] ; then \
+- mv $(GCC_DIR)/gnatmem$(exeext) $(GCC_DIR)/gnatmem-cross$(exeext); \
+- fi
+- if [ -f $(GCC_DIR)/gnatname$(exeext) ] ; then \
+- mv $(GCC_DIR)/gnatname$(exeext) $(GCC_DIR)/gnatname-cross$(exeext); \
+- fi
+- if [ -f $(GCC_DIR)/gnatprep$(exeext) ] ; then \
+- mv $(GCC_DIR)/gnatprep$(exeext) $(GCC_DIR)/gnatprep-cross$(exeext); \
+- fi
+- if [ -f $(GCC_DIR)/gnatxref$(exeext) ] ; then \
+- mv $(GCC_DIR)/gnatxref$(exeext) $(GCC_DIR)/gnatxref-cross$(exeext); \
+- fi
+- if [ -f $(GCC_DIR)/gnatfind$(exeext) ] ; then \
+- mv $(GCC_DIR)/gnatfind$(exeext) $(GCC_DIR)/gnatfind-cross$(exeext); \
+- fi
+- if [ -f $(GCC_DIR)/gnatclean$(exeext) ] ; then \
+- mv $(GCC_DIR)/gnatclean$(exeext) $(GCC_DIR)/gnatclean-cross$(exeext); \
+- fi
+- if [ -f $(GCC_DIR)/gnatsym$(exeext) ] ; then \
+- mv $(GCC_DIR)/gnatsym$(exeext) $(GCC_DIR)/gnatsym-cross$(exeext); \
+- fi
++%.o: %.c
++ $(GCC) -c -o $@ $< $(CFLAGS) $(INCLUDES)
+
+ # Other
+ # -----
+@@ -281,6 +312,7 @@
+
+ # Installation rules.
+ install:
++ $(INSTALL) -s gnatmake gnatlink $(TOOLS) $(DESTDIR)$(bindir)
+
+ install-strip: install
+
+@@ -294,8 +326,10 @@
+
+ # Cleaning rules.
+ mostlyclean:
++ $(RM) gnatmake gnatlink $(TOOLS) *.o *.ali
+
+ clean:
++ $(RM) *.ads *.adb stamp-gnattools-sources
+
+ distclean:
+ $(RM) Makefile config.status config.log
+Index: b/src/libada/Makefile.in
+===================================================================
+--- a/src/libada/Makefile.in
++++ b/src/libada/Makefile.in
+@@ -63,7 +63,7 @@
+
+ # Get target-specific overrides for TARGET_LIBGCC2_CFLAGS.
+ host_subdir = @host_subdir@
+-GCC_DIR=$(MULTIBUILDTOP)../../$(host_subdir)/gcc
++GCC_DIR=$(MULTIBUILDTOP)../$(host_subdir)/gcc
+ include $(GCC_DIR)/libgcc.mvars
+
+ target_noncanonical:=@target_noncanonical@
+Index: b/src/Makefile.def
+===================================================================
+--- a/src/Makefile.def
++++ b/src/Makefile.def
+@@ -144,7 +144,20 @@
+ missing=distclean;
+ missing=maintainer-clean; };
+ host_modules= { module= utils; no_check=true; };
+-host_modules= { module= gnattools; };
++host_modules= { module= libada; no_install=true; no_check=true;
++ missing= info;
++ missing= dvi;
++ missing= html;
++ missing= TAGS;
++ missing= install-info;
++ missing= installcheck; };
++host_modules= { module= gnattools; no_check=true;
++ missing= info;
++ missing= dvi;
++ missing= html;
++ missing= TAGS;
++ missing= install-info;
++ missing= installcheck; };
+ host_modules= { module= lto-plugin; bootstrap=true;
+ extra_configure_flags=--enable-shared; };
+
+@@ -175,7 +188,13 @@
+ target_modules = { module= boehm-gc; };
+ target_modules = { module= qthreads; };
+ target_modules = { module= rda; };
+-target_modules = { module= libada; };
++target_modules = { module= libada; no_install=true; no_check=true;
++ missing= info;
++ missing= dvi;
++ missing= html;
++ missing= TAGS;
++ missing= install-info;
++ missing= installcheck; };
+ target_modules = { module= libgomp; bootstrap= true; lib_path=.libs; };
+
+ // These are (some of) the make targets to be done in each subdirectory.
+@@ -361,7 +380,7 @@
+
+ dependencies = { module=all-fixincludes; on=all-libiberty; };
+
+-dependencies = { module=all-gnattools; on=all-target-libada; };
++dependencies = { module=all-gnattools; on=all-libada; };
+
+ dependencies = { module=all-lto-plugin; on=all-libiberty; };
+
+Index: b/src/Makefile.in
+===================================================================
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -950,6 +950,7 @@
+ maybe-configure-tk \
+ maybe-configure-libtermcap \
+ maybe-configure-utils \
++ maybe-configure-libada \
+ maybe-configure-gnattools \
+ maybe-configure-lto-plugin
+ .PHONY: configure-target
+@@ -1126,6 +1127,7 @@
+ all-host: maybe-all-tk
+ all-host: maybe-all-libtermcap
+ all-host: maybe-all-utils
++all-host: maybe-all-libada
+ all-host: maybe-all-gnattools
+ @if lto-plugin-no-bootstrap
+ all-host: maybe-all-lto-plugin
+@@ -1254,6 +1256,7 @@
+ info-host: maybe-info-tk
+ info-host: maybe-info-libtermcap
+ info-host: maybe-info-utils
++info-host: maybe-info-libada
+ info-host: maybe-info-gnattools
+ info-host: maybe-info-lto-plugin
+
+@@ -1369,6 +1372,7 @@
+ dvi-host: maybe-dvi-tk
+ dvi-host: maybe-dvi-libtermcap
+ dvi-host: maybe-dvi-utils
++dvi-host: maybe-dvi-libada
+ dvi-host: maybe-dvi-gnattools
+ dvi-host: maybe-dvi-lto-plugin
+
+@@ -1484,6 +1488,7 @@
+ pdf-host: maybe-pdf-tk
+ pdf-host: maybe-pdf-libtermcap
+ pdf-host: maybe-pdf-utils
++pdf-host: maybe-pdf-libada
+ pdf-host: maybe-pdf-gnattools
+ pdf-host: maybe-pdf-lto-plugin
+
+@@ -1599,6 +1604,7 @@
+ html-host: maybe-html-tk
+ html-host: maybe-html-libtermcap
+ html-host: maybe-html-utils
++html-host: maybe-html-libada
+ html-host: maybe-html-gnattools
+ html-host: maybe-html-lto-plugin
+
+@@ -1714,6 +1720,7 @@
+ TAGS-host: maybe-TAGS-tk
+ TAGS-host: maybe-TAGS-libtermcap
+ TAGS-host: maybe-TAGS-utils
++TAGS-host: maybe-TAGS-libada
+ TAGS-host: maybe-TAGS-gnattools
+ TAGS-host: maybe-TAGS-lto-plugin
+
+@@ -1829,6 +1836,7 @@
+ install-info-host: maybe-install-info-tk
+ install-info-host: maybe-install-info-libtermcap
+ install-info-host: maybe-install-info-utils
++install-info-host: maybe-install-info-libada
+ install-info-host: maybe-install-info-gnattools
+ install-info-host: maybe-install-info-lto-plugin
+
+@@ -1944,6 +1952,7 @@
+ install-pdf-host: maybe-install-pdf-tk
+ install-pdf-host: maybe-install-pdf-libtermcap
+ install-pdf-host: maybe-install-pdf-utils
++install-pdf-host: maybe-install-pdf-libada
+ install-pdf-host: maybe-install-pdf-gnattools
+ install-pdf-host: maybe-install-pdf-lto-plugin
+
+@@ -2059,6 +2068,7 @@
+ install-html-host: maybe-install-html-tk
+ install-html-host: maybe-install-html-libtermcap
+ install-html-host: maybe-install-html-utils
++install-html-host: maybe-install-html-libada
+ install-html-host: maybe-install-html-gnattools
+ install-html-host: maybe-install-html-lto-plugin
+
+@@ -2174,6 +2184,7 @@
+ installcheck-host: maybe-installcheck-tk
+ installcheck-host: maybe-installcheck-libtermcap
+ installcheck-host: maybe-installcheck-utils
++installcheck-host: maybe-installcheck-libada
+ installcheck-host: maybe-installcheck-gnattools
+ installcheck-host: maybe-installcheck-lto-plugin
+
+@@ -2289,6 +2300,7 @@
+ mostlyclean-host: maybe-mostlyclean-tk
+ mostlyclean-host: maybe-mostlyclean-libtermcap
+ mostlyclean-host: maybe-mostlyclean-utils
++mostlyclean-host: maybe-mostlyclean-libada
+ mostlyclean-host: maybe-mostlyclean-gnattools
+ mostlyclean-host: maybe-mostlyclean-lto-plugin
+
+@@ -2404,6 +2416,7 @@
+ clean-host: maybe-clean-tk
+ clean-host: maybe-clean-libtermcap
+ clean-host: maybe-clean-utils
++clean-host: maybe-clean-libada
+ clean-host: maybe-clean-gnattools
+ clean-host: maybe-clean-lto-plugin
+
+@@ -2519,6 +2532,7 @@
+ distclean-host: maybe-distclean-tk
+ distclean-host: maybe-distclean-libtermcap
+ distclean-host: maybe-distclean-utils
++distclean-host: maybe-distclean-libada
+ distclean-host: maybe-distclean-gnattools
+ distclean-host: maybe-distclean-lto-plugin
+
+@@ -2634,6 +2648,7 @@
+ maintainer-clean-host: maybe-maintainer-clean-tk
+ maintainer-clean-host: maybe-maintainer-clean-libtermcap
+ maintainer-clean-host: maybe-maintainer-clean-utils
++maintainer-clean-host: maybe-maintainer-clean-libada
+ maintainer-clean-host: maybe-maintainer-clean-gnattools
+ maintainer-clean-host: maybe-maintainer-clean-lto-plugin
+
+@@ -2804,6 +2819,7 @@
+ maybe-check-tk \
+ maybe-check-libtermcap \
+ maybe-check-utils \
++ maybe-check-libada \
+ maybe-check-gnattools \
+ maybe-check-lto-plugin
+
+@@ -2945,6 +2961,7 @@
+ maybe-install-tk \
+ maybe-install-libtermcap \
+ maybe-install-utils \
++ maybe-install-libada \
+ maybe-install-gnattools \
+ maybe-install-lto-plugin
+
+@@ -3026,6 +3043,7 @@
+ maybe-install-tk \
+ maybe-install-libtermcap \
+ maybe-install-utils \
++ maybe-install-libada \
+ maybe-install-gnattools \
+ maybe-install-lto-plugin
+
+@@ -3160,6 +3178,7 @@
+ maybe-install-strip-tk \
+ maybe-install-strip-libtermcap \
+ maybe-install-strip-utils \
++ maybe-install-strip-libada \
+ maybe-install-strip-gnattools \
+ maybe-install-strip-lto-plugin
+
+@@ -44766,6 +44785,331 @@
+
+
+
++.PHONY: configure-libada maybe-configure-libada
++maybe-configure-libada:
++@if gcc-bootstrap
++configure-libada: stage_current
++@endif gcc-bootstrap
++@if libada
++maybe-configure-libada: configure-libada
++configure-libada:
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ test ! -f $(HOST_SUBDIR)/libada/Makefile || exit 0; \
++ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libada ; \
++ $(HOST_EXPORTS) \
++ echo Configuring in $(HOST_SUBDIR)/libada; \
++ cd "$(HOST_SUBDIR)/libada" || exit 1; \
++ case $(srcdir) in \
++ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
++ *) topdir=`echo $(HOST_SUBDIR)/libada/ | \
++ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
++ esac; \
++ srcdiroption="--srcdir=$${topdir}/libada"; \
++ libsrcdir="$$s/libada"; \
++ $(SHELL) $${libsrcdir}/configure \
++ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
++ --target=${target_alias} $${srcdiroption} \
++ || exit 1
++@endif libada
++
++
++
++
++
++.PHONY: all-libada maybe-all-libada
++maybe-all-libada:
++@if gcc-bootstrap
++all-libada: stage_current
++@endif gcc-bootstrap
++@if libada
++TARGET-libada=all
++maybe-all-libada: all-libada
++all-libada: configure-libada
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ (cd $(HOST_SUBDIR)/libada && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \
++ $(TARGET-libada))
++@endif libada
++
++
++
++
++.PHONY: check-libada maybe-check-libada
++maybe-check-libada:
++@if libada
++maybe-check-libada: check-libada
++
++check-libada:
++
++@endif libada
++
++.PHONY: install-libada maybe-install-libada
++maybe-install-libada:
++@if libada
++maybe-install-libada: install-libada
++
++install-libada:
++
++@endif libada
++
++.PHONY: install-strip-libada maybe-install-strip-libada
++maybe-install-strip-libada:
++@if libada
++maybe-install-strip-libada: install-strip-libada
++
++install-strip-libada:
++
++@endif libada
++
++# Other targets (info, dvi, pdf, etc.)
++
++.PHONY: maybe-info-libada info-libada
++maybe-info-libada:
++@if libada
++maybe-info-libada: info-libada
++
++# libada doesn't support info.
++info-libada:
++
++@endif libada
++
++.PHONY: maybe-dvi-libada dvi-libada
++maybe-dvi-libada:
++@if libada
++maybe-dvi-libada: dvi-libada
++
++# libada doesn't support dvi.
++dvi-libada:
++
++@endif libada
++
++.PHONY: maybe-pdf-libada pdf-libada
++maybe-pdf-libada:
++@if libada
++maybe-pdf-libada: pdf-libada
++
++pdf-libada: \
++ configure-libada
++ @: $(MAKE); $(unstage)
++ @[ -f ./libada/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing pdf in libada" ; \
++ (cd $(HOST_SUBDIR)/libada && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ pdf) \
++ || exit 1
++
++@endif libada
++
++.PHONY: maybe-html-libada html-libada
++maybe-html-libada:
++@if libada
++maybe-html-libada: html-libada
++
++# libada doesn't support html.
++html-libada:
++
++@endif libada
++
++.PHONY: maybe-TAGS-libada TAGS-libada
++maybe-TAGS-libada:
++@if libada
++maybe-TAGS-libada: TAGS-libada
++
++# libada doesn't support TAGS.
++TAGS-libada:
++
++@endif libada
++
++.PHONY: maybe-install-info-libada install-info-libada
++maybe-install-info-libada:
++@if libada
++maybe-install-info-libada: install-info-libada
++
++# libada doesn't support install-info.
++install-info-libada:
++
++@endif libada
++
++.PHONY: maybe-install-pdf-libada install-pdf-libada
++maybe-install-pdf-libada:
++@if libada
++maybe-install-pdf-libada: install-pdf-libada
++
++install-pdf-libada: \
++ configure-libada \
++ pdf-libada
++ @: $(MAKE); $(unstage)
++ @[ -f ./libada/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing install-pdf in libada" ; \
++ (cd $(HOST_SUBDIR)/libada && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ install-pdf) \
++ || exit 1
++
++@endif libada
++
++.PHONY: maybe-install-html-libada install-html-libada
++maybe-install-html-libada:
++@if libada
++maybe-install-html-libada: install-html-libada
++
++install-html-libada: \
++ configure-libada \
++ html-libada
++ @: $(MAKE); $(unstage)
++ @[ -f ./libada/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing install-html in libada" ; \
++ (cd $(HOST_SUBDIR)/libada && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ install-html) \
++ || exit 1
++
++@endif libada
++
++.PHONY: maybe-installcheck-libada installcheck-libada
++maybe-installcheck-libada:
++@if libada
++maybe-installcheck-libada: installcheck-libada
++
++# libada doesn't support installcheck.
++installcheck-libada:
++
++@endif libada
++
++.PHONY: maybe-mostlyclean-libada mostlyclean-libada
++maybe-mostlyclean-libada:
++@if libada
++maybe-mostlyclean-libada: mostlyclean-libada
++
++mostlyclean-libada:
++ @: $(MAKE); $(unstage)
++ @[ -f ./libada/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing mostlyclean in libada" ; \
++ (cd $(HOST_SUBDIR)/libada && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ mostlyclean) \
++ || exit 1
++
++@endif libada
++
++.PHONY: maybe-clean-libada clean-libada
++maybe-clean-libada:
++@if libada
++maybe-clean-libada: clean-libada
++
++clean-libada:
++ @: $(MAKE); $(unstage)
++ @[ -f ./libada/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing clean in libada" ; \
++ (cd $(HOST_SUBDIR)/libada && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ clean) \
++ || exit 1
++
++@endif libada
++
++.PHONY: maybe-distclean-libada distclean-libada
++maybe-distclean-libada:
++@if libada
++maybe-distclean-libada: distclean-libada
++
++distclean-libada:
++ @: $(MAKE); $(unstage)
++ @[ -f ./libada/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing distclean in libada" ; \
++ (cd $(HOST_SUBDIR)/libada && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ distclean) \
++ || exit 1
++
++@endif libada
++
++.PHONY: maybe-maintainer-clean-libada maintainer-clean-libada
++maybe-maintainer-clean-libada:
++@if libada
++maybe-maintainer-clean-libada: maintainer-clean-libada
++
++maintainer-clean-libada:
++ @: $(MAKE); $(unstage)
++ @[ -f ./libada/Makefile ] || exit 0; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(HOST_EXPORTS) \
++ for flag in $(EXTRA_HOST_FLAGS) ; do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ echo "Doing maintainer-clean in libada" ; \
++ (cd $(HOST_SUBDIR)/libada && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ maintainer-clean) \
++ || exit 1
++
++@endif libada
++
++
++
+ .PHONY: configure-gnattools maybe-configure-gnattools
+ maybe-configure-gnattools:
+ @if gcc-bootstrap
+@@ -44826,12 +45170,6 @@
+ maybe-check-gnattools: check-gnattools
+
+ check-gnattools:
+- @: $(MAKE); $(unstage)
+- @r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(HOST_EXPORTS) \
+- (cd $(HOST_SUBDIR)/gnattools && \
+- $(MAKE) $(FLAGS_TO_PASS) check)
+
+ @endif gnattools
+
+@@ -44872,24 +45210,8 @@
+ @if gnattools
+ maybe-info-gnattools: info-gnattools
+
+-info-gnattools: \
+- configure-gnattools
+- @: $(MAKE); $(unstage)
+- @[ -f ./gnattools/Makefile ] || exit 0; \
+- r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(HOST_EXPORTS) \
+- for flag in $(EXTRA_HOST_FLAGS) ; do \
+- eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+- done; \
+- echo "Doing info in gnattools" ; \
+- (cd $(HOST_SUBDIR)/gnattools && \
+- $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+- "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+- "RANLIB=$${RANLIB}" \
+- "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+- info) \
+- || exit 1
++# gnattools doesn't support info.
++info-gnattools:
+
+ @endif gnattools
+
+@@ -44898,24 +45220,8 @@
+ @if gnattools
+ maybe-dvi-gnattools: dvi-gnattools
+
+-dvi-gnattools: \
+- configure-gnattools
+- @: $(MAKE); $(unstage)
+- @[ -f ./gnattools/Makefile ] || exit 0; \
+- r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(HOST_EXPORTS) \
+- for flag in $(EXTRA_HOST_FLAGS) ; do \
+- eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+- done; \
+- echo "Doing dvi in gnattools" ; \
+- (cd $(HOST_SUBDIR)/gnattools && \
+- $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+- "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+- "RANLIB=$${RANLIB}" \
+- "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+- dvi) \
+- || exit 1
++# gnattools doesn't support dvi.
++dvi-gnattools:
+
+ @endif gnattools
+
+@@ -44950,24 +45256,8 @@
+ @if gnattools
+ maybe-html-gnattools: html-gnattools
+
+-html-gnattools: \
+- configure-gnattools
+- @: $(MAKE); $(unstage)
+- @[ -f ./gnattools/Makefile ] || exit 0; \
+- r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(HOST_EXPORTS) \
+- for flag in $(EXTRA_HOST_FLAGS) ; do \
+- eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+- done; \
+- echo "Doing html in gnattools" ; \
+- (cd $(HOST_SUBDIR)/gnattools && \
+- $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+- "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+- "RANLIB=$${RANLIB}" \
+- "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+- html) \
+- || exit 1
++# gnattools doesn't support html.
++html-gnattools:
+
+ @endif gnattools
+
+@@ -44976,24 +45266,8 @@
+ @if gnattools
+ maybe-TAGS-gnattools: TAGS-gnattools
+
+-TAGS-gnattools: \
+- configure-gnattools
+- @: $(MAKE); $(unstage)
+- @[ -f ./gnattools/Makefile ] || exit 0; \
+- r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(HOST_EXPORTS) \
+- for flag in $(EXTRA_HOST_FLAGS) ; do \
+- eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+- done; \
+- echo "Doing TAGS in gnattools" ; \
+- (cd $(HOST_SUBDIR)/gnattools && \
+- $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+- "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+- "RANLIB=$${RANLIB}" \
+- "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+- TAGS) \
+- || exit 1
++# gnattools doesn't support TAGS.
++TAGS-gnattools:
+
+ @endif gnattools
+
+@@ -45002,25 +45276,8 @@
+ @if gnattools
+ maybe-install-info-gnattools: install-info-gnattools
+
+-install-info-gnattools: \
+- configure-gnattools \
+- info-gnattools
+- @: $(MAKE); $(unstage)
+- @[ -f ./gnattools/Makefile ] || exit 0; \
+- r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(HOST_EXPORTS) \
+- for flag in $(EXTRA_HOST_FLAGS) ; do \
+- eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+- done; \
+- echo "Doing install-info in gnattools" ; \
+- (cd $(HOST_SUBDIR)/gnattools && \
+- $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+- "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+- "RANLIB=$${RANLIB}" \
+- "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+- install-info) \
+- || exit 1
++# gnattools doesn't support install-info.
++install-info-gnattools:
+
+ @endif gnattools
+
+@@ -45083,24 +45340,8 @@
+ @if gnattools
+ maybe-installcheck-gnattools: installcheck-gnattools
+
+-installcheck-gnattools: \
+- configure-gnattools
+- @: $(MAKE); $(unstage)
+- @[ -f ./gnattools/Makefile ] || exit 0; \
+- r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(HOST_EXPORTS) \
+- for flag in $(EXTRA_HOST_FLAGS) ; do \
+- eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+- done; \
+- echo "Doing installcheck in gnattools" ; \
+- (cd $(HOST_SUBDIR)/gnattools && \
+- $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+- "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+- "RANLIB=$${RANLIB}" \
+- "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+- installcheck) \
+- || exit 1
++# gnattools doesn't support installcheck.
++installcheck-gnattools:
+
+ @endif gnattools
+
+@@ -56276,13 +56517,8 @@
+ @if target-libada
+ maybe-check-target-libada: check-target-libada
+
++# Dummy target for uncheckable module.
+ check-target-libada:
+- @: $(MAKE); $(unstage)
+- @r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(NORMAL_TARGET_EXPORTS) \
+- (cd $(TARGET_SUBDIR)/libada && \
+- $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
+
+ @endif target-libada
+
+@@ -56291,13 +56527,8 @@
+ @if target-libada
+ maybe-install-target-libada: install-target-libada
+
+-install-target-libada: installdirs
+- @: $(MAKE); $(unstage)
+- @r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(NORMAL_TARGET_EXPORTS) \
+- (cd $(TARGET_SUBDIR)/libada && \
+- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
++# Dummy target for uninstallable.
++install-target-libada:
+
+ @endif target-libada
+
+@@ -56306,13 +56537,8 @@
+ @if target-libada
+ maybe-install-strip-target-libada: install-strip-target-libada
+
+-install-strip-target-libada: installdirs
+- @: $(MAKE); $(unstage)
+- @r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(NORMAL_TARGET_EXPORTS) \
+- (cd $(TARGET_SUBDIR)/libada && \
+- $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip)
++# Dummy target for uninstallable.
++install-strip-target-libada:
+
+ @endif target-libada
+
+@@ -56323,24 +56549,8 @@
+ @if target-libada
+ maybe-info-target-libada: info-target-libada
+
+-info-target-libada: \
+- configure-target-libada
+- @: $(MAKE); $(unstage)
+- @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+- r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(NORMAL_TARGET_EXPORTS) \
+- echo "Doing info in $(TARGET_SUBDIR)/libada" ; \
+- for flag in $(EXTRA_TARGET_FLAGS); do \
+- eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+- done; \
+- (cd $(TARGET_SUBDIR)/libada && \
+- $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+- "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+- "RANLIB=$${RANLIB}" \
+- "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+- info) \
+- || exit 1
++# libada doesn't support info.
++info-target-libada:
+
+ @endif target-libada
+
+@@ -56349,24 +56559,8 @@
+ @if target-libada
+ maybe-dvi-target-libada: dvi-target-libada
+
+-dvi-target-libada: \
+- configure-target-libada
+- @: $(MAKE); $(unstage)
+- @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+- r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(NORMAL_TARGET_EXPORTS) \
+- echo "Doing dvi in $(TARGET_SUBDIR)/libada" ; \
+- for flag in $(EXTRA_TARGET_FLAGS); do \
+- eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+- done; \
+- (cd $(TARGET_SUBDIR)/libada && \
+- $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+- "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+- "RANLIB=$${RANLIB}" \
+- "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+- dvi) \
+- || exit 1
++# libada doesn't support dvi.
++dvi-target-libada:
+
+ @endif target-libada
+
+@@ -56401,24 +56595,8 @@
+ @if target-libada
+ maybe-html-target-libada: html-target-libada
+
+-html-target-libada: \
+- configure-target-libada
+- @: $(MAKE); $(unstage)
+- @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+- r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(NORMAL_TARGET_EXPORTS) \
+- echo "Doing html in $(TARGET_SUBDIR)/libada" ; \
+- for flag in $(EXTRA_TARGET_FLAGS); do \
+- eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+- done; \
+- (cd $(TARGET_SUBDIR)/libada && \
+- $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+- "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+- "RANLIB=$${RANLIB}" \
+- "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+- html) \
+- || exit 1
++# libada doesn't support html.
++html-target-libada:
+
+ @endif target-libada
+
+@@ -56427,24 +56605,8 @@
+ @if target-libada
+ maybe-TAGS-target-libada: TAGS-target-libada
+
+-TAGS-target-libada: \
+- configure-target-libada
+- @: $(MAKE); $(unstage)
+- @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+- r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(NORMAL_TARGET_EXPORTS) \
+- echo "Doing TAGS in $(TARGET_SUBDIR)/libada" ; \
+- for flag in $(EXTRA_TARGET_FLAGS); do \
+- eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+- done; \
+- (cd $(TARGET_SUBDIR)/libada && \
+- $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+- "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+- "RANLIB=$${RANLIB}" \
+- "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+- TAGS) \
+- || exit 1
++# libada doesn't support TAGS.
++TAGS-target-libada:
+
+ @endif target-libada
+
+@@ -56453,25 +56615,8 @@
+ @if target-libada
+ maybe-install-info-target-libada: install-info-target-libada
+
+-install-info-target-libada: \
+- configure-target-libada \
+- info-target-libada
+- @: $(MAKE); $(unstage)
+- @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+- r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(NORMAL_TARGET_EXPORTS) \
+- echo "Doing install-info in $(TARGET_SUBDIR)/libada" ; \
+- for flag in $(EXTRA_TARGET_FLAGS); do \
+- eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+- done; \
+- (cd $(TARGET_SUBDIR)/libada && \
+- $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+- "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+- "RANLIB=$${RANLIB}" \
+- "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+- install-info) \
+- || exit 1
++# libada doesn't support install-info.
++install-info-target-libada:
+
+ @endif target-libada
+
+@@ -56534,24 +56679,8 @@
+ @if target-libada
+ maybe-installcheck-target-libada: installcheck-target-libada
+
+-installcheck-target-libada: \
+- configure-target-libada
+- @: $(MAKE); $(unstage)
+- @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+- r=`${PWD_COMMAND}`; export r; \
+- s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+- $(NORMAL_TARGET_EXPORTS) \
+- echo "Doing installcheck in $(TARGET_SUBDIR)/libada" ; \
+- for flag in $(EXTRA_TARGET_FLAGS); do \
+- eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+- done; \
+- (cd $(TARGET_SUBDIR)/libada && \
+- $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+- "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+- "RANLIB=$${RANLIB}" \
+- "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+- installcheck) \
+- || exit 1
++# libada doesn't support installcheck.
++installcheck-target-libada:
+
+ @endif target-libada
+
+@@ -60050,7 +60179,7 @@
+ all-stageprofile-libcpp: maybe-all-stageprofile-intl
+ all-stagefeedback-libcpp: maybe-all-stagefeedback-intl
+ all-fixincludes: maybe-all-libiberty
+-all-gnattools: maybe-all-target-libada
++all-gnattools: maybe-all-libada
+ all-lto-plugin: maybe-all-libiberty
+
+ all-stage1-lto-plugin: maybe-all-stage1-libiberty
+Index: b/src/configure.ac
+===================================================================
+--- a/src/configure.ac
++++ b/src/configure.ac
+@@ -168,7 +168,7 @@
+
+ # these libraries are used by various programs built for the host environment
+ #
+-host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr mpc ppl cloog libelf libiconv"
++host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr mpc ppl cloog libelf libiconv libada"
+
+ # these tools are built for the host environment
+ # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
+@@ -301,7 +301,7 @@
+
+ # Similarly, some are only suitable for cross toolchains.
+ # Remove these if host=target.
+-cross_only="target-libgloss target-newlib target-opcodes"
++cross_only="target-libgloss target-newlib target-opcodes target-libada"
+
+ case $is_cross_compiler in
+ no) skipdirs="${skipdirs} ${cross_only}" ;;
diff --git a/debian/patches/ada-mips.diff b/debian/patches/ada-mips.diff
new file mode 100644
index 0000000..2661739
--- /dev/null
+++ b/debian/patches/ada-mips.diff
@@ -0,0 +1,33 @@
+# DP: Improve support for mips.
+
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -1666,7 +1666,7 @@
+ s-taprop.adb<s-taprop-linux.adb \
+ s-tasinf.ads<s-tasinf-linux.ads \
+ s-tasinf.adb<s-tasinf-linux.adb \
+- s-taspri.ads<s-taspri-posix.ads \
++ s-taspri.ads<s-taspri-posix-noaltstack.ads \
+ s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
+ system.ads<system-linux-mips.ads
+
+@@ -1690,6 +1690,11 @@
+ s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
+ system.ads<system-linux-mips.ads
+
++ TOOLS_TARGET_PAIRS = \
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++ indepsw.adb<indepsw-gnu.adb
++
++ EXTRA_GNATRTL_TASKING_OBJS=s-linux.o
+ EH_MECHANISM=-gcc
+ THREADSLIB = -lpthread
+ GNATLIB_SHARED = gnatlib-shared-dual
+--- a/src/config/bootstrap-debug.mk
++++ b/src/config/bootstrap-debug.mk
+@@ -9,4 +9,5 @@
+ # For more thorough testing, see bootstrap-debug-lean.mk
+
+ STAGE2_CFLAGS += -gtoggle
++STAGE3_CFLAGS += -gtoggle
+ do-compare = $(SHELL) $(srcdir)/contrib/compare-debug $$f1 $$f2
diff --git a/debian/patches/ada-nobiarch-check.diff b/debian/patches/ada-nobiarch-check.diff
new file mode 100644
index 0000000..16615a0
--- /dev/null
+++ b/debian/patches/ada-nobiarch-check.diff
@@ -0,0 +1,20 @@
+# DP: For biarch builds, disable the gnat testsuite for the non-default
+# architecture (no biarch support in gnat yet).
+
+Index: b/src/gcc/Makefile.in
+===================================================================
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -4510,7 +4510,11 @@
+ if [ -f $${rootme}/../expect/expect ] ; then \
+ TCL_LIBRARY=`cd .. ; cd $${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \
+ export TCL_LIBRARY ; fi ; \
+- $(RUNTEST) --tool $* $(RUNTESTFLAGS))
++ if [ "$*" = gnat ]; then \
++ runtestflags="`echo '$(RUNTESTFLAGS)' | sed 's/,-m[36][24]//;s/,-mabi=n32//'`"; \
++ case "$$runtestflags" in *\\{\\}) runtestflags=; esac; \
++ fi; \
++ $(RUNTEST) --tool $* $$runtestflags)
+
+ $(patsubst %,%-subtargets,$(filter-out $(lang_checks_parallelized),$(lang_checks))): check-%-subtargets:
+ @echo check-$*
diff --git a/debian/patches/ada-sjlj.diff b/debian/patches/ada-sjlj.diff
new file mode 100644
index 0000000..ce21121
--- /dev/null
+++ b/debian/patches/ada-sjlj.diff
@@ -0,0 +1,728 @@
+# DP: There are two exception mechanisms to choose from: zero-cost and
+# DP: setjump/longjump. The Ada run-time library uses either of them
+# DP: but not both. Build both versions of the run-time library.
+
+# This patch changes the way the upstream Makefiles build the run-time
+# library. Before the patch: libada/Makefile calls gcc/ada/Makefile,
+# which builds the "rts" subdirectory containing symbolic links to
+# most source files, and modified copies of a few source files (to
+# take target dependencies into account, and also to select the
+# exception handling mechanism in system.ads). Then, gcc/ada/Makefile
+# calls itself recursively but in the "rts" subdirectory and builds
+# libgnat.a and libgnarl.a (and a couple other libraries:
+# libgccprefix.a, libgmem.a). Upon return from this recursive call,
+# it deletes the source and object files from "rts", reconstructs the
+# source files, and builds libgnat.so and libgnarl.so by calling
+# itself recursively a second time in the "rts" directory.
+
+# Furthermore, gcc/ada/Makefile disables parallel makes, so building
+# the static and then shared versions of the RTS is entirely
+# sequential even on SMP systems.
+
+# As a consequence of the above, building the SJLJ version of the
+# library would overwrite the ZCX version. Thus it is necessary to
+# manually save the previous version of the library before building the
+# second one.
+
+# After the patch: libada/Makefile calls gcc/ada/Makefile, which
+# builds the source directory (named gnatlib-sources instead of rts),
+# containing the symbolic links and target-dependent files.
+
+# In a second step, libada/Makefile calls gcc/ada/Makefile again to
+# build the targets gnatlib-shared-zcx, gnatlib-static-zcx and
+# gnatlib-static-sjlj (we could also build gnatlib-shared-sjlj, but
+# that triggers compiler errors on PowerPC).
+
+# Each of these three targets copies the source directory "rts" into a
+# new directory named rts-shared-zcx, rts-static-zcx or
+# rts-static-sjlj. In the new directory, they change the value of
+# System.ZCX_By_Default, and then they call gcc/ada/Makefile
+# recursively in the new directory to build the library.
+
+# gcc/ada/Makefile.in has a .NOTPARALLEL directive preventing it from
+# launching commands in parallel. However, libada/Makefile has no
+# such directive and can invoke up to three instances of
+# gcc/ada/Makefile.in in parallel. This is okay because each of them
+# runs in a different directory.
+
+# This patch also updates libgnat{vsn,prj}/Makefile and
+# gnattools/Makefile to look for the shared ZCX version of the library
+# in the appropriate directory, rather than just "rts", and updates
+# the "make install" and binary targets as well.
+
+Index: b/src/libada/Makefile.in
+===================================================================
+--- a/src/libada/Makefile.in
++++ b/src/libada/Makefile.in
+@@ -16,7 +16,8 @@
+ # <http://www.gnu.org/licenses/>.
+
+ # Default target; must be first.
+-all: gnatlib
++GNATLIB = gnatlib-static-zcx gnatlib-static-sjlj gnatlib-shared-zcx
++all: $(GNATLIB)
+ $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE)
+
+ .PHONY: all
+@@ -97,26 +98,28 @@
+ "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)"
+
+ # Rules to build gnatlib.
+-.PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared osconstool
+-gnatlib: @default_gnatlib_target@
++.PHONY: $(GNATLIB) osconstool
+
+-gnatlib-plain: osconstool $(GCC_DIR)/ada/Makefile
+- test -f stamp-libada || \
+- $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) gnatlib \
+- && touch stamp-libada
+- -rm -rf adainclude
+- -rm -rf adalib
+- $(LN_S) $(ADA_RTS_DIR) adainclude
+- $(LN_S) $(ADA_RTS_DIR) adalib
+-
+-gnatlib-sjlj gnatlib-zcx gnatlib-shared: osconstool $(GCC_DIR)/ada/Makefile
+- test -f stamp-libada || \
+- $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) $@ \
+- && touch stamp-libada
+- -rm -rf adainclude
+- -rm -rf adalib
+- $(LN_S) $(ADA_RTS_DIR) adainclude
+- $(LN_S) $(ADA_RTS_DIR) adalib
++$(GCC_DIR)/ada/gnatlib-sources-sjlj/a-except.ads:
++ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) \
++ EH_MECHANISM="" \
++ gnatlib-sources-sjlj/a-except.ads
++
++$(GCC_DIR)/ada/gnatlib-sources-zcx/a-except.ads:
++ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) \
++ EH_MECHANISM="-gcc" \
++ gnatlib-sources-zcx/a-except.ads
++
++$(GNATLIB): osconstool $(GCC_DIR)/ada/Makefile \
++$(GCC_DIR)/ada/gnatlib-sources-zcx/a-except.ads \
++$(GCC_DIR)/ada/gnatlib-sources-sjlj/a-except.ads
++ $(MAKE) -C $(GCC_DIR)/ada $(FLAGS_TO_PASS) \
++ GNATLIBFLAGS="$(GNATLIBFLAGS)" \
++ GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
++ TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
++ THREAD_KIND="$(THREAD_KIND)" \
++ TRACE="$(TRACE)" \
++ $@
+
+ osconstool:
+ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) ./bldtools/oscons/xoscons
+Index: b/src/gcc/ada/gcc-interface/Makefile.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -2234,57 +2234,75 @@
+ a-[a-o]*.adb a-[p-z]*.adb a-[a-o]*.ads a-[p-z]*.ads g-*.ad? i-*.ad? \
+ s-[a-o]*.adb s-[p-z]*.adb s-[a-o]*.ads s-[p-z]*.ads
+
+-../stamp-gnatlib-$(RTSDIR):
+- @if [ ! -f stamp-gnatlib-$(RTSDIR) ] ; \
+- then \
+- $(ECHO) You must first build the GNAT library: make gnatlib; \
+- false; \
+- else \
+- true; \
+- fi
++libgnat = libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
++libgnat-sjlj = libgnat$(hyphen)sjlj$(hyphen)$(LIBRARY_VERSION)$(soext)
+
+-install-gnatlib: ../stamp-gnatlib-$(RTSDIR)
++install-gnatlib: rts-static-zcx/libgnat$(arext) rts-static-sjlj/libgnat$(arext)
++install-gnatlib: rts-shared-zcx/$(libgnat)
+ # Create the directory before deleting it, in case the directory is
+ # a list of directories (as it may be on VMS). This ensures we are
+ # deleting the right one.
+- -$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
+- -$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
+- $(RMDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
+- $(RMDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
+- -$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
+- -$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
+- for file in $(RTSDIR)/*.ali; do \
+- $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
++ -$(MKDIR) $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR)
++ -$(MKDIR) $(DESTDIR)$(ADA_NATIVE_INCLUDE_DIR)
++ $(RMDIR) $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR)
++ $(RMDIR) $(DESTDIR)$(ADA_NATIVE_INCLUDE_DIR)
++ -$(MKDIR) $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR)
++ -$(MKDIR) $(DESTDIR)$(ADA_NATIVE_INCLUDE_DIR)
++
++ -$(MKDIR) $(DESTDIR)$(ADA_SJLJ_RTL_OBJ_DIR)
++ -$(MKDIR) $(DESTDIR)$(ADA_SJLJ_INCLUDE_DIR)
++ $(RMDIR) $(DESTDIR)$(ADA_SJLJ_RTL_OBJ_DIR)
++ $(RMDIR) $(DESTDIR)$(ADA_SJLJ_INCLUDE_DIR)
++ -$(MKDIR) $(DESTDIR)$(ADA_SJLJ_RTL_OBJ_DIR)
++ -$(MKDIR) $(DESTDIR)$(ADA_SJLJ_INCLUDE_DIR)
++
++ for file in rts-shared-zcx/*.ali; do \
++ $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR); \
++ done
++ for file in rts-static-sjlj/*.ali; do \
++ $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_SJLJ_RTL_OBJ_DIR); \
++ done
++
++ -cd rts-static-zcx; for file in *$(arext);do \
++ $(INSTALL_DATA) $$file $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR); \
++ $(RANLIB_FOR_TARGET) $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR)/$$file; \
+ done
+- -cd $(RTSDIR); for file in *$(arext);do \
+- $(INSTALL_DATA) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
+- $(RANLIB_FOR_TARGET) $(DESTDIR)$(ADA_RTL_OBJ_DIR)/$$file; \
++ -cd rts-static-sjlj; for file in *$(arext);do \
++ $(INSTALL_DATA) $$file $(DESTDIR)$(ADA_SJLJ_RTL_OBJ_DIR); \
++ $(RANLIB_FOR_TARGET) $(DESTDIR)$(ADA_SJLJ_RTL_OBJ_DIR)/$$file; \
+ done
++
++ -$(foreach file, $(EXTRA_ADALIB_FILES), \
++ $(INSTALL_DATA_DATE) rts-static-zcx/$(file) $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR) && \
++ ) true
+ -$(foreach file, $(EXTRA_ADALIB_FILES), \
+- $(INSTALL_DATA_DATE) $(RTSDIR)/$(file) $(DESTDIR)$(ADA_RTL_OBJ_DIR) && \
++ $(INSTALL_DATA_DATE) rts-static-sjlj/$(file) $(DESTDIR)$(ADA_SJLJ_RTL_OBJ_DIR) && \
+ ) true
+ # Install the shared libraries, if any, using $(INSTALL) instead
+ # of $(INSTALL_DATA). The latter may force a mode inappropriate
+ # for shared libraries on some targets, e.g. on HP-UX where the x
+ # permission is required.
+-# Also install the .dSYM directories if they exist (these directories
+-# contain the debug information for the shared libraries on darwin)
+ for file in gnat gnarl; do \
+- if [ -f $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) ]; then \
+- $(INSTALL) $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
+- $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
+- fi; \
+- if [ -d $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).dSYM ]; then \
+- $(CP) -r $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).dSYM \
+- $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
++ if [ -f rts-shared-zcx/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).1 ]; then \
++ $(INSTALL) rts-shared-zcx/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
++ $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR); \
+ fi; \
+ done
+ # This copy must be done preserving the date on the original file.
+- for file in $(RTSDIR)/*.ad?; do \
+- $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_INCLUDE_DIR); \
++ for file in rts-shared-zcx/*.adb rts-shared-zcx/*.ads; do \
++ $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_NATIVE_INCLUDE_DIR); \
+ done
+- cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.adb
+- cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.ads
++ $(CHMOD) u=rw,go=r $(DESTDIR)$(ADA_NATIVE_INCLUDE_DIR)/*.adb
++ $(CHMOD) u=rw,go=r $(DESTDIR)$(ADA_NATIVE_INCLUDE_DIR)/*.ads
++ for file in rts-static-sjlj/*.adb rts-static-sjlj/*.ads; do \
++ $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_SJLJ_INCLUDE_DIR); \
++ done
++ $(CHMOD) u=rw,go=r $(DESTDIR)$(ADA_SJLJ_INCLUDE_DIR)/*.adb
++ $(CHMOD) u=rw,go=r $(DESTDIR)$(ADA_SJLJ_INCLUDE_DIR)/*.ads
++
++ (cd $(DESTDIR)$(libsubdir); \
++ ln -s rts-native/adainclude adainclude; \
++ ln -s rts-native/adalib adalib;)
+
+ # NOTE: The $(foreach ...) commands assume ";" is the valid separator between
+ # successive target commands. Although the Gnu make documentation
+@@ -2295,30 +2313,37 @@
+
+ # GNULLI Begin ###########################################################
+
+-../stamp-gnatlib1-$(RTSDIR): Makefile
+- $(RMDIR) $(RTSDIR)
+- $(MKDIR) $(RTSDIR)
+- $(CHMOD) u+w $(RTSDIR)
++replace_zcx_by_default=\
++'s/ZCX_By_Default.*/ZCX_By_Default : constant Boolean := $(zcx_by_default);/'
++
++gnatlib-sources-zcx/a-except.ads: dir=$(dir $@)
++gnatlib-sources-zcx/a-except.ads: zcx_by_default=True
++
++gnatlib-sources-sjlj/a-except.ads: dir=$(dir $@)
++gnatlib-sources-sjlj/a-except.ads: zcx_by_default=False
++
++gnatlib-sources-zcx/a-except.ads gnatlib-sources-sjlj/a-except.ads:
++ $(MKDIR) $(dir)
++ $(CHMOD) u+w $(dir)
+ # Copy target independent sources
+ $(foreach f,$(ADA_INCLUDE_SRCS) $(LIBGNAT_SRCS), \
+- $(LN_S) $(fsrcpfx)ada/$(f) $(RTSDIR) ;) true
++ $(LN_S) $(fsrcpfx)ada/$(f) $(dir) ;) true
+ # Remove files to be replaced by target dependent sources
+ $(RM) $(foreach PAIR,$(LIBGNAT_TARGET_PAIRS), \
+- $(RTSDIR)/$(word 1,$(subst <, ,$(PAIR))))
+- for f in $(RTSDIR)/*-*-*.ads $(RTSDIR)/*-*-*.adb; do \
++ $(dir)/$(word 1,$(subst <, ,$(PAIR))))
++ for f in $(dir)/*-*-*.ads $(dir)/*-*-*.adb; do \
+ case "$$f" in \
+- $(RTSDIR)/s-stratt-*) ;; \
++ $(dir)/s-stratt-*) ;; \
+ *) $(RM) $$f ;; \
+ esac; \
+ done
+ # Copy new target dependent sources
+ $(foreach PAIR,$(LIBGNAT_TARGET_PAIRS), \
+ $(LN_S) $(fsrcpfx)ada/$(word 2,$(subst <, ,$(PAIR))) \
+- $(RTSDIR)/$(word 1,$(subst <, ,$(PAIR)));)
++ $(dir)/$(word 1,$(subst <, ,$(PAIR)));)
++ sed -e $(replace_zcx_by_default) $(dir)/system.ads > $(dir)/s.ads
+ # Copy tsystem.h
+- $(CP) $(srcdir)/tsystem.h $(RTSDIR)
+- $(RM) ../stamp-gnatlib-$(RTSDIR)
+- touch ../stamp-gnatlib1-$(RTSDIR)
++ $(CP) $(srcdir)/tsystem.h $(dir)
+
+ # GNULLI End #############################################################
+
+@@ -2347,9 +2372,10 @@
+ $(CP) $^ ./bldtools/oscons
+ (cd ./bldtools/oscons ; gnatmake -q xoscons)
+
+-$(RTSDIR)/s-oscons.ads: ../stamp-gnatlib1-$(RTSDIR) s-oscons-tmplt.c gsocket.h ./bldtools/oscons/xoscons
+- $(RM) $(RTSDIR)/s-oscons-tmplt.i $(RTSDIR)/s-oscons-tmplt.s
+- (cd $(RTSDIR) ; \
++%/s-oscons.ads: dir = $(dir $@)
++%/s-oscons.ads: s-oscons-tmplt.c gsocket.h ./bldtools/oscons/xoscons
++ $(RM) $(dir)/s-oscons-tmplt.i $(dir)/s-oscons-tmplt.s
++ (cd $(dir) ; \
+ $(OSCONS_CPP) ; \
+ $(OSCONS_EXTRACT) ; \
+ ../bldtools/oscons/xoscons)
+@@ -2360,8 +2386,11 @@
+ # Example: cd $(RTSDIR); ar rc libfoo.a $(LONG_LIST_OF_OBJS)
+ # is guaranteed to overflow the buffer.
+
+-gnatlib: ../stamp-gnatlib1-$(RTSDIR) $(RTSDIR)/s-oscons.ads
+- $(MAKE) -C $(RTSDIR) \
++%/libgnat$(arext): build_dir = $(dir $@)
++%/libgnat$(arext): libgnarl = $(subst libgnat,libgnarl,$@)
++%/libgnat$(arext): libgnala = $(subst libgnat,libgnala,$@)
++%/libgnat$(arext): % %/s-oscons.ads
++ $(MAKE) -C $(build_dir) \
+ CC="`echo \"$(GCC_FOR_TARGET)\" \
+ | sed -e 's,\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
+ INCLUDES="$(INCLUDES_FOR_SUBDIR) -I./../.." \
+@@ -2369,7 +2398,7 @@
+ FORCE_DEBUG_ADAFLAGS="$(FORCE_DEBUG_ADAFLAGS)" \
+ srcdir=$(fsrcdir) \
+ -f ../Makefile $(LIBGNAT_OBJS)
+- $(MAKE) -C $(RTSDIR) \
++ $(MAKE) -C $(build_dir) \
+ CC="`echo \"$(GCC_FOR_TARGET)\" \
+ | sed -e 's,\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
+ ADA_INCLUDES="" \
+@@ -2377,35 +2406,37 @@
+ ADAFLAGS="$(GNATLIBFLAGS)" \
+ FORCE_DEBUG_ADAFLAGS="$(FORCE_DEBUG_ADAFLAGS)" \
+ srcdir=$(fsrcdir) \
+- -f ../Makefile \
+- $(GNATRTL_OBJS)
+- $(RM) $(RTSDIR)/libgnat$(arext) $(RTSDIR)/libgnarl$(arext)
+- $(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgnat$(arext) \
+- $(addprefix $(RTSDIR)/,$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) g-trasym.o convert_addresses.o)
+- $(RANLIB_FOR_TARGET) $(RTSDIR)/libgnat$(arext)
+- $(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgnarl$(arext) \
+- $(addprefix $(RTSDIR)/,$(GNATRTL_TASKING_OBJS))
+- $(RANLIB_FOR_TARGET) $(RTSDIR)/libgnarl$(arext)
+- $(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgnala$(arext) \
+- $(addprefix $(RTSDIR)/,$(GNATRTL_LINEARALGEBRA_OBJS))
+- $(RANLIB_FOR_TARGET) $(RTSDIR)/libgnala$(arext)
++ -f ../Makefile \
++ $(GNATRTL_OBJS)
++ $(RM) $@ $(libgnarl)
++ $(AR_FOR_TARGET) $(AR_FLAGS) $@ \
++ $(addprefix $(build_dir),$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) g-trasym.o convert_addresses.o)
++ $(RANLIB_FOR_TARGET) $@
++ $(AR_FOR_TARGET) $(AR_FLAGS) $(libgnarl) \
++ $(addprefix $(build_dir),$(GNATRTL_TASKING_OBJS))
++ $(RANLIB_FOR_TARGET) $(libgnarl)
++ $(AR_FOR_TARGET) $(AR_FLAGS) $(libgnala) \
++ $(addprefix $(build_dir),$(GNATRTL_LINEARALGEBRA_OBJS))
++ $(RANLIB_FOR_TARGET) $(libgnala)
+ ifeq ($(GMEM_LIB),gmemlib)
+- $(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgmem$(arext) \
+- $(RTSDIR)/memtrack.o
+- $(RANLIB_FOR_TARGET) $(RTSDIR)/libgmem$(arext)
++ $(AR_FOR_TARGET) $(AR_FLAGS) $(build_dir)libgmem$(arext) \
++ $(build_dir)memtrack.o
++ $(RANLIB_FOR_TARGET) $(build_dir)libgmem$(arext)
+ endif
+- touch ../stamp-gnatlib-$(RTSDIR)
+
+ # Warning: this target assumes that LIBRARY_VERSION has been set correctly.
+-gnatlib-shared-default: ../stamp-gnatlib1-$(RTSDIR)
+- $(MAKE) -C $(RTSDIR) \
++%/$(libgnat) %/$(libgnat-sjlj): build_dir = $(dir $@)
++%/$(libgnat) %/$(libgnat-sjlj): libgnarl = $(notdir $(subst libgnat,libgnarl,$@))
++%/$(libgnat) %/$(libgnat-sjlj): libgnala = $(notdir $(subst libgnat,libgnala,$@))
++%/$(libgnat) %/$(libgnat-sjlj): % %/s-oscons.ads
++ $(MAKE) -C $(build_dir) \
+ CC="`echo \"$(GCC_FOR_TARGET)\" \
+ | sed -e 's,^\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
+ INCLUDES="$(INCLUDES_FOR_SUBDIR) -I./../.." \
+ CFLAGS="$(GNATLIBCFLAGS_FOR_C)" \
+ srcdir=$(fsrcdir) \
+ -f ../Makefile $(LIBGNAT_OBJS)
+- $(MAKE) -C $(RTSDIR) \
++ $(MAKE) -C $(build_dir) \
+ CC="`echo \"$(GCC_FOR_TARGET)\" \
+ | sed -e 's,^\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
+ ADA_INCLUDES="" \
+@@ -2415,160 +2446,56 @@
+ srcdir=$(fsrcdir) \
+ -f ../Makefile \
+ $(GNATRTL_OBJS)
+- $(RM) $(RTSDIR)/libgna*$(soext) $(RTSDIR)/libgna*$(soext).1
+- cd $(RTSDIR); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
++ $(RM) $(build_dir)/libgna*$(soext) $(build_dir)/libgna*$(soext).1
++ cd $(build_dir); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
+ $(TARGET_LIBGCC2_CFLAGS) \
+- -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
++ -o $(notdir $@).1 \
+ $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
+ g-trasym.o convert_addresses.o \
+- $(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
++ $(SO_OPTS)$(notdir $@).1 \
+ $(MISCLIB) -lm
+- cd $(RTSDIR); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
++ cd $(build_dir); $(LN_S) $(notdir $@).1 $(notdir $@)
++ cd $(build_dir); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
+ $(TARGET_LIBGCC2_CFLAGS) \
+- -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
++ -o $(libgnarl).1 \
+ $(GNATRTL_TASKING_OBJS) \
+- $(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
++ $(SO_OPTS)$(libgnarl).1 \
+ $(THREADSLIB)
+- cd $(RTSDIR); for lib in gnat gnarl; do \
+- l=lib$${lib}$(hyphen)$(LIBRARY_VERSION)$(soext); \
+- $(LN_S) $$l.1 $$l; \
+- done
+-# Delete the object files, lest they be linked statically into the tools
+-# executables. Only the .ali, .a and .so files must remain.
+- rm -f $(RTSDIR)/*.o
+- $(CHMOD) a-wx $(RTSDIR)/*.ali
+-
+-gnatlib-shared-dual:
+- $(MAKE) $(FLAGS_TO_PASS) \
+- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+- GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+- GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+- MULTISUBDIR="$(MULTISUBDIR)" \
+- THREAD_KIND="$(THREAD_KIND)" \
+- gnatlib
+- $(RM) $(RTSDIR)/*.o $(RTSDIR)/*.ali
+- $(MAKE) $(FLAGS_TO_PASS) \
+- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+- GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+- GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+- MULTISUBDIR="$(MULTISUBDIR)" \
+- THREAD_KIND="$(THREAD_KIND)" \
+- gnatlib-shared-default
+-
+-gnatlib-shared-dual-win32:
+- $(MAKE) $(FLAGS_TO_PASS) \
+- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+- GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+- GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+- MULTISUBDIR="$(MULTISUBDIR)" \
+- THREAD_KIND="$(THREAD_KIND)" \
+- gnatlib
+- $(RM) $(RTSDIR)/*.o $(RTSDIR)/*.ali
+- $(MAKE) $(FLAGS_TO_PASS) \
+- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+- GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
+- GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+- MULTISUBDIR="$(MULTISUBDIR)" \
+- THREAD_KIND="$(THREAD_KIND)" \
+- gnatlib-shared-win32
+-
+-# ??? we need to add the option to support auto-import of arrays/records to
+-# the GNATLIBFLAGS when this will be supported by GNAT. At this point we will
+-# use the gnatlib-shared-dual-win32 target to build the GNAT runtimes on
+-# Windows.
+-gnatlib-shared-win32:
+- $(MAKE) $(FLAGS_TO_PASS) \
+- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+- GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
+- GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+- MULTISUBDIR="$(MULTISUBDIR)" \
+- THREAD_KIND="$(THREAD_KIND)" \
+- gnatlib
+- $(RM) $(RTSDIR)/libgna*$(soext)
+- cd $(RTSDIR); ../../xgcc -B../../ -shared -shared-libgcc \
+- $(TARGET_LIBGCC2_CFLAGS) \
+- -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+- $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
+- $(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) $(MISCLIB)
+- cd $(RTSDIR); ../../xgcc -B../../ -shared -shared-libgcc \
++ cd $(build_dir); $(LN_S) $(libgnarl).1 $(libgnarl)
++# TODO: enable building the shared libgnala
++ifeq (libgnala-shared-enabled,yes)
++ cd $(build_dir); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
+ $(TARGET_LIBGCC2_CFLAGS) \
+- -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+- $(GNATRTL_TASKING_OBJS) \
+- $(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+- $(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
+-
+-gnatlib-shared-darwin:
+- $(MAKE) $(FLAGS_TO_PASS) \
+- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+- GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
+- GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C) -fno-common" \
+- MULTISUBDIR="$(MULTISUBDIR)" \
+- THREAD_KIND="$(THREAD_KIND)" \
+- gnatlib
+- $(RM) $(RTSDIR)/libgnat$(soext) $(RTSDIR)/libgnarl$(soext)
+- cd $(RTSDIR); ../../xgcc -B../../ -dynamiclib $(TARGET_LIBGCC2_CFLAGS) \
+- -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+- $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
+- $(SO_OPTS) \
+- -Wl,-install_name,@rpath/libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+- $(MISCLIB) -lm
+- cd $(RTSDIR); ../../xgcc -B../../ -dynamiclib $(TARGET_LIBGCC2_CFLAGS) \
+- -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+- $(GNATRTL_TASKING_OBJS) \
+- $(SO_OPTS) \
+- -Wl,-install_name,@rpath/libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+- $(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
+- cd $(RTSDIR); $(LN_S) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+- libgnat$(soext)
+- cd $(RTSDIR); $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+- libgnarl$(soext)
+- cd $(RTSDIR); dsymutil libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
+- cd $(RTSDIR); dsymutil libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext)
++ -o $(libgnala).1 \
++ $(GNATRTL_LINEARALGEBRA_OBJS) \
++ $(SO_OPTS)$(libgnala).1
++ cd $(build_dir); $(LN_S) $(libgnala).1 $(libgnala)
++endif
+
+-gnatlib-shared-vms:
+- $(MAKE) $(FLAGS_TO_PASS) \
+- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+- GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+- GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+- MULTISUBDIR="$(MULTISUBDIR)" \
+- THREAD_KIND="$(THREAD_KIND)" \
+- gnatlib
+- $(RM) $(RTSDIR)/libgna*$(soext)
+- cd $(RTSDIR) && \
+- ../../gnatsym -s SYMVEC_$$$$.opt \
+- $(LIBGNAT_OBJS) $(GNATRTL_NONTASKING_OBJS) && \
+- ../../xgcc -g -B../../ -shared -shared-libgcc \
+- -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) libgnat.a \
+- sys\$$library:trace.exe \
+- --for-linker=/noinform \
+- --for-linker=SYMVEC_$$$$.opt \
+- --for-linker=gsmatch=equal,$(GSMATCH_VERSION)
+- cd $(RTSDIR) && \
+- ../../gnatsym -s SYMVEC_$$$$.opt \
+- $(GNATRTL_TASKING_OBJS) && \
+- ../../xgcc -g -B../../ -shared -shared-libgcc \
+- -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+- libgnarl.a libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+- sys\$$library:trace.exe \
+- --for-linker=/noinform \
+- --for-linker=SYMVEC_$$$$.opt \
+- --for-linker=gsmatch=equal,$(GSMATCH_VERSION)
++gnatlib-shared-dual: gnatlib-static-zcx gnatlib-static-sjlj gnatlib-shared-zcx
+
+-gnatlib-shared:
++gnatlib-shared-zcx: rts = $(subst gnatlib,rts,$@)
++gnatlib-shared-zcx: gnatlib-sources-zcx/a-except.ads
++ if [ ! -d $(rts) ] ; then \
++ cp -a gnatlib-sources-zcx $(rts); \
++ $(MV) $(rts)/s.ads $(rts)/system.ads; \
++ fi
+ $(MAKE) $(FLAGS_TO_PASS) \
++ EH_MECHANISM="-gcc" \
+ GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+ GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+ MULTISUBDIR="$(MULTISUBDIR)" \
+ THREAD_KIND="$(THREAD_KIND)" \
+ TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
+- $(GNATLIB_SHARED)
++ $(rts)/$(libgnat)
+
+-gnatlib-sjlj:
+- $(MAKE) $(FLAGS_TO_PASS) EH_MECHANISM="" \
+- THREAD_KIND="$(THREAD_KIND)" ../stamp-gnatlib1-$(RTSDIR)
+- sed -e 's/ZCX_By_Default.*/ZCX_By_Default : constant Boolean := False;/' $(RTSDIR)/system.ads > $(RTSDIR)/s.ads
+- $(MV) $(RTSDIR)/s.ads $(RTSDIR)/system.ads
++gnatlib-static-sjlj: rts = $(subst gnatlib,rts,$@)
++gnatlib-static-sjlj: gnatlib-sources-sjlj/a-except.ads
++ if [ ! -d $(rts) ] ; then \
++ cp -a gnatlib-sources-sjlj $(rts); \
++ $(MV) $(rts)/s.ads $(rts)/system.ads; \
++ fi
+ $(MAKE) $(FLAGS_TO_PASS) \
+ EH_MECHANISM="" \
+ GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+@@ -2576,13 +2503,15 @@
+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+ MULTISUBDIR="$(MULTISUBDIR)" \
+ THREAD_KIND="$(THREAD_KIND)" \
+- TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" gnatlib
++ TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
++ $(rts)/libgnat$(arext)
+
+-gnatlib-zcx:
+- $(MAKE) $(FLAGS_TO_PASS) EH_MECHANISM="-gcc" \
+- THREAD_KIND="$(THREAD_KIND)" ../stamp-gnatlib1-$(RTSDIR)
+- sed -e 's/ZCX_By_Default.*/ZCX_By_Default : constant Boolean := True;/' $(RTSDIR)/system.ads > $(RTSDIR)/s.ads
+- $(MV) $(RTSDIR)/s.ads $(RTSDIR)/system.ads
++gnatlib-static-zcx: rts = $(subst gnatlib,rts,$@)
++gnatlib-static-zcx: gnatlib-sources-zcx/a-except.ads
++ if [ ! -d $(rts) ] ; then \
++ cp -a gnatlib-sources-zcx $(rts); \
++ $(MV) $(rts)/s.ads $(rts)/system.ads; \
++ fi
+ $(MAKE) $(FLAGS_TO_PASS) \
+ EH_MECHANISM="-gcc" \
+ GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+@@ -2590,7 +2519,8 @@
+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+ MULTISUBDIR="$(MULTISUBDIR)" \
+ THREAD_KIND="$(THREAD_KIND)" \
+- TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" gnatlib
++ TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
++ $(rts)/libgnat$(arext)
+
+ # .s files for cross-building
+ gnat-cross: force
+@@ -2598,6 +2528,10 @@
+
+ ADA_INCLUDE_DIR = $(libsubdir)/adainclude
+ ADA_RTL_OBJ_DIR = $(libsubdir)/adalib
++ADA_NATIVE_INCLUDE_DIR = $(libsubdir)/rts-native/adainclude
++ADA_NATIVE_RTL_OBJ_DIR = $(libsubdir)/rts-native/adalib
++ADA_SJLJ_INCLUDE_DIR = $(libsubdir)/rts-sjlj/adainclude
++ADA_SJLJ_RTL_OBJ_DIR = $(libsubdir)/rts-sjlj/adalib
+
+ # force no sibling call optimization on s-traceb.o so the number of stack
+ # frames to be skipped when computing a call chain is not modified by
+Index: b/src/gnattools/Makefile.in
+===================================================================
+--- a/src/gnattools/Makefile.in
++++ b/src/gnattools/Makefile.in
+@@ -35,12 +35,13 @@
+ LN_S=@LN_S@
+ target_noncanonical=@target_noncanonical@
+
++RTS=../gcc/ada/rts-shared-zcx
+ CFLAGS=-O2 -Wall
+ ADA_CFLAGS=-O2 -gnatn
+-ADA_INCLUDES=-nostdinc -I- -I. -I../gcc/ada/rts -I../libgnatvsn -I../libgnatprj
++ADA_INCLUDES=-nostdinc -I- -I. -I$(RTS) -I../libgnatvsn -I../libgnatprj
+ LIB_VERSION=$(strip $(shell grep ' Library_Version :' \
+ ../libgnatvsn/gnatvsn.ads | sed -e 's/.*"\(.*\)".*/\1/'))
+-ADA_LIBS := -L../gcc/ada/rts -lgnat-$(LIB_VERSION)
++ADA_LIBS := -L$(RTS) -lgnat-$(LIB_VERSION)
+ ADA_LIBS += -L../libgnatvsn -lgnatvsn
+ ADA_LIBS += -L../libgnatprj -lgnatprj
+
+@@ -110,6 +111,7 @@
+
+ .PHONY: gnattools gnattools-native gnattools-cross regnattools
+ gnattools: @default_gnattools_target@
++ (cd $(RTS); if [ -d obj ]; then mv obj/* .; rmdir obj; fi)
+
+ BODIES := $(foreach f,$(OBJECTS),$(wildcard $(patsubst %.o,@srcdir@/../gcc/ada/%.adb,$(f))))
+ SPECS := $(foreach f,$(OBJECTS),$(wildcard $(patsubst %.o,@srcdir@/../gcc/ada/%.ads,$(f))))
+@@ -120,9 +122,12 @@
+ for file in $(BODIES) $(SPECS); do \
+ $(LN_S) -f $$file .; \
+ done
++# Move the RTS object files away lest they be linked statically into the
++# tools. Only the .ali, .a and .so files must remain.
++ (cd $(RTS); mkdir obj; mv *.o obj; chmod a-wx *.ali)
+ touch $@
+
+-gnattools-native: ../gcc/ada/rts/libgnat-$(LIB_VERSION).so
++gnattools-native: $(RTS)/libgnat-$(LIB_VERSION).so
+ gnattools-native: ../libgnatvsn/libgnatvsn.so
+ gnattools-native: stamp-gnattools-sources
+ gnattools-native: $(TOOLS)
+@@ -138,7 +143,7 @@
+ $(GCC) -o $@ $^ \
+ ../libgnatprj/libgnatprj.a \
+ ../libgnatvsn/libgnatvsn.a \
+- ../gcc/ada/rts/libgnat.a \
++ ../gcc/ada/rts-static-zcx/libgnat.a \
+ ../libiberty/libiberty.a
+
+ gnatlink: $(GNATLINK_OBJS) b_gnatl.o
+@@ -156,7 +161,7 @@
+ $(GCC) -o $@ $(ADA_CFLAGS) $^ \
+ ../libgnatprj/libgnatprj.a \
+ ../libgnatvsn/libgnatvsn.a \
+- ../gcc/ada/rts/libgnat.a \
++ ../gcc/ada/rts-static-zcx/libgnat.a \
+ ../libiberty/libiberty.a
+
+ gnatmake: $(GNATMAKE_OBJS) b_gnatm.o
+Index: b/src/libgnatprj/Makefile.in
+===================================================================
+--- a/src/libgnatprj/Makefile.in
++++ b/src/libgnatprj/Makefile.in
+@@ -25,7 +25,8 @@
+ @srcdir@/../gcc/ada/gnatvsn.ads | \
+ sed -e 's/.*"\(.*\)".*/\1/'))
+ GCC:=../gcc/xgcc -B../gcc/
+-LIBGNAT_JUST_BUILT := -nostdinc -I../gcc/ada/rts
++RTS:=../gcc/ada/rts-shared-zcx
++LIBGNAT_JUST_BUILT := -nostdinc -I$(RTS)
+ LIBGNATVSN := -I../libgnatvsn
+ CFLAGS := -g -O2
+ ADAFLAGS := -g -O2 -gnatn
+@@ -70,7 +71,7 @@
+ libgnatprj.so.$(LIB_VERSION): $(addprefix obj-shared/,$(OBJECTS))
+ : # Make libgnatprj.so
+ $(GCC) -o $@ -shared -fPIC -Wl,--soname,$@ $^ \
+- -L../gcc/ada/rts -lgnat-$(LIB_VERSION) \
++ -L$(RTS) -lgnat-$(LIB_VERSION) \
+ -L../libgnatvsn -lgnatvsn
+ $(LN_S) -f libgnatprj.so.$(LIB_VERSION) libgnatprj.so
+ chmod a=r obj-shared/*.ali
+Index: b/src/libgnatvsn/Makefile.in
+===================================================================
+--- a/src/libgnatvsn/Makefile.in
++++ b/src/libgnatvsn/Makefile.in
+@@ -25,7 +25,8 @@
+ @srcdir@/../gcc/ada/gnatvsn.ads | \
+ sed -e 's/.*"\(.*\)".*/\1/'))
+ GCC:=../gcc/xgcc -B../gcc/
+-LIBGNAT_JUST_BUILT := -nostdinc -I../gcc/ada/rts
++RTS:=../gcc/ada/rts-shared-zcx
++LIBGNAT_JUST_BUILT := -nostdinc -I$(RTS)
+ CFLAGS := -g -O2 -gnatn
+ BASEVER := $(shell cat @srcdir@/../gcc/BASE-VER)
+ DEVPHASE := $(shell cat @srcdir@/../gcc/DEV-PHASE)
+@@ -66,7 +67,7 @@
+ libgnatvsn.so.$(LIB_VERSION): $(addprefix obj-shared/,$(OBJECTS))
+ : # Make libgnatvsn.so
+ $(GCC) -o $@ -shared -fPIC -Wl,--soname,$@ $^ \
+- -L../gcc/ada/rts -lgnat-$(LIB_VERSION)
++ -L$(RTS) -lgnat-$(LIB_VERSION)
+ ln -s libgnatvsn.so.$(LIB_VERSION) libgnatvsn.so
+ chmod a=r obj-shared/*.ali
+ # Make the .ali files, but not the .o files, visible to the gnat tools.
+Index: b/src/gcc/ada/gcc-interface/Make-lang.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Make-lang.in
++++ b/src/gcc/ada/gcc-interface/Make-lang.in
+@@ -70,7 +70,8 @@
+ "ADA_FOR_TARGET=$(ADA_FOR_TARGET)" \
+ "INSTALL=$(INSTALL)" \
+ "INSTALL_DATA=$(INSTALL_DATA)" \
+- "INSTALL_PROGRAM=$(INSTALL_PROGRAM)"
++ "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
++ "GCC_FOR_TARGET=$(GCC_FOR_TARGET)"
+
+ # Say how to compile Ada programs.
+ .SUFFIXES: .ada .adb .ads
diff --git a/debian/patches/ada-symbolic-tracebacks.diff b/debian/patches/ada-symbolic-tracebacks.diff
new file mode 100644
index 0000000..f217209
--- /dev/null
+++ b/debian/patches/ada-symbolic-tracebacks.diff
@@ -0,0 +1,327 @@
+# DP: - Enable support for symbolic tracebacks in exceptions (delete the dummy
+# DP: convert_addresses from adaint.c, and provide a real one separately.)
+
+Ported Jürgen Pfeifer's patch to enable symbolic tracebacks on Debian
+GNU/Linux.
+
+The binary distribution of GNAT 3.15p comes with an old version of
+binutils that includes a library, libaddr2line.a. This library does
+not exist in recent versions of binutils. The patch works around this
+by calling /usr/bin/addr2line (still part of binutils) and parsing the
+output. See debian/convert_addresses.c for the gory details.
+
+I have modified convert_addresses.c to not use a shell script anymore;
+Debian controls the version of binutils which is installed. Also, I
+use execve instead of execle.
+
+--
+Ludovic Brenta.
+
+# ' make emacs highlighting happy
+
+Index: b/src/gcc/ada/gcc-interface/Makefile.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -247,8 +247,8 @@
+ # Both . and srcdir are used, in that order,
+ # so that tm.h and config.h will be found in the compilation
+ # subdirectory rather than in the source directory.
+-INCLUDES = -I- -I. -I.. -I$(srcdir)/ada -I$(srcdir) -I$(srcdir)/config \
+- -I$(srcdir)/../include
++INCLUDES = -iquote . -iquote .. -iquote $(srcdir)/ada -iquote$(srcdir) \
++ -iquote $(srcdir)/config -iquote $(srcdir)/../include
+
+ ADA_INCLUDES = -I- -I. -I$(srcdir)/ada
+
+@@ -2235,7 +2235,7 @@
+ a-nucoar.o a-nurear.o i-forbla.o i-forlap.o s-gearop.o
+
+ GNATRTL_OBJS = $(GNATRTL_NONTASKING_OBJS) $(GNATRTL_TASKING_OBJS) \
+- $(GNATRTL_LINEARALGEBRA_OBJS) g-trasym.o memtrack.o
++ $(GNATRTL_LINEARALGEBRA_OBJS) g-trasym.o memtrack.o convert_addresses.o
+
+ # Default run time files
+
+@@ -2358,7 +2358,6 @@
+ for file in $(RTSDIR)/*.ali; do \
+ $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
+ done
+- -$(INSTALL_DATA) $(RTSDIR)/g-trasym$(objext) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
+ -cd $(RTSDIR); for file in *$(arext);do \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
+ $(RANLIB_FOR_TARGET) $(DESTDIR)$(ADA_RTL_OBJ_DIR)/$$file; \
+@@ -2469,7 +2468,7 @@
+ $(GNATRTL_OBJS)
+ $(RM) $(RTSDIR)/libgnat$(arext) $(RTSDIR)/libgnarl$(arext)
+ $(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgnat$(arext) \
+- $(addprefix $(RTSDIR)/,$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS))
++ $(addprefix $(RTSDIR)/,$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) g-trasym.o convert_addresses.o)
+ $(RANLIB_FOR_TARGET) $(RTSDIR)/libgnat$(arext)
+ $(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgnarl$(arext) \
+ $(addprefix $(RTSDIR)/,$(GNATRTL_TASKING_OBJS))
+@@ -2499,6 +2498,7 @@
+ $(TARGET_LIBGCC2_CFLAGS) \
+ -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+ $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
++ g-trasym.o convert_addresses.o \
+ $(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+ $(MISCLIB) -lm
+ cd $(RTSDIR); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
+@@ -2761,6 +2761,7 @@
+ sysdep.o : sysdep.c
+ raise-gcc.o : raise-gcc.c raise.h
+ raise.o : raise.c raise.h
++convert_addresses.o : convert_addresses.c
+ vx_stack_info.o : vx_stack_info.c
+
+ cio.o : cio.c
+Index: b/src/gcc/ada/adaint.c
+===================================================================
+--- a/src/gcc/ada/adaint.c
++++ b/src/gcc/ada/adaint.c
+@@ -3421,37 +3421,6 @@
+ }
+ #endif
+
+-#if defined (IS_CROSS) \
+- || (! ((defined (sparc) || defined (i386)) && defined (sun) \
+- && defined (__SVR4)) \
+- && ! (defined (linux) && (defined (i386) || defined (__x86_64__))) \
+- && ! (defined (linux) && defined (__ia64__)) \
+- && ! (defined (linux) && defined (powerpc)) \
+- && ! defined (__FreeBSD__) \
+- && ! defined (__Lynx__) \
+- && ! defined (__hpux__) \
+- && ! defined (__APPLE__) \
+- && ! defined (_AIX) \
+- && ! (defined (__alpha__) && defined (__osf__)) \
+- && ! defined (VMS) \
+- && ! defined (__MINGW32__) \
+- && ! (defined (__mips) && defined (__sgi)))
+-
+-/* Dummy function to satisfy g-trasym.o. See the preprocessor conditional
+- just above for a list of native platforms that provide a non-dummy
+- version of this procedure in libaddr2line.a. */
+-
+-void
+-convert_addresses (const char *file_name ATTRIBUTE_UNUSED,
+- void *addrs ATTRIBUTE_UNUSED,
+- int n_addr ATTRIBUTE_UNUSED,
+- void *buf ATTRIBUTE_UNUSED,
+- int *len ATTRIBUTE_UNUSED)
+-{
+- *len = 0;
+-}
+-#endif
+-
+ #if defined (_WIN32)
+ int __gnat_argument_needs_quote = 1;
+ #else
+Index: b/src/gcc/ada/convert_addresses.c
+===================================================================
+--- /dev/null
++++ b/src/gcc/ada/convert_addresses.c
+@@ -0,0 +1,154 @@
++/*
++ Copyright (C) 1999 by Juergen Pfeifer <juergen.pfeifer@gmx.net>
++ Ada for Linux Team (ALT)
++
++ Permission is hereby granted, free of charge, to any person obtaining a
++ copy of this software and associated documentation files (the
++ "Software"), to deal in the Software without restriction, including
++ without limitation the rights to use, copy, modify, merge, publish,
++ distribute, distribute with modifications, sublicense, and/or sell
++ copies of the Software, and to permit persons to whom the Software is
++ furnished to do so, subject to the following conditions:
++
++ The above copyright notice and this permission notice shall be included
++ in all copies or substantial portions of the Software.
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
++ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
++ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
++ THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++
++ Except as contained in this notice, the name(s) of the above copyright
++ holders shall not be used in advertising or otherwise to promote the
++ sale, use or other dealings in this Software without prior written
++ authorization.
++*/
++#include <sys/types.h>
++#include <stdlib.h>
++#include <stdio.h>
++#include <unistd.h>
++#include <string.h>
++#include <signal.h>
++
++#define STDIN_FILENO 0
++#define STDOUT_FILENO 1
++#define MAX_LINE 1024
++
++#define CLOSE1 close(fd1[0]); close(fd1[1])
++#define CLOSE2 close(fd2[0]); close(fd2[1])
++#define RESTSIG sigaction(SIGPIPE,&oact,NULL)
++
++void convert_addresses
++(const char *file_name,
++ void* addrs[],
++ int n_addr,
++ char* buf,
++ int* len)
++{
++ int max_len = *len;
++ pid_t pid = getpid();
++ pid_t child;
++
++ struct sigaction act, oact;
++
++ int fd1[2], fd2[2];
++
++ *buf = 0; *len = 0;
++ act.sa_handler = SIG_IGN;
++ sigemptyset(&act.sa_mask);
++ act.sa_flags = 0;
++ if (sigaction(SIGPIPE,&act,&oact) < 0)
++ return;
++
++ if (pipe(fd1) >= 0) {
++ if (pipe(fd2)>=0) {
++ if ((child = fork()) < 0) {
++ CLOSE1; CLOSE2; RESTSIG;
++ return;
++ }
++ else {
++ if (0==child) {
++ close(fd1[1]);
++ close(fd2[0]);
++ if (fd1[0] != STDIN_FILENO) {
++ if (dup2(fd1[0],STDIN_FILENO) != STDIN_FILENO) {
++ CLOSE1; CLOSE2;
++ }
++ close(fd1[0]);
++ }
++ if (fd2[1] != STDOUT_FILENO) {
++ if (dup2(fd2[1],STDOUT_FILENO) != STDOUT_FILENO) {
++ CLOSE1; CLOSE2;
++ }
++ close(fd2[1]);
++ }
++ {
++ /* As pointed out by Florian Weimer to me, it is a
++ security threat to call the script with a user defined
++ environment and using the path. That would be Trojans
++ pleasure. Therefore we use the absolute path to
++ addr2line and an empty environment. That should be
++ safe.
++ */
++ char *const argv[] = { "addr2line",
++ "-e",
++ file_name,
++ "--demangle=gnat",
++ "--functions",
++ "--basenames",
++ NULL };
++ char *const envp[] = { NULL };
++ if (execve("/usr/bin/addr2line", argv, envp) < 0) {
++ CLOSE1; CLOSE2;
++ }
++ }
++ }
++ else {
++ int i, n;
++ char hex[16];
++ char line[MAX_LINE + 1];
++ char *p;
++ char *s = buf;
++
++ /* Parent context */
++ close(fd1[0]);
++ close(fd2[1]);
++
++ for(i=0; i < n_addr; i++) {
++ snprintf(hex,sizeof(hex),"%p\n",addrs[i]);
++ write(fd1[1],hex,strlen(hex));
++ n = read(fd2[0],line,MAX_LINE);
++ if (n<=0)
++ break;
++ line[n]=0;
++ /* We have approx. 16 additional chars for "%p in " clause.
++ We use this info to prevent a buffer overrun.
++ */
++ if (n + 16 + (*len) > max_len)
++ break;
++ p = strchr(line,'\n');
++ if (p) {
++ if (*(p+1)) {
++ *p = 0;
++ *len += snprintf(s, (max_len - (*len)), "%p in %s at %s",addrs[i], line, p+1);
++ }
++ else {
++ *len += snprintf(s, (max_len - (*len)), "%p at %s",addrs[i], line);
++ }
++ s = buf + (*len);
++ }
++ }
++ close(fd1[1]);
++ close(fd2[0]);
++ }
++ }
++ }
++ else {
++ CLOSE1;
++ }
++ }
++ RESTSIG;
++}
+Index: b/src/gcc/ada/g-trasym.adb
+===================================================================
+--- a/src/gcc/ada/g-trasym.adb
++++ b/src/gcc/ada/g-trasym.adb
+@@ -32,16 +32,16 @@
+ ------------------------------------------------------------------------------
+
+ -- Run-time symbolic traceback support
++-- This file has been modified by Juergen Pfeifer (31-Dec-1999) for
++-- the purpose to support the Ada for Linux Team implementation of
++-- convert_addresses. This implementation has the advantage to run
++-- on the binutils as they are deployed on Linux.
+
+ with System.Soft_Links;
+ with Ada.Exceptions.Traceback; use Ada.Exceptions.Traceback;
+
+ package body GNAT.Traceback.Symbolic is
+
+- pragma Linker_Options ("-laddr2line");
+- pragma Linker_Options ("-lbfd");
+- pragma Linker_Options ("-liberty");
+-
+ package TSL renames System.Soft_Links;
+
+ -- To perform the raw addresses to symbolic form translation we rely on a
+@@ -80,10 +80,6 @@
+ -- FILENAME. LEN points to an integer which contains the size of the
+ -- BUF buffer at input and the result length at output.
+ --
+- -- This procedure is provided by libaddr2line on targets that support
+- -- it. A dummy version is in adaint.c for other targets so that build
+- -- of shared libraries doesn't generate unresolved symbols.
+- --
+ -- Note that this procedure is *not* thread-safe.
+
+ type Argv_Array is array (0 .. 0) of System.Address;
+@@ -94,8 +90,9 @@
+ (c_exename : System.Address) return System.Address;
+ pragma Import (C, locate_exec_on_path, "__gnat_locate_exec_on_path");
+
+- Res : String (1 .. 256 * Traceback'Length);
+- Len : Integer;
++ B_Size : constant Integer := 256 * Traceback'Length;
++ Len : Integer := B_Size;
++ Res : String (1 .. B_Size);
+
+ use type System.Address;
+
diff --git a/debian/patches/address-clauses-timed-entry-calls.diff b/debian/patches/address-clauses-timed-entry-calls.diff
new file mode 100644
index 0000000..87f8aa5
--- /dev/null
+++ b/debian/patches/address-clauses-timed-entry-calls.diff
@@ -0,0 +1,104 @@
+# backport bug fixes about address clauses and timed entry calls
+# taken from gcc-4.7
+#
+# http://gcc.gnu.org/ml/gcc-patches/2011-08/msg02277.html
+# Thanks to Arnaud Charlet
+
+--- a/src/gcc/ada/exp_ch9.adb
++++ b/src/gcc/ada/exp_ch9.adb
+@@ -24,6 +24,7 @@
+ ------------------------------------------------------------------------------
+
+ with Atree; use Atree;
++with Atree.Copy_Separate_List;
+ with Checks; use Checks;
+ with Einfo; use Einfo;
+ with Elists; use Elists;
+@@ -10908,6 +10909,11 @@
+ -- end if;
+ -- end if;
+ -- end;
++ --
++ -- The triggering statement and the timed statements have not been
++ -- analyzed yet (see Analyzed_Timed_Entry_Call). They may contain local
++ -- declarations, and therefore the copies that are made during expansion
++ -- must be disjoint, as for any other inlining.
+
+ procedure Expand_N_Timed_Entry_Call (N : Node_Id) is
+ Loc : constant Source_Ptr := Sloc (N);
+@@ -11199,7 +11205,7 @@
+ -- <timed-statements>
+ -- end if;
+
+- N_Stats := New_Copy_List_Tree (E_Stats);
++ N_Stats := Copy_Separate_List (E_Stats);
+
+ Prepend_To (N_Stats,
+ Make_If_Statement (Loc,
+@@ -11242,7 +11248,7 @@
+ -- <dispatching-call>;
+ -- <triggering-statements>
+
+- Lim_Typ_Stmts := New_Copy_List_Tree (E_Stats);
++ Lim_Typ_Stmts := Copy_Separate_List (E_Stats);
+ Prepend_To (Lim_Typ_Stmts, New_Copy_Tree (E_Call));
+
+ -- Generate:
+--- /dev/null
++++ b/src/gcc/ada/atree-copy_separate_list.adb
+@@ -0,0 +1,15 @@
++with Nlists;
++
++function Atree.Copy_Separate_List (Source : List_Id) return List_Id is
++ use Atree.Atree_Private_Part.Nodes;
++ use Nlists;
++ Result : constant List_Id := New_List;
++ Nod : Node_Id;
++begin
++ Nod := Nlists.First (Source);
++ while Present (Nod) loop
++ Append (Copy_Separate_Tree (Nod), Result);
++ Next (Nod);
++ end loop;
++ return Result;
++end Atree.Copy_Separate_List;
+--- /dev/null
++++ b/src/gcc/ada/atree-copy_separate_list.ads
+@@ -0,0 +1 @@
++function Atree.Copy_Separate_List (Source : List_Id) return List_Id;
+--- a/src/gcc/ada/gcc-interface/Make-lang.in
++++ b/src/gcc/ada/gcc-interface/Make-lang.in
+@@ -158,6 +158,7 @@
+ ada/exp_ch7.o \
+ ada/exp_ch8.o \
+ ada/exp_ch9.o \
++ ada/atree-copy_separate_list.o \
+ ada/exp_code.o \
+ ada/exp_dbug.o \
+ ada/exp_disp.o \
+@@ -1371,6 +1372,17 @@
+ ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \
+ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads
+
++ada/atree-copy_separate_list.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
++ ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \
++ ada/atree.adb ada/casing.ads ada/debug.ads ada/einfo.ads \
++ ada/hostparm.ads ada/namet.ads ada/nlists.ads ada/nlists.adb \
++ ada/opt.ads ada/output.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
++ ada/snames.ads ada/system.ads ada/s-exctab.ads ada/s-imenne.ads \
++ ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-stalib.ads \
++ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
++ ada/table.ads ada/table.adb ada/tree_io.ads ada/types.ads ada/uintp.ads \
++ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads
++
+ ada/back_end.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
+ ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \
+ ada/atree.adb ada/back_end.ads ada/back_end.adb ada/casing.ads \
+@@ -2006,6 +2018,7 @@
+ ada/exp_ch9.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
+ ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \
+ ada/atree.adb ada/casing.ads ada/checks.ads ada/csets.ads ada/debug.ads \
++ ada/atree-copy_separate_list.ads ada/atree-copy_separate_list.adb \
+ ada/einfo.ads ada/einfo.adb ada/elists.ads ada/elists.adb \
+ ada/err_vars.ads ada/errout.ads ada/erroutc.ads ada/exp_aggr.ads \
+ ada/exp_ch11.ads ada/exp_ch3.ads ada/exp_ch6.ads ada/exp_ch7.ads \
diff --git a/debian/patches/alpha-ieee-doc.diff b/debian/patches/alpha-ieee-doc.diff
new file mode 100644
index 0000000..0e3190a
--- /dev/null
+++ b/debian/patches/alpha-ieee-doc.diff
@@ -0,0 +1,24 @@
+# DP: #212912
+# DP: on alpha-linux, make -mieee default and add -mieee-disable switch
+# DP: to turn default off (doc patch)
+
+---
+ gcc/doc/invoke.texi | 7 +++++++
+ 1 files changed, 7 insertions(+), 0 deletions(-)
+
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -9980,6 +9980,13 @@ able to correctly support denormalized numbers and exceptional IEEE
+ values such as not-a-number and plus/minus infinity. Other Alpha
+ 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
+ This is like @option{-mieee} except the generated code also maintains
diff --git a/debian/patches/alpha-ieee.diff b/debian/patches/alpha-ieee.diff
new file mode 100644
index 0000000..6ac5f40
--- /dev/null
+++ b/debian/patches/alpha-ieee.diff
@@ -0,0 +1,21 @@
+# DP: #212912
+# DP: on alpha-linux, make -mieee default and add -mieee-disable switch
+# DP: to turn default off
+
+---
+ gcc/config/alpha/alpha.c | 4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+--- a/src/gcc/config/alpha/alpha.c
++++ b/src/gcc/config/alpha/alpha.c
+@@ -281,6 +281,10 @@ override_options (void)
+
+ int i;
+
++ /* 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)
+ {
diff --git a/debian/patches/alpha-no-ev4-directive.diff b/debian/patches/alpha-no-ev4-directive.diff
new file mode 100644
index 0000000..e34b9ea
--- /dev/null
+++ b/debian/patches/alpha-no-ev4-directive.diff
@@ -0,0 +1,30 @@
+# DP: never emit .ev4 directive.
+
+---
+ gcc/config/alpha/alpha.c | 7 +++----
+ 1 files changed, 3 insertions(+), 4 deletions(-)
+
+--- a/src/gcc/config/alpha/alpha.c
++++ b/src/gcc/config/alpha/alpha.c
+@@ -9740,7 +9740,7 @@
+ fputs ("\t.set nomacro\n", asm_out_file);
+ if (TARGET_SUPPORT_ARCH | TARGET_BWX | TARGET_MAX | TARGET_FIX | TARGET_CIX)
+ {
+- const char *arch;
++ const char *arch = NULL;
+
+ if (alpha_cpu == PROCESSOR_EV6 || TARGET_FIX || TARGET_CIX)
+ arch = "ev6";
+@@ -9750,10 +9750,9 @@
+ arch = "ev56";
+ else if (alpha_cpu == PROCESSOR_EV5)
+ arch = "ev5";
+- else
+- arch = "ev4";
+
+- fprintf (asm_out_file, "\t.arch %s\n", arch);
++ if (arch)
++ fprintf (asm_out_file, "\t.arch %s\n", arch);
+ }
+ }
+ #endif
diff --git a/debian/patches/aotcompile.diff b/debian/patches/aotcompile.diff
new file mode 100644
index 0000000..e5cdce5
--- /dev/null
+++ b/debian/patches/aotcompile.diff
@@ -0,0 +1,51 @@
+--- ./build/aot/aotcompile.py.orig 2010-04-08 13:38:27.621086079 +0000
++++ ./build/aot/aotcompile.py 2010-04-08 14:22:55.102335973 +0000
+@@ -31,12 +31,25 @@
+ "dbtool": "/usr/lib/gcc-snapshot/bin/gcj-dbtool"}
+
+ MAKEFLAGS = []
+-GCJFLAGS = ["-fPIC", "-findirect-dispatch", "-fjni"]
++GCJFLAGS = ["-O2 -fPIC", "-findirect-dispatch", "-fjni"]
+ LDFLAGS = ["-Wl,-Bsymbolic"]
+
+ MAX_CLASSES_PER_JAR = 1024
+ MAX_BYTES_PER_JAR = 1048576
+
++try:
++ for line in file('/proc/meminfo'):
++ if line.startswith('MemTotal:'):
++ memtotal = int(line.split()[1])
++ if memtotal < 270000:
++ MAX_CLASSES_PER_JAR = 512
++ MAX_BYTES_PER_JAR = 524288
++ if memtotal < 140000:
++ MAX_CLASSES_PER_JAR = 256
++ MAX_BYTES_PER_JAR = 262144
++except:
++ pass
++
+ MAKEFILE = "Makefile"
+
+ MAKEFILE_HEADER = '''\
+@@ -49,7 +62,7 @@
+ $(GCJ) -c $(GCJFLAGS) $< -o $@
+
+ TARGETS = \\
+-%(targets)s
++javac ecj1
+
+ all: $(TARGETS)'''
+
+@@ -63,6 +76,12 @@
+ %(dso)s: $(%(base)s_OBJECTS)
+ $(GCJ) -shared $(GCJFLAGS) $(LDFLAGS) $^ -o $@
+
++javac: $(%(base)s_OBJECTS) resources.o
++ $(GCJ) $(GCJFLAGS) $(RPATH) -Wl,-O1 --main=org.eclipse.jdt.internal.compiler.batch.Main $^ -o $@
++
++ecj1: $(%(base)s_OBJECTS) resources.o
++ $(GCJ) $(GCJFLAGS) $(RPATH) -Wl,-O1 --main=org.eclipse.jdt.internal.compiler.batch.GCCMain $^ -o $@
++
+ %(db)s: $(%(base)s_SOURCES)
+ $(DBTOOL) -n $@ 64
+ for jar in $^; do \\
diff --git a/debian/patches/arm-dynamic-linker-trunk.diff b/debian/patches/arm-dynamic-linker-trunk.diff
new file mode 100644
index 0000000..74568af
--- /dev/null
+++ b/debian/patches/arm-dynamic-linker-trunk.diff
@@ -0,0 +1,26 @@
+# DP: For ARM hard float, set the dynamic linker to
+# DP: /lib/arm-linux-gnueabihf/ld-linux.so.3.
+
+--- a/src/gcc/config/arm/linux-elf.h
++++ b/src/gcc/config/arm/linux-elf.h
+@@ -59,14 +59,18 @@
+
+ #define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc"
+
+-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#define LINUX_DYNAMIC_LINKER_SF "/lib/ld-linux.so.3"
++#define LINUX_DYNAMIC_LINKER_HF "/lib/arm-linux-gnueabihf/ld-linux.so.3"
+
+ #define LINUX_TARGET_LINK_SPEC "%{h*} \
+ %{static:-Bstatic} \
+ %{shared:-shared} \
+ %{symbolic:-Bsymbolic} \
+ %{rdynamic:-export-dynamic} \
+- -dynamic-linker " GNU_USER_DYNAMIC_LINKER " \
++ %{msoft-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
++ %{mfloat-abi=soft*:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
++ %{mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
++ %{mfloat-abi=hard:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
+ -X \
+ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
diff --git a/debian/patches/arm-dynamic-linker.diff b/debian/patches/arm-dynamic-linker.diff
new file mode 100644
index 0000000..9d98ecd
--- /dev/null
+++ b/debian/patches/arm-dynamic-linker.diff
@@ -0,0 +1,26 @@
+# DP: For ARM hard float, set the dynamic linker to
+# DP: /lib/arm-linux-gnueabihf/ld-linux.so.3.
+
+--- a/src/gcc/config/arm/linux-elf.h
++++ b/src/gcc/config/arm/linux-elf.h
+@@ -62,14 +62,18 @@
+
+ #define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"
+
+-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#define LINUX_DYNAMIC_LINKER_SF "/lib/ld-linux.so.3"
++#define LINUX_DYNAMIC_LINKER_HF "/lib/arm-linux-gnueabihf/ld-linux.so.3"
+
+ #define LINUX_TARGET_LINK_SPEC "%{h*} \
+ %{static:-Bstatic} \
+ %{shared:-shared} \
+ %{symbolic:-Bsymbolic} \
+ %{rdynamic:-export-dynamic} \
+- -dynamic-linker " LINUX_DYNAMIC_LINKER " \
++ %{msoft-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
++ %{mfloat-abi=soft*:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
++ %{mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
++ %{mfloat-abi=hard:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
+ -X \
+ --hash-style=both \
+ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
diff --git a/debian/patches/arm-multilib-soft-float.diff b/debian/patches/arm-multilib-soft-float.diff
new file mode 100644
index 0000000..18f51fb
--- /dev/null
+++ b/debian/patches/arm-multilib-soft-float.diff
@@ -0,0 +1,26 @@
+--- a/src/gcc/config/arm/t-linux-eabi
++++ b/src/gcc/config/arm/t-linux-eabi
+@@ -24,6 +24,23 @@
+ MULTILIB_OPTIONS =
+ MULTILIB_DIRNAMES =
+
++ifneq (,$(findstring MULTIARCH_DEFAULTS,$(tm_defines)))
++ifneq (,$(findstring __arm_linux_gnueabi__,$(tm_defines)))
++ MULTILIB_OPTIONS = mfloat-abi=softfp/mfloat-abi=hard/mfloat-abi=soft
++ MULTILIB_DIRNAMES = . hf soft-float
++ MULTILIB_EXCEPTIONS =
++ MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?soft=msoft-float
++ MULTILIB_OSDIRNAMES = ../../lib/arm-linux-gnueabi ../../lib/arm-linux-gnueabihf soft-float
++endif
++ifneq (,$(findstring __arm_linux_gnueabihf__,$(tm_defines)))
++ MULTILIB_OPTIONS = mfloat-abi=hard/mfloat-abi=softfp/mfloat-abi=soft
++ MULTILIB_DIRNAMES = . sf soft-float
++ MULTILIB_EXCEPTIONS =
++ MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?soft=msoft-float
++ MULTILIB_OSDIRNAMES = ../../lib/arm-linux-gnueabihf ../../lib/arm-linux-gnueabi soft-float
++endif
++endif
++
+ #MULTILIB_OPTIONS += mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te
+ #MULTILIB_DIRNAMES += fa606te fa626te fmp626 fa726te
+ #MULTILIB_EXCEPTIONS += *mthumb/*mcpu=fa606te *mthumb/*mcpu=fa626te *mthumb/*mcpu=fmp626 *mthumb/*mcpu=fa726te*
diff --git a/debian/patches/arm-multilib.diff b/debian/patches/arm-multilib.diff
new file mode 100644
index 0000000..8dee020
--- /dev/null
+++ b/debian/patches/arm-multilib.diff
@@ -0,0 +1,27 @@
+# DP: ARM hard/soft float multilib
+
+Index: gcc-4.6-4.6.1/src/gcc/config/arm/t-linux-eabi
+===================================================================
+--- gcc-4.6-4.6.1.orig/src/gcc/config/arm/t-linux-eabi 2011-01-03 20:52:22.000000000 +0000
++++ gcc-4.6-4.6.1/src/gcc/config/arm/t-linux-eabi 2011-08-21 21:08:47.583351817 +0000
+@@ -24,6 +24,20 @@
+ MULTILIB_OPTIONS =
+ MULTILIB_DIRNAMES =
+
++ifeq ($(with_float),hard)
++MULTILIB_OPTIONS = mfloat-abi=softfp/mfloat-abi=hard
++MULTILIB_DIRNAMES = sf .
++MULTILIB_EXCEPTIONS =
++MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?softfp=msoft-float mfloat-abi?softfp=mfloat-abi?soft
++MULTILIB_OSDIRNAMES = arm-linux-gnueabi:arm-linux-gnueabi ../lib:arm-linux-gnueabihf
++else
++MULTILIB_OPTIONS = mfloat-abi=softfp/mfloat-abi=hard
++MULTILIB_DIRNAMES = . hf
++MULTILIB_EXCEPTIONS =
++MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?softfp=msoft-float mfloat-abi?softfp=mfloat-abi?soft
++MULTILIB_OSDIRNAMES = ../lib:arm-linux-gnueabi arm-linux-gnueabihf:arm-linux-gnueabihf
++endif
++
+ #MULTILIB_OPTIONS += mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te
+ #MULTILIB_DIRNAMES += fa606te fa626te fmp626 fa726te
+ #MULTILIB_EXCEPTIONS += *mthumb/*mcpu=fa606te *mthumb/*mcpu=fa626te *mthumb/*mcpu=fmp626 *mthumb/*mcpu=fa726te*
diff --git a/debian/patches/armhf-triplet-trunk.diff b/debian/patches/armhf-triplet-trunk.diff
new file mode 100644
index 0000000..40e5ffc
--- /dev/null
+++ b/debian/patches/armhf-triplet-trunk.diff
@@ -0,0 +1,104 @@
+# DP: add support for arm-linux-*eabi* triplets; useful for armhf
+
+--- a/src/libjava/configure.ac.orig
++++ b/src/libjava/configure.ac
+@@ -924,7 +924,7 @@
+ # on Darwin -single_module speeds up loading of the dynamic libraries.
+ extra_ldflags_libjava=-Wl,-single_module
+ ;;
+-arm*linux*eabi)
++arm*-*-linux-*eabi*)
+ # Some of the ARM unwinder code is actually in libstdc++. We
+ # could in principle replicate it in libgcj, but it's better to
+ # have a dependency on libstdc++.
+--- a/src/gcc/config.gcc.orig
++++ b/src/gcc/config.gcc
+@@ -822,7 +822,7 @@
+ esac
+ tmake_file="${tmake_file} t-linux arm/t-arm"
+ case ${target} in
+- arm*-*-linux-*eabi)
++ arm*-*-linux-*eabi*)
+ tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
+ tm_file="$tm_file ../../libgcc/config/arm/bpabi-lib.h"
+ tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi t-slibgcc-libgcc"
+@@ -850,7 +850,7 @@
+ tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/linux-gas.h arm/uclinux-elf.h glibc-stdint.h"
+ tmake_file="arm/t-arm arm/t-arm-elf"
+ case ${target} in
+- arm*-*-uclinux*eabi)
++ arm*-*-uclinux*eabi*)
+ tm_file="$tm_file arm/bpabi.h arm/uclinux-eabi.h"
+ tm_file="$tm_file ../../libgcc/config/arm/bpabi-lib.h"
+ tmake_file="$tmake_file arm/t-bpabi"
+--- a/src/gcc/testsuite/lib/target-supports.exp.orig
++++ b/src/gcc/testsuite/lib/target-supports.exp
+@@ -3235,7 +3235,7 @@
+ || [istarget i?86-*-*]
+ || [istarget x86_64-*-*]
+ || [istarget alpha*-*-*]
+- || [istarget arm*-*-linux-gnueabi]
++ || [istarget arm*-*-linux-*eabi*]
+ || [istarget bfin*-*linux*]
+ || [istarget hppa*-*linux*]
+ || [istarget s390*-*-*]
+@@ -3266,7 +3266,7 @@
+ || [istarget i?86-*-*]
+ || [istarget x86_64-*-*]
+ || [istarget alpha*-*-*]
+- || [istarget arm*-*-linux-gnueabi]
++ || [istarget arm*-*-linux-*eabi*]
+ || [istarget hppa*-*linux*]
+ || [istarget s390*-*-*]
+ || [istarget powerpc*-*-*]
+--- a/src/gcc/ada/gcc-interface/Makefile.in.orig
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -1846,7 +1846,7 @@
+ LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+
+-ifeq ($(strip $(filter-out arm% linux-gnueabi,$(arch) $(osys)-$(word 4,$(targ)))),)
++ifeq ($(strip $(filter-out arm%-linux,$(arch)-$(osys)) $(if $(findstring eabi,$(word 4,$(targ))),,$(word 4,$(targ)))),)
+ LIBGNAT_TARGET_PAIRS = \
+ a-intnam.ads<a-intnam-linux.ads \
+ s-inmaop.adb<s-inmaop-posix.adb \
+--- a/src/libstdc++-v3/configure.host.orig
++++ b/src/libstdc++-v3/configure.host
+@@ -322,7 +322,7 @@
+ fi
+ esac
+ case "${host}" in
+- arm*-*-linux-*eabi)
++ arm*-*-linux-*eabi*)
+ port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver"
+ ;;
+ esac
+--- a/src/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc.orig
++++ b/src/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc
+@@ -1,5 +1,5 @@
+ // { dg-options "-std=gnu++0x -funsigned-char -fshort-enums" }
+-// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux*eabi } }
++// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux-*eabi* } }
+
+ // 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
+ //
+--- a/src/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc.orig
++++ b/src/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc
+@@ -1,5 +1,5 @@
+ // { dg-options "-std=gnu++0x -funsigned-char -fshort-enums" }
+-// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux*eabi } }
++// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux-*eabi* } }
+
+ // 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
+ //
+--- a/src/libgcc/config.host
++++ b/src/libgcc/config.host
+@@ -334,7 +334,7 @@
+ arm*-*-linux*) # ARM GNU/Linux with ELF
+ tmake_file="${tmake_file} arm/t-arm t-fixedpoint-gnu-prefix"
+ case ${host} in
+- arm*-*-linux-*eabi)
++ arm*-*-linux-*eabi*)
+ tmake_file="${tmake_file} arm/t-elf arm/t-bpabi arm/t-linux-eabi t-slibgcc-libgcc"
+ tm_file="$tm_file arm/bpabi-lib.h"
+ unwind_header=config/arm/unwind-arm.h
diff --git a/debian/patches/armhf-triplet.diff b/debian/patches/armhf-triplet.diff
new file mode 100644
index 0000000..98a5bf9
--- /dev/null
+++ b/debian/patches/armhf-triplet.diff
@@ -0,0 +1,104 @@
+# DP: add support for arm-linux-*eabi* triplets; useful for armhf
+
+--- a/src/libjava/configure.ac.orig
++++ b/src/libjava/configure.ac
+@@ -924,7 +924,7 @@
+ # on Darwin -single_module speeds up loading of the dynamic libraries.
+ extra_ldflags_libjava=-Wl,-single_module
+ ;;
+-arm*linux*eabi)
++arm*-*-linux-*eabi*)
+ # Some of the ARM unwinder code is actually in libstdc++. We
+ # could in principle replicate it in libgcj, but it's better to
+ # have a dependency on libstdc++.
+--- a/src/gcc/config.gcc.orig
++++ b/src/gcc/config.gcc
+@@ -822,7 +822,7 @@
+ esac
+ tmake_file="${tmake_file} t-linux arm/t-arm"
+ case ${target} in
+- arm*-*-linux-*eabi)
++ arm*-*-linux-*eabi*)
+ tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
+ tm_file="$tm_file ../../libgcc/config/arm/bpabi-lib.h"
+ tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi t-slibgcc-libgcc"
+@@ -850,7 +850,7 @@
+ tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/linux-gas.h arm/uclinux-elf.h glibc-stdint.h"
+ tmake_file="arm/t-arm arm/t-arm-elf"
+ case ${target} in
+- arm*-*-uclinux*eabi)
++ arm*-*-uclinux*eabi*)
+ tm_file="$tm_file arm/bpabi.h arm/uclinux-eabi.h"
+ tm_file="$tm_file ../../libgcc/config/arm/bpabi-lib.h"
+ tmake_file="$tmake_file arm/t-bpabi"
+--- a/src/gcc/testsuite/lib/target-supports.exp.orig
++++ b/src/gcc/testsuite/lib/target-supports.exp
+@@ -3235,7 +3235,7 @@
+ || [istarget i?86-*-*]
+ || [istarget x86_64-*-*]
+ || [istarget alpha*-*-*]
+- || [istarget arm*-*-linux-gnueabi]
++ || [istarget arm*-*-linux-*eabi*]
+ || [istarget bfin*-*linux*]
+ || [istarget hppa*-*linux*]
+ || [istarget s390*-*-*]
+@@ -3266,7 +3266,7 @@
+ || [istarget i?86-*-*]
+ || [istarget x86_64-*-*]
+ || [istarget alpha*-*-*]
+- || [istarget arm*-*-linux-gnueabi]
++ || [istarget arm*-*-linux-*eabi*]
+ || [istarget hppa*-*linux*]
+ || [istarget s390*-*-*]
+ || [istarget powerpc*-*-*]
+--- a/src/gcc/ada/gcc-interface/Makefile.in.orig
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -1846,7 +1846,7 @@
+ LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+
+-ifeq ($(strip $(filter-out arm% linux-gnueabi,$(arch) $(osys)-$(word 4,$(targ)))),)
++ifeq ($(strip $(filter-out arm%-linux,$(arch)-$(osys)) $(if $(findstring eabi,$(word 4,$(targ))),,$(word 4,$(targ)))),)
+ LIBGNAT_TARGET_PAIRS = \
+ a-intnam.ads<a-intnam-linux.ads \
+ s-inmaop.adb<s-inmaop-posix.adb \
+--- a/src/configure.ac.orig
++++ b/src/configure.ac
+@@ -682,7 +682,7 @@
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ libgloss_dir=arm
+ ;;
+- arm*-*-linux-gnueabi)
++ arm*-*-linux-*eabi*)
+ noconfigdirs="$noconfigdirs target-qthreads"
+ case ${with_newlib} in
+ no) noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+--- a/src/libstdc++-v3/configure.host.orig
++++ b/src/libstdc++-v3/configure.host
+@@ -322,7 +322,7 @@
+ fi
+ esac
+ case "${host}" in
+- arm*-*-linux-*eabi)
++ arm*-*-linux-*eabi*)
+ port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver"
+ ;;
+ esac
+--- a/src/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc.orig
++++ b/src/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc
+@@ -1,5 +1,5 @@
+ // { dg-options "-std=gnu++0x -funsigned-char -fshort-enums" }
+-// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux*eabi } }
++// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux-*eabi* } }
+
+ // 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
+ //
+--- a/src/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc.orig
++++ b/src/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc
+@@ -1,5 +1,5 @@
+ // { dg-options "-std=gnu++0x -funsigned-char -fshort-enums" }
+-// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux*eabi } }
++// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux-*eabi* } }
+
+ // 2007-05-03 Benjamin Kosnik <bkoz@redhat.com>
+ //
diff --git a/debian/patches/boehm-gc-getnprocs.diff b/debian/patches/boehm-gc-getnprocs.diff
new file mode 100644
index 0000000..5071860
--- /dev/null
+++ b/debian/patches/boehm-gc-getnprocs.diff
@@ -0,0 +1,18 @@
+# DP: boehm-gc/pthread_support.c (GC_get_nprocs): Use sysconf as fallback.
+
+---
+ boehm-gc/pthread_support.c | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+--- a/src/boehm-gc/pthread_support.c
++++ b/src/boehm-gc/pthread_support.c
+@@ -724,7 +724,8 @@
+ f = open("/proc/stat", O_RDONLY);
+ if (f < 0 || (len = STAT_READ(f, stat_buf, STAT_BUF_SIZE)) < 100) {
+ WARN("Couldn't read /proc/stat\n", 0);
+- return -1;
++ /* Fallback to sysconf after the warning */
++ return sysconf(_SC_NPROCESSORS_ONLN);
+ }
+ for (i = 0; i < len - 100; ++i) {
+ if (stat_buf[i] == '\n' && stat_buf[i+1] == 'c'
diff --git a/debian/patches/boehm-gc-nocheck.diff b/debian/patches/boehm-gc-nocheck.diff
new file mode 100644
index 0000000..231daf6
--- /dev/null
+++ b/debian/patches/boehm-gc-nocheck.diff
@@ -0,0 +1,18 @@
+# DP: Disable running the boehm-gc testsuite. Hangs the buildd at least on hppa.
+
+---
+ boehm-gc/Makefile.in | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+--- a/src/boehm-gc/Makefile.in
++++ b/src/boehm-gc/Makefile.in
+@@ -684,7 +684,8 @@ check-TESTS: $(TESTS)
+ 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
diff --git a/debian/patches/cell-branch-doc.diff b/debian/patches/cell-branch-doc.diff
new file mode 100644
index 0000000..415b373
--- /dev/null
+++ b/debian/patches/cell-branch-doc.diff
@@ -0,0 +1,2 @@
+# DP: Updates from the cell-4_5-branch (documentation) up to 2010xxxx
+
diff --git a/debian/patches/cell-branch.diff b/debian/patches/cell-branch.diff
new file mode 100644
index 0000000..7d3b114
--- /dev/null
+++ b/debian/patches/cell-branch.diff
@@ -0,0 +1,4 @@
+# DP: Updates from the cell-4_5-branch up to 2010xxxx
+
+svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_5-branch@xxxx svn://gcc.gnu.org/svn/gcc/branches/cell-4_5-branch
+
diff --git a/debian/patches/config-ml.diff b/debian/patches/config-ml.diff
new file mode 100644
index 0000000..b543e90
--- /dev/null
+++ b/debian/patches/config-ml.diff
@@ -0,0 +1,79 @@
+# DP: disable some biarch libraries for biarch builds
+
+---
+ config-ml.in | 45 ++++++++++++++++++++++++++++++++++++++++++++-
+ 1 files changed, 44 insertions(+), 1 deletions(-)
+
+--- a/src/config-ml.in
++++ b/src/config-ml.in
+@@ -306,6 +306,11 @@
+ done
+ fi
+ ;;
++i[34567]86-*-*)
++ case " $multidirs " in
++ *" 64 "*) ac_configure_args="${ac_configure_args} --host=x86_64-linux-gnu"
++ esac
++ ;;
+ m68*-*-*)
+ if [ x$enable_softfloat = xno ]
+ then
+@@ -477,9 +482,36 @@
+ esac
+ done
+ fi
++ case " $multidirs " in
++ *" 64 "*) ac_configure_args="${ac_configure_args} --host=powerpc64-linux-gnu"
++ esac
++ ;;
++s390-*-*)
++ case " $multidirs " in
++ *" 64 "*) ac_configure_args="${ac_configure_args} --host=s390x-linux-gnu"
++ esac
+ ;;
+ esac
+
++if [ -z "$biarch_multidir_names" ]; then
++ biarch_multidir_names="libiberty libstdc++-v3 libgfortran libmudflap libssp libffi libobjc libgomp"
++ echo "WARNING: biarch_multidir_names is unset. Use default value:"
++ echo " $biarch_multidir_names"
++fi
++ml_srcbase=`basename $ml_realsrcdir`
++old_multidirs="${multidirs}"
++multidirs=""
++for x in ${old_multidirs}; do
++ case " $x " in
++ " 32 "|" n32 "|" 64 "|" hf "|" sf ")
++ case "$biarch_multidir_names" in
++ *"$ml_srcbase"*) multidirs="${multidirs} ${x}" ;;
++ esac
++ ;;
++ *) multidirs="${multidirs} ${x}" ;;
++ esac
++done
++
+ # Remove extraneous blanks from multidirs.
+ # Tests like `if [ -n "$multidirs" ]' require it.
+ multidirs=`echo "$multidirs" | sed -e 's/^[ ][ ]*//' -e 's/[ ][ ]*$//' -e 's/[ ][ ]*/ /g'`
+@@ -871,9 +903,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_config_env} ${ml_srcdiroption} ; then
++ ${ac_configure_args} ${ml_configure_args} ${ml_srcdiroption} ; then
+ true
+ else
+ exit 1
diff --git a/debian/patches/cross-biarch.diff b/debian/patches/cross-biarch.diff
new file mode 100644
index 0000000..b6f9d0e
--- /dev/null
+++ b/debian/patches/cross-biarch.diff
@@ -0,0 +1,79 @@
+# DP: Fix the location of target's libs in cross-build for biarch
+
+---
+
+--- a/src/config-ml.in 2010-08-24 01:48:38.000000000 -0400
++++ b/src/config-ml.in 2010-08-24 03:56:12.000000000 -0400
+@@ -540,7 +540,12 @@
+ else \
+ if [ -d ../$${dir}/$${lib} ]; then \
+ flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
+- if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \
++ libsuffix_="$${dir}"; \
++ if [ "$${dir}" = "n32" ]; then libsuffix_=32; fi; \
++ if (cd ../$${dir}/$${lib}; $(MAKE) $(subst \
++ -B$(build_tooldir)/lib/, \
++ -B$(build_tooldir)/lib$${libsuffix_}/, \
++ $(FLAGS_TO_PASS)) \
+ CFLAGS="$(CFLAGS) $${flags}" \
+ CCASFLAGS="$(CCASFLAGS) $${flags}" \
+ FCFLAGS="$(FCFLAGS) $${flags}" \
+@@ -791,6 +796,13 @@
+ GCJ_=$GCJ' '
+ GFORTRAN_=$GFORTRAN' '
+ else
++ if [ "${ml_dir}" = "." ]; then
++ FILTER_="s!X\\(.*\\)!\\1!p"
++ elif [ "${ml_dir}" = "n32" ]; then # mips n32 -> lib32
++ FILTER_="s!X\\(.*\\)/!\\132/!p"
++ else
++ FILTER_="s!X\\(.*\\)/!\\1${ml_dir}/!p"
++ fi
+ # Create a regular expression that matches any string as long
+ # as ML_POPDIR.
+ popdir_rx=`echo "${ML_POPDIR}" | sed 's,.,.,g'`
+@@ -799,6 +811,8 @@
+ case $arg in
+ -[BIL]"${ML_POPDIR}"/*)
+ CC_="${CC_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\1/p"`' ' ;;
++ -B*/lib/)
++ CC_="${CC_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;;
+ "${ML_POPDIR}"/*)
+ CC_="${CC_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ *)
+@@ -811,6 +825,8 @@
+ case $arg in
+ -[BIL]"${ML_POPDIR}"/*)
+ CXX_="${CXX_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
++ -B*/lib/)
++ CXX_="${CXX_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;;
+ "${ML_POPDIR}"/*)
+ CXX_="${CXX_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ *)
+@@ -823,6 +839,8 @@
+ case $arg in
+ -[BIL]"${ML_POPDIR}"/*)
+ F77_="${F77_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
++ -B*/lib/)
++ F77_="${F77_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;;
+ "${ML_POPDIR}"/*)
+ F77_="${F77_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ *)
+@@ -835,6 +853,8 @@
+ case $arg in
+ -[BIL]"${ML_POPDIR}"/*)
+ GCJ_="${GCJ_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
++ -B*/lib/)
++ GCJ_="${GCJ_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;;
+ "${ML_POPDIR}"/*)
+ GCJ_="${GCJ_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ *)
+@@ -847,6 +867,8 @@
+ case $arg in
+ -[BIL]"${ML_POPDIR}"/*)
+ GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
++ -B*/lib/)
++ GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;;
+ "${ML_POPDIR}"/*)
+ GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ *)
diff --git a/debian/patches/cross-fixes-trunk.diff b/debian/patches/cross-fixes-trunk.diff
new file mode 100644
index 0000000..d9e1d02
--- /dev/null
+++ b/debian/patches/cross-fixes-trunk.diff
@@ -0,0 +1,90 @@
+# DP: Fix the linker error when creating an xcc for ia64
+
+---
+ gcc/config/alpha/linux-unwind.h | 3 +++
+ gcc/config/ia64/fde-glibc.c | 3 +++
+ gcc/config/ia64/unwind-ia64.c | 3 ++-
+ gcc/unwind-compat.c | 2 ++
+ gcc/unwind-generic.h | 2 ++
+ 6 files changed, 14 insertions(+), 1 deletions(-)
+
+--- a/src/libgcc/config/alpha/linux-unwind.h
++++ b/src/libgcc/config/alpha/linux-unwind.h
+@@ -29,6 +29,7 @@ Boston, MA 02110-1301, USA. */
+ /* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs. */
+
++#ifndef inhibit_libc
+ #include <signal.h>
+ #include <sys/ucontext.h>
+
+@@ -80,3 +81,5 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
+ fs->retaddr_column = 64;
+ return _URC_NO_REASON;
+ }
++
++#endif
+--- a/src/libgcc/config/ia64/fde-glibc.c
++++ b/src/libgcc/config/ia64/fde-glibc.c
+@@ -31,6 +31,7 @@
+ #ifndef _GNU_SOURCE
+ #define _GNU_SOURCE 1
+ #endif
++#ifndef inhibit_libc
+ #include "config.h"
+ #include <stddef.h>
+ #include <stdlib.h>
+@@ -162,3 +163,5 @@ _Unwind_FindTableEntry (void *pc, unsigned long *segment_base,
+
+ return data.ret;
+ }
++
++#endif
+--- a/src/libgcc/config/ia64/unwind-ia64.c
++++ b/src/libgcc/config/ia64/unwind-ia64.c
+@@ -27,6 +27,7 @@
+ This exception does not however invalidate any other reasons why
+ the executable file might be covered by the GNU General Public License. */
+
++#ifndef inhibit_libc
+ #include "tconfig.h"
+ #include "tsystem.h"
+ #include "coretypes.h"
+@@ -2417,3 +2417,4 @@ alias (_Unwind_SetIP);
+ #endif
+
+ #endif
++#endif
+--- a/src/libgcc/unwind-compat.c
++++ b/src/libgcc/unwind-compat.c
+@@ -29,6 +29,7 @@
+ 02110-1301, USA. */
+
+ #if defined (USE_GAS_SYMVER) && defined (USE_LIBUNWIND_EXCEPTIONS)
++#ifndef inhibit_libc
+ #include "tconfig.h"
+ #include "tsystem.h"
+ #include "unwind.h"
+@@ -213,3 +214,4 @@ _Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr val)
+ }
+ symver (_Unwind_SetIP, GCC_3.0);
+ #endif
++#endif
+--- a/src/libgcc/unwind-generic.h
++++ b/src/libgcc/unwind-generic.h
+@@ -214,6 +214,7 @@ _Unwind_SjLj_Resume_or_Rethrow (struct _Unwind_Exception *);
+ compatible with the standard ABI for IA-64, we inline these. */
+
+ #ifdef __ia64__
++#ifndef inhibit_libc
+ #include <stdlib.h>
+
+ static inline _Unwind_Ptr
+@@ -232,6 +233,7 @@ _Unwind_GetTextRelBase (struct _Unwind_Context *_C __attribute__ ((__unused__)))
+
+ /* @@@ Retrieve the Backing Store Pointer of the given context. */
+ extern _Unwind_Word _Unwind_GetBSP (struct _Unwind_Context *);
++#endif
+ #else
+ extern _Unwind_Ptr _Unwind_GetDataRelBase (struct _Unwind_Context *);
+ extern _Unwind_Ptr _Unwind_GetTextRelBase (struct _Unwind_Context *);
diff --git a/debian/patches/cross-fixes.diff b/debian/patches/cross-fixes.diff
new file mode 100644
index 0000000..f978871
--- /dev/null
+++ b/debian/patches/cross-fixes.diff
@@ -0,0 +1,90 @@
+# DP: Fix the linker error when creating an xcc for ia64
+
+---
+ gcc/config/alpha/linux-unwind.h | 3 +++
+ gcc/config/ia64/fde-glibc.c | 3 +++
+ gcc/config/ia64/unwind-ia64.c | 3 ++-
+ gcc/unwind-compat.c | 2 ++
+ gcc/unwind-generic.h | 2 ++
+ 6 files changed, 14 insertions(+), 1 deletions(-)
+
+--- a/src/gcc/config/alpha/linux-unwind.h
++++ b/src/gcc/config/alpha/linux-unwind.h
+@@ -29,6 +29,7 @@ Boston, MA 02110-1301, USA. */
+ /* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs. */
+
++#ifndef inhibit_libc
+ #include <signal.h>
+ #include <sys/ucontext.h>
+
+@@ -80,3 +81,5 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
+ fs->retaddr_column = 64;
+ return _URC_NO_REASON;
+ }
++
++#endif
+--- a/src/gcc/config/ia64/fde-glibc.c
++++ b/src/gcc/config/ia64/fde-glibc.c
+@@ -31,6 +31,7 @@
+ #ifndef _GNU_SOURCE
+ #define _GNU_SOURCE 1
+ #endif
++#ifndef inhibit_libc
+ #include "config.h"
+ #include <stddef.h>
+ #include <stdlib.h>
+@@ -162,3 +163,5 @@ _Unwind_FindTableEntry (void *pc, unsigned long *segment_base,
+
+ return data.ret;
+ }
++
++#endif
+--- a/src/gcc/config/ia64/unwind-ia64.c
++++ b/src/gcc/config/ia64/unwind-ia64.c
+@@ -27,6 +27,7 @@
+ This exception does not however invalidate any other reasons why
+ the executable file might be covered by the GNU General Public License. */
+
++#ifndef inhibit_libc
+ #include "tconfig.h"
+ #include "tsystem.h"
+ #include "coretypes.h"
+@@ -2417,3 +2417,4 @@ alias (_Unwind_SetIP);
+ #endif
+
+ #endif
++#endif
+--- a/src/gcc/unwind-compat.c
++++ b/src/gcc/unwind-compat.c
+@@ -29,6 +29,7 @@
+ 02110-1301, USA. */
+
+ #if defined (USE_GAS_SYMVER) && defined (USE_LIBUNWIND_EXCEPTIONS)
++#ifndef inhibit_libc
+ #include "tconfig.h"
+ #include "tsystem.h"
+ #include "unwind.h"
+@@ -213,3 +214,4 @@ _Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr val)
+ }
+ symver (_Unwind_SetIP, GCC_3.0);
+ #endif
++#endif
+--- a/src/gcc/unwind-generic.h
++++ b/src/gcc/unwind-generic.h
+@@ -214,6 +214,7 @@ _Unwind_SjLj_Resume_or_Rethrow (struct _Unwind_Exception *);
+ compatible with the standard ABI for IA-64, we inline these. */
+
+ #ifdef __ia64__
++#ifndef inhibit_libc
+ #include <stdlib.h>
+
+ static inline _Unwind_Ptr
+@@ -232,6 +233,7 @@ _Unwind_GetTextRelBase (struct _Unwind_Context *_C __attribute__ ((__unused__)))
+
+ /* @@@ Retrieve the Backing Store Pointer of the given context. */
+ extern _Unwind_Word _Unwind_GetBSP (struct _Unwind_Context *);
++#endif
+ #else
+ extern _Unwind_Ptr _Unwind_GetDataRelBase (struct _Unwind_Context *);
+ extern _Unwind_Ptr _Unwind_GetTextRelBase (struct _Unwind_Context *);
diff --git a/debian/patches/cross-include-trunk.diff b/debian/patches/cross-include-trunk.diff
new file mode 100644
index 0000000..94e534f
--- /dev/null
+++ b/debian/patches/cross-include-trunk.diff
@@ -0,0 +1,18 @@
+# DP: Set cross include path to .../include, not .../sys-include
+# DP: This should be a fix for famous limits.h issue
+
+---
+ gcc/configure.ac | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+--- a/src/gcc/configure.ac
++++ b/src/gcc/configure.ac
+@@ -764,7 +764,7 @@ AC_ARG_WITH(sysroot,
+ ], [
+ TARGET_SYSTEM_ROOT=
+ TARGET_SYSTEM_ROOT_DEFINE=
+- CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
++ CROSS_SYSTEM_HEADER_DIR='/usr/$(target_noncanonical)/include'
+ ])
+ AC_SUBST(TARGET_SYSTEM_ROOT)
+ AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
diff --git a/debian/patches/cross-include.diff b/debian/patches/cross-include.diff
new file mode 100644
index 0000000..7b5a1e3
--- /dev/null
+++ b/debian/patches/cross-include.diff
@@ -0,0 +1,18 @@
+# DP: Set cross include path to .../include, not .../sys-include
+# DP: This should be a fix for famous limits.h issue
+
+---
+ gcc/configure.ac | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+--- a/src/gcc/configure.ac
++++ b/src/gcc/configure.ac
+@@ -764,7 +764,7 @@ AC_ARG_WITH(sysroot,
+ ], [
+ TARGET_SYSTEM_ROOT=
+ TARGET_SYSTEM_ROOT_DEFINE=
+- CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
++ CROSS_SYSTEM_HEADER_DIR='$(prefix)/$(target_noncanonical)/include'
+ ])
+ AC_SUBST(TARGET_SYSTEM_ROOT)
+ AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
diff --git a/debian/patches/fix-warnings.diff b/debian/patches/fix-warnings.diff
new file mode 100644
index 0000000..b37393d
--- /dev/null
+++ b/debian/patches/fix-warnings.diff
@@ -0,0 +1,1341 @@
+# DP: Fix warnings with -D_FORTIFY_SOURCE and -Wformat-security.
+
+libcpp/
+
+ * macro.c (create_iso_definition): Avoid warnings with
+ -Wformat-security.
+ * lex.c (cpp_output_token): Avoid warnings with -D_FORTIFY_SOURCE.
+
+gcc/
+
+ * toplev.c (print_to_asm_out_file, print_to_stderr): Avoid warnings with
+ -Wformat-security, (pch_option_mismatch) avoid warnings with
+ -D_FORTIFY_SOURCE.
+
+ * c-convert.c (convert): Avoid warnings with -Wformat-security.
+ * c-typeck.c (convert_arguments, build_unary_op, build_binary_op): Likewise.
+ * c-common.c (c_parse_error): Likewise.
+ * cfg.c (dump_cfg_bb_info): Likewise.
+ * fold-const.c (fold_overflow_warning): Likewise.
+ * ira-conflicts.c (print_hard_reg_set): Likewise.
+ * opts.c (print_filtered_help): Likewise.
+ * tree-switch-conversion.c (do_switchconv): Likewise.
+ * collect2.c (collect_execute, scan_prog_file): Likewise.
+
+ * c-ppoutput.c (print_lines_directives_only,scan_translation_unit_trad):
+ Avoid warnings with -D_FORTIFY_SOURCE.
+ * dbxout.c (dbxout_finish_complex_stabs): Likewise.
+ * diagnostic.c (build_message_string): Likewise.
+ * final.c (output_operand_lossage): Likewise.
+ * tree-data-ref.c (dot_rdg): Likewise.
+ * tree-ssa-structalias.c (create_function_info_for,
+ create_variable_info_for): Likewise.
+
+gcc/cp/
+
+ * pt.c (tsubst_copy_and_build): Avoid warnings with -Wformat-security.
+ * parser.c (cp_parser_check_type_definition,
+ cp_parser_non_integral_constant_expression): Likewise.
+ * typeck.c (cp_build_binary_op, cp_build_unary_op): Likewise.
+ * cvt.c (ocp_convert): Likewise.
+
+gcc/fortran/
+
+ * cpp.c (scan_translation_unit_trad): Avoid warnings with -D_FORTIFY_SOURCE.
+ * trans.c (gfc_trans_runtime_error_vararg): Likewise.
+ * trans-array.c (gfc_trans_array_bound_check, gfc_conv_array_ref,
+ gfc_conv_ss_startstride, gfc_trans_dummy_array_bias,
+ gfc_conv_array_parameter): Likewise.
+ * trans-io.c (gfc_trans_io_runtime_check, set_string): Likewise.
+ * trans-expr.c (gfc_conv_substring): Likewise.
+
+ * decl.c (gfc_match_kind_spec, match_char_kind): Avoid warnings with
+ -Wformat-security.
+ * intrinsic.c (add_sym, find_sym, make_alias): Likewise.
+ * match.c (gfc_match_small_int, gfc_match_small_int_expr): Likewise.
+ * matchexp.c (match_primary, match_level_2, match_level_3,
+ match_level_4, match_or_operand, match_equiv_operand, match_level_5,
+ gfc_match_expr): Likewise.
+ * module.c (find_true_name, mio_pool_string, mio_symtree_ref, mio_expr,
+ load_generic_interfaces, load_needed, read_module, write_symbol0,
+ write_generic, import_iso_c_binding_module, create_int_parameter,
+ use_iso_fortran_env_module, gfc_use_module): Likewise.
+ * openmp.c (gfc_match_omp_clauses): Likewise.
+ * primary.c (match_hollerith_constant, match_string_constant,
+ match_keyword_arg): Likewise.
+ * symbol.c (gfc_add_component, gfc_new_symtree, gfc_delete_symtree,
+ gfc_get_uop, gfc_new_symbol, gfc_get_gsymbol, gen_special_c_interop_ptr,
+ gen_cptr_param, gen_fptr_param, gen_shape_param,
+ generate_isocbinding_symbol, get_iso_c_sym): Likewise.
+ * trans-decl.c (gfc_find_module): Likewise.
+
+gcc/objc/
+
+ * objc-act.c (objc_lookup_protocol): Avoid warnings with
+ -Wformat-security.
+
+---
+ gcc/c-common.c | 4 +-
+ gcc/c-convert.c | 2 +-
+ gcc/c-ppoutput.c | 6 ++-
+ gcc/c-typeck.c | 6 +-
+ gcc/cfg.c | 2 +-
+ gcc/collect2.c | 8 ++--
+ gcc/cp/cvt.c | 2 +-
+ gcc/cp/parser.c | 4 +-
+ gcc/cp/pt.c | 2 +-
+ gcc/cp/typeck.c | 4 +-
+ gcc/dbxout.c | 5 +-
+ gcc/diagnostic.c | 3 +-
+ gcc/final.c | 5 +-
+ gcc/fold-const.c | 2 +-
+ gcc/fortran/cpp.c | 3 +-
+ gcc/fortran/decl.c | 4 +-
+ gcc/fortran/intrinsic.c | 8 ++--
+ gcc/fortran/match.c | 4 +-
+ gcc/fortran/matchexp.c | 18 ++++----
+ gcc/fortran/module.c | 30 +++++++-------
+ gcc/fortran/openmp.c | 2 +-
+ gcc/fortran/primary.c | 6 +-
+ gcc/fortran/symbol.c | 24 +++++-----
+ gcc/fortran/trans-array.c | 94 +++++++++++++++++++++++++----------------
+ gcc/fortran/trans-decl.c | 2 +-
+ gcc/fortran/trans-expr.c | 22 ++++++----
+ gcc/fortran/trans-io.c | 9 +++-
+ gcc/fortran/trans.c | 11 +++--
+ gcc/ira-conflicts.c | 2 +-
+ gcc/objc/objc-act.c | 2 +-
+ gcc/opts.c | 2 +-
+ gcc/toplev.c | 9 +++-
+ gcc/tree-data-ref.c | 3 +-
+ gcc/tree-ssa-structalias.c | 13 ++++--
+ gcc/tree-switch-conversion.c | 2 +-
+ libcpp/lex.c | 6 ++-
+ libcpp/macro.c | 4 +-
+ 37 files changed, 190 insertions(+), 145 deletions(-)
+
+--- a/src/gcc/c-common.c
++++ b/src/gcc/c-common.c
+@@ -7493,11 +7493,11 @@ c_parse_error (const char *gmsgid, enum cpp_ttype token, tree value)
+ message = NULL;
+ }
+ else
+- error (gmsgid);
++ error ("%s", gmsgid);
+
+ if (message)
+ {
+- error (message);
++ error ("%s", message);
+ free (message);
+ }
+ #undef catenate_messages
+--- a/src/gcc/c-convert.c
++++ b/src/gcc/c-convert.c
+@@ -79,7 +79,7 @@ convert (tree type, tree expr)
+ if ((invalid_conv_diag
+ = targetm.invalid_conversion (TREE_TYPE (expr), type)))
+ {
+- error (invalid_conv_diag);
++ error ("%s", invalid_conv_diag);
+ return error_mark_node;
+ }
+
+--- a/src/gcc/c-ppoutput.c
++++ b/src/gcc/c-ppoutput.c
+@@ -223,8 +223,9 @@ scan_translation_unit (cpp_reader *pfile)
+ static void
+ print_lines_directives_only (int lines, const void *buf, size_t size)
+ {
++ size_t rv_neverused ATTRIBUTE_UNUSED;
+ print.src_line += lines;
+- fwrite (buf, 1, size, print.outf);
++ rv_neverused = fwrite (buf, 1, size, print.outf);
+ }
+
+ /* Writes out the preprocessed file, handling spacing and paste
+@@ -256,8 +257,9 @@ scan_translation_unit_trad (cpp_reader *pfile)
+ while (_cpp_read_logical_line_trad (pfile))
+ {
+ size_t len = pfile->out.cur - pfile->out.base;
++ size_t rv_neverused ATTRIBUTE_UNUSED;
+ maybe_print_line (pfile->out.first_line);
+- fwrite (pfile->out.base, 1, len, print.outf);
++ rv_neverused = fwrite (pfile->out.base, 1, len, print.outf);
+ print.printed = 1;
+ if (!CPP_OPTION (pfile, discard_comments))
+ account_for_newlines (pfile->out.base, len);
+--- a/src/gcc/c-typeck.c
++++ b/src/gcc/c-typeck.c
+@@ -2730,7 +2730,7 @@ convert_arguments (int nargs, tree *argarray,
+ else if ((invalid_func_diag =
+ targetm.calls.invalid_arg_for_unprototyped_fn (typelist, fundecl, val)))
+ {
+- error (invalid_func_diag);
++ error ("%s", invalid_func_diag);
+ return -1;
+ }
+ else
+@@ -2947,7 +2947,7 @@ build_unary_op (location_t location,
+ if ((invalid_op_diag
+ = targetm.invalid_unary_op (code, TREE_TYPE (xarg))))
+ {
+- error_at (location, invalid_op_diag);
++ error_at (location, "%s", invalid_op_diag);
+ return error_mark_node;
+ }
+
+@@ -8095,7 +8095,7 @@ build_binary_op (location_t location, enum tree_code code,
+ if ((invalid_op_diag
+ = targetm.invalid_binary_op (code, type0, type1)))
+ {
+- error_at (location, invalid_op_diag);
++ error_at (location, "%s", invalid_op_diag);
+ return error_mark_node;
+ }
+
+--- a/src/gcc/cfg.c
++++ b/src/gcc/cfg.c
+@@ -908,7 +908,7 @@ dump_cfg_bb_info (FILE *file, basic_block bb)
+ else
+ fprintf (file, ", ");
+ first = false;
+- fprintf (file, bb_bitnames[i]);
++ fprintf (file, "%s", bb_bitnames[i]);
+ }
+ if (!first)
+ fprintf (file, ")");
+--- a/src/gcc/collect2.c
++++ b/src/gcc/collect2.c
+@@ -1647,10 +1647,10 @@ collect_execute (const char *prog, char **argv, const char *outname,
+ if (err != 0)
+ {
+ errno = err;
+- fatal_perror (errmsg);
++ fatal_perror ("%s", errmsg);
+ }
+ else
+- fatal (errmsg);
++ fatal ("%s", errmsg);
+ }
+
+ if (response_arg)
+@@ -2137,10 +2137,10 @@ scan_prog_file (const char *prog_name, enum pass which_pass)
+ if (err != 0)
+ {
+ errno = err;
+- fatal_perror (errmsg);
++ fatal_perror ("%s", errmsg);
+ }
+ else
+- fatal (errmsg);
++ fatal ("%s", errmsg);
+ }
+
+ int_handler = (void (*) (int)) signal (SIGINT, SIG_IGN);
+--- a/src/gcc/cp/cvt.c
++++ b/src/gcc/cp/cvt.c
+@@ -591,7 +591,7 @@ ocp_convert (tree type, tree expr, int convtype, int flags)
+ if ((invalid_conv_diag
+ = targetm.invalid_conversion (TREE_TYPE (expr), type)))
+ {
+- error (invalid_conv_diag);
++ error ("%s", invalid_conv_diag);
+ return error_mark_node;
+ }
+
+--- a/src/gcc/cp/parser.c
++++ b/src/gcc/cp/parser.c
+@@ -2204,7 +2204,7 @@ cp_parser_check_type_definition (cp_parser* parser)
+ {
+ /* Don't use `%s' to print the string, because quotations (`%<', `%>')
+ in the message need to be interpreted. */
+- error (parser->type_definition_forbidden_message);
++ error ("%s", parser->type_definition_forbidden_message);
+ return false;
+ }
+ return true;
+@@ -2291,7 +2291,7 @@ cp_parser_non_integral_constant_expression (cp_parser *parser,
+ char *message = concat (thing,
+ " cannot appear in a constant-expression",
+ NULL);
+- error (message);
++ error ("%s", message);
+ free (message);
+ return true;
+ }
+--- a/src/gcc/cp/pt.c
++++ b/src/gcc/cp/pt.c
+@@ -11060,7 +11060,7 @@ tsubst_copy_and_build (tree t,
+ &error_msg,
+ input_location);
+ if (error_msg)
+- error (error_msg);
++ error ("%s", error_msg);
+ if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
+ decl = unqualified_name_lookup_error (decl);
+ return decl;
+--- a/src/gcc/cp/typeck.c
++++ b/src/gcc/cp/typeck.c
+@@ -3373,7 +3373,7 @@ cp_build_binary_op (location_t location,
+ if ((invalid_op_diag
+ = targetm.invalid_binary_op (code, type0, type1)))
+ {
+- error (invalid_op_diag);
++ error ("%s", invalid_op_diag);
+ return error_mark_node;
+ }
+
+@@ -4254,7 +4254,7 @@ cp_build_unary_op (enum tree_code code, tree xarg, int noconvert,
+ : code),
+ TREE_TYPE (xarg))))
+ {
+- error (invalid_op_diag);
++ error ("%s", invalid_op_diag);
+ return error_mark_node;
+ }
+
+--- a/src/gcc/dbxout.c
++++ b/src/gcc/dbxout.c
+@@ -847,6 +847,7 @@ dbxout_finish_complex_stabs (tree sym, STAB_CODE_TYPE code,
+ int line ATTRIBUTE_UNUSED;
+ char *str;
+ size_t len;
++ size_t rv_neverused ATTRIBUTE_UNUSED;
+
+ line = sym ? DECL_SOURCE_LINE (sym) : 0;
+ if (DBX_CONTIN_LENGTH > 0)
+@@ -867,7 +868,7 @@ dbxout_finish_complex_stabs (tree sym, STAB_CODE_TYPE code,
+ for (;;)
+ {
+ chunklen = strlen (chunk);
+- fwrite (chunk, 1, chunklen, asm_out_file);
++ rv_neverused = fwrite (chunk, 1, chunklen, asm_out_file);
+ fputs ("\",", asm_out_file);
+
+ /* Must add an extra byte to account for the NUL separator. */
+@@ -894,7 +895,7 @@ dbxout_finish_complex_stabs (tree sym, STAB_CODE_TYPE code,
+ len = obstack_object_size (&stabstr_ob);
+ str = XOBFINISH (&stabstr_ob, char *);
+
+- fwrite (str, 1, len, asm_out_file);
++ rv_neverused = fwrite (str, 1, len, asm_out_file);
+ DBX_FINISH_STABS (sym, code, line, addr, label, number);
+ }
+ obstack_free (&stabstr_ob, str);
+--- a/src/gcc/diagnostic.c
++++ b/src/gcc/diagnostic.c
+@@ -70,9 +70,10 @@ build_message_string (const char *msg, ...)
+ {
+ char *str;
+ va_list ap;
++ size_t rv_neverused ATTRIBUTE_UNUSED;
+
+ va_start (ap, msg);
+- vasprintf (&str, msg, ap);
++ rv_neverused = vasprintf (&str, msg, ap);
+ va_end (ap);
+
+ return str;
+--- a/src/gcc/final.c
++++ b/src/gcc/final.c
+@@ -2989,12 +2989,13 @@ output_operand_lossage (const char *cmsgid, ...)
+ char *new_message;
+ const char *pfx_str;
+ va_list ap;
++ int rv_neverused ATTRIBUTE_UNUSED;
+
+ va_start (ap, cmsgid);
+
+ pfx_str = this_is_asm_operands ? _("invalid 'asm': ") : "output_operand: ";
+- asprintf (&fmt_string, "%s%s", pfx_str, _(cmsgid));
+- vasprintf (&new_message, fmt_string, ap);
++ rv_neverused = asprintf (&fmt_string, "%s%s", pfx_str, _(cmsgid));
++ rv_neverused = vasprintf (&new_message, fmt_string, ap);
+
+ if (this_is_asm_operands)
+ error_for_asm (this_is_asm_operands, "%s", new_message);
+--- a/src/gcc/fold-const.c
++++ b/src/gcc/fold-const.c
+@@ -1025,7 +1025,7 @@ fold_overflow_warning (const char* gmsgid, enum warn_strict_overflow_code wc)
+ }
+ }
+ else if (issue_strict_overflow_warning (wc))
+- warning (OPT_Wstrict_overflow, gmsgid);
++ warning (OPT_Wstrict_overflow, "%s", gmsgid);
+ }
+
+ /* Return true if the built-in mathematical function specified by CODE
+--- a/src/gcc/fortran/cpp.c
++++ b/src/gcc/fortran/cpp.c
+@@ -729,8 +729,9 @@ scan_translation_unit_trad (cpp_reader *pfile)
+ while (_cpp_read_logical_line_trad (pfile))
+ {
+ size_t len = pfile->out.cur - pfile->out.base;
++ size_t rv_neverused ATTRIBUTE_UNUSED;
+ maybe_print_line (pfile->out.first_line);
+- fwrite (pfile->out.base, 1, len, print.outf);
++ rv_neverused = fwrite (pfile->out.base, 1, len, print.outf);
+ print.printed = 1;
+ if (!CPP_OPTION (pfile, discard_comments))
+ account_for_newlines (pfile->out.base, len);
+--- a/src/gcc/fortran/decl.c
++++ b/src/gcc/fortran/decl.c
+@@ -1954,7 +1954,7 @@ kind_expr:
+
+ if (msg != NULL)
+ {
+- gfc_error (msg);
++ gfc_error ("%s", msg);
+ m = MATCH_ERROR;
+ goto no_match;
+ }
+@@ -2060,7 +2060,7 @@ match_char_kind (int * kind, int * is_iso_c)
+ *is_iso_c = e->ts.is_iso_c;
+ if (msg != NULL)
+ {
+- gfc_error (msg);
++ gfc_error ("%s", msg);
+ m = MATCH_ERROR;
+ goto no_match;
+ }
+--- a/src/gcc/fortran/intrinsic.c
++++ b/src/gcc/fortran/intrinsic.c
+@@ -262,11 +262,11 @@ add_sym (const char *name, gfc_isym_id id, enum klass cl, int actual_ok, bt type
+ break;
+
+ case SZ_NOTHING:
+- next_sym->name = gfc_get_string (name);
++ next_sym->name = gfc_get_string ("%s", name);
+
+ strcpy (buf, "_gfortran_");
+ strcat (buf, name);
+- next_sym->lib_name = gfc_get_string (buf);
++ next_sym->lib_name = gfc_get_string ("%s", buf);
+
+ next_sym->elemental = (cl == CLASS_ELEMENTAL);
+ next_sym->inquiry = (cl == CLASS_INQUIRY);
+@@ -722,7 +722,7 @@ find_sym (gfc_intrinsic_sym *start, int n, const char *name)
+ /* name may be a user-supplied string, so we must first make sure
+ that we're comparing against a pointer into the global string
+ table. */
+- const char *p = gfc_get_string (name);
++ const char *p = gfc_get_string ("%s", name);
+
+ while (n > 0)
+ {
+@@ -918,7 +918,7 @@ make_alias (const char *name, int standard)
+
+ case SZ_NOTHING:
+ next_sym[0] = next_sym[-1];
+- next_sym->name = gfc_get_string (name);
++ next_sym->name = gfc_get_string ("%s", name);
+ next_sym->standard = standard;
+ next_sym++;
+ break;
+--- a/src/gcc/fortran/match.c
++++ b/src/gcc/fortran/match.c
+@@ -391,7 +391,7 @@ gfc_match_small_int (int *value)
+
+ if (p != NULL)
+ {
+- gfc_error (p);
++ gfc_error ("%s", p);
+ m = MATCH_ERROR;
+ }
+
+@@ -423,7 +423,7 @@ gfc_match_small_int_expr (int *value, gfc_expr **expr)
+
+ if (p != NULL)
+ {
+- gfc_error (p);
++ gfc_error ("%s", p);
+ m = MATCH_ERROR;
+ }
+
+--- a/src/gcc/fortran/matchexp.c
++++ b/src/gcc/fortran/matchexp.c
+@@ -193,7 +193,7 @@ match_primary (gfc_expr **result)
+ return MATCH_YES;
+
+ syntax:
+- gfc_error (expression_syntax);
++ gfc_error ("%s", expression_syntax);
+ return MATCH_ERROR;
+ }
+
+@@ -496,7 +496,7 @@ match_level_2 (gfc_expr **result)
+ m = match_ext_add_operand (&e);
+ if (m == MATCH_NO)
+ {
+- gfc_error (expression_syntax);
++ gfc_error ("%s", expression_syntax);
+ m = MATCH_ERROR;
+ }
+ }
+@@ -535,7 +535,7 @@ match_level_2 (gfc_expr **result)
+
+ m = match_ext_add_operand (&e);
+ if (m == MATCH_NO)
+- gfc_error (expression_syntax);
++ gfc_error ("%s", expression_syntax);
+ if (m != MATCH_YES)
+ {
+ gfc_free_expr (all);
+@@ -586,7 +586,7 @@ match_level_3 (gfc_expr **result)
+ m = match_level_2 (&e);
+ if (m == MATCH_NO)
+ {
+- gfc_error (expression_syntax);
++ gfc_error ("%s", expression_syntax);
+ gfc_free_expr (all);
+ }
+ if (m != MATCH_YES)
+@@ -646,7 +646,7 @@ match_level_4 (gfc_expr **result)
+
+ m = match_level_3 (&right);
+ if (m == MATCH_NO)
+- gfc_error (expression_syntax);
++ gfc_error ("%s", expression_syntax);
+ if (m != MATCH_YES)
+ {
+ gfc_free_expr (left);
+@@ -755,7 +755,7 @@ match_or_operand (gfc_expr **result)
+
+ m = match_and_operand (&e);
+ if (m == MATCH_NO)
+- gfc_error (expression_syntax);
++ gfc_error ("%s", expression_syntax);
+ if (m != MATCH_YES)
+ {
+ gfc_free_expr (all);
+@@ -798,7 +798,7 @@ match_equiv_operand (gfc_expr **result)
+
+ m = match_or_operand (&e);
+ if (m == MATCH_NO)
+- gfc_error (expression_syntax);
++ gfc_error ("%s", expression_syntax);
+ if (m != MATCH_YES)
+ {
+ gfc_free_expr (all);
+@@ -852,7 +852,7 @@ match_level_5 (gfc_expr **result)
+
+ m = match_equiv_operand (&e);
+ if (m == MATCH_NO)
+- gfc_error (expression_syntax);
++ gfc_error ("%s", expression_syntax);
+ if (m != MATCH_YES)
+ {
+ gfc_free_expr (all);
+@@ -911,7 +911,7 @@ gfc_match_expr (gfc_expr **result)
+
+ m = match_level_5 (&e);
+ if (m == MATCH_NO)
+- gfc_error (expression_syntax);
++ gfc_error ("%s", expression_syntax);
+ if (m != MATCH_YES)
+ {
+ gfc_free_expr (all);
+--- a/src/gcc/fortran/module.c
++++ b/src/gcc/fortran/module.c
+@@ -805,9 +805,9 @@ find_true_name (const char *name, const char *module)
+ gfc_symbol sym;
+ int c;
+
+- sym.name = gfc_get_string (name);
++ sym.name = gfc_get_string ("%s", name);
+ if (module != NULL)
+- sym.module = gfc_get_string (module);
++ sym.module = gfc_get_string ("%s", module);
+ else
+ sym.module = NULL;
+ t.sym = &sym;
+@@ -1612,7 +1612,7 @@ mio_pool_string (const char **stringp)
+ else
+ {
+ require_atom (ATOM_STRING);
+- *stringp = atom_string[0] == '\0' ? NULL : gfc_get_string (atom_string);
++ *stringp = atom_string[0] == '\0' ? NULL : gfc_get_string ("%s", atom_string);
+ gfc_free (atom_string);
+ }
+ }
+@@ -2460,7 +2460,7 @@ mio_symtree_ref (gfc_symtree **stp)
+ {
+ p->u.rsym.sym = gfc_new_symbol (p->u.rsym.true_name,
+ gfc_current_ns);
+- p->u.rsym.sym->module = gfc_get_string (p->u.rsym.module);
++ p->u.rsym.sym->module = gfc_get_string ("%s", p->u.rsym.module);
+ }
+
+ p->u.rsym.symtree->n.sym = p->u.rsym.sym;
+@@ -2967,7 +2967,7 @@ mio_expr (gfc_expr **ep)
+ else
+ {
+ require_atom (ATOM_STRING);
+- e->value.function.name = gfc_get_string (atom_string);
++ e->value.function.name = gfc_get_string ("%s", atom_string);
+ gfc_free (atom_string);
+
+ mio_integer (&flag);
+@@ -3695,8 +3695,8 @@ load_generic_interfaces (void)
+ if (!sym)
+ {
+ gfc_get_symbol (p, NULL, &sym);
+- sym->name = gfc_get_string (name);
+- sym->module = gfc_get_string (module_name);
++ sym->name = gfc_get_string ("%s", name);
++ sym->module = gfc_get_string ("%s", module_name);
+ sym->attr.flavor = FL_PROCEDURE;
+ sym->attr.generic = 1;
+ sym->attr.use_assoc = 1;
+@@ -3901,7 +3901,7 @@ load_needed (pointer_info *p)
+ 1, &ns->proc_name);
+
+ sym = gfc_new_symbol (p->u.rsym.true_name, ns);
+- sym->module = gfc_get_string (p->u.rsym.module);
++ sym->module = gfc_get_string ("%s", p->u.rsym.module);
+ strcpy (sym->binding_label, p->u.rsym.binding_label);
+
+ associate_integer_pointer (p, sym);
+@@ -4162,7 +4162,7 @@ read_module (void)
+ info->u.rsym.sym = gfc_new_symbol (info->u.rsym.true_name,
+ gfc_current_ns);
+ sym = info->u.rsym.sym;
+- sym->module = gfc_get_string (info->u.rsym.module);
++ sym->module = gfc_get_string ("%s", info->u.rsym.module);
+
+ /* TODO: hmm, can we test this? Do we know it will be
+ initialized to zeros? */
+@@ -4521,7 +4521,7 @@ write_symbol0 (gfc_symtree *st)
+
+ sym = st->n.sym;
+ if (sym->module == NULL)
+- sym->module = gfc_get_string (module_name);
++ sym->module = gfc_get_string ("%s", module_name);
+
+ if (sym->attr.flavor == FL_PROCEDURE && sym->attr.generic
+ && !sym->attr.subroutine && !sym->attr.function)
+@@ -4614,7 +4614,7 @@ write_generic (gfc_symtree *st)
+ return;
+
+ if (sym->module == NULL)
+- sym->module = gfc_get_string (module_name);
++ sym->module = gfc_get_string ("%s", module_name);
+
+ mio_symbol_interface (&st->name, &sym->module, &sym->generic);
+ }
+@@ -4962,7 +4962,7 @@ import_iso_c_binding_module (void)
+
+ mod_sym->attr.flavor = FL_MODULE;
+ mod_sym->attr.intrinsic = 1;
+- mod_sym->module = gfc_get_string (iso_c_module_name);
++ mod_sym->module = gfc_get_string ("%s", iso_c_module_name);
+ mod_sym->from_intmod = INTMOD_ISO_C_BINDING;
+ }
+
+@@ -5039,7 +5039,7 @@ create_int_parameter (const char *name, int value, const char *modname,
+ gfc_get_sym_tree (name, gfc_current_ns, &tmp_symtree);
+ sym = tmp_symtree->n.sym;
+
+- sym->module = gfc_get_string (modname);
++ sym->module = gfc_get_string ("%s", modname);
+ sym->attr.flavor = FL_PARAMETER;
+ sym->ts.type = BT_INTEGER;
+ sym->ts.kind = gfc_default_integer_kind;
+@@ -5083,7 +5083,7 @@ use_iso_fortran_env_module (void)
+
+ mod_sym->attr.flavor = FL_MODULE;
+ mod_sym->attr.intrinsic = 1;
+- mod_sym->module = gfc_get_string (mod);
++ mod_sym->module = gfc_get_string ("%s", mod);
+ mod_sym->from_intmod = INTMOD_ISO_FORTRAN_ENV;
+ }
+ else
+@@ -5279,7 +5279,7 @@ gfc_use_module (void)
+ fclose (module_fp);
+
+ use_stmt = gfc_get_use_list ();
+- use_stmt->module_name = gfc_get_string (module_name);
++ use_stmt->module_name = gfc_get_string ("%s", module_name);
+ use_stmt->only_flag = only_flag;
+ use_stmt->rename = gfc_rename_list;
+ use_stmt->where = use_locus;
+--- a/src/gcc/fortran/openmp.c
++++ b/src/gcc/fortran/openmp.c
+@@ -396,7 +396,7 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, int mask)
+ const char *p = gfc_extract_int (cexpr, &collapse);
+ if (p)
+ {
+- gfc_error (p);
++ gfc_error ("%s", p);
+ collapse = 1;
+ }
+ else if (collapse <= 0)
+--- a/src/gcc/fortran/primary.c
++++ b/src/gcc/fortran/primary.c
+@@ -255,7 +255,7 @@ match_hollerith_constant (gfc_expr **result)
+ msg = gfc_extract_int (e, &num);
+ if (msg != NULL)
+ {
+- gfc_error (msg);
++ gfc_error ("%s", msg);
+ goto cleanup;
+ }
+ if (num == 0)
+@@ -924,7 +924,7 @@ match_string_constant (gfc_expr **result)
+ q = gfc_extract_int (sym->value, &kind);
+ if (q != NULL)
+ {
+- gfc_error (q);
++ gfc_error ("%s", q);
+ return MATCH_ERROR;
+ }
+ gfc_set_sym_referenced (sym);
+@@ -1479,7 +1479,7 @@ match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base)
+ }
+ }
+
+- actual->name = gfc_get_string (name);
++ actual->name = gfc_get_string ("%s", name);
+ return MATCH_YES;
+
+ cleanup:
+--- a/src/gcc/fortran/symbol.c
++++ b/src/gcc/fortran/symbol.c
+@@ -1759,7 +1759,7 @@ gfc_add_component (gfc_symbol *sym, const char *name,
+ else
+ tail->next = p;
+
+- p->name = gfc_get_string (name);
++ p->name = gfc_get_string ("%s", name);
+ p->loc = gfc_current_locus;
+
+ *component = p;
+@@ -2251,7 +2251,7 @@ gfc_new_symtree (gfc_symtree **root, const char *name)
+ gfc_symtree *st;
+
+ st = XCNEW (gfc_symtree);
+- st->name = gfc_get_string (name);
++ st->name = gfc_get_string ("%s", name);
+ st->typebound = NULL;
+
+ gfc_insert_bbt (root, st, compare_symtree);
+@@ -2268,7 +2268,7 @@ gfc_delete_symtree (gfc_symtree **root, const char *name)
+
+ st0 = gfc_find_symtree (*root, name);
+
+- st.name = gfc_get_string (name);
++ st.name = gfc_get_string ("%s", name);
+ gfc_delete_bbt (root, &st, compare_symtree);
+
+ gfc_free (st0);
+@@ -2327,7 +2327,7 @@ gfc_get_uop (const char *name)
+ st = gfc_new_symtree (&gfc_current_ns->uop_root, name);
+
+ uop = st->n.uop = XCNEW (gfc_user_op);
+- uop->name = gfc_get_string (name);
++ uop->name = gfc_get_string ("%s", name);
+ uop->access = ACCESS_UNKNOWN;
+ uop->ns = gfc_current_ns;
+
+@@ -2399,7 +2399,7 @@ gfc_new_symbol (const char *name, gfc_namespace *ns)
+ if (strlen (name) > GFC_MAX_SYMBOL_LEN)
+ gfc_internal_error ("new_symbol(): Symbol name too long");
+
+- p->name = gfc_get_string (name);
++ p->name = gfc_get_string ("%s", name);
+
+ /* Make sure flags for symbol being C bound are clear initially. */
+ p->attr.is_bind_c = 0;
+@@ -3280,7 +3280,7 @@ gfc_get_gsymbol (const char *name)
+
+ s = XCNEW (gfc_gsymbol);
+ s->type = GSYM_UNKNOWN;
+- s->name = gfc_get_string (name);
++ s->name = gfc_get_string ("%s", name);
+
+ gfc_insert_bbt (&gfc_gsym_root, s, gsym_compare);
+
+@@ -3517,7 +3517,7 @@ gen_special_c_interop_ptr (int ptr_id, const char *ptr_name,
+ }
+
+ /* Module name is some mangled version of iso_c_binding. */
+- tmp_sym->module = gfc_get_string (module_name);
++ tmp_sym->module = gfc_get_string ("%s", module_name);
+
+ /* Say it's from the iso_c_binding module. */
+ tmp_sym->attr.is_iso_c = 1;
+@@ -3637,7 +3637,7 @@ gen_cptr_param (gfc_formal_arglist **head,
+ }
+
+ param_sym->ts.derived = c_ptr_sym;
+- param_sym->module = gfc_get_string (module_name);
++ param_sym->module = gfc_get_string ("%s", module_name);
+
+ /* Make new formal arg. */
+ formal_arg = gfc_get_formal_arglist ();
+@@ -3682,7 +3682,7 @@ gen_fptr_param (gfc_formal_arglist **head,
+
+ /* ISO C Binding type to allow any pointer type as actual param. */
+ param_sym->ts.type = BT_VOID;
+- param_sym->module = gfc_get_string (module_name);
++ param_sym->module = gfc_get_string ("%s", module_name);
+
+ /* Make the arg. */
+ formal_arg = gfc_get_formal_arglist ();
+@@ -3753,7 +3753,7 @@ gen_shape_param (gfc_formal_arglist **head,
+ param_sym->attr.optional = 1;
+ param_sym->attr.intent = INTENT_IN;
+ param_sym->attr.dimension = 1;
+- param_sym->module = gfc_get_string (module_name);
++ param_sym->module = gfc_get_string ("%s", module_name);
+
+ /* Make the arg. */
+ formal_arg = gfc_get_formal_arglist ();
+@@ -3957,7 +3957,7 @@ generate_isocbinding_symbol (const char *mod_name, iso_c_binding_symbol s,
+ "create symbol");
+
+ /* Say what module this symbol belongs to. */
+- tmp_sym->module = gfc_get_string (mod_name);
++ tmp_sym->module = gfc_get_string ("%s", mod_name);
+ tmp_sym->from_intmod = INTMOD_ISO_C_BINDING;
+ tmp_sym->intmod_sym_id = s;
+
+@@ -4234,7 +4234,7 @@ get_iso_c_sym (gfc_symbol *old_sym, char *new_name,
+ strcpy (new_symtree->n.sym->binding_label, new_binding_label);
+ new_symtree->n.sym->attr = old_sym->attr;
+ new_symtree->n.sym->ts = old_sym->ts;
+- new_symtree->n.sym->module = gfc_get_string (old_sym->module);
++ new_symtree->n.sym->module = gfc_get_string ("%s", old_sym->module);
+ new_symtree->n.sym->from_intmod = old_sym->from_intmod;
+ new_symtree->n.sym->intmod_sym_id = old_sym->intmod_sym_id;
+ /* Build the formal arg list. */
+--- a/src/gcc/fortran/trans-array.c
++++ b/src/gcc/fortran/trans-array.c
+@@ -2232,6 +2232,7 @@ gfc_trans_array_bound_check (gfc_se * se, tree descriptor, tree index, int n,
+ tree tmp;
+ char *msg;
+ const char * name = NULL;
++ int rv_neverused ATTRIBUTE_UNUSED;
+
+ if (!flag_bounds_check)
+ return index;
+@@ -2270,11 +2271,13 @@ gfc_trans_array_bound_check (gfc_se * se, tree descriptor, tree index, int n,
+ tmp = gfc_conv_array_lbound (descriptor, n);
+ fault = fold_build2 (LT_EXPR, boolean_type_node, index, tmp);
+ if (name)
+- asprintf (&msg, "%s for array '%s', lower bound of dimension %d exceeded"
+- "(%%ld < %%ld)", gfc_msg_fault, name, n+1);
++ rv_neverused =
++ asprintf (&msg, "%s for array '%s', lower bound of dimension %d exceeded"
++ "(%%ld < %%ld)", gfc_msg_fault, name, n+1);
+ else
+- asprintf (&msg, "%s, lower bound of dimension %d exceeded (%%ld < %%ld)",
+- gfc_msg_fault, n+1);
++ rv_neverused =
++ asprintf (&msg, "%s, lower bound of dimension %d exceeded (%%ld < %%ld)",
++ gfc_msg_fault, n+1);
+ gfc_trans_runtime_check (true, false, fault, &se->pre, where, msg,
+ fold_convert (long_integer_type_node, index),
+ fold_convert (long_integer_type_node, tmp));
+@@ -2286,11 +2289,14 @@ gfc_trans_array_bound_check (gfc_se * se, tree descriptor, tree index, int n,
+ tmp = gfc_conv_array_ubound (descriptor, n);
+ fault = fold_build2 (GT_EXPR, boolean_type_node, index, tmp);
+ if (name)
+- asprintf (&msg, "%s for array '%s', upper bound of dimension %d "
+- " exceeded (%%ld > %%ld)", gfc_msg_fault, name, n+1);
++ rv_neverused =
++ asprintf (&msg, "%s for array '%s', upper bound of dimension %d "
++ " exceeded (%%ld > %%ld)", gfc_msg_fault, name, n+1);
+ else
+- asprintf (&msg, "%s, upper bound of dimension %d exceeded (%%ld > %%ld)",
+- gfc_msg_fault, n+1);
++ rv_neverused =
++ asprintf (&msg,
++ "%s, upper bound of dimension %d exceeded (%%ld > %%ld)",
++ gfc_msg_fault, n+1);
+ gfc_trans_runtime_check (true, false, fault, &se->pre, where, msg,
+ fold_convert (long_integer_type_node, index),
+ fold_convert (long_integer_type_node, tmp));
+@@ -2474,6 +2480,7 @@ gfc_conv_array_ref (gfc_se * se, gfc_array_ref * ar, gfc_symbol * sym,
+ /* Check array bounds. */
+ tree cond;
+ char *msg;
++ int rv_neverused ATTRIBUTE_UNUSED;
+
+ /* Evaluate the indexse.expr only once. */
+ indexse.expr = save_expr (indexse.expr);
+@@ -2482,9 +2489,10 @@ gfc_conv_array_ref (gfc_se * se, gfc_array_ref * ar, gfc_symbol * sym,
+ tmp = gfc_conv_array_lbound (se->expr, n);
+ cond = fold_build2 (LT_EXPR, boolean_type_node,
+ indexse.expr, tmp);
+- asprintf (&msg, "%s for array '%s', "
+- "lower bound of dimension %d exceeded (%%ld < %%ld)",
+- gfc_msg_fault, sym->name, n+1);
++ rv_neverused =
++ asprintf (&msg, "%s for array '%s', "
++ "lower bound of dimension %d exceeded (%%ld < %%ld)",
++ gfc_msg_fault, sym->name, n+1);
+ gfc_trans_runtime_check (true, false, cond, &se->pre, where, msg,
+ fold_convert (long_integer_type_node,
+ indexse.expr),
+@@ -2499,9 +2507,10 @@ gfc_conv_array_ref (gfc_se * se, gfc_array_ref * ar, gfc_symbol * sym,
+ tmp = gfc_conv_array_ubound (se->expr, n);
+ cond = fold_build2 (GT_EXPR, boolean_type_node,
+ indexse.expr, tmp);
+- asprintf (&msg, "%s for array '%s', "
+- "upper bound of dimension %d exceeded (%%ld > %%ld)",
+- gfc_msg_fault, sym->name, n+1);
++ rv_neverused =
++ asprintf (&msg, "%s for array '%s', "
++ "upper bound of dimension %d exceeded (%%ld > %%ld)",
++ gfc_msg_fault, sym->name, n+1);
+ gfc_trans_runtime_check (true, false, cond, &se->pre, where, msg,
+ fold_convert (long_integer_type_node,
+ indexse.expr),
+@@ -3048,6 +3057,7 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
+ for (n = 0; n < loop->dimen; n++)
+ {
+ bool check_upper;
++ int rv_neverused ATTRIBUTE_UNUSED;
+
+ dim = info->dim[n];
+ if (info->ref->u.ar.dimen_type[dim] != DIMEN_RANGE)
+@@ -3063,9 +3073,10 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
+ /* Zero stride is not allowed. */
+ tmp = fold_build2 (EQ_EXPR, boolean_type_node, info->stride[n],
+ gfc_index_zero_node);
+- asprintf (&msg, "Zero stride is not allowed, for dimension %d "
+- "of array '%s'", info->dim[n]+1,
+- ss->expr->symtree->name);
++ rv_neverused =
++ asprintf (&msg, "Zero stride is not allowed, for dimension %d "
++ "of array '%s'", info->dim[n]+1,
++ ss->expr->symtree->name);
+ gfc_trans_runtime_check (true, false, tmp, &inner,
+ &ss->expr->where, msg);
+ gfc_free (msg);
+@@ -3106,9 +3117,10 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
+ lbound);
+ tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
+ non_zerosized, tmp);
+- asprintf (&msg, "%s, lower bound of dimension %d of array '%s'"
+- " exceeded (%%ld < %%ld)", gfc_msg_fault,
+- info->dim[n]+1, ss->expr->symtree->name);
++ rv_neverused =
++ asprintf (&msg, "%s, lower bound of dimension %d of array '%s'"
++ " exceeded (%%ld < %%ld)", gfc_msg_fault,
++ info->dim[n]+1, ss->expr->symtree->name);
+ gfc_trans_runtime_check (true, false, tmp, &inner,
+ &ss->expr->where, msg,
+ fold_convert (long_integer_type_node,
+@@ -3123,9 +3135,10 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
+ info->start[n], ubound);
+ tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
+ non_zerosized, tmp);
+- asprintf (&msg, "%s, upper bound of dimension %d of array "
+- "'%s' exceeded (%%ld > %%ld)", gfc_msg_fault,
+- info->dim[n]+1, ss->expr->symtree->name);
++ rv_neverused =
++ asprintf (&msg, "%s, upper bound of dimension %d of array "
++ "'%s' exceeded (%%ld > %%ld)", gfc_msg_fault,
++ info->dim[n]+1, ss->expr->symtree->name);
+ gfc_trans_runtime_check (true, false, tmp, &inner,
+ &ss->expr->where, msg,
+ fold_convert (long_integer_type_node, info->start[n]),
+@@ -3146,9 +3159,10 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
+ tmp = fold_build2 (LT_EXPR, boolean_type_node, tmp2, lbound);
+ tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
+ non_zerosized, tmp);
+- asprintf (&msg, "%s, lower bound of dimension %d of array '%s'"
+- " exceeded (%%ld < %%ld)", gfc_msg_fault,
+- info->dim[n]+1, ss->expr->symtree->name);
++ rv_neverused =
++ asprintf (&msg, "%s, lower bound of dimension %d of array '%s'"
++ " exceeded (%%ld < %%ld)", gfc_msg_fault,
++ info->dim[n]+1, ss->expr->symtree->name);
+ gfc_trans_runtime_check (true, false, tmp, &inner,
+ &ss->expr->where, msg,
+ fold_convert (long_integer_type_node,
+@@ -3162,9 +3176,10 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
+ tmp = fold_build2 (GT_EXPR, boolean_type_node, tmp2, ubound);
+ tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
+ non_zerosized, tmp);
+- asprintf (&msg, "%s, upper bound of dimension %d of array "
+- "'%s' exceeded (%%ld > %%ld)", gfc_msg_fault,
+- info->dim[n]+1, ss->expr->symtree->name);
++ rv_neverused =
++ asprintf (&msg, "%s, upper bound of dimension %d of array "
++ "'%s' exceeded (%%ld > %%ld)", gfc_msg_fault,
++ info->dim[n]+1, ss->expr->symtree->name);
+ gfc_trans_runtime_check (true, false, tmp, &inner,
+ &ss->expr->where, msg,
+ fold_convert (long_integer_type_node, tmp2),
+@@ -3186,9 +3201,10 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
+ tree tmp3;
+
+ tmp3 = fold_build2 (NE_EXPR, boolean_type_node, tmp, size[n]);
+- asprintf (&msg, "%s, size mismatch for dimension %d "
+- "of array '%s' (%%ld/%%ld)", gfc_msg_bounds,
+- info->dim[n]+1, ss->expr->symtree->name);
++ rv_neverused =
++ asprintf (&msg, "%s, size mismatch for dimension %d "
++ "of array '%s' (%%ld/%%ld)", gfc_msg_bounds,
++ info->dim[n]+1, ss->expr->symtree->name);
+ gfc_trans_runtime_check (true, false, tmp3, &inner,
+ &ss->expr->where, msg,
+ fold_convert (long_integer_type_node, tmp),
+@@ -4449,14 +4465,16 @@ gfc_trans_dummy_array_bias (gfc_symbol * sym, tree tmpdesc, tree body)
+ {
+ /* Check (ubound(a) - lbound(a) == ubound(b) - lbound(b)). */
+ char * msg;
++ int rv_neverused ATTRIBUTE_UNUSED;
+
+ tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type,
+ ubound, lbound);
+ stride2 = fold_build2 (MINUS_EXPR, gfc_array_index_type,
+ dubound, dlbound);
+ tmp = fold_build2 (NE_EXPR, gfc_array_index_type, tmp, stride2);
+- asprintf (&msg, "%s for dimension %d of array '%s'",
+- gfc_msg_bounds, n+1, sym->name);
++ rv_neverused =
++ asprintf (&msg, "%s for dimension %d of array '%s'",
++ gfc_msg_bounds, n+1, sym->name);
+ gfc_trans_runtime_check (true, false, tmp, &block, &loc, msg);
+ gfc_free (msg);
+ }
+@@ -5332,12 +5350,14 @@ gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, gfc_ss * ss, int g77,
+ if (gfc_option.flag_check_array_temporaries)
+ {
+ char * msg;
++ int rv_neverused ATTRIBUTE_UNUSED;
+
+ if (fsym && proc_name)
+- asprintf (&msg, "An array temporary was created for argument "
+- "'%s' of procedure '%s'", fsym->name, proc_name);
++ rv_neverused =
++ asprintf (&msg, "An array temporary was created for argument "
++ "'%s' of procedure '%s'", fsym->name, proc_name);
+ else
+- asprintf (&msg, "An array temporary was created");
++ rv_neverused = asprintf (&msg, "An array temporary was created");
+
+ tmp = build_fold_indirect_ref (desc);
+ tmp = gfc_conv_array_data (tmp);
+--- a/src/gcc/fortran/trans-decl.c
++++ b/src/gcc/fortran/trans-decl.c
+@@ -3071,7 +3071,7 @@ gfc_find_module (const char *name)
+ {
+ struct module_htab_entry *entry = GGC_CNEW (struct module_htab_entry);
+
+- entry->name = gfc_get_string (name);
++ entry->name = gfc_get_string ("%s", name);
+ entry->decls = htab_create_ggc (10, module_htab_decls_hash,
+ module_htab_decls_eq, NULL);
+ *slot = (void *) entry;
+--- a/src/gcc/fortran/trans-expr.c
++++ b/src/gcc/fortran/trans-expr.c
+@@ -400,6 +400,8 @@ gfc_conv_substring (gfc_se * se, gfc_ref * ref, int kind,
+
+ if (flag_bounds_check)
+ {
++ int rv_neverused ATTRIBUTE_UNUSED;
++
+ tree nonempty = fold_build2 (LE_EXPR, boolean_type_node,
+ start.expr, end.expr);
+
+@@ -409,11 +411,13 @@ gfc_conv_substring (gfc_se * se, gfc_ref * ref, int kind,
+ fault = fold_build2 (TRUTH_ANDIF_EXPR, boolean_type_node,
+ nonempty, fault);
+ if (name)
+- asprintf (&msg, "Substring out of bounds: lower bound (%%ld) of '%s' "
+- "is less than one", name);
++ rv_neverused =
++ asprintf (&msg, "Substring out of bounds: lower bound (%%ld) of '%s' "
++ "is less than one", name);
+ else
+- asprintf (&msg, "Substring out of bounds: lower bound (%%ld)"
+- "is less than one");
++ rv_neverused =
++ asprintf (&msg, "Substring out of bounds: lower bound (%%ld)"
++ "is less than one");
+ gfc_trans_runtime_check (true, false, fault, &se->pre, where, msg,
+ fold_convert (long_integer_type_node,
+ start.expr));
+@@ -425,11 +429,13 @@ gfc_conv_substring (gfc_se * se, gfc_ref * ref, int kind,
+ fault = fold_build2 (TRUTH_ANDIF_EXPR, boolean_type_node,
+ nonempty, fault);
+ if (name)
+- asprintf (&msg, "Substring out of bounds: upper bound (%%ld) of '%s' "
+- "exceeds string length (%%ld)", name);
++ rv_neverused =
++ asprintf (&msg, "Substring out of bounds: upper bound (%%ld) of '%s' "
++ "exceeds string length (%%ld)", name);
+ else
+- asprintf (&msg, "Substring out of bounds: upper bound (%%ld) "
+- "exceeds string length (%%ld)");
++ rv_neverused =
++ asprintf (&msg, "Substring out of bounds: upper bound (%%ld) "
++ "exceeds string length (%%ld)");
+ gfc_trans_runtime_check (true, false, fault, &se->pre, where, msg,
+ fold_convert (long_integer_type_node, end.expr),
+ fold_convert (long_integer_type_node,
+--- a/src/gcc/fortran/trans-io.c
++++ b/src/gcc/fortran/trans-io.c
+@@ -232,6 +232,7 @@ gfc_trans_io_runtime_check (tree cond, tree var, int error_code,
+ tree tmp;
+ tree arg1, arg2, arg3;
+ char *message;
++ int rv_neverused ATTRIBUTE_UNUSED;
+
+ if (integer_zerop (cond))
+ return;
+@@ -243,7 +244,7 @@ gfc_trans_io_runtime_check (tree cond, tree var, int error_code,
+
+ arg2 = build_int_cst (integer_type_node, error_code),
+
+- asprintf (&message, "%s", _(msgid));
++ rv_neverused = asprintf (&message, "%s", _(msgid));
+ arg3 = gfc_build_addr_expr (pchar_type_node,
+ gfc_build_localized_cstring_const (message));
+ gfc_free(message);
+@@ -660,14 +661,16 @@ set_string (stmtblock_t * block, stmtblock_t * postblock, tree var,
+ {
+ char * msg;
+ tree cond;
++ int rv_neverused ATTRIBUTE_UNUSED;
+
+ gfc_conv_label_variable (&se, e);
+ tmp = GFC_DECL_STRING_LEN (se.expr);
+ cond = fold_build2 (LT_EXPR, boolean_type_node,
+ tmp, build_int_cst (TREE_TYPE (tmp), 0));
+
+- asprintf(&msg, "Label assigned to variable '%s' (%%ld) is not a format "
+- "label", e->symtree->name);
++ rv_neverused =
++ asprintf(&msg, "Label assigned to variable '%s' (%%ld) is not a format "
++ "label", e->symtree->name);
+ gfc_trans_runtime_check (true, false, cond, &se.pre, &e->where, msg,
+ fold_convert (long_integer_type_node, tmp));
+ gfc_free (msg);
+--- a/src/gcc/fortran/trans.c
++++ b/src/gcc/fortran/trans.c
+@@ -371,6 +371,7 @@ gfc_trans_runtime_error_vararg (bool error, locus* where, const char* msgid,
+ char *message;
+ const char *p;
+ int line, nargs, i;
++ int rv_neverused ATTRIBUTE_UNUSED;
+
+ /* Compute the number of extra arguments from the format string. */
+ for (p = msgid, nargs = 0; *p; p++)
+@@ -387,18 +388,18 @@ gfc_trans_runtime_error_vararg (bool error, locus* where, const char* msgid,
+ if (where)
+ {
+ line = LOCATION_LINE (where->lb->location);
+- asprintf (&message, "At line %d of file %s", line,
+- where->lb->file->filename);
++ rv_neverused = asprintf (&message, "At line %d of file %s", line,
++ where->lb->file->filename);
+ }
+ else
+- asprintf (&message, "In file '%s', around line %d",
+- gfc_source_file, input_line + 1);
++ rv_neverused = asprintf (&message, "In file '%s', around line %d",
++ gfc_source_file, input_line + 1);
+
+ arg = gfc_build_addr_expr (pchar_type_node,
+ gfc_build_localized_cstring_const (message));
+ gfc_free(message);
+
+- asprintf (&message, "%s", _(msgid));
++ rv_neverused = asprintf (&message, "%s", _(msgid));
+ arg2 = gfc_build_addr_expr (pchar_type_node,
+ gfc_build_localized_cstring_const (message));
+ gfc_free(message);
+--- a/src/gcc/ira-conflicts.c
++++ b/src/gcc/ira-conflicts.c
+@@ -664,7 +664,7 @@ print_hard_reg_set (FILE *file, const char *title, HARD_REG_SET set)
+ {
+ int i, start;
+
+- fprintf (file, title);
++ fputs (title, file);
+ for (start = -1, i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ {
+ if (TEST_HARD_REG_BIT (set, i))
+--- a/src/gcc/objc/objc-act.c
++++ b/src/gcc/objc/objc-act.c
+@@ -988,7 +988,7 @@ objc_lookup_protocol (tree proto, tree cls, tree typ, bool warn)
+ strcat (errbuf, " the \'");
+ strcat (errbuf, IDENTIFIER_POINTER (PROTOCOL_NAME (proto)));
+ strcat (errbuf, "\' protocol");
+- warning (0, errbuf);
++ warning (0, "%s", errbuf);
+ }
+
+ return false;
+--- a/src/gcc/opts.c
++++ b/src/gcc/opts.c
+@@ -1287,7 +1287,7 @@ print_filtered_help (unsigned int include_flags,
+ if (* (const char **) option->flag_var != NULL)
+ snprintf (new_help + strlen (new_help),
+ sizeof (new_help) - strlen (new_help),
+- * (const char **) option->flag_var);
++ "%s", * (const char **) option->flag_var);
+ }
+ else
+ sprintf (new_help + strlen (new_help),
+--- a/src/gcc/toplev.c
++++ b/src/gcc/toplev.c
+@@ -1182,7 +1182,7 @@ print_to_asm_out_file (print_switch_type type, const char * text)
+ case SWITCH_TYPE_ENABLED:
+ if (prepend_sep)
+ fputc (' ', asm_out_file);
+- fprintf (asm_out_file, text);
++ fputs (text, asm_out_file);
+ /* No need to return the length here as
+ print_single_switch has already done it. */
+ return 0;
+@@ -1211,7 +1211,7 @@ print_to_stderr (print_switch_type type, const char * text)
+ /* Drop through. */
+
+ case SWITCH_TYPE_DESCRIPTIVE:
+- fprintf (stderr, text);
++ fputs (text, stderr);
+ /* No need to return the length here as
+ print_single_switch has already done it. */
+ return 0;
+@@ -1437,8 +1437,11 @@ static const char *
+ pch_option_mismatch (const char *option)
+ {
+ char *r;
++ int rv_neverused ATTRIBUTE_UNUSED;
+
+- asprintf (&r, _("created and used with differing settings of '%s'"), option);
++ rv_neverused = asprintf (&r,
++ _("created and used with differing settings of '%s'"),
++ option);
+ if (r == NULL)
+ return _("out of memory");
+ return r;
+--- a/src/gcc/tree-data-ref.c
++++ b/src/gcc/tree-data-ref.c
+@@ -4607,13 +4607,14 @@ dot_rdg_1 (FILE *file, struct graph *rdg)
+ void
+ dot_rdg (struct graph *rdg)
+ {
++ int rv_neverused ATTRIBUTE_UNUSED;
+ FILE *file = fopen ("/tmp/rdg.dot", "w");
+ gcc_assert (file != NULL);
+
+ dot_rdg_1 (file, rdg);
+ fclose (file);
+
+- system ("dotty /tmp/rdg.dot");
++ rv_neverused = system ("dotty /tmp/rdg.dot");
+ }
+
+
+--- a/src/gcc/tree-ssa-structalias.c
++++ b/src/gcc/tree-ssa-structalias.c
+@@ -4240,6 +4240,7 @@ create_function_info_for (tree decl, const char *name)
+ tree arg;
+ unsigned int i;
+ bool is_varargs = false;
++ int rv_neverused ATTRIBUTE_UNUSED;
+
+ /* Create the variable info. */
+
+@@ -4279,7 +4280,7 @@ create_function_info_for (tree decl, const char *name)
+ argdecl = arg;
+
+ newindex = VEC_length (varinfo_t, varmap);
+- asprintf (&tempname, "%s.arg%d", name, i-1);
++ rv_neverused = asprintf (&tempname, "%s.arg%d", name, i-1);
+ newname = ggc_strdup (tempname);
+ free (tempname);
+
+@@ -4315,7 +4316,7 @@ create_function_info_for (tree decl, const char *name)
+ resultdecl = DECL_RESULT (decl);
+
+ newindex = VEC_length (varinfo_t, varmap);
+- asprintf (&tempname, "%s.result", name);
++ rv_neverused = asprintf (&tempname, "%s.result", name);
+ newname = ggc_strdup (tempname);
+ free (tempname);
+
+@@ -4474,9 +4475,11 @@ create_variable_info_for (tree decl, const char *name)
+ newindex = VEC_length (varinfo_t, varmap);
+ if (dump_file)
+ {
+- asprintf (&tempname, "%s." HOST_WIDE_INT_PRINT_DEC
+- "+" HOST_WIDE_INT_PRINT_DEC,
+- vi->name, fo->offset, fo->size);
++ int rv_neverused ATTRIBUTE_UNUSED;
++
++ rv_neverused = asprintf (&tempname, "%s." HOST_WIDE_INT_PRINT_DEC
++ "+" HOST_WIDE_INT_PRINT_DEC,
++ vi->name, fo->offset, fo->size);
+ newname = ggc_strdup (tempname);
+ free (tempname);
+ }
+--- a/src/gcc/tree-switch-conversion.c
++++ b/src/gcc/tree-switch-conversion.c
+@@ -858,7 +858,7 @@ do_switchconv (void)
+ {
+ gcc_assert (info.reason);
+ fprintf (dump_file, "Bailing out - ");
+- fprintf (dump_file, info.reason);
++ fprintf (dump_file, "%s", info.reason);
+ fprintf (dump_file, "--------------------------------\n");
+ }
+ }
+--- a/src/libcpp/lex.c
++++ b/src/libcpp/lex.c
+@@ -1512,6 +1512,8 @@ cpp_type2name (enum cpp_ttype type)
+ void
+ cpp_output_token (const cpp_token *token, FILE *fp)
+ {
++ size_t rv_neverused ATTRIBUTE_UNUSED;
++
+ switch (TOKEN_SPELL (token))
+ {
+ case SPELL_OPERATOR:
+@@ -1545,7 +1547,7 @@ cpp_output_token (const cpp_token *token, FILE *fp)
+ {
+ unsigned char buffer[10];
+ i += utf8_to_ucn (buffer, name + i) - 1;
+- fwrite (buffer, 1, 10, fp);
++ rv_neverused = fwrite (buffer, 1, 10, fp);
+ }
+ else
+ fputc (NODE_NAME (token->val.node)[i], fp);
+@@ -1553,7 +1555,7 @@ cpp_output_token (const cpp_token *token, FILE *fp)
+ break;
+
+ case SPELL_LITERAL:
+- fwrite (token->val.str.text, 1, token->val.str.len, fp);
++ rv_neverused = fwrite (token->val.str.text, 1, token->val.str.len, fp);
+ break;
+
+ case SPELL_NONE:
+--- a/src/libcpp/macro.c
++++ b/src/libcpp/macro.c
+@@ -1701,7 +1701,7 @@ create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
+ function-like macros, but not at the end. */
+ if (following_paste_op)
+ {
+- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
++ cpp_error (pfile, CPP_DL_ERROR, "%s", paste_op_error_msg);
+ return false;
+ }
+ break;
+@@ -1714,7 +1714,7 @@ create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
+ function-like macros, but not at the beginning. */
+ if (macro->count == 1)
+ {
+- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
++ cpp_error (pfile, CPP_DL_ERROR, "%s", paste_op_error_msg);
+ return false;
+ }
+
diff --git a/debian/patches/gcc-as-needed.diff b/debian/patches/gcc-as-needed.diff
new file mode 100644
index 0000000..a6bb821
--- /dev/null
+++ b/debian/patches/gcc-as-needed.diff
@@ -0,0 +1,49 @@
+# DP: On linux targets pass --as-needed by default to the linker.
+
+--- a/src/gcc/config/rs6000/sysv4.h
++++ b/src/gcc/config/rs6000/sysv4.h
+@@ -836,7 +836,7 @@
+
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # undef LINK_EH_SPEC
+-# define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
++# define LINK_EH_SPEC "--no-add-needed --as-needed %{!static:--eh-frame-hdr} "
+ #endif
+
+ #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \
+--- a/src/gcc/config/gnu-user.h
++++ b/src/gcc/config/gnu-user.h
+@@ -82,9 +82,9 @@
+ #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
+
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+-#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
++#define LINK_EH_SPEC "--no-add-needed --as-needed %{!static:--eh-frame-hdr} "
+ #else
+-#define LINK_EH_SPEC "--no-add-needed "
++#define LINK_EH_SPEC "--no-add-needed --as-needed "
+ #endif
+
+ #undef LINK_GCC_C_SEQUENCE_SPEC
+--- a/src/gcc/config/alpha/elf.h
++++ b/src/gcc/config/alpha/elf.h
+@@ -438,7 +438,7 @@
+ I imagine that other systems will catch up. In the meantime, it
+ doesn't harm to make sure that the data exists to be used later. */
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+-#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
++#define LINK_EH_SPEC "--no-add-needed --as-needed %{!static:--eh-frame-hdr} "
+ #endif
+
+ /* A C statement (sans semicolon) to output to the stdio stream STREAM
+--- a/src/gcc/config/ia64/linux.h
++++ b/src/gcc/config/ia64/linux.h
+@@ -82,7 +82,7 @@
+ Signalize that because we have fde-glibc, we don't need all C shared libs
+ linked against -lgcc_s. */
+ #undef LINK_EH_SPEC
+-#define LINK_EH_SPEC "--no-add-needed "
++#define LINK_EH_SPEC "--no-add-needed --as-needed "
+
+ #define MD_UNWIND_SUPPORT "config/ia64/linux-unwind.h"
+
diff --git a/debian/patches/gcc-base-version.diff b/debian/patches/gcc-base-version.diff
new file mode 100644
index 0000000..3d95048
--- /dev/null
+++ b/debian/patches/gcc-base-version.diff
@@ -0,0 +1,164 @@
+# DP: Set base version to 4.6, introduce full version 4.6.x.
+
+--- a/src/gcc/BASE-VER
++++ b/src/gcc/BASE-VER
+@@ -1 +1 @@
+-4.6.2
++4.6
+--- a/src/gcc/FULL-VER
++++ b/src/gcc/FULL-VER
+@@ -0,0 +1 @@
++4.6.2
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -834,11 +834,13 @@
+ TM_H = $(GTM_H) insn-flags.h $(OPTIONS_H)
+
+ # Variables for version information.
+-BASEVER := $(srcdir)/BASE-VER # 4.x.y
++FULLVER := $(srcdir)/FULL-VER # 4.x.y
++BASEVER := $(srcdir)/BASE-VER # 4.x
+ DEVPHASE := $(srcdir)/DEV-PHASE # experimental, prerelease, ""
+ DATESTAMP := $(srcdir)/DATESTAMP # YYYYMMDD or empty
+ REVISION := $(srcdir)/REVISION # [BRANCH revision XXXXXX]
+
++FULLVER_c := $(shell cat $(FULLVER))
+ BASEVER_c := $(shell cat $(BASEVER))
+ DEVPHASE_c := $(shell cat $(DEVPHASE))
+ DATESTAMP_c := $(shell cat $(DATESTAMP))
+@@ -857,7 +859,7 @@
+ # development phase collapsed to the empty string in release mode
+ # (i.e. if DEVPHASE_c is empty). The space immediately after the
+ # comma in the $(if ...) constructs is significant - do not remove it.
+-BASEVER_s := "\"$(BASEVER_c)\""
++FULLVER_s := "\"$(FULLVER_c)\""
+ DEVPHASE_s := "\"$(if $(DEVPHASE_c), ($(DEVPHASE_c)))\""
+ DATESTAMP_s := "\"$(if $(DEVPHASE_c), $(DATESTAMP_c))\""
+ PKGVERSION_s:= "\"@PKGVERSION@\""
+@@ -2187,9 +2189,9 @@
+ $(MACHMODE_H)
+
+ prefix.o: prefix.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) prefix.h \
+- Makefile $(BASEVER)
++ Makefile $(FULLVER)
+ $(COMPILER) $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) \
+- -DPREFIX=\"$(prefix)\" -DBASEVER=$(BASEVER_s) \
++ -DPREFIX=\"$(prefix)\" -DBASEVER=$(FULLVER_s) \
+ -c $(srcdir)/prefix.c $(OUTPUT_OPTION)
+
+ # Language-independent files.
+@@ -2260,9 +2262,9 @@
+
+ dumpvers: dumpvers.c
+
+-version.o: version.c version.h $(REVISION) $(DATESTAMP) $(BASEVER) $(DEVPHASE)
++version.o: version.c version.h $(REVISION) $(DATESTAMP) $(FULLVER) $(DEVPHASE)
+ $(COMPILER) $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) \
+- -DBASEVER=$(BASEVER_s) -DDATESTAMP=$(DATESTAMP_s) \
++ -DBASEVER=$(FULLVER_s) -DDATESTAMP=$(DATESTAMP_s) \
+ -DREVISION=$(REVISION_s) \
+ -DDEVPHASE=$(DEVPHASE_s) -DPKGVERSION=$(PKGVERSION_s) \
+ -DBUGURL=$(BUGURL_s) -c $(srcdir)/version.c $(OUTPUT_OPTION)
+@@ -2801,10 +2803,10 @@
+ tree-ssa-alias.h $(TREE_FLOW_H)
+
+ bversion.h: s-bversion; @true
+-s-bversion: BASE-VER
+- echo "#define BUILDING_GCC_MAJOR `echo $(BASEVER_c) | sed -e 's/^\([0-9]*\).*$$/\1/'`" > bversion.h
+- echo "#define BUILDING_GCC_MINOR `echo $(BASEVER_c) | sed -e 's/^[0-9]*\.\([0-9]*\).*$$/\1/'`" >> bversion.h
+- echo "#define BUILDING_GCC_PATCHLEVEL `echo $(BASEVER_c) | sed -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\)$$/\1/'`" >> bversion.h
++s-bversion: FULL-VER
++ echo "#define BUILDING_GCC_MAJOR `echo $(FULLVER_c) | sed -e 's/^\([0-9]*\).*$$/\1/'`" > bversion.h
++ echo "#define BUILDING_GCC_MINOR `echo $(FULLVER_c) | sed -e 's/^[0-9]*\.\([0-9]*\).*$$/\1/'`" >> bversion.h
++ echo "#define BUILDING_GCC_PATCHLEVEL `echo $(FULLVER_c) | sed -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\)$$/\1/'`" >> bversion.h
+ echo "#define BUILDING_GCC_VERSION (BUILDING_GCC_MAJOR * 1000 + BUILDING_GCC_MINOR)" >> bversion.h
+ $(STAMP) s-bversion
+
+@@ -3805,9 +3807,9 @@
+ ## build/version.o is compiled by the $(COMPILER_FOR_BUILD) but needs
+ ## several C macro definitions, just like version.o
+ build/version.o: version.c version.h \
+- $(REVISION) $(DATESTAMP) $(BASEVER) $(DEVPHASE)
++ $(REVISION) $(DATESTAMP) $(FULLVER) $(DEVPHASE)
+ $(COMPILER_FOR_BUILD) -c $(BUILD_COMPILERFLAGS) $(BUILD_CPPFLAGS) \
+- -DBASEVER=$(BASEVER_s) -DDATESTAMP=$(DATESTAMP_s) \
++ -DBASEVER=$(FULLVER_s) -DDATESTAMP=$(DATESTAMP_s) \
+ -DREVISION=$(REVISION_s) \
+ -DDEVPHASE=$(DEVPHASE_s) -DPKGVERSION=$(PKGVERSION_s) \
+ -DBUGURL=$(BUGURL_s) -o $@ $<
+@@ -3968,7 +3970,7 @@
+ cppbuiltin.o: cppbuiltin.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+ cppbuiltin.h Makefile
+ $(COMPILER) $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) \
+- $(PREPROCESSOR_DEFINES) -DBASEVER=$(BASEVER_s) \
++ $(PREPROCESSOR_DEFINES) -DBASEVER=$(FULLVER_s) \
+ -c $(srcdir)/cppbuiltin.c $(OUTPUT_OPTION)
+
+ cppdefault.o: cppdefault.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+@@ -3989,8 +3991,8 @@
+ build/gcov-iov.o -o $@
+
+ gcov-iov.h: s-iov
+-s-iov: build/gcov-iov$(build_exeext) $(BASEVER) $(DEVPHASE)
+- build/gcov-iov$(build_exeext) '$(BASEVER_c)' '$(DEVPHASE_c)' \
++s-iov: build/gcov-iov$(build_exeext) $(FULLVER) $(DEVPHASE)
++ build/gcov-iov$(build_exeext) '$(FULLVER_c)' '$(DEVPHASE_c)' \
+ > tmp-gcov-iov.h
+ $(SHELL) $(srcdir)/../move-if-change tmp-gcov-iov.h gcov-iov.h
+ $(STAMP) s-iov
+@@ -4214,8 +4216,8 @@
+ TEXI_CPPINT_FILES = cppinternals.texi gcc-common.texi gcc-vers.texi
+
+ # gcc-vers.texi is generated from the version files.
+-gcc-vers.texi: $(BASEVER) $(DEVPHASE)
+- (echo "@set version-GCC $(BASEVER_c)"; \
++gcc-vers.texi: $(FULLVER) $(DEVPHASE)
++ (echo "@set version-GCC $(FULLVER_c)"; \
+ if [ "$(DEVPHASE_c)" = "experimental" ]; \
+ then echo "@set DEVELOPMENT"; \
+ else echo "@clear DEVELOPMENT"; \
+@@ -4582,9 +4584,11 @@
+ install-driver: installdirs xgcc$(exeext)
+ -rm -f $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext)
+ -$(INSTALL_PROGRAM) xgcc$(exeext) $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext)
++ifneq ($(GCC_INSTALL_NAME),$(target_noncanonical)-gcc-$(version))
+ -rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-$(version)$(exeext)
+ -( cd $(DESTDIR)$(bindir) && \
+ $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-$(version)$(exeext) )
++endif
+ -if [ -f gcc-cross$(exeext) ] ; then \
+ if [ -d $(DESTDIR)$(gcc_tooldir)/bin/. ] ; then \
+ rm -f $(DESTDIR)$(gcc_tooldir)/bin/gcc$(exeext); \
+--- a/src/libjava/Makefile.am
++++ b/src/libjava/Makefile.am
+@@ -775,7 +775,7 @@
+ install-data-local:
+ $(PRE_INSTALL)
+ ## Install the .pc file.
+- @pc_version=`echo $(GCJVERSION) | sed -e 's/[.][^.]*$$//'`; \
++ @pc_version=$(GCJVERSION); \
+ file="libgcj-$${pc_version}.pc"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgconfigdir); \
+ echo " $(INSTALL_DATA) libgcj.pc $(DESTDIR)$(pkgconfigdir)/$$file"; \
+--- a/src/libjava/Makefile.in
++++ b/src/libjava/Makefile.in
+@@ -12412,7 +12412,7 @@
+ @BUILD_ECJ1_TRUE@ mv $(DESTDIR)$(libexecsubdir)/`echo ecjx | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` $(DESTDIR)$(libexecsubdir)/ecj1$(host_exeext)
+ install-data-local:
+ $(PRE_INSTALL)
+- @pc_version=`echo $(GCJVERSION) | sed -e 's/[.][^.]*$$//'`; \
++ @pc_version=$(GCJVERSION); \
+ file="libgcj-$${pc_version}.pc"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgconfigdir); \
+ echo " $(INSTALL_DATA) libgcj.pc $(DESTDIR)$(pkgconfigdir)/$$file"; \
+--- a/src/libgcc/Makefile.in
++++ b/src/libgcc/Makefile.in
+@@ -201,7 +201,7 @@
+ export toolexecdir
+ export toolexeclibdir
+
+-version := $(shell $(CC) -dumpversion)
++version := $(shell cat $(srcdir)/../gcc/BASE-VER)
+
+ ifeq ($(decimal_float),yes)
+ ifeq ($(enable_decimal_float),bid)
diff --git a/debian/patches/gcc-cloog-dl.diff b/debian/patches/gcc-cloog-dl.diff
new file mode 100644
index 0000000..b5a8be7
--- /dev/null
+++ b/debian/patches/gcc-cloog-dl.diff
@@ -0,0 +1,464 @@
+# DP: Link against -ldl instead of -lcloog -lppl. Exit with an error when using
+# DP: the Graphite loop transformation infrastructure without having the
+# DP: libcloog-ppl0 package installed. Packages using these optimizations
+# DP: should build-depend on libcloog-ppl0.
+
+2011-01-04 Jakub Jelinek <jakub@redhat.com>
+
+ * Makefile.in (BACKENDLIBS): Link against -ldl instead of
+ -lcloog -lppl.
+ (graphite.o, graphite%.o): Force -O, remove -fkeep-inline-functions.
+ (GRAPHITE_CLOOG_UTIL_H, GRAPHITE_POLY_H): New.
+ (graphite*.o): Adjust dependencies.
+ * graphite-cloog-compat.h: Include <dlfcn.h>. Reference libcloog and
+ libppl symbols through pointers in cloog_pointers__ variable.
+ * graphite.c (init_cloog_pointers): New function.
+ (graphite_transform_loops): Call init_cloog_pointers.
+ * graphite-clast-to-gimple.c (gcc_type_for_iv_of_clast_loop): Rename
+ stmt_for argument to stmt_fora.
+ * graphite-poly.h: Include graphite-cloog-util.h.
+
+--- a/src/gcc/Makefile.in.jj 2011-01-03 13:44:14.163900902 +0100
++++ b/src/gcc/Makefile.in 2011-01-04 17:48:53.588775911 +0100
+@@ -984,6 +984,8 @@ GCC_PLUGIN_H = gcc-plugin.h highlev-plug
+ PLUGIN_H = plugin.h $(GCC_PLUGIN_H)
+ PLUGIN_VERSION_H = plugin-version.h configargs.h
+ LIBFUNCS_H = libfuncs.h $(HASHTAB_H)
++GRAPHITE_CLOOG_UTIL_H = graphite-cloog-util.h graphite-cloog-compat.h
++GRAPHITE_POLY_H = graphite-poly.h $(GRAPHITE_CLOOG_UTIL_H)
+
+ #
+ # Now figure out from those variables how to compile and link.
+@@ -1037,7 +1039,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY)
+ # and the system's installed libraries.
+ LIBS = @LIBS@ $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBIBERTY) $(LIBDECNUMBER) \
+ $(HOST_LIBS)
+-BACKENDLIBS = $(CLOOGLIBS) $(PPLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
++BACKENDLIBS = $(GMPLIBS) $(if $(CLOOGLIBS),-ldl) $(PLUGINLIBS) $(HOST_LIBS) \
+ $(ZLIB)
+ # Any system libraries needed just for GNAT.
+ SYSLIBS = @GNAT_LIBEXC@
+@@ -2668,40 +2670,40 @@ sese.o : sese.c sese.h $(CONFIG_H) $(SYS
+ $(TREE_FLOW_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) tree-pass.h value-prof.h
+ graphite.o : graphite.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(DIAGNOSTIC_CORE_H) \
+ $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) sese.h \
+- $(DBGCNT_H) graphite-ppl.h graphite-poly.h graphite-scop-detection.h \
++ $(DBGCNT_H) graphite-ppl.h $(GRAPHITE_POLY_H) graphite-scop-detection.h \
+ graphite-clast-to-gimple.h graphite-sese-to-poly.h
+ graphite-blocking.o : graphite-blocking.c $(CONFIG_H) $(SYSTEM_H) \
+ coretypes.h $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) \
+- sese.h graphite-ppl.h graphite-poly.h
++ sese.h graphite-ppl.h $(GRAPHITE_POLY_H)
+ graphite-clast-to-gimple.o : graphite-clast-to-gimple.c $(CONFIG_H) \
+ $(SYSTEM_H) coretypes.h $(DIAGNOSTIC_CORE_H) $(TREE_FLOW_H) $(TREE_DUMP_H) \
+- $(CFGLOOP_H) $(TREE_DATA_REF_H) sese.h graphite-cloog-util.h \
+- graphite-ppl.h graphite-poly.h graphite-clast-to-gimple.h \
++ $(CFGLOOP_H) $(TREE_DATA_REF_H) sese.h $(GRAPHITE_CLOOG_UTIL_H) \
++ graphite-ppl.h $(GRAPHITE_POLY_H) graphite-clast-to-gimple.h \
+ graphite-dependences.h graphite-cloog-compat.h
+ graphite-cloog-util.o : graphite-cloog-util.c $(CONFIG_H) $(SYSTEM_H) \
+- coretypes.h graphite-cloog-util.h graphite-cloog-compat.h
++ coretypes.h $(GRAPHITE_CLOOG_UTIL_H) graphite-cloog-compat.h
+ graphite-dependences.o : graphite-dependences.c $(CONFIG_H) $(SYSTEM_H) \
+ coretypes.h $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) \
+- sese.h graphite-ppl.h graphite-poly.h graphite-dependences.h \
+- graphite-cloog-util.h
++ sese.h graphite-ppl.h $(GRAPHITE_POLY_H) graphite-dependences.h \
++ $(GRAPHITE_CLOOG_UTIL_H)
+ graphite-flattening.o : graphite-flattening.c $(CONFIG_H) $(SYSTEM_H) \
+ coretypes.h $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) \
+- sese.h graphite-ppl.h graphite-poly.h
++ sese.h graphite-ppl.h $(GRAPHITE_POLY_H)
+ graphite-interchange.o : graphite-interchange.c $(CONFIG_H) $(SYSTEM_H) \
+ coretypes.h $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) \
+- sese.h graphite-ppl.h graphite-poly.h
++ sese.h graphite-ppl.h $(GRAPHITE_POLY_H)
+ graphite-poly.o : graphite-poly.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+ $(DIAGNOSTIC_CORE_H) $(TREE_FLOW_H) $(TREE_DUMP_H) gimple-pretty-print.h \
+- $(CFGLOOP_H) $(TREE_DATA_REF_H) sese.h graphite-ppl.h graphite-poly.h \
+- graphite-dependences.h graphite-cloog-util.h
++ $(CFGLOOP_H) $(TREE_DATA_REF_H) sese.h graphite-ppl.h $(GRAPHITE_POLY_H) \
++ graphite-dependences.h $(GRAPHITE_CLOOG_UTIL_H)
+ graphite-ppl.o : graphite-ppl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+- graphite-cloog-util.h graphite-ppl.h
++ $(GRAPHITE_CLOOG_UTIL_H) graphite-ppl.h
+ graphite-scop-detection.o : graphite-scop-detection.c $(CONFIG_H) $(SYSTEM_H) \
+ coretypes.h $(TREE_FLOW_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) $(TREE_PASS_H) \
+- sese.h graphite-ppl.h graphite-poly.h graphite-scop-detection.h
++ sese.h graphite-ppl.h $(GRAPHITE_POLY_H) graphite-scop-detection.h
+ graphite-sese-to-poly.o : graphite-sese-to-poly.c $(CONFIG_H) \
+ $(SYSTEM_H) coretypes.h $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) \
+- $(TREE_DATA_REF_H) domwalk.h sese.h graphite-ppl.h graphite-poly.h \
++ $(TREE_DATA_REF_H) domwalk.h sese.h graphite-ppl.h $(GRAPHITE_POLY_H) \
+ graphite-sese-to-poly.h
+ tree-vect-loop.o: tree-vect-loop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+ $(TM_H) $(GGC_H) $(TREE_H) $(BASIC_BLOCK_H) $(DIAGNOSTIC_H) $(TREE_FLOW_H) \
+@@ -3482,6 +3484,11 @@ $(out_object_file): $(out_file) $(CONFIG
+ $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) \
+ $(out_file) $(OUTPUT_OPTION)
+
++graphite%.o : \
++ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS))
++graphite.o : \
++ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS))
++
+ # Build auxiliary files that support ecoff format.
+ mips-tfile: mips-tfile.o version.o $(LIBDEPS)
+ $(LINKER) $(LINKERFLAGS) $(LDFLAGS) -o $@ \
+--- a/src/gcc/graphite-cloog-compat.h.jj 2011-01-03 12:53:05.000000000 +0100
++++ b/src/gcc/graphite-cloog-compat.h 2011-01-04 17:34:09.857757544 +0100
+@@ -272,4 +272,277 @@ static inline int cloog_matrix_nrows (Cl
+ return m->NbRows;
+ }
+ #endif /* CLOOG_ORG */
++
++#include <dlfcn.h>
++#if PPL_VERSION_MAJOR == 0 && PPL_VERSION_MINOR < 11
++#define DYNSYMS_PPL11
++#else
++#define DYNSYMS_PPL11 \
++ DYNSYM (ppl_new_PIP_Problem_from_constraints); \
++ DYNSYM (ppl_PIP_Problem_is_satisfiable); \
++ DYNSYM (ppl_delete_PIP_Problem);
++#endif
++#define DYNSYMS \
++ DYNSYM (cloog_block_alloc); \
++ DYNSYM (cloog_block_list_free); \
++ DYNSYM (cloog_block_list_malloc); \
++ DYNSYM (cloog_clast_create); \
++ DYNSYM (cloog_clast_free); \
++ DYNSYM (cloog_domain_free); \
++ DYNSYM (cloog_domain_matrix2domain); \
++ DYNSYM (cloog_initialize); \
++ DYNSYM (cloog_loop_malloc); \
++ DYNSYM (cloog_matrix_alloc); \
++ DYNSYM (cloog_matrix_copy); \
++ DYNSYM (cloog_matrix_free); \
++ DYNSYM (cloog_matrix_print); \
++ DYNSYM (cloog_names_malloc); \
++ DYNSYM (cloog_names_scalarize); \
++ DYNSYM (cloog_options_free); \
++ DYNSYM (cloog_options_malloc); \
++ DYNSYM (cloog_program_dump_cloog); \
++ DYNSYM (cloog_program_extract_scalars); \
++ DYNSYM (cloog_program_free); \
++ DYNSYM (cloog_program_generate); \
++ DYNSYM (cloog_program_malloc); \
++ DYNSYM (cloog_program_print); \
++ DYNSYM (cloog_program_scatter); \
++ DYNSYM (cloog_statement_alloc); \
++ DYNSYM (cloog_domain_union); \
++ DYNSYM (cloog_matrix_read); \
++ DYNSYM (cloog_new_pol); \
++ DYNSYM (cloog_vector_gcd); \
++ DYNSYM (ppl_finalize); \
++ DYNSYM (ppl_assign_Coefficient_from_mpz_t); \
++ DYNSYM (ppl_assign_Linear_Expression_from_Linear_Expression); \
++ DYNSYM (ppl_Coefficient_to_mpz_t); \
++ DYNSYM (ppl_Constraint_coefficient); \
++ DYNSYM (ppl_Constraint_inhomogeneous_term); \
++ DYNSYM (ppl_Constraint_space_dimension); \
++ DYNSYM (ppl_Constraint_System_begin); \
++ DYNSYM (ppl_Constraint_System_const_iterator_dereference); \
++ DYNSYM (ppl_Constraint_System_const_iterator_equal_test); \
++ DYNSYM (ppl_Constraint_System_const_iterator_increment); \
++ DYNSYM (ppl_Constraint_System_end); \
++ DYNSYM (ppl_Constraint_System_insert_Constraint); \
++ DYNSYM (ppl_Constraint_System_space_dimension); \
++ DYNSYM (ppl_Constraint_type); \
++ DYNSYM (ppl_delete_Coefficient); \
++ DYNSYM (ppl_delete_Constraint); \
++ DYNSYM (ppl_delete_Constraint_System_const_iterator); \
++ DYNSYM (ppl_delete_Linear_Expression); \
++ DYNSYM (ppl_delete_Pointset_Powerset_C_Polyhedron); \
++ DYNSYM (ppl_delete_Pointset_Powerset_C_Polyhedron_iterator); \
++ DYNSYM (ppl_delete_Polyhedron); \
++ DYNSYM (ppl_Linear_Expression_add_to_coefficient); \
++ DYNSYM (ppl_Linear_Expression_add_to_inhomogeneous); \
++ DYNSYM (ppl_Linear_Expression_coefficient); \
++ DYNSYM (ppl_Linear_Expression_inhomogeneous_term); \
++ DYNSYM (ppl_Linear_Expression_space_dimension); \
++ DYNSYM (ppl_new_Coefficient); \
++ DYNSYM (ppl_new_Coefficient_from_mpz_t); \
++ DYNSYM (ppl_new_Constraint); \
++ DYNSYM (ppl_new_Constraint_System); \
++ DYNSYM (ppl_new_Constraint_System_const_iterator); \
++ DYNSYM (ppl_new_C_Polyhedron_from_C_Polyhedron); \
++ DYNSYM (ppl_new_C_Polyhedron_from_space_dimension); \
++ DYNSYM (ppl_new_C_Polyhedron_recycle_Constraint_System); \
++ DYNSYM (ppl_new_Linear_Expression); \
++ DYNSYM (ppl_new_Linear_Expression_from_Constraint); \
++ DYNSYM (ppl_new_Linear_Expression_from_Linear_Expression); \
++ DYNSYM (ppl_new_Linear_Expression_with_dimension); \
++ DYNSYM (ppl_new_Pointset_Powerset_C_Polyhedron_from_C_Polyhedron); \
++ DYNSYM (ppl_new_Pointset_Powerset_C_Polyhedron_from_Pointset_Powerset_C_Polyhedron); \
++ DYNSYM (ppl_new_Pointset_Powerset_C_Polyhedron_from_space_dimension); \
++ DYNSYM (ppl_new_Pointset_Powerset_C_Polyhedron_iterator); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_add_constraint); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_add_space_dimensions_and_embed); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_difference_assign); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_intersection_assign); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_is_empty); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_iterator_begin); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_iterator_dereference); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_iterator_end); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_iterator_equal_test); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_iterator_increment); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_map_space_dimensions); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_maximize); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_minimize); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_remove_space_dimensions); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_size); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_space_dimension); \
++ DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_upper_bound_assign); \
++ DYNSYM (ppl_Polyhedron_add_constraint); \
++ DYNSYM (ppl_Polyhedron_add_constraints); \
++ DYNSYM (ppl_Polyhedron_add_space_dimensions_and_embed); \
++ DYNSYM (ppl_Polyhedron_get_constraints); \
++ DYNSYM (ppl_Polyhedron_map_space_dimensions); \
++ DYNSYM (ppl_Polyhedron_remove_space_dimensions); \
++ DYNSYM (ppl_Polyhedron_space_dimension); \
++ DYNSYM (ppl_subtract_Linear_Expression_from_Linear_Expression); \
++ DYNSYM (pprint); \
++ DYNSYM (stmt_block); \
++ DYNSYM (stmt_for); \
++ DYNSYM (stmt_guard); \
++ DYNSYM (stmt_root); \
++ DYNSYM (stmt_user); \
++ DYNSYM (ppl_delete_Constraint_System); \
++ DYNSYM (ppl_initialize); \
++ DYNSYM (ppl_new_Constraint_System_from_Constraint); \
++ DYNSYM (ppl_new_C_Polyhedron_from_Constraint_System); \
++ DYNSYM (ppl_Polyhedron_affine_image); \
++ DYNSYM (ppl_io_fprint_Pointset_Powerset_C_Polyhedron); \
++ DYNSYMS_PPL11
++extern struct
++{
++ bool inited;
++ void *h;
++#define DYNSYM(x) __typeof (x) *p_##x
++ DYNSYMS
++#undef DYNSYM
++} cloog_pointers__;
++
++#define cloog_block_alloc (*cloog_pointers__.p_cloog_block_alloc)
++#define cloog_block_list_free (*cloog_pointers__.p_cloog_block_list_free)
++#define cloog_block_list_malloc (*cloog_pointers__.p_cloog_block_list_malloc)
++#define cloog_clast_create (*cloog_pointers__.p_cloog_clast_create)
++#define cloog_clast_free (*cloog_pointers__.p_cloog_clast_free)
++#define cloog_domain_free (*cloog_pointers__.p_cloog_domain_free)
++#define cloog_domain_matrix2domain (*cloog_pointers__.p_cloog_domain_matrix2domain)
++#define cloog_initialize (*cloog_pointers__.p_cloog_initialize)
++#ifndef CLOOG_ORG
++#undef cloog_loop_malloc
++#define cloog_loop_malloc(STATE) (*cloog_pointers__.p_cloog_loop_malloc) ()
++#else
++#define cloog_loop_malloc (*cloog_pointers__.p_cloog_loop_malloc)
++#endif
++#define cloog_matrix_alloc (*cloog_pointers__.p_cloog_matrix_alloc)
++#define cloog_matrix_copy (*cloog_pointers__.p_cloog_matrix_copy)
++#define cloog_matrix_free (*cloog_pointers__.p_cloog_matrix_free)
++#define cloog_matrix_print (*cloog_pointers__.p_cloog_matrix_print)
++#define cloog_names_malloc (*cloog_pointers__.p_cloog_names_malloc)
++#define cloog_names_scalarize (*cloog_pointers__.p_cloog_names_scalarize)
++#define cloog_options_free (*cloog_pointers__.p_cloog_options_free)
++#ifndef CLOOG_ORG
++#undef cloog_options_malloc
++#define cloog_options_malloc(STATE) (*cloog_pointers__.p_cloog_options_malloc) ()
++#undef cloog_program_dump_cloog
++#define cloog_program_dump_cloog(DUMPFILE, PROGRAM, SCATTERINGLIST) \
++ (*cloog_pointers__.p_cloog_program_dump_cloog) (DUMPFILE, PROGRAM)
++#undef cloog_program_extract_scalars
++#define cloog_program_extract_scalars(PROG, SCATT, OPT) \
++ (*cloog_pointers__.p_cloog_program_extract_scalars) (PROG, SCATT)
++#else
++#define cloog_options_malloc (*cloog_pointers__.p_cloog_options_malloc)
++#define cloog_program_dump_cloog (*cloog_pointers__.p_cloog_program_dump_cloog)
++#define cloog_program_extract_scalars (*cloog_pointers__.p_cloog_program_extract_scalars)
++#endif
++#define cloog_program_free (*cloog_pointers__.p_cloog_program_free)
++#define cloog_program_generate (*cloog_pointers__.p_cloog_program_generate)
++#define cloog_program_malloc (*cloog_pointers__.p_cloog_program_malloc)
++#define cloog_program_print (*cloog_pointers__.p_cloog_program_print)
++#ifndef CLOOG_ORG
++#undef cloog_program_scatter
++#define cloog_program_scatter(PROG, SCATT, OPT) \
++ (*cloog_pointers__.p_cloog_program_scatter) (PROG, SCATT)
++#undef cloog_statement_alloc
++#define cloog_statement_alloc(STATE, INDEX) \
++ (*cloog_pointers__.p_cloog_statement_alloc) (INDEX)
++#else
++#define cloog_program_scatter (*cloog_pointers__.p_cloog_program_scatter)
++#define cloog_statement_alloc (*cloog_pointers__.p_cloog_statement_alloc)
++#endif
++#define cloog_domain_union (*cloog_pointers__.p_cloog_domain_union)
++#define cloog_matrix_read (*cloog_pointers__.p_cloog_matrix_read)
++#define cloog_new_pol (*cloog_pointers__.p_cloog_new_pol)
++#define cloog_vector_gcd (*cloog_pointers__.p_cloog_vector_gcd)
++#define ppl_finalize (*cloog_pointers__.p_ppl_finalize)
++#define ppl_assign_Coefficient_from_mpz_t (*cloog_pointers__.p_ppl_assign_Coefficient_from_mpz_t)
++#define ppl_assign_Linear_Expression_from_Linear_Expression (*cloog_pointers__.p_ppl_assign_Linear_Expression_from_Linear_Expression)
++#define ppl_Coefficient_to_mpz_t (*cloog_pointers__.p_ppl_Coefficient_to_mpz_t)
++#define ppl_Constraint_coefficient (*cloog_pointers__.p_ppl_Constraint_coefficient)
++#define ppl_Constraint_inhomogeneous_term (*cloog_pointers__.p_ppl_Constraint_inhomogeneous_term)
++#define ppl_Constraint_space_dimension (*cloog_pointers__.p_ppl_Constraint_space_dimension)
++#define ppl_Constraint_System_begin (*cloog_pointers__.p_ppl_Constraint_System_begin)
++#define ppl_Constraint_System_const_iterator_dereference (*cloog_pointers__.p_ppl_Constraint_System_const_iterator_dereference)
++#define ppl_Constraint_System_const_iterator_equal_test (*cloog_pointers__.p_ppl_Constraint_System_const_iterator_equal_test)
++#define ppl_Constraint_System_const_iterator_increment (*cloog_pointers__.p_ppl_Constraint_System_const_iterator_increment)
++#define ppl_Constraint_System_end (*cloog_pointers__.p_ppl_Constraint_System_end)
++#define ppl_Constraint_System_insert_Constraint (*cloog_pointers__.p_ppl_Constraint_System_insert_Constraint)
++#define ppl_Constraint_System_space_dimension (*cloog_pointers__.p_ppl_Constraint_System_space_dimension)
++#define ppl_Constraint_type (*cloog_pointers__.p_ppl_Constraint_type)
++#define ppl_delete_Coefficient (*cloog_pointers__.p_ppl_delete_Coefficient)
++#define ppl_delete_Constraint (*cloog_pointers__.p_ppl_delete_Constraint)
++#define ppl_delete_Constraint_System_const_iterator (*cloog_pointers__.p_ppl_delete_Constraint_System_const_iterator)
++#define ppl_delete_Linear_Expression (*cloog_pointers__.p_ppl_delete_Linear_Expression)
++#define ppl_delete_Pointset_Powerset_C_Polyhedron (*cloog_pointers__.p_ppl_delete_Pointset_Powerset_C_Polyhedron)
++#define ppl_delete_Pointset_Powerset_C_Polyhedron_iterator (*cloog_pointers__.p_ppl_delete_Pointset_Powerset_C_Polyhedron_iterator)
++#define ppl_delete_Polyhedron (*cloog_pointers__.p_ppl_delete_Polyhedron)
++#define ppl_Linear_Expression_add_to_coefficient (*cloog_pointers__.p_ppl_Linear_Expression_add_to_coefficient)
++#define ppl_Linear_Expression_add_to_inhomogeneous (*cloog_pointers__.p_ppl_Linear_Expression_add_to_inhomogeneous)
++#define ppl_Linear_Expression_coefficient (*cloog_pointers__.p_ppl_Linear_Expression_coefficient)
++#define ppl_Linear_Expression_inhomogeneous_term (*cloog_pointers__.p_ppl_Linear_Expression_inhomogeneous_term)
++#define ppl_Linear_Expression_space_dimension (*cloog_pointers__.p_ppl_Linear_Expression_space_dimension)
++#define ppl_new_Coefficient (*cloog_pointers__.p_ppl_new_Coefficient)
++#define ppl_new_Coefficient_from_mpz_t (*cloog_pointers__.p_ppl_new_Coefficient_from_mpz_t)
++#define ppl_new_Constraint (*cloog_pointers__.p_ppl_new_Constraint)
++#define ppl_new_Constraint_System (*cloog_pointers__.p_ppl_new_Constraint_System)
++#define ppl_new_Constraint_System_const_iterator (*cloog_pointers__.p_ppl_new_Constraint_System_const_iterator)
++#define ppl_new_C_Polyhedron_from_C_Polyhedron (*cloog_pointers__.p_ppl_new_C_Polyhedron_from_C_Polyhedron)
++#define ppl_new_C_Polyhedron_from_space_dimension (*cloog_pointers__.p_ppl_new_C_Polyhedron_from_space_dimension)
++#define ppl_new_C_Polyhedron_recycle_Constraint_System (*cloog_pointers__.p_ppl_new_C_Polyhedron_recycle_Constraint_System)
++#define ppl_new_Linear_Expression (*cloog_pointers__.p_ppl_new_Linear_Expression)
++#define ppl_new_Linear_Expression_from_Constraint (*cloog_pointers__.p_ppl_new_Linear_Expression_from_Constraint)
++#define ppl_new_Linear_Expression_from_Linear_Expression (*cloog_pointers__.p_ppl_new_Linear_Expression_from_Linear_Expression)
++#define ppl_new_Linear_Expression_with_dimension (*cloog_pointers__.p_ppl_new_Linear_Expression_with_dimension)
++#define ppl_new_Pointset_Powerset_C_Polyhedron_from_C_Polyhedron (*cloog_pointers__.p_ppl_new_Pointset_Powerset_C_Polyhedron_from_C_Polyhedron)
++#define ppl_new_Pointset_Powerset_C_Polyhedron_from_Pointset_Powerset_C_Polyhedron (*cloog_pointers__.p_ppl_new_Pointset_Powerset_C_Polyhedron_from_Pointset_Powerset_C_Polyhedron)
++#define ppl_new_Pointset_Powerset_C_Polyhedron_from_space_dimension (*cloog_pointers__.p_ppl_new_Pointset_Powerset_C_Polyhedron_from_space_dimension)
++#define ppl_new_Pointset_Powerset_C_Polyhedron_iterator (*cloog_pointers__.p_ppl_new_Pointset_Powerset_C_Polyhedron_iterator)
++#define ppl_Pointset_Powerset_C_Polyhedron_add_constraint (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_add_constraint)
++#define ppl_Pointset_Powerset_C_Polyhedron_add_space_dimensions_and_embed (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_add_space_dimensions_and_embed)
++#define ppl_Pointset_Powerset_C_Polyhedron_difference_assign (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_difference_assign)
++#define ppl_Pointset_Powerset_C_Polyhedron_intersection_assign (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_intersection_assign)
++#define ppl_Pointset_Powerset_C_Polyhedron_is_empty (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_is_empty)
++#define ppl_Pointset_Powerset_C_Polyhedron_iterator_begin (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_iterator_begin)
++#define ppl_Pointset_Powerset_C_Polyhedron_iterator_dereference (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_iterator_dereference)
++#define ppl_Pointset_Powerset_C_Polyhedron_iterator_end (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_iterator_end)
++#define ppl_Pointset_Powerset_C_Polyhedron_iterator_equal_test (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_iterator_equal_test)
++#define ppl_Pointset_Powerset_C_Polyhedron_iterator_increment (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_iterator_increment)
++#define ppl_Pointset_Powerset_C_Polyhedron_map_space_dimensions (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_map_space_dimensions)
++#define ppl_Pointset_Powerset_C_Polyhedron_maximize (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_maximize)
++#define ppl_Pointset_Powerset_C_Polyhedron_minimize (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_minimize)
++#define ppl_Pointset_Powerset_C_Polyhedron_remove_space_dimensions (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_remove_space_dimensions)
++#define ppl_Pointset_Powerset_C_Polyhedron_size (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_size)
++#define ppl_Pointset_Powerset_C_Polyhedron_space_dimension (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_space_dimension)
++#define ppl_Pointset_Powerset_C_Polyhedron_upper_bound_assign (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_upper_bound_assign)
++#define ppl_Polyhedron_add_constraint (*cloog_pointers__.p_ppl_Polyhedron_add_constraint)
++#define ppl_Polyhedron_add_constraints (*cloog_pointers__.p_ppl_Polyhedron_add_constraints)
++#define ppl_Polyhedron_add_space_dimensions_and_embed (*cloog_pointers__.p_ppl_Polyhedron_add_space_dimensions_and_embed)
++#define ppl_Polyhedron_get_constraints (*cloog_pointers__.p_ppl_Polyhedron_get_constraints)
++#define ppl_Polyhedron_map_space_dimensions (*cloog_pointers__.p_ppl_Polyhedron_map_space_dimensions)
++#define ppl_Polyhedron_remove_space_dimensions (*cloog_pointers__.p_ppl_Polyhedron_remove_space_dimensions)
++#define ppl_Polyhedron_space_dimension (*cloog_pointers__.p_ppl_Polyhedron_space_dimension)
++#define ppl_subtract_Linear_Expression_from_Linear_Expression (*cloog_pointers__.p_ppl_subtract_Linear_Expression_from_Linear_Expression)
++#define pprint (*cloog_pointers__.p_pprint)
++#define stmt_block (*cloog_pointers__.p_stmt_block)
++#define stmt_for (*cloog_pointers__.p_stmt_for)
++#define stmt_guard (*cloog_pointers__.p_stmt_guard)
++#define stmt_root (*cloog_pointers__.p_stmt_root)
++#define stmt_user (*cloog_pointers__.p_stmt_user)
++#define ppl_delete_Constraint_System (*cloog_pointers__.p_ppl_delete_Constraint_System)
++#define ppl_initialize (*cloog_pointers__.p_ppl_initialize)
++#define ppl_new_Constraint_System_from_Constraint (*cloog_pointers__.p_ppl_new_Constraint_System_from_Constraint)
++#define ppl_new_C_Polyhedron_from_Constraint_System (*cloog_pointers__.p_ppl_new_C_Polyhedron_from_Constraint_System)
++#define ppl_Polyhedron_affine_image (*cloog_pointers__.p_ppl_Polyhedron_affine_image)
++#define ppl_io_fprint_Pointset_Powerset_C_Polyhedron (*cloog_pointers__.p_ppl_io_fprint_Pointset_Powerset_C_Polyhedron)
++#if !(PPL_VERSION_MAJOR == 0 && PPL_VERSION_MINOR < 11)
++#define ppl_new_PIP_Problem_from_constraints (*cloog_pointers__.p_ppl_new_PIP_Problem_from_constraints)
++#define ppl_PIP_Problem_is_satisfiable (*cloog_pointers__.p_ppl_PIP_Problem_is_satisfiable)
++#define ppl_delete_PIP_Problem (*cloog_pointers__.p_ppl_delete_PIP_Problem)
++#endif
++
++#define cloog_finalize (*cloog_pointers__.p_ppl_finalize)
++
++
+ #endif /* GRAPHITE_CLOOG_COMPAT_H */
+--- a/src/gcc/graphite.c.jj 2011-01-03 12:53:05.194056513 +0100
++++ b/src/gcc/graphite.c 2011-01-04 16:18:32.385007767 +0100
+@@ -56,6 +56,35 @@ along with GCC; see the file COPYING3.
+
+ CloogState *cloog_state;
+
++__typeof (cloog_pointers__) cloog_pointers__;
++
++static bool
++init_cloog_pointers (void)
++{
++ void *h;
++
++ if (cloog_pointers__.inited)
++ return cloog_pointers__.h != NULL;
++ h = dlopen ("libcloog-ppl.so.0", RTLD_LAZY);
++ cloog_pointers__.h = h;
++ if (h == NULL)
++ return false;
++#define DYNSYM(x) \
++ do \
++ { \
++ union { __typeof (cloog_pointers__.p_##x) p; void *q; } u; \
++ u.q = dlsym (h, #x); \
++ if (u.q == NULL) \
++ return false; \
++ cloog_pointers__.p_##x = u.p; \
++ } \
++ while (0)
++ DYNSYMS
++#undef DYNSYM
++ return true;
++}
++
++
+ /* Print global statistics to FILE. */
+
+ static void
+@@ -201,6 +230,12 @@ graphite_initialize (void)
+ return false;
+ }
+
++ if (!init_cloog_pointers ())
++ {
++ sorry ("Graphite loop optimizations can only be used if the libcloog-ppl0 package is installed");
++ return false;
++ }
++
+ scev_reset ();
+ recompute_all_dominators ();
+ initialize_original_copy_tables ();
+--- a/src/gcc/graphite-clast-to-gimple.c.jj 2011-01-03 12:53:05.000000000 +0100
++++ b/src/gcc/graphite-clast-to-gimple.c 2011-01-04 16:29:55.738007463 +0100
+@@ -738,10 +738,10 @@ clast_get_body_of_loop (struct clast_stm
+ from STMT_FOR. */
+
+ static tree
+-gcc_type_for_iv_of_clast_loop (struct clast_for *stmt_for, int level,
++gcc_type_for_iv_of_clast_loop (struct clast_for *stmt_fora, int level,
+ tree lb_type, tree ub_type)
+ {
+- struct clast_stmt *stmt = (struct clast_stmt *) stmt_for;
++ struct clast_stmt *stmt = (struct clast_stmt *) stmt_fora;
+ struct clast_user_stmt *body = clast_get_body_of_loop (stmt);
+ CloogStatement *cs = body->statement;
+ poly_bb_p pbb = (poly_bb_p) cloog_statement_usr (cs);
+--- a/src/gcc/graphite-poly.h.jj 2011-01-03 12:53:05.000000000 +0100
++++ b/src/gcc/graphite-poly.h 2011-01-04 17:35:53.308788629 +0100
+@@ -22,6 +22,8 @@ along with GCC; see the file COPYING3.
+ #ifndef GCC_GRAPHITE_POLY_H
+ #define GCC_GRAPHITE_POLY_H
+
++#include "graphite-cloog-util.h"
++
+ typedef struct poly_dr *poly_dr_p;
+ DEF_VEC_P(poly_dr_p);
+ DEF_VEC_ALLOC_P (poly_dr_p, heap);
diff --git a/debian/patches/gcc-d-lang.diff b/debian/patches/gcc-d-lang.diff
new file mode 100644
index 0000000..81c8934
--- /dev/null
+++ b/debian/patches/gcc-d-lang.diff
@@ -0,0 +1,304 @@
+# DP: Add D options and specs for the gcc driver.
+
+--- /dev/null 2011-07-23 10:07:44.175344374 +0100
++++ b/src/gcc/d/lang-specs.h 2011-07-09 23:51:52.807002983 +0100
+@@ -0,0 +1,53 @@
++/* GDC -- D front-end for GCC
++ Copyright (C) 2004 David Friedman
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++*/
++
++#ifndef D_D_SPEC
++#define D_D_SPEC 0
++#endif
++
++/* %{!M} probably doesn't make sense because we would need
++ to do that -- -MD and -MMD doesn't sound like a plan for D.... */
++
++/* %(d_options) ? */
++
++#if D_DRIVER_ONLY
++{".html", "@d", 0, 1, 0 },
++{".HTML", "@d", 0, 1, 0 },
++{".htm", "@d", 0, 1, 0 },
++{".HTM", "@d", 0, 1, 0 },
++{".xhtml", "@d", 0, 1, 0 },
++{".XHTML", "@d", 0, 1, 0 },
++{".d", "@d", 0, 1, 0 },
++{".D", "@d", 0, 1, 0 },
++{".dd", "@d", 0, 1, 0 },
++{".DD", "@d", 0, 1, 0 },
++{".di", "@d", 0, 1, 0 },
++{".DI", "@d", 0, 1, 0 },
++{"@d",
++ "%{!E:cc1d %i %(cc1_options) %(cc1d) %I %N %{nostdinc*} %{+e*} %{I*} %{J*}\
++ %{M} %{MM} %{!fsyntax-only:%(invoke_as)}}", D_D_SPEC, 1, 0 },
++#else
++{".d", "@d", 0, 1, 0 },
++{".D", "@d", 0, 1, 0 },
++{".di", "@d", 0, 1, 0 },
++{".DI", "@d", 0, 1, 0 },
++{"@d",
++ "%{!E:cc1d %i %(cc1_options) %(cc1d) %I %N %{nostdinc*} %{+e*} %{I*} %{J*}\
++ %{M} %{MM} %{!fsyntax-only:%(invoke_as)}}", D_D_SPEC, 1, 0 },
++#endif
++
+--- /dev/null 2011-07-23 10:07:44.175344374 +0100
++++ b/src/gcc/d/lang.opt 2011-07-24 15:48:56.848040870 +0100
+@@ -0,0 +1,215 @@
++; GDC -- D front-end for GCC
++; Copyright (C) 2004 David Friedman
++;
++; This program is free software; you can redistribute it and/or modify
++; it under the terms of the GNU General Public License as published by
++; the Free Software Foundation; either version 2 of the License, or
++; (at your option) any later version.
++;
++; This program is distributed in the hope that it will be useful,
++; but WITHOUT ANY WARRANTY; without even the implied warranty of
++; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++; GNU General Public License for more details.
++;
++; You should have received a copy of the GNU General Public License
++; along with this program; if not, write to the Free Software
++; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++; This is used in GCC 3.4+
++; %% TODO cleanup in ASCII collating order.
++
++Language
++D
++
++I
++D Joined Separate
++-I <dir> Add <dir> to the end of the main include path.
++
++J
++D Joined Separate
++-J <dir> Add <dir> to the end of the string import path.
++
++fdeprecated
++D
++Allow use of deprecated features
++
++fassert
++D
++Generate runtime code for assert()'s
++
++frelease
++D
++Compile release version
++
++; For D: defaults to on
++fbounds-check
++D
++Generate code to check bounds before indexing arrays
++
++funittest
++D
++Compile in unittest code
++
++fversion=
++D Joined RejectNegative
++-fversion=<level|ident> Compile in version code >= <level> or identified by <ident>
++
++fdebug=
++D Joined RejectNegative
++-fdebug,-fdebug=<level>,-fdebug=<ident> Compile in debug code, code <= level, or code identified by ident
++
++fdebug
++D
++Compile in debug code
++
++fdebug-c
++D
++With -g, generate C debug information for debugger compatibility
++
++fdeps=
++D Joined RejectNegative
++-fdeps=<filename> Write module dependencies to filename
++
++fd-verbose
++D
++Print information about D language processing to stdout
++
++fd-vtls
++D
++List all variables going into thread local storage
++
++fd-version=1
++D RejectNegative
++Compile as D language version 1
++
++femit-templates=
++D Joined RejectNegative
++-femit-templates=[normal|private|all|none|auto] Control template emission
++
++femit-templates
++D
++-femit-templates Emit templates code and data even if the linker cannot merge multiple copies
++
++nostdinc
++D
++Do not search standard system include directories
++
++fonly=
++D Joined RejectNegative
++Process all modules specified on the command line, but only generate code for the module specified by the argument.
++
++fignore-unknown-pragmas
++D
++Ignore unsupported pragmas
++
++fproperty
++D
++Enforce property syntax
++
++fintfc
++Generate D interface files
++
++fintfc-dir=
++D Joined RejectNegative
++-fintfc-dir=<dir> Write D interface files to directory <dir>
++
++fintfc-file=
++D Joined RejectNegative
++-fintfc-file=<filename> Write D interface file to <filename>
++
++fdoc
++D
++Generate documentation
++
++fdoc-dir=
++D Joined RejectNegative
++-fdoc-dir=<docdir> Write documentation file to docdir directory
++
++fdoc-file=
++D Joined RejectNegative
++-fdoc-file=<filename> Write documentation file to filename
++
++fdoc-inc=
++D Joined RejectNegative
++-fdoc-inc=<filename> Include a Ddoc macro file
++
++fmultilib-dir=
++D Joined RejectNegative
++-fmultilib-dir=<dir> Select header multilib subdirectory
++
++Wsign-compare
++D
++Warn about signed-unsigned comparisons
++
++fdump-source
++D RejectNegative
++Dump decoded UTF-8 text and source from HTML
++
++fasm
++D
++Recognize the \"asm\" keyword
++
++fbuiltin
++D
++Recognize built-in functions
++
++funsigned-char
++D
++Make \"char\" unsigned by default (silently ignored in D)
++
++fsigned-char
++D
++Make \"char\" signed by default (silently ignored in D)
++
++imultilib
++D Joined Separate
++-imultilib <dir> Set <dir> to be the multilib include subdirectory
++
++iprefix
++D Joined Separate
++-iprefix <path> Specify <path> as a prefix for next two options
++
++isysroot
++D Joined Separate
++-isysroot <dir> Set <dir> to be the system root directory
++
++isystem
++D Joined Separate
++-isystem <dir> Add <dir> to the start of the system include path
++
++Wall
++D
++Enable most warning messages
++
++Werror
++D
++Error out the compiler on warnings
++
++fXf=
++D Joined RejectNegative
++-fXf=<filename> Write JSON file to <filename>
++
++
++; Everything below this line is used in 4.6+
++
++debuglib=
++Driver Joined
++Debug library to use instead of phobos
++
++defaultlib=
++Driver Joined
++Default library to use instead of phobos
++
++fod=
++Driver Joined
++-fod=<directory> Specify the object output directory.
++
++fop
++Driver
++Specify that the source file's parent directories should be appended to the object output directory.
++
++nophoboslib
++Driver
++
++static_libphobos
++Driver
+--- a/src/gcc/gcc.c 2011-02-23 02:04:43.000000000 +0000
++++ b/src/gcc/gcc.c 2011-07-12 21:55:05.805144355 +0100
+@@ -373,6 +373,7 @@ or with constant text in a single argume
+ assembler has done its job.
+ %D Dump out a -L option for each directory in startfile_prefixes.
+ If multilib_dir is set, extra entries are generated with it affixed.
++ %N Output the currently selected multilib directory name.
+ %l process LINK_SPEC as a spec.
+ %L process LIB_SPEC as a spec.
+ %G process LIBGCC_SPEC as a spec.
+@@ -5095,6 +5096,17 @@ do_spec_1 (const char *spec, int inswitc
+ return value;
+ break;
+
++ case 'N':
++ if (multilib_dir)
++ {
++ arg_going = 1;
++ obstack_grow (&obstack, "-fmultilib-dir=",
++ strlen ("-fmultilib-dir="));
++ obstack_grow (&obstack, multilib_dir,
++ strlen (multilib_dir));
++ }
++ break;
++
+ /* Here we define characters other than letters and digits. */
+
+ case '{':
diff --git a/debian/patches/gcc-default-format-security.diff b/debian/patches/gcc-default-format-security.diff
new file mode 100644
index 0000000..b12fa8d
--- /dev/null
+++ b/debian/patches/gcc-default-format-security.diff
@@ -0,0 +1,54 @@
+# DP: Turn on -Wformat -Wformat-security by default for C, C++, ObjC, ObjC++.
+
+---
+ gcc/c-common.c | 2 +-
+ gcc/c.opt | 2 +-
+ gcc/doc/invoke.texi | 8 ++++++++
+ 3 files changed, 10 insertions(+), 2 deletions(-)
+
+--- a/src/gcc/c-family/c-common.c
++++ b/src/gcc/c-family/c-common.c
+@@ -201,7 +201,7 @@
+ /* Warn about format/argument anomalies in calls to formatted I/O functions
+ (*printf, *scanf, strftime, strfmon, etc.). */
+
+-int warn_format;
++int warn_format = 1;
+
+ /* C/ObjC language option variables. */
+
+--- a/src/gcc/c-family/c.opt
++++ b/src/gcc/c-family/c.opt
+@@ -384,7 +384,7 @@
+ Warn about format strings that contain NUL bytes
+
+ Wformat-security
+-C ObjC C++ ObjC++ Var(warn_format_security) Warning
++C ObjC C++ ObjC++ Var(warn_format_security) Init(1) Warning
+ Warn about possible security problems with format functions
+
+ Wformat-y2k
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -3102,6 +3102,9 @@
+ @option{-Wformat-nonliteral}, @option{-Wformat-security}, and
+ @option{-Wformat=2} are available, but are not included in @option{-Wall}.
+
++NOTE: In Ubuntu 8.10 and later versions this option is enabled by default
++for C, C++, ObjC, ObjC++. To disable, use @option{-Wformat=0}.
++
+ @item -Wformat-y2k
+ @opindex Wformat-y2k
+ @opindex Wno-format-y2k
+@@ -3155,6 +3158,11 @@
+ in future warnings may be added to @option{-Wformat-security} that are not
+ included in @option{-Wformat-nonliteral}.)
+
++NOTE: In Ubuntu 8.10 and later versions this option is enabled by default
++for C, C++, ObjC, ObjC++. To disable, use @option{-Wno-format-security},
++or disable all format warnings with @option{-Wformat=0}. To make format
++security warnings fatal, specify @option{-Werror=format-security}.
++
+ @item -Wformat=2
+ @opindex Wformat=2
+ @opindex Wno-format=2
diff --git a/debian/patches/gcc-default-fortify-source.diff b/debian/patches/gcc-default-fortify-source.diff
new file mode 100644
index 0000000..946e71a
--- /dev/null
+++ b/debian/patches/gcc-default-fortify-source.diff
@@ -0,0 +1,34 @@
+# DP: Turn on -D_FORTIFY_SOURCE=2 by default for C, C++, ObjC, ObjC++.
+
+---
+ gcc/doc/invoke.texi | 6 ++++++
+ gcc/c-family/c-cppbuiltin.c | 3 +
+ 2 files changed, 9 insertions(+), 0 deletions(-)
+
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -5972,6 +5972,12 @@
+ Please note the warning under @option{-fgcse} about
+ invoking @option{-O2} on programs that use computed gotos.
+
++NOTE: In Ubuntu 8.10 and later versions, @option{-D_FORTIFY_SOURCE=2} is
++set by default, and is activated when @option{-O} is set to 2 or higher.
++This enables additional compile-time and run-time checks for several libc
++functions. To disable, specify either @option{-U_FORTIFY_SOURCE} or
++@option{-D_FORTIFY_SOURCE=0}.
++
+ @item -O3
+ @opindex O3
+ Optimize yet more. @option{-O3} turns on all optimizations specified
+--- a/src/gcc/c-family/c-cppbuiltin.c
++++ b/src/gcc/c-family/c-cppbuiltin.c
+@@ -731,6 +731,9 @@
+ builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0);
+ builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0);
+
++ /* Fortify Source enabled by default */
++ builtin_define_with_int_value ("_FORTIFY_SOURCE", 2);
++
+ /* Misc. */
+ if (flag_gnu89_inline)
+ cpp_define (pfile, "__GNUC_GNU_INLINE__");
diff --git a/debian/patches/gcc-default-relro.diff b/debian/patches/gcc-default-relro.diff
new file mode 100644
index 0000000..dd6ae2d
--- /dev/null
+++ b/debian/patches/gcc-default-relro.diff
@@ -0,0 +1,29 @@
+# DP: Turn on -Wl,-z,relro by default.
+
+---
+ gcc/doc/invoke.texi | 3 +++
+ gcc/gcc.c | 1 +
+ 2 files changed, 4 insertions(+), 0 deletions(-)
+
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -9216,6 +9216,9 @@
+ linker. When using the GNU linker, you can also get the same effect with
+ @samp{-Wl,-Map=output.map}.
+
++NOTE: In Ubuntu 8.10 and later versions, for LDFLAGS, the option
++@option{-Wl,-z,relro} is used. To disable, use @option{-Wl,-z,norelro}.
++
+ @item -u @var{symbol}
+ @opindex u
+ Pretend the symbol @var{symbol} is undefined, to force linking of
+--- a/src/gcc/gcc.c
++++ b/src/gcc/gcc.c
+@@ -661,6 +661,7 @@
+ }"PLUGIN_COND_CLOSE" \
+ %{flto|flto=*:%<fcompare-debug*} \
+ %{flto} %{flto=*} %l " LINK_PIE_SPEC \
++ " -z relro "\
+ "%X %{o*} %{e*} %{N} %{n} %{r}\
+ %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}}\
+ %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
diff --git a/debian/patches/gcc-default-ssp-ppc64.diff b/debian/patches/gcc-default-ssp-ppc64.diff
new file mode 100644
index 0000000..c11b912
--- /dev/null
+++ b/debian/patches/gcc-default-ssp-ppc64.diff
@@ -0,0 +1,192 @@
+# DP: Turn on -fstack-protector by default for C, C++, ObjC, ObjC++.
+# DP: Build libgcc using -fno-stack-protector.
+
+---
+ gcc/Makefile.in | 2 ++
+ gcc/cp/lang-specs.h | 6 +++---
+ gcc/doc/invoke.texi | 4 ++++
+ gcc/gcc.c | 18 ++++++++++++++----
+ gcc/objc/lang-specs.h | 10 +++++-----
+ gcc/objcp/lang-specs.h | 8 ++++----
+ 6 files changed, 32 insertions(+), 16 deletions(-)
+
+--- a/src/gcc/gcc.c
++++ b/src/gcc/gcc.c
+@@ -603,6 +603,14 @@
+ #define LINK_GCC_C_SEQUENCE_SPEC "%G %L %G"
+ #endif
+
++#ifndef SSP_DEFAULT_SPEC
++#ifdef TARGET_LIBC_PROVIDES_SSP
++#define SSP_DEFAULT_SPEC "%{!fno-stack-protector:%{!fstack-protector-all:%{!ffreestanding:%{!nostdlib:-fstack-protector}}}}"
++#else
++#define SSP_DEFAULT_SPEC ""
++#endif
++#endif
++
+ #ifndef LINK_SSP_SPEC
+ #ifdef TARGET_LIBC_PROVIDES_SSP
+ #define LINK_SSP_SPEC "%{fstack-protector:}"
+@@ -699,6 +707,7 @@
+ static const char *cc1plus_spec = CC1PLUS_SPEC;
+ static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC;
+ static const char *link_ssp_spec = LINK_SSP_SPEC;
++static const char *ssp_default_spec = SSP_DEFAULT_SPEC;
+ static const char *asm_spec = ASM_SPEC;
+ static const char *asm_final_spec = ASM_FINAL_SPEC;
+ static const char *link_spec = LINK_SPEC;
+@@ -756,7 +765,7 @@
+ "%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\
+ %{f*} %{g*:%{!g0:%{g*} %{!fno-working-directory:-fworking-directory}}} %{O*}\
+ %{O1:%:if-env-unset(DEB_GCC_NO_O3 -O3)} %{O2:%:if-env-unset(DEB_GCC_NO_O3 -O3)}\
+- %{undef} %{save-temps*:-fpch-preprocess}";
++ %{undef} %{save-temps*:-fpch-preprocess} %(ssp_default)";
+
+ /* This contains cpp options which are not passed when the preprocessor
+ output will be used by another program. */
+@@ -931,9 +940,9 @@
+ %{save-temps*|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \
+ %(cpp_options) -o %{save-temps*:%b.i} %{!save-temps*:%g.i} \n\
+ cc1 -fpreprocessed %{save-temps*:%b.i} %{!save-temps*:%g.i} \
+- %(cc1_options)}\
++ %(cc1_options) %(ssp_default)}\
+ %{!save-temps*:%{!traditional-cpp:%{!no-integrated-cpp:\
+- cc1 %(cpp_unique_options) %(cc1_options)}}}\
++ cc1 %(cpp_unique_options) %(cc1_options) %(ssp_default)}}}\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 1},
+ {"-",
+ "%{!E:%e-E or -x required when input is from standard input}\
+@@ -956,7 +965,7 @@
+ %W{o*:--output-pch=%*}}%V}}}}}}", 0, 0, 0},
+ {".i", "@cpp-output", 0, 0, 0},
+ {"@cpp-output",
+- "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
++ "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %(ssp_default) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+ {".s", "@assembler", 0, 0, 0},
+ {"@assembler",
+ "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 0, 0},
+@@ -1179,6 +1188,7 @@
+ INIT_STATIC_SPEC ("cc1plus", &cc1plus_spec),
+ INIT_STATIC_SPEC ("link_gcc_c_sequence", &link_gcc_c_sequence_spec),
+ INIT_STATIC_SPEC ("link_ssp", &link_ssp_spec),
++ INIT_STATIC_SPEC ("ssp_default", &ssp_default_spec),
+ INIT_STATIC_SPEC ("endfile", &endfile_spec),
+ INIT_STATIC_SPEC ("link", &link_spec),
+ INIT_STATIC_SPEC ("lib", &lib_spec),
+--- a/src/gcc/cp/lang-specs.h
++++ b/src/gcc/cp/lang-specs.h
+@@ -47,7 +47,7 @@
+ %(cpp_options) %2 -o %{save-temps*:%b.ii} %{!save-temps*:%g.ii} \n}\
+ cc1plus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}\
+ %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\
+- %(cc1_options) %2\
++ %(cc1_options) %(ssp_default) %2\
+ %{!fsyntax-only:%{!fdump-ada-spec*:-o %g.s %{!o*:--output-pch=%i.gch}\
+ %W{o*:--output-pch=%*}}%V}}}}",
+ CPLUSPLUS_CPP_SPEC, 0, 0},
+@@ -58,11 +58,11 @@
+ %(cpp_options) %2 -o %{save-temps*:%b.ii} %{!save-temps*:%g.ii} \n}\
+ cc1plus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}\
+ %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\
+- %(cc1_options) %2\
++ %(cc1_options) %(ssp_default) %2\
+ %{!fsyntax-only:%(invoke_as)}}}}",
+ CPLUSPLUS_CPP_SPEC, 0, 0},
+ {".ii", "@c++-cpp-output", 0, 0, 0},
+ {"@c++-cpp-output",
+ "%{!M:%{!MM:%{!E:\
+- cc1plus -fpreprocessed %i %(cc1_options) %2\
++ cc1plus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+--- a/src/gcc/params.def
++++ b/src/gcc/params.def
+@@ -664,7 +664,7 @@
+ DEFPARAM (PARAM_SSP_BUFFER_SIZE,
+ "ssp-buffer-size",
+ "The lower bound for a buffer to be considered for stack smashing protection",
+- 8, 1, 0)
++ 4, 1, 0)
+
+ /* When we thread through a block we have to make copies of the
+ statements within the block. Clearly for large blocks the code
+--- a/src/gcc/objc/lang-specs.h
++++ b/src/gcc/objc/lang-specs.h
+@@ -30,9 +30,9 @@
+ %{traditional|traditional-cpp:\
+ %eGNU Objective C no longer supports traditional compilation}\
+ %{save-temps*|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps*:%b.mi} %{!save-temps*:%g.mi} \n\
+- cc1obj -fpreprocessed %{save-temps*:%b.mi} %{!save-temps*:%g.mi} %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}\
++ cc1obj -fpreprocessed %{save-temps*:%b.mi} %{!save-temps*:%g.mi} %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}\
+ %{!save-temps*:%{!no-integrated-cpp:\
+- cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}}\
++ cc1obj %(cpp_unique_options) %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}}\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+ {"@objective-c-header",
+ "%{E|M|MM:cc1obj -E %{traditional|traditional-cpp:-traditional-cpp}\
+@@ -41,18 +41,18 @@
+ %{traditional|traditional-cpp:\
+ %eGNU Objective C no longer supports traditional compilation}\
+ %{save-temps*|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps*:%b.mi} %{!save-temps*:%g.mi} \n\
+- cc1obj -fpreprocessed %b.mi %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++ cc1obj -fpreprocessed %b.mi %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
+ -o %g.s %{!o*:--output-pch=%i.gch}\
+ %W{o*:--output-pch=%*}%V}\
+ %{!save-temps*:%{!no-integrated-cpp:\
+- cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++ cc1obj %(cpp_unique_options) %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
+ -o %g.s %{!o*:--output-pch=%i.gch}\
+ %W{o*:--output-pch=%*}%V}}}}}", 0, 0, 0},
+ {".mi", "@objective-c-cpp-output", 0, 0, 0},
+ {"@objective-c-cpp-output",
+- "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++ "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+ {"@objc-cpp-output",
+ "%nobjc-cpp-output is deprecated; please use objective-c-cpp-output instead\n\
+- %{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++ %{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+--- a/src/gcc/objcp/lang-specs.h
++++ b/src/gcc/objcp/lang-specs.h
+@@ -36,7 +36,7 @@
+ %(cpp_options) %2 -o %{save-temps*:%b.mii} %{!save-temps*:%g.mii} \n}\
+ cc1objplus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.mii} %{!save-temps*:%g.mii}}\
+ %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\
+- %(cc1_options) %2\
++ %(cc1_options) %(ssp_default) %2\
+ -o %g.s %{!o*:--output-pch=%i.gch} %W{o*:--output-pch=%*}%V}}}",
+ CPLUSPLUS_CPP_SPEC, 0, 0},
+ {"@objective-c++",
+@@ -46,16 +46,16 @@
+ %(cpp_options) %2 -o %{save-temps*:%b.mii} %{!save-temps*:%g.mii} \n}\
+ cc1objplus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.mii} %{!save-temps*:%g.mii}}\
+ %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\
+- %(cc1_options) %2\
++ %(cc1_options) %(ssp_default) %2\
+ %{!fsyntax-only:%(invoke_as)}}}}",
+ CPLUSPLUS_CPP_SPEC, 0, 0},
+ {".mii", "@objective-c++-cpp-output", 0, 0, 0},
+ {"@objective-c++-cpp-output",
+ "%{!M:%{!MM:%{!E:\
+- cc1objplus -fpreprocessed %i %(cc1_options) %2\
++ cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+ {"@objc++-cpp-output",
+ "%nobjc++-cpp-output is deprecated; please use objective-c++-cpp-output instead\n\
+ %{!M:%{!MM:%{!E:\
+- cc1objplus -fpreprocessed %i %(cc1_options) %2\
++ cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -8193,6 +8193,10 @@
+ when a function is entered and then checked when the function exits.
+ If a guard check fails, an error message is printed and the program exits.
+
++NOTE: In Ubuntu 6.10 and later versions this option is enabled by default
++for C, C++, ObjC, ObjC++, if none of @option{-fno-stack-protector},
++@option{-nostdlib}, nor @option{-ffreestanding} are found.
++
+ @item -fstack-protector-all
+ @opindex fstack-protector-all
+ Like @option{-fstack-protector} except that all functions are protected.
diff --git a/debian/patches/gcc-default-ssp.diff b/debian/patches/gcc-default-ssp.diff
new file mode 100644
index 0000000..a59caa9
--- /dev/null
+++ b/debian/patches/gcc-default-ssp.diff
@@ -0,0 +1,192 @@
+# DP: Turn on -fstack-protector by default for C, C++, ObjC, ObjC++.
+# DP: Build libgcc using -fno-stack-protector.
+
+---
+ gcc/Makefile.in | 2 ++
+ gcc/cp/lang-specs.h | 6 +++---
+ gcc/doc/invoke.texi | 4 ++++
+ gcc/gcc.c | 18 ++++++++++++++----
+ gcc/objc/lang-specs.h | 10 +++++-----
+ gcc/objcp/lang-specs.h | 8 ++++----
+ 6 files changed, 32 insertions(+), 16 deletions(-)
+
+--- a/src/gcc/gcc.c
++++ b/src/gcc/gcc.c
+@@ -603,6 +603,14 @@
+ #define LINK_GCC_C_SEQUENCE_SPEC "%G %L %G"
+ #endif
+
++#ifndef SSP_DEFAULT_SPEC
++#ifdef TARGET_LIBC_PROVIDES_SSP
++#define SSP_DEFAULT_SPEC "%{!fno-stack-protector:%{!fstack-protector-all:%{!ffreestanding:%{!nostdlib:-fstack-protector}}}}"
++#else
++#define SSP_DEFAULT_SPEC ""
++#endif
++#endif
++
+ #ifndef LINK_SSP_SPEC
+ #ifdef TARGET_LIBC_PROVIDES_SSP
+ #define LINK_SSP_SPEC "%{fstack-protector:}"
+@@ -699,6 +707,7 @@
+ static const char *cc1plus_spec = CC1PLUS_SPEC;
+ static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC;
+ static const char *link_ssp_spec = LINK_SSP_SPEC;
++static const char *ssp_default_spec = SSP_DEFAULT_SPEC;
+ static const char *asm_spec = ASM_SPEC;
+ static const char *asm_final_spec = ASM_FINAL_SPEC;
+ static const char *link_spec = LINK_SPEC;
+@@ -756,7 +765,7 @@
+ static const char *cpp_options =
+ "%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\
+ %{f*} %{g*:%{!g0:%{g*} %{!fno-working-directory:-fworking-directory}}} %{O*}\
+- %{undef} %{save-temps*:-fpch-preprocess}";
++ %{undef} %{save-temps*:-fpch-preprocess} %(ssp_default)";
+
+ /* This contains cpp options which are not passed when the preprocessor
+ output will be used by another program. */
+@@ -931,9 +940,9 @@
+ %{save-temps*|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \
+ %(cpp_options) -o %{save-temps*:%b.i} %{!save-temps*:%g.i} \n\
+ cc1 -fpreprocessed %{save-temps*:%b.i} %{!save-temps*:%g.i} \
+- %(cc1_options)}\
++ %(cc1_options) %(ssp_default)}\
+ %{!save-temps*:%{!traditional-cpp:%{!no-integrated-cpp:\
+- cc1 %(cpp_unique_options) %(cc1_options)}}}\
++ cc1 %(cpp_unique_options) %(cc1_options) %(ssp_default)}}}\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 1},
+ {"-",
+ "%{!E:%e-E or -x required when input is from standard input}\
+@@ -956,7 +965,7 @@
+ %W{o*:--output-pch=%*}}%V}}}}}}", 0, 0, 0},
+ {".i", "@cpp-output", 0, 0, 0},
+ {"@cpp-output",
+- "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
++ "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %(ssp_default) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+ {".s", "@assembler", 0, 0, 0},
+ {"@assembler",
+ "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 0, 0},
+@@ -1179,6 +1188,7 @@
+ INIT_STATIC_SPEC ("cc1plus", &cc1plus_spec),
+ INIT_STATIC_SPEC ("link_gcc_c_sequence", &link_gcc_c_sequence_spec),
+ INIT_STATIC_SPEC ("link_ssp", &link_ssp_spec),
++ INIT_STATIC_SPEC ("ssp_default", &ssp_default_spec),
+ INIT_STATIC_SPEC ("endfile", &endfile_spec),
+ INIT_STATIC_SPEC ("link", &link_spec),
+ INIT_STATIC_SPEC ("lib", &lib_spec),
+--- a/src/gcc/cp/lang-specs.h
++++ b/src/gcc/cp/lang-specs.h
+@@ -47,7 +47,7 @@
+ %(cpp_options) %2 -o %{save-temps*:%b.ii} %{!save-temps*:%g.ii} \n}\
+ cc1plus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}\
+ %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\
+- %(cc1_options) %2\
++ %(cc1_options) %(ssp_default) %2\
+ %{!fsyntax-only:%{!fdump-ada-spec*:-o %g.s %{!o*:--output-pch=%i.gch}\
+ %W{o*:--output-pch=%*}}%V}}}}",
+ CPLUSPLUS_CPP_SPEC, 0, 0},
+@@ -58,11 +58,11 @@
+ %(cpp_options) %2 -o %{save-temps*:%b.ii} %{!save-temps*:%g.ii} \n}\
+ cc1plus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}\
+ %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\
+- %(cc1_options) %2\
++ %(cc1_options) %(ssp_default) %2\
+ %{!fsyntax-only:%(invoke_as)}}}}",
+ CPLUSPLUS_CPP_SPEC, 0, 0},
+ {".ii", "@c++-cpp-output", 0, 0, 0},
+ {"@c++-cpp-output",
+ "%{!M:%{!MM:%{!E:\
+- cc1plus -fpreprocessed %i %(cc1_options) %2\
++ cc1plus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+--- a/src/gcc/params.def
++++ b/src/gcc/params.def
+@@ -664,7 +664,7 @@
+ DEFPARAM (PARAM_SSP_BUFFER_SIZE,
+ "ssp-buffer-size",
+ "The lower bound for a buffer to be considered for stack smashing protection",
+- 8, 1, 0)
++ 4, 1, 0)
+
+ /* When we thread through a block we have to make copies of the
+ statements within the block. Clearly for large blocks the code
+--- a/src/gcc/objc/lang-specs.h
++++ b/src/gcc/objc/lang-specs.h
+@@ -30,9 +30,9 @@
+ %{traditional|traditional-cpp:\
+ %eGNU Objective C no longer supports traditional compilation}\
+ %{save-temps*|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps*:%b.mi} %{!save-temps*:%g.mi} \n\
+- cc1obj -fpreprocessed %{save-temps*:%b.mi} %{!save-temps*:%g.mi} %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}\
++ cc1obj -fpreprocessed %{save-temps*:%b.mi} %{!save-temps*:%g.mi} %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}\
+ %{!save-temps*:%{!no-integrated-cpp:\
+- cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}}\
++ cc1obj %(cpp_unique_options) %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}}\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+ {"@objective-c-header",
+ "%{E|M|MM:cc1obj -E %{traditional|traditional-cpp:-traditional-cpp}\
+@@ -41,18 +41,18 @@
+ %{traditional|traditional-cpp:\
+ %eGNU Objective C no longer supports traditional compilation}\
+ %{save-temps*|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps*:%b.mi} %{!save-temps*:%g.mi} \n\
+- cc1obj -fpreprocessed %b.mi %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++ cc1obj -fpreprocessed %b.mi %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
+ -o %g.s %{!o*:--output-pch=%i.gch}\
+ %W{o*:--output-pch=%*}%V}\
+ %{!save-temps*:%{!no-integrated-cpp:\
+- cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++ cc1obj %(cpp_unique_options) %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
+ -o %g.s %{!o*:--output-pch=%i.gch}\
+ %W{o*:--output-pch=%*}%V}}}}}", 0, 0, 0},
+ {".mi", "@objective-c-cpp-output", 0, 0, 0},
+ {"@objective-c-cpp-output",
+- "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++ "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+ {"@objc-cpp-output",
+ "%nobjc-cpp-output is deprecated; please use objective-c-cpp-output instead\n\
+- %{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++ %{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+--- a/src/gcc/objcp/lang-specs.h
++++ b/src/gcc/objcp/lang-specs.h
+@@ -36,7 +36,7 @@
+ %(cpp_options) %2 -o %{save-temps*:%b.mii} %{!save-temps*:%g.mii} \n}\
+ cc1objplus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.mii} %{!save-temps*:%g.mii}}\
+ %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\
+- %(cc1_options) %2\
++ %(cc1_options) %(ssp_default) %2\
+ -o %g.s %{!o*:--output-pch=%i.gch} %W{o*:--output-pch=%*}%V}}}",
+ CPLUSPLUS_CPP_SPEC, 0, 0},
+ {"@objective-c++",
+@@ -46,16 +46,16 @@
+ %(cpp_options) %2 -o %{save-temps*:%b.mii} %{!save-temps*:%g.mii} \n}\
+ cc1objplus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.mii} %{!save-temps*:%g.mii}}\
+ %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\
+- %(cc1_options) %2\
++ %(cc1_options) %(ssp_default) %2\
+ %{!fsyntax-only:%(invoke_as)}}}}",
+ CPLUSPLUS_CPP_SPEC, 0, 0},
+ {".mii", "@objective-c++-cpp-output", 0, 0, 0},
+ {"@objective-c++-cpp-output",
+ "%{!M:%{!MM:%{!E:\
+- cc1objplus -fpreprocessed %i %(cc1_options) %2\
++ cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+ {"@objc++-cpp-output",
+ "%nobjc++-cpp-output is deprecated; please use objective-c++-cpp-output instead\n\
+ %{!M:%{!MM:%{!E:\
+- cc1objplus -fpreprocessed %i %(cc1_options) %2\
++ cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -8193,6 +8193,10 @@
+ when a function is entered and then checked when the function exits.
+ If a guard check fails, an error message is printed and the program exits.
+
++NOTE: In Ubuntu 6.10 and later versions this option is enabled by default
++for C, C++, ObjC, ObjC++, if none of @option{-fno-stack-protector},
++@option{-nostdlib}, nor @option{-ffreestanding} are found.
++
+ @item -fstack-protector-all
+ @opindex fstack-protector-all
+ Like @option{-fstack-protector} except that all functions are protected.
diff --git a/debian/patches/gcc-driver-extra-langs.diff b/debian/patches/gcc-driver-extra-langs.diff
new file mode 100644
index 0000000..52de0e0
--- /dev/null
+++ b/debian/patches/gcc-driver-extra-langs.diff
@@ -0,0 +1,20 @@
+# DP: Add options and specs for languages that are not built from a source
+# DP: (but built from separate sources).
+
+---
+ gcc/Makefile.in | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -503,8 +503,8 @@
+ compile.exp dg.exp \
+ dg-torture.exp,builtins.exp \
+ struct-layout-1.exp,unsorted.exp,stackalign.exp,i386.exp
+-lang_opt_files=@lang_opt_files@ $(srcdir)/c-family/c.opt $(srcdir)/common.opt
+-lang_specs_files=@lang_specs_files@
++lang_opt_files=$(sort @lang_opt_files@ $(srcdir)/c-family/c.opt $(srcdir)/common.opt $(foreach lang,$(subst ada,ada/gcc-interface,$(debian_extra_langs)),$(srcdir)/$(lang)/lang.opt))
++lang_specs_files=$(sort @lang_specs_files@ $(foreach lang,$(subst ada,ada/gcc-interface,$(debian_extra_langs)),$(srcdir)/$(lang)/lang-specs.h))
+ lang_tree_files=@lang_tree_files@
+ target_cpu_default=@target_cpu_default@
+ GCC_THREAD_FILE=@thread_file@
diff --git a/debian/patches/gcc-gfdl-build.diff b/debian/patches/gcc-gfdl-build.diff
new file mode 100644
index 0000000..92619b2
--- /dev/null
+++ b/debian/patches/gcc-gfdl-build.diff
@@ -0,0 +1,34 @@
+# DP: Build a dummy s-tm-texi without access to the texinfo sources
+
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -3681,27 +3681,9 @@
+ # \r is not portable to Solaris tr, therefore we have a special
+ # case for ASCII. We use \r for other encodings like EBCDIC.
+ s-tm-texi: build/genhooks$(build_exeext) $(srcdir)/doc/tm.texi.in
+- $(RUN_GEN) build/genhooks$(build_exeext) \
+- $(srcdir)/doc/tm.texi.in > tmp-tm.texi
+- case `echo X|tr X '\101'` in \
+- A) tr -d '\015' < tmp-tm.texi > tmp2-tm.texi ;; \
+- *) tr -d '\r' < tmp-tm.texi > tmp2-tm.texi ;; \
+- esac
+- mv tmp2-tm.texi tmp-tm.texi
++ cat $(srcdir)/doc/tm.texi.in > tmp-tm.texi
+ $(SHELL) $(srcdir)/../move-if-change tmp-tm.texi tm.texi
+- @if cmp -s $(srcdir)/doc/tm.texi tm.texi; then \
+- $(STAMP) $@; \
+- elif test $(srcdir)/doc/tm.texi -nt $(srcdir)/doc/tm.texi.in \
+- && test $(srcdir)/doc/tm.texi -nt $(srcdir)/target.def; then \
+- echo >&2 ; \
+- echo You should edit $(srcdir)/doc/tm.texi.in rather than $(srcdir)/doc/tm.texi . >&2 ; \
+- false; \
+- else \
+- echo >&2 ; \
+- echo Verify that you have permission to grant a GFDL license for all >&2 ; \
+- echo new text in tm.texi, then copy it to $(srcdir)/doc/tm.texi. >&2 ; \
+- false; \
+- fi
++ $(STAMP) $@
+
+ GTFILES = $(CPP_ID_DATA_H) $(srcdir)/input.h $(srcdir)/coretypes.h \
+ $(srcdir)/vecprim.h $(srcdir)/vecir.h \
diff --git a/debian/patches/gcc-hash-style-both.diff b/debian/patches/gcc-hash-style-both.diff
new file mode 100644
index 0000000..9f3515e
--- /dev/null
+++ b/debian/patches/gcc-hash-style-both.diff
@@ -0,0 +1,134 @@
+# DP: Link using --hash-style=both (alpha, amd64, armel, armhf, ia64, i386, powerpc, ppc64, s390, sparc)
+
+2006-07-11 Jakub Jelinek <jakub@redhat.com>
+
+ * config/i386/linux.h (LINK_SPEC): Add --hash-style=both.
+ * config/i386/linux64.h (LINK_SPEC): Likewise.
+ * config/rs6000/sysv4.h (LINK_OS_LINUX_SPEC): Likewise.
+ * config/rs6000/linux64.h (LINK_OS_LINUX_SPEC32,
+ LINK_OS_LINUX_SPEC64): Likewise.
+ * config/s390/linux.h (LINK_SPEC): Likewise.
+ * config/ia64/linux.h (LINK_SPEC): Likewise.
+ * config/sparc/linux.h (LINK_SPEC): Likewise.
+ * config/sparc/linux64.h (LINK_SPEC, LINK_ARCH32_SPEC,
+ LINK_ARCH64_SPEC): Likewise.
+ * config/alpha/linux-elf.h (LINK_SPEC): Likewise.
+
+2009-12-21 Matthias Klose <doko@ubuntu.com>
+
+ * config/arm/linux-elf.h (LINK_SPEC): Add --hash-style=both.
+
+---
+ gcc/config/alpha/linux-elf.h | 2 +-
+ gcc/config/i386/linux.h | 2 +-
+ gcc/config/i386/linux64.h | 2 +-
+ gcc/config/ia64/linux.h | 2 +-
+ gcc/config/rs6000/linux64.h | 4 ++--
+ gcc/config/rs6000/sysv4.h | 2 +-
+ gcc/config/s390/linux.h | 2 +-
+ gcc/config/sparc/linux.h | 2 +-
+ 8 files changed, 9 insertions(+), 9 deletions(-)
+
+--- a/src/gcc/config/alpha/linux-elf.h
++++ b/src/gcc/config/alpha/linux-elf.h
+@@ -39,7 +39,7 @@ along with GCC; see the file COPYING3. If not see
+
+ #define ELF_DYNAMIC_LINKER LINUX_DYNAMIC_LINKER
+
+-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \
++#define LINK_SPEC "-m elf64alpha --hash-style=both %{G*} %{relax:-relax} \
+ %{O*:-O3} %{!O*:-O1} \
+ %{shared:-shared} \
+ %{!shared: \
+--- a/src/gcc/config/i386/linux.h
++++ b/src/gcc/config/i386/linux.h
+@@ -113,7 +113,7 @@ along with GCC; see the file COPYING3. If not see
+ { "dynamic_linker", LINUX_DYNAMIC_LINKER }
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
++#define LINK_SPEC "-m %(link_emulation) --hash-style=both %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+--- a/src/gcc/config/i386/linux64.h
++++ b/src/gcc/config/i386/linux64.h
+@@ -70,7 +70,7 @@ along with GCC; see the file COPYING3. If not see
+ #endif
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} \
++#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} --hash-style=both \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+--- a/src/gcc/config/ia64/linux.h
++++ b/src/gcc/config/ia64/linux.h
+@@ -40,7 +40,7 @@ do { \
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "\
++#define LINK_SPEC " --hash-style=both \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+--- a/src/gcc/config/rs6000/linux64.h
++++ b/src/gcc/config/rs6000/linux64.h
+@@ -386,11 +386,11 @@
+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
+
+
+-#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
+ %{rdynamic:-export-dynamic} \
+ -dynamic-linker " LINUX_DYNAMIC_LINKER32 "}}"
+
+-#define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=both %{!shared: %{!static: \
+ %{rdynamic:-export-dynamic} \
+ -dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}"
+
+--- a/src/gcc/config/rs6000/sysv4.h
++++ b/src/gcc/config/rs6000/sysv4.h
+@@ -906,7 +906,7 @@ SVR4_ASM_SPEC \
+ #define LINUX_DYNAMIC_LINKER \
+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
+
+-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}"
+
+--- a/src/gcc/config/s390/linux.h
++++ b/src/gcc/config/s390/linux.h
+@@ -77,7 +77,7 @@ along with GCC; see the file COPYING3. If not see
+
+ #undef LINK_SPEC
+ #define LINK_SPEC \
+- "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
++ "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=both \
+ %{shared:-shared} \
+ %{!shared: \
+ %{static:-static} \
+--- a/src/gcc/config/sparc/linux.h
++++ b/src/gcc/config/sparc/linux.h
+@@ -86,7 +86,7 @@ along with GCC; see the file COPYING3. If not see
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
++#define LINK_SPEC "-m elf32_sparc --hash-style=both -Y P,/usr/lib %{shared:-shared} \
+ %{!mno-relax:%{!r:-relax}} \
+ %{!shared: \
+ %{!ibcs: \
+--- a/src/gcc/config/arm/linux-elf.h~ 2009-02-20 16:20:38.000000000 +0100
++++ b/src/gcc/config/arm/linux-elf.h 2009-12-21 13:19:36.000000000 +0100
+@@ -72,6 +72,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "} \
+ -X \
++ --hash-style=both \
+ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+
diff --git a/debian/patches/gcc-hash-style-gnu.diff b/debian/patches/gcc-hash-style-gnu.diff
new file mode 100644
index 0000000..1220992
--- /dev/null
+++ b/debian/patches/gcc-hash-style-gnu.diff
@@ -0,0 +1,134 @@
+# DP: Link using --hash-style=gnu (alpha, amd64, armel, ia64, i386, powerpc, ppc64, s390, sparc)
+
+2006-07-11 Jakub Jelinek <jakub@redhat.com>
+
+ * config/i386/linux.h (LINK_SPEC): Add --hash-style=gnu.
+ * config/i386/linux64.h (LINK_SPEC): Likewise.
+ * config/rs6000/sysv4.h (LINK_OS_LINUX_SPEC): Likewise.
+ * config/rs6000/linux64.h (LINK_OS_LINUX_SPEC32,
+ LINK_OS_LINUX_SPEC64): Likewise.
+ * config/s390/linux.h (LINK_SPEC): Likewise.
+ * config/ia64/linux.h (LINK_SPEC): Likewise.
+ * config/sparc/linux.h (LINK_SPEC): Likewise.
+ * config/sparc/linux64.h (LINK_SPEC, LINK_ARCH32_SPEC,
+ LINK_ARCH64_SPEC): Likewise.
+ * config/alpha/linux-elf.h (LINK_SPEC): Likewise.
+
+2009-12-21 Matthias Klose <doko@ubuntu.com>
+
+ * config/arm/linux-elf.h (LINK_SPEC): Add --hash-style=gnu.
+
+---
+ gcc/config/alpha/linux-elf.h | 2 +-
+ gcc/config/i386/linux.h | 2 +-
+ gcc/config/i386/linux64.h | 2 +-
+ gcc/config/ia64/linux.h | 2 +-
+ gcc/config/rs6000/linux64.h | 4 ++--
+ gcc/config/rs6000/sysv4.h | 2 +-
+ gcc/config/s390/linux.h | 2 +-
+ gcc/config/sparc/linux.h | 2 +-
+ 8 files changed, 9 insertions(+), 9 deletions(-)
+
+--- a/src/gcc/config/alpha/linux-elf.h
++++ b/src/gcc/config/alpha/linux-elf.h
+@@ -41,7 +41,7 @@
+
+ #define ELF_DYNAMIC_LINKER LINUX_DYNAMIC_LINKER
+
+-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \
++#define LINK_SPEC "-m elf64alpha --hash-style=gnu %{G*} %{relax:-relax} \
+ %{O*:-O3} %{!O*:-O1} \
+ %{shared:-shared} \
+ %{!shared: \
+--- a/src/gcc/config/i386/linux.h
++++ b/src/gcc/config/i386/linux.h
+@@ -104,7 +104,7 @@
+ { "dynamic_linker", LINUX_DYNAMIC_LINKER }
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
++#define LINK_SPEC "-m %(link_emulation) --hash-style=gnu %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+--- a/src/gcc/config/i386/linux64.h
++++ b/src/gcc/config/i386/linux64.h
+@@ -75,7 +75,7 @@
+ %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}"
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} \
++#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} --hash-style=gnu \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+--- a/src/gcc/config/ia64/linux.h
++++ b/src/gcc/config/ia64/linux.h
+@@ -64,7 +64,7 @@
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "\
++#define LINK_SPEC " --hash-style=gnu \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+--- a/src/gcc/config/rs6000/linux64.h
++++ b/src/gcc/config/rs6000/linux64.h
+@@ -389,11 +389,11 @@
+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
+
+
+-#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=gnu %{!shared: %{!static: \
+ %{rdynamic:-export-dynamic} \
+ -dynamic-linker " LINUX_DYNAMIC_LINKER32 "}}"
+
+-#define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=gnu %{!shared: %{!static: \
+ %{rdynamic:-export-dynamic} \
+ -dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}"
+
+--- a/src/gcc/config/rs6000/sysv4.h
++++ b/src/gcc/config/rs6000/sysv4.h
+@@ -830,7 +830,7 @@
+ #define LINUX_DYNAMIC_LINKER \
+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
+
+-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=gnu %{!shared: %{!static: \
+ %{rdynamic:-export-dynamic} \
+ -dynamic-linker " LINUX_DYNAMIC_LINKER "}}"
+
+--- a/src/gcc/config/s390/linux.h
++++ b/src/gcc/config/s390/linux.h
+@@ -77,7 +77,7 @@
+
+ #undef LINK_SPEC
+ #define LINK_SPEC \
+- "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
++ "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=gnu \
+ %{shared:-shared} \
+ %{!shared: \
+ %{static:-static} \
+--- a/src/gcc/config/sparc/linux.h
++++ b/src/gcc/config/sparc/linux.h
+@@ -74,7 +74,7 @@
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
++#define LINK_SPEC "-m elf32_sparc --hash-style=gnu -Y P,/usr/lib %{shared:-shared} \
+ %{!mno-relax:%{!r:-relax}} \
+ %{!shared: \
+ %{!static: \
+--- a/src/gcc/config/arm/linux-elf.h
++++ b/src/gcc/config/arm/linux-elf.h
+@@ -71,6 +71,7 @@
+ %{rdynamic:-export-dynamic} \
+ -dynamic-linker " LINUX_DYNAMIC_LINKER " \
+ -X \
++ --hash-style=gnu \
+ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+
diff --git a/debian/patches/gcc-ice-apport.diff b/debian/patches/gcc-ice-apport.diff
new file mode 100644
index 0000000..fb77284
--- /dev/null
+++ b/debian/patches/gcc-ice-apport.diff
@@ -0,0 +1,22 @@
+# DP: Report an ICE to apport (if apport is available
+# DP: and the environment variable GCC_NOAPPORT is not set)
+
+--- a/src/gcc/gcc.c
++++ b/src/gcc/gcc.c
+@@ -6102,6 +6102,16 @@
+ fnotice (stderr, "Preprocessed source stored into %s file,"
+ " please attach this to your bugreport.\n",
+ temp_filenames[attempt * 2]);
++ if (!getenv ("GCC_NOAPPORT")
++ && !access ("/usr/share/apport/gcc_ice_hook", R_OK | X_OK))
++ {
++ char *cmd = XNEWVEC (char, 50 + strlen (temp_filenames[attempt * 2])
++ + strlen (new_argv[0]));
++ sprintf (cmd, "/usr/share/apport/gcc_ice_hook %s %s",
++ new_argv[0], temp_filenames[attempt * 2]);
++ system (cmd);
++ free (cmd);
++ }
+ /* Make sure it is not deleted. */
+ free (temp_filenames[attempt * 2]);
+ temp_filenames[attempt * 2] = NULL;
diff --git a/debian/patches/gcc-ice-hack.diff b/debian/patches/gcc-ice-hack.diff
new file mode 100644
index 0000000..eef9e7f
--- /dev/null
+++ b/debian/patches/gcc-ice-hack.diff
@@ -0,0 +1,311 @@
+# DP: Retry the build on an ice, save the calling options and preprocessed
+# DP: source when the ice is reproducible.
+
+2004-01-23 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.c (execute): Don't free first string early, but at the end
+ of the function. Call retry_ice if compiler exited with
+ ICE_EXIT_CODE.
+ (retry_ice): New function.
+ * diagnostic.c (diagnostic_count_diagnostic,
+ diagnostic_action_after_output, error_recursion): Exit with
+ ICE_EXIT_CODE instead of FATAL_EXIT_CODE.
+
+#--- a/src/gcc/Makefile.in
+#+++ b/src/gcc/Makefile.in
+#@@ -181,6 +181,8 @@ SYSCALLS.c.X-warn = -Wno-strict-prototypes -Wno-error
+# dfp.o-warn = -Wno-error
+# # mips-tfile.c contains -Wcast-qual warnings.
+# mips-tfile.o-warn = -Wno-error
+#+# gcc-ice-hack
+#+gcc.o-warn = -Wno-error
+#
+# # All warnings have to be shut off in stage1 if the compiler used then
+# # isn't gcc; configure determines that. WARN_CFLAGS will be either
+--- a/src/gcc/gcc.c
++++ b/src/gcc/gcc.c
+@@ -250,6 +250,9 @@
+ #if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
+ static const char *convert_filename (const char *, int, int);
+ #endif
++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
++static void retry_ice (const char *prog, const char **argv);
++#endif
+
+ static const char *getenv_spec_function (int, const char **);
+ static const char *if_exists_spec_function (int, const char **);
+@@ -2638,7 +2643,7 @@
+ }
+ }
+
+- if (string != commands[i].prog)
++ if (i && string != commands[i].prog)
+ free (CONST_CAST (char *, string));
+ }
+
+@@ -2691,6 +2696,16 @@
+ else if (WIFEXITED (status)
+ && WEXITSTATUS (status) >= MIN_FATAL_STATUS)
+ {
++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
++ /* For ICEs in cc1, cc1obj, cc1plus see if it is
++ reproducible or not. */
++ const char *p;
++ if (WEXITSTATUS (status) == ICE_EXIT_CODE
++ && i == 0
++ && (p = strrchr (commands[0].argv[0], DIR_SEPARATOR))
++ && ! strncmp (p + 1, "cc1", 3))
++ retry_ice (commands[0].prog, commands[0].argv);
++#endif
+ if (WEXITSTATUS (status) > greatest_status)
+ greatest_status = WEXITSTATUS (status);
+ ret_code = -1;
+@@ -2748,6 +2763,9 @@
+ }
+ }
+
++ if (commands[0].argv[0] != commands[0].prog)
++ free (CONST_CAST (char *, commands[0].argv[0]));
++
+ return ret_code;
+ }
+ }
+@@ -5874,6 +5892,227 @@
+ switches[switchnum].validated = 1;
+ }
+
++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
++#define RETRY_ICE_ATTEMPTS 2
++
++static void
++retry_ice (const char *prog, const char **argv)
++{
++ int nargs, out_arg = -1, quiet = 0, attempt;
++ int pid, retries, sleep_interval;
++ const char **new_argv;
++ char *temp_filenames[RETRY_ICE_ATTEMPTS * 2 + 2];
++
++ if (gcc_input_filename == NULL || ! strcmp (gcc_input_filename, "-"))
++ return;
++
++ for (nargs = 0; argv[nargs] != NULL; ++nargs)
++ /* Only retry compiler ICEs, not preprocessor ones. */
++ if (! strcmp (argv[nargs], "-E"))
++ return;
++ else if (argv[nargs][0] == '-' && argv[nargs][1] == 'o')
++ {
++ if (out_arg == -1)
++ out_arg = nargs;
++ else
++ return;
++ }
++ /* If the compiler is going to output any time information,
++ it might varry between invocations. */
++ else if (! strcmp (argv[nargs], "-quiet"))
++ quiet = 1;
++ else if (! strcmp (argv[nargs], "-ftime-report"))
++ return;
++
++ if (out_arg == -1 || !quiet)
++ return;
++
++ memset (temp_filenames, '\0', sizeof (temp_filenames));
++ new_argv = XALLOCAVEC (const char *, nargs + 3);
++ memcpy (new_argv, argv, (nargs + 1) * sizeof (const char *));
++ new_argv[nargs++] = "-frandom-seed=0";
++ new_argv[nargs] = NULL;
++ if (new_argv[out_arg][2] == '\0')
++ new_argv[out_arg + 1] = "-";
++ else
++ new_argv[out_arg] = "-o-";
++
++ for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS + 1; ++attempt)
++ {
++ int fd = -1;
++ int status;
++
++ temp_filenames[attempt * 2] = make_temp_file (".out");
++ temp_filenames[attempt * 2 + 1] = make_temp_file (".err");
++
++ if (attempt == RETRY_ICE_ATTEMPTS)
++ {
++ int i;
++ int fd1, fd2;
++ struct stat st1, st2;
++ size_t n, len;
++ char *buf;
++
++ buf = XNEWVEC (char, 8192);
++
++ for (i = 0; i < 2; ++i)
++ {
++ fd1 = open (temp_filenames[i], O_RDONLY);
++ fd2 = open (temp_filenames[2 + i], O_RDONLY);
++
++ if (fd1 < 0 || fd2 < 0)
++ {
++ i = -1;
++ close (fd1);
++ close (fd2);
++ break;
++ }
++
++ if (fstat (fd1, &st1) < 0 || fstat (fd2, &st2) < 0)
++ {
++ i = -1;
++ close (fd1);
++ close (fd2);
++ break;
++ }
++
++ if (st1.st_size != st2.st_size)
++ {
++ close (fd1);
++ close (fd2);
++ break;
++ }
++
++ len = 0;
++ for (n = st1.st_size; n; n -= len)
++ {
++ len = n;
++ if (len > 4096)
++ len = 4096;
++
++ if (read (fd1, buf, len) != (int) len
++ || read (fd2, buf + 4096, len) != (int) len)
++ {
++ i = -1;
++ break;
++ }
++
++ if (memcmp (buf, buf + 4096, len) != 0)
++ break;
++ }
++
++ close (fd1);
++ close (fd2);
++
++ if (n)
++ break;
++ }
++
++ free (buf);
++ if (i == -1)
++ break;
++
++ if (i != 2)
++ {
++ fnotice (stderr, "The bug is not reproducible, so it is"
++ " likely a hardware or OS problem.\n");
++ break;
++ }
++
++ fd = open (temp_filenames[attempt * 2], O_RDWR);
++ if (fd < 0)
++ break;
++ write (fd, "//", 2);
++ for (i = 0; i < nargs; i++)
++ {
++ write (fd, " ", 1);
++ write (fd, new_argv[i], strlen (new_argv[i]));
++ }
++ write (fd, "\n", 1);
++ new_argv[nargs] = "-E";
++ new_argv[nargs + 1] = NULL;
++ }
++
++ /* Fork a subprocess; wait and retry if it fails. */
++ sleep_interval = 1;
++ pid = -1;
++ for (retries = 0; retries < 4; retries++)
++ {
++ pid = fork ();
++ if (pid >= 0)
++ break;
++ sleep (sleep_interval);
++ sleep_interval *= 2;
++ }
++
++ if (pid < 0)
++ break;
++ else if (pid == 0)
++ {
++ if (attempt != RETRY_ICE_ATTEMPTS)
++ fd = open (temp_filenames[attempt * 2], O_RDWR);
++ if (fd < 0)
++ exit (-1);
++ if (fd != 1)
++ {
++ close (1);
++ dup (fd);
++ close (fd);
++ }
++
++ fd = open (temp_filenames[attempt * 2 + 1], O_RDWR);
++ if (fd < 0)
++ exit (-1);
++ if (fd != 2)
++ {
++ close (2);
++ dup (fd);
++ close (fd);
++ }
++
++ if (prog == new_argv[0])
++ execvp (prog, CONST_CAST2 (char *const *, const char **, new_argv));
++ else
++ execv (new_argv[0], CONST_CAST2 (char *const *, const char **, new_argv));
++ exit (-1);
++ }
++
++ if (waitpid (pid, &status, 0) < 0)
++ break;
++
++ if (attempt < RETRY_ICE_ATTEMPTS
++ && (! WIFEXITED (status) || WEXITSTATUS (status) != ICE_EXIT_CODE))
++ {
++ fnotice (stderr, "The bug is not reproducible, so it is"
++ " likely a hardware or OS problem.\n");
++ break;
++ }
++ else if (attempt == RETRY_ICE_ATTEMPTS)
++ {
++ close (fd);
++ if (WIFEXITED (status)
++ && WEXITSTATUS (status) == SUCCESS_EXIT_CODE)
++ {
++ fnotice (stderr, "Preprocessed source stored into %s file,"
++ " please attach this to your bugreport.\n",
++ temp_filenames[attempt * 2]);
++ /* Make sure it is not deleted. */
++ free (temp_filenames[attempt * 2]);
++ temp_filenames[attempt * 2] = NULL;
++ break;
++ }
++ }
++ }
++
++ for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS * 2 + 2; attempt++)
++ if (temp_filenames[attempt])
++ {
++ unlink (temp_filenames[attempt]);
++ free (temp_filenames[attempt]);
++ }
++}
++#endif
++
+ /* Search for a file named NAME trying various prefixes including the
+ user's -B prefix and some standard ones.
+ Return the absolute file name found. If nothing is found, return NAME. */
+--- a/src/gcc/diagnostic.c
++++ b/src/gcc/diagnostic.c
+@@ -247,7 +247,7 @@
+ real_abort ();
+ diagnostic_finish (context);
+ fnotice (stderr, "compilation terminated.\n");
+- exit (FATAL_EXIT_CODE);
++ exit (ICE_EXIT_CODE);
+
+ default:
+ gcc_unreachable ();
diff --git a/debian/patches/gcc-linaro-doc.diff b/debian/patches/gcc-linaro-doc.diff
new file mode 100644
index 0000000..a92e331
--- /dev/null
+++ b/debian/patches/gcc-linaro-doc.diff
@@ -0,0 +1,253 @@
+# DP: Changes for the Linaro 4.6-2011.12 release (documentation).
+
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -8732,6 +8732,10 @@
+ The maximum number of best instructions in the ready list that are considered
+ for renaming in the selective scheduler. The default value is 2.
+
++@item sms-min-sc
++The minimum value of stage count that swing modulo scheduler will
++generate. The default value is 2.
++
+ @item max-last-value-rtl
+ The maximum size measured as number of RTLs that can be recorded in an expression
+ in combiner for a pseudo register as last known value of that register. The default
+@@ -8911,6 +8915,11 @@
+ The maximum number of namespaces to consult for suggestions when C++
+ name lookup fails for an identifier. The default is 1000.
+
++@item max-stores-to-sink
++The maximum number of conditional stores paires that can be sunk. Set to 0
++if either vectorization (@option{-ftree-vectorize}) or if-conversion
++(@option{-ftree-loop-if-convert}) is disabled. The default is 2.
++
+ @end table
+ @end table
+
+@@ -10201,11 +10210,22 @@
+ @samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
+ @samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
+ @samp{cortex-a5}, @samp{cortex-a8}, @samp{cortex-a9}, @samp{cortex-a15},
+-@samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-m4}, @samp{cortex-m3},
++@samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-r5},
++@samp{cortex-m4}, @samp{cortex-m3},
+ @samp{cortex-m1},
+ @samp{cortex-m0},
+ @samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
+
++
++@option{-mcpu=generic-@var{arch}} is also permissible, and is
++equivalent to @option{-march=@var{arch} -mtune=generic-@var{arch}}.
++See @option{-mtune} for more information.
++
++@option{-mcpu=native} causes the compiler to auto-detect the CPU
++of the build computer. At present, this feature is only supported on
++Linux, and not all architectures are recognised. If the auto-detect is
++unsuccessful the option has no effect.
++
+ @item -mtune=@var{name}
+ @opindex mtune
+ This option is very similar to the @option{-mcpu=} option, except that
+@@ -10217,6 +10237,18 @@
+ For some ARM implementations better performance can be obtained by using
+ this option.
+
++@option{-mtune=generic-@var{arch}} specifies that GCC should tune the
++performance for a blend of processors within architecture @var{arch}.
++The aim is to generate code that run well on the current most popular
++processors, balancing between optimizations that benefit some CPUs in the
++range, and avoiding performance pitfalls of other CPUs. The effects of
++this option may change in future GCC versions as CPU models come and go.
++
++@option{-mtune=native} causes the compiler to auto-detect the CPU
++of the build computer. At present, this feature is only supported on
++Linux, and not all architectures are recognised. If the auto-detect is
++unsuccessful the option has no effect.
++
+ @item -march=@var{name}
+ @opindex march
+ This specifies the name of the target ARM architecture. GCC uses this
+@@ -10230,6 +10262,11 @@
+ @samp{armv7}, @samp{armv7-a}, @samp{armv7-r}, @samp{armv7-m},
+ @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
+
++@option{-march=native} causes the compiler to auto-detect the architecture
++of the build computer. At present, this feature is only supported on
++Linux, and not all architectures are recognised. If the auto-detect is
++unsuccessful the option has no effect.
++
+ @item -mfpu=@var{name}
+ @itemx -mfpe=@var{number}
+ @itemx -mfp=@var{number}
+--- a/src/gcc/doc/md.texi
++++ b/src/gcc/doc/md.texi
+@@ -3935,6 +3935,48 @@
+ consecutive memory locations, operand 1 is the first register, and
+ operand 2 is a constant: the number of consecutive registers.
+
++@cindex @code{vec_load_lanes@var{m}@var{n}} instruction pattern
++@item @samp{vec_load_lanes@var{m}@var{n}}
++Perform an interleaved load of several vectors from memory operand 1
++into register operand 0. Both operands have mode @var{m}. The register
++operand is viewed as holding consecutive vectors of mode @var{n},
++while the memory operand is a flat array that contains the same number
++of elements. The operation is equivalent to:
++
++@smallexample
++int c = GET_MODE_SIZE (@var{m}) / GET_MODE_SIZE (@var{n});
++for (j = 0; j < GET_MODE_NUNITS (@var{n}); j++)
++ for (i = 0; i < c; i++)
++ operand0[i][j] = operand1[j * c + i];
++@end smallexample
++
++For example, @samp{vec_load_lanestiv4hi} loads 8 16-bit values
++from memory into a register of mode @samp{TI}@. The register
++contains two consecutive vectors of mode @samp{V4HI}@.
++
++This pattern can only be used if:
++@smallexample
++TARGET_ARRAY_MODE_SUPPORTED_P (@var{n}, @var{c})
++@end smallexample
++is true. GCC assumes that, if a target supports this kind of
++instruction for some mode @var{n}, it also supports unaligned
++loads for vectors of mode @var{n}.
++
++@cindex @code{vec_store_lanes@var{m}@var{n}} instruction pattern
++@item @samp{vec_store_lanes@var{m}@var{n}}
++Equivalent to @samp{vec_load_lanes@var{m}@var{n}}, with the memory
++and register operands reversed. That is, the instruction is
++equivalent to:
++
++@smallexample
++int c = GET_MODE_SIZE (@var{m}) / GET_MODE_SIZE (@var{n});
++for (j = 0; j < GET_MODE_NUNITS (@var{n}); j++)
++ for (i = 0; i < c; i++)
++ operand0[j * c + i] = operand1[i][j];
++@end smallexample
++
++for a memory operand 0 and register operand 1.
++
+ @cindex @code{vec_set@var{m}} instruction pattern
+ @item @samp{vec_set@var{m}}
+ Set given field in the vector value. Operand 0 is the vector to modify,
+@@ -4188,6 +4230,17 @@
+ elements of the two vectors, and put the N/2 products of size 2*S in the
+ output vector (operand 0).
+
++@cindex @code{vec_widen_ushiftl_hi_@var{m}} instruction pattern
++@cindex @code{vec_widen_ushiftl_lo_@var{m}} instruction pattern
++@cindex @code{vec_widen_sshiftl_hi_@var{m}} instruction pattern
++@cindex @code{vec_widen_sshiftl_lo_@var{m}} instruction pattern
++@item @samp{vec_widen_ushiftl_hi_@var{m}}, @samp{vec_widen_ushiftl_lo_@var{m}}
++@itemx @samp{vec_widen_sshiftl_hi_@var{m}}, @samp{vec_widen_sshiftl_lo_@var{m}}
++Signed/Unsigned widening shift left. The first input (operand 1) is a vector
++with N signed/unsigned elements of size S@. Operand 2 is a constant. Shift
++the high/low elements of operand 1, and put the N/2 results of size 2*S in the
++output vector (operand 0).
++
+ @cindex @code{mulhisi3} instruction pattern
+ @item @samp{mulhisi3}
+ Multiply operands 1 and 2, which have mode @code{HImode}, and store
+@@ -5891,6 +5944,23 @@
+ will be written using @code{zero_extract} rather than the equivalent
+ @code{and} or @code{sign_extract} operations.
+
++@cindex @code{mult}, canonicalization of
++@item
++@code{(sign_extend:@var{m1} (mult:@var{m2} (sign_extend:@var{m2} @var{x})
++(sign_extend:@var{m2} @var{y})))} is converted to @code{(mult:@var{m1}
++(sign_extend:@var{m1} @var{x}) (sign_extend:@var{m1} @var{y}))}, and likewise
++for @code{zero_extend}.
++
++@item
++@code{(sign_extend:@var{m1} (mult:@var{m2} (ashiftrt:@var{m2}
++@var{x} @var{s}) (sign_extend:@var{m2} @var{y})))} is converted
++to @code{(mult:@var{m1} (sign_extend:@var{m1} (ashiftrt:@var{m2}
++@var{x} @var{s})) (sign_extend:@var{m1} @var{y}))}, and likewise for
++patterns using @code{zero_extend} and @code{lshiftrt}. If the second
++operand of @code{mult} is also a shift, then that is extended also.
++This transformation is only applied when it can be proven that the
++original operation had sufficient precision to prevent overflow.
++
+ @end itemize
+
+ Further canonicalization rules are defined in the function
+--- a/src/gcc/doc/tm.texi
++++ b/src/gcc/doc/tm.texi
+@@ -2533,7 +2533,7 @@
+ register, so @code{TARGET_PREFERRED_RELOAD_CLASS} returns @code{NO_REGS} when
+ @var{x} is a floating-point constant. If the constant can't be loaded
+ into any kind of register, code generation will be better if
+-@code{LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
++@code{TARGET_LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
+ of using @code{TARGET_PREFERRED_RELOAD_CLASS}.
+
+ If an insn has pseudos in it after register allocation, reload will go
+@@ -2570,8 +2570,8 @@
+ register, so @code{PREFERRED_RELOAD_CLASS} returns @code{NO_REGS} when
+ @var{x} is a floating-point constant. If the constant can't be loaded
+ into any kind of register, code generation will be better if
+-@code{LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
+-of using @code{PREFERRED_RELOAD_CLASS}.
++@code{TARGET_LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
++of using @code{TARGET_PREFERRED_RELOAD_CLASS}.
+
+ If an insn has pseudos in it after register allocation, reload will go
+ through the alternatives and call repeatedly @code{PREFERRED_RELOAD_CLASS}
+@@ -4319,6 +4319,34 @@
+ must have move patterns for this mode.
+ @end deftypefn
+
++@deftypefn {Target Hook} bool TARGET_ARRAY_MODE_SUPPORTED_P (enum machine_mode @var{mode}, unsigned HOST_WIDE_INT @var{nelems})
++Return true if GCC should try to use a scalar mode to store an array
++of @var{nelems} elements, given that each element has mode @var{mode}.
++Returning true here overrides the usual @code{MAX_FIXED_MODE} limit
++and allows GCC to use any defined integer mode.
++
++One use of this hook is to support vector load and store operations
++that operate on several homogeneous vectors. For example, ARM NEON
++has operations like:
++
++@smallexample
++int8x8x3_t vld3_s8 (const int8_t *)
++@end smallexample
++
++where the return type is defined as:
++
++@smallexample
++typedef struct int8x8x3_t
++@{
++ int8x8_t val[3];
++@} int8x8x3_t;
++@end smallexample
++
++If this hook allows @code{val} to have a scalar mode, then
++@code{int8x8x3_t} can have the same mode. GCC can then store
++@code{int8x8x3_t}s in registers rather than forcing them onto the stack.
++@end deftypefn
++
+ @deftypefn {Target Hook} bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P (enum machine_mode @var{mode})
+ Define this to return nonzero for machine modes for which the port has
+ small register classes. If this target hook returns nonzero for a given
+@@ -5577,13 +5605,13 @@
+ @code{TARGET_MODE_DEPENDENT_ADDRESS_P} target hook.
+ @end defmac
+
+-@defmac LEGITIMATE_CONSTANT_P (@var{x})
+-A C expression that is nonzero if @var{x} is a legitimate constant for
+-an immediate operand on the target machine. You can assume that
+-@var{x} satisfies @code{CONSTANT_P}, so you need not check this. In fact,
+-@samp{1} is a suitable definition for this macro on machines where
+-anything @code{CONSTANT_P} is valid.
+-@end defmac
++@deftypefn {Target Hook} bool TARGET_LEGITIMATE_CONSTANT_P (enum machine_mode @var{mode}, rtx @var{x})
++This hook returns true if @var{x} is a legitimate constant for a
++@var{mode}-mode immediate operand on the target machine. You can assume that
++@var{x} satisfies @code{CONSTANT_P}, so you need not check this.
++
++The default definition returns true.
++@end deftypefn
+
+ @deftypefn {Target Hook} rtx TARGET_DELEGITIMIZE_ADDRESS (rtx @var{x})
+ This hook is used to undo the possibly obfuscating effects of the
diff --git a/debian/patches/gcc-linaro-updates.diff b/debian/patches/gcc-linaro-updates.diff
new file mode 100644
index 0000000..f460036
--- /dev/null
+++ b/debian/patches/gcc-linaro-updates.diff
@@ -0,0 +1,2 @@
+# DP: Linaro updates from the 4.6-2011.xx-stable branch:
+
diff --git a/debian/patches/gcc-linaro.diff b/debian/patches/gcc-linaro.diff
new file mode 100644
index 0000000..bce47be
--- /dev/null
+++ b/debian/patches/gcc-linaro.diff
@@ -0,0 +1,44066 @@
+# DP: Changes for the Linaro 4.6-2011.12 release.
+
+--- a/src/ChangeLog
++++ b/src/ChangeLog
+@@ -1,3 +1,13 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * libtool.m4: Additional FreeBSD 10 fixes.
++
++2011-11-18 Iain Sandoe <iains@gcc.gnu.org>
++
++ PR target/49992
++ * configure.ac: Remove ranlib special-casing for Darwin.
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/ChangeLog.linaro
++++ b/src/ChangeLog.linaro
+@@ -0,0 +1,3067 @@
++2011-12-06 Andrew Stubbs <ams@codesourcery.com>
++
++ GCC Linaro 4.6-2011.12 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2011-12-06 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ Revert earlier commit for fixed to floating point conversions.
++ 2011-12-05 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ gcc/
++ * config/arm/arm.c (vfp3_const_double_for_fract_bits): Define.
++ * config/arm/arm-protos.h (vfp3_const_double_for_fract_bits): Declare.
++ * config/arm/constraints.md ("Dt"): New constraint.
++ * config/arm/predicates.md (const_double_vcvt_power_of_two_reciprocal):
++ New.
++ * config/arm/vfp.md (*arm_combine_vcvt_f32_s32): New.
++ (*arm_combine_vcvt_f32_u32): New.
++
++2011-12-01 Andrew Stubbs <ams@codesourcery.com>
++
++ Merge from FSF GCC 4.6.2 (svn branches/gcc-4_6-branch 181866).
++
++2011-12-05 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ Backport from mainline -A15 tuning.
++ 2011-11-30 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
++
++ * config/arm/arm.c (arm_issue_rate): Cortex-A15 can triple issue.
++ * config/arm/arm.md (mul64): New attribute.
++ (generic_sched): Cortex-A15 is not scheduled generically.
++ (cortex-a15.md): Include.
++ * config/arm/cortex-a15.md: New machine description.
++ * config/arm/t-arm (MD_INCLUDES): Add cortex-a15.md.
++
++ 2011-11-30 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
++ * config/arm/t-arm (MD_INCLUDES): Ensure all md files are listed.
++
++2011-12-05 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ gcc/
++ * config/arm/arm.c (vfp3_const_double_for_fract_bits): Define.
++ * config/arm/arm-protos.h (vfp3_const_double_for_fract_bits): Declare.
++ * config/arm/constraints.md ("Dt"): New constraint.
++ * config/arm/predicates.md (const_double_vcvt_power_of_two_reciprocal):
++ New.
++ * config/arm/vfp.md (*arm_combine_vcvt_f32_s32): New.
++ (*arm_combine_vcvt_f32_u32): New.
++
++2011-11-27 Ira Rosen <ira.rosen@linaro.org>
++
++ Needs to be merged upstream:
++
++ gcc/
++ * tree-vect-patterns.c (widened_name_p): Rename to ...
++ (type_conversion_p): ... this. Add new argument to determine
++ if it's a promotion or demotion operation. Check for
++ CONVERT_EXPR_CODE_P instead of NOP_EXPR.
++ (vect_recog_dot_prod_pattern): Call type_conversion_p instead
++ widened_name_p.
++ (vect_recog_widen_mult_pattern, vect_recog_widen_sum_pattern,
++ vect_operation_fits_smaller_type, vect_recog_widen_shift_pattern):
++ Likewise.
++ (vect_recog_mixed_size_cond_pattern): Likewise and allow
++ non-constant then and else clauses.
++
++ gcc/testsuite/
++ * gcc.dg/vect/bb-slp-cond-3.c: New test.
++ * gcc.dg/vect/bb-slp-cond-4.c: New test.
++
++2011-11-28 David Alan Gilbert <david.gilbert@linaro.org>
++
++ Backport from mainline (svn r19983):
++
++ 2011-10-14 David Alan Gilbert <david.gilbert@linaro.org>
++
++ gcc/testsuite/
++ * gcc.dg/di-longlong64-sync-1.c: New test.
++ * gcc.dg/di-sync-multithread.c: New test.
++ * gcc.target/arm/di-longlong64-sync-withhelpers.c: New test.
++ * gcc.target/arm/di-longlong64-sync-withldrexd.c: New test.
++ * lib/target-supports.exp: (arm_arch_*_ok): Series of effective-target
++ tests for v5, v6, v6k, and v7-a, and add-options helpers.
++ (check_effective_target_arm_arm_ok): New helper.
++ (check_effective_target_sync_longlong): New helper.
++
++2011-11-28 David Alan Gilbert <david.gilbert@linaro.org>
++
++ Backport from mainline (svn r19982):
++
++ 2011-10-14 David Alan Gilbert <david.gilbert@linaro.org>
++
++ gcc/
++ * config/arm/linux-atomic-64bit.c: New (based on linux-atomic.c).
++ * config/arm/linux-atomic.c: Change comment to point to 64bit version.
++ (SYNC_LOCK_RELEASE): Instantiate 64bit version.
++ * config/arm/t-linux-eabi: Pull in linux-atomic-64bit.c.
++
++2011-11-28 David Alan Gilbert <david.gilbert@linaro.org>
++
++ Backport from mainline (svn r19981):
++
++ 2011-10-14 David Alan Gilbert <david.gilbert@linaro.org>
++
++ gcc/
++ * config/arm/arm.c (arm_output_ldrex): Support ldrexd.
++ (arm_output_strex): Support strexd.
++ (arm_output_it): New helper to output it in Thumb2 mode only.
++ (arm_output_sync_loop): Support DI mode. Change comment to
++ not support const_int.
++ (arm_expand_sync): Support DI mode.
++ * config/arm/arm.h (TARGET_HAVE_LDREXBHD): Split into LDREXBH
++ and LDREXD.
++ * config/arm/iterators.md (NARROW): move from sync.md.
++ (QHSD): New iterator for all current ARM integer modes.
++ (SIDI): New iterator for SI and DI modes only.
++ * config/arm/sync.md (sync_predtab): New mode_attr.
++ (sync_compare_and_swapsi): Fold into sync_compare_and_swap<mode>.
++ (sync_lock_test_and_setsi): Fold into sync_lock_test_and_setsi<mode>.
++ (sync_<sync_optab>si): Fold into sync_<sync_optab><mode>.
++ (sync_nandsi): Fold into sync_nand<mode>.
++ (sync_new_<sync_optab>si): Fold into sync_new_<sync_optab><mode>.
++ (sync_new_nandsi): Fold into sync_new_nand<mode>.
++ (sync_old_<sync_optab>si): Fold into sync_old_<sync_optab><mode>.
++ (sync_old_nandsi): Fold into sync_old_nand<mode>.
++ (sync_compare_and_swap<mode>): Support SI & DI.
++ (sync_lock_test_and_set<mode>): Likewise.
++ (sync_<sync_optab><mode>): Likewise.
++ (sync_nand<mode>): Likewise.
++ (sync_new_<sync_optab><mode>): Likewise.
++ (sync_new_nand<mode>): Likewise.
++ (sync_old_<sync_optab><mode>): Likewise.
++ (sync_old_nand<mode>): Likewise.
++ (arm_sync_compare_and_swapsi): Turn into iterator on SI & DI.
++ (arm_sync_lock_test_and_setsi): Likewise.
++ (arm_sync_new_<sync_optab>si): Likewise.
++ (arm_sync_new_nandsi): Likewise.
++ (arm_sync_old_<sync_optab>si): Likewise.
++ (arm_sync_old_nandsi): Likewise.
++ (arm_sync_compare_and_swap<mode> NARROW): use sync_predtab, fix indent.
++ (arm_sync_lock_test_and_setsi<mode> NARROW): Likewise.
++ (arm_sync_new_<sync_optab><mode> NARROW): Likewise.
++ (arm_sync_new_nand<mode> NARROW): Likewise.
++ (arm_sync_old_<sync_optab><mode> NARROW): Likewise.
++ (arm_sync_old_nand<mode> NARROW): Likewise.
++
++2011-11-28 David Alan Gilbert <david.gilbert@linaro.org>
++
++ Backport from mainline (svn r19980):
++
++ 2011-10-14 David Alan Gilbert <david.gilbert@linaro.org>
++
++ PR target/48126
++
++ gcc/
++ * config/arm/arm.c (arm_output_sync_loop): Move label before barrier.
++
++2011-11-28 David Alan Gilbert <david.gilbert@linaro.org>
++
++ Backport from mainline (svn r19979):
++
++ 2011-10-14 David Alan Gilbert <david.gilbert@linaro.org>
++
++ gcc/
++ * config/arm/arm.h (TARGET_HAVE_DMB_MCR): MCR Not available in Thumb1.
++
++
++2011-11-27 Ira Rosen <ira.rosen@linaro.org>
++
++ Needs to be merged upstream:
++
++ gcc/
++ * tree-vectorizer.h (vect_pattern_recog): Add new argument.
++ * tree-vect-loop.c (vect_analyze_loop_2): Update call to
++ vect_pattern_recog.
++ * tree-vect-patterns.c (widened_name_p): Pass basic block
++ info to vect_is_simple_use.
++ (vect_recog_dot_prod_pattern): Fail for basic blocks.
++ (vect_recog_widen_sum_pattern): Likewise.
++ (vect_handle_widen_op_by_const): Support basic blocks.
++ (vect_operation_fits_smaller_type,
++ vect_recog_over_widening_pattern): Likewise.
++ (vect_recog_mixed_size_cond_pattern): Support basic blocks.
++ Add printing.
++ (vect_mark_pattern_stmts): Update calls to new_stmt_vec_info.
++ (vect_pattern_recog_1): Check for reduction only in loops.
++ (vect_pattern_recog): Add new argument. Support basic blocks.
++ * tree-vect-stmts.c (vectorizable_conversion): Pass basic block
++ info to vect_is_simple_use_1.
++ * tree-vect-slp.c (vect_get_and_check_slp_defs): Support basic
++ blocks.
++ (vect_slp_analyze_bb_1): Call vect_pattern_recog.
++
++ gcc/testsuite/
++ * gcc.dg/vect/bb-slp-pattern-1.c: New test.
++ * gcc.dg/vect/bb-slp-pattern-2.c: New test.
++
++2011-11-22 Ira Rosen <ira.rosen@linaro.org>
++
++ Backport from mainline:
++
++ 2011-11-06 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * tree-vectorizer.h (vectorizable_condition): Add argument.
++ * tree-vect-loop.c (vectorizable_reduction): Fail for condition
++ in SLP. Update calls to vectorizable_condition.
++ * tree-vect-stmts.c (vect_is_simple_cond): Add basic block info to
++ the arguments. Pass it to vect_is_simple_use_1.
++ (vectorizable_condition): Add slp_node to the arguments. Support
++ vectorization of basic blocks. Fail for reduction in SLP. Update
++ calls to vect_is_simple_cond and vect_is_simple_use. Support SLP:
++ call vect_get_slp_defs to get vector operands.
++ (vect_analyze_stmt): Update calls to vectorizable_condition.
++ (vect_transform_stmt): Likewise.
++ * tree-vect-slp.c (vect_create_new_slp_node): Handle COND_EXPR.
++ (vect_get_and_check_slp_defs): Handle COND_EXPR. Allow pattern
++ def stmts.
++ (vect_build_slp_tree): Handle COND_EXPR.
++ (vect_analyze_slp_instance): Push pattern statements to root node.
++ (vect_get_constant_vectors): Fix comments. Handle COND_EXPR.
++
++ gcc/testsuite/
++ * gcc.dg/vect/bb-slp-cond-1.c: New test.
++ * gcc.dg/vect/slp-cond-1.c: New test.
++
++2011-11-22 Ira Rosen <ira.rosen@linaro.org>
++
++ Backport from mainline:
++
++ 2011-10-06 Jakub Jelinek <jakub@redhat.com>
++
++ gcc/
++ PR tree-optimization/50596
++ * tree-vectorizer.h (vect_is_simple_cond): New prototype.
++ (NUM_PATTERNS): Change to 6.
++ * tree-vect-patterns.c (vect_recog_mixed_size_cond_pattern): New
++ function.
++ (vect_vect_recog_func_ptrs): Add vect_recog_mixed_size_cond_pattern.
++ (vect_mark_pattern_stmts): Don't create stmt_vinfo for def_stmt
++ if it already has one, and don't set STMT_VINFO_VECTYPE in it
++ if it is already set.
++ * tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized): Handle
++ COND_EXPR in pattern stmts.
++ (vect_is_simple_cond): No longer static.
++
++ gcc/testsuite:
++ PR tree-optimization/50596
++ * gcc.dg/vect/vect-cond-8.c: New test.
++
++ 2011-10-07 Jakub Jelinek <jakub@redhat.com>
++
++ gcc/
++ PR tree-optimization/50650
++ * tree-vect-patterns.c (vect_recog_mixed_size_cond_pattern): Don't
++ call vect_is_simple_cond here, instead fail if cond_expr isn't
++ COMPARISON_CLASS_P or if get_vectype_for_scalar_type returns NULL
++ for cond_expr's first operand.
++ * tree-vect-stmts.c (vect_is_simple_cond): Static again.
++ * tree-vectorizer.h (vect_is_simple_cond): Remove prototype.
++
++
++ gcc/
++ * tree-vect-patterns.c (vect_recog_mixed_size_cond_pattern): Reduce
++ it to integral types only.
++
++ gcc/testsuite/
++ * gcc.dg/vect/pr30858.c: Expect the error message twice for targets
++ with multiple vector sizes.
++ * gcc.dg/vect/vect-cond-8.c: Rename to...
++ * gcc.dg/vect/vect-cond-8a.c: ... this and change the type from float
++ to int.
++ * lib/target-supports.exp (check_effective_target_vect_condition):
++ Return true for NEON.
++
++2011-11-21 Michael Hope <michael.hope@linaro.org>
++
++ Backport from mainline r180131:
++
++ 2011-10-18 Julian Brown <julian@codesourcery.com>
++
++ gcc/
++ * config/arm/arm.c (arm_block_move_unaligned_straight)
++ (arm_adjust_block_mem, arm_block_move_unaligned_loop)
++ (arm_movmemqi_unaligned): New.
++ (arm_gen_movmemqi): Support unaligned block copies.
++
++ gcc/testsuite/
++ * lib/target-supports.exp (check_effective_target_arm_unaligned): New.
++ * gcc.target/arm/unaligned-memcpy-1.c: New.
++ * gcc.target/arm/unaligned-memcpy-2.c: New.
++ * gcc.target/arm/unaligned-memcpy-3.c: New.
++ * gcc.target/arm/unaligned-memcpy-4.c: New.
++
++ 2011-09-15 James Greenhalgh <james.greenhalgh@arm.com>
++
++ gcc/
++ * config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): New builtin macro.
++
++2011-11-17 Ira Rosen <ira.rosen@linaro.org>
++
++ Backport from mainline:
++
++ 2011-11-03 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * tree-vectorizer.h (slp_void_p): New.
++ (struct _slp_tree): Replace left and right with children. Update
++ documentation.
++ (struct _slp_oprnd_info): New.
++ (vect_get_vec_defs): Declare.
++ (vect_get_slp_defs): Update arguments.
++ * tree-vect-loop.c (vect_create_epilog_for_reduction): Call
++ vect_get_vec_defs instead of vect_get_slp_defs.
++ (vectorizable_reduction): Likewise.
++ * tree-vect-stmts.c (vect_get_vec_defs): Remove static, add argument.
++ Update call to vect_get_slp_defs.
++ (vectorizable_conversion): Update call to vect_get_vec_defs.
++ (vectorizable_assignment, vectorizable_shift,
++ vectorizable_operation): Likewise.
++ (vectorizable_type_demotion): Call vect_get_vec_defs instead of
++ vect_get_slp_defs.
++ (vectorizable_type_promotion, vectorizable_store): Likewise.
++ (vect_analyze_stmt): Fix typo.
++ * tree-vect-slp.c (vect_free_slp_tree): Update SLP tree traversal.
++ (vect_print_slp_tree, vect_mark_slp_stmts,
++ vect_mark_slp_stmts_relevant, vect_slp_rearrange_stmts,
++ vect_detect_hybrid_slp_stmts, vect_slp_analyze_node_operations,
++ vect_schedule_slp_instance): Likewise.
++ (vect_create_new_slp_node): New.
++ (vect_create_oprnd_info, vect_free_oprnd_info): Likewise.
++ (vect_get_and_check_slp_defs): Pass information about defs using
++ oprnds_info, allow any number of operands.
++ (vect_build_slp_tree): Likewise. Update calls to
++ vect_get_and_check_slp_defs. Fix comments.
++ (vect_analyze_slp_instance): Move node creation to
++ vect_create_new_slp_node.
++ (vect_get_slp_defs): Allow any number of operands.
++
++ 2011-11-11 Jakub Jelinek <jakub@redhat.com>
++
++ gcc/
++ * tree-vect-slp.c (vect_free_slp_tree): Also free SLP_TREE_CHILDREN
++ vector.
++ (vect_create_new_slp_node): Don't allocate node before checking stmt
++ type.
++ (vect_free_oprnd_info): Remove FREE_DEF_STMTS argument, always
++ free def_stmts vectors and additionally free oprnd_info.
++ (vect_build_slp_tree): Adjust callers. Call it even if
++ stop_recursion. If vect_create_new_slp_node or
++ vect_build_slp_tree fails, properly handle freeing memory.
++ If it succeeded, clear def_stmts in oprnd_info.
++
++2011-11-02 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF mainline:
++
++ 2011-11-01 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * config/arm/bpabi.h (BE8_LINK_SPEC): Recognize generic-armv7 tuning.
++
++2011-11-08 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2011-11-08 Andrew Stubbs <ams@codesourcery.com>
++
++ GCC Linaro 4.6-2011.11 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2011-11-04 Revital Eres <revital.eres@linaro.org>
++
++ Backport from mainline -r180673:
++
++ gcc/
++ * modulo-sched.c (generate_prolog_epilog): Mark prolog
++ and epilog as BB_DISABLE_SCHEDULE.
++ (mark_loop_unsched): New function.
++ (sms_schedule): Call it.
++
++2011-10-26 Andrew Stubbs <ams@codesourcery.com>
++
++ Merge FSF GCC 4.6.2 Release (svn branches/gcc-4_6-branch 180515).
++
++2011-10-27 Ira Rosen <ira.rosen@linaro.org>
++
++ Backport from mainline:
++
++ 2011-10-18 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * doc/md.texi (vec_widen_ushiftl_hi, vec_widen_ushiftl_lo,
++ vec_widen_sshiftl_hi, vec_widen_sshiftl_lo): Document.
++ * tree-pretty-print.c (dump_generic_node): Handle WIDEN_LSHIFT_EXPR,
++ VEC_WIDEN_LSHIFT_HI_EXPR and VEC_WIDEN_LSHIFT_LO_EXPR.
++ (op_code_prio): Likewise.
++ (op_symbol_code): Handle WIDEN_LSHIFT_EXPR.
++ * optabs.c (optab_for_tree_code): Handle
++ VEC_WIDEN_LSHIFT_HI_EXPR and VEC_WIDEN_LSHIFT_LO_EXPR.
++ (init-optabs): Initialize optab codes for vec_widen_u/sshiftl_hi/lo.
++ * optabs.h (enum optab_index): Add OTI_vec_widen_u/sshiftl_hi/lo.
++ * genopinit.c (optabs): Initialize the new optabs.
++ * expr.c (expand_expr_real_2): Handle
++ VEC_WIDEN_LSHIFT_HI_EXPR and VEC_WIDEN_LSHIFT_LO_EXPR.
++ * gimple-pretty-print.c (dump_binary_rhs): Likewise.
++ * tree-vectorizer.h (NUM_PATTERNS): Increase to 8.
++ * tree.def (WIDEN_LSHIFT_EXPR, VEC_WIDEN_LSHIFT_HI_EXPR,
++ VEC_WIDEN_LSHIFT_LO_EXPR): New.
++ * cfgexpand.c (expand_debug_expr): Handle new tree codes.
++ * tree-vect-patterns.c (vect_vect_recog_func_ptrs): Add
++ vect_recog_widen_shift_pattern.
++ (vect_handle_widen_mult_by_const): Rename...
++ (vect_handle_widen_op_by_const): ...to this. Handle shifts.
++ Add a new argument, update documentation.
++ (vect_recog_widen_mult_pattern): Assume that only second
++ operand can be constant. Update call to
++ vect_handle_widen_op_by_const.
++ (vect_recog_over_widening_pattern): Fix typo.
++ (vect_recog_widen_shift_pattern): New.
++ * tree-vect-stmts.c (vectorizable_type_promotion): Handle
++ widening shifts.
++ (supportable_widening_operation): Likewise.
++ * tree-inline.c (estimate_operator_cost): Handle new tree codes.
++ * tree-vect-generic.c (expand_vector_operations_1): Likewise.
++ * tree-cfg.c (verify_gimple_assign_binary): Likewise.
++ * config/arm/neon.md (neon_vec_<US>shiftl_<mode>): New.
++ (vec_widen_<US>shiftl_lo_<mode>, neon_vec_<US>shiftl_hi_<mode>,
++ vec_widen_<US>shiftl_hi_<mode>, neon_vec_<US>shift_left_<mode>):
++ Likewise.
++ * config/arm/predicates.md (const_neon_scalar_shift_amount_operand):
++ New.
++ * config/arm/iterators.md (V_innermode): New.
++ * tree-vect-slp.c (vect_build_slp_tree): Require same shift operand
++ for widening shift.
++
++ gcc/testsuite
++ * testsuite/lib/target-supports.exp
++ (check_effective_target_vect_widen_shift): New.
++ * gcc.dg/vect/vect-widen-shift-s16.c: New.
++ * gcc.dg/vect/vect-widen-shift-s8.c: New.
++ * gcc.dg/vect/vect-widen-shift-u16.c: New.
++ * gcc.dg/vect/vect-widen-shift-u8.c: New.
++
++ 2011-10-06 Jakub Jelinek <jakub@redhat.com>
++
++ gcc/
++ * tree-vect-patterns.c (vect_pattern_recog_1): Use
++ vect_recog_func_ptr typedef for the first argument.
++ (vect_pattern_recog): Rename vect_recog_func_ptr variable
++ to vect_recog_func, use vect_recog_func_ptr typedef for it.
++
++ 2011-10-16 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ PR tree-optimization/50727
++ * tree-vect-patterns.c (vect_operation_fits_smaller_type): Add
++ DEF_STMT to the list of statements to be replaced by the
++ pattern statements.
++
++ 2011-10-09 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ PR tree-optimization/50635
++ * tree-vect-patterns.c (vect_handle_widen_mult_by_const): Add
++ DEF_STMT to the list of statements to be replaced by the
++ pattern statements.
++ (vect_handle_widen_mult_by_const): Don't check TYPE_OUT.
++
++2011-10-27 Ira Rosen <ira.rosen@linaro.org>
++
++ Backport from mainline:
++ 2011-10-16 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * tree-vect-stmts.c (vectorizable_load): For SLP without permutation
++ treat the first load of the node as the first element in its
++ interleaving chain.
++ * tree-vect-slp.c (vect_get_and_check_slp_defs): Swap the operands if
++ necessary and possible.
++ (vect_build_slp_tree): Add new argument. Allow load groups of any size
++ in basic blocks. Keep all the loads for further permutation check.
++ Use the new argument to determine if there is a permutation. Update
++ the recursive calls.
++ (vect_supported_load_permutation_p): Allow subchains of interleaving
++ chains in basic block vectorization.
++ (vect_analyze_slp_instance): Update the call to vect_build_slp_tree.
++ Check load permutation based on the new parameter.
++ (vect_schedule_slp_instance): Don't start from the first element in
++ interleaving chain unless the loads are permuted.
++
++ gcc/testsuite/
++ * gcc.dg/vect/bb-slp-29.c: New test.
++
++2011-10-21 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF mainline:
++
++ 2011-10-21 Andrew Stubbs <ams@codesourcery.com>
++
++ PR target/50809
++
++ gcc/
++ * config/arm/driver-arm.c (vendors): Make static.
++
++2011-10-19 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF:
++
++ 2011-10-18 Andrew Stubbs <ams@codesourcery.com>
++
++ PR tree-optimization/50717
++
++ gcc/
++ * tree-ssa-math-opts.c (is_widening_mult_p): Remove the 'type'
++ parameter. Calculate 'type' from stmt.
++ (convert_mult_to_widen): Update call the is_widening_mult_p.
++ (convert_plusminus_to_widen): Likewise.
++
++ gcc/testsuite/
++ * gcc.dg/pr50717-1.c: New file.
++ * gcc.target/arm/wmul-12.c: Correct types.
++ * gcc.target/arm/wmul-8.c: Correct types.
++
++2011-10-19 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF:
++
++ 2011-10-18 Andrew Stubbs <ams@codesourcery.com>
++
++ * config/arm/driver-arm.c (host_detect_local_cpu): Close the file
++ before exiting.
++
++ 2011-10-18 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * config.host (arm*-*-linux*): Add driver-arm.o and x-arm.
++ * config/arm/arm.opt: Add 'native' processor_type and
++ arm_arch enum values.
++ * config/arm/arm.h (host_detect_local_cpu): New prototype.
++ (EXTRA_SPEC_FUNCTIONS): New define.
++ (MCPU_MTUNE_NATIVE_SPECS): New define.
++ (DRIVER_SELF_SPECS): New define.
++ * config/arm/driver-arm.c: New file.
++ * config/arm/x-arm: New file.
++ * doc/invoke.texi (ARM Options): Document -mcpu=native,
++ -mtune=native and -march=native.
++
++2011-10-19 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF:
++
++ 2011-09-09 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * config/arm/arm-cores.def (generic-armv7-a): New architecture.
++ * config/arm/arm-tables.opt: Regenerate.
++ * config/arm/arm-tune.md: Regenerate.
++ * config/arm/arm.c (arm_file_start): Output .arch directive when
++ user passes -mcpu=generic-*.
++ (arm_issue_rate): Add genericv7a support.
++ * config/arm/arm.h (EXTRA_SPECS): Add asm_cpu_spec.
++ (ASM_CPU_SPEC): New define.
++ * config/arm/elf.h (ASM_SPEC): Use %(asm_cpu_spec).
++ * config/arm/semi.h (ASM_SPEC): Likewise.
++ * doc/invoke.texi (ARM Options): Document -mcpu=generic-*
++ and -mtune=generic-*.
++
++2011-10-17 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-10-10 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * modulo-sched.c (ps_reg_move_info): Add num_consecutive_stages.
++ (SCHED_FIRST_REG_MOVE, SCHED_NREG_MOVES): Delete.
++ (node_sched_params): Remove first_reg_move and nreg_moves.
++ (ps_num_consecutive_stages, extend_node_sched_params): New functions.
++ (update_node_sched_params): Move up file.
++ (print_node_sched_params): Print the stage. Don't dump info related
++ to first_reg_move and nreg_moves.
++ (set_columns_for_row): New function.
++ (set_columns_for_ps): Move up file and use set_columns_for_row.
++ (schedule_reg_move): New function.
++ (schedule_reg_moves): Call extend_node_sched_params and
++ schedule_reg_move. Extend size of uses bitmap. Initialize
++ num_consecutive_stages. Return false if a move could not be
++ scheduled.
++ (apply_reg_moves): Don't emit moves here.
++ (permute_partial_schedule): Handle register moves.
++ (duplicate_insns_of_cycles): Remove for_prolog. Emit moves according
++ to the same stage-count test as ddg nodes.
++ (generate_prolog_epilog): Update calls accordingly.
++ (sms_schedule): Allow move-scheduling to add a new first stage.
++
++2011-10-17 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-10-10 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * modulo-sched.c (ps_insn): Adjust comment.
++ (ps_reg_move_info): New structure.
++ (partial_schedule): Add reg_moves field.
++ (SCHED_PARAMS): Use node_sched_param_vec instead of node_sched_params.
++ (node_sched_params): Turn first_reg_move into an identifier.
++ (ps_reg_move): New function.
++ (ps_rtl_insn): Cope with register moves.
++ (ps_first_note): Adjust comment and assert that the instruction
++ isn't a register move.
++ (node_sched_params): Replace with...
++ (node_sched_param_vec): ...this vector.
++ (set_node_sched_params): Adjust accordingly.
++ (print_node_sched_params): Take a partial schedule instead of a ddg.
++ Use ps_rtl_insn and ps_reg_move.
++ (generate_reg_moves): Rename to...
++ (schedule_reg_moves): ...this. Remove rescan parameter. Record each
++ move in the partial schedule, but don't emit it here. Don't perform
++ register substitutions here either.
++ (apply_reg_moves): New function.
++ (duplicate_insns_of_cycles): Use register indices directly,
++ rather than finding instructions using PREV_INSN. Use ps_reg_move.
++ (sms_schedule): Call schedule_reg_moves before committing to
++ a partial schedule. Try the next ii if the schedule fails.
++ Use apply_reg_moves instead of generate_reg_moves. Adjust
++ call to print_node_sched_params. Free node_sched_param_vec
++ instead of node_sched_params.
++ (create_partial_schedule): Initialize reg_moves.
++ (free_partial_schedule): Free reg_moves.
++
++2011-10-17 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-10-10 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * modulo-sched.c (ps_insn): Replace node field with an identifier.
++ (SCHED_ASAP): Replace with..
++ (NODE_ASAP): ...this macro.
++ (SCHED_PARAMS): New macro.
++ (SCHED_TIME, SCHED_FIRST_REG_MOVE, SCHED_NREG_MOVES, SCHED_ROW)
++ (SCHED_STAGE, SCHED_COLUMN): Redefine using SCHED_PARAMS.
++ (node_sched_params): Remove asap.
++ (ps_rtl_insn, ps_first_note): New functions.
++ (set_node_sched_params): Use XCNEWVEC. Don't copy across the
++ asap values.
++ (print_node_sched_params): Use SCHED_PARAMS and NODE_ASAP.
++ (generate_reg_moves): Pass ids to the SCHED_* macros.
++ (update_node_sched_params): Take a ps insn identifier rather than
++ a node as parameter. Use ps_rtl_insn.
++ (set_columns_for_ps): Update for above field and SCHED_* macro changes.
++ (permute_partial_schedule): Use ps_rtl_insn and ps_first_note.
++ (optimize_sc): Update for above field and SCHED_* macro changes.
++ Update calls to try_scheduling_node_in_cycle and
++ update_node_sched_params.
++ (duplicate_insns_of_cycles): Adjust for above field and SCHED_*
++ macro changes. Use ps_rtl_insn and ps_first_note.
++ (sms_schedule): Pass ids to the SCHED_* macros.
++ (get_sched_window): Adjust for above field and SCHED_* macro changes.
++ Use NODE_ASAP instead of SCHED_ASAP.
++ (try_scheduling_node_in_cycle): Remove node parameter. Update
++ call to ps_add_node_check_conflicts. Pass ids to the SCHED_*
++ macros.
++ (sms_schedule_by_order): Update call to try_scheduling_node_in_cycle.
++ (ps_insert_empty_row): Adjust for above field changes.
++ (compute_split_row): Use ids rather than nodes.
++ (verify_partial_schedule): Adjust for above field changes.
++ (print_partial_schedule): Use ps_rtl_insn.
++ (create_ps_insn): Take an id rather than a node.
++ (ps_insn_find_column): Adjust for above field changes.
++ Use ps_rtl_insn.
++ (ps_insn_advance_column): Adjust for above field changes.
++ (add_node_to_ps): Remove node parameter. Update call to
++ create_ps_insn.
++ (ps_has_conflicts): Use ps_rtl_insn.
++ (ps_add_node_check_conflicts): Replace node parameter than an id.
++
++2011-10-17 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-10-10 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * modulo-sched.c (undo_replace_buff_elem): Delete.
++ (generate_reg_moves): Don't build and return an undo list.
++ (free_undo_replace_buff): Delete.
++ (sms_schedule): Adjust call to generate_reg_moves.
++ Don't call free_undo_replace_buff.
++
++2011-10-17 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-08-08 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * modulo-sched.c (get_sched_window): Use a table for the debug output.
++ Print the current ii.
++ (sms_schedule_by_order): Reduce whitespace in dump line.
++
++2011-10-17 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-08-08 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * modulo-sched.c (get_sched_window): Use just one loop for predecessors
++ and one loop for successors. Fix upper bound of memory range.
++
++2011-10-17 Michael Hope <michael.hope@linaro.org>
++
++ Backport from mainline r178852:
++
++ 2011-09-14 Julian Brown <julian@codesourcery.com>
++
++ gcc/
++ * config/arm/arm.c (arm_override_options): Add unaligned_access
++ support.
++ (arm_file_start): Emit attribute for unaligned access as appropriate.
++ * config/arm/arm.md (UNSPEC_UNALIGNED_LOAD)
++ (UNSPEC_UNALIGNED_STORE): Add constants for unspecs.
++ (insv, extzv): Add unaligned-access support.
++ (extv): Change to expander. Likewise.
++ (extzv_t1, extv_regsi): Add helpers.
++ (unaligned_loadsi, unaligned_loadhis, unaligned_loadhiu)
++ (unaligned_storesi, unaligned_storehi): New.
++ (*extv_reg): New (previous extv implementation).
++ * config/arm/arm.opt (munaligned_access): Add option.
++ * config/arm/constraints.md (Uw): New constraint.
++ * expmed.c (store_bit_field_1): Adjust bitfield numbering according
++ to size of access, not size of unit, when BITS_BIG_ENDIAN !=
++ BYTES_BIG_ENDIAN. Don't use bitfield accesses for
++ volatile accesses when -fstrict-volatile-bitfields is in effect.
++ (extract_bit_field_1): Likewise.
++
++ Backport from mainline r172697:
++
++ 2011-04-19 Wei Guozhi <carrot@google.com>
++
++ PR target/47855
++ gcc/
++ * config/arm/arm-protos.h (thumb1_legitimate_address_p): New prototype.
++ * config/arm/arm.c (thumb1_legitimate_address_p): Remove the static
++ linkage.
++ * config/arm/constraints.md (Uu): New constraint.
++ * config/arm/arm.md (*arm_movqi_insn): Compute attr "length".
++
++2011-10-16 Ira Rosen <ira.rosen@linaro.org>
++
++ Backport from mainline:
++
++ 2011-09-27 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * tree-vect-stmts.c (vectorizable_type_demotion): Handle basic block
++ vectorization.
++ (vectorizable_type_promotion): Likewise.
++ (vect_analyze_stmt): Call vectorizable_type_demotion and
++ vectorizable_type_promotion for basic blocks.
++ (supportable_widening_operation): Don't assume loop vectorization.
++ * tree-vect-slp.c (vect_build_slp_tree): Allow multiple types for
++ basic blocks. Update vectorization factor for basic block
++ vectorization.
++ (vect_analyze_slp_instance): Allow multiple types for basic block
++ vectorization. Recheck unrolling factor after construction of SLP
++ instance.
++
++ gcc/testsuite/
++ * gcc.dg/vect/bb-slp-11.c: Expect to get vectorized with 64-bit
++ vectors.
++ * gcc.dg/vect/bb-slp-27.c: New.
++ * gcc.dg/vect/bb-slp-28.c: New.
++
++
++ 2011-10-04 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/testsuite/
++ * lib/target-supports.exp (check_effective_target_vect_multiple_sizes):
++ Make et_vect_multiple_sizes_saved global.
++ (check_effective_target_vect64): Make et_vect64_saved global.
++
++2011-10-13 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from mainline:
++
++ 2011-10-07 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * config/arm/predicates.md (shift_amount_operand): Remove constant
++ range check.
++ (shift_operator): Check range of constants for all shift operators.
++
++ gcc/testsuite/
++ * gcc.dg/pr50193-1.c: New file.
++ * gcc.target/arm/shiftable.c: New file.
++
++2011-10-11 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2011-10-11 Andrew Stubbs <ams@codesourcery.com>
++
++ GCC Linaro 4.6-2011.10 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2011-10-04 Andrew Stubbs <ams@codesourcery.com>
++
++ Merge from FSF GCC 4.6.1 (svn branches/gcc-4_6-branch 179483).
++
++2011-10-06 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/testsuite/
++ * gcc.dg/vect/bb-slp-26.c: Simplify to make the basic block
++ vectorizable.
++
++ Backport from mainline:
++
++ 2011-09-25 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * tree-vect-slp.c (vect_slp_analyze_bb_1): Split out core part
++ of vect_analyze_bb here.
++ (vect_analyze_bb): Loop over vector sizes calling vect_analyze_bb_1.
++
++ gcc/testsuite/
++ * lib/target-supports.exp (check_effective_target_vect64): New.
++ * gcc.dg/vect/bb-slp-11.c: Expect the error message twice in case
++ of multiple vector sizes.
++ * gcc.dg/vect/bb-slp-26.c: New.
++
++2011-10-06 Ira Rosen <ira.rosen@linaro.org>
++
++ Backport from mainline:
++
++ 2011-09-25 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * tree-data-ref.c (dr_analyze_innermost): Add new argument.
++ Allow not simple iv if analyzing basic block.
++ (create_data_ref): Update call to dr_analyze_innermost.
++ (stmt_with_adjacent_zero_store_dr_p, ref_base_address): Likewise.
++ * tree-loop-distribution.c (generate_memset_zero): Likewise.
++ * tree-predcom.c (find_looparound_phi): Likewise.
++ * tree-data-ref.h (dr_analyze_innermost): Add new argument.
++
++ gcc/testsuite/
++ * gcc.dg/vect/bb-slp-24.c: New.
++
++
++ 2011-09-15 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Allow
++ read-after-read dependencies in basic block SLP.
++
++ gcc/testsuite/
++ * gcc.dg/vect/bb-slp-25.c: New.
++
++
++ 2011-04-21 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ * tree-vect-data-refs.c (vect_drs_dependent_in_basic_block): Use
++ operand_equal_p to compare DR_BASE_ADDRESSes.
++ (vect_check_interleaving): Likewise.
++
++ gcc/testsuite/
++ * gcc.dg/vect/vect-119.c: New test.
++
++2011-10-03 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-09-22 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * config/arm/predicates.md (expandable_comparison_operator): New
++ predicate, extracted from...
++ (arm_comparison_operator): ...here.
++ * config/arm/arm.md (cbranchsi4, cbranchsf4, cbranchdf4, cbranchdi4)
++ (cstoresi4, cstoresf4, cstoredf4, cstoredi4, movsicc, movsfcc)
++ (movdfcc): Use expandable_comparison_operator.
++
++ gcc/testsuite/
++ Backport from mainline:
++
++ 2011-09-22 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * gcc.target/arm/cmp-1.c: New test.
++ * gcc.target/arm/cmp-2.c: Likewise.
++
++2011-10-03 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-09-07 Richard Sandiford <richard.sandiford@linaro.org>
++
++ PR target/49030
++ * config/arm/arm-protos.h (maybe_get_arm_condition_code): Declare.
++ * config/arm/arm.c (maybe_get_arm_condition_code): New function,
++ reusing the old code from get_arm_condition_code. Return ARM_NV
++ for invalid comparison codes.
++ (get_arm_condition_code): Redefine in terms of
++ maybe_get_arm_condition_code.
++ * config/arm/predicates.md (arm_comparison_operator): Use
++ maybe_get_arm_condition_code.
++
++ gcc/testsuite/
++ Backport from mainline:
++
++ 2011-09-07 Richard Sandiford <richard.sandiford@linaro.org>
++
++ PR target/49030
++ * gcc.dg/torture/pr49030.c: New test.
++
++2011-10-03 Michael Hope <michael.hope@linaro.org>
++
++ Backport from mainline:
++
++ 2011-09-13 Sevak Sargsyan <sevak.sargsyan@ispras.ru>
++
++ gcc/
++ * config/arm/neon.md (neon_vabd<mode>_2, neon_vabd<mode>_3): New
++ define_insn patterns for combine.
++
++ gcc/testsuite/
++ * gcc.target/arm/neon-combine-sub-abs-into-vabd.c: New test.
++
++2011-10-01 Revital Eres <revital.eres@linaro.org>
++
++ gcc/
++ Backport from mainline -r179380 and -r179381
++
++ * ddg.c (autoinc_var_is_used_p): New function.
++ (create_ddg_dep_from_intra_loop_link,
++ add_cross_iteration_register_deps): Call it.
++ * ddg.h (autoinc_var_is_used_p): Declare.
++ * modulo-sched.c (sms_schedule): Handle instructions with REG_INC.
++ (generate_reg_moves): Call autoinc_var_is_used_p. Skip
++ instructions that do not set a register and verify no regmoves
++ are created for !single_set instructions.
++
++ gcc/testsuite/
++
++ * gcc.dg/sms-10.c: New file
++
++2011-09-28 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-09-28 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * config/arm/neon.md (neon_move_lo_quad_<mode>): Delete.
++ (neon_move_hi_quad_<mode>): Likewise.
++ (move_hi_quad_<mode>, move_lo_quad_<mode>): Use subreg moves.
++
++2011-09-28 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-09-27 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * config/arm/neon.md (neon_vget_highv16qi, neon_vget_highv8hi)
++ (neon_vget_highv4si, neon_vget_highv4sf, neon_vget_highv2di)
++ (neon_vget_lowv16qi, neon_vget_lowv8hi, neon_vget_lowv4si)
++ (neon_vget_lowv4sf, neon_vget_lowv2di): Turn into define_expands
++ that produce subreg moves. Define using VQX iterators.
++
++2011-09-28 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-09-14 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * simplify-rtx.c (simplify_subreg): Check that the inner mode is
++ a scalar integer before applying integer-only optimisations to
++ inner arithmetic.
++
++2011-09-25 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/testsuite/
++ * lib/target-supports.exp (check_effective_target_vect_multiple_sizes):
++ Replace check_effective_target_arm_neon with
++ check_effective_target_arm_neon_ok.
++
++ Backport from mainline:
++
++ 2011-09-06 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * config/arm/arm.c (arm_preferred_simd_mode): Check
++ TARGET_NEON_VECTORIZE_DOUBLE instead of
++ TARGET_NEON_VECTORIZE_QUAD.
++ (arm_autovectorize_vector_sizes): Likewise.
++ * config/arm/arm.opt (mvectorize-with-neon-quad): Make inverse
++ mask of mvectorize-with-neon-double. Add RejectNegative.
++ (mvectorize-with-neon-double): New.
++
++ gcc/testsuite/
++ * lib/target-supports.exp (check_effective_target_vect_multiple_sizes):
++ New procedure.
++ (add_options_for_quad_vectors): Replace with ...
++ (add_options_for_double_vectors): ... this.
++ * gfortran.dg/vect/pr19049.f90: Expect more printings on targets that
++ support multiple vector sizes since the vectorizer attempts to
++ vectorize with both vector sizes.
++ * gcc.dg/vect/no-vfa-vect-79.c,
++ gcc.dg/vect/no-vfa-vect-102a.c, gcc.dg/vect/vect-outer-1a.c,
++ gcc.dg/vect/vect-outer-1b.c, gcc.dg/vect/vect-outer-2b.c,
++ gcc.dg/vect/vect-outer-3a.c, gcc.dg/vect/no-vfa-vect-37.c,
++ gcc.dg/vect/vect-outer-3b.c, gcc.dg/vect/no-vfa-vect-101.c,
++ gcc.dg/vect/no-vfa-vect-102.c, gcc.dg/vect/vect-reduc-dot-s8b.c,
++ gcc.dg/vect/vect-outer-1.c, gcc.dg/vect/vect-104.c: Likewise.
++ * gcc.dg/vect/vect-42.c: Run with 64 bit vectors if applicable.
++ * gcc.dg/vect/vect-multitypes-6.c, gcc.dg/vect/vect-52.c,
++ gcc.dg/vect/vect-54.c, gcc.dg/vect/vect-46.c, gcc.dg/vect/vect-48.c,
++ gcc.dg/vect/vect-96.c, gcc.dg/vect/vect-multitypes-3.c,
++ gcc.dg/vect/vect-40.c: Likewise.
++ * gcc.dg/vect/vect-outer-5.c: Remove quad-vectors option as
++ redundant.
++ * gcc.dg/vect/vect-109.c, gcc.dg/vect/vect-peel-1.c,
++ gcc.dg/vect/vect-peel-2.c, gcc.dg/vect/slp-25.c,
++ gcc.dg/vect/vect-multitypes-1.c, gcc.dg/vect/slp-3.c,
++ gcc.dg/vect/no-vfa-pr29145.c, gcc.dg/vect/vect-multitypes-4.c:
++ Likewise.
++ * gcc.dg/vect/vect-peel-4.c: Make ia global.
++
++2011-09-22 Revital Eres <revital.eres@linaro.org>
++
++ Backport from trunk -r178804:
++ * modulo-sched.c (remove_node_from_ps): Return void
++ instead of bool.
++ (optimize_sc): Adjust call to remove_node_from_ps.
++ (sms_schedule): Add print info.
++
++2011-09-16 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2011-09-15 Richard Sandiford <richard.sandiford@linaro.org>
++
++ GCC Linaro 4.6-2011.09-1 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2011-09-15 Richard Sandiford <richard.sandiford@linaro.org>
++
++ Revert:
++
++ gcc/
++ PR target/49030
++ * config/arm/arm-protos.h (maybe_get_arm_condition_code): Declare.
++ * config/arm/arm.c (maybe_get_arm_condition_code): New function,
++ reusing the old code from get_arm_condition_code. Return ARM_NV
++ for invalid comparison codes.
++ (get_arm_condition_code): Redefine in terms of
++ maybe_get_arm_condition_code.
++ * config/arm/predicates.md (arm_comparison_operator): Use
++ maybe_get_arm_condition_code.
++
++ gcc/testsuite/
++ PR target/49030
++ * gcc.dg/torture/pr49030.c: New test.
++
++2011-09-13 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2011-09-13 Andrew Stubbs <ams@codesourcery.com>
++
++ GCC Linaro 4.6-2011.09 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2011-09-12 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ Backport from FSF mainline:
++ 2011-04-06 Wei Guozhi <carrot@google.com>
++
++ PR target/47855
++ gcc/
++ * config/arm/arm.md (arm_cmpsi_insn): Compute attr "length".
++ (arm_cond_branch): Likewise.
++ (arm_cond_branch_reversed): Likewise.
++ (arm_jump): Likewise.
++ (push_multi): Likewise.
++ * config/arm/constraints.md (Py): New constraint.
++
++ 2011-04-08 Wei Guozhi <carrot@google.com>
++
++ PR target/47855
++ * config/arm/arm-protos.h (arm_attr_length_push_multi): New prototype.
++ * config/arm/arm.c (arm_attr_length_push_multi): New function.
++ * config/arm/arm.md (*push_multi): Change the length computation to
++ call a C function.
++
++2011-09-12 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ Backport from FSF mainline:
++
++ 2011-08-18 Jiangning Liu <jiangning.liu@arm.com>
++
++ gcc/
++ * config/arm/arm.md (*ior_scc_scc): Enable for Thumb2 as well.
++ (*ior_scc_scc_cmp): Likewise
++ (*and_scc_scc): Likewise.
++ (*and_scc_scc_cmp): Likewise.
++ (*and_scc_scc_nodom): Likewise.
++ (*cmp_ite0, *cmp_ite1, *cmp_and, *cmp_ior): Handle Thumb2.
++
++ gcc/testsuite
++ * gcc.target/arm/thumb2-cond-cmp-1.c: New. Make sure conditional
++ compare can be generated.
++ * gcc.target/arm/thumb2-cond-cmp-2.c: Likewise.
++ * gcc.target/arm/thumb2-cond-cmp-3.c: Likewise.
++ * gcc.target/arm/thumb2-cond-cmp-4.c: Likewise.
++
++2011-09-12 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ gcc/testsuite/
++ * gcc.target/arm/pr50099.c: Fix testcase from previous commit.
++
++2011-09-12 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ LP:838994
++ gcc/
++ Backport from mainline.
++
++ 2011-09-06 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ PR target/50099
++ * config/arm/iterators.md (qhs_zextenddi_cstr): New.
++ (qhs_zextenddi_op): New.
++ * config/arm/arm.md ("zero_extend<mode>di2"): Use them.
++ * config/arm/predicates.md ("arm_extendqisi_mem_op"):
++ Distinguish between ARM and Thumb2 states.
++
++ gcc/testsuite/
++ * gcc.target/arm/pr50099.c: New test.
++
++2011-09-12 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF mainline:
++
++ 2011-09-08 Andrew Stubbs <ams@codesourcery.com>
++
++ PR tree-optimization/50318
++
++ gcc/
++ * tree-ssa-math-opts.c (convert_plusminus_to_widen): Correct
++ typo in use of mult_rhs1 and mult_rhs2.
++
++ gcc/testsuite/
++ * gcc.target/arm/pr50318-1.c: New file.
++
++2011-09-01 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * config/arm/predicates.md (shift_amount_operand): Ensure shift
++ amount is positive.
++
++ gcc/testsuite/
++ * gcc.dg/pr50193-1.c: New file.
++
++2011-09-12 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ PR target/49030
++ * config/arm/arm-protos.h (maybe_get_arm_condition_code): Declare.
++ * config/arm/arm.c (maybe_get_arm_condition_code): New function,
++ reusing the old code from get_arm_condition_code. Return ARM_NV
++ for invalid comparison codes.
++ (get_arm_condition_code): Redefine in terms of
++ maybe_get_arm_condition_code.
++ * config/arm/predicates.md (arm_comparison_operator): Use
++ maybe_get_arm_condition_code.
++
++ gcc/testsuite/
++ PR target/49030
++ * gcc.dg/torture/pr49030.c: New test.
++
++2011-09-12 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF mainline:
++
++ 2011-08-30 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * config/arm/arm.c (optimal_immediate_sequence_1): Make b1, b2,
++ b3 and b4 unsigned.
++
++ 2011-08-30 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * config/arm/arm.c (arm_gen_constant): Set can_negate correctly
++ when code is SET.
++
++ 2011-08-26 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * config/arm/arm.c (struct four_ints): New type.
++ (count_insns_for_constant): Delete function.
++ (find_best_start): Delete function.
++ (optimal_immediate_sequence): New function.
++ (optimal_immediate_sequence_1): New function.
++ (arm_gen_constant): Move constant splitting code to
++ optimal_immediate_sequence.
++ Rewrite constant negation/invertion code.
++
++ gcc/testsuite/
++ * gcc.target/arm/thumb2-replicated-constant1.c: New file.
++ * gcc.target/arm/thumb2-replicated-constant2.c: New file.
++ * gcc.target/arm/thumb2-replicated-constant3.c: New file.
++ * gcc.target/arm/thumb2-replicated-constant4.c: New file.
++
++ 2011-08-26 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * config/arm/arm-protos.h (const_ok_for_op): Add prototype.
++ * config/arm/arm.c (const_ok_for_op): Add support for addw/subw.
++ Remove prototype. Remove static function type.
++ * config/arm/arm.md (*arm_addsi3): Add addw/subw support.
++ Add arch attribute.
++ * config/arm/constraints.md (Pj, PJ): New constraints.
++
++ 2011-04-20 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * config/arm/arm.c (arm_gen_constant): Move mowv support ....
++ (const_ok_for_op): ... to here.
++
++ 2011-04-20 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * config/arm/arm.c (arm_gen_constant): Remove redundant can_invert.
++
++
++
++2011-09-08 Andrew Stubbs <ams@codesourcery.com>
++
++ Merge from FSF GCC 4.6.1 (svn branches/gcc-4_6-branch 178681).
++
++2011-09-07 Ira Rosen <ira.rosen@linaro.org>
++
++ Backport from mainline:
++
++ 2011-08-04 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * tree-vectorizer.h (struct _stmt_vec_info): Add new field for
++ pattern def statement, and its access macro.
++ (NUM_PATTERNS): Set to 5.
++ * tree-vect-loop.c (vect_determine_vectorization_factor): Handle
++ pattern def statement.
++ (vect_transform_loop): Likewise.
++ * tree-vect-patterns.c (vect_vect_recog_func_ptrs): Add new
++ function vect_recog_over_widening_pattern ().
++ (vect_operation_fits_smaller_type): New function.
++ (vect_recog_over_widening_pattern, vect_mark_pattern_stmts):
++ Likewise.
++ (vect_pattern_recog_1): Move the code that marks pattern
++ statements to vect_mark_pattern_stmts (), and call it. Update
++ documentation.
++ * tree-vect-stmts.c (vect_supportable_shift): New function.
++ (vect_analyze_stmt): Handle pattern def statement.
++ (new_stmt_vec_info): Initialize pattern def statement.
++
++ gcc/testsuite/
++ * gcc.dg/vect/vect-over-widen-1.c: New test.
++ * gcc.dg/vect/vect-over-widen-2.c: New test.
++ * gcc.dg/vect/vect-over-widen-3.c: New test.
++ * gcc.dg/vect/vect-over-widen-4.c: New test.
++
++
++ 2011-08-09 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ PR tree-optimization/50014
++ * tree-vect-loop.c (vectorizable_reduction): Get def type before
++ calling vect_get_vec_def_for_stmt_copy ().
++
++ gcc/testsuite/
++ PR tree-optimization/50014
++ * gcc.dg/vect/pr50014.c: New test.
++
++
++ 2011-08-11 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ PR tree-optimization/50039
++ * tree-vect-patterns.c (vect_operation_fits_smaller_type): Check
++ that DEF_STMT has a stmt_vec_info.
++
++ gcc/testsuite/
++ PR tree-optimization/50039
++ * gcc.dg/vect/vect.exp: Run no-tree-fre-* tests with -fno-tree-fre.
++ * gcc.dg/vect/no-tree-fre-pr50039.c: New test.
++
++
++ 2011-09-04 Jakub Jelinek <jakub@redhat.com>
++ Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ PR tree-optimization/50208
++ * tree-vect-patterns.c (vect_handle_widen_mult_by_const): Add an
++ argument. Check that def_stmt is inside the loop.
++ (vect_recog_widen_mult_pattern): Update calls to
++ vect_handle_widen_mult_by_cons.
++ (vect_operation_fits_smaller_type): Check that def_stmt is
++ inside the loop.
++
++ gcc/testsuite/
++ PR tree-optimization/50208
++ * gcc.dg/vect/no-fre-pre-pr50208.c: New test.
++ * gcc.dg/vect/vect.exp: Run no-fre-pre-*.c tests with
++ -fno-tree-fre -fno-tree-pre.
++
++2011-09-05 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ Backport from mainline.
++ 2011-08-26 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
++
++ * config/arm/cortex-a9.md ("cortex_a9_mult_long"): New.
++ ("cortex_a9_multiply_long"): New and use above. Handle all
++ long multiply cases.
++ ("cortex_a9_multiply"): Handle smmul and smmulr.
++ ("cortex_a9_mac"): Handle smmla.
++
++2011-09-05 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ gcc/
++ 2011-08-12 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ PR target/48328
++ * config/arm/arm.h (CASE_VECTOR_SHORTEN_MODE): Fix distance
++ for tbh instructions.
++
++2011-08-26 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-08-26 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * df-problems.c (df_note_bb_compute): Pass uses rather than defs
++ to df_set_dead_notes_for_mw.
++
++2011-08-25 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF mainline:
++
++ 2011-08-19 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * tree-ssa-math-opts.c (is_widening_mult_rhs_p): Handle constants
++ beyond conversions.
++ (convert_mult_to_widen): Convert constant inputs to the right type.
++ (convert_plusminus_to_widen): Don't automatically reject inputs that
++ are not an SSA_NAME.
++ Convert constant inputs to the right type.
++
++ gcc/testsuite/
++ * gcc.target/arm/wmul-11.c: New file.
++ * gcc.target/arm/wmul-12.c: New file.
++ * gcc.target/arm/wmul-13.c: New file.
++
++ 2011-08-19 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * tree-ssa-math-opts.c (convert_plusminus_to_widen): Convert add_rhs
++ to the correct type.
++
++ gcc/testsuite/
++ * gcc.target/arm/wmul-10.c: New file.
++
++ 2011-08-19 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * tree-ssa-math-opts.c (convert_mult_to_widen): Better handle
++ unsigned inputs of different modes.
++ (convert_plusminus_to_widen): Likewise.
++
++ gcc/testsuite/
++ * gcc.target/arm/wmul-9.c: New file.
++ * gcc.target/arm/wmul-bitfield-2.c: New file.
++
++ 2011-08-19 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * tree-ssa-math-opts.c (is_widening_mult_rhs_p): Add new argument
++ 'type'.
++ Use 'type' from caller, not inferred from 'rhs'.
++ Don't reject non-conversion statements. Do return lhs in this case.
++ (is_widening_mult_p): Add new argument 'type'.
++ Use 'type' from caller, not inferred from 'stmt'.
++ Pass type to is_widening_mult_rhs_p.
++ (convert_mult_to_widen): Pass type to is_widening_mult_p.
++ (convert_plusminus_to_widen): Likewise.
++
++ gcc/testsuite/
++ * gcc.target/arm/wmul-8.c: New file.
++
++ 2011-08-19 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * tree-ssa-math-opts.c (is_widening_mult_p): Remove FIXME.
++ Ensure the the larger type is the first operand.
++
++ gcc/testsuite/
++ * gcc.target/arm/wmul-7.c: New file.
++
++ 2011-08-19 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * tree-ssa-math-opts.c (convert_mult_to_widen): Convert
++ unsupported unsigned multiplies to signed.
++ (convert_plusminus_to_widen): Likewise.
++
++ gcc/testsuite/
++ * gcc.target/arm/wmul-6.c: New file.
++
++ 2011-08-19 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * tree-ssa-math-opts.c (convert_plusminus_to_widen): Permit a single
++ conversion statement separating multiply-and-accumulate.
++
++ gcc/testsuite/
++ * gcc.target/arm/wmul-5.c: New file.
++ * gcc.target/arm/no-wmla-1.c: New file.
++
++ 2011-08-19 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * config/arm/arm.md (maddhidi4): Remove '*' from name.
++ * expr.c (expand_expr_real_2): Use find_widening_optab_handler.
++ * optabs.c (find_widening_optab_handler_and_mode): New function.
++ (expand_widen_pattern_expr): Use find_widening_optab_handler.
++ (expand_binop_directly): Likewise.
++ (expand_binop): Likewise.
++ * optabs.h (find_widening_optab_handler): New macro define.
++ (find_widening_optab_handler_and_mode): New prototype.
++ * tree-cfg.c (verify_gimple_assign_binary): Adjust WIDEN_MULT_EXPR
++ type precision rules.
++ (verify_gimple_assign_ternary): Likewise for WIDEN_MULT_PLUS_EXPR.
++ * tree-ssa-math-opts.c (build_and_insert_cast): New function.
++ (is_widening_mult_rhs_p): Allow widening by more than one mode.
++ Explicitly disallow mis-matched input types.
++ (convert_mult_to_widen): Use find_widening_optab_handler, and cast
++ input types to fit the new handler.
++ (convert_plusminus_to_widen): Likewise.
++
++ gcc/testsuite/
++ * gcc.target/arm/wmul-bitfield-1.c: New file.
++
++ 2011-08-19 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * expr.c (expand_expr_real_2): Use widening_optab_handler.
++ * genopinit.c (optabs): Use set_widening_optab_handler for $N.
++ (gen_insn): $N now means $a must be wider than $b, not consecutive.
++ * optabs.c (widened_mode): New function.
++ (expand_widen_pattern_expr): Use widening_optab_handler.
++ (expand_binop_directly): Likewise.
++ (expand_binop): Likewise.
++ * optabs.h (widening_optab_handlers): New struct.
++ (optab_d): New member, 'widening'.
++ (widening_optab_handler): New function.
++ (set_widening_optab_handler): New function.
++ * tree-ssa-math-opts.c (convert_mult_to_widen): Use
++ widening_optab_handler.
++ (convert_plusminus_to_widen): Likewise.
++
++2011-08-24 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ LP:823548
++ gcc/
++ * config/arm/arm.c (arm_init_neon_builtins): Use
++ n_operands instead of n_generator_args.
++
++2011-08-24 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ LP:823548
++ Backport from mainline
++ 2011-04-18 Jie Zhang <jie@codesourcery.com>
++ Richard Earnshaw <rearnsha@arm.com>
++
++ * arm.c (neon_builtin_type_bits): Remove.
++ (typedef enum neon_builtin_mode): New.
++ (T_MAX): Don't define.
++ (typedef enum neon_builtin_datum): Remove bits, codes[],
++ num_vars and base_fcode. Add mode, code and fcode.
++ (VAR1, VAR2, VAR3, VAR4, VAR5, VAR6, VAR7, VAR8, VAR9
++ VAR10): Change accordingly.
++ (neon_builtin_data[]): Change accordingly
++ (arm_init_neon_builtins): Change accordingly.
++ (neon_builtin_compare): Remove.
++ (locate_neon_builtin_icode): Remove.
++ (arm_expand_neon_builtin): Change accordingly.
++
++ * arm.h (enum arm_builtins): Move to ...
++ * arm.c (enum arm_builtins): ... here; and rearrange builtin code.
++
++ * arm.c (arm_builtin_decl): Declare.
++ (TARGET_BUILTIN_DECL): Define.
++ (enum arm_builtins): Correct ARM_BUILTIN_MAX.
++ (arm_builtin_decls[]): New.
++ (arm_init_neon_builtins): Store builtin declarations in
++ arm_builtin_decls[].
++ (arm_init_tls_builtins): Likewise.
++ (arm_init_iwmmxt_builtins): Likewise. Refactor initialization code.
++ (arm_builtin_decl): New.
++
++2011-08-18 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-08-18 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * config/arm/arm.c (arm_rtx_costs_1): Don't modify the costs of SET.
++ (arm_size_rtx_costs): Likewise.
++
++2011-08-18 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-08-12 Richard Sandiford <rdsandiford@googlemail.com>
++
++ * config/arm/arm.c (get_label_padding): New function.
++ (create_fix_barrier, arm_reorg): Use it.
++
++2011-08-16 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2011-08-16 Andrew Stubbs <ams@codesourcery.com>
++
++ GCC Linaro 4.6-2011.08 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2011-08-15 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ * config/rs6000/rs6000.c (paired_expand_vector_init): Don't create
++ CONST_VECTORs with symbolic elements.
++ (rs6000_expand_vector_init): Likewise.
++
++2011-08-15 Michael Hope <michael.hope@linaro.org>
++
++ Merge from FSF GCC 4.6.1 (svn branches/gcc-4_6-branch 177703).
++
++2011-08-15 Michael Hope <michael.hope@linaro.org>
++
++ Backport from mainline r177357
++
++ gcc/testsuite/
++ 2011-08-04 Ian Bolton <ian.bolton@arm.com>
++
++ * gcc.target/arm/vfp-1.c: no large negative offsets on Thumb2.
++
++2011-08-10 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-07-28 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ * config/arm/vfp.md ("*movdf_vfp"): Handle the VFP constraints
++ before the core constraints. Adjust attributes.
++ (*thumb2_movdf_vfp"): Likewise.
++
++2011-08-09 Revital Eres <revital.eres@linaro.org>
++
++ gcc/
++ Backport from trunk -r176972:
++
++ * ddg.c (create_ddg_dep_from_intra_loop_link): Remove
++ the creation of anti-dep edge from a branch.
++ (add_cross_iteration_register_deps):
++ Create anti-dep edge from a branch.
++
++2011-08-09 Revital Eres <revital.eres@linaro.org>
++
++ gcc/
++ Backport from trunk -r177235.
++ * modulo-sched.c (calculate_stage_count,
++ calculate_must_precede_follow, get_sched_window,
++ try_scheduling_node_in_cycle, remove_node_from_ps):
++ Add declaration.
++ (update_node_sched_params, set_must_precede_follow, optimize_sc):
++ New functions.
++ (reset_sched_times): Call update_node_sched_params.
++ (sms_schedule): Call optimize_sc.
++ (get_sched_window): Change function arguments.
++ (sms_schedule_by_order): Update call to get_sched_window.
++ Call set_must_precede_follow.
++ (calculate_stage_count): Add function argument.
++
++2011-07-31 Revital Eres <revital.eres@linaro.org>
++
++ gcc/
++ Backport from trunk -r176970:
++
++ * modulo-sched.c: Change comment.
++ (reset_sched_times): Fix print message.
++ (print_partial_schedule): Add print info.
++
++
++2011-07-21 Richard Sandiford <rdsandiford@googlemail.com>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-07-21 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * regcprop.c (maybe_mode_change): Check HARD_REGNO_MODE_OK.
++
++2011-07-21 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ PR middle-end/49736
++ * expr.c (all_zeros_p): Undo bogus part of last change.
++
++2011-07-21 Richard Sandiford <richard.sandiford@linaro.org>
++
++ Backport from mainline:
++ gcc/cp/
++ 2011-07-13 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * typeck2.c (split_nonconstant_init_1): Pass the initializer directly,
++ rather than a pointer to it. Return true if the whole of the value
++ was initialized by the generated statements. Use
++ complete_ctor_at_level_p instead of count_type_elements.
++
++ gcc/
++ 2011-07-13 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * tree.h (categorize_ctor_elements): Remove comment. Fix long line.
++ (count_type_elements): Delete.
++ (complete_ctor_at_level_p): Declare.
++ * expr.c (flexible_array_member_p): New function, split out from...
++ (count_type_elements): ...here. Make static. Replace allow_flexarr
++ parameter with for_ctor_p. When for_ctor_p is true, return the
++ number of elements that should appear in the top-level constructor,
++ otherwise return an estimate of the number of scalars.
++ (categorize_ctor_elements): Replace p_must_clear with p_complete.
++ (categorize_ctor_elements_1): Likewise. Use complete_ctor_at_level_p.
++ (complete_ctor_at_level_p): New function, borrowing union logic
++ from old categorize_ctor_elements_1.
++ (mostly_zeros_p): Return true if the constructor is not complete.
++ (all_zeros_p): Update call to categorize_ctor_elements.
++ * gimplify.c (gimplify_init_constructor): Update call to
++ categorize_ctor_elements. Don't call count_type_elements.
++ Unconditionally prevent clearing for variable-sized types,
++ otherwise rely on categorize_ctor_elements to detect
++ incomplete initializers.
++
++ gcc/testsuite/
++ 2011-07-13 Chung-Lin Tang <cltang@codesourcery.com>
++
++ * gcc.target/arm/pr48183.c: New test.
++
++2011-07-18 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2011-07-18 Andrew Stubbs <ams@codesourcery.com>
++
++ GCC Linaro 4.6-2011.07-0 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2011-07-15 Michael Hope <michael.hope@linaro.org>
++
++ Backport from mainline r174540
++ LP: #807573
++
++ gcc/
++ 2011-06-01 Richard Sandiford <rdsandiford@googlemail.com>
++
++ PR rtl-optimization/48830
++ PR rtl-optimization/48808
++ PR rtl-optimization/48792
++ * reload.c (push_reload): Check contains_reg_of_mode.
++ * reload1.c (strip_paradoxical_subreg): New function.
++ (gen_reload_chain_without_interm_reg_p): Use it to handle
++ paradoxical subregs.
++ (emit_output_reload_insns, gen_reload): Likewise.
++
++ gcc/testsuite/
++ 2011-06-01 Eric Botcazou <ebotcazou@adacore.com>
++ Hans-Peter Nilsson <hp@axis.com>
++
++ PR rtl-optimization/48830
++ * gcc.target/sparc/ultrasp12.c: New test.
++
++2011-07-15 Michael Hope <michael.hope@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-06-29 Nathan Sidwell <nathan@codesourcery.com>
++
++ * config/arm/unwind-arm.c (enum __cxa_type_match_result): New.
++ (cxa_type_match): Correct declaration.
++ (__gnu_unwind_pr_common): Reconstruct
++ additional indirection when __cxa_type_match returns
++ succeeded_with_ptr_to_base.
++
++ libstdc++-v3/
++ Backport from mainline:
++
++ 2011-06-29 Nathan Sidwell <nathan@codesourcery.com>
++
++ * libsupc++/eh_arm.c (__cxa_type_match): Construct address of
++ thrown object here. Return succeded_with_ptr_to_base for all
++ pointer cases.
++
++2011-07-15 Michael Hope <michael.hope@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-03-22 Eric Botcazou <ebotcazou@adacore.com>
++
++ * combine.c (simplify_set): Try harder to find the best CC mode when
++ simplifying a nested COMPARE on the RHS.
++
++2011-07-15 Michael Hope <michael.hope@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-04-05 Eric Botcazou <ebotcazou@adacore.com>
++
++ * ifcvt.c (cond_exec_process_insns): Disallow converting a block
++ that contains the prologue.
++
++ gcc/testsuite/
++ Backport from mainline:
++
++ 2011-04-01 Bernd Schmidt <bernds@codesourcery.com>
++
++ * gcc.c-torture/compile/20110401-1.c: New test.
++
++2011-07-13 Richard Sandiford <richard.sandiford@linaro.org>
++
++ Backport from mainline:
++ gcc/
++ 2011-07-07 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * reload1.c (choose_reload_regs): Use mode sizes to check whether
++ an old reload register completely defines the required value.
++
++ gcc/testsuite/
++ 2011-07-07 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * gcc.target/arm/neon-modes-3.c: New test.
++
++2011-07-11 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ gcc/
++ 2011-06-22 Dmitry Plotnikov <dplotnikov@ispras.ru>
++ Dmitry Melnik <dm@ispras.ru>
++
++ * config/arm/arm.c (neon_immediate_valid_for_shift): New function.
++ (neon_output_shift_immediate): Ditto.
++ * config/arm/arm-protos.h (neon_immediate_valid_for_shift): New
++ prototype.
++ (neon_output_shift_immediate): Ditto.
++ * config/arm/neon.md (vashl<mode>3): Modified constraint.
++ (vashr<mode>3_imm): New insn pattern.
++ (vlshr<mode>3_imm): Ditto.
++ (vashr<mode>3): Modified constraint.
++ (vlshr<mode>3): Ditto.
++ * config/arm/predicates.md (imm_for_neon_lshift_operand): New
++ predicate.
++ (imm_for_neon_rshift_operand): Ditto.
++ (imm_lshift_or_reg_neon): Ditto.
++ (imm_rshift_or_reg_neon): Ditto.
++
++ * optabs.c (init_optabs): Init optab codes for vashl, vashr, vlshr.
++
++ gcc/testsuite
++ 2011-06-22 Dmitry Plotnikov <dplotnikov@ispras.ru>
++ Dmitry Melnik <dm@ispras.ru>
++
++ * gcc.target/arm/neon-vshr-imm-1.c: New testcase.
++ * gcc.target/arm/neon-vshl-imm-1.c: New testcase.
++ * gcc.target/arm/neon-vlshr-imm-1.c: New testcase.
++
++2011-07-11 Revital Eres <revital.eres@linaro.org>
++
++ Backport from mainline -r175091
++ gcc/
++ * modulo-sched.c (struct ps_insn): Remove row_rest_count
++ field.
++ (struct partial_schedule): Add rows_length field.
++ (verify_partial_schedule): Check rows_length.
++ (ps_insert_empty_row): Handle rows_length.
++ (create_partial_schedule): Likewise.
++ (free_partial_schedule): Likewise.
++ (reset_partial_schedule): Likewise.
++ (create_ps_insn): Remove rest_count argument.
++ (remove_node_from_ps): Update rows_length.
++ (add_node_to_ps): Update rows_length and call create_ps_insn without
++ passing row_rest_count.
++ (rotate_partial_schedule): Update rows_length.
++
++2011-07-11 Revital Eres <revital.eres@linaro.org>
++
++ Backport from mainline -r175090.
++ gcc/
++ * ddg.c (add_intra_loop_mem_dep): New function.
++ (build_intra_loop_deps): Call it.
++ gcc/testsuite
++ * gcc.dg/sms-9.c: New file.
++
++2011-07-11 Ira Rosen <ira.rosen@linaro.org>
++
++ Backport from FSF:
++ 2011-06-16 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * tree-vectorizer.h (vect_recog_func_ptr): Change the first
++ argument to be a VEC of statements.
++ * tree-vect-loop.c (vect_determine_vectorization_factor): Remove the
++ assert that pattern statements have to have their vector type set.
++ * tree-vect-patterns.c (vect_recog_widen_sum_pattern):
++ Change the first argument to be a VEC of statements. Update
++ documentation.
++ (vect_recog_dot_prod_pattern, vect_recog_pow_pattern): Likewise.
++ (vect_handle_widen_mult_by_const): New function.
++ (vect_recog_widen_mult_pattern): Change the first argument to be a
++ VEC of statements. Update documentation. Check that the constant is
++ INTEGER_CST. Support multiplication by a constant that fits an
++ intermediate type - call vect_handle_widen_mult_by_const.
++ (vect_pattern_recog_1): Update vect_recog_func_ptr and its
++ call. Handle additional pattern statements if necessary.
++
++ gcc/testsuite/
++ * gcc.dg/vect/vect-widen-mult-half-u8.c: New test.
++
++ and
++ 2011-06-30 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * tree-vect-loop.c (vect_determine_vectorization_factor): Handle
++ both pattern and original statements if necessary.
++ (vect_transform_loop): Likewise.
++ * tree-vect-patterns.c (vect_pattern_recog): Update documentation.
++ * tree-vect-stmts.c (vect_mark_relevant): Add new argument.
++ Mark the pattern statement only if the original statement doesn't
++ have its own uses.
++ (process_use): Call vect_mark_relevant with additional parameter.
++ (vect_mark_stmts_to_be_vectorized): Likewise.
++ (vect_get_vec_def_for_operand): Use vectorized pattern statement.
++ (vect_analyze_stmt): Handle both pattern and original statements
++ if necessary.
++ (vect_transform_stmt): Don't store vectorized pattern statement
++ in the original statement.
++ (vect_is_simple_use_1): Use related pattern statement only if the
++ original statement is irrelevant.
++ * tree-vect-slp.c (vect_get_and_check_slp_defs): Likewise.
++
++ gcc/testsuite/
++ * gcc.dg/vect/slp-widen-mult-half.c: New test.
++ * gcc.dg/vect/vect-widen-mult-half.c: New test.
++
++2011-07-07 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ * builtins.c (get_object_alignment): Fix comment.
++ * fold-const.c (get_pointer_modulus_and_residue): Remove
++ allow_func_align. Use get_object_alignment.
++ (fold_binary_loc): Update caller.
++
++2011-07-07 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-06-29 Richard Sandiford <richard.sandiford@linaro.org>
++
++ PR tree-optimization/49545
++ * builtins.c (get_object_alignment_1): Update function comment.
++ Do not use DECL_ALIGN for functions, but test
++ TARGET_PTRMEMFUNC_VBIT_LOCATION instead.
++ * fold-const.c (get_pointer_modulus_and_residue): Don't check
++ for functions here.
++ * tree-ssa-ccp.c (get_value_from_alignment): Likewise.
++
++ gcc/testsuite/
++ Backport from mainline:
++
++ 2011-06-29 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * gcc.dg/torture/pr49169.c: Restrict to ARM and MIPS targets.
++
++2011-07-07 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-07-27 Richard Guenther <rguenther@suse.de>
++
++ PR tree-optimization/49169
++ * fold-const.c (get_pointer_modulus_and_residue): Don't rely on
++ the alignment of function decls.
++
++ gcc/testsuite/
++ Backport from mainline:
++
++ 2011-07-27 Michael Hope <michael.hope@linaro.org>
++ Richard Sandiford <richard.sandiford@linaro.org>
++
++ PR tree-optimization/49169
++ * gcc.dg/torture/pr49169.c: New test.
++
++2011-07-01 Andrew Stubbs <ams@codesourcery.com>
++
++ Merge from FSF GCC 4.6.1 (svn branches/gcc-4_6-branch 175677).
++
++2011-07-03 Ira Rosen <ira.rosen@linaro.org>
++
++ Backport from FSF:
++ 2011-06-12 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * tree-vect-data-refs.c (vect_peeling_hash_get_most_frequent):
++ Take number of iterations to peel into account for equally frequent
++ misalignment values.
++
++2011-07-01 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ Backport from mainline.
++ LP 744754
++ 2011-04-17 Chung-Lin Tang <cltang@codesourcery.com>
++
++ * config/arm/arm.c (neon_struct_mem_operand):
++ Support POST_INC/PRE_DEC memory operands.
++
++2011-06-28 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ Backport from mainline.
++ LP 791327
++ gcc/
++ 2011-06-09 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ PR target/49335
++ * config/arm/predicates.md (add_operator): New.
++ * config/arm/arm.md ("*arith_shiftsi"): Fix for SP reg usage
++ in Thumb2.
++
++2011-06-28 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ Backport from mainline.
++ gcc/
++ 2011-06-24 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ PR target/49385
++ * config/arm/thumb2.md (*thumb2_movhi_insn): Make sure atleast
++ one of the operands is a register.
++
++2011-06-28 Ira Rosen <ira.rosen@linaro.org>
++
++ Backport from FSF:
++
++ 2011-06-07 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * tree-vectorizer.h (vect_recog_func_ptr): Make last argument to be
++ a pointer.
++ * tree-vect-patterns.c (vect_recog_widen_sum_pattern,
++ vect_recog_widen_mult_pattern, vect_recog_dot_prod_pattern,
++ vect_recog_pow_pattern): Likewise.
++ (vect_pattern_recog_1): Remove declaration.
++ (widened_name_p): Remove declaration. Add new argument to specify
++ whether to check that both types are either signed or unsigned.
++ (vect_recog_widen_mult_pattern): Update documentation. Handle
++ unsigned patterns and multiplication by constants.
++ (vect_pattern_recog_1): Update vect_recog_func references. Use
++ statement information from the statement returned from pattern
++ detection functions.
++ (vect_pattern_recog): Update vect_recog_func reference.
++ * tree-vect-stmts.c (vectorizable_type_promotion): For widening
++ multiplication by a constant use the type of the other operand.
++
++ gcc/testsuite
++ * lib/target-supports.exp
++ (check_effective_target_vect_widen_mult_qi_to_hi):
++ Add NEON as supporting target.
++ (check_effective_target_vect_widen_mult_hi_to_si): Likewise.
++ (check_effective_target_vect_widen_mult_qi_to_hi_pattern): New.
++ (check_effective_target_vect_widen_mult_hi_to_si_pattern): New.
++ * gcc.dg/vect/vect-widen-mult-u8.c: Expect to be vectorized
++ using widening multiplication on targets that support it.
++ * gcc.dg/vect/vect-widen-mult-u16.c: Likewise.
++ * gcc.dg/vect/vect-widen-mult-const-s16.c: New test.
++ * gcc.dg/vect/vect-widen-mult-const-u16.c: New test.
++
++ and
++
++ 2011-06-15 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * tree-vect-loop-manip.c (remove_dead_stmts_from_loop): Remove.
++ (slpeel_tree_peel_loop_to_edge): Don't call
++ remove_dead_stmts_from_loop.
++ * tree-vect-loop.c (vect_determine_vectorization_factor): Don't
++ remove irrelevant pattern statements. For irrelevant statements
++ check if it is the last statement of a detected pattern, use
++ corresponding pattern statement instead.
++ (destroy_loop_vec_info): No need to remove pattern statements,
++ only free stmt_vec_info.
++ (vect_transform_loop): For irrelevant statements check if it is
++ the last statement of a detected pattern, use corresponding
++ pattern statement instead.
++ * tree-vect-patterns.c (vect_pattern_recog_1): Don't insert
++ pattern statements. Set basic block for the new statement.
++ (vect_pattern_recog): Update documentation.
++ * tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized): Scan
++ operands of pattern statements.
++ (vectorizable_call): Fix printing. In case of a pattern statement
++ use the lhs of the original statement when creating a dummy
++ statement to replace the original call.
++ (vect_analyze_stmt): For irrelevant statements check if it is
++ the last statement of a detected pattern, use corresponding
++ pattern statement instead.
++ * tree-vect-slp.c (vect_schedule_slp_instance): For pattern
++ statements use gsi of the original statement.
++
++ and
++ 2011-06-21 Ira Rosen <ira.rosen@linaro.org>
++
++ PR tree-optimization/49478
++ gcc/
++
++ * tree-vect-loop.c (vectorizable_reduction): Handle DOT_PROD_EXPR
++ with constant operand.
++
++2011-06-28 Michael Hope <michael.hope@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ Chung-Lin Tang <cltang@codesourcery.com>
++ Richard Earnshaw <rearnsha@arm.com>
++
++ PR target/48250
++ * config/arm/arm.c (arm_legitimize_reload_address): Update cases
++ to use sign-magnitude offsets. Reject unsupported unaligned
++ cases. Add detailed description in comments.
++ * config/arm/arm.md (reload_outdf): Disable for ARM mode; change
++ condition from TARGET_32BIT to TARGET_ARM.
++
++ Chung-Lin Tang <cltang@codesourcery.com>
++
++ * config/arm/arm.c (arm_legitimize_reload_address): For NEON
++ quad-word modes, reduce to 9-bit index range when above 1016
++ limit.
++
++2011-06-20 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ gcc/
++ Backport from mainline.
++ 2011-06-03 Julian Brown <julian@codesourcery.com>
++
++ * config/arm/arm-cores.def (strongarm, strongarm110, strongarm1100)
++ (strongarm1110): Use strongarm tuning.
++ * config/arm/arm-protos.h (tune_params): Add max_insns_skipped
++ field.
++ * config/arm/arm.c (arm_strongarm_tune): New.
++ (arm_slowmul_tune, arm_fastmul_tune, arm_xscale_tune, arm_9e_tune)
++ (arm_v6t2_tune, arm_cortex_tune, arm_cortex_a5_tune)
++ (arm_cortex_a9_tune, arm_fa726te_tune): Add max_insns_skipped field
++ setting, using previous defaults or 1 for Cortex-A5.
++ (arm_option_override): Set max_insns_skipped from current tuning.
++
++2011-06-20 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ gcc/
++ Backport from mainline.
++ 2011-06-02 Julian Brown <julian@codesourcery.com>
++
++ * config/arm/arm-cores.def (cortex-a5): Use cortex_a5 tuning.
++ * config/arm/arm.c (arm_cortex_a5_branch_cost): New.
++ (arm_cortex_a5_tune): New.
++
++ 2011-06-02 Julian Brown <julian@codesourcery.com>
++
++ * config/arm/arm-protos.h (tune_params): Add branch_cost hook.
++ * config/arm/arm.c (arm_default_branch_cost): New.
++ (arm_slowmul_tune, arm_fastmul_tune, arm_xscale_tune, arm_9e_tune)
++ (arm_v6t2_tune, arm_cortex_tune, arm_cortex_a9_tune)
++ (arm_fa726_tune): Set branch_cost field using
++ arm_default_branch_cost.
++ * config/arm/arm.h (BRANCH_COST): Use branch_cost hook from
++ current_tune structure.
++ * dojump.c (tm_p.h): Include file.
++
++ 2011-06-02 Julian Brown <julian@codesourcery.com>
++
++ * config/arm/arm-cores.def (arm1156t2-s, arm1156t2f-s): Use v6t2
++ tuning.
++ (cortex-a5, cortex-a8, cortex-a15, cortex-r4, cortex-r4f, cortex-m4)
++ (cortex-m3, cortex-m1, cortex-m0): Use cortex tuning.
++ * config/arm/arm-protos.h (tune_params): Add prefer_constant_pool
++ field.
++ * config/arm/arm.c (arm_slowmul_tune, arm_fastmul_tune)
++ (arm_xscale_tune, arm_9e_tune, arm_cortex_a9_tune)
++ (arm_fa726te_tune): Add prefer_constant_pool setting.
++ (arm_v6t2_tune, arm_cortex_tune): New.
++ * config/arm/arm.h (TARGET_USE_MOVT): Make dependent on
++ prefer_constant_pool setting.
++
++2011-06-20 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ gcc/
++ Backport from mainline
++ 2011-06-01 Paul Brook <paul@cpodesourcery.com>
++ * config/arm/arm-cores.def: Add cortex-r5. Add DIV flags to
++ Cortex-A15.
++ * config/arm/arm-tune.md: Regenerate.
++ * config/arm/arm.c (FL_DIV): Rename...
++ (FL_THUMB_DIV): ... to this.
++ (FL_ARM_DIV): Define.
++ (FL_FOR_ARCH7R, FL_FOR_ARCH7M): Use FL_THUMB_DIV.
++ (arm_arch_hwdiv): Remove.
++ (arm_arch_thumb_hwdiv, arm_arch_arm_hwdiv): New variables.
++ (arm_issue_rate): Add cortexr5.
++ * config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Set
++ __ARM_ARCH_EXT_IDIV__.
++ (TARGET_IDIV): Define.
++ (arm_arch_hwdiv): Remove.
++ (arm_arch_arm_hwdiv, arm_arch_thumb_hwdiv): New prototypes.
++ * config/arm/arm.md (tune_cortexr4): Add cortexr5.
++ (divsi3, udivsi3): New patterns.
++ * config/arm/thumb2.md (divsi3, udivsi3): Remove.
++ * doc/invoke.texi: Document ARM -mcpu=cortex-r5
++
++2011-06-14 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2011-06-14 Andrew Stubbs <ams@codesourcery.com>
++
++ GCC Linaro 4.6-2011.06-0 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2011-06-13 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ Backport from mainline:
++ gcc/
++ 2011-06-13 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ PR target/48454
++ * config/arm/neon.md (vec_pack_trunc<mode>): Set the lengths
++ correctly for the case with Quad vectors.
++
++2011-06-10 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ Backport from mainline:
++ gcc/
++ 2011-06-02 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++ * config/arm/neon.md (orndi3_neon): Actually split it.
++
++
++2011-06-10 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ Backport from mainline.
++ gcc/
++ 2011-05-26 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ * config/arm/neon.md ("orn<mode>3_neon"): Canonicalize not.
++ ("orndi3_neon"): Likewise.
++ ("bic<mode>3_neon"): Likewise.
++
++ gcc/testsuite
++ 2011-05-26 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ * gcc.target/arm/neon-vorn-vbic.c: New test.
++
++2011-06-07 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF:
++
++ 2011-06-07 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * config/arm/arm.md (*maddhidi4tb, *maddhidi4tt): New define_insns.
++ (*maddhisi4tb, *maddhisi4tt): New define_insns.
++
++ gcc/testsuite/
++ * gcc.target/arm/smlatb-1.c: New file.
++ * gcc.target/arm/smlatt-1.c: New file.
++ * gcc.target/arm/smlaltb-1.c: New file.
++ * gcc.target/arm/smlaltt-1.c: New file.
++
++2011-06-07 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF:
++
++ 2011-06-07 Bernd Schmidt <bernds@codesourcery.com>
++ Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * simplify-rtx.c (simplify_unary_operation_1): Canonicalize widening
++ multiplies.
++ * doc/md.texi (Canonicalization of Instructions): Document widening
++ multiply canonicalization.
++
++ gcc/testsuite/
++ * gcc.target/arm/mla-2.c: New test.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ * gimple.c (gimple_build_call_internal_1): Add missing call to
++ gimple_call_reset_alias_info.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/testsuite/
++ Backport from mainline:
++
++ 2011-05-03 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * gcc.dg/vect/vect-strided-u16-i3.c: New test.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/testsuite/
++ Backport from mainline:
++
++ 2011-05-03 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * lib/target-supports.exp (check_effective_target_vect_strided):
++ Replace with...
++ (check_effective_target_vect_strided2)
++ (check_effective_target_vect_strided3)
++ (check_effective_target_vect_strided4)
++ (check_effective_target_vect_strided8): ...these new functions.
++
++ * gcc.dg/vect/O3-pr39675-2.c: Update accordingly.
++ * gcc.dg/vect/costmodel/ppc/costmodel-slp-12.c: Likewise.
++ * gcc.dg/vect/fast-math-slp-27.c: Likewise.
++ * gcc.dg/vect/if-cvt-stores-vect-ifcvt-18.c: Likewise.
++ * gcc.dg/vect/pr37539.c: Likewise.
++ * gcc.dg/vect/slp-11a.c: Likewise.
++ * gcc.dg/vect/slp-11b.c: Likewise.
++ * gcc.dg/vect/slp-11c.c: Likewise.
++ * gcc.dg/vect/slp-12a.c: Likewise.
++ * gcc.dg/vect/slp-12b.c: Likewise.
++ * gcc.dg/vect/slp-18.c: Likewise.
++ * gcc.dg/vect/slp-19a.c: Likewise.
++ * gcc.dg/vect/slp-19b.c: Likewise.
++ * gcc.dg/vect/slp-21.c: Likewise.
++ * gcc.dg/vect/slp-23.c: Likewise.
++ * gcc.dg/vect/vect-cselim-1.c: Likewise.
++
++ * gcc.dg/vect/fast-math-vect-complex-3.c: Use vect_stridedN
++ instead of vect_interleave && vect_extract_even_odd.
++ * gcc.dg/vect/no-scevccp-outer-10a.c: Likewise.
++ * gcc.dg/vect/no-scevccp-outer-10b.c: Likewise.
++ * gcc.dg/vect/no-scevccp-outer-20.c: Likewise.
++ * gcc.dg/vect/vect-1.c: Likewise.
++ * gcc.dg/vect/vect-10.c: Likewise.
++ * gcc.dg/vect/vect-98.c: Likewise.
++ * gcc.dg/vect/vect-107.c: Likewise.
++ * gcc.dg/vect/vect-strided-a-mult.c: Likewise.
++ * gcc.dg/vect/vect-strided-a-u16-i2.c: Likewise.
++ * gcc.dg/vect/vect-strided-a-u16-i4.c: Likewise.
++ * gcc.dg/vect/vect-strided-a-u16-mult.c: Likewise.
++ * gcc.dg/vect/vect-strided-a-u32-mult.c: Likewise.
++ * gcc.dg/vect/vect-strided-a-u8-i2-gap.c: Likewise.
++ * gcc.dg/vect/vect-strided-a-u8-i8-gap2.c: Likewise.
++ * gcc.dg/vect/vect-strided-a-u8-i8-gap7.c: Likewise.
++ * gcc.dg/vect/vect-strided-float.c: Likewise.
++ * gcc.dg/vect/vect-strided-mult-char-ls.c: Likewise.
++ * gcc.dg/vect/vect-strided-mult.c: Likewise.
++ * gcc.dg/vect/vect-strided-same-dr.c: Likewise.
++ * gcc.dg/vect/vect-strided-u16-i2.c: Likewise.
++ * gcc.dg/vect/vect-strided-u16-i4.c: Likewise.
++ * gcc.dg/vect/vect-strided-u32-i4.c: Likewise.
++ * gcc.dg/vect/vect-strided-u32-i8.c: Likewise.
++ * gcc.dg/vect/vect-strided-u32-mult.c: Likewise.
++ * gcc.dg/vect/vect-strided-u8-i2-gap.c: Likewise.
++ * gcc.dg/vect/vect-strided-u8-i2.c: Likewise.
++ * gcc.dg/vect/vect-strided-u8-i8-gap2.c: Likewise.
++ * gcc.dg/vect/vect-strided-u8-i8-gap4.c: Likewise.
++ * gcc.dg/vect/vect-strided-u8-i8-gap7.c: Likewise.
++ * gcc.dg/vect/vect-strided-u8-i8.c: Likewise.
++ * gcc.dg/vect/vect-vfa-03.c: Likewise.
++
++ * gcc.dg/vect/no-scevccp-outer-18.c: Add vect_stridedN to the
++ target condition.
++ * gcc.dg/vect/pr30843.c: Likewise.
++ * gcc.dg/vect/pr33866.c: Likewise.
++ * gcc.dg/vect/slp-reduc-6.c: Likewise.
++ * gcc.dg/vect/vect-strided-store-a-u8-i2.c: Likewise.
++ * gcc.dg/vect/vect-strided-store-u16-i4.c: Likewise.
++ * gcc.dg/vect/vect-strided-store-u32-i2.c: Likewise.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/testsuite/
++ Backport from mainline:
++
++ 2011-05-03 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * gcc.dg/vect/slp-11.c: Split into...
++ * gcc.dg/vect/slp-11a.c, gcc.dg/vect/slp-11b.c,
++ gcc.dg/vect/slp-11c.c: ...these tests.
++ * gcc.dg/vect/slp-12a.c: Split 4-stride loop into...
++ * gcc.dg/vect/slp-12c.c: ...this new test.
++ * gcc.dg/vect/slp-19.c: Split into...
++ * gcc.dg/vect/slp-19a.c, gcc.dg/vect/slp-19b.c,
++ gcc.dg/vect/slp-19c.c: ...these new tests.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/testsuite/
++ Backport from mainline:
++
++ 2011-05-03 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * lib/target-supports.exp
++ (check_effective_target_vect_extract_even_odd_wide): Delete.
++ (check_effective_target_vect_strided_wide): Likewise.
++ * gcc.dg/vect/O3-pr39675-2.c: Use the non-wide versions instead.
++ * gcc.dg/vect/fast-math-pr35982.c: Likewise.
++ * gcc.dg/vect/fast-math-vect-complex-3.c: Likewise.
++ * gcc.dg/vect/pr37539.c: Likewise.
++ * gcc.dg/vect/slp-11.c: Likewise.
++ * gcc.dg/vect/slp-12a.c: Likewise.
++ * gcc.dg/vect/slp-12b.c: Likewise.
++ * gcc.dg/vect/slp-19.c: Likewise.
++ * gcc.dg/vect/slp-23.c: Likewise.
++ * gcc.dg/vect/vect-1.c: Likewise.
++ * gcc.dg/vect/vect-98.c: Likewise.
++ * gcc.dg/vect/vect-107.c: Likewise.
++ * gcc.dg/vect/vect-strided-float.c: Likewise.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/testsuite/
++ Backport from mainline:
++
++ 2011-04-21 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * gcc.dg/vect/vect.exp: Run the main tests twice, one with -flto
++ and once without.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainlie:
++
++ 2011-05-03 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * config/arm/neon.md (vec_load_lanes<mode><mode>): New expanders,
++ (vec_store_lanes<mode><mode>): Likewise.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-05-03 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * doc/md.texi (vec_load_lanes, vec_store_lanes): Document.
++ * optabs.h (COI_vec_load_lanes, COI_vec_store_lanes): New
++ convert_optab_index values.
++ (vec_load_lanes_optab, vec_store_lanes_optab): New convert optabs.
++ * genopinit.c (optabs): Initialize the new optabs.
++ * internal-fn.def (LOAD_LANES, STORE_LANES): New internal functions.
++ * internal-fn.c (get_multi_vector_move, expand_LOAD_LANES)
++ (expand_STORE_LANES): New functions.
++ * tree.h (build_array_type_nelts): Declare.
++ * tree.c (build_array_type_nelts): New function.
++ * tree-vectorizer.h (vect_model_store_cost): Add a bool argument.
++ (vect_model_load_cost): Likewise.
++ (vect_store_lanes_supported, vect_load_lanes_supported)
++ (vect_record_strided_load_vectors): Declare.
++ * tree-vect-data-refs.c (vect_lanes_optab_supported_p)
++ (vect_store_lanes_supported, vect_load_lanes_supported): New functions.
++ (vect_transform_strided_load): Split out statement recording into...
++ (vect_record_strided_load_vectors): ...this new function.
++ * tree-vect-stmts.c (create_vector_array, read_vector_array)
++ (write_vector_array, create_array_ref): New functions.
++ (vect_model_store_cost): Add store_lanes_p argument.
++ (vect_model_load_cost): Add load_lanes_p argument.
++ (vectorizable_store): Try to use store-lanes functions for
++ interleaved stores.
++ (vectorizable_load): Likewise load-lanes and loads.
++ * tree-vect-slp.c (vect_get_and_check_slp_defs): Update call
++ to vect_model_store_cost.
++ (vect_build_slp_tree): Likewise vect_model_load_cost.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-04-20 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * tree-vect-stmts.c (vectorizable_store): Only chain one related
++ statement per copy.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ * tree-inline.c (estimate_num_insns): Likewise.
++
++ Backport from mainline:
++
++ 2011-04-20 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * Makefile.in (INTERNAL_FN_DEF, INTERNAL_FN_H): Define.
++ (GIMPLE_H): Include $(INTERNAL_FN_H).
++ (OBJS-common): Add internal-fn.o.
++ (internal-fn.o): New rule.
++ * internal-fn.def: New file.
++ * internal-fn.h: Likewise.
++ * internal-fn.c: Likewise.
++ * gimple.h: Include internal-fn.h.
++ (GF_CALL_INTERNAL): New gf_mask.
++ (gimple_statement_call): Put fntype into a union with a new
++ internal_fn field.
++ (gimple_build_call_internal): Declare.
++ (gimple_build_call_internal_vec): Likewise.
++ (gimple_call_same_target_p): Likewise.
++ (gimple_call_internal_p): New function.
++ (gimple_call_internal_fn): Likewise.
++ (gimple_call_set_fn): Assert that the function is not internal.
++ (gimple_call_set_fndecl): Likewise.
++ (gimple_call_set_internal_fn): New function.
++ (gimple_call_addr_fndecl): Handle null functions.
++ (gimple_call_return_type): Likewise.
++ [---- Plus backport adjustments:
++ (GF_CALL_INTERNAL_FN_SHIFT): New macro.
++ (GF_CALL_INTERNAL_FN): New gf_mask.
++ ----]
++ * gimple.c (gimple_build_call_internal_1): New function.
++ (gimple_build_call_internal): Likewise.
++ (gimple_build_call_internal_vec): Likewise.
++ (gimple_call_same_target_p): Likewise.
++ (gimple_call_flags): Handle calls to internal functions.
++ (gimple_call_fnspec): New function.
++ (gimple_call_arg_flags, gimple_call_return_flags): Use it.
++ (gimple_has_side_effects): Handle null functions.
++ (gimple_rhs_has_side_effects): Likewise.
++ (gimple_call_copy_skip_args): Handle calls to internal functions.
++ * cfgexpand.c (expand_call_stmt): Likewise.
++ * expr.c (expand_expr_real_1): Assert that the call isn't internal.
++ * gimple-low.c (gimple_check_call_args): Handle calls to internal
++ functions.
++ * gimple-pretty-print.c (dump_gimple_call): Likewise.
++ * ipa-prop.c (ipa_analyze_call_uses): Handle null functions.
++ * tree-cfg.c (verify_gimple_call): Handle calls to internal functions.
++ (do_warn_unused_result): Likewise.
++ [---- Plus backport adjustments:
++ (verify_stmt): Likewise.
++ ----]
++ * tree-eh.c (same_handler_p): Use gimple_call_same_target_p.
++ * tree-ssa-ccp.c (ccp_fold_stmt): Handle calls to internal functions.
++ [---- Plus backport adjustments:
++ (fold_gimple_call): Likewise.
++ ----]
++ * tree-ssa-dom.c (hashable_expr): Use the gimple statement to record
++ the target of a call.
++ (initialize_hash_element): Update accordingly.
++ (hashable_expr_equal_p): Use gimple_call_same_target_p.
++ (iterative_hash_hashable_expr): Handle calls to internal functions.
++ (print_expr_hash_elt): Likewise.
++ * tree-ssa-pre.c (can_value_number_call): Likewise.
++ (eliminate): Handle null functions.
++ * tree-ssa-sccvn.c (visit_use): Handle calls to internal functions.
++ * tree-ssa-structalias.c (find_func_aliases): Likewise.
++ * value-prof.c (gimple_ic_transform): Likewise.
++ (gimple_indirect_call_to_profile): Likewise.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-04-14 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * tree-vectorizer.h (vect_strided_store_supported): Add a
++ HOST_WIDE_INT argument.
++ (vect_strided_load_supported): Likewise.
++ (vect_permute_store_chain): Return void.
++ (vect_transform_strided_load): Likewise.
++ (vect_permute_load_chain): Delete.
++ * tree-vect-data-refs.c (vect_strided_store_supported): Take a
++ count argument. Check that the count is a power of two.
++ (vect_strided_load_supported): Likewise.
++ (vect_permute_store_chain): Return void. Update after above changes.
++ Assert that the access is supported.
++ (vect_permute_load_chain): Likewise.
++ (vect_transform_strided_load): Return void.
++ * tree-vect-stmts.c (vectorizable_store): Update calls after
++ above interface changes.
++ (vectorizable_load): Likewise.
++ (vect_analyze_stmt): Don't check for strided powers of two here.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-04-14 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * tree-vectorizer.h (vect_create_data_ref_ptr): Add an extra
++ type parameter.
++ * tree-vect-data-refs.c (vect_create_data_ref_ptr): Add an aggr_type
++ parameter. Generalise code to handle arrays as well as vectors.
++ (vect_setup_realignment): Update accordingly.
++ * tree-vect-stmts.c (vectorizable_store): Likewise.
++ (vectorizable_load): Likewise.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-04-14 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * tree-vect-stmts.c (vectorizable_load): Allocate and free dr_chain
++ within the per-copy loop.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-04-14 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * tree-vect-stmts.c (vectorizable_load): Print the number of copies
++ in the dump file.
++
++2001-06-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-03-25 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * config/arm/arm.h (CANNOT_CHANGE_MODE_CLASS): Restrict FPA_REGS
++ case to VFPv1.
++
++2011-05-26 Andrew Stubbs <ams@codesourcery.com>
++
++ Merge from FSF GCC 4.6 (svn branches/gcc-4_6-branch 174261).
++
++2011-06-02 Chung-Lin Tang <cltang@codesourcery.com>
++
++ Backport from mainline:
++
++ 2011-03-21 Chung-Lin Tang <cltang@codesourcery.com>
++
++ gcc/
++ * simplify-rtx.c (simplify_binary_operation_1): Handle
++ (xor (and A B) C) case when B and C are both constants.
++
++ gcc/testsuite/
++ * gcc.target/arm/xor-and.c: New.
++
++ 2011-03-18 Chung-Lin Tang <cltang@codesourcery.com>
++
++ gcc/
++ * combine.c (try_combine): Do simplification only call of
++ subst() on i2 even when i1 is present. Update comments.
++
++ gcc/testsuite/
++ * gcc.target/arm/unsigned-extend-1.c: New.
++
++2011-05-16 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2011-05-16 Andrew Stubbs <ams@codesourcery.com>
++
++ GCC Linaro 4.6-2011.05-0 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2011-05-13 Revital Eres <revital.eres@linaro.org>
++
++ gcc/
++ * ddg.c (free_ddg_all_sccs): Free sccs field in struct ddg_all_sccs.
++ * modulo-sched.c (sms_schedule): Avoid unfreed memory when SMS fails.
++
++2011-05-13 Revital Eres <revital.eres@linaro.org>
++
++ gcc/
++ * loop-doloop.c (doloop_condition_get): Support new form of
++ doloop pattern and use prev_nondebug_insn instead of PREV_INSN.
++ * config/arm/thumb2.md (*thumb2_addsi3_compare0): Remove "*".
++ (doloop_end): New.
++ * config/arm/arm.md (*addsi3_compare0): Remove "*".
++ * params.def (sms-min-sc): New param flag.
++ * doc/invoke.texi (sms-min-sc): Document it.
++ * ddg.c (create_ddg_dep_from_intra_loop_link): If a true dep edge
++ enters the branch create an anti edge in the opposite direction
++ to prevent the creation of reg-moves.
++ * modulo-sched.c: Adjust comment to reflect the fact we are
++ scheduling closing branch.
++ (PS_STAGE_COUNT): Rename to CALC_STAGE_COUNT and redefine.
++ (stage_count): New field in struct partial_schedule.
++ (calculate_stage_count): New function.
++ (normalize_sched_times): Rename to reset_sched_times and handle
++ incrementing the sched time of the nodes by a constant value
++ passed as parameter.
++ (duplicate_insns_of_cycles): Skip closing branch.
++ (sms_schedule_by_order): Schedule closing branch.
++ (ps_insn_find_column): Handle closing branch.
++ (sms_schedule): Call reset_sched_times and adjust the code to
++ support scheduling of the closing branch. Use sms-min-sc.
++ Support new form of doloop pattern.
++ (ps_insert_empty_row): Update calls to normalize_sched_times
++ and rotate_partial_schedule functions.
++
++2011-05-12 Michael Hope <michael.hope@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-05-05 Michael Hope <michael.hope@linaro.org>
++
++ PR pch/45979
++ * config/host-linux.c (TRY_EMPTY_VM_SPACE): Define for
++ __ARM_EABI__ hosts.
++
++2011-05-06 Andrew Stubbs <ams@codesourcery.com>
++
++ Merge from FSF GCC 4.6 (svn branches/gcc-4_6-branch 173480).
++
++2011-05-06 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ From Sergey Grechanik <mouseentity@ispras.ru>, approved for mainline
++
++ * config/arm/arm.c (coproc_secondary_reload_class): Return NO_REGS
++ for constant vectors.
++
++2011-04-26 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF:
++
++ 2011-04-05 Tom de Vries <tom@codesourcery.com>
++
++ PR target/43920
++ gcc/
++ * config/arm/arm.h (BRANCH_COST): Set to 1 for Thumb-2 when optimizing
++ for size.
++
++2011-05-03 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/testsuite/
++ From Richard Earnshaw <rearnsha@arm.com>
++
++ PR target/46329
++ * gcc.target/arm/pr46329.c: New test.
++
++ gcc/
++ PR target/46329
++ * config/arm/arm.c (arm_legitimate_constant_p_1): Return false
++ for all Neon struct constants.
++
++2011-05-03 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ * targhooks.h (default_legitimate_constant_p); Declare.
++ * targhooks.c (default_legitimate_constant_p): New function.
++
++ Backport from mainline:
++ 2011-04-21 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * target.def (legitimate_constant_p): New hook.
++ * doc/tm.texi.in (LEGITIMATE_CONSTANT_P): Replace with...
++ (TARGET_LEGITIMATE_CONSTANT_P): ...this.
++ * doc/tm.texi: Regenerate.
++ * calls.c (precompute_register_parameters): Replace uses of
++ LEGITIMATE_CONSTANT_P with targetm.legitimate_constant_p.
++ (emit_library_call_value_1): Likewise.
++ * expr.c (move_block_to_reg, can_store_by_pieces, emit_move_insn)
++ (compress_float_constant, emit_push_insn, expand_expr_real_1): Likewise.
++ * recog.c (general_operand, immediate_operand): Likewise.
++ * reload.c (find_reloads_toplev, find_reloads_address_part): Likewise.
++ * reload1.c (init_eliminable_invariants): Likewise.
++
++ * config/arm/arm-protos.h (arm_cannot_force_const_mem): Delete.
++ * config/arm/arm.h (ARM_LEGITIMATE_CONSTANT_P): Likewise.
++ (THUMB_LEGITIMATE_CONSTANT_P, LEGITIMATE_CONSTANT_P): Likewise.
++ * config/arm/arm.c (TARGET_LEGITIMATE_CONSTANT_P): Define.
++ (arm_legitimate_constant_p_1, thumb_legitimate_constant_p)
++ (arm_legitimate_constant_p): New functions.
++ (arm_cannot_force_const_mem): Make static.
++
++2011-05-03 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-05-03 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * hooks.h (hook_bool_mode_uhwi_false): Declare.
++ * hooks.c (hook_bool_mode_uhwi_false): New function.
++ * target.def (array_mode_supported_p): New hook.
++ * doc/tm.texi.in (TARGET_ARRAY_MODE_SUPPORTED_P): Add @hook.
++ * doc/tm.texi: Regenerate.
++ * stor-layout.c (mode_for_array): New function.
++ (layout_type): Use it.
++ * config/arm/arm.c (arm_array_mode_supported_p): New function.
++ (TARGET_ARRAY_MODE_SUPPORTED_P): Define.
++
++2011-05-03 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-04-12 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * config/arm/arm.c (arm_print_operand): Use MEM_SIZE to get the
++ size of a '%A' memory reference.
++ (T_DREG, T_QREG): New neon_builtin_type_bits.
++ (arm_init_neon_builtins): Assert that the load and store operands
++ are neon_struct_operands.
++ (locate_neon_builtin_icode): Provide the neon_builtin_type_bits.
++ (NEON_ARG_MEMORY): New builtin_arg.
++ (neon_dereference_pointer): New function.
++ (arm_expand_neon_args): Add a neon_builtin_type_bits argument.
++ Handle NEON_ARG_MEMORY.
++ (arm_expand_neon_builtin): Update after above interface changes.
++ Use NEON_ARG_MEMORY for loads and stores.
++ * config/arm/predicates.md (neon_struct_operand): New predicate.
++ * config/arm/iterators.md (V_two_elem): Tweak formatting.
++ (V_three_elem): Use BLKmode for accesses that have no associated mode.
++ (V_four_elem): Tweak formatting.
++ * config/arm/neon.md (neon_vld1<mode>, neon_vld1_dup<mode>)
++ (neon_vst1_lane<mode>, neon_vst1<mode>, neon_vld2<mode>)
++ (neon_vld2_lane<mode>, neon_vld2_dup<mode>, neon_vst2<mode>)
++ (neon_vst2_lane<mode>, neon_vld3<mode>, neon_vld3_lane<mode>)
++ (neon_vld3_dup<mode>, neon_vst3<mode>, neon_vst3_lane<mode>)
++ (neon_vld4<mode>, neon_vld4_lane<mode>, neon_vld4_dup<mode>)
++ (neon_vst4<mode>): Replace pointer operand with a memory operand.
++ Use %A in the output template.
++ (neon_vld3qa<mode>, neon_vld3qb<mode>, neon_vst3qa<mode>)
++ (neon_vst3qb<mode>, neon_vld4qa<mode>, neon_vld4qb<mode>)
++ (neon_vst4qa<mode>, neon_vst4qb<mode>): Likewise, but halve
++ the width of the memory access. Remove post-increment.
++ * config/arm/neon-testgen.ml: Allow addresses to have an alignment.
++
++ gcc/testsuite/
++ Backport from mainline:
++
++ 2011-04-12 Richard Sandiford <richard.sandiford@linaro.org>
++
++ * gcc.target/arm/neon-vld3-1.c: New test.
++ * gcc.target/arm/neon-vst3-1.c: New test.
++ * gcc.target/arm/neon/v*.c: Regenerate.
++
++2011-05-03 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ Backport from mainline:
++
++ 2011-03-30 Richard Sandiford <richard.sandiford@linaro.org>
++ Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ PR target/43590
++ * config/arm/neon.md (neon_vld3qa<mode>, neon_vld4qa<mode>): Remove
++ operand 1 and reshuffle the operands to match.
++ (neon_vld3<mode>, neon_vld4<mode>): Update accordingly.
++
++2011-05-04 Richard Sandiford <richard.sandiford@linaro.org>
++
++ Backport from mainline:
++
++ 2011-03-29 Richard Sandiford <richard.sandiford@linaro.org>
++
++ PR debug/48190
++ * dwarf2out.c (dw_loc_list_node): Add resolved_addr and replaced.
++ (cached_dw_loc_list_def): New structure.
++ (cached_dw_loc_list): New typedef.
++ (cached_dw_loc_list_table): New variable.
++ (cached_dw_loc_list_table_hash): New function.
++ (cached_dw_loc_list_table_eq): Likewise.
++ (add_location_or_const_value_attribute): Take a bool cache_p.
++ Cache the list when the parameter is true.
++ (gen_formal_parameter_die): Update caller.
++ (gen_variable_die): Likewise.
++ (dwarf2out_finish): Likewise.
++ (dwarf2out_abstract_function): Nullify cached_dw_loc_list_table
++ while generating debug info for the decl.
++ (dwarf2out_function_decl): Clear cached_dw_loc_list_table.
++ (dwarf2out_init): Initialize cached_dw_loc_list_table.
++ (resolve_addr): Cache the result of resolving a chain of
++ location lists.
++
++2011-04-26 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF:
++
++ 2011-04-15 Maxim Kuvyrkov <maxim@codesourcery.com>
++
++ gcc/
++ * combine.c (subst, combine_simlify_rtx): Add new argument, use it
++ to track processing of conditionals. Update all callers.
++ (try_combine, simplify_if_then_else): Update.
++
++ 2011-04-25 Maxim Kuvyrkov <maxim@codesourcery.com>
++ Eric Botcazou <ebotcazou@adacore.com>
++
++ gcc/
++ * combine.c (combine_simplify_rtx): Avoid mis-simplifying conditionals
++ for STORE_FLAG_VALUE==-1 case.
++
++2011-05-02 Ira Rosen <ira.rosen@linaro.org>
++
++ Backport from FSF:
++
++ 2011-03-27 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * config/arm/arm.c (arm_autovectorize_vector_sizes): New function.
++ (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES): Define.
++
++ gcc/testsuite/
++ * gcc.dg/vect/vect-outer-5.c: Reduce the distance between data
++ accesses to preserve the meaning of the test for doubleword vectors.
++ * gcc.dg/vect/no-vfa-pr29145.c: Likewise.
++ * gcc.dg/vect/slp-3.c: Reduce the loop bound for the same reason.
++
++2011-04-27 Ira Rosen <ira.rosen@linaro.org>
++
++ Backport from FSF:
++
++ 2011-04-03 Richard Guenther <rguenther@suse.de>
++ Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * tree-if-conv.c (memrefs_read_or_written_unconditionally): Strip all
++ non-variable offsets and compare the remaining bases of the two
++ accesses instead of looking for exact same data-ref.
++
++ gcc/testsuite/
++ * gcc.dg/vect/if-cvt-stores-vect-ifcvt-18.c: New test.
++ * gcc.dg/vect/vect.exp: Run if-cvt-stores-vect* tests with
++ -ftree-loop-if-convert-stores.
++
++2011-04-21 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF:
++
++ 2008-12-03 Daniel Jacobowitz <dan@codesourcery.com>
++
++ gcc/testsuite/
++ * gcc.dg/vect/vect-shift-3.c, gcc.dg/vect/vect-shift-4.c: New.
++ * lib/target-supports.exp (check_effective_target_vect_shift_char): New
++ function.
++
++2011-04-19 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2011-04-19 Andrew Stubbs <ams@codesourcery.com>
++
++ GCC Linaro 4.6-2011.04-0 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2011-04-13 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ Backport from FSF:
++
++ 2011-04-12 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
++
++ gcc/
++ * config/arm/arm.md (*arm_negdi2): Fix early clobber constraints.
++
++2011-03-27 Ira Rosen <ira.rosen@linaro.org>
++
++ gcc/
++ * doc/invoke.texi (max-stores-to-sink): Document.
++ * params.h (MAX_STORES_TO_SINK): Define.
++ * opts.c (finish_options): Set MAX_STORES_TO_SINK to 0
++ if either vectorization or if-conversion is disabled.
++ * tree-data-ref.c (dr_equal_offsets_p1): Moved and renamed from
++ tree-vect-data-refs.c vect_equal_offsets.
++ (dr_equal_offsets_p): New function.
++ (find_data_references_in_bb): Remove static.
++ * tree-data-ref.h (find_data_references_in_bb): Declare.
++ (dr_equal_offsets_p): Likewise.
++ * tree-vect-data-refs.c (vect_equal_offsets): Move to tree-data-ref.c.
++ (vect_drs_dependent_in_basic_block): Update calls to
++ vect_equal_offsets.
++ (vect_check_interleaving): Likewise.
++ * tree-ssa-phiopt.c: Include cfgloop.h and tree-data-ref.h.
++ (cond_if_else_store_replacement): Rename to...
++ (cond_if_else_store_replacement_1): ... this. Change arguments and
++ documentation.
++ (cond_if_else_store_replacement): New function.
++ * Makefile.in (tree-ssa-phiopt.o): Adjust dependencies.
++ * params.def (PARAM_MAX_STORES_TO_SINK): Define.
++
++ gcc/testsuite/
++ * gcc.dg/vect/vect-cselim-1.c: New test.
++ * gcc.dg/vect/vect-cselim-2.c: New test.
++
++2011-04-07 Andrew Stubbs <ams@codesourcery.com>
++
++ Merge from FSF GCC 4.6 (svn branches/gcc-4_6-branch 171921).
++
++2011-03-23 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF:
++
++ 2011-03-23 Julian Brown <julian@codesourcery.com>
++
++ gcc/
++ * expr.c (expand_expr_real_1): Only use BLKmode for volatile
++ accesses which are not naturally aligned.
++
++2011-03-26 Andrew Stubbs <ams@codesourcery.com>
++
++ Merge from FSF GCC 4.6 (svn branches/gcc-4_6-branch 171336).
++
++2011-03-22 Andrew Stubbs <ams@codesourcery.com>
++
++ Backport from FSF:
++
++ 2011-03-21 Daniel Jacobowitz <dan@codesourcery.com>
++
++ gcc/
++ * config/arm/unwind-arm.c (__gnu_unwind_pr_common): Correct test
++ for barrier handlers.
++
++2011-03-13 Andrew Stubbs <ams@codesourcery.com>
++
++ Merge from FSF GCC 4.6 (trunk svn 170846).
++
++2011-03-10 Andrew Stubbs <ams@codesourcery.com>
++
++ Merge from FSF GCC 4.6 (trunk svn 170669).
++
++2011-03-03 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2011-03-03 Andrew Stubbs <ams@codesourcery.com>
++
++ GCC Linaro 4.6-2011.03-0 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2011-02-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ * config/arm/predicates.md (neon_lane_number): Accept 0..15.
++
++ gcc/testsuite/
++ * gcc.target/arm/neon-vld-1.c: New test.
++
++2011-02-02 Richard Sandiford <richard.sandiford@linaro.org>
++
++ gcc/
++ PR target/47551
++ * config/arm/arm.c (coproc_secondary_reload_class): Handle
++ structure modes. Don't check neon_vector_mem_operand for
++ vector or structure modes.
++
++ gcc/testsuite/
++ PR target/47551
++ * gcc.target/arm/neon-modes-2.c: New test.
++
++2011-02-28 Andrew Stubbs <ams@codesourcery.com>
++
++ Merge from FSF GCC 4.6 (trunk svn 170492).
++
++2011-02-25 Andrew Stubbs <ams@codesourcery.com>
++
++ Merge from FSF GCC 4.6 (trunk svn 170356).
++
++2011-02-21 Andrew Stubbs <ams@codesourcery.com>
++ Julian Brown <julian@codesourcery.com>
++ Mark Shinwell <shinwell@codesourcery.com>
++
++ Forward-ported from Linaro GCC 4.5 (bzr99324).
++
++ gcc/
++ * config/arm/arm.h (arm_class_likely_spilled_p): Check against
++ LO_REGS only for Thumb-1.
++ (MODE_BASE_REG_CLASS): Restrict base registers to those which can
++ be used in short instructions when optimising for size on Thumb-2.
++
++2011-02-19 Andrew Stubbs <ams@codesourcery.com>
++
++ Merged from Linaro GCC 4.5 (bzr99409).
++
++ 2010-09-30 Jie Zhang <jie@codesourcery.com>
++
++ gcc/testsuite/
++ * gcc.target/arm/neon-thumb2-move.c: Add
++ dg-require-effective-target arm_thumb2_ok.
++
++2011-02-19 Andrew Stubbs <ams@codesourcery.com>
++
++ Merged from Linaro GCC 4.5 (bzr99325).
++
++ 2006-04-21 Kazu Hirata <kazu@codesourcery.com>
++
++ gcc/testsuite/
++ * gcc.target/arm/vfp-ldmdbd.c, gcc.target/arm/vfp-ldmdbs.c,
++ gcc.target/arm/vfp-ldmiad.c, gcc.target/arm/vfp-ldmias.c,
++ gcc.target/arm/vfp-stmdbd.c, gcc.target/arm/vfp-stmdbs.c,
++ gcc.target/arm/vfp-stmiad.c, gcc.target/arm/vfp-stmias.c: New.
++
++2011-02-19 Andrew Stubbs <ams@codesourcery.com>
++
++ gcc/
++ * configure: Regenerate.
++ * configure.ac (PKGVERSION): Set default to a custom
++ Linaro string.
++ * LINARO-VERSION: New file.
++
++Imported GCC from FSF trunk SVN revision 170067.
+--- a/src/boehm-gc/ChangeLog
++++ b/src/boehm-gc/ChangeLog
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/boehm-gc/configure
++++ b/src/boehm-gc/configure
+@@ -9604,7 +9604,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -10520,7 +10520,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -10538,7 +10538,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -12428,7 +12428,7 @@
+ esac
+ ;;
+
+- freebsd[12]*)
++ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ ld_shlibs_CXX=no
+@@ -14203,7 +14203,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -14221,7 +14221,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+--- a/src/configure
++++ b/src/configure
+@@ -6944,10 +6944,6 @@
+ extra_arflags_for_target=" -X32_64"
+ extra_nmflags_for_target=" -B -X32_64"
+ ;;
+- *-*-darwin[3-9]*)
+- # ranlib before Darwin10 requires the -c flag to look at common symbols.
+- extra_ranlibflags_for_target=" -c"
+- ;;
+ mips*-*-pe | sh*-*-pe | *arm-wince-pe)
+ target_makefile_frag="config/mt-wince"
+ ;;
+--- a/src/configure.ac
++++ b/src/configure.ac
+@@ -2428,10 +2428,6 @@
+ extra_arflags_for_target=" -X32_64"
+ extra_nmflags_for_target=" -B -X32_64"
+ ;;
+- *-*-darwin[[3-9]]*)
+- # ranlib before Darwin10 requires the -c flag to look at common symbols.
+- extra_ranlibflags_for_target=" -c"
+- ;;
+ mips*-*-pe | sh*-*-pe | *arm-wince-pe)
+ target_makefile_frag="config/mt-wince"
+ ;;
+--- a/src/gcc/ChangeLog
++++ b/src/gcc/ChangeLog
+@@ -1,3 +1,161 @@
++2011-11-25 Richard Sandiford <richard.sandiford@linaro.org>
++
++ Backport from mainline:
++
++ 2011-03-29 Richard Sandiford <richard.sandiford@linaro.org>
++
++ PR debug/48190
++ * dwarf2out.c (dw_loc_list_node): Add resolved_addr and replaced.
++ (cached_dw_loc_list_def): New structure.
++ (cached_dw_loc_list): New typedef.
++ (cached_dw_loc_list_table): New variable.
++ (cached_dw_loc_list_table_hash): New function.
++ (cached_dw_loc_list_table_eq): Likewise.
++ (add_location_or_const_value_attribute): Take a bool cache_p.
++ Cache the list when the parameter is true.
++ (gen_formal_parameter_die): Update caller.
++ (gen_variable_die): Likewise.
++ (dwarf2out_finish): Likewise.
++ (dwarf2out_abstract_function): Nullify cached_dw_loc_list_table
++ while generating debug info for the decl.
++ (dwarf2out_function_decl): Clear cached_dw_loc_list_table.
++ (dwarf2out_init): Initialize cached_dw_loc_list_table.
++ (resolve_addr): Cache the result of resolving a chain of
++ location lists.
++
++2011-11-24 Enkovich Ilya <ilya.enkovich@intel.com>
++
++ PR target/51287
++ * i386.c (distance_non_agu_define): Fix insn attr check.
++
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
++2011-11-19 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR rtl-optimization/51187
++ * reorg.c (relax_delay_slots): Do not consider a jump useless if there
++ is a barrier between the jump and its target label.
++
++2011-11-19 Richard Earnshaw <rearnsha@arm.com>
++
++ PR target/50493
++ * config/arm/arm.c (neon_disambiguate_copy): Correctly handle partial
++ overlap of src and dest operands.
++
++2011-11-18 Iain Sandoe <iains@gcc.gnu.org>
++
++ PR target/49992
++ * configure.ac: Remove ranlib special-casing for Darwin.
++ * configure: Regenerate.
++
++2011-11-16 Richard Earnshaw <rearnsha@arm.com>
++ Bernd Schmidt <bernds@coudesourcery.com>
++ Sebastian Huber <sebastian.huber@embedded-brains.de>
++
++ PR target/49641
++ * config/arm/arm.c (store_multiple_sequence): Avoid cases where
++ the base reg is stored iff compiling for Thumb1.
++
++2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
++
++ PR target/48108
++ Backport from mainline r180523
++ * config/darwin.c (top level): Amend comments concerning LTO output.
++ (lto_section_num): New variable. (darwin_lto_section_e): New GTY.
++ (LTO_SECTS_SECTION, LTO_INDEX_SECTION): New.
++ (LTO_NAMES_SECTION): Rename.
++ (darwin_asm_named_section): Record LTO section counts and switches
++ in a vec of darwin_lto_section_e.
++ (darwin_file_start): Remove unused code.
++ (darwin_file_end): Put an LTO section termination label. Handle
++ output of the wrapped LTO sections, index and names table.
++
++2011-11-12 Iain Sandoe <iains@gcc.gnu.org>
++
++ PR target/45233
++ * config/rs6000/rs6000.c (rs6000_legitimize_reload_address):
++ Only expand a symbol ref. into an access when the entity is defined
++ in the TU.
++
++2011-11-10 Jakub Jelinek <jakub@redhat.com>
++
++ PR middle-end/51077
++ * tree-object-size.c (addr_object_size): Check TREE_CODE of
++ MEM_REF's operand rather than code of the MEM_REF itself.
++
++2011-11-07 Alan Modra <amodra@gmail.com>
++
++ PR target/30282
++ * config/rs6000/rs6000.c (rs6000_emit_stack_reset): Always emit
++ blockage for ABI_V4.
++
++2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR c++/50608
++ * c-parser.c (c_parser_postfix_expression) <RID_OFFSETOF>: Adjust call
++ to fold_offsetof.
++ * c-typeck.c (build_unary_op) <ADDR_EXPR>: Call fold_offsetof_1.
++
++2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR target/50979
++ * config/sparc/sparc.h (ASM_CPU_SPEC): Pass -Av8 if -mcpu=v8.
++
++2011-11-03 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.md (lround<X87MODEF:mode><SWI248x:mode>2,
++ rint<mode>2, floor<mode>2, lfloor<MODEF:mode><SWI48:mode>2,
++ btrunc<mode>2, lwp_lwpval<mode>3): Use operands[N] instead of operandN.
++
++2011-11-02 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR target/50945
++ * config/sparc/sparc.md (movsf_insn): Reindent constraints.
++ (movsf_insn_no_fpu): Likewise.
++ (movdf_insn_sp32): Likewise.
++ (movdf_insn_sp32_no_fpu): Likewise.
++ (movdf_insn_sp32_v9): Likewise. Remove redundant GY constraint.
++ (movdf_insn_sp32_v9_no_fpu): Likewise.
++ (movdf_insn_sp64): Likewise.
++ (movdf_insn_sp64_no_fpu): Likewise.
++ (movtf_insn_sp32): Likewise.
++ (movtf_insn_sp32_no_fpu): Likewise.
++ (movtf_insn_sp64): Likewise.
++ (movtf_insn_sp64_hq): Likewise.
++ (movtf_insn_sp64_no_fpu): Likewise.
++
++2011-11-02 Bernd Schmidt <bernds@codesourcery.com>
++
++ * cfgcleanup.c (try_head_merge_bb): If get_condition returns
++ NULL for a jump that is a cc0 insn, pick the previous insn for
++ move_before.
++
++2011-11-01 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.md (splitters for int-float conversion): Use
++ SUBREG_REG on SUBREGs in splitter constraints.
++
++2011-11-01 Julian Brown <julian@codesourcery.com>
++
++ PR rtl-optimization/47918
++ * reload1.c (set_initial_label_offsets): Use initial offsets
++ for labels on the nonlocal_goto_handler_labels chain.
++
++2011-10-29 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
++
++ PR target/50691
++ * config/pa/pa.c (emit_move_sequence): Legitimize TLS symbol references.
++ * config/pa/pa.h (LEGITIMATE_CONSTANT_P): Return false for
++ TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC symbol references.
++
++2011-10-27 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/50875
++ * config/i386/sse.md (*avx_unpcklpd256): Remove extra insn
++ constraints. Change alternative 1 to "x,m,1".
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+@@ -144,8 +307,8 @@
+
+ 2011-10-07 Bernd Schmidt <bernds@codesourcery.com>
+
+- PR target/49049
+- * config/arm/arm.md (arm_subsi3_insn): Lose the last alternative.
++ PR target/49049
++ * config/arm/arm.md (arm_subsi3_insn): Lose the last alternative.
+
+ 2011-10-06 Jakub Jelinek <jakub@redhat.com>
+
+--- a/src/gcc/DATESTAMP
++++ b/src/gcc/DATESTAMP
+@@ -1 +1 @@
+-20111026
++20111201
+--- a/src/gcc/LINARO-VERSION
++++ b/src/gcc/LINARO-VERSION
+@@ -0,0 +1 @@
++4.6-2011.12
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -888,6 +888,8 @@
+ READ_MD_H = $(OBSTACK_H) $(HASHTAB_H) read-md.h
+ PARAMS_H = params.h params.def
+ BUILTINS_DEF = builtins.def sync-builtins.def omp-builtins.def
++INTERNAL_FN_DEF = internal-fn.def
++INTERNAL_FN_H = internal-fn.h $(INTERNAL_FN_DEF)
+ TREE_H = tree.h all-tree.def tree.def c-family/c-common.def \
+ $(lang_tree_files) $(MACHMODE_H) tree-check.h $(BUILTINS_DEF) \
+ $(INPUT_H) statistics.h $(VEC_H) treestruct.def $(HASHTAB_H) \
+@@ -897,7 +899,7 @@
+ BASIC_BLOCK_H = basic-block.h $(PREDICT_H) $(VEC_H) $(FUNCTION_H) cfghooks.h
+ GIMPLE_H = gimple.h gimple.def gsstruct.def pointer-set.h $(VEC_H) \
+ $(GGC_H) $(BASIC_BLOCK_H) $(TARGET_H) tree-ssa-operands.h \
+- tree-ssa-alias.h vecir.h
++ tree-ssa-alias.h vecir.h $(INTERNAL_FN_H)
+ GCOV_IO_H = gcov-io.h gcov-iov.h auto-host.h
+ COVERAGE_H = coverage.h $(GCOV_IO_H)
+ DEMANGLE_H = $(srcdir)/../include/demangle.h
+@@ -1269,6 +1271,7 @@
+ init-regs.o \
+ input.o \
+ integrate.o \
++ internal-fn.o \
+ intl.o \
+ ira.o \
+ ira-build.o \
+@@ -2422,7 +2425,8 @@
+ tree-ssa-phiopt.o : tree-ssa-phiopt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+ $(TM_H) $(GGC_H) $(TREE_H) $(TM_P_H) $(BASIC_BLOCK_H) \
+ $(TREE_FLOW_H) $(TREE_PASS_H) $(TREE_DUMP_H) langhooks.h $(FLAGS_H) \
+- $(DIAGNOSTIC_H) $(TIMEVAR_H) pointer-set.h domwalk.h
++ $(DIAGNOSTIC_H) $(TIMEVAR_H) pointer-set.h domwalk.h $(CFGLOOP_H) \
++ $(TREE_DATA_REF_H)
+ tree-nrv.o : tree-nrv.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+ $(TM_H) $(TREE_H) $(FUNCTION_H) $(BASIC_BLOCK_H) $(FLAGS_H) \
+ $(DIAGNOSTIC_H) $(TREE_FLOW_H) $(TIMEVAR_H) $(TREE_DUMP_H) $(TREE_PASS_H) \
+@@ -2750,6 +2754,8 @@
+ $(TM_H) $(TREE_H) $(DIAGNOSTIC_CORE_H) $(DIAGNOSTIC_H) $(TREE_FLOW_H) \
+ $(TREE_PASS_H) tree-ssa-propagate.h tree-pretty-print.h \
+ gimple-pretty-print.h
++internal-fn.o : internal-fn.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
++ $(GIMPLE_H) $(TREE_H) $(EXPR_H) $(OPTABS_H) $(RECOG_H)
+ gimple.o : gimple.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
+ $(GGC_H) $(GIMPLE_H) $(DIAGNOSTIC_CORE_H) $(DIAGNOSTIC_H) gt-gimple.h \
+ $(TREE_FLOW_H) value-prof.h $(FLAGS_H) $(DEMANGLE_H) \
+--- a/src/gcc/ada/ChangeLog
++++ b/src/gcc/ada/ChangeLog
+@@ -1,3 +1,33 @@
++2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
++
++ Backport from mainline r181474
++ PR target/50678
++ * init.c (__gnat_error_handler) [Darwin]: Move work-around to the
++ bug filed as radar #10302855 from __gnat_error_handler ...
++ ... to (__gnat_adjust_context_for_raise) [Darwin]: New.
++ (HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE) [Darwin]: Define.
++ (__gnat_error_handler) [Darwin]: Use __gnat_adjust_context_for_raise.
++
++2011-11-18 Tristan Gingold <gingold@adacore.com>
++ Iain Sandoe <iains@gcc.gnu.org>
++
++ PR target/49992
++ * mlib-tgt-specific-darwin.adb (Archive_Indexer_Options): Remove.
++ * gcc-interface/Makefile.in (darwin): Remove ranlib special-casing
++ for Darwin.
++
++2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
++
++ Backport from mainline r181319
++ * gcc-interface/Makefile.in (stamp-gnatlib-$(RTSDIR)): Don't link
++ s-oscons.ads.
++ (OSCONS_CPP, OSCONS_EXTRACT): New.
++ (./bldtools/oscons/xoscons): New Target.
++ ($(RTSDIR)/s-oscons.ads): New Target.
++ (gnatlib): Depend on $(RTSDIR)/s-oscons.ads.
++ * Make-generated.in: Remove machinery to generate xoscons and
++ ada/s-oscons.ads.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/gcc/ada/Make-generated.in
++++ b/src/gcc/ada/Make-generated.in
+@@ -64,37 +64,6 @@
+ $(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/nmake_s
+ (cd $(ADA_GEN_SUBDIR)/bldtools/nmake_s; gnatmake -q xnmake ; ./xnmake -s ../../nmake.ads )
+
+-ifeq ($(strip $(filter-out alpha64 ia64 dec hp vms% openvms% alphavms%,$(subst -, ,$(host)))),)
+-OSCONS_CPP=../../../$(DECC) -E /comment=as_is -DNATIVE \
+- -DTARGET='""$(target)""' s-oscons-tmplt.c
+-
+-OSCONS_EXTRACT=../../../$(DECC) -DNATIVE \
+- -DTARGET='""$(target)""' s-oscons-tmplt.c ; \
+- ld -o s-oscons-tmplt.exe s-oscons-tmplt.obj; \
+- ./s-oscons-tmplt.exe > s-oscons-tmplt.s
+-
+-else
+-# GCC_FOR_TARGET has paths relative to the gcc directory, so we need to ajust
+-# for running it from $(ADA_GEN_SUBDIR)/bldtools/oscons
+-OSCONS_CC=`echo "$(GCC_FOR_TARGET)" \
+- | sed -e 's^\./xgcc^../../../xgcc^' -e 's^-B./^-B../../../^'`
+-OSCONS_CPP=$(OSCONS_CC) $(GNATLIBCFLAGS) -E -C \
+- -DTARGET=\"$(target)\" s-oscons-tmplt.c > s-oscons-tmplt.i
+-OSCONS_EXTRACT=$(OSCONS_CC) -S s-oscons-tmplt.i
+-endif
+-
+-$(ADA_GEN_SUBDIR)/s-oscons.ads : $(ADA_GEN_SUBDIR)/s-oscons-tmplt.c $(ADA_GEN_SUBDIR)/gsocket.h $(ADA_GEN_SUBDIR)/xoscons.adb $(ADA_GEN_SUBDIR)/xutil.ads $(ADA_GEN_SUBDIR)/xutil.adb
+- -$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/oscons
+- $(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/oscons/,$(notdir $^))
+- $(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/oscons
+- (cd $(ADA_GEN_SUBDIR)/bldtools/oscons ; gnatmake -q xoscons ; \
+- $(RM) s-oscons-tmplt.i s-oscons-tmplt.s ; \
+- $(OSCONS_CPP) ; \
+- $(OSCONS_EXTRACT) ; \
+- ./xoscons ; \
+- $(RM) ../../s-oscons.ads ; \
+- $(CP) s-oscons.ads s-oscons.h ../../)
+-
+ $(ADA_GEN_SUBDIR)/sdefault.adb: $(ADA_GEN_SUBDIR)/stamp-sdefault ; @true
+ $(ADA_GEN_SUBDIR)/stamp-sdefault : $(srcdir)/version.c Makefile
+ $(ECHO) "pragma Style_Checks (Off);" >tmp-sdefault.adb
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -2189,7 +2189,6 @@
+
+ EH_MECHANISM=-gcc
+ GNATLIB_SHARED = gnatlib-shared-darwin
+- RANLIB = ranlib -c
+ GMEM_LIB = gmemlib
+ LIBRARY_VERSION := $(LIB_VERSION)
+ soext = .dylib
+@@ -2447,21 +2446,52 @@
+ $(foreach PAIR,$(LIBGNAT_TARGET_PAIRS), \
+ $(LN_S) $(fsrcpfx)ada/$(word 2,$(subst <, ,$(PAIR))) \
+ $(RTSDIR)/$(word 1,$(subst <, ,$(PAIR)));)
+-# Copy generated target dependent sources
+- $(RM) $(RTSDIR)/s-oscons.ads
+- (cd $(RTSDIR); $(LN_S) ../s-oscons.ads s-oscons.ads)
++# Copy tsystem.h
++ $(CP) $(srcdir)/tsystem.h $(RTSDIR)
+ $(RM) ../stamp-gnatlib-$(RTSDIR)
+ touch ../stamp-gnatlib1-$(RTSDIR)
+
+ # GNULLI End #############################################################
+
++ifeq ($(strip $(filter-out alpha64 ia64 dec hp vms% openvms% alphavms%,$(subst -, ,$(host)))),)
++OSCONS_CPP=../../$(DECC) -E /comment=as_is -DNATIVE \
++ -DTARGET='""$(target)""' $(fsrcpfx)ada/s-oscons-tmplt.c
++
++OSCONS_EXTRACT=../../$(DECC) -DNATIVE \
++ -DTARGET='""$(target)""' $(fsrcpfx)ada/s-oscons-tmplt.c ; \
++ ld -o s-oscons-tmplt.exe s-oscons-tmplt.obj; \
++ ./s-oscons-tmplt.exe > s-oscons-tmplt.s
++
++else
++# GCC_FOR_TARGET has paths relative to the gcc directory, so we need to adjust
++# for running it from $(RTSDIR)
++OSCONS_CC=`echo "$(GCC_FOR_TARGET)" \
++ | sed -e 's^\./xgcc^../../xgcc^' -e 's^-B./^-B../../^'`
++OSCONS_CPP=$(OSCONS_CC) $(GNATLIBCFLAGS) -E -C \
++ -DTARGET=\"$(target)\" $(fsrcpfx)ada/s-oscons-tmplt.c > s-oscons-tmplt.i
++OSCONS_EXTRACT=$(OSCONS_CC) -S s-oscons-tmplt.i
++endif
++
++./bldtools/oscons/xoscons: xoscons.adb xutil.ads xutil.adb
++ -$(MKDIR) ./bldtools/oscons
++ $(RM) $(addprefix ./bldtools/oscons/,$(notdir $^))
++ $(CP) $^ ./bldtools/oscons
++ (cd ./bldtools/oscons ; gnatmake -q xoscons)
++
++$(RTSDIR)/s-oscons.ads: ../stamp-gnatlib1-$(RTSDIR) s-oscons-tmplt.c gsocket.h ./bldtools/oscons/xoscons
++ $(RM) $(RTSDIR)/s-oscons-tmplt.i $(RTSDIR)/s-oscons-tmplt.s
++ (cd $(RTSDIR) ; \
++ $(OSCONS_CPP) ; \
++ $(OSCONS_EXTRACT) ; \
++ ../bldtools/oscons/xoscons)
++
+ # Don't use semicolon separated shell commands that involve list expansions.
+ # The semicolon triggers a call to DCL on VMS and DCL can't handle command
+ # line lengths in excess of 256 characters.
+ # Example: cd $(RTSDIR); ar rc libfoo.a $(LONG_LIST_OF_OBJS)
+ # is guaranteed to overflow the buffer.
+
+-gnatlib: ../stamp-gnatlib1-$(RTSDIR) ../stamp-gnatlib2-$(RTSDIR)
++gnatlib: ../stamp-gnatlib1-$(RTSDIR) ../stamp-gnatlib2-$(RTSDIR) $(RTSDIR)/s-oscons.ads
+ $(MAKE) -C $(RTSDIR) \
+ CC="`echo \"$(GCC_FOR_TARGET)\" \
+ | sed -e 's,\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
+--- a/src/gcc/ada/init.c
++++ b/src/gcc/ada/init.c
+@@ -2216,12 +2216,33 @@
+ return 0;
+ }
+
++#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
++
++void
++__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED,
++ void *ucontext ATTRIBUTE_UNUSED)
++{
++#if defined (__x86_64__)
++ /* Work around radar #10302855/pr50678, where the unwinders (libunwind or
++ libgcc_s depending on the system revision) and the DWARF unwind data for
++ the sigtramp have different ideas about register numbering (causing rbx
++ and rdx to be transposed).. */
++ ucontext_t *uc = (ucontext_t *)ucontext ;
++ unsigned long t = uc->uc_mcontext->__ss.__rbx;
++
++ uc->uc_mcontext->__ss.__rbx = uc->uc_mcontext->__ss.__rdx;
++ uc->uc_mcontext->__ss.__rdx = t;
++#endif
++}
++
+ static void
+-__gnat_error_handler (int sig, siginfo_t *si, void *ucontext ATTRIBUTE_UNUSED)
++__gnat_error_handler (int sig, siginfo_t *si, void *ucontext)
+ {
+ struct Exception_Data *exception;
+ const char *msg;
+
++ __gnat_adjust_context_for_raise (sig, ucontext);
++
+ switch (sig)
+ {
+ case SIGSEGV:
+--- a/src/gcc/ada/mlib-tgt-specific-darwin.adb
++++ b/src/gcc/ada/mlib-tgt-specific-darwin.adb
+@@ -36,8 +36,6 @@
+
+ -- Non default subprograms
+
+- function Archive_Indexer_Options return String_List_Access;
+-
+ procedure Build_Dynamic_Library
+ (Ofiles : Argument_List;
+ Options : Argument_List;
+@@ -67,15 +65,6 @@
+ (1 => Flat_Namespace'Access,
+ 2 => Shared_Libgcc'Access);
+
+- -----------------------------
+- -- Archive_Indexer_Options --
+- -----------------------------
+-
+- function Archive_Indexer_Options return String_List_Access is
+- begin
+- return new String_List'(1 => new String'("-c"));
+- end Archive_Indexer_Options;
+-
+ ---------------------------
+ -- Build_Dynamic_Library --
+ ---------------------------
+@@ -180,7 +169,6 @@
+ end Is_Archive_Ext;
+
+ begin
+- Archive_Indexer_Options_Ptr := Archive_Indexer_Options'Access;
+ Build_Dynamic_Library_Ptr := Build_Dynamic_Library'Access;
+ DLL_Ext_Ptr := DLL_Ext'Access;
+ Dynamic_Option_Ptr := Dynamic_Option'Access;
+--- a/src/gcc/builtins.c
++++ b/src/gcc/builtins.c
+@@ -264,7 +264,14 @@
+ }
+
+ /* Return the alignment in bits of EXP, an object.
+- Don't return more than MAX_ALIGN no matter what. */
++ Don't return more than MAX_ALIGN no matter what.
++
++ Note that the address (and thus the alignment) computed here is based
++ on the address to which a symbol resolves, whereas DECL_ALIGN is based
++ on the address at which an object is actually located. These two
++ addresses are not always the same. For example, on ARM targets,
++ the address &foo of a Thumb function foo() has the lowest bit set,
++ whereas foo() itself starts on an even address. */
+
+ unsigned int
+ get_object_alignment (tree exp, unsigned int max_align)
+@@ -286,7 +293,21 @@
+ exp = DECL_INITIAL (exp);
+ if (DECL_P (exp)
+ && TREE_CODE (exp) != LABEL_DECL)
+- align = DECL_ALIGN (exp);
++ {
++ if (TREE_CODE (exp) == FUNCTION_DECL)
++ {
++ /* Function addresses can encode extra information besides their
++ alignment. However, if TARGET_PTRMEMFUNC_VBIT_LOCATION
++ allows the low bit to be used as a virtual bit, we know
++ that the address itself must be 2-byte aligned. */
++ if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn)
++ align = 2 * BITS_PER_UNIT;
++ else
++ align = BITS_PER_UNIT;
++ }
++ else
++ align = DECL_ALIGN (exp);
++ }
+ else if (CONSTANT_CLASS_P (exp))
+ {
+ align = TYPE_ALIGN (TREE_TYPE (exp));
+--- a/src/gcc/c-family/ChangeLog
++++ b/src/gcc/c-family/ChangeLog
+@@ -1,3 +1,15 @@
++2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR c++/50608
++ * c-common.c (c_fully_fold_internal) <ADDR_EXPR>: Call fold_offsetof_1.
++ (fold_offsetof_1): Make global. Remove STOP_REF argument and adjust.
++ <INDIRECT_REF>: Return the argument.
++ <ARRAY_REF>: Remove special code for negative offset.
++ Call fold_build_pointer_plus instead of size_binop.
++ (fold_offsetof): Remove STOP_REF argument and adjust.
++ * c-common.h (fold_offsetof_1): Declare.
++ (fold_offsetof): Remove STOP_REF argument.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/gcc/c-family/c-common.c
++++ b/src/gcc/c-family/c-common.c
+@@ -1236,13 +1236,7 @@
+ && (op1 = get_base_address (op0)) != NULL_TREE
+ && TREE_CODE (op1) == INDIRECT_REF
+ && TREE_CONSTANT (TREE_OPERAND (op1, 0)))
+- {
+- tree offset = fold_offsetof (op0, op1);
+- op1
+- = fold_convert_loc (loc, TREE_TYPE (expr), TREE_OPERAND (op1, 0));
+- ret = fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (expr), op1,
+- offset);
+- }
++ ret = fold_convert_loc (loc, TREE_TYPE (expr), fold_offsetof_1 (op0));
+ else if (op0 != orig_op0 || in_init)
+ ret = in_init
+ ? fold_build1_initializer_loc (loc, code, TREE_TYPE (expr), op0)
+@@ -8459,20 +8453,15 @@
+ return uc;
+ }
+
+-/* Build the result of __builtin_offsetof. EXPR is a nested sequence of
+- component references, with STOP_REF, or alternatively an INDIRECT_REF of
+- NULL, at the bottom; much like the traditional rendering of offsetof as a
+- macro. Returns the folded and properly cast result. */
++/* Fold an offsetof-like expression. EXPR is a nested sequence of component
++ references with an INDIRECT_REF of a constant at the bottom; much like the
++ traditional rendering of offsetof as a macro. Return the folded result. */
+
+-static tree
+-fold_offsetof_1 (tree expr, tree stop_ref)
++tree
++fold_offsetof_1 (tree expr)
+ {
+- enum tree_code code = PLUS_EXPR;
+ tree base, off, t;
+
+- if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
+- return size_zero_node;
+-
+ switch (TREE_CODE (expr))
+ {
+ case ERROR_MARK:
+@@ -8489,15 +8478,15 @@
+
+ case NOP_EXPR:
+ case INDIRECT_REF:
+- if (!integer_zerop (TREE_OPERAND (expr, 0)))
++ if (!TREE_CONSTANT (TREE_OPERAND (expr, 0)))
+ {
+ error ("cannot apply %<offsetof%> to a non constant address");
+ return error_mark_node;
+ }
+- return size_zero_node;
++ return TREE_OPERAND (expr, 0);
+
+ case COMPONENT_REF:
+- base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
++ base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
+ if (base == error_mark_node)
+ return base;
+
+@@ -8515,21 +8504,14 @@
+ break;
+
+ case ARRAY_REF:
+- base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
++ base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
+ if (base == error_mark_node)
+ return base;
+
+ t = TREE_OPERAND (expr, 1);
+- if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
+- {
+- code = MINUS_EXPR;
+- t = fold_build1_loc (input_location, NEGATE_EXPR, TREE_TYPE (t), t);
+- }
+- t = convert (sizetype, t);
+- off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
+
+ /* Check if the offset goes beyond the upper bound of the array. */
+- if (code == PLUS_EXPR && TREE_CODE (t) == INTEGER_CST)
++ if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) >= 0)
+ {
+ tree upbound = array_ref_up_bound (expr);
+ if (upbound != NULL_TREE
+@@ -8569,26 +8551,30 @@
+ }
+ }
+ }
++
++ t = convert (sizetype, t);
++ off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
+ break;
+
+ case COMPOUND_EXPR:
+ /* Handle static members of volatile structs. */
+ t = TREE_OPERAND (expr, 1);
+ gcc_assert (TREE_CODE (t) == VAR_DECL);
+- return fold_offsetof_1 (t, stop_ref);
++ return fold_offsetof_1 (t);
+
+ default:
+ gcc_unreachable ();
+ }
+
+- return size_binop (code, base, off);
++ return fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (base), base, off);
+ }
+
++/* Likewise, but convert it to the return type of offsetof. */
++
+ tree
+-fold_offsetof (tree expr, tree stop_ref)
++fold_offsetof (tree expr)
+ {
+- /* Convert back from the internal sizetype to size_t. */
+- return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
++ return convert (size_type_node, fold_offsetof_1 (expr));
+ }
+
+ /* Warn for A ?: C expressions (with B omitted) where A is a boolean
+--- a/src/gcc/c-family/c-common.h
++++ b/src/gcc/c-family/c-common.h
+@@ -916,7 +916,8 @@
+
+ extern void verify_sequence_points (tree);
+
+-extern tree fold_offsetof (tree, tree);
++extern tree fold_offsetof_1 (tree);
++extern tree fold_offsetof (tree);
+
+ /* Places where an lvalue, or modifiable lvalue, may be required.
+ Used to select diagnostic messages in lvalue_error and
+--- a/src/gcc/c-parser.c
++++ b/src/gcc/c-parser.c
+@@ -6294,7 +6294,7 @@
+ c_parser_error (parser, "expected identifier");
+ c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
+ "expected %<)%>");
+- expr.value = fold_offsetof (offsetof_ref, NULL_TREE);
++ expr.value = fold_offsetof (offsetof_ref);
+ }
+ break;
+ case RID_CHOOSE_EXPR:
+--- a/src/gcc/c-typeck.c
++++ b/src/gcc/c-typeck.c
+@@ -3802,11 +3802,7 @@
+ if (val && TREE_CODE (val) == INDIRECT_REF
+ && TREE_CONSTANT (TREE_OPERAND (val, 0)))
+ {
+- tree op0 = fold_convert_loc (location, sizetype,
+- fold_offsetof (arg, val)), op1;
+-
+- op1 = fold_convert_loc (location, argtype, TREE_OPERAND (val, 0));
+- ret = fold_build2_loc (location, POINTER_PLUS_EXPR, argtype, op1, op0);
++ ret = fold_convert_loc (location, argtype, fold_offsetof_1 (arg));
+ goto return_build_unary_op;
+ }
+
+--- a/src/gcc/calls.c
++++ b/src/gcc/calls.c
+@@ -686,7 +686,7 @@
+ /* If the value is a non-legitimate constant, force it into a
+ pseudo now. TLS symbols sometimes need a call to resolve. */
+ if (CONSTANT_P (args[i].value)
+- && !LEGITIMATE_CONSTANT_P (args[i].value))
++ && !targetm.legitimate_constant_p (args[i].mode, args[i].value))
+ args[i].value = force_reg (args[i].mode, args[i].value);
+
+ /* If we are to promote the function arg to a wider mode,
+@@ -3449,7 +3449,8 @@
+
+ /* Make sure it is a reasonable operand for a move or push insn. */
+ if (!REG_P (addr) && !MEM_P (addr)
+- && ! (CONSTANT_P (addr) && LEGITIMATE_CONSTANT_P (addr)))
++ && !(CONSTANT_P (addr)
++ && targetm.legitimate_constant_p (Pmode, addr)))
+ addr = force_operand (addr, NULL_RTX);
+
+ argvec[count].value = addr;
+@@ -3490,7 +3491,7 @@
+
+ /* Make sure it is a reasonable operand for a move or push insn. */
+ if (!REG_P (val) && !MEM_P (val)
+- && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
++ && !(CONSTANT_P (val) && targetm.legitimate_constant_p (mode, val)))
+ val = force_operand (val, NULL_RTX);
+
+ if (pass_by_reference (&args_so_far, mode, NULL_TREE, 1))
+--- a/src/gcc/cfgcleanup.c
++++ b/src/gcc/cfgcleanup.c
+@@ -1969,7 +1969,14 @@
+
+ cond = get_condition (jump, &move_before, true, false);
+ if (cond == NULL_RTX)
+- move_before = jump;
++ {
++#ifdef HAVE_cc0
++ if (reg_mentioned_p (cc0_rtx, jump))
++ move_before = prev_nonnote_nondebug_insn (jump);
++ else
++#endif
++ move_before = jump;
++ }
+
+ for (ix = 0; ix < nedges; ix++)
+ if (EDGE_SUCC (bb, ix)->dest == EXIT_BLOCK_PTR)
+@@ -2131,7 +2138,14 @@
+ jump = BB_END (final_dest_bb);
+ cond = get_condition (jump, &move_before, true, false);
+ if (cond == NULL_RTX)
+- move_before = jump;
++ {
++#ifdef HAVE_cc0
++ if (reg_mentioned_p (cc0_rtx, jump))
++ move_before = prev_nonnote_nondebug_insn (jump);
++ else
++#endif
++ move_before = jump;
++ }
+ }
+
+ do
+--- a/src/gcc/cfgexpand.c
++++ b/src/gcc/cfgexpand.c
+@@ -1843,12 +1843,17 @@
+ static void
+ expand_call_stmt (gimple stmt)
+ {
+- tree exp;
+- tree lhs = gimple_call_lhs (stmt);
++ tree exp, lhs;
+ size_t i;
+ bool builtin_p;
+ tree decl;
+
++ if (gimple_call_internal_p (stmt))
++ {
++ expand_internal_call (stmt);
++ return;
++ }
++
+ exp = build_vl_exp (CALL_EXPR, gimple_call_num_args (stmt) + 3);
+
+ CALL_EXPR_FN (exp) = gimple_call_fn (stmt);
+@@ -1886,6 +1891,7 @@
+ SET_EXPR_LOCATION (exp, gimple_location (stmt));
+ TREE_BLOCK (exp) = gimple_block (stmt);
+
++ lhs = gimple_call_lhs (stmt);
+ if (lhs)
+ expand_assignment (lhs, exp, false);
+ else
+@@ -3209,6 +3215,8 @@
+ case VEC_UNPACK_LO_EXPR:
+ case VEC_WIDEN_MULT_HI_EXPR:
+ case VEC_WIDEN_MULT_LO_EXPR:
++ case VEC_WIDEN_LSHIFT_HI_EXPR:
++ case VEC_WIDEN_LSHIFT_LO_EXPR:
+ return NULL;
+
+ /* Misc codes. */
+--- a/src/gcc/combine.c
++++ b/src/gcc/combine.c
+@@ -391,8 +391,8 @@
+ static void undo_all (void);
+ static void undo_commit (void);
+ static rtx *find_split_point (rtx *, rtx, bool);
+-static rtx subst (rtx, rtx, rtx, int, int);
+-static rtx combine_simplify_rtx (rtx, enum machine_mode, int);
++static rtx subst (rtx, rtx, rtx, int, int, int);
++static rtx combine_simplify_rtx (rtx, enum machine_mode, int, int);
+ static rtx simplify_if_then_else (rtx);
+ static rtx simplify_set (rtx);
+ static rtx simplify_logical (rtx);
+@@ -3089,7 +3089,7 @@
+ /* It is possible that the source of I2 or I1 may be performing
+ an unneeded operation, such as a ZERO_EXTEND of something
+ that is known to have the high part zero. Handle that case
+- by letting subst look at the innermost one of them.
++ by letting subst look at the inner insns.
+
+ Another way to do this would be to have a function that tries
+ to simplify a single insn instead of merging two or more
+@@ -3112,13 +3112,11 @@
+ if (i1)
+ {
+ subst_low_luid = DF_INSN_LUID (i1);
+- i1src = subst (i1src, pc_rtx, pc_rtx, 0, 0);
+- }
+- else
+- {
+- subst_low_luid = DF_INSN_LUID (i2);
+- i2src = subst (i2src, pc_rtx, pc_rtx, 0, 0);
++ i1src = subst (i1src, pc_rtx, pc_rtx, 0, 0, 0);
+ }
++
++ subst_low_luid = DF_INSN_LUID (i2);
++ i2src = subst (i2src, pc_rtx, pc_rtx, 0, 0, 0);
+ }
+
+ n_occurrences = 0; /* `subst' counts here */
+@@ -3129,7 +3127,7 @@
+ self-referential RTL when we will be substituting I1SRC for I1DEST
+ later. Likewise if I0 feeds into I2, either directly or indirectly
+ through I1, and I0DEST is in I0SRC. */
+- newpat = subst (PATTERN (i3), i2dest, i2src, 0,
++ newpat = subst (PATTERN (i3), i2dest, i2src, 0, 0,
+ (i1_feeds_i2_n && i1dest_in_i1src)
+ || ((i0_feeds_i2_n || (i0_feeds_i1_n && i1_feeds_i2_n))
+ && i0dest_in_i0src));
+@@ -3168,7 +3166,7 @@
+ copy of I1SRC each time we substitute it, in order to avoid creating
+ self-referential RTL when we will be substituting I0SRC for I0DEST
+ later. */
+- newpat = subst (newpat, i1dest, i1src, 0,
++ newpat = subst (newpat, i1dest, i1src, 0, 0,
+ i0_feeds_i1_n && i0dest_in_i0src);
+ substed_i1 = 1;
+
+@@ -3198,7 +3196,7 @@
+
+ n_occurrences = 0;
+ subst_low_luid = DF_INSN_LUID (i0);
+- newpat = subst (newpat, i0dest, i0src, 0, 0);
++ newpat = subst (newpat, i0dest, i0src, 0, 0, 0);
+ substed_i0 = 1;
+ }
+
+@@ -3260,7 +3258,7 @@
+ {
+ rtx t = i1pat;
+ if (i0_feeds_i1_n)
+- t = subst (t, i0dest, i0src, 0, 0);
++ t = subst (t, i0dest, i0src, 0, 0, 0);
+
+ XVECEXP (newpat, 0, --total_sets) = t;
+ }
+@@ -3268,10 +3266,10 @@
+ {
+ rtx t = i2pat;
+ if (i1_feeds_i2_n)
+- t = subst (t, i1dest, i1src_copy ? i1src_copy : i1src, 0,
++ t = subst (t, i1dest, i1src_copy ? i1src_copy : i1src, 0, 0,
+ i0_feeds_i1_n && i0dest_in_i0src);
+ if ((i0_feeds_i1_n && i1_feeds_i2_n) || i0_feeds_i2_n)
+- t = subst (t, i0dest, i0src, 0, 0);
++ t = subst (t, i0dest, i0src, 0, 0, 0);
+
+ XVECEXP (newpat, 0, --total_sets) = t;
+ }
+@@ -4943,11 +4941,13 @@
+
+ IN_DEST is nonzero if we are processing the SET_DEST of a SET.
+
++ IN_COND is nonzero if we are on top level of the condition.
++
+ UNIQUE_COPY is nonzero if each substitution must be unique. We do this
+ by copying if `n_occurrences' is nonzero. */
+
+ static rtx
+-subst (rtx x, rtx from, rtx to, int in_dest, int unique_copy)
++subst (rtx x, rtx from, rtx to, int in_dest, int in_cond, int unique_copy)
+ {
+ enum rtx_code code = GET_CODE (x);
+ enum machine_mode op0_mode = VOIDmode;
+@@ -5008,7 +5008,7 @@
+ && GET_CODE (XVECEXP (x, 0, 0)) == SET
+ && GET_CODE (SET_SRC (XVECEXP (x, 0, 0))) == ASM_OPERANDS)
+ {
+- new_rtx = subst (XVECEXP (x, 0, 0), from, to, 0, unique_copy);
++ new_rtx = subst (XVECEXP (x, 0, 0), from, to, 0, 0, unique_copy);
+
+ /* If this substitution failed, this whole thing fails. */
+ if (GET_CODE (new_rtx) == CLOBBER
+@@ -5025,7 +5025,7 @@
+ && GET_CODE (dest) != CC0
+ && GET_CODE (dest) != PC)
+ {
+- new_rtx = subst (dest, from, to, 0, unique_copy);
++ new_rtx = subst (dest, from, to, 0, 0, unique_copy);
+
+ /* If this substitution failed, this whole thing fails. */
+ if (GET_CODE (new_rtx) == CLOBBER
+@@ -5071,8 +5071,8 @@
+ }
+ else
+ {
+- new_rtx = subst (XVECEXP (x, i, j), from, to, 0,
+- unique_copy);
++ new_rtx = subst (XVECEXP (x, i, j), from, to, 0, 0,
++ unique_copy);
+
+ /* If this substitution failed, this whole thing
+ fails. */
+@@ -5149,7 +5149,9 @@
+ && (code == SUBREG || code == STRICT_LOW_PART
+ || code == ZERO_EXTRACT))
+ || code == SET)
+- && i == 0), unique_copy);
++ && i == 0),
++ code == IF_THEN_ELSE && i == 0,
++ unique_copy);
+
+ /* If we found that we will have to reject this combination,
+ indicate that by returning the CLOBBER ourselves, rather than
+@@ -5206,7 +5208,7 @@
+ /* If X is sufficiently simple, don't bother trying to do anything
+ with it. */
+ if (code != CONST_INT && code != REG && code != CLOBBER)
+- x = combine_simplify_rtx (x, op0_mode, in_dest);
++ x = combine_simplify_rtx (x, op0_mode, in_dest, in_cond);
+
+ if (GET_CODE (x) == code)
+ break;
+@@ -5226,10 +5228,12 @@
+ expression.
+
+ OP0_MODE is the original mode of XEXP (x, 0). IN_DEST is nonzero
+- if we are inside a SET_DEST. */
++ if we are inside a SET_DEST. IN_COND is nonzero if we are on the top level
++ of a condition. */
+
+ static rtx
+-combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest)
++combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest,
++ int in_cond)
+ {
+ enum rtx_code code = GET_CODE (x);
+ enum machine_mode mode = GET_MODE (x);
+@@ -5284,8 +5288,8 @@
+ false arms to store-flag values. Be careful to use copy_rtx
+ here since true_rtx or false_rtx might share RTL with x as a
+ result of the if_then_else_cond call above. */
+- true_rtx = subst (copy_rtx (true_rtx), pc_rtx, pc_rtx, 0, 0);
+- false_rtx = subst (copy_rtx (false_rtx), pc_rtx, pc_rtx, 0, 0);
++ true_rtx = subst (copy_rtx (true_rtx), pc_rtx, pc_rtx, 0, 0, 0);
++ false_rtx = subst (copy_rtx (false_rtx), pc_rtx, pc_rtx, 0, 0, 0);
+
+ /* If true_rtx and false_rtx are not general_operands, an if_then_else
+ is unlikely to be simpler. */
+@@ -5629,7 +5633,7 @@
+ {
+ /* Try to simplify the expression further. */
+ rtx tor = simplify_gen_binary (IOR, mode, XEXP (x, 0), XEXP (x, 1));
+- temp = combine_simplify_rtx (tor, VOIDmode, in_dest);
++ temp = combine_simplify_rtx (tor, VOIDmode, in_dest, 0);
+
+ /* If we could, great. If not, do not go ahead with the IOR
+ replacement, since PLUS appears in many special purpose
+@@ -5722,7 +5726,16 @@
+ ZERO_EXTRACT is indeed appropriate, it will be placed back by
+ the call to make_compound_operation in the SET case. */
+
+- if (STORE_FLAG_VALUE == 1
++ if (in_cond)
++ /* Don't apply below optimizations if the caller would
++ prefer a comparison rather than a value.
++ E.g., for the condition in an IF_THEN_ELSE most targets need
++ an explicit comparison. */
++ {
++ ;
++ }
++
++ else if (STORE_FLAG_VALUE == 1
+ && new_code == NE && GET_MODE_CLASS (mode) == MODE_INT
+ && op1 == const0_rtx
+ && mode == GET_MODE (op0)
+@@ -5768,7 +5781,10 @@
+
+ /* If STORE_FLAG_VALUE is -1, we have cases similar to
+ those above. */
+- if (STORE_FLAG_VALUE == -1
++ if (in_cond)
++ ;
++
++ else if (STORE_FLAG_VALUE == -1
+ && new_code == NE && GET_MODE_CLASS (mode) == MODE_INT
+ && op1 == const0_rtx
+ && (num_sign_bit_copies (op0, mode)
+@@ -5966,11 +5982,11 @@
+ if (reg_mentioned_p (from, true_rtx))
+ true_rtx = subst (known_cond (copy_rtx (true_rtx), true_code,
+ from, true_val),
+- pc_rtx, pc_rtx, 0, 0);
++ pc_rtx, pc_rtx, 0, 0, 0);
+ if (reg_mentioned_p (from, false_rtx))
+ false_rtx = subst (known_cond (copy_rtx (false_rtx), false_code,
+ from, false_val),
+- pc_rtx, pc_rtx, 0, 0);
++ pc_rtx, pc_rtx, 0, 0, 0);
+
+ SUBST (XEXP (x, 1), swapped ? false_rtx : true_rtx);
+ SUBST (XEXP (x, 2), swapped ? true_rtx : false_rtx);
+@@ -6187,11 +6203,11 @@
+ {
+ temp = subst (simplify_gen_relational (true_code, m, VOIDmode,
+ cond_op0, cond_op1),
+- pc_rtx, pc_rtx, 0, 0);
++ pc_rtx, pc_rtx, 0, 0, 0);
+ temp = simplify_gen_binary (MULT, m, temp,
+ simplify_gen_binary (MULT, m, c1,
+ const_true_rtx));
+- temp = subst (temp, pc_rtx, pc_rtx, 0, 0);
++ temp = subst (temp, pc_rtx, pc_rtx, 0, 0, 0);
+ temp = simplify_gen_binary (op, m, gen_lowpart (m, z), temp);
+
+ if (extend_op != UNKNOWN)
+@@ -6271,10 +6287,18 @@
+ enum rtx_code new_code;
+ rtx op0, op1, tmp;
+ int other_changed = 0;
++ rtx inner_compare = NULL_RTX;
+ enum machine_mode compare_mode = GET_MODE (dest);
+
+ if (GET_CODE (src) == COMPARE)
+- op0 = XEXP (src, 0), op1 = XEXP (src, 1);
++ {
++ op0 = XEXP (src, 0), op1 = XEXP (src, 1);
++ if (GET_CODE (op0) == COMPARE && op1 == const0_rtx)
++ {
++ inner_compare = op0;
++ op0 = XEXP (inner_compare, 0), op1 = XEXP (inner_compare, 1);
++ }
++ }
+ else
+ op0 = src, op1 = CONST0_RTX (GET_MODE (src));
+
+@@ -6316,6 +6340,12 @@
+ need to use a different CC mode here. */
+ if (GET_MODE_CLASS (GET_MODE (op0)) == MODE_CC)
+ compare_mode = GET_MODE (op0);
++ else if (inner_compare
++ && GET_MODE_CLASS (GET_MODE (inner_compare)) == MODE_CC
++ && new_code == old_code
++ && op0 == XEXP (inner_compare, 0)
++ && op1 == XEXP (inner_compare, 1))
++ compare_mode = GET_MODE (inner_compare);
+ else
+ compare_mode = SELECT_CC_MODE (new_code, op0, op1);
+
+--- a/src/gcc/config/arm/arm-cores.def
++++ b/src/gcc/config/arm/arm-cores.def
+@@ -70,10 +70,10 @@
+ /* V4 Architecture Processors */
+ ARM_CORE("arm8", arm8, 4, FL_MODE26 | FL_LDSCHED, fastmul)
+ ARM_CORE("arm810", arm810, 4, FL_MODE26 | FL_LDSCHED, fastmul)
+-ARM_CORE("strongarm", strongarm, 4, FL_MODE26 | FL_LDSCHED | FL_STRONG, fastmul)
+-ARM_CORE("strongarm110", strongarm110, 4, FL_MODE26 | FL_LDSCHED | FL_STRONG, fastmul)
+-ARM_CORE("strongarm1100", strongarm1100, 4, FL_MODE26 | FL_LDSCHED | FL_STRONG, fastmul)
+-ARM_CORE("strongarm1110", strongarm1110, 4, FL_MODE26 | FL_LDSCHED | FL_STRONG, fastmul)
++ARM_CORE("strongarm", strongarm, 4, FL_MODE26 | FL_LDSCHED | FL_STRONG, strongarm)
++ARM_CORE("strongarm110", strongarm110, 4, FL_MODE26 | FL_LDSCHED | FL_STRONG, strongarm)
++ARM_CORE("strongarm1100", strongarm1100, 4, FL_MODE26 | FL_LDSCHED | FL_STRONG, strongarm)
++ARM_CORE("strongarm1110", strongarm1110, 4, FL_MODE26 | FL_LDSCHED | FL_STRONG, strongarm)
+ ARM_CORE("fa526", fa526, 4, FL_LDSCHED, fastmul)
+ ARM_CORE("fa626", fa626, 4, FL_LDSCHED, fastmul)
+
+@@ -122,15 +122,18 @@
+ ARM_CORE("arm1176jzf-s", arm1176jzfs, 6ZK, FL_LDSCHED | FL_VFPV2, 9e)
+ ARM_CORE("mpcorenovfp", mpcorenovfp, 6K, FL_LDSCHED, 9e)
+ ARM_CORE("mpcore", mpcore, 6K, FL_LDSCHED | FL_VFPV2, 9e)
+-ARM_CORE("arm1156t2-s", arm1156t2s, 6T2, FL_LDSCHED, 9e)
+-ARM_CORE("arm1156t2f-s", arm1156t2fs, 6T2, FL_LDSCHED | FL_VFPV2, 9e)
+-ARM_CORE("cortex-a5", cortexa5, 7A, FL_LDSCHED, 9e)
+-ARM_CORE("cortex-a8", cortexa8, 7A, FL_LDSCHED, 9e)
++ARM_CORE("arm1156t2-s", arm1156t2s, 6T2, FL_LDSCHED, v6t2)
++ARM_CORE("arm1156t2f-s", arm1156t2fs, 6T2, FL_LDSCHED | FL_VFPV2, v6t2)
++ARM_CORE("generic-armv7-a", genericv7a, 7A, FL_LDSCHED, cortex)
++ARM_CORE("cortex-a5", cortexa5, 7A, FL_LDSCHED, cortex_a5)
++ARM_CORE("cortex-a8", cortexa8, 7A, FL_LDSCHED, cortex)
+ ARM_CORE("cortex-a9", cortexa9, 7A, FL_LDSCHED, cortex_a9)
+-ARM_CORE("cortex-a15", cortexa15, 7A, FL_LDSCHED, 9e)
+-ARM_CORE("cortex-r4", cortexr4, 7R, FL_LDSCHED, 9e)
+-ARM_CORE("cortex-r4f", cortexr4f, 7R, FL_LDSCHED, 9e)
+-ARM_CORE("cortex-m4", cortexm4, 7EM, FL_LDSCHED, 9e)
+-ARM_CORE("cortex-m3", cortexm3, 7M, FL_LDSCHED, 9e)
+-ARM_CORE("cortex-m1", cortexm1, 6M, FL_LDSCHED, 9e)
+-ARM_CORE("cortex-m0", cortexm0, 6M, FL_LDSCHED, 9e)
++ARM_CORE("cortex-a15", cortexa15, 7A, FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV, cortex)
++ARM_CORE("cortex-r4", cortexr4, 7R, FL_LDSCHED, cortex)
++ARM_CORE("cortex-r4f", cortexr4f, 7R, FL_LDSCHED, cortex)
++ARM_CORE("cortex-r5", cortexr5, 7R, FL_LDSCHED | FL_ARM_DIV, cortex)
++ARM_CORE("cortex-m4", cortexm4, 7EM, FL_LDSCHED, cortex)
++ARM_CORE("cortex-m3", cortexm3, 7M, FL_LDSCHED, cortex)
++ARM_CORE("cortex-m1", cortexm1, 6M, FL_LDSCHED, cortex)
++ARM_CORE("cortex-m0", cortexm0, 6M, FL_LDSCHED, cortex)
++
+--- a/src/gcc/config/arm/arm-protos.h
++++ b/src/gcc/config/arm/arm-protos.h
+@@ -46,6 +46,7 @@
+ extern bool arm_small_register_classes_for_mode_p (enum machine_mode);
+ extern int arm_hard_regno_mode_ok (unsigned int, enum machine_mode);
+ extern int const_ok_for_arm (HOST_WIDE_INT);
++extern int const_ok_for_op (HOST_WIDE_INT, enum rtx_code);
+ extern int arm_split_constant (RTX_CODE, enum machine_mode, rtx,
+ HOST_WIDE_INT, rtx, rtx, int);
+ extern RTX_CODE arm_canonicalize_comparison (RTX_CODE, rtx *, rtx *);
+@@ -58,14 +59,19 @@
+ int);
+ extern rtx thumb_legitimize_reload_address (rtx *, enum machine_mode, int, int,
+ int);
++extern int thumb1_legitimate_address_p (enum machine_mode, rtx, int);
+ extern int arm_const_double_rtx (rtx);
+ extern int neg_const_double_rtx_ok_for_fpa (rtx);
+ extern int vfp3_const_double_rtx (rtx);
+ extern int neon_immediate_valid_for_move (rtx, enum machine_mode, rtx *, int *);
+ extern int neon_immediate_valid_for_logic (rtx, enum machine_mode, int, rtx *,
+ int *);
++extern int neon_immediate_valid_for_shift (rtx, enum machine_mode, rtx *,
++ int *, bool);
+ extern char *neon_output_logic_immediate (const char *, rtx *,
+ enum machine_mode, int, int);
++extern char *neon_output_shift_immediate (const char *, char, rtx *,
++ enum machine_mode, int, bool);
+ extern void neon_pairwise_reduce (rtx, rtx, enum machine_mode,
+ rtx (*) (rtx, rtx, rtx));
+ extern rtx neon_make_constant (rtx);
+@@ -81,7 +87,6 @@
+ extern enum reg_class coproc_secondary_reload_class (enum machine_mode, rtx,
+ bool);
+ extern bool arm_tls_referenced_p (rtx);
+-extern bool arm_cannot_force_const_mem (rtx);
+
+ extern int cirrus_memory_offset (rtx);
+ extern int arm_coproc_mem_operand (rtx, bool);
+@@ -152,6 +157,7 @@
+ extern const char *arm_output_memory_barrier (rtx *);
+ extern const char *arm_output_sync_insn (rtx, rtx *);
+ extern unsigned int arm_sync_loop_insns (rtx , rtx *);
++extern int arm_attr_length_push_multi(rtx, rtx);
+
+ #if defined TREE_CODE
+ extern void arm_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree);
+@@ -175,6 +181,7 @@
+ #endif
+ extern int thumb_shiftable_const (unsigned HOST_WIDE_INT);
+ #ifdef RTX_CODE
++extern enum arm_cond_code maybe_get_arm_condition_code (rtx);
+ extern void thumb1_final_prescan_insn (rtx);
+ extern void thumb2_final_prescan_insn (rtx);
+ extern const char *thumb_load_double_from_address (rtx *);
+@@ -220,9 +227,14 @@
+ bool (*rtx_costs) (rtx, RTX_CODE, RTX_CODE, int *, bool);
+ bool (*sched_adjust_cost) (rtx, rtx, rtx, int *);
+ int constant_limit;
++ /* Maximum number of instructions to conditionalise in
++ arm_final_prescan_insn. */
++ int max_insns_skipped;
+ int num_prefetch_slots;
+ int l1_cache_size;
+ int l1_cache_line_size;
++ bool prefer_constant_pool;
++ int (*branch_cost) (bool, bool);
+ };
+
+ extern const struct tune_params *current_tune;
+--- a/src/gcc/config/arm/arm-tune.md
++++ b/src/gcc/config/arm/arm-tune.md
+@@ -1,5 +1,5 @@
+ ;; -*- buffer-read-only: t -*-
+ ;; Generated automatically by gentune.sh from arm-cores.def
+ (define_attr "tune"
+- "arm2,arm250,arm3,arm6,arm60,arm600,arm610,arm620,arm7,arm7d,arm7di,arm70,arm700,arm700i,arm710,arm720,arm710c,arm7100,arm7500,arm7500fe,arm7m,arm7dm,arm7dmi,arm8,arm810,strongarm,strongarm110,strongarm1100,strongarm1110,fa526,fa626,arm7tdmi,arm7tdmis,arm710t,arm720t,arm740t,arm9,arm9tdmi,arm920,arm920t,arm922t,arm940t,ep9312,arm10tdmi,arm1020t,arm9e,arm946es,arm966es,arm968es,arm10e,arm1020e,arm1022e,xscale,iwmmxt,iwmmxt2,fa606te,fa626te,fmp626,fa726te,arm926ejs,arm1026ejs,arm1136js,arm1136jfs,arm1176jzs,arm1176jzfs,mpcorenovfp,mpcore,arm1156t2s,arm1156t2fs,cortexa5,cortexa8,cortexa9,cortexa15,cortexr4,cortexr4f,cortexm4,cortexm3,cortexm1,cortexm0"
++ "arm2,arm250,arm3,arm6,arm60,arm600,arm610,arm620,arm7,arm7d,arm7di,arm70,arm700,arm700i,arm710,arm720,arm710c,arm7100,arm7500,arm7500fe,arm7m,arm7dm,arm7dmi,arm8,arm810,strongarm,strongarm110,strongarm1100,strongarm1110,fa526,fa626,arm7tdmi,arm7tdmis,arm710t,arm720t,arm740t,arm9,arm9tdmi,arm920,arm920t,arm922t,arm940t,ep9312,arm10tdmi,arm1020t,arm9e,arm946es,arm966es,arm968es,arm10e,arm1020e,arm1022e,xscale,iwmmxt,iwmmxt2,fa606te,fa626te,fmp626,fa726te,arm926ejs,arm1026ejs,arm1136js,arm1136jfs,arm1176jzs,arm1176jzfs,mpcorenovfp,mpcore,arm1156t2s,arm1156t2fs,genericv7a,cortexa5,cortexa8,cortexa9,cortexa15,cortexr4,cortexr4f,cortexr5,cortexm4,cortexm3,cortexm1,cortexm0"
+ (const (symbol_ref "((enum attr_tune) arm_tune)")))
+--- a/src/gcc/config/arm/arm.c
++++ b/src/gcc/config/arm/arm.c
+@@ -63,6 +63,11 @@
+
+ void (*arm_lang_output_object_attributes_hook)(void);
+
++struct four_ints
++{
++ int i[4];
++};
++
+ /* Forward function declarations. */
+ static bool arm_needs_doubleword_align (enum machine_mode, const_tree);
+ static int arm_compute_static_chain_stack_bytes (void);
+@@ -81,7 +86,6 @@
+ static bool arm_legitimate_address_p (enum machine_mode, rtx, bool);
+ static int thumb_far_jump_used_p (void);
+ static bool thumb_force_lr_save (void);
+-static int const_ok_for_op (HOST_WIDE_INT, enum rtx_code);
+ static rtx emit_sfm (int, int);
+ static unsigned arm_size_return_regs (void);
+ static bool arm_assemble_integer (rtx, unsigned int, int);
+@@ -129,7 +133,13 @@
+ static int arm_comp_type_attributes (const_tree, const_tree);
+ static void arm_set_default_type_attributes (tree);
+ static int arm_adjust_cost (rtx, rtx, rtx, int);
+-static int count_insns_for_constant (HOST_WIDE_INT, int);
++static int optimal_immediate_sequence (enum rtx_code code,
++ unsigned HOST_WIDE_INT val,
++ struct four_ints *return_sequence);
++static int optimal_immediate_sequence_1 (enum rtx_code code,
++ unsigned HOST_WIDE_INT val,
++ struct four_ints *return_sequence,
++ int i);
+ static int arm_get_strip_length (int);
+ static bool arm_function_ok_for_sibcall (tree, tree);
+ static enum machine_mode arm_promote_function_mode (const_tree,
+@@ -143,6 +153,8 @@
+ static void arm_output_mi_thunk (FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT,
+ tree);
+ static bool arm_have_conditional_execution (void);
++static bool arm_cannot_force_const_mem (rtx);
++static bool arm_legitimate_constant_p (enum machine_mode, rtx);
+ static bool arm_rtx_costs_1 (rtx, enum rtx_code, int*, bool);
+ static bool arm_size_rtx_costs (rtx, enum rtx_code, enum rtx_code, int *);
+ static bool arm_slowmul_rtx_costs (rtx, enum rtx_code, enum rtx_code, int *, bool);
+@@ -160,6 +172,7 @@
+ static rtx arm_expand_binop_builtin (enum insn_code, tree, rtx);
+ static rtx arm_expand_unop_builtin (enum insn_code, tree, rtx, int);
+ static rtx arm_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
++static tree arm_builtin_decl (unsigned, bool);
+ static void emit_constant_insn (rtx cond, rtx pattern);
+ static rtx emit_set_insn (rtx, rtx);
+ static int arm_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
+@@ -241,6 +254,8 @@
+ static bool cortex_a9_sched_adjust_cost (rtx, rtx, rtx, int *);
+ static bool xscale_sched_adjust_cost (rtx, rtx, rtx, int *);
+ static bool fa726te_sched_adjust_cost (rtx, rtx, rtx, int *);
++static bool arm_array_mode_supported_p (enum machine_mode,
++ unsigned HOST_WIDE_INT);
+ static enum machine_mode arm_preferred_simd_mode (enum machine_mode);
+ static bool arm_class_likely_spilled_p (reg_class_t);
+ static bool arm_vector_alignment_reachable (const_tree type, bool is_packed);
+@@ -250,6 +265,9 @@
+ bool is_packed);
+ static void arm_conditional_register_usage (void);
+ static reg_class_t arm_preferred_rename_class (reg_class_t rclass);
++static unsigned int arm_autovectorize_vector_sizes (void);
++static int arm_default_branch_cost (bool, bool);
++static int arm_cortex_a5_branch_cost (bool, bool);
+
+
+ /* Table of machine attributes. */
+@@ -393,8 +411,13 @@
+ #define TARGET_SHIFT_TRUNCATION_MASK arm_shift_truncation_mask
+ #undef TARGET_VECTOR_MODE_SUPPORTED_P
+ #define TARGET_VECTOR_MODE_SUPPORTED_P arm_vector_mode_supported_p
++#undef TARGET_ARRAY_MODE_SUPPORTED_P
++#define TARGET_ARRAY_MODE_SUPPORTED_P arm_array_mode_supported_p
+ #undef TARGET_VECTORIZE_PREFERRED_SIMD_MODE
+ #define TARGET_VECTORIZE_PREFERRED_SIMD_MODE arm_preferred_simd_mode
++#undef TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES
++#define TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES \
++ arm_autovectorize_vector_sizes
+
+ #undef TARGET_MACHINE_DEPENDENT_REORG
+ #define TARGET_MACHINE_DEPENDENT_REORG arm_reorg
+@@ -403,6 +426,8 @@
+ #define TARGET_INIT_BUILTINS arm_init_builtins
+ #undef TARGET_EXPAND_BUILTIN
+ #define TARGET_EXPAND_BUILTIN arm_expand_builtin
++#undef TARGET_BUILTIN_DECL
++#define TARGET_BUILTIN_DECL arm_builtin_decl
+
+ #undef TARGET_INIT_LIBFUNCS
+ #define TARGET_INIT_LIBFUNCS arm_init_libfuncs
+@@ -519,6 +544,9 @@
+ #undef TARGET_HAVE_CONDITIONAL_EXECUTION
+ #define TARGET_HAVE_CONDITIONAL_EXECUTION arm_have_conditional_execution
+
++#undef TARGET_LEGITIMATE_CONSTANT_P
++#define TARGET_LEGITIMATE_CONSTANT_P arm_legitimate_constant_p
++
+ #undef TARGET_CANNOT_FORCE_CONST_MEM
+ #define TARGET_CANNOT_FORCE_CONST_MEM arm_cannot_force_const_mem
+
+@@ -659,12 +687,13 @@
+ #define FL_THUMB2 (1 << 16) /* Thumb-2. */
+ #define FL_NOTM (1 << 17) /* Instructions not present in the 'M'
+ profile. */
+-#define FL_DIV (1 << 18) /* Hardware divide. */
++#define FL_THUMB_DIV (1 << 18) /* Hardware divide (Thumb mode). */
+ #define FL_VFPV3 (1 << 19) /* Vector Floating Point V3. */
+ #define FL_NEON (1 << 20) /* Neon instructions. */
+ #define FL_ARCH7EM (1 << 21) /* Instructions present in the ARMv7E-M
+ architecture. */
+ #define FL_ARCH7 (1 << 22) /* Architecture 7. */
++#define FL_ARM_DIV (1 << 23) /* Hardware divide (ARM mode). */
+
+ #define FL_IWMMXT (1 << 29) /* XScale v2 or "Intel Wireless MMX technology". */
+
+@@ -691,8 +720,8 @@
+ #define FL_FOR_ARCH6M (FL_FOR_ARCH6 & ~FL_NOTM)
+ #define FL_FOR_ARCH7 ((FL_FOR_ARCH6T2 & ~FL_NOTM) | FL_ARCH7)
+ #define FL_FOR_ARCH7A (FL_FOR_ARCH7 | FL_NOTM | FL_ARCH6K)
+-#define FL_FOR_ARCH7R (FL_FOR_ARCH7A | FL_DIV)
+-#define FL_FOR_ARCH7M (FL_FOR_ARCH7 | FL_DIV)
++#define FL_FOR_ARCH7R (FL_FOR_ARCH7A | FL_THUMB_DIV)
++#define FL_FOR_ARCH7M (FL_FOR_ARCH7 | FL_THUMB_DIV)
+ #define FL_FOR_ARCH7EM (FL_FOR_ARCH7M | FL_ARCH7EM)
+
+ /* The bits in this mask specify which
+@@ -778,7 +807,8 @@
+ int arm_arch_thumb2;
+
+ /* Nonzero if chip supports integer division instruction. */
+-int arm_arch_hwdiv;
++int arm_arch_arm_hwdiv;
++int arm_arch_thumb_hwdiv;
+
+ /* In case of a PRE_INC, POST_INC, PRE_DEC, POST_DEC memory reference,
+ we must report the mode of the memory reference from
+@@ -851,48 +881,117 @@
+ {
+ arm_slowmul_rtx_costs,
+ NULL,
+- 3,
+- ARM_PREFETCH_NOT_BENEFICIAL
++ 3, /* Constant limit. */
++ 5, /* Max cond insns. */
++ ARM_PREFETCH_NOT_BENEFICIAL,
++ true, /* Prefer constant pool. */
++ arm_default_branch_cost
+ };
+
+ const struct tune_params arm_fastmul_tune =
+ {
+ arm_fastmul_rtx_costs,
+ NULL,
+- 1,
+- ARM_PREFETCH_NOT_BENEFICIAL
++ 1, /* Constant limit. */
++ 5, /* Max cond insns. */
++ ARM_PREFETCH_NOT_BENEFICIAL,
++ true, /* Prefer constant pool. */
++ arm_default_branch_cost
++};
++
++/* StrongARM has early execution of branches, so a sequence that is worth
++ skipping is shorter. Set max_insns_skipped to a lower value. */
++
++const struct tune_params arm_strongarm_tune =
++{
++ arm_fastmul_rtx_costs,
++ NULL,
++ 1, /* Constant limit. */
++ 3, /* Max cond insns. */
++ ARM_PREFETCH_NOT_BENEFICIAL,
++ true, /* Prefer constant pool. */
++ arm_default_branch_cost
+ };
+
+ const struct tune_params arm_xscale_tune =
+ {
+ arm_xscale_rtx_costs,
+ xscale_sched_adjust_cost,
+- 2,
+- ARM_PREFETCH_NOT_BENEFICIAL
++ 2, /* Constant limit. */
++ 3, /* Max cond insns. */
++ ARM_PREFETCH_NOT_BENEFICIAL,
++ true, /* Prefer constant pool. */
++ arm_default_branch_cost
+ };
+
+ const struct tune_params arm_9e_tune =
+ {
+ arm_9e_rtx_costs,
+ NULL,
+- 1,
+- ARM_PREFETCH_NOT_BENEFICIAL
++ 1, /* Constant limit. */
++ 5, /* Max cond insns. */
++ ARM_PREFETCH_NOT_BENEFICIAL,
++ true, /* Prefer constant pool. */
++ arm_default_branch_cost
++};
++
++const struct tune_params arm_v6t2_tune =
++{
++ arm_9e_rtx_costs,
++ NULL,
++ 1, /* Constant limit. */
++ 5, /* Max cond insns. */
++ ARM_PREFETCH_NOT_BENEFICIAL,
++ false, /* Prefer constant pool. */
++ arm_default_branch_cost
++};
++
++/* Generic Cortex tuning. Use more specific tunings if appropriate. */
++const struct tune_params arm_cortex_tune =
++{
++ arm_9e_rtx_costs,
++ NULL,
++ 1, /* Constant limit. */
++ 5, /* Max cond insns. */
++ ARM_PREFETCH_NOT_BENEFICIAL,
++ false, /* Prefer constant pool. */
++ arm_default_branch_cost
++};
++
++/* Branches can be dual-issued on Cortex-A5, so conditional execution is
++ less appealing. Set max_insns_skipped to a low value. */
++
++const struct tune_params arm_cortex_a5_tune =
++{
++ arm_9e_rtx_costs,
++ NULL,
++ 1, /* Constant limit. */
++ 1, /* Max cond insns. */
++ ARM_PREFETCH_NOT_BENEFICIAL,
++ false, /* Prefer constant pool. */
++ arm_cortex_a5_branch_cost
+ };
+
+ const struct tune_params arm_cortex_a9_tune =
+ {
+ arm_9e_rtx_costs,
+ cortex_a9_sched_adjust_cost,
+- 1,
+- ARM_PREFETCH_BENEFICIAL(4,32,32)
++ 1, /* Constant limit. */
++ 5, /* Max cond insns. */
++ ARM_PREFETCH_BENEFICIAL(4,32,32),
++ false, /* Prefer constant pool. */
++ arm_default_branch_cost
+ };
+
+ const struct tune_params arm_fa726te_tune =
+ {
+ arm_9e_rtx_costs,
+ fa726te_sched_adjust_cost,
+- 1,
+- ARM_PREFETCH_NOT_BENEFICIAL
++ 1, /* Constant limit. */
++ 5, /* Max cond insns. */
++ ARM_PREFETCH_NOT_BENEFICIAL,
++ true, /* Prefer constant pool. */
++ arm_default_branch_cost
+ };
+
+
+@@ -1698,7 +1797,8 @@
+ arm_tune_wbuf = (tune_flags & FL_WBUF) != 0;
+ arm_tune_xscale = (tune_flags & FL_XSCALE) != 0;
+ arm_arch_iwmmxt = (insn_flags & FL_IWMMXT) != 0;
+- arm_arch_hwdiv = (insn_flags & FL_DIV) != 0;
++ arm_arch_thumb_hwdiv = (insn_flags & FL_THUMB_DIV) != 0;
++ arm_arch_arm_hwdiv = (insn_flags & FL_ARM_DIV) != 0;
+ arm_tune_cortex_a9 = (arm_tune == cortexa9) != 0;
+
+ /* If we are not using the default (ARM mode) section anchor offset
+@@ -1965,6 +2065,28 @@
+ fix_cm3_ldrd = 0;
+ }
+
++ /* Enable -munaligned-access by default for
++ - all ARMv6 architecture-based processors
++ - ARMv7-A, ARMv7-R, and ARMv7-M architecture-based processors.
++
++ Disable -munaligned-access by default for
++ - all pre-ARMv6 architecture-based processors
++ - ARMv6-M architecture-based processors. */
++
++ if (unaligned_access == 2)
++ {
++ if (arm_arch6 && (arm_arch_notm || arm_arch7))
++ unaligned_access = 1;
++ else
++ unaligned_access = 0;
++ }
++ else if (unaligned_access == 1
++ && !(arm_arch6 && (arm_arch_notm || arm_arch7)))
++ {
++ warning (0, "target CPU does not support unaligned accesses");
++ unaligned_access = 0;
++ }
++
+ if (TARGET_THUMB1 && flag_schedule_insns)
+ {
+ /* Don't warn since it's on by default in -O2. */
+@@ -1978,12 +2100,7 @@
+ max_insns_skipped = 6;
+ }
+ else
+- {
+- /* StrongARM has early execution of branches, so a sequence
+- that is worth skipping is shorter. */
+- if (arm_tune_strongarm)
+- max_insns_skipped = 3;
+- }
++ max_insns_skipped = current_tune->max_insns_skipped;
+
+ /* Hot/Cold partitioning is not currently supported, since we can't
+ handle literal pool placement in that case. */
+@@ -2440,7 +2557,7 @@
+ }
+
+ /* Return true if I is a valid constant for the operation CODE. */
+-static int
++int
+ const_ok_for_op (HOST_WIDE_INT i, enum rtx_code code)
+ {
+ if (const_ok_for_arm (i))
+@@ -2448,7 +2565,21 @@
+
+ switch (code)
+ {
++ case SET:
++ /* See if we can use movw. */
++ if (arm_arch_thumb2 && (i & 0xffff0000) == 0)
++ return 1;
++ else
++ return 0;
++
+ case PLUS:
++ /* See if we can use addw or subw. */
++ if (TARGET_THUMB2
++ && ((i & 0xfffff000) == 0
++ || ((-i) & 0xfffff000) == 0))
++ return 1;
++ /* else fall through. */
++
+ case COMPARE:
+ case EQ:
+ case NE:
+@@ -2564,68 +2695,41 @@
+ 1);
+ }
+
+-/* Return the number of instructions required to synthesize the given
+- constant, if we start emitting them from bit-position I. */
+-static int
+-count_insns_for_constant (HOST_WIDE_INT remainder, int i)
+-{
+- HOST_WIDE_INT temp1;
+- int step_size = TARGET_ARM ? 2 : 1;
+- int num_insns = 0;
+-
+- gcc_assert (TARGET_ARM || i == 0);
+-
+- do
+- {
+- int end;
+-
+- if (i <= 0)
+- i += 32;
+- if (remainder & (((1 << step_size) - 1) << (i - step_size)))
+- {
+- end = i - 8;
+- if (end < 0)
+- end += 32;
+- temp1 = remainder & ((0x0ff << end)
+- | ((i < end) ? (0xff >> (32 - end)) : 0));
+- remainder &= ~temp1;
+- num_insns++;
+- i -= 8 - step_size;
+- }
+- i -= step_size;
+- } while (remainder);
+- return num_insns;
+-}
+-
++/* Return a sequence of integers, in RETURN_SEQUENCE that fit into
++ ARM/THUMB2 immediates, and add up to VAL.
++ Thr function return value gives the number of insns required. */
+ static int
+-find_best_start (unsigned HOST_WIDE_INT remainder)
++optimal_immediate_sequence (enum rtx_code code, unsigned HOST_WIDE_INT val,
++ struct four_ints *return_sequence)
+ {
+ int best_consecutive_zeros = 0;
+ int i;
+ int best_start = 0;
++ int insns1, insns2;
++ struct four_ints tmp_sequence;
+
+ /* If we aren't targetting ARM, the best place to start is always at
+- the bottom. */
+- if (! TARGET_ARM)
+- return 0;
+-
+- for (i = 0; i < 32; i += 2)
++ the bottom, otherwise look more closely. */
++ if (TARGET_ARM)
+ {
+- int consecutive_zeros = 0;
+-
+- if (!(remainder & (3 << i)))
++ for (i = 0; i < 32; i += 2)
+ {
+- while ((i < 32) && !(remainder & (3 << i)))
+- {
+- consecutive_zeros += 2;
+- i += 2;
+- }
+- if (consecutive_zeros > best_consecutive_zeros)
++ int consecutive_zeros = 0;
++
++ if (!(val & (3 << i)))
+ {
+- best_consecutive_zeros = consecutive_zeros;
+- best_start = i - consecutive_zeros;
++ while ((i < 32) && !(val & (3 << i)))
++ {
++ consecutive_zeros += 2;
++ i += 2;
++ }
++ if (consecutive_zeros > best_consecutive_zeros)
++ {
++ best_consecutive_zeros = consecutive_zeros;
++ best_start = i - consecutive_zeros;
++ }
++ i -= 2;
+ }
+- i -= 2;
+ }
+ }
+
+@@ -2652,13 +2756,161 @@
+ the constant starting from `best_start', and also starting from
+ zero (i.e. with bit 31 first to be output). If `best_start' doesn't
+ yield a shorter sequence, we may as well use zero. */
++ insns1 = optimal_immediate_sequence_1 (code, val, return_sequence, best_start);
+ if (best_start != 0
+- && ((((unsigned HOST_WIDE_INT) 1) << best_start) < remainder)
+- && (count_insns_for_constant (remainder, 0) <=
+- count_insns_for_constant (remainder, best_start)))
+- best_start = 0;
++ && ((((unsigned HOST_WIDE_INT) 1) << best_start) < val))
++ {
++ insns2 = optimal_immediate_sequence_1 (code, val, &tmp_sequence, 0);
++ if (insns2 <= insns1)
++ {
++ *return_sequence = tmp_sequence;
++ insns1 = insns2;
++ }
++ }
++
++ return insns1;
++}
++
++/* As for optimal_immediate_sequence, but starting at bit-position I. */
++static int
++optimal_immediate_sequence_1 (enum rtx_code code, unsigned HOST_WIDE_INT val,
++ struct four_ints *return_sequence, int i)
++{
++ int remainder = val & 0xffffffff;
++ int insns = 0;
++
++ /* Try and find a way of doing the job in either two or three
++ instructions.
++
++ In ARM mode we can use 8-bit constants, rotated to any 2-bit aligned
++ location. We start at position I. This may be the MSB, or
++ optimial_immediate_sequence may have positioned it at the largest block
++ of zeros that are aligned on a 2-bit boundary. We then fill up the temps,
++ wrapping around to the top of the word when we drop off the bottom.
++ In the worst case this code should produce no more than four insns.
++
++ In Thumb2 mode, we can use 32/16-bit replicated constants, and 8-bit
++ constants, shifted to any arbitrary location. We should always start
++ at the MSB. */
++ do
++ {
++ int end;
++ unsigned int b1, b2, b3, b4;
++ unsigned HOST_WIDE_INT result;
++ int loc;
++
++ gcc_assert (insns < 4);
++
++ if (i <= 0)
++ i += 32;
++
++ /* First, find the next normal 12/8-bit shifted/rotated immediate. */
++ if (remainder & ((TARGET_ARM ? (3 << (i - 2)) : (1 << (i - 1)))))
++ {
++ loc = i;
++ if (i <= 12 && TARGET_THUMB2 && code == PLUS)
++ /* We can use addw/subw for the last 12 bits. */
++ result = remainder;
++ else
++ {
++ /* Use an 8-bit shifted/rotated immediate. */
++ end = i - 8;
++ if (end < 0)
++ end += 32;
++ result = remainder & ((0x0ff << end)
++ | ((i < end) ? (0xff >> (32 - end))
++ : 0));
++ i -= 8;
++ }
++ }
++ else
++ {
++ /* Arm allows rotates by a multiple of two. Thumb-2 allows
++ arbitrary shifts. */
++ i -= TARGET_ARM ? 2 : 1;
++ continue;
++ }
++
++ /* Next, see if we can do a better job with a thumb2 replicated
++ constant.
++
++ We do it this way around to catch the cases like 0x01F001E0 where
++ two 8-bit immediates would work, but a replicated constant would
++ make it worse.
++
++ TODO: 16-bit constants that don't clear all the bits, but still win.
++ TODO: Arithmetic splitting for set/add/sub, rather than bitwise. */
++ if (TARGET_THUMB2)
++ {
++ b1 = (remainder & 0xff000000) >> 24;
++ b2 = (remainder & 0x00ff0000) >> 16;
++ b3 = (remainder & 0x0000ff00) >> 8;
++ b4 = remainder & 0xff;
++
++ if (loc > 24)
++ {
++ /* The 8-bit immediate already found clears b1 (and maybe b2),
++ but must leave b3 and b4 alone. */
++
++ /* First try to find a 32-bit replicated constant that clears
++ almost everything. We can assume that we can't do it in one,
++ or else we wouldn't be here. */
++ unsigned int tmp = b1 & b2 & b3 & b4;
++ unsigned int tmp2 = tmp + (tmp << 8) + (tmp << 16)
++ + (tmp << 24);
++ unsigned int matching_bytes = (tmp == b1) + (tmp == b2)
++ + (tmp == b3) + (tmp == b4);
++ if (tmp
++ && (matching_bytes >= 3
++ || (matching_bytes == 2
++ && const_ok_for_op (remainder & ~tmp2, code))))
++ {
++ /* At least 3 of the bytes match, and the fourth has at
++ least as many bits set, or two of the bytes match
++ and it will only require one more insn to finish. */
++ result = tmp2;
++ i = tmp != b1 ? 32
++ : tmp != b2 ? 24
++ : tmp != b3 ? 16
++ : 8;
++ }
++
++ /* Second, try to find a 16-bit replicated constant that can
++ leave three of the bytes clear. If b2 or b4 is already
++ zero, then we can. If the 8-bit from above would not
++ clear b2 anyway, then we still win. */
++ else if (b1 == b3 && (!b2 || !b4
++ || (remainder & 0x00ff0000 & ~result)))
++ {
++ result = remainder & 0xff00ff00;
++ i = 24;
++ }
++ }
++ else if (loc > 16)
++ {
++ /* The 8-bit immediate already found clears b2 (and maybe b3)
++ and we don't get here unless b1 is alredy clear, but it will
++ leave b4 unchanged. */
++
++ /* If we can clear b2 and b4 at once, then we win, since the
++ 8-bits couldn't possibly reach that far. */
++ if (b2 == b4)
++ {
++ result = remainder & 0x00ff00ff;
++ i = 16;
++ }
++ }
++ }
+
+- return best_start;
++ return_sequence->i[insns++] = result;
++ remainder &= ~result;
++
++ if (code == SET || code == MINUS)
++ code = PLUS;
++ }
++ while (remainder);
++
++ return insns;
+ }
+
+ /* Emit an instruction with the indicated PATTERN. If COND is
+@@ -2675,7 +2927,6 @@
+
+ /* As above, but extra parameter GENERATE which, if clear, suppresses
+ RTL generation. */
+-/* ??? This needs more work for thumb2. */
+
+ static int
+ arm_gen_constant (enum rtx_code code, enum machine_mode mode, rtx cond,
+@@ -2687,15 +2938,15 @@
+ int final_invert = 0;
+ int can_negate_initial = 0;
+ int i;
+- int num_bits_set = 0;
+ int set_sign_bit_copies = 0;
+ int clear_sign_bit_copies = 0;
+ int clear_zero_bit_copies = 0;
+ int set_zero_bit_copies = 0;
+- int insns = 0;
++ int insns = 0, neg_insns, inv_insns;
+ unsigned HOST_WIDE_INT temp1, temp2;
+ unsigned HOST_WIDE_INT remainder = val & 0xffffffff;
+- int step_size = TARGET_ARM ? 2 : 1;
++ struct four_ints *immediates;
++ struct four_ints pos_immediates, neg_immediates, inv_immediates;
+
+ /* Find out which operations are safe for a given CODE. Also do a quick
+ check for degenerate cases; these can occur when DImode operations
+@@ -2704,7 +2955,6 @@
+ {
+ case SET:
+ can_invert = 1;
+- can_negate = 1;
+ break;
+
+ case PLUS:
+@@ -2732,9 +2982,6 @@
+ gen_rtx_SET (VOIDmode, target, source));
+ return 1;
+ }
+-
+- if (TARGET_THUMB2)
+- can_invert = 1;
+ break;
+
+ case AND:
+@@ -2776,6 +3023,7 @@
+ gen_rtx_NOT (mode, source)));
+ return 1;
+ }
++ final_invert = 1;
+ break;
+
+ case MINUS:
+@@ -2798,7 +3046,6 @@
+ source)));
+ return 1;
+ }
+- can_negate = 1;
+
+ break;
+
+@@ -2807,9 +3054,7 @@
+ }
+
+ /* If we can do it in one insn get out quickly. */
+- if (const_ok_for_arm (val)
+- || (can_negate_initial && const_ok_for_arm (-val))
+- || (can_invert && const_ok_for_arm (~val)))
++ if (const_ok_for_op (val, code))
+ {
+ if (generate)
+ emit_constant_insn (cond,
+@@ -2862,15 +3107,6 @@
+ switch (code)
+ {
+ case SET:
+- /* See if we can use movw. */
+- if (arm_arch_thumb2 && (remainder & 0xffff0000) == 0)
+- {
+- if (generate)
+- emit_constant_insn (cond, gen_rtx_SET (VOIDmode, target,
+- GEN_INT (val)));
+- return 1;
+- }
+-
+ /* See if we can do this by sign_extending a constant that is known
+ to be negative. This is a good, way of doing it, since the shift
+ may well merge into a subsequent insn. */
+@@ -3221,121 +3457,97 @@
+ break;
+ }
+
+- for (i = 0; i < 32; i++)
+- if (remainder & (1 << i))
+- num_bits_set++;
+-
+- if ((code == AND)
+- || (code != IOR && can_invert && num_bits_set > 16))
+- remainder ^= 0xffffffff;
+- else if (code == PLUS && num_bits_set > 16)
+- remainder = (-remainder) & 0xffffffff;
+-
+- /* For XOR, if more than half the bits are set and there's a sequence
+- of more than 8 consecutive ones in the pattern then we can XOR by the
+- inverted constant and then invert the final result; this may save an
+- instruction and might also lead to the final mvn being merged with
+- some other operation. */
+- else if (code == XOR && num_bits_set > 16
+- && (count_insns_for_constant (remainder ^ 0xffffffff,
+- find_best_start
+- (remainder ^ 0xffffffff))
+- < count_insns_for_constant (remainder,
+- find_best_start (remainder))))
++ /* Calculate what the instruction sequences would be if we generated it
++ normally, negated, or inverted. */
++ if (code == AND)
++ /* AND cannot be split into multiple insns, so invert and use BIC. */
++ insns = 99;
++ else
++ insns = optimal_immediate_sequence (code, remainder, &pos_immediates);
++
++ if (can_negate)
++ neg_insns = optimal_immediate_sequence (code, (-remainder) & 0xffffffff,
++ &neg_immediates);
++ else
++ neg_insns = 99;
++
++ if (can_invert || final_invert)
++ inv_insns = optimal_immediate_sequence (code, remainder ^ 0xffffffff,
++ &inv_immediates);
++ else
++ inv_insns = 99;
++
++ immediates = &pos_immediates;
++
++ /* Is the negated immediate sequence more efficient? */
++ if (neg_insns < insns && neg_insns <= inv_insns)
+ {
+- remainder ^= 0xffffffff;
+- final_invert = 1;
++ insns = neg_insns;
++ immediates = &neg_immediates;
++ }
++ else
++ can_negate = 0;
++
++ /* Is the inverted immediate sequence more efficient?
++ We must allow for an extra NOT instruction for XOR operations, although
++ there is some chance that the final 'mvn' will get optimized later. */
++ if ((inv_insns + 1) < insns || (!final_invert && inv_insns < insns))
++ {
++ insns = inv_insns;
++ immediates = &inv_immediates;
+ }
+ else
+ {
+ can_invert = 0;
+- can_negate = 0;
++ final_invert = 0;
+ }
+
+- /* Now try and find a way of doing the job in either two or three
+- instructions.
+- We start by looking for the largest block of zeros that are aligned on
+- a 2-bit boundary, we then fill up the temps, wrapping around to the
+- top of the word when we drop off the bottom.
+- In the worst case this code should produce no more than four insns.
+- Thumb-2 constants are shifted, not rotated, so the MSB is always the
+- best place to start. */
+-
+- /* ??? Use thumb2 replicated constants when the high and low halfwords are
+- the same. */
+- {
+- /* Now start emitting the insns. */
+- i = find_best_start (remainder);
+- do
+- {
+- int end;
++ /* Now output the chosen sequence as instructions. */
++ if (generate)
++ {
++ for (i = 0; i < insns; i++)
++ {
++ rtx new_src, temp1_rtx;
+
+- if (i <= 0)
+- i += 32;
+- if (remainder & (3 << (i - 2)))
+- {
+- end = i - 8;
+- if (end < 0)
+- end += 32;
+- temp1 = remainder & ((0x0ff << end)
+- | ((i < end) ? (0xff >> (32 - end)) : 0));
+- remainder &= ~temp1;
++ temp1 = immediates->i[i];
+
+- if (generate)
+- {
+- rtx new_src, temp1_rtx;
++ if (code == SET || code == MINUS)
++ new_src = (subtargets ? gen_reg_rtx (mode) : target);
++ else if ((final_invert || i < (insns - 1)) && subtargets)
++ new_src = gen_reg_rtx (mode);
++ else
++ new_src = target;
+
+- if (code == SET || code == MINUS)
+- {
+- new_src = (subtargets ? gen_reg_rtx (mode) : target);
+- if (can_invert && code != MINUS)
+- temp1 = ~temp1;
+- }
+- else
+- {
+- if ((final_invert || remainder) && subtargets)
+- new_src = gen_reg_rtx (mode);
+- else
+- new_src = target;
+- if (can_invert)
+- temp1 = ~temp1;
+- else if (can_negate)
+- temp1 = -temp1;
+- }
++ if (can_invert)
++ temp1 = ~temp1;
++ else if (can_negate)
++ temp1 = -temp1;
+
+- temp1 = trunc_int_for_mode (temp1, mode);
+- temp1_rtx = GEN_INT (temp1);
++ temp1 = trunc_int_for_mode (temp1, mode);
++ temp1_rtx = GEN_INT (temp1);
+
+- if (code == SET)
+- ;
+- else if (code == MINUS)
+- temp1_rtx = gen_rtx_MINUS (mode, temp1_rtx, source);
+- else
+- temp1_rtx = gen_rtx_fmt_ee (code, mode, source, temp1_rtx);
++ if (code == SET)
++ ;
++ else if (code == MINUS)
++ temp1_rtx = gen_rtx_MINUS (mode, temp1_rtx, source);
++ else
++ temp1_rtx = gen_rtx_fmt_ee (code, mode, source, temp1_rtx);
+
+- emit_constant_insn (cond,
+- gen_rtx_SET (VOIDmode, new_src,
+- temp1_rtx));
+- source = new_src;
+- }
++ emit_constant_insn (cond,
++ gen_rtx_SET (VOIDmode, new_src,
++ temp1_rtx));
++ source = new_src;
+
+- if (code == SET)
+- {
+- can_invert = 0;
+- code = PLUS;
+- }
+- else if (code == MINUS)
++ if (code == SET)
++ {
++ can_negate = can_invert;
++ can_invert = 0;
+ code = PLUS;
+-
+- insns++;
+- i -= 8 - step_size;
+- }
+- /* Arm allows rotates by a multiple of two. Thumb-2 allows arbitrary
+- shifts. */
+- i -= step_size;
+- }
+- while (remainder);
+- }
++ }
++ else if (code == MINUS)
++ code = PLUS;
++ }
++ }
+
+ if (final_invert)
+ {
+@@ -5916,7 +6128,7 @@
+ addresses based on the frame pointer or arg pointer until the
+ reload pass starts. This is so that eliminating such addresses
+ into stack based ones won't produce impossible code. */
+-static int
++int
+ thumb1_legitimate_address_p (enum machine_mode mode, rtx x, int strict_p)
+ {
+ /* ??? Not clear if this is right. Experiment. */
+@@ -6406,23 +6618,134 @@
+ HOST_WIDE_INT val = INTVAL (XEXP (*p, 1));
+ HOST_WIDE_INT low, high;
+
+- if (mode == DImode || (mode == DFmode && TARGET_SOFT_FLOAT))
+- low = ((val & 0xf) ^ 0x8) - 0x8;
+- else if (TARGET_MAVERICK && TARGET_HARD_FLOAT)
+- /* Need to be careful, -256 is not a valid offset. */
+- low = val >= 0 ? (val & 0xff) : -((-val) & 0xff);
+- else if (mode == SImode
+- || (mode == SFmode && TARGET_SOFT_FLOAT)
+- || ((mode == HImode || mode == QImode) && ! arm_arch4))
+- /* Need to be careful, -4096 is not a valid offset. */
+- low = val >= 0 ? (val & 0xfff) : -((-val) & 0xfff);
+- else if ((mode == HImode || mode == QImode) && arm_arch4)
+- /* Need to be careful, -256 is not a valid offset. */
+- low = val >= 0 ? (val & 0xff) : -((-val) & 0xff);
+- else if (GET_MODE_CLASS (mode) == MODE_FLOAT
+- && TARGET_HARD_FLOAT && TARGET_FPA)
+- /* Need to be careful, -1024 is not a valid offset. */
+- low = val >= 0 ? (val & 0x3ff) : -((-val) & 0x3ff);
++ /* Detect coprocessor load/stores. */
++ bool coproc_p = ((TARGET_HARD_FLOAT
++ && (TARGET_VFP || TARGET_FPA || TARGET_MAVERICK)
++ && (mode == SFmode || mode == DFmode
++ || (mode == DImode && TARGET_MAVERICK)))
++ || (TARGET_REALLY_IWMMXT
++ && VALID_IWMMXT_REG_MODE (mode))
++ || (TARGET_NEON
++ && (VALID_NEON_DREG_MODE (mode)
++ || VALID_NEON_QREG_MODE (mode))));
++
++ /* For some conditions, bail out when lower two bits are unaligned. */
++ if ((val & 0x3) != 0
++ /* Coprocessor load/store indexes are 8-bits + '00' appended. */
++ && (coproc_p
++ /* For DI, and DF under soft-float: */
++ || ((mode == DImode || mode == DFmode)
++ /* Without ldrd, we use stm/ldm, which does not
++ fair well with unaligned bits. */
++ && (! TARGET_LDRD
++ /* Thumb-2 ldrd/strd is [-1020,+1020] in steps of 4. */
++ || TARGET_THUMB2))))
++ return false;
++
++ /* When breaking down a [reg+index] reload address into [(reg+high)+low],
++ of which the (reg+high) gets turned into a reload add insn,
++ we try to decompose the index into high/low values that can often
++ also lead to better reload CSE.
++ For example:
++ ldr r0, [r2, #4100] // Offset too large
++ ldr r1, [r2, #4104] // Offset too large
++
++ is best reloaded as:
++ add t1, r2, #4096
++ ldr r0, [t1, #4]
++ add t2, r2, #4096
++ ldr r1, [t2, #8]
++
++ which post-reload CSE can simplify in most cases to eliminate the
++ second add instruction:
++ add t1, r2, #4096
++ ldr r0, [t1, #4]
++ ldr r1, [t1, #8]
++
++ The idea here is that we want to split out the bits of the constant
++ as a mask, rather than as subtracting the maximum offset that the
++ respective type of load/store used can handle.
++
++ When encountering negative offsets, we can still utilize it even if
++ the overall offset is positive; sometimes this may lead to an immediate
++ that can be constructed with fewer instructions.
++ For example:
++ ldr r0, [r2, #0x3FFFFC]
++
++ This is best reloaded as:
++ add t1, r2, #0x400000
++ ldr r0, [t1, #-4]
++
++ The trick for spotting this for a load insn with N bits of offset
++ (i.e. bits N-1:0) is to look at bit N; if it is set, then chose a
++ negative offset that is going to make bit N and all the bits below
++ it become zero in the remainder part.
++
++ The SIGN_MAG_LOW_ADDR_BITS macro below implements this, with respect
++ to sign-magnitude addressing (i.e. separate +- bit, or 1's complement),
++ used in most cases of ARM load/store instructions. */
++
++#define SIGN_MAG_LOW_ADDR_BITS(VAL, N) \
++ (((VAL) & ((1 << (N)) - 1)) \
++ ? (((VAL) & ((1 << ((N) + 1)) - 1)) ^ (1 << (N))) - (1 << (N)) \
++ : 0)
++
++ if (coproc_p)
++ {
++ low = SIGN_MAG_LOW_ADDR_BITS (val, 10);
++
++ /* NEON quad-word load/stores are made of two double-word accesses,
++ so the valid index range is reduced by 8. Treat as 9-bit range if
++ we go over it. */
++ if (TARGET_NEON && VALID_NEON_QREG_MODE (mode) && low >= 1016)
++ low = SIGN_MAG_LOW_ADDR_BITS (val, 9);
++ }
++ else if (GET_MODE_SIZE (mode) == 8)
++ {
++ if (TARGET_LDRD)
++ low = (TARGET_THUMB2
++ ? SIGN_MAG_LOW_ADDR_BITS (val, 10)
++ : SIGN_MAG_LOW_ADDR_BITS (val, 8));
++ else
++ /* For pre-ARMv5TE (without ldrd), we use ldm/stm(db/da/ib)
++ to access doublewords. The supported load/store offsets are
++ -8, -4, and 4, which we try to produce here. */
++ low = ((val & 0xf) ^ 0x8) - 0x8;
++ }
++ else if (GET_MODE_SIZE (mode) < 8)
++ {
++ /* NEON element load/stores do not have an offset. */
++ if (TARGET_NEON_FP16 && mode == HFmode)
++ return false;
++
++ if (TARGET_THUMB2)
++ {
++ /* Thumb-2 has an asymmetrical index range of (-256,4096).
++ Try the wider 12-bit range first, and re-try if the result
++ is out of range. */
++ low = SIGN_MAG_LOW_ADDR_BITS (val, 12);
++ if (low < -255)
++ low = SIGN_MAG_LOW_ADDR_BITS (val, 8);
++ }
++ else
++ {
++ if (mode == HImode || mode == HFmode)
++ {
++ if (arm_arch4)
++ low = SIGN_MAG_LOW_ADDR_BITS (val, 8);
++ else
++ {
++ /* The storehi/movhi_bytes fallbacks can use only
++ [-4094,+4094] of the full ldrb/strb index range. */
++ low = SIGN_MAG_LOW_ADDR_BITS (val, 12);
++ if (low == 4095 || low == -4095)
++ return false;
++ }
++ }
++ else
++ low = SIGN_MAG_LOW_ADDR_BITS (val, 12);
++ }
++ }
+ else
+ return false;
+
+@@ -6535,9 +6858,47 @@
+ return for_each_rtx (&x, arm_tls_operand_p_1, NULL);
+ }
+
++/* Implement TARGET_LEGITIMATE_CONSTANT_P.
++
++ On the ARM, allow any integer (invalid ones are removed later by insn
++ patterns), nice doubles and symbol_refs which refer to the function's
++ constant pool XXX.
++
++ When generating pic allow anything. */
++
++static bool
++arm_legitimate_constant_p_1 (enum machine_mode mode, rtx x)
++{
++ /* At present, we have no support for Neon structure constants, so forbid
++ them here. It might be possible to handle simple cases like 0 and -1
++ in future. */
++ if (TARGET_NEON && VALID_NEON_STRUCT_MODE (mode))
++ return false;
++
++ return flag_pic || !label_mentioned_p (x);
++}
++
++static bool
++thumb_legitimate_constant_p (enum machine_mode mode ATTRIBUTE_UNUSED, rtx x)
++{
++ return (GET_CODE (x) == CONST_INT
++ || GET_CODE (x) == CONST_DOUBLE
++ || CONSTANT_ADDRESS_P (x)
++ || flag_pic);
++}
++
++static bool
++arm_legitimate_constant_p (enum machine_mode mode, rtx x)
++{
++ return (!arm_cannot_force_const_mem (x)
++ && (TARGET_32BIT
++ ? arm_legitimate_constant_p_1 (mode, x)
++ : thumb_legitimate_constant_p (mode, x)));
++}
++
+ /* Implement TARGET_CANNOT_FORCE_CONST_MEM. */
+
+-bool
++static bool
+ arm_cannot_force_const_mem (rtx x)
+ {
+ rtx base, offset;
+@@ -7233,6 +7594,9 @@
+ *total = COSTS_N_INSNS (4);
+ return true;
+
++ case SET:
++ return false;
++
+ default:
+ *total = COSTS_N_INSNS (4);
+ return false;
+@@ -7580,6 +7944,9 @@
+ *total = COSTS_N_INSNS (1) + 1;
+ return true;
+
++ case SET:
++ return false;
++
+ default:
+ if (mode != VOIDmode)
+ *total = COSTS_N_INSNS (ARM_NUM_REGS (mode));
+@@ -8160,6 +8527,21 @@
+ return cost;
+ }
+
++static int
++arm_default_branch_cost (bool speed_p, bool predictable_p ATTRIBUTE_UNUSED)
++{
++ if (TARGET_32BIT)
++ return (TARGET_THUMB2 && !speed_p) ? 1 : 4;
++ else
++ return (optimize > 0) ? 2 : 0;
++}
++
++static int
++arm_cortex_a5_branch_cost (bool speed_p, bool predictable_p)
++{
++ return speed_p ? 0 : arm_default_branch_cost (speed_p, predictable_p);
++}
++
+ static int fp_consts_inited = 0;
+
+ /* Only zero is valid for VFP. Other values are also valid for FPA. */
+@@ -8617,24 +8999,106 @@
+ return 1;
+ }
+
+-/* Return a string suitable for output of Neon immediate logic operation
+- MNEM. */
++/* Return TRUE if rtx OP is legal for use in a VSHR or VSHL instruction. If
++ the immediate is valid, write a constant suitable for using as an operand
++ to VSHR/VSHL to *MODCONST and the corresponding element width to
++ *ELEMENTWIDTH. ISLEFTSHIFT is for determine left or right shift,
++ because they have different limitations. */
+
+-char *
+-neon_output_logic_immediate (const char *mnem, rtx *op2, enum machine_mode mode,
+- int inverse, int quad)
++int
++neon_immediate_valid_for_shift (rtx op, enum machine_mode mode,
++ rtx *modconst, int *elementwidth,
++ bool isleftshift)
+ {
+- int width, is_valid;
+- static char templ[40];
++ unsigned int innersize = GET_MODE_SIZE (GET_MODE_INNER (mode));
++ unsigned int n_elts = CONST_VECTOR_NUNITS (op), i;
++ unsigned HOST_WIDE_INT last_elt = 0;
++ unsigned HOST_WIDE_INT maxshift;
+
+- is_valid = neon_immediate_valid_for_logic (*op2, mode, inverse, op2, &width);
++ /* Split vector constant out into a byte vector. */
++ for (i = 0; i < n_elts; i++)
++ {
++ rtx el = CONST_VECTOR_ELT (op, i);
++ unsigned HOST_WIDE_INT elpart;
+
+- gcc_assert (is_valid != 0);
++ if (GET_CODE (el) == CONST_INT)
++ elpart = INTVAL (el);
++ else if (GET_CODE (el) == CONST_DOUBLE)
++ return 0;
++ else
++ gcc_unreachable ();
+
+- if (quad)
+- sprintf (templ, "%s.i%d\t%%q0, %%2", mnem, width);
+- else
+- sprintf (templ, "%s.i%d\t%%P0, %%2", mnem, width);
++ if (i != 0 && elpart != last_elt)
++ return 0;
++
++ last_elt = elpart;
++ }
++
++ /* Shift less than element size. */
++ maxshift = innersize * 8;
++
++ if (isleftshift)
++ {
++ /* Left shift immediate value can be from 0 to <size>-1. */
++ if (last_elt >= maxshift)
++ return 0;
++ }
++ else
++ {
++ /* Right shift immediate value can be from 1 to <size>. */
++ if (last_elt == 0 || last_elt > maxshift)
++ return 0;
++ }
++
++ if (elementwidth)
++ *elementwidth = innersize * 8;
++
++ if (modconst)
++ *modconst = CONST_VECTOR_ELT (op, 0);
++
++ return 1;
++}
++
++/* Return a string suitable for output of Neon immediate logic operation
++ MNEM. */
++
++char *
++neon_output_logic_immediate (const char *mnem, rtx *op2, enum machine_mode mode,
++ int inverse, int quad)
++{
++ int width, is_valid;
++ static char templ[40];
++
++ is_valid = neon_immediate_valid_for_logic (*op2, mode, inverse, op2, &width);
++
++ gcc_assert (is_valid != 0);
++
++ if (quad)
++ sprintf (templ, "%s.i%d\t%%q0, %%2", mnem, width);
++ else
++ sprintf (templ, "%s.i%d\t%%P0, %%2", mnem, width);
++
++ return templ;
++}
++
++/* Return a string suitable for output of Neon immediate shift operation
++ (VSHR or VSHL) MNEM. */
++
++char *
++neon_output_shift_immediate (const char *mnem, char sign, rtx *op2,
++ enum machine_mode mode, int quad,
++ bool isleftshift)
++{
++ int width, is_valid;
++ static char templ[40];
++
++ is_valid = neon_immediate_valid_for_shift (*op2, mode, op2, &width, isleftshift);
++ gcc_assert (is_valid != 0);
++
++ if (quad)
++ sprintf (templ, "%s.%c%d\t%%q0, %%q1, %%2", mnem, sign, width);
++ else
++ sprintf (templ, "%s.%c%d\t%%P0, %%P1, %%2", mnem, sign, width);
+
+ return templ;
+ }
+@@ -9111,6 +9575,11 @@
+ if (GET_CODE (ind) == REG)
+ return arm_address_register_rtx_p (ind, 0);
+
++ /* vldm/vstm allows POST_INC (ia) and PRE_DEC (db). */
++ if (GET_CODE (ind) == POST_INC
++ || GET_CODE (ind) == PRE_DEC)
++ return arm_address_register_rtx_p (XEXP (ind, 0), 0);
++
+ return FALSE;
+ }
+
+@@ -9139,11 +9608,14 @@
+ return GENERAL_REGS;
+ }
+
++ /* The neon move patterns handle all legitimate vector and struct
++ addresses. */
+ if (TARGET_NEON
++ && (MEM_P (x) || GET_CODE (x) == CONST_VECTOR)
+ && (GET_MODE_CLASS (mode) == MODE_VECTOR_INT
+- || GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
+- && neon_vector_mem_operand (x, 0))
+- return NO_REGS;
++ || GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT
++ || VALID_NEON_STRUCT_MODE (mode)))
++ return NO_REGS;
+
+ if (arm_coproc_mem_operand (x, wb) || s_register_operand (x, mode))
+ return NO_REGS;
+@@ -9812,6 +10284,9 @@
+ rtx base_reg_rtx = NULL;
+ int i, stm_case;
+
++ /* Write back of base register is currently only supported for Thumb 1. */
++ int base_writeback = TARGET_THUMB1;
++
+ /* Can only handle up to MAX_LDM_STM_OPS insns at present, though could be
+ easily extended if required. */
+ gcc_assert (nops >= 2 && nops <= MAX_LDM_STM_OPS);
+@@ -9869,7 +10344,9 @@
+ /* If it isn't an integer register, then we can't do this. */
+ if (unsorted_regs[i] < 0
+ || (TARGET_THUMB1 && unsorted_regs[i] > LAST_LO_REGNUM)
+- || (TARGET_THUMB2 && unsorted_regs[i] == base_reg)
++ /* The effects are unpredictable if the base register is
++ both updated and stored. */
++ || (base_writeback && unsorted_regs[i] == base_reg)
+ || (TARGET_THUMB2 && unsorted_regs[i] == SP_REGNUM)
+ || unsorted_regs[i] > 14)
+ return 0;
+@@ -10331,6 +10808,335 @@
+ return true;
+ }
+
++/* Copy a block of memory using plain ldr/str/ldrh/strh instructions, to permit
++ unaligned copies on processors which support unaligned semantics for those
++ instructions. INTERLEAVE_FACTOR can be used to attempt to hide load latency
++ (using more registers) by doing e.g. load/load/store/store for a factor of 2.
++ An interleave factor of 1 (the minimum) will perform no interleaving.
++ Load/store multiple are used for aligned addresses where possible. */
++
++static void
++arm_block_move_unaligned_straight (rtx dstbase, rtx srcbase,
++ HOST_WIDE_INT length,
++ unsigned int interleave_factor)
++{
++ rtx *regs = XALLOCAVEC (rtx, interleave_factor);
++ int *regnos = XALLOCAVEC (int, interleave_factor);
++ HOST_WIDE_INT block_size_bytes = interleave_factor * UNITS_PER_WORD;
++ HOST_WIDE_INT i, j;
++ HOST_WIDE_INT remaining = length, words;
++ rtx halfword_tmp = NULL, byte_tmp = NULL;
++ rtx dst, src;
++ bool src_aligned = MEM_ALIGN (srcbase) >= BITS_PER_WORD;
++ bool dst_aligned = MEM_ALIGN (dstbase) >= BITS_PER_WORD;
++ HOST_WIDE_INT srcoffset, dstoffset;
++ HOST_WIDE_INT src_autoinc, dst_autoinc;
++ rtx mem, addr;
++
++ gcc_assert (1 <= interleave_factor && interleave_factor <= 4);
++
++ /* Use hard registers if we have aligned source or destination so we can use
++ load/store multiple with contiguous registers. */
++ if (dst_aligned || src_aligned)
++ for (i = 0; i < interleave_factor; i++)
++ regs[i] = gen_rtx_REG (SImode, i);
++ else
++ for (i = 0; i < interleave_factor; i++)
++ regs[i] = gen_reg_rtx (SImode);
++
++ dst = copy_addr_to_reg (XEXP (dstbase, 0));
++ src = copy_addr_to_reg (XEXP (srcbase, 0));
++
++ srcoffset = dstoffset = 0;
++
++ /* Calls to arm_gen_load_multiple and arm_gen_store_multiple update SRC/DST.
++ For copying the last bytes we want to subtract this offset again. */
++ src_autoinc = dst_autoinc = 0;
++
++ for (i = 0; i < interleave_factor; i++)
++ regnos[i] = i;
++
++ /* Copy BLOCK_SIZE_BYTES chunks. */
++
++ for (i = 0; i + block_size_bytes <= length; i += block_size_bytes)
++ {
++ /* Load words. */
++ if (src_aligned && interleave_factor > 1)
++ {
++ emit_insn (arm_gen_load_multiple (regnos, interleave_factor, src,
++ TRUE, srcbase, &srcoffset));
++ src_autoinc += UNITS_PER_WORD * interleave_factor;
++ }
++ else
++ {
++ for (j = 0; j < interleave_factor; j++)
++ {
++ addr = plus_constant (src, srcoffset + j * UNITS_PER_WORD
++ - src_autoinc);
++ mem = adjust_automodify_address (srcbase, SImode, addr,
++ srcoffset + j * UNITS_PER_WORD);
++ emit_insn (gen_unaligned_loadsi (regs[j], mem));
++ }
++ srcoffset += block_size_bytes;
++ }
++
++ /* Store words. */
++ if (dst_aligned && interleave_factor > 1)
++ {
++ emit_insn (arm_gen_store_multiple (regnos, interleave_factor, dst,
++ TRUE, dstbase, &dstoffset));
++ dst_autoinc += UNITS_PER_WORD * interleave_factor;
++ }
++ else
++ {
++ for (j = 0; j < interleave_factor; j++)
++ {
++ addr = plus_constant (dst, dstoffset + j * UNITS_PER_WORD
++ - dst_autoinc);
++ mem = adjust_automodify_address (dstbase, SImode, addr,
++ dstoffset + j * UNITS_PER_WORD);
++ emit_insn (gen_unaligned_storesi (mem, regs[j]));
++ }
++ dstoffset += block_size_bytes;
++ }
++
++ remaining -= block_size_bytes;
++ }
++
++ /* Copy any whole words left (note these aren't interleaved with any
++ subsequent halfword/byte load/stores in the interests of simplicity). */
++
++ words = remaining / UNITS_PER_WORD;
++
++ gcc_assert (words < interleave_factor);
++
++ if (src_aligned && words > 1)
++ {
++ emit_insn (arm_gen_load_multiple (regnos, words, src, TRUE, srcbase,
++ &srcoffset));
++ src_autoinc += UNITS_PER_WORD * words;
++ }
++ else
++ {
++ for (j = 0; j < words; j++)
++ {
++ addr = plus_constant (src,
++ srcoffset + j * UNITS_PER_WORD - src_autoinc);
++ mem = adjust_automodify_address (srcbase, SImode, addr,
++ srcoffset + j * UNITS_PER_WORD);
++ emit_insn (gen_unaligned_loadsi (regs[j], mem));
++ }
++ srcoffset += words * UNITS_PER_WORD;
++ }
++
++ if (dst_aligned && words > 1)
++ {
++ emit_insn (arm_gen_store_multiple (regnos, words, dst, TRUE, dstbase,
++ &dstoffset));
++ dst_autoinc += words * UNITS_PER_WORD;
++ }
++ else
++ {
++ for (j = 0; j < words; j++)
++ {
++ addr = plus_constant (dst,
++ dstoffset + j * UNITS_PER_WORD - dst_autoinc);
++ mem = adjust_automodify_address (dstbase, SImode, addr,
++ dstoffset + j * UNITS_PER_WORD);
++ emit_insn (gen_unaligned_storesi (mem, regs[j]));
++ }
++ dstoffset += words * UNITS_PER_WORD;
++ }
++
++ remaining -= words * UNITS_PER_WORD;
++
++ gcc_assert (remaining < 4);
++
++ /* Copy a halfword if necessary. */
++
++ if (remaining >= 2)
++ {
++ halfword_tmp = gen_reg_rtx (SImode);
++
++ addr = plus_constant (src, srcoffset - src_autoinc);
++ mem = adjust_automodify_address (srcbase, HImode, addr, srcoffset);
++ emit_insn (gen_unaligned_loadhiu (halfword_tmp, mem));
++
++ /* Either write out immediately, or delay until we've loaded the last
++ byte, depending on interleave factor. */
++ if (interleave_factor == 1)
++ {
++ addr = plus_constant (dst, dstoffset - dst_autoinc);
++ mem = adjust_automodify_address (dstbase, HImode, addr, dstoffset);
++ emit_insn (gen_unaligned_storehi (mem,
++ gen_lowpart (HImode, halfword_tmp)));
++ halfword_tmp = NULL;
++ dstoffset += 2;
++ }
++
++ remaining -= 2;
++ srcoffset += 2;
++ }
++
++ gcc_assert (remaining < 2);
++
++ /* Copy last byte. */
++
++ if ((remaining & 1) != 0)
++ {
++ byte_tmp = gen_reg_rtx (SImode);
++
++ addr = plus_constant (src, srcoffset - src_autoinc);
++ mem = adjust_automodify_address (srcbase, QImode, addr, srcoffset);
++ emit_move_insn (gen_lowpart (QImode, byte_tmp), mem);
++
++ if (interleave_factor == 1)
++ {
++ addr = plus_constant (dst, dstoffset - dst_autoinc);
++ mem = adjust_automodify_address (dstbase, QImode, addr, dstoffset);
++ emit_move_insn (mem, gen_lowpart (QImode, byte_tmp));
++ byte_tmp = NULL;
++ dstoffset++;
++ }
++
++ remaining--;
++ srcoffset++;
++ }
++
++ /* Store last halfword if we haven't done so already. */
++
++ if (halfword_tmp)
++ {
++ addr = plus_constant (dst, dstoffset - dst_autoinc);
++ mem = adjust_automodify_address (dstbase, HImode, addr, dstoffset);
++ emit_insn (gen_unaligned_storehi (mem,
++ gen_lowpart (HImode, halfword_tmp)));
++ dstoffset += 2;
++ }
++
++ /* Likewise for last byte. */
++
++ if (byte_tmp)
++ {
++ addr = plus_constant (dst, dstoffset - dst_autoinc);
++ mem = adjust_automodify_address (dstbase, QImode, addr, dstoffset);
++ emit_move_insn (mem, gen_lowpart (QImode, byte_tmp));
++ dstoffset++;
++ }
++
++ gcc_assert (remaining == 0 && srcoffset == dstoffset);
++}
++
++/* From mips_adjust_block_mem:
++
++ Helper function for doing a loop-based block operation on memory
++ reference MEM. Each iteration of the loop will operate on LENGTH
++ bytes of MEM.
++
++ Create a new base register for use within the loop and point it to
++ the start of MEM. Create a new memory reference that uses this
++ register. Store them in *LOOP_REG and *LOOP_MEM respectively. */
++
++static void
++arm_adjust_block_mem (rtx mem, HOST_WIDE_INT length, rtx *loop_reg,
++ rtx *loop_mem)
++{
++ *loop_reg = copy_addr_to_reg (XEXP (mem, 0));
++
++ /* Although the new mem does not refer to a known location,
++ it does keep up to LENGTH bytes of alignment. */
++ *loop_mem = change_address (mem, BLKmode, *loop_reg);
++ set_mem_align (*loop_mem, MIN (MEM_ALIGN (mem), length * BITS_PER_UNIT));
++}
++
++/* From mips_block_move_loop:
++
++ Move LENGTH bytes from SRC to DEST using a loop that moves BYTES_PER_ITER
++ bytes at a time. LENGTH must be at least BYTES_PER_ITER. Assume that
++ the memory regions do not overlap. */
++
++static void
++arm_block_move_unaligned_loop (rtx dest, rtx src, HOST_WIDE_INT length,
++ unsigned int interleave_factor,
++ HOST_WIDE_INT bytes_per_iter)
++{
++ rtx label, src_reg, dest_reg, final_src, test;
++ HOST_WIDE_INT leftover;
++
++ leftover = length % bytes_per_iter;
++ length -= leftover;
++
++ /* Create registers and memory references for use within the loop. */
++ arm_adjust_block_mem (src, bytes_per_iter, &src_reg, &src);
++ arm_adjust_block_mem (dest, bytes_per_iter, &dest_reg, &dest);
++
++ /* Calculate the value that SRC_REG should have after the last iteration of
++ the loop. */
++ final_src = expand_simple_binop (Pmode, PLUS, src_reg, GEN_INT (length),
++ 0, 0, OPTAB_WIDEN);
++
++ /* Emit the start of the loop. */
++ label = gen_label_rtx ();
++ emit_label (label);
++
++ /* Emit the loop body. */
++ arm_block_move_unaligned_straight (dest, src, bytes_per_iter,
++ interleave_factor);
++
++ /* Move on to the next block. */
++ emit_move_insn (src_reg, plus_constant (src_reg, bytes_per_iter));
++ emit_move_insn (dest_reg, plus_constant (dest_reg, bytes_per_iter));
++
++ /* Emit the loop condition. */
++ test = gen_rtx_NE (VOIDmode, src_reg, final_src);
++ emit_jump_insn (gen_cbranchsi4 (test, src_reg, final_src, label));
++
++ /* Mop up any left-over bytes. */
++ if (leftover)
++ arm_block_move_unaligned_straight (dest, src, leftover, interleave_factor);
++}
++
++/* Emit a block move when either the source or destination is unaligned (not
++ aligned to a four-byte boundary). This may need further tuning depending on
++ core type, optimize_size setting, etc. */
++
++static int
++arm_movmemqi_unaligned (rtx *operands)
++{
++ HOST_WIDE_INT length = INTVAL (operands[2]);
++
++ if (optimize_size)
++ {
++ bool src_aligned = MEM_ALIGN (operands[1]) >= BITS_PER_WORD;
++ bool dst_aligned = MEM_ALIGN (operands[0]) >= BITS_PER_WORD;
++ /* Inlined memcpy using ldr/str/ldrh/strh can be quite big: try to limit
++ size of code if optimizing for size. We'll use ldm/stm if src_aligned
++ or dst_aligned though: allow more interleaving in those cases since the
++ resulting code can be smaller. */
++ unsigned int interleave_factor = (src_aligned || dst_aligned) ? 2 : 1;
++ HOST_WIDE_INT bytes_per_iter = (src_aligned || dst_aligned) ? 8 : 4;
++
++ if (length > 12)
++ arm_block_move_unaligned_loop (operands[0], operands[1], length,
++ interleave_factor, bytes_per_iter);
++ else
++ arm_block_move_unaligned_straight (operands[0], operands[1], length,
++ interleave_factor);
++ }
++ else
++ {
++ /* Note that the loop created by arm_block_move_unaligned_loop may be
++ subject to loop unrolling, which makes tuning this condition a little
++ redundant. */
++ if (length > 32)
++ arm_block_move_unaligned_loop (operands[0], operands[1], length, 4, 16);
++ else
++ arm_block_move_unaligned_straight (operands[0], operands[1], length, 4);
++ }
++
++ return 1;
++}
++
+ int
+ arm_gen_movmemqi (rtx *operands)
+ {
+@@ -10343,8 +11149,13 @@
+
+ if (GET_CODE (operands[2]) != CONST_INT
+ || GET_CODE (operands[3]) != CONST_INT
+- || INTVAL (operands[2]) > 64
+- || INTVAL (operands[3]) & 3)
++ || INTVAL (operands[2]) > 64)
++ return 0;
++
++ if (unaligned_access && (INTVAL (operands[3]) & 3) != 0)
++ return arm_movmemqi_unaligned (operands);
++
++ if (INTVAL (operands[3]) & 3)
+ return 0;
+
+ dstbase = operands[0];
+@@ -11433,6 +12244,19 @@
+ return 0;
+ }
+
++/* Return the maximum amount of padding that will be inserted before
++ label LABEL. */
++
++static HOST_WIDE_INT
++get_label_padding (rtx label)
++{
++ HOST_WIDE_INT align, min_insn_size;
++
++ align = 1 << label_to_alignment (label);
++ min_insn_size = TARGET_THUMB ? 2 : 4;
++ return align > min_insn_size ? align - min_insn_size : 0;
++}
++
+ /* Move a minipool fix MP from its current location to before MAX_MP.
+ If MAX_MP is NULL, then MP doesn't need moving, but the addressing
+ constraints may need updating. */
+@@ -11979,8 +12803,12 @@
+ within range. */
+ gcc_assert (GET_CODE (from) != BARRIER);
+
+- /* Count the length of this insn. */
+- count += get_attr_length (from);
++ /* Count the length of this insn. This must stay in sync with the
++ code that pushes minipool fixes. */
++ if (LABEL_P (from))
++ count += get_label_padding (from);
++ else
++ count += get_attr_length (from);
+
+ /* If there is a jump table, add its length. */
+ tmp = is_jump_table (from);
+@@ -12400,6 +13228,11 @@
+ insn = table;
+ }
+ }
++ else if (LABEL_P (insn))
++ /* Add the worst-case padding due to alignment. We don't add
++ the _current_ padding because the minipool insertions
++ themselves might change it. */
++ address += get_label_padding (insn);
+ }
+
+ fix = minipool_fix_head;
+@@ -16591,7 +17424,7 @@
+ {
+ rtx addr;
+ bool postinc = FALSE;
+- unsigned align, modesize, align_bits;
++ unsigned align, memsize, align_bits;
+
+ gcc_assert (GET_CODE (x) == MEM);
+ addr = XEXP (x, 0);
+@@ -16606,12 +17439,12 @@
+ instruction (for some alignments) as an aid to the memory subsystem
+ of the target. */
+ align = MEM_ALIGN (x) >> 3;
+- modesize = GET_MODE_SIZE (GET_MODE (x));
++ memsize = INTVAL (MEM_SIZE (x));
+
+ /* Only certain alignment specifiers are supported by the hardware. */
+- if (modesize == 16 && (align % 32) == 0)
++ if (memsize == 16 && (align % 32) == 0)
+ align_bits = 256;
+- else if ((modesize == 8 || modesize == 16) && (align % 16) == 0)
++ else if ((memsize == 8 || memsize == 16) && (align % 16) == 0)
+ align_bits = 128;
+ else if ((align % 8) == 0)
+ align_bits = 64;
+@@ -16663,6 +17496,11 @@
+ }
+ return;
+
++ case 'v':
++ gcc_assert (GET_CODE (x) == CONST_DOUBLE);
++ fprintf (stream, "#%d", vfp3_const_double_for_fract_bits (x));
++ return;
++
+ /* Register specifier for vld1.16/vst1.16. Translate the S register
+ number into a D register number and element index. */
+ case 'z':
+@@ -17022,10 +17860,10 @@
+ decremented/zeroed by arm_asm_output_opcode as the insns are output. */
+
+ /* Returns the index of the ARM condition code string in
+- `arm_condition_codes'. COMPARISON should be an rtx like
+- `(eq (...) (...))'. */
+-static enum arm_cond_code
+-get_arm_condition_code (rtx comparison)
++ `arm_condition_codes', or ARM_NV if the comparison is invalid.
++ COMPARISON should be an rtx like `(eq (...) (...))'. */
++enum arm_cond_code
++maybe_get_arm_condition_code (rtx comparison)
+ {
+ enum machine_mode mode = GET_MODE (XEXP (comparison, 0));
+ enum arm_cond_code code;
+@@ -17049,11 +17887,11 @@
+ case CC_DLTUmode: code = ARM_CC;
+
+ dominance:
+- gcc_assert (comp_code == EQ || comp_code == NE);
+-
+ if (comp_code == EQ)
+ return ARM_INVERSE_CONDITION_CODE (code);
+- return code;
++ if (comp_code == NE)
++ return code;
++ return ARM_NV;
+
+ case CC_NOOVmode:
+ switch (comp_code)
+@@ -17062,7 +17900,7 @@
+ case EQ: return ARM_EQ;
+ case GE: return ARM_PL;
+ case LT: return ARM_MI;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CC_Zmode:
+@@ -17070,7 +17908,7 @@
+ {
+ case NE: return ARM_NE;
+ case EQ: return ARM_EQ;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CC_Nmode:
+@@ -17078,7 +17916,7 @@
+ {
+ case NE: return ARM_MI;
+ case EQ: return ARM_PL;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CCFPEmode:
+@@ -17103,7 +17941,7 @@
+ /* UNEQ and LTGT do not have a representation. */
+ case UNEQ: /* Fall through. */
+ case LTGT: /* Fall through. */
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CC_SWPmode:
+@@ -17119,7 +17957,7 @@
+ case GTU: return ARM_CC;
+ case LEU: return ARM_CS;
+ case LTU: return ARM_HI;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CC_Cmode:
+@@ -17127,7 +17965,7 @@
+ {
+ case LTU: return ARM_CS;
+ case GEU: return ARM_CC;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CC_CZmode:
+@@ -17139,7 +17977,7 @@
+ case GTU: return ARM_HI;
+ case LEU: return ARM_LS;
+ case LTU: return ARM_CC;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CC_NCVmode:
+@@ -17149,7 +17987,7 @@
+ case LT: return ARM_LT;
+ case GEU: return ARM_CS;
+ case LTU: return ARM_CC;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CCmode:
+@@ -17165,13 +18003,22 @@
+ case GTU: return ARM_HI;
+ case LEU: return ARM_LS;
+ case LTU: return ARM_CC;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ default: gcc_unreachable ();
+ }
+ }
+
++/* Like maybe_get_arm_condition_code, but never return ARM_NV. */
++static enum arm_cond_code
++get_arm_condition_code (rtx comparison)
++{
++ enum arm_cond_code code = maybe_get_arm_condition_code (comparison);
++ gcc_assert (code != ARM_NV);
++ return code;
++}
++
+ /* Tell arm_asm_output_opcode to output IT blocks for conditionally executed
+ instructions. */
+ void
+@@ -17783,926 +18630,618 @@
+ return value;
+ }
+
+-#define def_mbuiltin(MASK, NAME, TYPE, CODE) \
+- do \
+- { \
+- if ((MASK) & insn_flags) \
+- add_builtin_function ((NAME), (TYPE), (CODE), \
+- BUILT_IN_MD, NULL, NULL_TREE); \
+- } \
+- while (0)
++typedef enum {
++ T_V8QI,
++ T_V4HI,
++ T_V2SI,
++ T_V2SF,
++ T_DI,
++ T_V16QI,
++ T_V8HI,
++ T_V4SI,
++ T_V4SF,
++ T_V2DI,
++ T_TI,
++ T_EI,
++ T_OI,
++ T_MAX /* Size of enum. Keep last. */
++} neon_builtin_type_mode;
++
++#define TYPE_MODE_BIT(X) (1 << (X))
++
++#define TB_DREG (TYPE_MODE_BIT (T_V8QI) | TYPE_MODE_BIT (T_V4HI) \
++ | TYPE_MODE_BIT (T_V2SI) | TYPE_MODE_BIT (T_V2SF) \
++ | TYPE_MODE_BIT (T_DI))
++#define TB_QREG (TYPE_MODE_BIT (T_V16QI) | TYPE_MODE_BIT (T_V8HI) \
++ | TYPE_MODE_BIT (T_V4SI) | TYPE_MODE_BIT (T_V4SF) \
++ | TYPE_MODE_BIT (T_V2DI) | TYPE_MODE_BIT (T_TI))
+
+-struct builtin_description
+-{
+- const unsigned int mask;
+- const enum insn_code icode;
+- const char * const name;
+- const enum arm_builtins code;
+- const enum rtx_code comparison;
+- const unsigned int flag;
+-};
++#define v8qi_UP T_V8QI
++#define v4hi_UP T_V4HI
++#define v2si_UP T_V2SI
++#define v2sf_UP T_V2SF
++#define di_UP T_DI
++#define v16qi_UP T_V16QI
++#define v8hi_UP T_V8HI
++#define v4si_UP T_V4SI
++#define v4sf_UP T_V4SF
++#define v2di_UP T_V2DI
++#define ti_UP T_TI
++#define ei_UP T_EI
++#define oi_UP T_OI
+
+-static const struct builtin_description bdesc_2arg[] =
+-{
+-#define IWMMXT_BUILTIN(code, string, builtin) \
+- { FL_IWMMXT, CODE_FOR_##code, "__builtin_arm_" string, \
+- ARM_BUILTIN_##builtin, UNKNOWN, 0 },
++#define UP(X) X##_UP
+
+- IWMMXT_BUILTIN (addv8qi3, "waddb", WADDB)
+- IWMMXT_BUILTIN (addv4hi3, "waddh", WADDH)
+- IWMMXT_BUILTIN (addv2si3, "waddw", WADDW)
+- IWMMXT_BUILTIN (subv8qi3, "wsubb", WSUBB)
+- IWMMXT_BUILTIN (subv4hi3, "wsubh", WSUBH)
+- IWMMXT_BUILTIN (subv2si3, "wsubw", WSUBW)
+- IWMMXT_BUILTIN (ssaddv8qi3, "waddbss", WADDSSB)
+- IWMMXT_BUILTIN (ssaddv4hi3, "waddhss", WADDSSH)
+- IWMMXT_BUILTIN (ssaddv2si3, "waddwss", WADDSSW)
+- IWMMXT_BUILTIN (sssubv8qi3, "wsubbss", WSUBSSB)
+- IWMMXT_BUILTIN (sssubv4hi3, "wsubhss", WSUBSSH)
+- IWMMXT_BUILTIN (sssubv2si3, "wsubwss", WSUBSSW)
+- IWMMXT_BUILTIN (usaddv8qi3, "waddbus", WADDUSB)
+- IWMMXT_BUILTIN (usaddv4hi3, "waddhus", WADDUSH)
+- IWMMXT_BUILTIN (usaddv2si3, "waddwus", WADDUSW)
+- IWMMXT_BUILTIN (ussubv8qi3, "wsubbus", WSUBUSB)
+- IWMMXT_BUILTIN (ussubv4hi3, "wsubhus", WSUBUSH)
+- IWMMXT_BUILTIN (ussubv2si3, "wsubwus", WSUBUSW)
+- IWMMXT_BUILTIN (mulv4hi3, "wmulul", WMULUL)
+- IWMMXT_BUILTIN (smulv4hi3_highpart, "wmulsm", WMULSM)
+- IWMMXT_BUILTIN (umulv4hi3_highpart, "wmulum", WMULUM)
+- IWMMXT_BUILTIN (eqv8qi3, "wcmpeqb", WCMPEQB)
+- IWMMXT_BUILTIN (eqv4hi3, "wcmpeqh", WCMPEQH)
+- IWMMXT_BUILTIN (eqv2si3, "wcmpeqw", WCMPEQW)
+- IWMMXT_BUILTIN (gtuv8qi3, "wcmpgtub", WCMPGTUB)
+- IWMMXT_BUILTIN (gtuv4hi3, "wcmpgtuh", WCMPGTUH)
+- IWMMXT_BUILTIN (gtuv2si3, "wcmpgtuw", WCMPGTUW)
+- IWMMXT_BUILTIN (gtv8qi3, "wcmpgtsb", WCMPGTSB)
+- IWMMXT_BUILTIN (gtv4hi3, "wcmpgtsh", WCMPGTSH)
+- IWMMXT_BUILTIN (gtv2si3, "wcmpgtsw", WCMPGTSW)
+- IWMMXT_BUILTIN (umaxv8qi3, "wmaxub", WMAXUB)
+- IWMMXT_BUILTIN (smaxv8qi3, "wmaxsb", WMAXSB)
+- IWMMXT_BUILTIN (umaxv4hi3, "wmaxuh", WMAXUH)
+- IWMMXT_BUILTIN (smaxv4hi3, "wmaxsh", WMAXSH)
+- IWMMXT_BUILTIN (umaxv2si3, "wmaxuw", WMAXUW)
+- IWMMXT_BUILTIN (smaxv2si3, "wmaxsw", WMAXSW)
+- IWMMXT_BUILTIN (uminv8qi3, "wminub", WMINUB)
+- IWMMXT_BUILTIN (sminv8qi3, "wminsb", WMINSB)
+- IWMMXT_BUILTIN (uminv4hi3, "wminuh", WMINUH)
+- IWMMXT_BUILTIN (sminv4hi3, "wminsh", WMINSH)
+- IWMMXT_BUILTIN (uminv2si3, "wminuw", WMINUW)
+- IWMMXT_BUILTIN (sminv2si3, "wminsw", WMINSW)
+- IWMMXT_BUILTIN (iwmmxt_anddi3, "wand", WAND)
+- IWMMXT_BUILTIN (iwmmxt_nanddi3, "wandn", WANDN)
+- IWMMXT_BUILTIN (iwmmxt_iordi3, "wor", WOR)
+- IWMMXT_BUILTIN (iwmmxt_xordi3, "wxor", WXOR)
+- IWMMXT_BUILTIN (iwmmxt_uavgv8qi3, "wavg2b", WAVG2B)
+- IWMMXT_BUILTIN (iwmmxt_uavgv4hi3, "wavg2h", WAVG2H)
+- IWMMXT_BUILTIN (iwmmxt_uavgrndv8qi3, "wavg2br", WAVG2BR)
+- IWMMXT_BUILTIN (iwmmxt_uavgrndv4hi3, "wavg2hr", WAVG2HR)
+- IWMMXT_BUILTIN (iwmmxt_wunpckilb, "wunpckilb", WUNPCKILB)
+- IWMMXT_BUILTIN (iwmmxt_wunpckilh, "wunpckilh", WUNPCKILH)
+- IWMMXT_BUILTIN (iwmmxt_wunpckilw, "wunpckilw", WUNPCKILW)
+- IWMMXT_BUILTIN (iwmmxt_wunpckihb, "wunpckihb", WUNPCKIHB)
+- IWMMXT_BUILTIN (iwmmxt_wunpckihh, "wunpckihh", WUNPCKIHH)
+- IWMMXT_BUILTIN (iwmmxt_wunpckihw, "wunpckihw", WUNPCKIHW)
+- IWMMXT_BUILTIN (iwmmxt_wmadds, "wmadds", WMADDS)
+- IWMMXT_BUILTIN (iwmmxt_wmaddu, "wmaddu", WMADDU)
++typedef enum {
++ NEON_BINOP,
++ NEON_TERNOP,
++ NEON_UNOP,
++ NEON_GETLANE,
++ NEON_SETLANE,
++ NEON_CREATE,
++ NEON_DUP,
++ NEON_DUPLANE,
++ NEON_COMBINE,
++ NEON_SPLIT,
++ NEON_LANEMUL,
++ NEON_LANEMULL,
++ NEON_LANEMULH,
++ NEON_LANEMAC,
++ NEON_SCALARMUL,
++ NEON_SCALARMULL,
++ NEON_SCALARMULH,
++ NEON_SCALARMAC,
++ NEON_CONVERT,
++ NEON_FIXCONV,
++ NEON_SELECT,
++ NEON_RESULTPAIR,
++ NEON_REINTERP,
++ NEON_VTBL,
++ NEON_VTBX,
++ NEON_LOAD1,
++ NEON_LOAD1LANE,
++ NEON_STORE1,
++ NEON_STORE1LANE,
++ NEON_LOADSTRUCT,
++ NEON_LOADSTRUCTLANE,
++ NEON_STORESTRUCT,
++ NEON_STORESTRUCTLANE,
++ NEON_LOGICBINOP,
++ NEON_SHIFTINSERT,
++ NEON_SHIFTIMM,
++ NEON_SHIFTACC
++} neon_itype;
+
+-#define IWMMXT_BUILTIN2(code, builtin) \
+- { FL_IWMMXT, CODE_FOR_##code, NULL, ARM_BUILTIN_##builtin, UNKNOWN, 0 },
++typedef struct {
++ const char *name;
++ const neon_itype itype;
++ const neon_builtin_type_mode mode;
++ const enum insn_code code;
++ unsigned int fcode;
++} neon_builtin_datum;
+
+- IWMMXT_BUILTIN2 (iwmmxt_wpackhss, WPACKHSS)
+- IWMMXT_BUILTIN2 (iwmmxt_wpackwss, WPACKWSS)
+- IWMMXT_BUILTIN2 (iwmmxt_wpackdss, WPACKDSS)
+- IWMMXT_BUILTIN2 (iwmmxt_wpackhus, WPACKHUS)
+- IWMMXT_BUILTIN2 (iwmmxt_wpackwus, WPACKWUS)
+- IWMMXT_BUILTIN2 (iwmmxt_wpackdus, WPACKDUS)
+- IWMMXT_BUILTIN2 (ashlv4hi3_di, WSLLH)
+- IWMMXT_BUILTIN2 (ashlv4hi3_iwmmxt, WSLLHI)
+- IWMMXT_BUILTIN2 (ashlv2si3_di, WSLLW)
+- IWMMXT_BUILTIN2 (ashlv2si3_iwmmxt, WSLLWI)
+- IWMMXT_BUILTIN2 (ashldi3_di, WSLLD)
+- IWMMXT_BUILTIN2 (ashldi3_iwmmxt, WSLLDI)
+- IWMMXT_BUILTIN2 (lshrv4hi3_di, WSRLH)
+- IWMMXT_BUILTIN2 (lshrv4hi3_iwmmxt, WSRLHI)
+- IWMMXT_BUILTIN2 (lshrv2si3_di, WSRLW)
+- IWMMXT_BUILTIN2 (lshrv2si3_iwmmxt, WSRLWI)
+- IWMMXT_BUILTIN2 (lshrdi3_di, WSRLD)
+- IWMMXT_BUILTIN2 (lshrdi3_iwmmxt, WSRLDI)
+- IWMMXT_BUILTIN2 (ashrv4hi3_di, WSRAH)
+- IWMMXT_BUILTIN2 (ashrv4hi3_iwmmxt, WSRAHI)
+- IWMMXT_BUILTIN2 (ashrv2si3_di, WSRAW)
+- IWMMXT_BUILTIN2 (ashrv2si3_iwmmxt, WSRAWI)
+- IWMMXT_BUILTIN2 (ashrdi3_di, WSRAD)
+- IWMMXT_BUILTIN2 (ashrdi3_iwmmxt, WSRADI)
+- IWMMXT_BUILTIN2 (rorv4hi3_di, WRORH)
+- IWMMXT_BUILTIN2 (rorv4hi3, WRORHI)
+- IWMMXT_BUILTIN2 (rorv2si3_di, WRORW)
+- IWMMXT_BUILTIN2 (rorv2si3, WRORWI)
+- IWMMXT_BUILTIN2 (rordi3_di, WRORD)
+- IWMMXT_BUILTIN2 (rordi3, WRORDI)
+- IWMMXT_BUILTIN2 (iwmmxt_wmacuz, WMACUZ)
+- IWMMXT_BUILTIN2 (iwmmxt_wmacsz, WMACSZ)
+-};
++#define CF(N,X) CODE_FOR_neon_##N##X
+
+-static const struct builtin_description bdesc_1arg[] =
++#define VAR1(T, N, A) \
++ {#N, NEON_##T, UP (A), CF (N, A), 0}
++#define VAR2(T, N, A, B) \
++ VAR1 (T, N, A), \
++ {#N, NEON_##T, UP (B), CF (N, B), 0}
++#define VAR3(T, N, A, B, C) \
++ VAR2 (T, N, A, B), \
++ {#N, NEON_##T, UP (C), CF (N, C), 0}
++#define VAR4(T, N, A, B, C, D) \
++ VAR3 (T, N, A, B, C), \
++ {#N, NEON_##T, UP (D), CF (N, D), 0}
++#define VAR5(T, N, A, B, C, D, E) \
++ VAR4 (T, N, A, B, C, D), \
++ {#N, NEON_##T, UP (E), CF (N, E), 0}
++#define VAR6(T, N, A, B, C, D, E, F) \
++ VAR5 (T, N, A, B, C, D, E), \
++ {#N, NEON_##T, UP (F), CF (N, F), 0}
++#define VAR7(T, N, A, B, C, D, E, F, G) \
++ VAR6 (T, N, A, B, C, D, E, F), \
++ {#N, NEON_##T, UP (G), CF (N, G), 0}
++#define VAR8(T, N, A, B, C, D, E, F, G, H) \
++ VAR7 (T, N, A, B, C, D, E, F, G), \
++ {#N, NEON_##T, UP (H), CF (N, H), 0}
++#define VAR9(T, N, A, B, C, D, E, F, G, H, I) \
++ VAR8 (T, N, A, B, C, D, E, F, G, H), \
++ {#N, NEON_##T, UP (I), CF (N, I), 0}
++#define VAR10(T, N, A, B, C, D, E, F, G, H, I, J) \
++ VAR9 (T, N, A, B, C, D, E, F, G, H, I), \
++ {#N, NEON_##T, UP (J), CF (N, J), 0}
++
++/* The mode entries in the following table correspond to the "key" type of the
++ instruction variant, i.e. equivalent to that which would be specified after
++ the assembler mnemonic, which usually refers to the last vector operand.
++ (Signed/unsigned/polynomial types are not differentiated between though, and
++ are all mapped onto the same mode for a given element size.) The modes
++ listed per instruction should be the same as those defined for that
++ instruction's pattern in neon.md. */
++
++static neon_builtin_datum neon_builtin_data[] =
+ {
+- IWMMXT_BUILTIN (iwmmxt_tmovmskb, "tmovmskb", TMOVMSKB)
+- IWMMXT_BUILTIN (iwmmxt_tmovmskh, "tmovmskh", TMOVMSKH)
+- IWMMXT_BUILTIN (iwmmxt_tmovmskw, "tmovmskw", TMOVMSKW)
+- IWMMXT_BUILTIN (iwmmxt_waccb, "waccb", WACCB)
+- IWMMXT_BUILTIN (iwmmxt_wacch, "wacch", WACCH)
+- IWMMXT_BUILTIN (iwmmxt_waccw, "waccw", WACCW)
+- IWMMXT_BUILTIN (iwmmxt_wunpckehub, "wunpckehub", WUNPCKEHUB)
+- IWMMXT_BUILTIN (iwmmxt_wunpckehuh, "wunpckehuh", WUNPCKEHUH)
+- IWMMXT_BUILTIN (iwmmxt_wunpckehuw, "wunpckehuw", WUNPCKEHUW)
+- IWMMXT_BUILTIN (iwmmxt_wunpckehsb, "wunpckehsb", WUNPCKEHSB)
+- IWMMXT_BUILTIN (iwmmxt_wunpckehsh, "wunpckehsh", WUNPCKEHSH)
+- IWMMXT_BUILTIN (iwmmxt_wunpckehsw, "wunpckehsw", WUNPCKEHSW)
+- IWMMXT_BUILTIN (iwmmxt_wunpckelub, "wunpckelub", WUNPCKELUB)
+- IWMMXT_BUILTIN (iwmmxt_wunpckeluh, "wunpckeluh", WUNPCKELUH)
+- IWMMXT_BUILTIN (iwmmxt_wunpckeluw, "wunpckeluw", WUNPCKELUW)
+- IWMMXT_BUILTIN (iwmmxt_wunpckelsb, "wunpckelsb", WUNPCKELSB)
+- IWMMXT_BUILTIN (iwmmxt_wunpckelsh, "wunpckelsh", WUNPCKELSH)
+- IWMMXT_BUILTIN (iwmmxt_wunpckelsw, "wunpckelsw", WUNPCKELSW)
++ VAR10 (BINOP, vadd,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR3 (BINOP, vaddl, v8qi, v4hi, v2si),
++ VAR3 (BINOP, vaddw, v8qi, v4hi, v2si),
++ VAR6 (BINOP, vhadd, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
++ VAR8 (BINOP, vqadd, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
++ VAR3 (BINOP, vaddhn, v8hi, v4si, v2di),
++ VAR8 (BINOP, vmul, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR8 (TERNOP, vmla, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR3 (TERNOP, vmlal, v8qi, v4hi, v2si),
++ VAR8 (TERNOP, vmls, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR3 (TERNOP, vmlsl, v8qi, v4hi, v2si),
++ VAR4 (BINOP, vqdmulh, v4hi, v2si, v8hi, v4si),
++ VAR2 (TERNOP, vqdmlal, v4hi, v2si),
++ VAR2 (TERNOP, vqdmlsl, v4hi, v2si),
++ VAR3 (BINOP, vmull, v8qi, v4hi, v2si),
++ VAR2 (SCALARMULL, vmull_n, v4hi, v2si),
++ VAR2 (LANEMULL, vmull_lane, v4hi, v2si),
++ VAR2 (SCALARMULL, vqdmull_n, v4hi, v2si),
++ VAR2 (LANEMULL, vqdmull_lane, v4hi, v2si),
++ VAR4 (SCALARMULH, vqdmulh_n, v4hi, v2si, v8hi, v4si),
++ VAR4 (LANEMULH, vqdmulh_lane, v4hi, v2si, v8hi, v4si),
++ VAR2 (BINOP, vqdmull, v4hi, v2si),
++ VAR8 (BINOP, vshl, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
++ VAR8 (BINOP, vqshl, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
++ VAR8 (SHIFTIMM, vshr_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
++ VAR3 (SHIFTIMM, vshrn_n, v8hi, v4si, v2di),
++ VAR3 (SHIFTIMM, vqshrn_n, v8hi, v4si, v2di),
++ VAR3 (SHIFTIMM, vqshrun_n, v8hi, v4si, v2di),
++ VAR8 (SHIFTIMM, vshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
++ VAR8 (SHIFTIMM, vqshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
++ VAR8 (SHIFTIMM, vqshlu_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
++ VAR3 (SHIFTIMM, vshll_n, v8qi, v4hi, v2si),
++ VAR8 (SHIFTACC, vsra_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
++ VAR10 (BINOP, vsub,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR3 (BINOP, vsubl, v8qi, v4hi, v2si),
++ VAR3 (BINOP, vsubw, v8qi, v4hi, v2si),
++ VAR8 (BINOP, vqsub, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
++ VAR6 (BINOP, vhsub, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
++ VAR3 (BINOP, vsubhn, v8hi, v4si, v2di),
++ VAR8 (BINOP, vceq, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR8 (BINOP, vcge, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR8 (BINOP, vcgt, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR2 (BINOP, vcage, v2sf, v4sf),
++ VAR2 (BINOP, vcagt, v2sf, v4sf),
++ VAR6 (BINOP, vtst, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
++ VAR8 (BINOP, vabd, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR3 (BINOP, vabdl, v8qi, v4hi, v2si),
++ VAR6 (TERNOP, vaba, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
++ VAR3 (TERNOP, vabal, v8qi, v4hi, v2si),
++ VAR8 (BINOP, vmax, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR8 (BINOP, vmin, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR4 (BINOP, vpadd, v8qi, v4hi, v2si, v2sf),
++ VAR6 (UNOP, vpaddl, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
++ VAR6 (BINOP, vpadal, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
++ VAR4 (BINOP, vpmax, v8qi, v4hi, v2si, v2sf),
++ VAR4 (BINOP, vpmin, v8qi, v4hi, v2si, v2sf),
++ VAR2 (BINOP, vrecps, v2sf, v4sf),
++ VAR2 (BINOP, vrsqrts, v2sf, v4sf),
++ VAR8 (SHIFTINSERT, vsri_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
++ VAR8 (SHIFTINSERT, vsli_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
++ VAR8 (UNOP, vabs, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR6 (UNOP, vqabs, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
++ VAR8 (UNOP, vneg, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR6 (UNOP, vqneg, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
++ VAR6 (UNOP, vcls, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
++ VAR6 (UNOP, vclz, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
++ VAR2 (UNOP, vcnt, v8qi, v16qi),
++ VAR4 (UNOP, vrecpe, v2si, v2sf, v4si, v4sf),
++ VAR4 (UNOP, vrsqrte, v2si, v2sf, v4si, v4sf),
++ VAR6 (UNOP, vmvn, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
++ /* FIXME: vget_lane supports more variants than this! */
++ VAR10 (GETLANE, vget_lane,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR10 (SETLANE, vset_lane,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR5 (CREATE, vcreate, v8qi, v4hi, v2si, v2sf, di),
++ VAR10 (DUP, vdup_n,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR10 (DUPLANE, vdup_lane,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR5 (COMBINE, vcombine, v8qi, v4hi, v2si, v2sf, di),
++ VAR5 (SPLIT, vget_high, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR5 (SPLIT, vget_low, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR3 (UNOP, vmovn, v8hi, v4si, v2di),
++ VAR3 (UNOP, vqmovn, v8hi, v4si, v2di),
++ VAR3 (UNOP, vqmovun, v8hi, v4si, v2di),
++ VAR3 (UNOP, vmovl, v8qi, v4hi, v2si),
++ VAR6 (LANEMUL, vmul_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
++ VAR6 (LANEMAC, vmla_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
++ VAR2 (LANEMAC, vmlal_lane, v4hi, v2si),
++ VAR2 (LANEMAC, vqdmlal_lane, v4hi, v2si),
++ VAR6 (LANEMAC, vmls_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
++ VAR2 (LANEMAC, vmlsl_lane, v4hi, v2si),
++ VAR2 (LANEMAC, vqdmlsl_lane, v4hi, v2si),
++ VAR6 (SCALARMUL, vmul_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
++ VAR6 (SCALARMAC, vmla_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
++ VAR2 (SCALARMAC, vmlal_n, v4hi, v2si),
++ VAR2 (SCALARMAC, vqdmlal_n, v4hi, v2si),
++ VAR6 (SCALARMAC, vmls_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
++ VAR2 (SCALARMAC, vmlsl_n, v4hi, v2si),
++ VAR2 (SCALARMAC, vqdmlsl_n, v4hi, v2si),
++ VAR10 (BINOP, vext,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR8 (UNOP, vrev64, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR4 (UNOP, vrev32, v8qi, v4hi, v16qi, v8hi),
++ VAR2 (UNOP, vrev16, v8qi, v16qi),
++ VAR4 (CONVERT, vcvt, v2si, v2sf, v4si, v4sf),
++ VAR4 (FIXCONV, vcvt_n, v2si, v2sf, v4si, v4sf),
++ VAR10 (SELECT, vbsl,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR1 (VTBL, vtbl1, v8qi),
++ VAR1 (VTBL, vtbl2, v8qi),
++ VAR1 (VTBL, vtbl3, v8qi),
++ VAR1 (VTBL, vtbl4, v8qi),
++ VAR1 (VTBX, vtbx1, v8qi),
++ VAR1 (VTBX, vtbx2, v8qi),
++ VAR1 (VTBX, vtbx3, v8qi),
++ VAR1 (VTBX, vtbx4, v8qi),
++ VAR8 (RESULTPAIR, vtrn, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR8 (RESULTPAIR, vzip, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR8 (RESULTPAIR, vuzp, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
++ VAR5 (REINTERP, vreinterpretv8qi, v8qi, v4hi, v2si, v2sf, di),
++ VAR5 (REINTERP, vreinterpretv4hi, v8qi, v4hi, v2si, v2sf, di),
++ VAR5 (REINTERP, vreinterpretv2si, v8qi, v4hi, v2si, v2sf, di),
++ VAR5 (REINTERP, vreinterpretv2sf, v8qi, v4hi, v2si, v2sf, di),
++ VAR5 (REINTERP, vreinterpretdi, v8qi, v4hi, v2si, v2sf, di),
++ VAR5 (REINTERP, vreinterpretv16qi, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR5 (REINTERP, vreinterpretv8hi, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR5 (REINTERP, vreinterpretv4si, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR5 (REINTERP, vreinterpretv4sf, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR5 (REINTERP, vreinterpretv2di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR10 (LOAD1, vld1,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR10 (LOAD1LANE, vld1_lane,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR10 (LOAD1, vld1_dup,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR10 (STORE1, vst1,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR10 (STORE1LANE, vst1_lane,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR9 (LOADSTRUCT,
++ vld2, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
++ VAR7 (LOADSTRUCTLANE, vld2_lane,
++ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
++ VAR5 (LOADSTRUCT, vld2_dup, v8qi, v4hi, v2si, v2sf, di),
++ VAR9 (STORESTRUCT, vst2,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
++ VAR7 (STORESTRUCTLANE, vst2_lane,
++ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
++ VAR9 (LOADSTRUCT,
++ vld3, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
++ VAR7 (LOADSTRUCTLANE, vld3_lane,
++ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
++ VAR5 (LOADSTRUCT, vld3_dup, v8qi, v4hi, v2si, v2sf, di),
++ VAR9 (STORESTRUCT, vst3,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
++ VAR7 (STORESTRUCTLANE, vst3_lane,
++ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
++ VAR9 (LOADSTRUCT, vld4,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
++ VAR7 (LOADSTRUCTLANE, vld4_lane,
++ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
++ VAR5 (LOADSTRUCT, vld4_dup, v8qi, v4hi, v2si, v2sf, di),
++ VAR9 (STORESTRUCT, vst4,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
++ VAR7 (STORESTRUCTLANE, vst4_lane,
++ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
++ VAR10 (LOGICBINOP, vand,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR10 (LOGICBINOP, vorr,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR10 (BINOP, veor,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR10 (LOGICBINOP, vbic,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
++ VAR10 (LOGICBINOP, vorn,
++ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
++};
++
++#undef CF
++#undef VAR1
++#undef VAR2
++#undef VAR3
++#undef VAR4
++#undef VAR5
++#undef VAR6
++#undef VAR7
++#undef VAR8
++#undef VAR9
++#undef VAR10
++
++/* Neon defines builtins from ARM_BUILTIN_MAX upwards, though they don't have
++ symbolic names defined here (which would require too much duplication).
++ FIXME? */
++enum arm_builtins
++{
++ ARM_BUILTIN_GETWCX,
++ ARM_BUILTIN_SETWCX,
++
++ ARM_BUILTIN_WZERO,
++
++ ARM_BUILTIN_WAVG2BR,
++ ARM_BUILTIN_WAVG2HR,
++ ARM_BUILTIN_WAVG2B,
++ ARM_BUILTIN_WAVG2H,
++
++ ARM_BUILTIN_WACCB,
++ ARM_BUILTIN_WACCH,
++ ARM_BUILTIN_WACCW,
++
++ ARM_BUILTIN_WMACS,
++ ARM_BUILTIN_WMACSZ,
++ ARM_BUILTIN_WMACU,
++ ARM_BUILTIN_WMACUZ,
++
++ ARM_BUILTIN_WSADB,
++ ARM_BUILTIN_WSADBZ,
++ ARM_BUILTIN_WSADH,
++ ARM_BUILTIN_WSADHZ,
++
++ ARM_BUILTIN_WALIGN,
++
++ ARM_BUILTIN_TMIA,
++ ARM_BUILTIN_TMIAPH,
++ ARM_BUILTIN_TMIABB,
++ ARM_BUILTIN_TMIABT,
++ ARM_BUILTIN_TMIATB,
++ ARM_BUILTIN_TMIATT,
++
++ ARM_BUILTIN_TMOVMSKB,
++ ARM_BUILTIN_TMOVMSKH,
++ ARM_BUILTIN_TMOVMSKW,
++
++ ARM_BUILTIN_TBCSTB,
++ ARM_BUILTIN_TBCSTH,
++ ARM_BUILTIN_TBCSTW,
++
++ ARM_BUILTIN_WMADDS,
++ ARM_BUILTIN_WMADDU,
++
++ ARM_BUILTIN_WPACKHSS,
++ ARM_BUILTIN_WPACKWSS,
++ ARM_BUILTIN_WPACKDSS,
++ ARM_BUILTIN_WPACKHUS,
++ ARM_BUILTIN_WPACKWUS,
++ ARM_BUILTIN_WPACKDUS,
++
++ ARM_BUILTIN_WADDB,
++ ARM_BUILTIN_WADDH,
++ ARM_BUILTIN_WADDW,
++ ARM_BUILTIN_WADDSSB,
++ ARM_BUILTIN_WADDSSH,
++ ARM_BUILTIN_WADDSSW,
++ ARM_BUILTIN_WADDUSB,
++ ARM_BUILTIN_WADDUSH,
++ ARM_BUILTIN_WADDUSW,
++ ARM_BUILTIN_WSUBB,
++ ARM_BUILTIN_WSUBH,
++ ARM_BUILTIN_WSUBW,
++ ARM_BUILTIN_WSUBSSB,
++ ARM_BUILTIN_WSUBSSH,
++ ARM_BUILTIN_WSUBSSW,
++ ARM_BUILTIN_WSUBUSB,
++ ARM_BUILTIN_WSUBUSH,
++ ARM_BUILTIN_WSUBUSW,
++
++ ARM_BUILTIN_WAND,
++ ARM_BUILTIN_WANDN,
++ ARM_BUILTIN_WOR,
++ ARM_BUILTIN_WXOR,
++
++ ARM_BUILTIN_WCMPEQB,
++ ARM_BUILTIN_WCMPEQH,
++ ARM_BUILTIN_WCMPEQW,
++ ARM_BUILTIN_WCMPGTUB,
++ ARM_BUILTIN_WCMPGTUH,
++ ARM_BUILTIN_WCMPGTUW,
++ ARM_BUILTIN_WCMPGTSB,
++ ARM_BUILTIN_WCMPGTSH,
++ ARM_BUILTIN_WCMPGTSW,
++
++ ARM_BUILTIN_TEXTRMSB,
++ ARM_BUILTIN_TEXTRMSH,
++ ARM_BUILTIN_TEXTRMSW,
++ ARM_BUILTIN_TEXTRMUB,
++ ARM_BUILTIN_TEXTRMUH,
++ ARM_BUILTIN_TEXTRMUW,
++ ARM_BUILTIN_TINSRB,
++ ARM_BUILTIN_TINSRH,
++ ARM_BUILTIN_TINSRW,
++
++ ARM_BUILTIN_WMAXSW,
++ ARM_BUILTIN_WMAXSH,
++ ARM_BUILTIN_WMAXSB,
++ ARM_BUILTIN_WMAXUW,
++ ARM_BUILTIN_WMAXUH,
++ ARM_BUILTIN_WMAXUB,
++ ARM_BUILTIN_WMINSW,
++ ARM_BUILTIN_WMINSH,
++ ARM_BUILTIN_WMINSB,
++ ARM_BUILTIN_WMINUW,
++ ARM_BUILTIN_WMINUH,
++ ARM_BUILTIN_WMINUB,
++
++ ARM_BUILTIN_WMULUM,
++ ARM_BUILTIN_WMULSM,
++ ARM_BUILTIN_WMULUL,
++
++ ARM_BUILTIN_PSADBH,
++ ARM_BUILTIN_WSHUFH,
++
++ ARM_BUILTIN_WSLLH,
++ ARM_BUILTIN_WSLLW,
++ ARM_BUILTIN_WSLLD,
++ ARM_BUILTIN_WSRAH,
++ ARM_BUILTIN_WSRAW,
++ ARM_BUILTIN_WSRAD,
++ ARM_BUILTIN_WSRLH,
++ ARM_BUILTIN_WSRLW,
++ ARM_BUILTIN_WSRLD,
++ ARM_BUILTIN_WRORH,
++ ARM_BUILTIN_WRORW,
++ ARM_BUILTIN_WRORD,
++ ARM_BUILTIN_WSLLHI,
++ ARM_BUILTIN_WSLLWI,
++ ARM_BUILTIN_WSLLDI,
++ ARM_BUILTIN_WSRAHI,
++ ARM_BUILTIN_WSRAWI,
++ ARM_BUILTIN_WSRADI,
++ ARM_BUILTIN_WSRLHI,
++ ARM_BUILTIN_WSRLWI,
++ ARM_BUILTIN_WSRLDI,
++ ARM_BUILTIN_WRORHI,
++ ARM_BUILTIN_WRORWI,
++ ARM_BUILTIN_WRORDI,
++
++ ARM_BUILTIN_WUNPCKIHB,
++ ARM_BUILTIN_WUNPCKIHH,
++ ARM_BUILTIN_WUNPCKIHW,
++ ARM_BUILTIN_WUNPCKILB,
++ ARM_BUILTIN_WUNPCKILH,
++ ARM_BUILTIN_WUNPCKILW,
++
++ ARM_BUILTIN_WUNPCKEHSB,
++ ARM_BUILTIN_WUNPCKEHSH,
++ ARM_BUILTIN_WUNPCKEHSW,
++ ARM_BUILTIN_WUNPCKEHUB,
++ ARM_BUILTIN_WUNPCKEHUH,
++ ARM_BUILTIN_WUNPCKEHUW,
++ ARM_BUILTIN_WUNPCKELSB,
++ ARM_BUILTIN_WUNPCKELSH,
++ ARM_BUILTIN_WUNPCKELSW,
++ ARM_BUILTIN_WUNPCKELUB,
++ ARM_BUILTIN_WUNPCKELUH,
++ ARM_BUILTIN_WUNPCKELUW,
++
++ ARM_BUILTIN_THREAD_POINTER,
++
++ ARM_BUILTIN_NEON_BASE,
++
++ ARM_BUILTIN_MAX = ARM_BUILTIN_NEON_BASE + ARRAY_SIZE (neon_builtin_data)
+ };
+
+-/* Set up all the iWMMXt builtins. This is
+- not called if TARGET_IWMMXT is zero. */
++static GTY(()) tree arm_builtin_decls[ARM_BUILTIN_MAX];
+
+ static void
+-arm_init_iwmmxt_builtins (void)
++arm_init_neon_builtins (void)
+ {
+- const struct builtin_description * d;
+- size_t i;
+- tree endlink = void_list_node;
++ unsigned int i, fcode;
++ tree decl;
+
+- tree V2SI_type_node = build_vector_type_for_mode (intSI_type_node, V2SImode);
+- tree V4HI_type_node = build_vector_type_for_mode (intHI_type_node, V4HImode);
+- tree V8QI_type_node = build_vector_type_for_mode (intQI_type_node, V8QImode);
++ tree neon_intQI_type_node;
++ tree neon_intHI_type_node;
++ tree neon_polyQI_type_node;
++ tree neon_polyHI_type_node;
++ tree neon_intSI_type_node;
++ tree neon_intDI_type_node;
++ tree neon_float_type_node;
+
+- tree int_ftype_int
+- = build_function_type (integer_type_node,
+- tree_cons (NULL_TREE, integer_type_node, endlink));
+- tree v8qi_ftype_v8qi_v8qi_int
+- = build_function_type (V8QI_type_node,
+- tree_cons (NULL_TREE, V8QI_type_node,
+- tree_cons (NULL_TREE, V8QI_type_node,
+- tree_cons (NULL_TREE,
+- integer_type_node,
+- endlink))));
+- tree v4hi_ftype_v4hi_int
+- = build_function_type (V4HI_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- tree_cons (NULL_TREE, integer_type_node,
+- endlink)));
+- tree v2si_ftype_v2si_int
+- = build_function_type (V2SI_type_node,
+- tree_cons (NULL_TREE, V2SI_type_node,
+- tree_cons (NULL_TREE, integer_type_node,
+- endlink)));
+- tree v2si_ftype_di_di
+- = build_function_type (V2SI_type_node,
+- tree_cons (NULL_TREE, long_long_integer_type_node,
+- tree_cons (NULL_TREE, long_long_integer_type_node,
+- endlink)));
+- tree di_ftype_di_int
+- = build_function_type (long_long_integer_type_node,
+- tree_cons (NULL_TREE, long_long_integer_type_node,
+- tree_cons (NULL_TREE, integer_type_node,
+- endlink)));
+- tree di_ftype_di_int_int
+- = build_function_type (long_long_integer_type_node,
+- tree_cons (NULL_TREE, long_long_integer_type_node,
+- tree_cons (NULL_TREE, integer_type_node,
+- tree_cons (NULL_TREE,
+- integer_type_node,
+- endlink))));
+- tree int_ftype_v8qi
+- = build_function_type (integer_type_node,
+- tree_cons (NULL_TREE, V8QI_type_node,
+- endlink));
+- tree int_ftype_v4hi
+- = build_function_type (integer_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- endlink));
+- tree int_ftype_v2si
+- = build_function_type (integer_type_node,
+- tree_cons (NULL_TREE, V2SI_type_node,
+- endlink));
+- tree int_ftype_v8qi_int
+- = build_function_type (integer_type_node,
+- tree_cons (NULL_TREE, V8QI_type_node,
+- tree_cons (NULL_TREE, integer_type_node,
+- endlink)));
+- tree int_ftype_v4hi_int
+- = build_function_type (integer_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- tree_cons (NULL_TREE, integer_type_node,
+- endlink)));
+- tree int_ftype_v2si_int
+- = build_function_type (integer_type_node,
+- tree_cons (NULL_TREE, V2SI_type_node,
+- tree_cons (NULL_TREE, integer_type_node,
+- endlink)));
+- tree v8qi_ftype_v8qi_int_int
+- = build_function_type (V8QI_type_node,
+- tree_cons (NULL_TREE, V8QI_type_node,
+- tree_cons (NULL_TREE, integer_type_node,
+- tree_cons (NULL_TREE,
+- integer_type_node,
+- endlink))));
+- tree v4hi_ftype_v4hi_int_int
+- = build_function_type (V4HI_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- tree_cons (NULL_TREE, integer_type_node,
+- tree_cons (NULL_TREE,
+- integer_type_node,
+- endlink))));
+- tree v2si_ftype_v2si_int_int
+- = build_function_type (V2SI_type_node,
+- tree_cons (NULL_TREE, V2SI_type_node,
+- tree_cons (NULL_TREE, integer_type_node,
+- tree_cons (NULL_TREE,
+- integer_type_node,
+- endlink))));
+- /* Miscellaneous. */
+- tree v8qi_ftype_v4hi_v4hi
+- = build_function_type (V8QI_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- endlink)));
+- tree v4hi_ftype_v2si_v2si
+- = build_function_type (V4HI_type_node,
+- tree_cons (NULL_TREE, V2SI_type_node,
+- tree_cons (NULL_TREE, V2SI_type_node,
+- endlink)));
+- tree v2si_ftype_v4hi_v4hi
+- = build_function_type (V2SI_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- endlink)));
+- tree v2si_ftype_v8qi_v8qi
+- = build_function_type (V2SI_type_node,
+- tree_cons (NULL_TREE, V8QI_type_node,
+- tree_cons (NULL_TREE, V8QI_type_node,
+- endlink)));
+- tree v4hi_ftype_v4hi_di
+- = build_function_type (V4HI_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- tree_cons (NULL_TREE,
+- long_long_integer_type_node,
+- endlink)));
+- tree v2si_ftype_v2si_di
+- = build_function_type (V2SI_type_node,
+- tree_cons (NULL_TREE, V2SI_type_node,
+- tree_cons (NULL_TREE,
+- long_long_integer_type_node,
+- endlink)));
+- tree void_ftype_int_int
+- = build_function_type (void_type_node,
+- tree_cons (NULL_TREE, integer_type_node,
+- tree_cons (NULL_TREE, integer_type_node,
+- endlink)));
+- tree di_ftype_void
+- = build_function_type (long_long_unsigned_type_node, endlink);
+- tree di_ftype_v8qi
+- = build_function_type (long_long_integer_type_node,
+- tree_cons (NULL_TREE, V8QI_type_node,
+- endlink));
+- tree di_ftype_v4hi
+- = build_function_type (long_long_integer_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- endlink));
+- tree di_ftype_v2si
+- = build_function_type (long_long_integer_type_node,
+- tree_cons (NULL_TREE, V2SI_type_node,
+- endlink));
+- tree v2si_ftype_v4hi
+- = build_function_type (V2SI_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- endlink));
+- tree v4hi_ftype_v8qi
+- = build_function_type (V4HI_type_node,
+- tree_cons (NULL_TREE, V8QI_type_node,
+- endlink));
+-
+- tree di_ftype_di_v4hi_v4hi
+- = build_function_type (long_long_unsigned_type_node,
+- tree_cons (NULL_TREE,
+- long_long_unsigned_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- tree_cons (NULL_TREE,
+- V4HI_type_node,
+- endlink))));
+-
+- tree di_ftype_v4hi_v4hi
+- = build_function_type (long_long_unsigned_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- endlink)));
++ tree intQI_pointer_node;
++ tree intHI_pointer_node;
++ tree intSI_pointer_node;
++ tree intDI_pointer_node;
++ tree float_pointer_node;
+
+- /* Normal vector binops. */
+- tree v8qi_ftype_v8qi_v8qi
+- = build_function_type (V8QI_type_node,
+- tree_cons (NULL_TREE, V8QI_type_node,
+- tree_cons (NULL_TREE, V8QI_type_node,
+- endlink)));
+- tree v4hi_ftype_v4hi_v4hi
+- = build_function_type (V4HI_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- tree_cons (NULL_TREE, V4HI_type_node,
+- endlink)));
+- tree v2si_ftype_v2si_v2si
+- = build_function_type (V2SI_type_node,
+- tree_cons (NULL_TREE, V2SI_type_node,
+- tree_cons (NULL_TREE, V2SI_type_node,
+- endlink)));
+- tree di_ftype_di_di
+- = build_function_type (long_long_unsigned_type_node,
+- tree_cons (NULL_TREE, long_long_unsigned_type_node,
+- tree_cons (NULL_TREE,
+- long_long_unsigned_type_node,
+- endlink)));
++ tree const_intQI_node;
++ tree const_intHI_node;
++ tree const_intSI_node;
++ tree const_intDI_node;
++ tree const_float_node;
+
+- /* Add all builtins that are more or less simple operations on two
+- operands. */
+- for (i = 0, d = bdesc_2arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++)
+- {
+- /* Use one of the operands; the target can have a different mode for
+- mask-generating compares. */
+- enum machine_mode mode;
+- tree type;
++ tree const_intQI_pointer_node;
++ tree const_intHI_pointer_node;
++ tree const_intSI_pointer_node;
++ tree const_intDI_pointer_node;
++ tree const_float_pointer_node;
+
+- if (d->name == 0)
+- continue;
++ tree V8QI_type_node;
++ tree V4HI_type_node;
++ tree V2SI_type_node;
++ tree V2SF_type_node;
++ tree V16QI_type_node;
++ tree V8HI_type_node;
++ tree V4SI_type_node;
++ tree V4SF_type_node;
++ tree V2DI_type_node;
+
+- mode = insn_data[d->icode].operand[1].mode;
++ tree intUQI_type_node;
++ tree intUHI_type_node;
++ tree intUSI_type_node;
++ tree intUDI_type_node;
+
+- switch (mode)
+- {
+- case V8QImode:
+- type = v8qi_ftype_v8qi_v8qi;
+- break;
+- case V4HImode:
+- type = v4hi_ftype_v4hi_v4hi;
+- break;
+- case V2SImode:
+- type = v2si_ftype_v2si_v2si;
+- break;
+- case DImode:
+- type = di_ftype_di_di;
+- break;
++ tree intEI_type_node;
++ tree intOI_type_node;
++ tree intCI_type_node;
++ tree intXI_type_node;
+
+- default:
+- gcc_unreachable ();
+- }
++ tree V8QI_pointer_node;
++ tree V4HI_pointer_node;
++ tree V2SI_pointer_node;
++ tree V2SF_pointer_node;
++ tree V16QI_pointer_node;
++ tree V8HI_pointer_node;
++ tree V4SI_pointer_node;
++ tree V4SF_pointer_node;
++ tree V2DI_pointer_node;
+
+- def_mbuiltin (d->mask, d->name, type, d->code);
+- }
++ tree void_ftype_pv8qi_v8qi_v8qi;
++ tree void_ftype_pv4hi_v4hi_v4hi;
++ tree void_ftype_pv2si_v2si_v2si;
++ tree void_ftype_pv2sf_v2sf_v2sf;
++ tree void_ftype_pdi_di_di;
++ tree void_ftype_pv16qi_v16qi_v16qi;
++ tree void_ftype_pv8hi_v8hi_v8hi;
++ tree void_ftype_pv4si_v4si_v4si;
++ tree void_ftype_pv4sf_v4sf_v4sf;
++ tree void_ftype_pv2di_v2di_v2di;
+
+- /* Add the remaining MMX insns with somewhat more complicated types. */
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wzero", di_ftype_void, ARM_BUILTIN_WZERO);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_setwcx", void_ftype_int_int, ARM_BUILTIN_SETWCX);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_getwcx", int_ftype_int, ARM_BUILTIN_GETWCX);
+-
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsllh", v4hi_ftype_v4hi_di, ARM_BUILTIN_WSLLH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsllw", v2si_ftype_v2si_di, ARM_BUILTIN_WSLLW);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wslld", di_ftype_di_di, ARM_BUILTIN_WSLLD);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsllhi", v4hi_ftype_v4hi_int, ARM_BUILTIN_WSLLHI);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsllwi", v2si_ftype_v2si_int, ARM_BUILTIN_WSLLWI);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wslldi", di_ftype_di_int, ARM_BUILTIN_WSLLDI);
+-
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrlh", v4hi_ftype_v4hi_di, ARM_BUILTIN_WSRLH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrlw", v2si_ftype_v2si_di, ARM_BUILTIN_WSRLW);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrld", di_ftype_di_di, ARM_BUILTIN_WSRLD);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrlhi", v4hi_ftype_v4hi_int, ARM_BUILTIN_WSRLHI);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrlwi", v2si_ftype_v2si_int, ARM_BUILTIN_WSRLWI);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrldi", di_ftype_di_int, ARM_BUILTIN_WSRLDI);
+-
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrah", v4hi_ftype_v4hi_di, ARM_BUILTIN_WSRAH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsraw", v2si_ftype_v2si_di, ARM_BUILTIN_WSRAW);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrad", di_ftype_di_di, ARM_BUILTIN_WSRAD);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrahi", v4hi_ftype_v4hi_int, ARM_BUILTIN_WSRAHI);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrawi", v2si_ftype_v2si_int, ARM_BUILTIN_WSRAWI);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsradi", di_ftype_di_int, ARM_BUILTIN_WSRADI);
+-
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrorh", v4hi_ftype_v4hi_di, ARM_BUILTIN_WRORH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrorw", v2si_ftype_v2si_di, ARM_BUILTIN_WRORW);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrord", di_ftype_di_di, ARM_BUILTIN_WRORD);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrorhi", v4hi_ftype_v4hi_int, ARM_BUILTIN_WRORHI);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrorwi", v2si_ftype_v2si_int, ARM_BUILTIN_WRORWI);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrordi", di_ftype_di_int, ARM_BUILTIN_WRORDI);
+-
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wshufh", v4hi_ftype_v4hi_int, ARM_BUILTIN_WSHUFH);
+-
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsadb", v2si_ftype_v8qi_v8qi, ARM_BUILTIN_WSADB);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsadh", v2si_ftype_v4hi_v4hi, ARM_BUILTIN_WSADH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsadbz", v2si_ftype_v8qi_v8qi, ARM_BUILTIN_WSADBZ);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsadhz", v2si_ftype_v4hi_v4hi, ARM_BUILTIN_WSADHZ);
+-
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmsb", int_ftype_v8qi_int, ARM_BUILTIN_TEXTRMSB);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmsh", int_ftype_v4hi_int, ARM_BUILTIN_TEXTRMSH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmsw", int_ftype_v2si_int, ARM_BUILTIN_TEXTRMSW);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmub", int_ftype_v8qi_int, ARM_BUILTIN_TEXTRMUB);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmuh", int_ftype_v4hi_int, ARM_BUILTIN_TEXTRMUH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmuw", int_ftype_v2si_int, ARM_BUILTIN_TEXTRMUW);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tinsrb", v8qi_ftype_v8qi_int_int, ARM_BUILTIN_TINSRB);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tinsrh", v4hi_ftype_v4hi_int_int, ARM_BUILTIN_TINSRH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tinsrw", v2si_ftype_v2si_int_int, ARM_BUILTIN_TINSRW);
+-
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_waccb", di_ftype_v8qi, ARM_BUILTIN_WACCB);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wacch", di_ftype_v4hi, ARM_BUILTIN_WACCH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_waccw", di_ftype_v2si, ARM_BUILTIN_WACCW);
+-
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmovmskb", int_ftype_v8qi, ARM_BUILTIN_TMOVMSKB);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmovmskh", int_ftype_v4hi, ARM_BUILTIN_TMOVMSKH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmovmskw", int_ftype_v2si, ARM_BUILTIN_TMOVMSKW);
+-
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackhss", v8qi_ftype_v4hi_v4hi, ARM_BUILTIN_WPACKHSS);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackhus", v8qi_ftype_v4hi_v4hi, ARM_BUILTIN_WPACKHUS);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackwus", v4hi_ftype_v2si_v2si, ARM_BUILTIN_WPACKWUS);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackwss", v4hi_ftype_v2si_v2si, ARM_BUILTIN_WPACKWSS);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackdus", v2si_ftype_di_di, ARM_BUILTIN_WPACKDUS);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackdss", v2si_ftype_di_di, ARM_BUILTIN_WPACKDSS);
+-
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehub", v4hi_ftype_v8qi, ARM_BUILTIN_WUNPCKEHUB);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehuh", v2si_ftype_v4hi, ARM_BUILTIN_WUNPCKEHUH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehuw", di_ftype_v2si, ARM_BUILTIN_WUNPCKEHUW);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehsb", v4hi_ftype_v8qi, ARM_BUILTIN_WUNPCKEHSB);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehsh", v2si_ftype_v4hi, ARM_BUILTIN_WUNPCKEHSH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehsw", di_ftype_v2si, ARM_BUILTIN_WUNPCKEHSW);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckelub", v4hi_ftype_v8qi, ARM_BUILTIN_WUNPCKELUB);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckeluh", v2si_ftype_v4hi, ARM_BUILTIN_WUNPCKELUH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckeluw", di_ftype_v2si, ARM_BUILTIN_WUNPCKELUW);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckelsb", v4hi_ftype_v8qi, ARM_BUILTIN_WUNPCKELSB);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckelsh", v2si_ftype_v4hi, ARM_BUILTIN_WUNPCKELSH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckelsw", di_ftype_v2si, ARM_BUILTIN_WUNPCKELSW);
+-
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wmacs", di_ftype_di_v4hi_v4hi, ARM_BUILTIN_WMACS);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wmacsz", di_ftype_v4hi_v4hi, ARM_BUILTIN_WMACSZ);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wmacu", di_ftype_di_v4hi_v4hi, ARM_BUILTIN_WMACU);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wmacuz", di_ftype_v4hi_v4hi, ARM_BUILTIN_WMACUZ);
+-
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_walign", v8qi_ftype_v8qi_v8qi_int, ARM_BUILTIN_WALIGN);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmia", di_ftype_di_int_int, ARM_BUILTIN_TMIA);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiaph", di_ftype_di_int_int, ARM_BUILTIN_TMIAPH);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiabb", di_ftype_di_int_int, ARM_BUILTIN_TMIABB);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiabt", di_ftype_di_int_int, ARM_BUILTIN_TMIABT);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiatb", di_ftype_di_int_int, ARM_BUILTIN_TMIATB);
+- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiatt", di_ftype_di_int_int, ARM_BUILTIN_TMIATT);
+-}
++ tree reinterp_ftype_dreg[5][5];
++ tree reinterp_ftype_qreg[5][5];
++ tree dreg_types[5], qreg_types[5];
+
+-static void
+-arm_init_tls_builtins (void)
+-{
+- tree ftype, decl;
++ /* Create distinguished type nodes for NEON vector element types,
++ and pointers to values of such types, so we can detect them later. */
++ neon_intQI_type_node = make_signed_type (GET_MODE_PRECISION (QImode));
++ neon_intHI_type_node = make_signed_type (GET_MODE_PRECISION (HImode));
++ neon_polyQI_type_node = make_signed_type (GET_MODE_PRECISION (QImode));
++ neon_polyHI_type_node = make_signed_type (GET_MODE_PRECISION (HImode));
++ neon_intSI_type_node = make_signed_type (GET_MODE_PRECISION (SImode));
++ neon_intDI_type_node = make_signed_type (GET_MODE_PRECISION (DImode));
++ neon_float_type_node = make_node (REAL_TYPE);
++ TYPE_PRECISION (neon_float_type_node) = FLOAT_TYPE_SIZE;
++ layout_type (neon_float_type_node);
+
+- ftype = build_function_type (ptr_type_node, void_list_node);
+- decl = add_builtin_function ("__builtin_thread_pointer", ftype,
+- ARM_BUILTIN_THREAD_POINTER, BUILT_IN_MD,
+- NULL, NULL_TREE);
+- TREE_NOTHROW (decl) = 1;
+- TREE_READONLY (decl) = 1;
+-}
++ /* Define typedefs which exactly correspond to the modes we are basing vector
++ types on. If you change these names you'll need to change
++ the table used by arm_mangle_type too. */
++ (*lang_hooks.types.register_builtin_type) (neon_intQI_type_node,
++ "__builtin_neon_qi");
++ (*lang_hooks.types.register_builtin_type) (neon_intHI_type_node,
++ "__builtin_neon_hi");
++ (*lang_hooks.types.register_builtin_type) (neon_intSI_type_node,
++ "__builtin_neon_si");
++ (*lang_hooks.types.register_builtin_type) (neon_float_type_node,
++ "__builtin_neon_sf");
++ (*lang_hooks.types.register_builtin_type) (neon_intDI_type_node,
++ "__builtin_neon_di");
++ (*lang_hooks.types.register_builtin_type) (neon_polyQI_type_node,
++ "__builtin_neon_poly8");
++ (*lang_hooks.types.register_builtin_type) (neon_polyHI_type_node,
++ "__builtin_neon_poly16");
+
+-enum neon_builtin_type_bits {
+- T_V8QI = 0x0001,
+- T_V4HI = 0x0002,
+- T_V2SI = 0x0004,
+- T_V2SF = 0x0008,
+- T_DI = 0x0010,
+- T_V16QI = 0x0020,
+- T_V8HI = 0x0040,
+- T_V4SI = 0x0080,
+- T_V4SF = 0x0100,
+- T_V2DI = 0x0200,
+- T_TI = 0x0400,
+- T_EI = 0x0800,
+- T_OI = 0x1000
+-};
+-
+-#define v8qi_UP T_V8QI
+-#define v4hi_UP T_V4HI
+-#define v2si_UP T_V2SI
+-#define v2sf_UP T_V2SF
+-#define di_UP T_DI
+-#define v16qi_UP T_V16QI
+-#define v8hi_UP T_V8HI
+-#define v4si_UP T_V4SI
+-#define v4sf_UP T_V4SF
+-#define v2di_UP T_V2DI
+-#define ti_UP T_TI
+-#define ei_UP T_EI
+-#define oi_UP T_OI
+-
+-#define UP(X) X##_UP
+-
+-#define T_MAX 13
+-
+-typedef enum {
+- NEON_BINOP,
+- NEON_TERNOP,
+- NEON_UNOP,
+- NEON_GETLANE,
+- NEON_SETLANE,
+- NEON_CREATE,
+- NEON_DUP,
+- NEON_DUPLANE,
+- NEON_COMBINE,
+- NEON_SPLIT,
+- NEON_LANEMUL,
+- NEON_LANEMULL,
+- NEON_LANEMULH,
+- NEON_LANEMAC,
+- NEON_SCALARMUL,
+- NEON_SCALARMULL,
+- NEON_SCALARMULH,
+- NEON_SCALARMAC,
+- NEON_CONVERT,
+- NEON_FIXCONV,
+- NEON_SELECT,
+- NEON_RESULTPAIR,
+- NEON_REINTERP,
+- NEON_VTBL,
+- NEON_VTBX,
+- NEON_LOAD1,
+- NEON_LOAD1LANE,
+- NEON_STORE1,
+- NEON_STORE1LANE,
+- NEON_LOADSTRUCT,
+- NEON_LOADSTRUCTLANE,
+- NEON_STORESTRUCT,
+- NEON_STORESTRUCTLANE,
+- NEON_LOGICBINOP,
+- NEON_SHIFTINSERT,
+- NEON_SHIFTIMM,
+- NEON_SHIFTACC
+-} neon_itype;
+-
+-typedef struct {
+- const char *name;
+- const neon_itype itype;
+- const int bits;
+- const enum insn_code codes[T_MAX];
+- const unsigned int num_vars;
+- unsigned int base_fcode;
+-} neon_builtin_datum;
+-
+-#define CF(N,X) CODE_FOR_neon_##N##X
+-
+-#define VAR1(T, N, A) \
+- #N, NEON_##T, UP (A), { CF (N, A) }, 1, 0
+-#define VAR2(T, N, A, B) \
+- #N, NEON_##T, UP (A) | UP (B), { CF (N, A), CF (N, B) }, 2, 0
+-#define VAR3(T, N, A, B, C) \
+- #N, NEON_##T, UP (A) | UP (B) | UP (C), \
+- { CF (N, A), CF (N, B), CF (N, C) }, 3, 0
+-#define VAR4(T, N, A, B, C, D) \
+- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D), \
+- { CF (N, A), CF (N, B), CF (N, C), CF (N, D) }, 4, 0
+-#define VAR5(T, N, A, B, C, D, E) \
+- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E), \
+- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E) }, 5, 0
+-#define VAR6(T, N, A, B, C, D, E, F) \
+- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F), \
+- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F) }, 6, 0
+-#define VAR7(T, N, A, B, C, D, E, F, G) \
+- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F) | UP (G), \
+- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F), \
+- CF (N, G) }, 7, 0
+-#define VAR8(T, N, A, B, C, D, E, F, G, H) \
+- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F) | UP (G) \
+- | UP (H), \
+- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F), \
+- CF (N, G), CF (N, H) }, 8, 0
+-#define VAR9(T, N, A, B, C, D, E, F, G, H, I) \
+- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F) | UP (G) \
+- | UP (H) | UP (I), \
+- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F), \
+- CF (N, G), CF (N, H), CF (N, I) }, 9, 0
+-#define VAR10(T, N, A, B, C, D, E, F, G, H, I, J) \
+- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F) | UP (G) \
+- | UP (H) | UP (I) | UP (J), \
+- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F), \
+- CF (N, G), CF (N, H), CF (N, I), CF (N, J) }, 10, 0
+-
+-/* The mode entries in the following table correspond to the "key" type of the
+- instruction variant, i.e. equivalent to that which would be specified after
+- the assembler mnemonic, which usually refers to the last vector operand.
+- (Signed/unsigned/polynomial types are not differentiated between though, and
+- are all mapped onto the same mode for a given element size.) The modes
+- listed per instruction should be the same as those defined for that
+- instruction's pattern in neon.md.
+- WARNING: Variants should be listed in the same increasing order as
+- neon_builtin_type_bits. */
+-
+-static neon_builtin_datum neon_builtin_data[] =
+-{
+- { VAR10 (BINOP, vadd,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR3 (BINOP, vaddl, v8qi, v4hi, v2si) },
+- { VAR3 (BINOP, vaddw, v8qi, v4hi, v2si) },
+- { VAR6 (BINOP, vhadd, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
+- { VAR8 (BINOP, vqadd, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
+- { VAR3 (BINOP, vaddhn, v8hi, v4si, v2di) },
+- { VAR8 (BINOP, vmul, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR8 (TERNOP, vmla, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR3 (TERNOP, vmlal, v8qi, v4hi, v2si) },
+- { VAR8 (TERNOP, vmls, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR3 (TERNOP, vmlsl, v8qi, v4hi, v2si) },
+- { VAR4 (BINOP, vqdmulh, v4hi, v2si, v8hi, v4si) },
+- { VAR2 (TERNOP, vqdmlal, v4hi, v2si) },
+- { VAR2 (TERNOP, vqdmlsl, v4hi, v2si) },
+- { VAR3 (BINOP, vmull, v8qi, v4hi, v2si) },
+- { VAR2 (SCALARMULL, vmull_n, v4hi, v2si) },
+- { VAR2 (LANEMULL, vmull_lane, v4hi, v2si) },
+- { VAR2 (SCALARMULL, vqdmull_n, v4hi, v2si) },
+- { VAR2 (LANEMULL, vqdmull_lane, v4hi, v2si) },
+- { VAR4 (SCALARMULH, vqdmulh_n, v4hi, v2si, v8hi, v4si) },
+- { VAR4 (LANEMULH, vqdmulh_lane, v4hi, v2si, v8hi, v4si) },
+- { VAR2 (BINOP, vqdmull, v4hi, v2si) },
+- { VAR8 (BINOP, vshl, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
+- { VAR8 (BINOP, vqshl, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
+- { VAR8 (SHIFTIMM, vshr_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
+- { VAR3 (SHIFTIMM, vshrn_n, v8hi, v4si, v2di) },
+- { VAR3 (SHIFTIMM, vqshrn_n, v8hi, v4si, v2di) },
+- { VAR3 (SHIFTIMM, vqshrun_n, v8hi, v4si, v2di) },
+- { VAR8 (SHIFTIMM, vshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
+- { VAR8 (SHIFTIMM, vqshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
+- { VAR8 (SHIFTIMM, vqshlu_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
+- { VAR3 (SHIFTIMM, vshll_n, v8qi, v4hi, v2si) },
+- { VAR8 (SHIFTACC, vsra_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
+- { VAR10 (BINOP, vsub,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR3 (BINOP, vsubl, v8qi, v4hi, v2si) },
+- { VAR3 (BINOP, vsubw, v8qi, v4hi, v2si) },
+- { VAR8 (BINOP, vqsub, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
+- { VAR6 (BINOP, vhsub, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
+- { VAR3 (BINOP, vsubhn, v8hi, v4si, v2di) },
+- { VAR8 (BINOP, vceq, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR8 (BINOP, vcge, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR8 (BINOP, vcgt, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR2 (BINOP, vcage, v2sf, v4sf) },
+- { VAR2 (BINOP, vcagt, v2sf, v4sf) },
+- { VAR6 (BINOP, vtst, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
+- { VAR8 (BINOP, vabd, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR3 (BINOP, vabdl, v8qi, v4hi, v2si) },
+- { VAR6 (TERNOP, vaba, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
+- { VAR3 (TERNOP, vabal, v8qi, v4hi, v2si) },
+- { VAR8 (BINOP, vmax, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR8 (BINOP, vmin, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR4 (BINOP, vpadd, v8qi, v4hi, v2si, v2sf) },
+- { VAR6 (UNOP, vpaddl, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
+- { VAR6 (BINOP, vpadal, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
+- { VAR4 (BINOP, vpmax, v8qi, v4hi, v2si, v2sf) },
+- { VAR4 (BINOP, vpmin, v8qi, v4hi, v2si, v2sf) },
+- { VAR2 (BINOP, vrecps, v2sf, v4sf) },
+- { VAR2 (BINOP, vrsqrts, v2sf, v4sf) },
+- { VAR8 (SHIFTINSERT, vsri_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
+- { VAR8 (SHIFTINSERT, vsli_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
+- { VAR8 (UNOP, vabs, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR6 (UNOP, vqabs, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
+- { VAR8 (UNOP, vneg, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR6 (UNOP, vqneg, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
+- { VAR6 (UNOP, vcls, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
+- { VAR6 (UNOP, vclz, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
+- { VAR2 (UNOP, vcnt, v8qi, v16qi) },
+- { VAR4 (UNOP, vrecpe, v2si, v2sf, v4si, v4sf) },
+- { VAR4 (UNOP, vrsqrte, v2si, v2sf, v4si, v4sf) },
+- { VAR6 (UNOP, vmvn, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
+- /* FIXME: vget_lane supports more variants than this! */
+- { VAR10 (GETLANE, vget_lane,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR10 (SETLANE, vset_lane,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR5 (CREATE, vcreate, v8qi, v4hi, v2si, v2sf, di) },
+- { VAR10 (DUP, vdup_n,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR10 (DUPLANE, vdup_lane,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR5 (COMBINE, vcombine, v8qi, v4hi, v2si, v2sf, di) },
+- { VAR5 (SPLIT, vget_high, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR5 (SPLIT, vget_low, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR3 (UNOP, vmovn, v8hi, v4si, v2di) },
+- { VAR3 (UNOP, vqmovn, v8hi, v4si, v2di) },
+- { VAR3 (UNOP, vqmovun, v8hi, v4si, v2di) },
+- { VAR3 (UNOP, vmovl, v8qi, v4hi, v2si) },
+- { VAR6 (LANEMUL, vmul_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
+- { VAR6 (LANEMAC, vmla_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
+- { VAR2 (LANEMAC, vmlal_lane, v4hi, v2si) },
+- { VAR2 (LANEMAC, vqdmlal_lane, v4hi, v2si) },
+- { VAR6 (LANEMAC, vmls_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
+- { VAR2 (LANEMAC, vmlsl_lane, v4hi, v2si) },
+- { VAR2 (LANEMAC, vqdmlsl_lane, v4hi, v2si) },
+- { VAR6 (SCALARMUL, vmul_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
+- { VAR6 (SCALARMAC, vmla_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
+- { VAR2 (SCALARMAC, vmlal_n, v4hi, v2si) },
+- { VAR2 (SCALARMAC, vqdmlal_n, v4hi, v2si) },
+- { VAR6 (SCALARMAC, vmls_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
+- { VAR2 (SCALARMAC, vmlsl_n, v4hi, v2si) },
+- { VAR2 (SCALARMAC, vqdmlsl_n, v4hi, v2si) },
+- { VAR10 (BINOP, vext,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR8 (UNOP, vrev64, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR4 (UNOP, vrev32, v8qi, v4hi, v16qi, v8hi) },
+- { VAR2 (UNOP, vrev16, v8qi, v16qi) },
+- { VAR4 (CONVERT, vcvt, v2si, v2sf, v4si, v4sf) },
+- { VAR4 (FIXCONV, vcvt_n, v2si, v2sf, v4si, v4sf) },
+- { VAR10 (SELECT, vbsl,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR1 (VTBL, vtbl1, v8qi) },
+- { VAR1 (VTBL, vtbl2, v8qi) },
+- { VAR1 (VTBL, vtbl3, v8qi) },
+- { VAR1 (VTBL, vtbl4, v8qi) },
+- { VAR1 (VTBX, vtbx1, v8qi) },
+- { VAR1 (VTBX, vtbx2, v8qi) },
+- { VAR1 (VTBX, vtbx3, v8qi) },
+- { VAR1 (VTBX, vtbx4, v8qi) },
+- { VAR8 (RESULTPAIR, vtrn, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR8 (RESULTPAIR, vzip, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR8 (RESULTPAIR, vuzp, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
+- { VAR5 (REINTERP, vreinterpretv8qi, v8qi, v4hi, v2si, v2sf, di) },
+- { VAR5 (REINTERP, vreinterpretv4hi, v8qi, v4hi, v2si, v2sf, di) },
+- { VAR5 (REINTERP, vreinterpretv2si, v8qi, v4hi, v2si, v2sf, di) },
+- { VAR5 (REINTERP, vreinterpretv2sf, v8qi, v4hi, v2si, v2sf, di) },
+- { VAR5 (REINTERP, vreinterpretdi, v8qi, v4hi, v2si, v2sf, di) },
+- { VAR5 (REINTERP, vreinterpretv16qi, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR5 (REINTERP, vreinterpretv8hi, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR5 (REINTERP, vreinterpretv4si, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR5 (REINTERP, vreinterpretv4sf, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR5 (REINTERP, vreinterpretv2di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR10 (LOAD1, vld1,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR10 (LOAD1LANE, vld1_lane,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR10 (LOAD1, vld1_dup,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR10 (STORE1, vst1,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR10 (STORE1LANE, vst1_lane,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR9 (LOADSTRUCT,
+- vld2, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
+- { VAR7 (LOADSTRUCTLANE, vld2_lane,
+- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
+- { VAR5 (LOADSTRUCT, vld2_dup, v8qi, v4hi, v2si, v2sf, di) },
+- { VAR9 (STORESTRUCT, vst2,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
+- { VAR7 (STORESTRUCTLANE, vst2_lane,
+- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
+- { VAR9 (LOADSTRUCT,
+- vld3, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
+- { VAR7 (LOADSTRUCTLANE, vld3_lane,
+- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
+- { VAR5 (LOADSTRUCT, vld3_dup, v8qi, v4hi, v2si, v2sf, di) },
+- { VAR9 (STORESTRUCT, vst3,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
+- { VAR7 (STORESTRUCTLANE, vst3_lane,
+- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
+- { VAR9 (LOADSTRUCT, vld4,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
+- { VAR7 (LOADSTRUCTLANE, vld4_lane,
+- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
+- { VAR5 (LOADSTRUCT, vld4_dup, v8qi, v4hi, v2si, v2sf, di) },
+- { VAR9 (STORESTRUCT, vst4,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
+- { VAR7 (STORESTRUCTLANE, vst4_lane,
+- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
+- { VAR10 (LOGICBINOP, vand,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR10 (LOGICBINOP, vorr,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR10 (BINOP, veor,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR10 (LOGICBINOP, vbic,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
+- { VAR10 (LOGICBINOP, vorn,
+- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) }
+-};
+-
+-#undef CF
+-#undef VAR1
+-#undef VAR2
+-#undef VAR3
+-#undef VAR4
+-#undef VAR5
+-#undef VAR6
+-#undef VAR7
+-#undef VAR8
+-#undef VAR9
+-#undef VAR10
+-
+-static void
+-arm_init_neon_builtins (void)
+-{
+- unsigned int i, fcode = ARM_BUILTIN_NEON_BASE;
+-
+- tree neon_intQI_type_node;
+- tree neon_intHI_type_node;
+- tree neon_polyQI_type_node;
+- tree neon_polyHI_type_node;
+- tree neon_intSI_type_node;
+- tree neon_intDI_type_node;
+- tree neon_float_type_node;
+-
+- tree intQI_pointer_node;
+- tree intHI_pointer_node;
+- tree intSI_pointer_node;
+- tree intDI_pointer_node;
+- tree float_pointer_node;
+-
+- tree const_intQI_node;
+- tree const_intHI_node;
+- tree const_intSI_node;
+- tree const_intDI_node;
+- tree const_float_node;
+-
+- tree const_intQI_pointer_node;
+- tree const_intHI_pointer_node;
+- tree const_intSI_pointer_node;
+- tree const_intDI_pointer_node;
+- tree const_float_pointer_node;
+-
+- tree V8QI_type_node;
+- tree V4HI_type_node;
+- tree V2SI_type_node;
+- tree V2SF_type_node;
+- tree V16QI_type_node;
+- tree V8HI_type_node;
+- tree V4SI_type_node;
+- tree V4SF_type_node;
+- tree V2DI_type_node;
+-
+- tree intUQI_type_node;
+- tree intUHI_type_node;
+- tree intUSI_type_node;
+- tree intUDI_type_node;
+-
+- tree intEI_type_node;
+- tree intOI_type_node;
+- tree intCI_type_node;
+- tree intXI_type_node;
+-
+- tree V8QI_pointer_node;
+- tree V4HI_pointer_node;
+- tree V2SI_pointer_node;
+- tree V2SF_pointer_node;
+- tree V16QI_pointer_node;
+- tree V8HI_pointer_node;
+- tree V4SI_pointer_node;
+- tree V4SF_pointer_node;
+- tree V2DI_pointer_node;
+-
+- tree void_ftype_pv8qi_v8qi_v8qi;
+- tree void_ftype_pv4hi_v4hi_v4hi;
+- tree void_ftype_pv2si_v2si_v2si;
+- tree void_ftype_pv2sf_v2sf_v2sf;
+- tree void_ftype_pdi_di_di;
+- tree void_ftype_pv16qi_v16qi_v16qi;
+- tree void_ftype_pv8hi_v8hi_v8hi;
+- tree void_ftype_pv4si_v4si_v4si;
+- tree void_ftype_pv4sf_v4sf_v4sf;
+- tree void_ftype_pv2di_v2di_v2di;
+-
+- tree reinterp_ftype_dreg[5][5];
+- tree reinterp_ftype_qreg[5][5];
+- tree dreg_types[5], qreg_types[5];
+-
+- /* Create distinguished type nodes for NEON vector element types,
+- and pointers to values of such types, so we can detect them later. */
+- neon_intQI_type_node = make_signed_type (GET_MODE_PRECISION (QImode));
+- neon_intHI_type_node = make_signed_type (GET_MODE_PRECISION (HImode));
+- neon_polyQI_type_node = make_signed_type (GET_MODE_PRECISION (QImode));
+- neon_polyHI_type_node = make_signed_type (GET_MODE_PRECISION (HImode));
+- neon_intSI_type_node = make_signed_type (GET_MODE_PRECISION (SImode));
+- neon_intDI_type_node = make_signed_type (GET_MODE_PRECISION (DImode));
+- neon_float_type_node = make_node (REAL_TYPE);
+- TYPE_PRECISION (neon_float_type_node) = FLOAT_TYPE_SIZE;
+- layout_type (neon_float_type_node);
+-
+- /* Define typedefs which exactly correspond to the modes we are basing vector
+- types on. If you change these names you'll need to change
+- the table used by arm_mangle_type too. */
+- (*lang_hooks.types.register_builtin_type) (neon_intQI_type_node,
+- "__builtin_neon_qi");
+- (*lang_hooks.types.register_builtin_type) (neon_intHI_type_node,
+- "__builtin_neon_hi");
+- (*lang_hooks.types.register_builtin_type) (neon_intSI_type_node,
+- "__builtin_neon_si");
+- (*lang_hooks.types.register_builtin_type) (neon_float_type_node,
+- "__builtin_neon_sf");
+- (*lang_hooks.types.register_builtin_type) (neon_intDI_type_node,
+- "__builtin_neon_di");
+- (*lang_hooks.types.register_builtin_type) (neon_polyQI_type_node,
+- "__builtin_neon_poly8");
+- (*lang_hooks.types.register_builtin_type) (neon_polyHI_type_node,
+- "__builtin_neon_poly16");
+-
+- intQI_pointer_node = build_pointer_type (neon_intQI_type_node);
+- intHI_pointer_node = build_pointer_type (neon_intHI_type_node);
+- intSI_pointer_node = build_pointer_type (neon_intSI_type_node);
+- intDI_pointer_node = build_pointer_type (neon_intDI_type_node);
+- float_pointer_node = build_pointer_type (neon_float_type_node);
++ intQI_pointer_node = build_pointer_type (neon_intQI_type_node);
++ intHI_pointer_node = build_pointer_type (neon_intHI_type_node);
++ intSI_pointer_node = build_pointer_type (neon_intSI_type_node);
++ intDI_pointer_node = build_pointer_type (neon_intDI_type_node);
++ float_pointer_node = build_pointer_type (neon_float_type_node);
+
+ /* Next create constant-qualified versions of the above types. */
+ const_intQI_node = build_qualified_type (neon_intQI_type_node,
+@@ -18843,252 +19382,740 @@
+ }
+ }
+
+- for (i = 0; i < ARRAY_SIZE (neon_builtin_data); i++)
++ for (i = 0, fcode = ARM_BUILTIN_NEON_BASE;
++ i < ARRAY_SIZE (neon_builtin_data);
++ i++, fcode++)
+ {
+ neon_builtin_datum *d = &neon_builtin_data[i];
+- unsigned int j, codeidx = 0;
+
+- d->base_fcode = fcode;
+-
+- for (j = 0; j < T_MAX; j++)
+- {
+- const char* const modenames[] = {
+- "v8qi", "v4hi", "v2si", "v2sf", "di",
+- "v16qi", "v8hi", "v4si", "v4sf", "v2di"
+- };
+- char namebuf[60];
+- tree ftype = NULL;
+- enum insn_code icode;
+- int is_load = 0, is_store = 0;
++ const char* const modenames[] = {
++ "v8qi", "v4hi", "v2si", "v2sf", "di",
++ "v16qi", "v8hi", "v4si", "v4sf", "v2di",
++ "ti", "ei", "oi"
++ };
++ char namebuf[60];
++ tree ftype = NULL;
++ int is_load = 0, is_store = 0;
++
++ gcc_assert (ARRAY_SIZE (modenames) == T_MAX);
++
++ d->fcode = fcode;
++
++ switch (d->itype)
++ {
++ case NEON_LOAD1:
++ case NEON_LOAD1LANE:
++ case NEON_LOADSTRUCT:
++ case NEON_LOADSTRUCTLANE:
++ is_load = 1;
++ /* Fall through. */
++ case NEON_STORE1:
++ case NEON_STORE1LANE:
++ case NEON_STORESTRUCT:
++ case NEON_STORESTRUCTLANE:
++ if (!is_load)
++ is_store = 1;
++ /* Fall through. */
++ case NEON_UNOP:
++ case NEON_BINOP:
++ case NEON_LOGICBINOP:
++ case NEON_SHIFTINSERT:
++ case NEON_TERNOP:
++ case NEON_GETLANE:
++ case NEON_SETLANE:
++ case NEON_CREATE:
++ case NEON_DUP:
++ case NEON_DUPLANE:
++ case NEON_SHIFTIMM:
++ case NEON_SHIFTACC:
++ case NEON_COMBINE:
++ case NEON_SPLIT:
++ case NEON_CONVERT:
++ case NEON_FIXCONV:
++ case NEON_LANEMUL:
++ case NEON_LANEMULL:
++ case NEON_LANEMULH:
++ case NEON_LANEMAC:
++ case NEON_SCALARMUL:
++ case NEON_SCALARMULL:
++ case NEON_SCALARMULH:
++ case NEON_SCALARMAC:
++ case NEON_SELECT:
++ case NEON_VTBL:
++ case NEON_VTBX:
++ {
++ int k;
++ tree return_type = void_type_node, args = void_list_node;
+
+- if ((d->bits & (1 << j)) == 0)
+- continue;
++ /* Build a function type directly from the insn_data for
++ this builtin. The build_function_type() function takes
++ care of removing duplicates for us. */
++ for (k = insn_data[d->code].n_operands - 1; k >= 0; k--)
++ {
++ tree eltype;
+
+- icode = d->codes[codeidx++];
++ if (is_load && k == 1)
++ {
++ /* Neon load patterns always have the memory
++ operand in the operand 1 position. */
++ gcc_assert (insn_data[d->code].operand[k].predicate
++ == neon_struct_operand);
+
+- switch (d->itype)
+- {
+- case NEON_LOAD1:
+- case NEON_LOAD1LANE:
+- case NEON_LOADSTRUCT:
+- case NEON_LOADSTRUCTLANE:
+- is_load = 1;
+- /* Fall through. */
+- case NEON_STORE1:
+- case NEON_STORE1LANE:
+- case NEON_STORESTRUCT:
+- case NEON_STORESTRUCTLANE:
+- if (!is_load)
+- is_store = 1;
+- /* Fall through. */
+- case NEON_UNOP:
+- case NEON_BINOP:
+- case NEON_LOGICBINOP:
+- case NEON_SHIFTINSERT:
+- case NEON_TERNOP:
+- case NEON_GETLANE:
+- case NEON_SETLANE:
+- case NEON_CREATE:
+- case NEON_DUP:
+- case NEON_DUPLANE:
+- case NEON_SHIFTIMM:
+- case NEON_SHIFTACC:
+- case NEON_COMBINE:
+- case NEON_SPLIT:
+- case NEON_CONVERT:
+- case NEON_FIXCONV:
+- case NEON_LANEMUL:
+- case NEON_LANEMULL:
+- case NEON_LANEMULH:
+- case NEON_LANEMAC:
+- case NEON_SCALARMUL:
+- case NEON_SCALARMULL:
+- case NEON_SCALARMULH:
+- case NEON_SCALARMAC:
+- case NEON_SELECT:
+- case NEON_VTBL:
+- case NEON_VTBX:
+- {
+- int k;
+- tree return_type = void_type_node, args = void_list_node;
++ switch (d->mode)
++ {
++ case T_V8QI:
++ case T_V16QI:
++ eltype = const_intQI_pointer_node;
++ break;
++
++ case T_V4HI:
++ case T_V8HI:
++ eltype = const_intHI_pointer_node;
++ break;
++
++ case T_V2SI:
++ case T_V4SI:
++ eltype = const_intSI_pointer_node;
++ break;
++
++ case T_V2SF:
++ case T_V4SF:
++ eltype = const_float_pointer_node;
++ break;
++
++ case T_DI:
++ case T_V2DI:
++ eltype = const_intDI_pointer_node;
++ break;
+
+- /* Build a function type directly from the insn_data for this
+- builtin. The build_function_type() function takes care of
+- removing duplicates for us. */
+- for (k = insn_data[icode].n_operands - 1; k >= 0; k--)
++ default: gcc_unreachable ();
++ }
++ }
++ else if (is_store && k == 0)
+ {
+- tree eltype;
++ /* Similarly, Neon store patterns use operand 0 as
++ the memory location to store to. */
++ gcc_assert (insn_data[d->code].operand[k].predicate
++ == neon_struct_operand);
+
+- if (is_load && k == 1)
++ switch (d->mode)
+ {
+- /* Neon load patterns always have the memory operand
+- (a SImode pointer) in the operand 1 position. We
+- want a const pointer to the element type in that
+- position. */
+- gcc_assert (insn_data[icode].operand[k].mode == SImode);
++ case T_V8QI:
++ case T_V16QI:
++ eltype = intQI_pointer_node;
++ break;
++
++ case T_V4HI:
++ case T_V8HI:
++ eltype = intHI_pointer_node;
++ break;
++
++ case T_V2SI:
++ case T_V4SI:
++ eltype = intSI_pointer_node;
++ break;
++
++ case T_V2SF:
++ case T_V4SF:
++ eltype = float_pointer_node;
++ break;
++
++ case T_DI:
++ case T_V2DI:
++ eltype = intDI_pointer_node;
++ break;
+
+- switch (1 << j)
+- {
+- case T_V8QI:
+- case T_V16QI:
+- eltype = const_intQI_pointer_node;
+- break;
++ default: gcc_unreachable ();
++ }
++ }
++ else
++ {
++ switch (insn_data[d->code].operand[k].mode)
++ {
++ case VOIDmode: eltype = void_type_node; break;
++ /* Scalars. */
++ case QImode: eltype = neon_intQI_type_node; break;
++ case HImode: eltype = neon_intHI_type_node; break;
++ case SImode: eltype = neon_intSI_type_node; break;
++ case SFmode: eltype = neon_float_type_node; break;
++ case DImode: eltype = neon_intDI_type_node; break;
++ case TImode: eltype = intTI_type_node; break;
++ case EImode: eltype = intEI_type_node; break;
++ case OImode: eltype = intOI_type_node; break;
++ case CImode: eltype = intCI_type_node; break;
++ case XImode: eltype = intXI_type_node; break;
++ /* 64-bit vectors. */
++ case V8QImode: eltype = V8QI_type_node; break;
++ case V4HImode: eltype = V4HI_type_node; break;
++ case V2SImode: eltype = V2SI_type_node; break;
++ case V2SFmode: eltype = V2SF_type_node; break;
++ /* 128-bit vectors. */
++ case V16QImode: eltype = V16QI_type_node; break;
++ case V8HImode: eltype = V8HI_type_node; break;
++ case V4SImode: eltype = V4SI_type_node; break;
++ case V4SFmode: eltype = V4SF_type_node; break;
++ case V2DImode: eltype = V2DI_type_node; break;
++ default: gcc_unreachable ();
++ }
++ }
+
+- case T_V4HI:
+- case T_V8HI:
+- eltype = const_intHI_pointer_node;
+- break;
++ if (k == 0 && !is_store)
++ return_type = eltype;
++ else
++ args = tree_cons (NULL_TREE, eltype, args);
++ }
+
+- case T_V2SI:
+- case T_V4SI:
+- eltype = const_intSI_pointer_node;
+- break;
++ ftype = build_function_type (return_type, args);
++ }
++ break;
+
+- case T_V2SF:
+- case T_V4SF:
+- eltype = const_float_pointer_node;
+- break;
++ case NEON_RESULTPAIR:
++ {
++ switch (insn_data[d->code].operand[1].mode)
++ {
++ case V8QImode: ftype = void_ftype_pv8qi_v8qi_v8qi; break;
++ case V4HImode: ftype = void_ftype_pv4hi_v4hi_v4hi; break;
++ case V2SImode: ftype = void_ftype_pv2si_v2si_v2si; break;
++ case V2SFmode: ftype = void_ftype_pv2sf_v2sf_v2sf; break;
++ case DImode: ftype = void_ftype_pdi_di_di; break;
++ case V16QImode: ftype = void_ftype_pv16qi_v16qi_v16qi; break;
++ case V8HImode: ftype = void_ftype_pv8hi_v8hi_v8hi; break;
++ case V4SImode: ftype = void_ftype_pv4si_v4si_v4si; break;
++ case V4SFmode: ftype = void_ftype_pv4sf_v4sf_v4sf; break;
++ case V2DImode: ftype = void_ftype_pv2di_v2di_v2di; break;
++ default: gcc_unreachable ();
++ }
++ }
++ break;
+
+- case T_DI:
+- case T_V2DI:
+- eltype = const_intDI_pointer_node;
+- break;
++ case NEON_REINTERP:
++ {
++ /* We iterate over 5 doubleword types, then 5 quadword
++ types. */
++ int rhs = d->mode % 5;
++ switch (insn_data[d->code].operand[0].mode)
++ {
++ case V8QImode: ftype = reinterp_ftype_dreg[0][rhs]; break;
++ case V4HImode: ftype = reinterp_ftype_dreg[1][rhs]; break;
++ case V2SImode: ftype = reinterp_ftype_dreg[2][rhs]; break;
++ case V2SFmode: ftype = reinterp_ftype_dreg[3][rhs]; break;
++ case DImode: ftype = reinterp_ftype_dreg[4][rhs]; break;
++ case V16QImode: ftype = reinterp_ftype_qreg[0][rhs]; break;
++ case V8HImode: ftype = reinterp_ftype_qreg[1][rhs]; break;
++ case V4SImode: ftype = reinterp_ftype_qreg[2][rhs]; break;
++ case V4SFmode: ftype = reinterp_ftype_qreg[3][rhs]; break;
++ case V2DImode: ftype = reinterp_ftype_qreg[4][rhs]; break;
++ default: gcc_unreachable ();
++ }
++ }
++ break;
+
+- default: gcc_unreachable ();
+- }
+- }
+- else if (is_store && k == 0)
+- {
+- /* Similarly, Neon store patterns use operand 0 as
+- the memory location to store to (a SImode pointer).
+- Use a pointer to the element type of the store in
+- that position. */
+- gcc_assert (insn_data[icode].operand[k].mode == SImode);
++ default:
++ gcc_unreachable ();
++ }
+
+- switch (1 << j)
+- {
+- case T_V8QI:
+- case T_V16QI:
+- eltype = intQI_pointer_node;
+- break;
++ gcc_assert (ftype != NULL);
+
+- case T_V4HI:
+- case T_V8HI:
+- eltype = intHI_pointer_node;
+- break;
++ sprintf (namebuf, "__builtin_neon_%s%s", d->name, modenames[d->mode]);
+
+- case T_V2SI:
+- case T_V4SI:
+- eltype = intSI_pointer_node;
+- break;
++ decl = add_builtin_function (namebuf, ftype, fcode, BUILT_IN_MD, NULL,
++ NULL_TREE);
++ arm_builtin_decls[fcode] = decl;
++ }
++}
++
++#define def_mbuiltin(MASK, NAME, TYPE, CODE) \
++ do \
++ { \
++ if ((MASK) & insn_flags) \
++ { \
++ tree bdecl; \
++ bdecl = add_builtin_function ((NAME), (TYPE), (CODE), \
++ BUILT_IN_MD, NULL, NULL_TREE); \
++ arm_builtin_decls[CODE] = bdecl; \
++ } \
++ } \
++ while (0)
++
++struct builtin_description
++{
++ const unsigned int mask;
++ const enum insn_code icode;
++ const char * const name;
++ const enum arm_builtins code;
++ const enum rtx_code comparison;
++ const unsigned int flag;
++};
++
++static const struct builtin_description bdesc_2arg[] =
++{
++#define IWMMXT_BUILTIN(code, string, builtin) \
++ { FL_IWMMXT, CODE_FOR_##code, "__builtin_arm_" string, \
++ ARM_BUILTIN_##builtin, UNKNOWN, 0 },
++
++ IWMMXT_BUILTIN (addv8qi3, "waddb", WADDB)
++ IWMMXT_BUILTIN (addv4hi3, "waddh", WADDH)
++ IWMMXT_BUILTIN (addv2si3, "waddw", WADDW)
++ IWMMXT_BUILTIN (subv8qi3, "wsubb", WSUBB)
++ IWMMXT_BUILTIN (subv4hi3, "wsubh", WSUBH)
++ IWMMXT_BUILTIN (subv2si3, "wsubw", WSUBW)
++ IWMMXT_BUILTIN (ssaddv8qi3, "waddbss", WADDSSB)
++ IWMMXT_BUILTIN (ssaddv4hi3, "waddhss", WADDSSH)
++ IWMMXT_BUILTIN (ssaddv2si3, "waddwss", WADDSSW)
++ IWMMXT_BUILTIN (sssubv8qi3, "wsubbss", WSUBSSB)
++ IWMMXT_BUILTIN (sssubv4hi3, "wsubhss", WSUBSSH)
++ IWMMXT_BUILTIN (sssubv2si3, "wsubwss", WSUBSSW)
++ IWMMXT_BUILTIN (usaddv8qi3, "waddbus", WADDUSB)
++ IWMMXT_BUILTIN (usaddv4hi3, "waddhus", WADDUSH)
++ IWMMXT_BUILTIN (usaddv2si3, "waddwus", WADDUSW)
++ IWMMXT_BUILTIN (ussubv8qi3, "wsubbus", WSUBUSB)
++ IWMMXT_BUILTIN (ussubv4hi3, "wsubhus", WSUBUSH)
++ IWMMXT_BUILTIN (ussubv2si3, "wsubwus", WSUBUSW)
++ IWMMXT_BUILTIN (mulv4hi3, "wmulul", WMULUL)
++ IWMMXT_BUILTIN (smulv4hi3_highpart, "wmulsm", WMULSM)
++ IWMMXT_BUILTIN (umulv4hi3_highpart, "wmulum", WMULUM)
++ IWMMXT_BUILTIN (eqv8qi3, "wcmpeqb", WCMPEQB)
++ IWMMXT_BUILTIN (eqv4hi3, "wcmpeqh", WCMPEQH)
++ IWMMXT_BUILTIN (eqv2si3, "wcmpeqw", WCMPEQW)
++ IWMMXT_BUILTIN (gtuv8qi3, "wcmpgtub", WCMPGTUB)
++ IWMMXT_BUILTIN (gtuv4hi3, "wcmpgtuh", WCMPGTUH)
++ IWMMXT_BUILTIN (gtuv2si3, "wcmpgtuw", WCMPGTUW)
++ IWMMXT_BUILTIN (gtv8qi3, "wcmpgtsb", WCMPGTSB)
++ IWMMXT_BUILTIN (gtv4hi3, "wcmpgtsh", WCMPGTSH)
++ IWMMXT_BUILTIN (gtv2si3, "wcmpgtsw", WCMPGTSW)
++ IWMMXT_BUILTIN (umaxv8qi3, "wmaxub", WMAXUB)
++ IWMMXT_BUILTIN (smaxv8qi3, "wmaxsb", WMAXSB)
++ IWMMXT_BUILTIN (umaxv4hi3, "wmaxuh", WMAXUH)
++ IWMMXT_BUILTIN (smaxv4hi3, "wmaxsh", WMAXSH)
++ IWMMXT_BUILTIN (umaxv2si3, "wmaxuw", WMAXUW)
++ IWMMXT_BUILTIN (smaxv2si3, "wmaxsw", WMAXSW)
++ IWMMXT_BUILTIN (uminv8qi3, "wminub", WMINUB)
++ IWMMXT_BUILTIN (sminv8qi3, "wminsb", WMINSB)
++ IWMMXT_BUILTIN (uminv4hi3, "wminuh", WMINUH)
++ IWMMXT_BUILTIN (sminv4hi3, "wminsh", WMINSH)
++ IWMMXT_BUILTIN (uminv2si3, "wminuw", WMINUW)
++ IWMMXT_BUILTIN (sminv2si3, "wminsw", WMINSW)
++ IWMMXT_BUILTIN (iwmmxt_anddi3, "wand", WAND)
++ IWMMXT_BUILTIN (iwmmxt_nanddi3, "wandn", WANDN)
++ IWMMXT_BUILTIN (iwmmxt_iordi3, "wor", WOR)
++ IWMMXT_BUILTIN (iwmmxt_xordi3, "wxor", WXOR)
++ IWMMXT_BUILTIN (iwmmxt_uavgv8qi3, "wavg2b", WAVG2B)
++ IWMMXT_BUILTIN (iwmmxt_uavgv4hi3, "wavg2h", WAVG2H)
++ IWMMXT_BUILTIN (iwmmxt_uavgrndv8qi3, "wavg2br", WAVG2BR)
++ IWMMXT_BUILTIN (iwmmxt_uavgrndv4hi3, "wavg2hr", WAVG2HR)
++ IWMMXT_BUILTIN (iwmmxt_wunpckilb, "wunpckilb", WUNPCKILB)
++ IWMMXT_BUILTIN (iwmmxt_wunpckilh, "wunpckilh", WUNPCKILH)
++ IWMMXT_BUILTIN (iwmmxt_wunpckilw, "wunpckilw", WUNPCKILW)
++ IWMMXT_BUILTIN (iwmmxt_wunpckihb, "wunpckihb", WUNPCKIHB)
++ IWMMXT_BUILTIN (iwmmxt_wunpckihh, "wunpckihh", WUNPCKIHH)
++ IWMMXT_BUILTIN (iwmmxt_wunpckihw, "wunpckihw", WUNPCKIHW)
++ IWMMXT_BUILTIN (iwmmxt_wmadds, "wmadds", WMADDS)
++ IWMMXT_BUILTIN (iwmmxt_wmaddu, "wmaddu", WMADDU)
++
++#define IWMMXT_BUILTIN2(code, builtin) \
++ { FL_IWMMXT, CODE_FOR_##code, NULL, ARM_BUILTIN_##builtin, UNKNOWN, 0 },
++
++ IWMMXT_BUILTIN2 (iwmmxt_wpackhss, WPACKHSS)
++ IWMMXT_BUILTIN2 (iwmmxt_wpackwss, WPACKWSS)
++ IWMMXT_BUILTIN2 (iwmmxt_wpackdss, WPACKDSS)
++ IWMMXT_BUILTIN2 (iwmmxt_wpackhus, WPACKHUS)
++ IWMMXT_BUILTIN2 (iwmmxt_wpackwus, WPACKWUS)
++ IWMMXT_BUILTIN2 (iwmmxt_wpackdus, WPACKDUS)
++ IWMMXT_BUILTIN2 (ashlv4hi3_di, WSLLH)
++ IWMMXT_BUILTIN2 (ashlv4hi3_iwmmxt, WSLLHI)
++ IWMMXT_BUILTIN2 (ashlv2si3_di, WSLLW)
++ IWMMXT_BUILTIN2 (ashlv2si3_iwmmxt, WSLLWI)
++ IWMMXT_BUILTIN2 (ashldi3_di, WSLLD)
++ IWMMXT_BUILTIN2 (ashldi3_iwmmxt, WSLLDI)
++ IWMMXT_BUILTIN2 (lshrv4hi3_di, WSRLH)
++ IWMMXT_BUILTIN2 (lshrv4hi3_iwmmxt, WSRLHI)
++ IWMMXT_BUILTIN2 (lshrv2si3_di, WSRLW)
++ IWMMXT_BUILTIN2 (lshrv2si3_iwmmxt, WSRLWI)
++ IWMMXT_BUILTIN2 (lshrdi3_di, WSRLD)
++ IWMMXT_BUILTIN2 (lshrdi3_iwmmxt, WSRLDI)
++ IWMMXT_BUILTIN2 (ashrv4hi3_di, WSRAH)
++ IWMMXT_BUILTIN2 (ashrv4hi3_iwmmxt, WSRAHI)
++ IWMMXT_BUILTIN2 (ashrv2si3_di, WSRAW)
++ IWMMXT_BUILTIN2 (ashrv2si3_iwmmxt, WSRAWI)
++ IWMMXT_BUILTIN2 (ashrdi3_di, WSRAD)
++ IWMMXT_BUILTIN2 (ashrdi3_iwmmxt, WSRADI)
++ IWMMXT_BUILTIN2 (rorv4hi3_di, WRORH)
++ IWMMXT_BUILTIN2 (rorv4hi3, WRORHI)
++ IWMMXT_BUILTIN2 (rorv2si3_di, WRORW)
++ IWMMXT_BUILTIN2 (rorv2si3, WRORWI)
++ IWMMXT_BUILTIN2 (rordi3_di, WRORD)
++ IWMMXT_BUILTIN2 (rordi3, WRORDI)
++ IWMMXT_BUILTIN2 (iwmmxt_wmacuz, WMACUZ)
++ IWMMXT_BUILTIN2 (iwmmxt_wmacsz, WMACSZ)
++};
++
++static const struct builtin_description bdesc_1arg[] =
++{
++ IWMMXT_BUILTIN (iwmmxt_tmovmskb, "tmovmskb", TMOVMSKB)
++ IWMMXT_BUILTIN (iwmmxt_tmovmskh, "tmovmskh", TMOVMSKH)
++ IWMMXT_BUILTIN (iwmmxt_tmovmskw, "tmovmskw", TMOVMSKW)
++ IWMMXT_BUILTIN (iwmmxt_waccb, "waccb", WACCB)
++ IWMMXT_BUILTIN (iwmmxt_wacch, "wacch", WACCH)
++ IWMMXT_BUILTIN (iwmmxt_waccw, "waccw", WACCW)
++ IWMMXT_BUILTIN (iwmmxt_wunpckehub, "wunpckehub", WUNPCKEHUB)
++ IWMMXT_BUILTIN (iwmmxt_wunpckehuh, "wunpckehuh", WUNPCKEHUH)
++ IWMMXT_BUILTIN (iwmmxt_wunpckehuw, "wunpckehuw", WUNPCKEHUW)
++ IWMMXT_BUILTIN (iwmmxt_wunpckehsb, "wunpckehsb", WUNPCKEHSB)
++ IWMMXT_BUILTIN (iwmmxt_wunpckehsh, "wunpckehsh", WUNPCKEHSH)
++ IWMMXT_BUILTIN (iwmmxt_wunpckehsw, "wunpckehsw", WUNPCKEHSW)
++ IWMMXT_BUILTIN (iwmmxt_wunpckelub, "wunpckelub", WUNPCKELUB)
++ IWMMXT_BUILTIN (iwmmxt_wunpckeluh, "wunpckeluh", WUNPCKELUH)
++ IWMMXT_BUILTIN (iwmmxt_wunpckeluw, "wunpckeluw", WUNPCKELUW)
++ IWMMXT_BUILTIN (iwmmxt_wunpckelsb, "wunpckelsb", WUNPCKELSB)
++ IWMMXT_BUILTIN (iwmmxt_wunpckelsh, "wunpckelsh", WUNPCKELSH)
++ IWMMXT_BUILTIN (iwmmxt_wunpckelsw, "wunpckelsw", WUNPCKELSW)
++};
++
++/* Set up all the iWMMXt builtins. This is not called if
++ TARGET_IWMMXT is zero. */
++
++static void
++arm_init_iwmmxt_builtins (void)
++{
++ const struct builtin_description * d;
++ size_t i;
++ tree endlink = void_list_node;
++
++ tree V2SI_type_node = build_vector_type_for_mode (intSI_type_node, V2SImode);
++ tree V4HI_type_node = build_vector_type_for_mode (intHI_type_node, V4HImode);
++ tree V8QI_type_node = build_vector_type_for_mode (intQI_type_node, V8QImode);
++
++ tree int_ftype_int
++ = build_function_type (integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node, endlink));
++ tree v8qi_ftype_v8qi_v8qi_int
++ = build_function_type (V8QI_type_node,
++ tree_cons (NULL_TREE, V8QI_type_node,
++ tree_cons (NULL_TREE, V8QI_type_node,
++ tree_cons (NULL_TREE,
++ integer_type_node,
++ endlink))));
++ tree v4hi_ftype_v4hi_int
++ = build_function_type (V4HI_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ endlink)));
++ tree v2si_ftype_v2si_int
++ = build_function_type (V2SI_type_node,
++ tree_cons (NULL_TREE, V2SI_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ endlink)));
++ tree v2si_ftype_di_di
++ = build_function_type (V2SI_type_node,
++ tree_cons (NULL_TREE, long_long_integer_type_node,
++ tree_cons (NULL_TREE,
++ long_long_integer_type_node,
++ endlink)));
++ tree di_ftype_di_int
++ = build_function_type (long_long_integer_type_node,
++ tree_cons (NULL_TREE, long_long_integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ endlink)));
++ tree di_ftype_di_int_int
++ = build_function_type (long_long_integer_type_node,
++ tree_cons (NULL_TREE, long_long_integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ tree_cons (NULL_TREE,
++ integer_type_node,
++ endlink))));
++ tree int_ftype_v8qi
++ = build_function_type (integer_type_node,
++ tree_cons (NULL_TREE, V8QI_type_node,
++ endlink));
++ tree int_ftype_v4hi
++ = build_function_type (integer_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ endlink));
++ tree int_ftype_v2si
++ = build_function_type (integer_type_node,
++ tree_cons (NULL_TREE, V2SI_type_node,
++ endlink));
++ tree int_ftype_v8qi_int
++ = build_function_type (integer_type_node,
++ tree_cons (NULL_TREE, V8QI_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ endlink)));
++ tree int_ftype_v4hi_int
++ = build_function_type (integer_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ endlink)));
++ tree int_ftype_v2si_int
++ = build_function_type (integer_type_node,
++ tree_cons (NULL_TREE, V2SI_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ endlink)));
++ tree v8qi_ftype_v8qi_int_int
++ = build_function_type (V8QI_type_node,
++ tree_cons (NULL_TREE, V8QI_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ tree_cons (NULL_TREE,
++ integer_type_node,
++ endlink))));
++ tree v4hi_ftype_v4hi_int_int
++ = build_function_type (V4HI_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ tree_cons (NULL_TREE,
++ integer_type_node,
++ endlink))));
++ tree v2si_ftype_v2si_int_int
++ = build_function_type (V2SI_type_node,
++ tree_cons (NULL_TREE, V2SI_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ tree_cons (NULL_TREE,
++ integer_type_node,
++ endlink))));
++ /* Miscellaneous. */
++ tree v8qi_ftype_v4hi_v4hi
++ = build_function_type (V8QI_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ endlink)));
++ tree v4hi_ftype_v2si_v2si
++ = build_function_type (V4HI_type_node,
++ tree_cons (NULL_TREE, V2SI_type_node,
++ tree_cons (NULL_TREE, V2SI_type_node,
++ endlink)));
++ tree v2si_ftype_v4hi_v4hi
++ = build_function_type (V2SI_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ endlink)));
++ tree v2si_ftype_v8qi_v8qi
++ = build_function_type (V2SI_type_node,
++ tree_cons (NULL_TREE, V8QI_type_node,
++ tree_cons (NULL_TREE, V8QI_type_node,
++ endlink)));
++ tree v4hi_ftype_v4hi_di
++ = build_function_type (V4HI_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ tree_cons (NULL_TREE,
++ long_long_integer_type_node,
++ endlink)));
++ tree v2si_ftype_v2si_di
++ = build_function_type (V2SI_type_node,
++ tree_cons (NULL_TREE, V2SI_type_node,
++ tree_cons (NULL_TREE,
++ long_long_integer_type_node,
++ endlink)));
++ tree void_ftype_int_int
++ = build_function_type (void_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ endlink)));
++ tree di_ftype_void
++ = build_function_type (long_long_unsigned_type_node, endlink);
++ tree di_ftype_v8qi
++ = build_function_type (long_long_integer_type_node,
++ tree_cons (NULL_TREE, V8QI_type_node,
++ endlink));
++ tree di_ftype_v4hi
++ = build_function_type (long_long_integer_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ endlink));
++ tree di_ftype_v2si
++ = build_function_type (long_long_integer_type_node,
++ tree_cons (NULL_TREE, V2SI_type_node,
++ endlink));
++ tree v2si_ftype_v4hi
++ = build_function_type (V2SI_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ endlink));
++ tree v4hi_ftype_v8qi
++ = build_function_type (V4HI_type_node,
++ tree_cons (NULL_TREE, V8QI_type_node,
++ endlink));
+
+- case T_V2SF:
+- case T_V4SF:
+- eltype = float_pointer_node;
+- break;
++ tree di_ftype_di_v4hi_v4hi
++ = build_function_type (long_long_unsigned_type_node,
++ tree_cons (NULL_TREE,
++ long_long_unsigned_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ tree_cons (NULL_TREE,
++ V4HI_type_node,
++ endlink))));
+
+- case T_DI:
+- case T_V2DI:
+- eltype = intDI_pointer_node;
+- break;
++ tree di_ftype_v4hi_v4hi
++ = build_function_type (long_long_unsigned_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ endlink)));
++
++ /* Normal vector binops. */
++ tree v8qi_ftype_v8qi_v8qi
++ = build_function_type (V8QI_type_node,
++ tree_cons (NULL_TREE, V8QI_type_node,
++ tree_cons (NULL_TREE, V8QI_type_node,
++ endlink)));
++ tree v4hi_ftype_v4hi_v4hi
++ = build_function_type (V4HI_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ tree_cons (NULL_TREE, V4HI_type_node,
++ endlink)));
++ tree v2si_ftype_v2si_v2si
++ = build_function_type (V2SI_type_node,
++ tree_cons (NULL_TREE, V2SI_type_node,
++ tree_cons (NULL_TREE, V2SI_type_node,
++ endlink)));
++ tree di_ftype_di_di
++ = build_function_type (long_long_unsigned_type_node,
++ tree_cons (NULL_TREE, long_long_unsigned_type_node,
++ tree_cons (NULL_TREE,
++ long_long_unsigned_type_node,
++ endlink)));
++
++ /* Add all builtins that are more or less simple operations on two
++ operands. */
++ for (i = 0, d = bdesc_2arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++)
++ {
++ /* Use one of the operands; the target can have a different mode for
++ mask-generating compares. */
++ enum machine_mode mode;
++ tree type;
+
+- default: gcc_unreachable ();
+- }
+- }
+- else
+- {
+- switch (insn_data[icode].operand[k].mode)
+- {
+- case VOIDmode: eltype = void_type_node; break;
+- /* Scalars. */
+- case QImode: eltype = neon_intQI_type_node; break;
+- case HImode: eltype = neon_intHI_type_node; break;
+- case SImode: eltype = neon_intSI_type_node; break;
+- case SFmode: eltype = neon_float_type_node; break;
+- case DImode: eltype = neon_intDI_type_node; break;
+- case TImode: eltype = intTI_type_node; break;
+- case EImode: eltype = intEI_type_node; break;
+- case OImode: eltype = intOI_type_node; break;
+- case CImode: eltype = intCI_type_node; break;
+- case XImode: eltype = intXI_type_node; break;
+- /* 64-bit vectors. */
+- case V8QImode: eltype = V8QI_type_node; break;
+- case V4HImode: eltype = V4HI_type_node; break;
+- case V2SImode: eltype = V2SI_type_node; break;
+- case V2SFmode: eltype = V2SF_type_node; break;
+- /* 128-bit vectors. */
+- case V16QImode: eltype = V16QI_type_node; break;
+- case V8HImode: eltype = V8HI_type_node; break;
+- case V4SImode: eltype = V4SI_type_node; break;
+- case V4SFmode: eltype = V4SF_type_node; break;
+- case V2DImode: eltype = V2DI_type_node; break;
+- default: gcc_unreachable ();
+- }
+- }
++ if (d->name == 0)
++ continue;
+
+- if (k == 0 && !is_store)
+- return_type = eltype;
+- else
+- args = tree_cons (NULL_TREE, eltype, args);
+- }
++ mode = insn_data[d->icode].operand[1].mode;
+
+- ftype = build_function_type (return_type, args);
+- }
+- break;
++ switch (mode)
++ {
++ case V8QImode:
++ type = v8qi_ftype_v8qi_v8qi;
++ break;
++ case V4HImode:
++ type = v4hi_ftype_v4hi_v4hi;
++ break;
++ case V2SImode:
++ type = v2si_ftype_v2si_v2si;
++ break;
++ case DImode:
++ type = di_ftype_di_di;
++ break;
+
+- case NEON_RESULTPAIR:
+- {
+- switch (insn_data[icode].operand[1].mode)
+- {
+- case V8QImode: ftype = void_ftype_pv8qi_v8qi_v8qi; break;
+- case V4HImode: ftype = void_ftype_pv4hi_v4hi_v4hi; break;
+- case V2SImode: ftype = void_ftype_pv2si_v2si_v2si; break;
+- case V2SFmode: ftype = void_ftype_pv2sf_v2sf_v2sf; break;
+- case DImode: ftype = void_ftype_pdi_di_di; break;
+- case V16QImode: ftype = void_ftype_pv16qi_v16qi_v16qi; break;
+- case V8HImode: ftype = void_ftype_pv8hi_v8hi_v8hi; break;
+- case V4SImode: ftype = void_ftype_pv4si_v4si_v4si; break;
+- case V4SFmode: ftype = void_ftype_pv4sf_v4sf_v4sf; break;
+- case V2DImode: ftype = void_ftype_pv2di_v2di_v2di; break;
+- default: gcc_unreachable ();
+- }
+- }
+- break;
++ default:
++ gcc_unreachable ();
++ }
+
+- case NEON_REINTERP:
+- {
+- /* We iterate over 5 doubleword types, then 5 quadword
+- types. */
+- int rhs = j % 5;
+- switch (insn_data[icode].operand[0].mode)
+- {
+- case V8QImode: ftype = reinterp_ftype_dreg[0][rhs]; break;
+- case V4HImode: ftype = reinterp_ftype_dreg[1][rhs]; break;
+- case V2SImode: ftype = reinterp_ftype_dreg[2][rhs]; break;
+- case V2SFmode: ftype = reinterp_ftype_dreg[3][rhs]; break;
+- case DImode: ftype = reinterp_ftype_dreg[4][rhs]; break;
+- case V16QImode: ftype = reinterp_ftype_qreg[0][rhs]; break;
+- case V8HImode: ftype = reinterp_ftype_qreg[1][rhs]; break;
+- case V4SImode: ftype = reinterp_ftype_qreg[2][rhs]; break;
+- case V4SFmode: ftype = reinterp_ftype_qreg[3][rhs]; break;
+- case V2DImode: ftype = reinterp_ftype_qreg[4][rhs]; break;
+- default: gcc_unreachable ();
+- }
+- }
+- break;
++ def_mbuiltin (d->mask, d->name, type, d->code);
++ }
+
+- default:
+- gcc_unreachable ();
+- }
++ /* Add the remaining MMX insns with somewhat more complicated types. */
++#define iwmmx_mbuiltin(NAME, TYPE, CODE) \
++ def_mbuiltin (FL_IWMMXT, "__builtin_arm_" NAME, (TYPE), \
++ ARM_BUILTIN_ ## CODE)
++
++ iwmmx_mbuiltin ("wzero", di_ftype_void, WZERO);
++ iwmmx_mbuiltin ("setwcx", void_ftype_int_int, SETWCX);
++ iwmmx_mbuiltin ("getwcx", int_ftype_int, GETWCX);
++
++ iwmmx_mbuiltin ("wsllh", v4hi_ftype_v4hi_di, WSLLH);
++ iwmmx_mbuiltin ("wsllw", v2si_ftype_v2si_di, WSLLW);
++ iwmmx_mbuiltin ("wslld", di_ftype_di_di, WSLLD);
++ iwmmx_mbuiltin ("wsllhi", v4hi_ftype_v4hi_int, WSLLHI);
++ iwmmx_mbuiltin ("wsllwi", v2si_ftype_v2si_int, WSLLWI);
++ iwmmx_mbuiltin ("wslldi", di_ftype_di_int, WSLLDI);
++
++ iwmmx_mbuiltin ("wsrlh", v4hi_ftype_v4hi_di, WSRLH);
++ iwmmx_mbuiltin ("wsrlw", v2si_ftype_v2si_di, WSRLW);
++ iwmmx_mbuiltin ("wsrld", di_ftype_di_di, WSRLD);
++ iwmmx_mbuiltin ("wsrlhi", v4hi_ftype_v4hi_int, WSRLHI);
++ iwmmx_mbuiltin ("wsrlwi", v2si_ftype_v2si_int, WSRLWI);
++ iwmmx_mbuiltin ("wsrldi", di_ftype_di_int, WSRLDI);
++
++ iwmmx_mbuiltin ("wsrah", v4hi_ftype_v4hi_di, WSRAH);
++ iwmmx_mbuiltin ("wsraw", v2si_ftype_v2si_di, WSRAW);
++ iwmmx_mbuiltin ("wsrad", di_ftype_di_di, WSRAD);
++ iwmmx_mbuiltin ("wsrahi", v4hi_ftype_v4hi_int, WSRAHI);
++ iwmmx_mbuiltin ("wsrawi", v2si_ftype_v2si_int, WSRAWI);
++ iwmmx_mbuiltin ("wsradi", di_ftype_di_int, WSRADI);
++
++ iwmmx_mbuiltin ("wrorh", v4hi_ftype_v4hi_di, WRORH);
++ iwmmx_mbuiltin ("wrorw", v2si_ftype_v2si_di, WRORW);
++ iwmmx_mbuiltin ("wrord", di_ftype_di_di, WRORD);
++ iwmmx_mbuiltin ("wrorhi", v4hi_ftype_v4hi_int, WRORHI);
++ iwmmx_mbuiltin ("wrorwi", v2si_ftype_v2si_int, WRORWI);
++ iwmmx_mbuiltin ("wrordi", di_ftype_di_int, WRORDI);
++
++ iwmmx_mbuiltin ("wshufh", v4hi_ftype_v4hi_int, WSHUFH);
++
++ iwmmx_mbuiltin ("wsadb", v2si_ftype_v8qi_v8qi, WSADB);
++ iwmmx_mbuiltin ("wsadh", v2si_ftype_v4hi_v4hi, WSADH);
++ iwmmx_mbuiltin ("wsadbz", v2si_ftype_v8qi_v8qi, WSADBZ);
++ iwmmx_mbuiltin ("wsadhz", v2si_ftype_v4hi_v4hi, WSADHZ);
++
++ iwmmx_mbuiltin ("textrmsb", int_ftype_v8qi_int, TEXTRMSB);
++ iwmmx_mbuiltin ("textrmsh", int_ftype_v4hi_int, TEXTRMSH);
++ iwmmx_mbuiltin ("textrmsw", int_ftype_v2si_int, TEXTRMSW);
++ iwmmx_mbuiltin ("textrmub", int_ftype_v8qi_int, TEXTRMUB);
++ iwmmx_mbuiltin ("textrmuh", int_ftype_v4hi_int, TEXTRMUH);
++ iwmmx_mbuiltin ("textrmuw", int_ftype_v2si_int, TEXTRMUW);
++ iwmmx_mbuiltin ("tinsrb", v8qi_ftype_v8qi_int_int, TINSRB);
++ iwmmx_mbuiltin ("tinsrh", v4hi_ftype_v4hi_int_int, TINSRH);
++ iwmmx_mbuiltin ("tinsrw", v2si_ftype_v2si_int_int, TINSRW);
++
++ iwmmx_mbuiltin ("waccb", di_ftype_v8qi, WACCB);
++ iwmmx_mbuiltin ("wacch", di_ftype_v4hi, WACCH);
++ iwmmx_mbuiltin ("waccw", di_ftype_v2si, WACCW);
++
++ iwmmx_mbuiltin ("tmovmskb", int_ftype_v8qi, TMOVMSKB);
++ iwmmx_mbuiltin ("tmovmskh", int_ftype_v4hi, TMOVMSKH);
++ iwmmx_mbuiltin ("tmovmskw", int_ftype_v2si, TMOVMSKW);
++
++ iwmmx_mbuiltin ("wpackhss", v8qi_ftype_v4hi_v4hi, WPACKHSS);
++ iwmmx_mbuiltin ("wpackhus", v8qi_ftype_v4hi_v4hi, WPACKHUS);
++ iwmmx_mbuiltin ("wpackwus", v4hi_ftype_v2si_v2si, WPACKWUS);
++ iwmmx_mbuiltin ("wpackwss", v4hi_ftype_v2si_v2si, WPACKWSS);
++ iwmmx_mbuiltin ("wpackdus", v2si_ftype_di_di, WPACKDUS);
++ iwmmx_mbuiltin ("wpackdss", v2si_ftype_di_di, WPACKDSS);
++
++ iwmmx_mbuiltin ("wunpckehub", v4hi_ftype_v8qi, WUNPCKEHUB);
++ iwmmx_mbuiltin ("wunpckehuh", v2si_ftype_v4hi, WUNPCKEHUH);
++ iwmmx_mbuiltin ("wunpckehuw", di_ftype_v2si, WUNPCKEHUW);
++ iwmmx_mbuiltin ("wunpckehsb", v4hi_ftype_v8qi, WUNPCKEHSB);
++ iwmmx_mbuiltin ("wunpckehsh", v2si_ftype_v4hi, WUNPCKEHSH);
++ iwmmx_mbuiltin ("wunpckehsw", di_ftype_v2si, WUNPCKEHSW);
++ iwmmx_mbuiltin ("wunpckelub", v4hi_ftype_v8qi, WUNPCKELUB);
++ iwmmx_mbuiltin ("wunpckeluh", v2si_ftype_v4hi, WUNPCKELUH);
++ iwmmx_mbuiltin ("wunpckeluw", di_ftype_v2si, WUNPCKELUW);
++ iwmmx_mbuiltin ("wunpckelsb", v4hi_ftype_v8qi, WUNPCKELSB);
++ iwmmx_mbuiltin ("wunpckelsh", v2si_ftype_v4hi, WUNPCKELSH);
++ iwmmx_mbuiltin ("wunpckelsw", di_ftype_v2si, WUNPCKELSW);
++
++ iwmmx_mbuiltin ("wmacs", di_ftype_di_v4hi_v4hi, WMACS);
++ iwmmx_mbuiltin ("wmacsz", di_ftype_v4hi_v4hi, WMACSZ);
++ iwmmx_mbuiltin ("wmacu", di_ftype_di_v4hi_v4hi, WMACU);
++ iwmmx_mbuiltin ("wmacuz", di_ftype_v4hi_v4hi, WMACUZ);
++
++ iwmmx_mbuiltin ("walign", v8qi_ftype_v8qi_v8qi_int, WALIGN);
++ iwmmx_mbuiltin ("tmia", di_ftype_di_int_int, TMIA);
++ iwmmx_mbuiltin ("tmiaph", di_ftype_di_int_int, TMIAPH);
++ iwmmx_mbuiltin ("tmiabb", di_ftype_di_int_int, TMIABB);
++ iwmmx_mbuiltin ("tmiabt", di_ftype_di_int_int, TMIABT);
++ iwmmx_mbuiltin ("tmiatb", di_ftype_di_int_int, TMIATB);
++ iwmmx_mbuiltin ("tmiatt", di_ftype_di_int_int, TMIATT);
+
+- gcc_assert (ftype != NULL);
++#undef iwmmx_mbuiltin
++}
+
+- sprintf (namebuf, "__builtin_neon_%s%s", d->name, modenames[j]);
++static void
++arm_init_tls_builtins (void)
++{
++ tree ftype, decl;
+
+- add_builtin_function (namebuf, ftype, fcode++, BUILT_IN_MD, NULL,
+- NULL_TREE);
+- }
+- }
++ ftype = build_function_type (ptr_type_node, void_list_node);
++ decl = add_builtin_function ("__builtin_thread_pointer", ftype,
++ ARM_BUILTIN_THREAD_POINTER, BUILT_IN_MD,
++ NULL, NULL_TREE);
++ TREE_NOTHROW (decl) = 1;
++ TREE_READONLY (decl) = 1;
++ arm_builtin_decls[ARM_BUILTIN_THREAD_POINTER] = decl;
+ }
+
+ static void
+@@ -19115,6 +20142,17 @@
+ arm_init_fp16_builtins ();
+ }
+
++/* Return the ARM builtin for CODE. */
++
++static tree
++arm_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED)
++{
++ if (code >= ARM_BUILTIN_MAX)
++ return error_mark_node;
++
++ return arm_builtin_decls[code];
++}
++
+ /* Implement TARGET_INVALID_PARAMETER_TYPE. */
+
+ static const char *
+@@ -19266,55 +20304,68 @@
+ return target;
+ }
+
+-static int
+-neon_builtin_compare (const void *a, const void *b)
+-{
+- const neon_builtin_datum *const key = (const neon_builtin_datum *) a;
+- const neon_builtin_datum *const memb = (const neon_builtin_datum *) b;
+- unsigned int soughtcode = key->base_fcode;
+-
+- if (soughtcode >= memb->base_fcode
+- && soughtcode < memb->base_fcode + memb->num_vars)
+- return 0;
+- else if (soughtcode < memb->base_fcode)
+- return -1;
+- else
+- return 1;
+-}
+-
+-static enum insn_code
+-locate_neon_builtin_icode (int fcode, neon_itype *itype)
+-{
+- neon_builtin_datum key
+- = { NULL, (neon_itype) 0, 0, { CODE_FOR_nothing }, 0, 0 };
+- neon_builtin_datum *found;
+- int idx;
+-
+- key.base_fcode = fcode;
+- found = (neon_builtin_datum *)
+- bsearch (&key, &neon_builtin_data[0], ARRAY_SIZE (neon_builtin_data),
+- sizeof (neon_builtin_data[0]), neon_builtin_compare);
+- gcc_assert (found);
+- idx = fcode - (int) found->base_fcode;
+- gcc_assert (idx >= 0 && idx < T_MAX && idx < (int)found->num_vars);
+-
+- if (itype)
+- *itype = found->itype;
+-
+- return found->codes[idx];
+-}
+-
+ typedef enum {
+ NEON_ARG_COPY_TO_REG,
+ NEON_ARG_CONSTANT,
++ NEON_ARG_MEMORY,
+ NEON_ARG_STOP
+ } builtin_arg;
+
+ #define NEON_MAX_BUILTIN_ARGS 5
+
++/* EXP is a pointer argument to a Neon load or store intrinsic. Derive
++ and return an expression for the accessed memory.
++
++ The intrinsic function operates on a block of registers that has
++ mode REG_MODE. This block contains vectors of type TYPE_MODE.
++ The function references the memory at EXP in mode MEM_MODE;
++ this mode may be BLKmode if no more suitable mode is available. */
++
++static tree
++neon_dereference_pointer (tree exp, enum machine_mode mem_mode,
++ enum machine_mode reg_mode,
++ neon_builtin_type_mode type_mode)
++{
++ HOST_WIDE_INT reg_size, vector_size, nvectors, nelems;
++ tree elem_type, upper_bound, array_type;
++
++ /* Work out the size of the register block in bytes. */
++ reg_size = GET_MODE_SIZE (reg_mode);
++
++ /* Work out the size of each vector in bytes. */
++ gcc_assert (TYPE_MODE_BIT (type_mode) & (TB_DREG | TB_QREG));
++ vector_size = (TYPE_MODE_BIT (type_mode) & TB_QREG ? 16 : 8);
++
++ /* Work out how many vectors there are. */
++ gcc_assert (reg_size % vector_size == 0);
++ nvectors = reg_size / vector_size;
++
++ /* Work out how many elements are being loaded or stored.
++ MEM_MODE == REG_MODE implies a one-to-one mapping between register
++ and memory elements; anything else implies a lane load or store. */
++ if (mem_mode == reg_mode)
++ nelems = vector_size * nvectors;
++ else
++ nelems = nvectors;
++
++ /* Work out the type of each element. */
++ gcc_assert (POINTER_TYPE_P (TREE_TYPE (exp)));
++ elem_type = TREE_TYPE (TREE_TYPE (exp));
++
++ /* Create a type that describes the full access. */
++ upper_bound = build_int_cst (size_type_node, nelems - 1);
++ array_type = build_array_type (elem_type, build_index_type (upper_bound));
++
++ /* Dereference EXP using that type. */
++ exp = convert (build_pointer_type (array_type), exp);
++ return fold_build2 (MEM_REF, array_type, exp,
++ build_int_cst (TREE_TYPE (exp), 0));
++}
++
+ /* Expand a Neon builtin. */
+ static rtx
+ arm_expand_neon_args (rtx target, int icode, int have_retval,
++ neon_builtin_type_mode type_mode,
+ tree exp, ...)
+ {
+ va_list ap;
+@@ -19323,7 +20374,9 @@
+ rtx op[NEON_MAX_BUILTIN_ARGS];
+ enum machine_mode tmode = insn_data[icode].operand[0].mode;
+ enum machine_mode mode[NEON_MAX_BUILTIN_ARGS];
++ enum machine_mode other_mode;
+ int argc = 0;
++ int opno;
+
+ if (have_retval
+ && (!target
+@@ -19341,26 +20394,46 @@
+ break;
+ else
+ {
++ opno = argc + have_retval;
++ mode[argc] = insn_data[icode].operand[opno].mode;
+ arg[argc] = CALL_EXPR_ARG (exp, argc);
++ if (thisarg == NEON_ARG_MEMORY)
++ {
++ other_mode = insn_data[icode].operand[1 - opno].mode;
++ arg[argc] = neon_dereference_pointer (arg[argc], mode[argc],
++ other_mode, type_mode);
++ }
+ op[argc] = expand_normal (arg[argc]);
+- mode[argc] = insn_data[icode].operand[argc + have_retval].mode;
+
+ switch (thisarg)
+ {
+ case NEON_ARG_COPY_TO_REG:
+ /*gcc_assert (GET_MODE (op[argc]) == mode[argc]);*/
+- if (!(*insn_data[icode].operand[argc + have_retval].predicate)
++ if (!(*insn_data[icode].operand[opno].predicate)
+ (op[argc], mode[argc]))
+ op[argc] = copy_to_mode_reg (mode[argc], op[argc]);
+ break;
+
+ case NEON_ARG_CONSTANT:
+ /* FIXME: This error message is somewhat unhelpful. */
+- if (!(*insn_data[icode].operand[argc + have_retval].predicate)
++ if (!(*insn_data[icode].operand[opno].predicate)
+ (op[argc], mode[argc]))
+ error ("argument must be a constant");
+ break;
+
++ case NEON_ARG_MEMORY:
++ gcc_assert (MEM_P (op[argc]));
++ PUT_MODE (op[argc], mode[argc]);
++ /* ??? arm_neon.h uses the same built-in functions for signed
++ and unsigned accesses, casting where necessary. This isn't
++ alias safe. */
++ set_mem_alias_set (op[argc], 0);
++ if (!(*insn_data[icode].operand[opno].predicate)
++ (op[argc], mode[argc]))
++ op[argc] = (replace_equiv_address
++ (op[argc], force_reg (Pmode, XEXP (op[argc], 0))));
++ break;
++
+ case NEON_ARG_STOP:
+ gcc_unreachable ();
+ }
+@@ -19438,15 +20511,17 @@
+ static rtx
+ arm_expand_neon_builtin (int fcode, tree exp, rtx target)
+ {
+- neon_itype itype;
+- enum insn_code icode = locate_neon_builtin_icode (fcode, &itype);
++ neon_builtin_datum *d = &neon_builtin_data[fcode - ARM_BUILTIN_NEON_BASE];
++ neon_itype itype = d->itype;
++ enum insn_code icode = d->code;
++ neon_builtin_type_mode type_mode = d->mode;
+
+ switch (itype)
+ {
+ case NEON_UNOP:
+ case NEON_CONVERT:
+ case NEON_DUPLANE:
+- return arm_expand_neon_args (target, icode, 1, exp,
++ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
+ NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT, NEON_ARG_STOP);
+
+ case NEON_BINOP:
+@@ -19456,90 +20531,90 @@
+ case NEON_SCALARMULH:
+ case NEON_SHIFTINSERT:
+ case NEON_LOGICBINOP:
+- return arm_expand_neon_args (target, icode, 1, exp,
++ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
+ NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
+ NEON_ARG_STOP);
+
+ case NEON_TERNOP:
+- return arm_expand_neon_args (target, icode, 1, exp,
++ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
+ NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
+ NEON_ARG_CONSTANT, NEON_ARG_STOP);
+
+ case NEON_GETLANE:
+ case NEON_FIXCONV:
+ case NEON_SHIFTIMM:
+- return arm_expand_neon_args (target, icode, 1, exp,
++ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
+ NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT, NEON_ARG_CONSTANT,
+ NEON_ARG_STOP);
+
+ case NEON_CREATE:
+- return arm_expand_neon_args (target, icode, 1, exp,
++ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
+ NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
+
+ case NEON_DUP:
+ case NEON_SPLIT:
+ case NEON_REINTERP:
+- return arm_expand_neon_args (target, icode, 1, exp,
++ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
+ NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
+
+ case NEON_COMBINE:
+ case NEON_VTBL:
+- return arm_expand_neon_args (target, icode, 1, exp,
++ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
+ NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
+
+ case NEON_RESULTPAIR:
+- return arm_expand_neon_args (target, icode, 0, exp,
++ return arm_expand_neon_args (target, icode, 0, type_mode, exp,
+ NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
+ NEON_ARG_STOP);
+
+ case NEON_LANEMUL:
+ case NEON_LANEMULL:
+ case NEON_LANEMULH:
+- return arm_expand_neon_args (target, icode, 1, exp,
++ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
+ NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
+ NEON_ARG_CONSTANT, NEON_ARG_STOP);
+
+ case NEON_LANEMAC:
+- return arm_expand_neon_args (target, icode, 1, exp,
++ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
+ NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
+ NEON_ARG_CONSTANT, NEON_ARG_CONSTANT, NEON_ARG_STOP);
+
+ case NEON_SHIFTACC:
+- return arm_expand_neon_args (target, icode, 1, exp,
++ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
+ NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
+ NEON_ARG_CONSTANT, NEON_ARG_STOP);
+
+ case NEON_SCALARMAC:
+- return arm_expand_neon_args (target, icode, 1, exp,
++ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
+ NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
+ NEON_ARG_CONSTANT, NEON_ARG_STOP);
+
+ case NEON_SELECT:
+ case NEON_VTBX:
+- return arm_expand_neon_args (target, icode, 1, exp,
++ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
+ NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
+ NEON_ARG_STOP);
+
+ case NEON_LOAD1:
+ case NEON_LOADSTRUCT:
+- return arm_expand_neon_args (target, icode, 1, exp,
+- NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
++ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
++ NEON_ARG_MEMORY, NEON_ARG_STOP);
+
+ case NEON_LOAD1LANE:
+ case NEON_LOADSTRUCTLANE:
+- return arm_expand_neon_args (target, icode, 1, exp,
+- NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
++ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
++ NEON_ARG_MEMORY, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
+ NEON_ARG_STOP);
+
+ case NEON_STORE1:
+ case NEON_STORESTRUCT:
+- return arm_expand_neon_args (target, icode, 0, exp,
+- NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
++ return arm_expand_neon_args (target, icode, 0, type_mode, exp,
++ NEON_ARG_MEMORY, NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
+
+ case NEON_STORE1LANE:
+ case NEON_STORESTRUCTLANE:
+- return arm_expand_neon_args (target, icode, 0, exp,
+- NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
++ return arm_expand_neon_args (target, icode, 0, type_mode, exp,
++ NEON_ARG_MEMORY, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
+ NEON_ARG_STOP);
+ }
+
+@@ -19571,39 +20646,34 @@
+ emit_move_insn (mem, tmp2);
+ }
+
+-/* Set up operands for a register copy from src to dest, taking care not to
+- clobber registers in the process.
+- FIXME: This has rather high polynomial complexity (O(n^3)?) but shouldn't
+- be called with a large N, so that should be OK. */
++/* Set up OPERANDS for a register copy from SRC to DEST, taking care
++ not to early-clobber SRC registers in the process.
+
++ We assume that the operands described by SRC and DEST represent a
++ decomposed copy of OPERANDS[1] into OPERANDS[0]. COUNT is the
++ number of components into which the copy has been decomposed. */
+ void
+ neon_disambiguate_copy (rtx *operands, rtx *dest, rtx *src, unsigned int count)
+ {
+- unsigned int copied = 0, opctr = 0;
+- unsigned int done = (1 << count) - 1;
+- unsigned int i, j;
++ unsigned int i;
+
+- while (copied != done)
++ if (!reg_overlap_mentioned_p (operands[0], operands[1])
++ || REGNO (operands[0]) < REGNO (operands[1]))
+ {
+ for (i = 0; i < count; i++)
+- {
+- int good = 1;
+-
+- for (j = 0; good && j < count; j++)
+- if (i != j && (copied & (1 << j)) == 0
+- && reg_overlap_mentioned_p (src[j], dest[i]))
+- good = 0;
+-
+- if (good)
+- {
+- operands[opctr++] = dest[i];
+- operands[opctr++] = src[i];
+- copied |= 1 << i;
+- }
+- }
++ {
++ operands[2 * i] = dest[i];
++ operands[2 * i + 1] = src[i];
++ }
++ }
++ else
++ {
++ for (i = 0; i < count; i++)
++ {
++ operands[2 * i] = dest[count - i - 1];
++ operands[2 * i + 1] = src[count - i - 1];
++ }
+ }
+-
+- gcc_assert (opctr == count * 2);
+ }
+
+ /* Expand an expression EXP that calls a built-in function,
+@@ -21455,6 +22525,8 @@
+ const char *fpu_name;
+ if (arm_selected_arch)
+ asm_fprintf (asm_out_file, "\t.arch %s\n", arm_selected_arch->name);
++ else if (strncmp (arm_selected_cpu->name, "generic", 7) == 0)
++ asm_fprintf (asm_out_file, "\t.arch %s\n", arm_selected_cpu->name + 8);
+ else
+ asm_fprintf (asm_out_file, "\t.cpu %s\n", arm_selected_cpu->name);
+
+@@ -21518,6 +22590,10 @@
+ val = 6;
+ asm_fprintf (asm_out_file, "\t.eabi_attribute 30, %d\n", val);
+
++ /* Tag_CPU_unaligned_access. */
++ asm_fprintf (asm_out_file, "\t.eabi_attribute 34, %d\n",
++ unaligned_access);
++
+ /* Tag_ABI_FP_16bit_format. */
+ if (arm_fp16_format)
+ asm_fprintf (asm_out_file, "\t.eabi_attribute 38, %d\n",
+@@ -22261,7 +23337,21 @@
+ return false;
+ }
+
+-/* Use the option -mvectorize-with-neon-quad to override the use of doubleword
++/* Implements target hook array_mode_supported_p. */
++
++static bool
++arm_array_mode_supported_p (enum machine_mode mode,
++ unsigned HOST_WIDE_INT nelems)
++{
++ if (TARGET_NEON
++ && (VALID_NEON_DREG_MODE (mode) || VALID_NEON_QREG_MODE (mode))
++ && (nelems >= 2 && nelems <= 4))
++ return true;
++
++ return false;
++}
++
++/* Use the option -mvectorize-with-neon-double to override the use of quardword
+ registers when autovectorizing for Neon, at least until multiple vector
+ widths are supported properly by the middle-end. */
+
+@@ -22272,15 +23362,15 @@
+ switch (mode)
+ {
+ case SFmode:
+- return TARGET_NEON_VECTORIZE_QUAD ? V4SFmode : V2SFmode;
++ return TARGET_NEON_VECTORIZE_DOUBLE ? V2SFmode : V4SFmode;
+ case SImode:
+- return TARGET_NEON_VECTORIZE_QUAD ? V4SImode : V2SImode;
++ return TARGET_NEON_VECTORIZE_DOUBLE ? V2SImode : V4SImode;
+ case HImode:
+- return TARGET_NEON_VECTORIZE_QUAD ? V8HImode : V4HImode;
++ return TARGET_NEON_VECTORIZE_DOUBLE ? V4HImode : V8HImode;
+ case QImode:
+- return TARGET_NEON_VECTORIZE_QUAD ? V16QImode : V8QImode;
++ return TARGET_NEON_VECTORIZE_DOUBLE ? V8QImode : V16QImode;
+ case DImode:
+- if (TARGET_NEON_VECTORIZE_QUAD)
++ if (!TARGET_NEON_VECTORIZE_DOUBLE)
+ return V2DImode;
+ break;
+
+@@ -22305,14 +23395,16 @@
+
+ /* Implement TARGET_CLASS_LIKELY_SPILLED_P.
+
+- We need to define this for LO_REGS on thumb. Otherwise we can end up
+- using r0-r4 for function arguments, r7 for the stack frame and don't
+- have enough left over to do doubleword arithmetic. */
+-
++ We need to define this for LO_REGS on Thumb-1. Otherwise we can end up
++ using r0-r4 for function arguments, r7 for the stack frame and don't have
++ enough left over to do doubleword arithmetic. For Thumb-2 all the
++ potentially problematic instructions accept high registers so this is not
++ necessary. Care needs to be taken to avoid adding new Thumb-2 patterns
++ that require many low registers. */
+ static bool
+ arm_class_likely_spilled_p (reg_class_t rclass)
+ {
+- if ((TARGET_THUMB && rclass == LO_REGS)
++ if ((TARGET_THUMB1 && rclass == LO_REGS)
+ || rclass == CC_REG)
+ return true;
+
+@@ -22964,8 +24056,13 @@
+ {
+ switch (arm_tune)
+ {
++ case cortexa15:
++ return 3;
++
+ case cortexr4:
+ case cortexr4f:
++ case cortexr5:
++ case genericv7a:
+ case cortexa5:
+ case cortexa8:
+ case cortexa9:
+@@ -23218,12 +24315,26 @@
+ rtx target,
+ rtx memory)
+ {
+- const char *suffix = arm_ldrex_suffix (mode);
+- rtx operands[2];
++ rtx operands[3];
+
+ operands[0] = target;
+- operands[1] = memory;
+- arm_output_asm_insn (emit, 0, operands, "ldrex%s\t%%0, %%C1", suffix);
++ if (mode != DImode)
++ {
++ const char *suffix = arm_ldrex_suffix (mode);
++ operands[1] = memory;
++ arm_output_asm_insn (emit, 0, operands, "ldrex%s\t%%0, %%C1", suffix);
++ }
++ else
++ {
++ /* The restrictions on target registers in ARM mode are that the two
++ registers are consecutive and the first one is even; Thumb is
++ actually more flexible, but DI should give us this anyway.
++ Note that the 1st register always gets the lowest word in memory. */
++ gcc_assert ((REGNO (target) & 1) == 0);
++ operands[1] = gen_rtx_REG (SImode, REGNO (target) + 1);
++ operands[2] = memory;
++ arm_output_asm_insn (emit, 0, operands, "ldrexd\t%%0, %%1, %%C2");
++ }
+ }
+
+ /* Emit a strex{b,h,d, } instruction appropriate for the specified
+@@ -23236,14 +24347,41 @@
+ rtx value,
+ rtx memory)
+ {
+- const char *suffix = arm_ldrex_suffix (mode);
+- rtx operands[3];
++ rtx operands[4];
+
+ operands[0] = result;
+ operands[1] = value;
+- operands[2] = memory;
+- arm_output_asm_insn (emit, 0, operands, "strex%s%s\t%%0, %%1, %%C2", suffix,
+- cc);
++ if (mode != DImode)
++ {
++ const char *suffix = arm_ldrex_suffix (mode);
++ operands[2] = memory;
++ arm_output_asm_insn (emit, 0, operands, "strex%s%s\t%%0, %%1, %%C2",
++ suffix, cc);
++ }
++ else
++ {
++ /* The restrictions on target registers in ARM mode are that the two
++ registers are consecutive and the first one is even; Thumb is
++ actually more flexible, but DI should give us this anyway.
++ Note that the 1st register always gets the lowest word in memory. */
++ gcc_assert ((REGNO (value) & 1) == 0 || TARGET_THUMB2);
++ operands[2] = gen_rtx_REG (SImode, REGNO (value) + 1);
++ operands[3] = memory;
++ arm_output_asm_insn (emit, 0, operands, "strexd%s\t%%0, %%1, %%2, %%C3",
++ cc);
++ }
++}
++
++/* Helper to emit an it instruction in Thumb2 mode only; although the assembler
++ will ignore it in ARM mode, emitting it will mess up instruction counts we
++ sometimes keep 'flags' are the extra t's and e's if it's more than one
++ instruction that is conditional. */
++static void
++arm_output_it (emit_f emit, const char *flags, const char *cond)
++{
++ rtx operands[1]; /* Don't actually use the operand. */
++ if (TARGET_THUMB2)
++ arm_output_asm_insn (emit, 0, operands, "it%s\t%s", flags, cond);
+ }
+
+ /* Helper to emit a two operand instruction. */
+@@ -23285,7 +24423,7 @@
+
+ required_value:
+
+- RTX register or const_int representing the required old_value for
++ RTX register representing the required old_value for
+ the modify to continue, if NULL no comparsion is performed. */
+ static void
+ arm_output_sync_loop (emit_f emit,
+@@ -23299,7 +24437,13 @@
+ enum attr_sync_op sync_op,
+ int early_barrier_required)
+ {
+- rtx operands[1];
++ rtx operands[2];
++ /* We'll use the lo for the normal rtx in the none-DI case
++ as well as the least-sig word in the DI case. */
++ rtx old_value_lo, required_value_lo, new_value_lo, t1_lo;
++ rtx old_value_hi, required_value_hi, new_value_hi, t1_hi;
++
++ bool is_di = mode == DImode;
+
+ gcc_assert (t1 != t2);
+
+@@ -23310,82 +24454,142 @@
+
+ arm_output_ldrex (emit, mode, old_value, memory);
+
++ if (is_di)
++ {
++ old_value_lo = gen_lowpart (SImode, old_value);
++ old_value_hi = gen_highpart (SImode, old_value);
++ if (required_value)
++ {
++ required_value_lo = gen_lowpart (SImode, required_value);
++ required_value_hi = gen_highpart (SImode, required_value);
++ }
++ else
++ {
++ /* Silence false potentially unused warning. */
++ required_value_lo = NULL_RTX;
++ required_value_hi = NULL_RTX;
++ }
++ new_value_lo = gen_lowpart (SImode, new_value);
++ new_value_hi = gen_highpart (SImode, new_value);
++ t1_lo = gen_lowpart (SImode, t1);
++ t1_hi = gen_highpart (SImode, t1);
++ }
++ else
++ {
++ old_value_lo = old_value;
++ new_value_lo = new_value;
++ required_value_lo = required_value;
++ t1_lo = t1;
++
++ /* Silence false potentially unused warning. */
++ t1_hi = NULL_RTX;
++ new_value_hi = NULL_RTX;
++ required_value_hi = NULL_RTX;
++ old_value_hi = NULL_RTX;
++ }
++
+ if (required_value)
+ {
+- rtx operands[2];
++ operands[0] = old_value_lo;
++ operands[1] = required_value_lo;
+
+- operands[0] = old_value;
+- operands[1] = required_value;
+ arm_output_asm_insn (emit, 0, operands, "cmp\t%%0, %%1");
++ if (is_di)
++ {
++ arm_output_it (emit, "", "eq");
++ arm_output_op2 (emit, "cmpeq", old_value_hi, required_value_hi);
++ }
+ arm_output_asm_insn (emit, 0, operands, "bne\t%sLSYB%%=", LOCAL_LABEL_PREFIX);
+ }
+
+ switch (sync_op)
+ {
+ case SYNC_OP_ADD:
+- arm_output_op3 (emit, "add", t1, old_value, new_value);
++ arm_output_op3 (emit, is_di ? "adds" : "add",
++ t1_lo, old_value_lo, new_value_lo);
++ if (is_di)
++ arm_output_op3 (emit, "adc", t1_hi, old_value_hi, new_value_hi);
+ break;
+
+ case SYNC_OP_SUB:
+- arm_output_op3 (emit, "sub", t1, old_value, new_value);
++ arm_output_op3 (emit, is_di ? "subs" : "sub",
++ t1_lo, old_value_lo, new_value_lo);
++ if (is_di)
++ arm_output_op3 (emit, "sbc", t1_hi, old_value_hi, new_value_hi);
+ break;
+
+ case SYNC_OP_IOR:
+- arm_output_op3 (emit, "orr", t1, old_value, new_value);
++ arm_output_op3 (emit, "orr", t1_lo, old_value_lo, new_value_lo);
++ if (is_di)
++ arm_output_op3 (emit, "orr", t1_hi, old_value_hi, new_value_hi);
+ break;
+
+ case SYNC_OP_XOR:
+- arm_output_op3 (emit, "eor", t1, old_value, new_value);
++ arm_output_op3 (emit, "eor", t1_lo, old_value_lo, new_value_lo);
++ if (is_di)
++ arm_output_op3 (emit, "eor", t1_hi, old_value_hi, new_value_hi);
+ break;
+
+ case SYNC_OP_AND:
+- arm_output_op3 (emit,"and", t1, old_value, new_value);
++ arm_output_op3 (emit,"and", t1_lo, old_value_lo, new_value_lo);
++ if (is_di)
++ arm_output_op3 (emit, "and", t1_hi, old_value_hi, new_value_hi);
+ break;
+
+ case SYNC_OP_NAND:
+- arm_output_op3 (emit, "and", t1, old_value, new_value);
+- arm_output_op2 (emit, "mvn", t1, t1);
++ arm_output_op3 (emit, "and", t1_lo, old_value_lo, new_value_lo);
++ if (is_di)
++ arm_output_op3 (emit, "and", t1_hi, old_value_hi, new_value_hi);
++ arm_output_op2 (emit, "mvn", t1_lo, t1_lo);
++ if (is_di)
++ arm_output_op2 (emit, "mvn", t1_hi, t1_hi);
+ break;
+
+ case SYNC_OP_NONE:
+ t1 = new_value;
++ t1_lo = new_value_lo;
++ if (is_di)
++ t1_hi = new_value_hi;
+ break;
+ }
+
++ /* Note that the result of strex is a 0/1 flag that's always 1 register. */
+ if (t2)
+ {
+- arm_output_strex (emit, mode, "", t2, t1, memory);
+- operands[0] = t2;
+- arm_output_asm_insn (emit, 0, operands, "teq\t%%0, #0");
+- arm_output_asm_insn (emit, 0, operands, "bne\t%sLSYT%%=",
+- LOCAL_LABEL_PREFIX);
++ arm_output_strex (emit, mode, "", t2, t1, memory);
++ operands[0] = t2;
++ arm_output_asm_insn (emit, 0, operands, "teq\t%%0, #0");
++ arm_output_asm_insn (emit, 0, operands, "bne\t%sLSYT%%=",
++ LOCAL_LABEL_PREFIX);
+ }
+ else
+ {
+ /* Use old_value for the return value because for some operations
+ the old_value can easily be restored. This saves one register. */
+- arm_output_strex (emit, mode, "", old_value, t1, memory);
+- operands[0] = old_value;
++ arm_output_strex (emit, mode, "", old_value_lo, t1, memory);
++ operands[0] = old_value_lo;
+ arm_output_asm_insn (emit, 0, operands, "teq\t%%0, #0");
+ arm_output_asm_insn (emit, 0, operands, "bne\t%sLSYT%%=",
+ LOCAL_LABEL_PREFIX);
+
++ /* Note that we only used the _lo half of old_value as a temporary
++ so in DI we don't have to restore the _hi part. */
+ switch (sync_op)
+ {
+ case SYNC_OP_ADD:
+- arm_output_op3 (emit, "sub", old_value, t1, new_value);
++ arm_output_op3 (emit, "sub", old_value_lo, t1_lo, new_value_lo);
+ break;
+
+ case SYNC_OP_SUB:
+- arm_output_op3 (emit, "add", old_value, t1, new_value);
++ arm_output_op3 (emit, "add", old_value_lo, t1_lo, new_value_lo);
+ break;
+
+ case SYNC_OP_XOR:
+- arm_output_op3 (emit, "eor", old_value, t1, new_value);
++ arm_output_op3 (emit, "eor", old_value_lo, t1_lo, new_value_lo);
+ break;
+
+ case SYNC_OP_NONE:
+- arm_output_op2 (emit, "mov", old_value, required_value);
++ arm_output_op2 (emit, "mov", old_value_lo, required_value_lo);
+ break;
+
+ default:
+@@ -23393,8 +24597,11 @@
+ }
+ }
+
+- arm_process_output_memory_barrier (emit, NULL);
++ /* Note: label is before barrier so that in cmp failure case we still get
++ a barrier to stop subsequent loads floating upwards past the ldrex
++ PR target/48126. */
+ arm_output_asm_insn (emit, 1, operands, "%sLSYB%%=:", LOCAL_LABEL_PREFIX);
++ arm_process_output_memory_barrier (emit, NULL);
+ }
+
+ static rtx
+@@ -23488,7 +24695,7 @@
+ target = gen_reg_rtx (mode);
+
+ memory = arm_legitimize_sync_memory (memory);
+- if (mode != SImode)
++ if (mode != SImode && mode != DImode)
+ {
+ rtx load_temp = gen_reg_rtx (SImode);
+
+@@ -23507,6 +24714,12 @@
+ }
+ }
+
++static unsigned int
++arm_autovectorize_vector_sizes (void)
++{
++ return TARGET_NEON_VECTORIZE_DOUBLE ? 0 : (16 | 8);
++}
++
+ static bool
+ arm_vector_alignment_reachable (const_tree type, bool is_packed)
+ {
+@@ -23660,4 +24873,53 @@
+ return NO_REGS;
+ }
+
++/* Compute the atrribute "length" of insn "*push_multi".
++ So this function MUST be kept in sync with that insn pattern. */
++int
++arm_attr_length_push_multi(rtx parallel_op, rtx first_op)
++{
++ int i, regno, hi_reg;
++ int num_saves = XVECLEN (parallel_op, 0);
++
++ /* ARM mode. */
++ if (TARGET_ARM)
++ return 4;
++
++ /* Thumb2 mode. */
++ regno = REGNO (first_op);
++ hi_reg = (REGNO_REG_CLASS (regno) == HI_REGS) && (regno != LR_REGNUM);
++ for (i = 1; i < num_saves && !hi_reg; i++)
++ {
++ regno = REGNO (XEXP (XVECEXP (parallel_op, 0, i), 0));
++ hi_reg |= (REGNO_REG_CLASS (regno) == HI_REGS) && (regno != LR_REGNUM);
++ }
++
++ if (!hi_reg)
++ return 2;
++ return 4;
++}
++
++int
++vfp3_const_double_for_fract_bits (rtx operand)
++{
++ REAL_VALUE_TYPE r0;
++
++ if (GET_CODE (operand) != CONST_DOUBLE)
++ return 0;
++
++ REAL_VALUE_FROM_CONST_DOUBLE (r0, operand);
++ if (exact_real_inverse (DFmode, &r0))
++ {
++ if (exact_real_truncate (DFmode, &r0))
++ {
++ HOST_WIDE_INT value = real_to_integer (&r0);
++ value = value & 0xffffffff;
++ if ((value != 0) && ( (value & (value - 1)) == 0))
++ return int_log2 (value);
++ }
++ }
++ return 0;
++}
++
+ #include "gt-arm.h"
++
+--- a/src/gcc/config/arm/arm.h
++++ b/src/gcc/config/arm/arm.h
+@@ -47,6 +47,8 @@
+ { \
+ if (TARGET_DSP_MULTIPLY) \
+ builtin_define ("__ARM_FEATURE_DSP"); \
++ if (unaligned_access) \
++ builtin_define ("__ARM_FEATURE_UNALIGNED"); \
+ /* Define __arm__ even when in thumb mode, for \
+ consistency with armcc. */ \
+ builtin_define ("__arm__"); \
+@@ -103,6 +105,8 @@
+ builtin_define ("__ARM_PCS"); \
+ builtin_define ("__ARM_EABI__"); \
+ } \
++ if (TARGET_IDIV) \
++ builtin_define ("__ARM_ARCH_EXT_IDIV__"); \
+ } while (0)
+
+ /* The various ARM cores. */
+@@ -196,6 +200,7 @@
+ Do not define this macro if it does not need to do anything. */
+ #define EXTRA_SPECS \
+ { "subtarget_cpp_spec", SUBTARGET_CPP_SPEC }, \
++ { "asm_cpu_spec", ASM_CPU_SPEC }, \
+ SUBTARGET_EXTRA_SPECS
+
+ #ifndef SUBTARGET_EXTRA_SPECS
+@@ -284,7 +289,8 @@
+ (TARGET_32BIT && arm_arch6 && (arm_arch_notm || arm_arch7em))
+
+ /* Should MOVW/MOVT be used in preference to a constant pool. */
+-#define TARGET_USE_MOVT (arm_arch_thumb2 && !optimize_size)
++#define TARGET_USE_MOVT \
++ (arm_arch_thumb2 && !optimize_size && !current_tune->prefer_constant_pool)
+
+ /* We could use unified syntax for arm mode, but for now we just use it
+ for Thumb-2. */
+@@ -294,7 +300,8 @@
+ #define TARGET_HAVE_DMB (arm_arch7)
+
+ /* Nonzero if this chip implements a memory barrier via CP15. */
+-#define TARGET_HAVE_DMB_MCR (arm_arch6k && ! TARGET_HAVE_DMB)
++#define TARGET_HAVE_DMB_MCR (arm_arch6 && ! TARGET_HAVE_DMB \
++ && ! TARGET_THUMB1)
+
+ /* Nonzero if this chip implements a memory barrier instruction. */
+ #define TARGET_HAVE_MEMORY_BARRIER (TARGET_HAVE_DMB || TARGET_HAVE_DMB_MCR)
+@@ -302,8 +309,16 @@
+ /* Nonzero if this chip supports ldrex and strex */
+ #define TARGET_HAVE_LDREX ((arm_arch6 && TARGET_ARM) || arm_arch7)
+
+-/* Nonzero if this chip supports ldrex{bhd} and strex{bhd}. */
+-#define TARGET_HAVE_LDREXBHD ((arm_arch6k && TARGET_ARM) || arm_arch7)
++/* Nonzero if this chip supports ldrex{bh} and strex{bh}. */
++#define TARGET_HAVE_LDREXBH ((arm_arch6k && TARGET_ARM) || arm_arch7)
++
++/* Nonzero if this chip supports ldrexd and strexd. */
++#define TARGET_HAVE_LDREXD (((arm_arch6k && TARGET_ARM) || arm_arch7) \
++ && arm_arch_notm)
++
++/* Nonzero if integer division instructions supported. */
++#define TARGET_IDIV ((TARGET_ARM && arm_arch_arm_hwdiv) \
++ || (TARGET_THUMB2 && arm_arch_thumb_hwdiv))
+
+ /* True iff the full BPABI is being used. If TARGET_BPABI is true,
+ then TARGET_AAPCS_BASED must be true -- but the converse does not
+@@ -489,8 +504,11 @@
+ /* Nonzero if chip supports Thumb 2. */
+ extern int arm_arch_thumb2;
+
+-/* Nonzero if chip supports integer division instruction. */
+-extern int arm_arch_hwdiv;
++/* Nonzero if chip supports integer division instruction in ARM mode. */
++extern int arm_arch_arm_hwdiv;
++
++/* Nonzero if chip supports integer division instruction in Thumb mode. */
++extern int arm_arch_thumb_hwdiv;
+
+ #ifndef TARGET_DEFAULT
+ #define TARGET_DEFAULT (MASK_APCS_FRAME)
+@@ -1171,12 +1189,12 @@
+ }
+
+ /* FPA registers can't do subreg as all values are reformatted to internal
+- precision. VFP registers may only be accessed in the mode they
+- were set. */
+-#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
+- (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
+- ? reg_classes_intersect_p (FPA_REGS, (CLASS)) \
+- || reg_classes_intersect_p (VFP_REGS, (CLASS)) \
++ precision. In VFPv1, VFP registers could only be accessed in the mode
++ they were set, so subregs would be invalid there too. However, we don't
++ support VFPv1 at the moment, and the restriction was lifted in VFPv2. */
++#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
++ (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
++ ? reg_classes_intersect_p (FPA_REGS, (CLASS)) \
+ : 0)
+
+ /* The class value for index registers, and the one for base regs. */
+@@ -1187,7 +1205,7 @@
+ when addressing quantities in QI or HI mode; if we don't know the
+ mode, then we must be conservative. */
+ #define MODE_BASE_REG_CLASS(MODE) \
+- (TARGET_32BIT ? CORE_REGS : \
++ (TARGET_ARM || (TARGET_THUMB2 && !optimize_size) ? CORE_REGS : \
+ (((MODE) == SImode) ? BASE_REGS : LO_REGS))
+
+ /* For Thumb we can not support SP+reg addressing, so we return LO_REGS
+@@ -1777,27 +1795,6 @@
+ #define TARGET_DEFAULT_WORD_RELOCATIONS 0
+ #endif
+
+-/* Nonzero if the constant value X is a legitimate general operand.
+- It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE.
+-
+- On the ARM, allow any integer (invalid ones are removed later by insn
+- patterns), nice doubles and symbol_refs which refer to the function's
+- constant pool XXX.
+-
+- When generating pic allow anything. */
+-#define ARM_LEGITIMATE_CONSTANT_P(X) (flag_pic || ! label_mentioned_p (X))
+-
+-#define THUMB_LEGITIMATE_CONSTANT_P(X) \
+- ( GET_CODE (X) == CONST_INT \
+- || GET_CODE (X) == CONST_DOUBLE \
+- || CONSTANT_ADDRESS_P (X) \
+- || flag_pic)
+-
+-#define LEGITIMATE_CONSTANT_P(X) \
+- (!arm_cannot_force_const_mem (X) \
+- && (TARGET_32BIT ? ARM_LEGITIMATE_CONSTANT_P (X) \
+- : THUMB_LEGITIMATE_CONSTANT_P (X)))
+-
+ #ifndef SUBTARGET_NAME_ENCODING_LENGTHS
+ #define SUBTARGET_NAME_ENCODING_LENGTHS
+ #endif
+@@ -1972,7 +1969,7 @@
+ : min >= -4096 && max < 4096 \
+ ? (ADDR_DIFF_VEC_FLAGS (body).offset_unsigned = 0, HImode) \
+ : SImode) \
+- : ((min < 0 || max >= 0x2000 || !TARGET_THUMB2) ? SImode \
++ : ((min < 0 || max >= 0x20000 || !TARGET_THUMB2) ? SImode \
+ : (max >= 0x200) ? HImode \
+ : QImode))
+
+@@ -2041,7 +2038,8 @@
+ /* Try to generate sequences that don't involve branches, we can then use
+ conditional instructions */
+ #define BRANCH_COST(speed_p, predictable_p) \
+- (TARGET_32BIT ? 4 : (optimize > 0 ? 2 : 0))
++ (current_tune->branch_cost (speed_p, predictable_p))
++
+
+ /* Position Independent Code. */
+ /* We decide which register to use based on the compilation options and
+@@ -2279,178 +2277,6 @@
+ : arm_gen_return_addr_mask ())
+
+
+-/* Neon defines builtins from ARM_BUILTIN_MAX upwards, though they don't have
+- symbolic names defined here (which would require too much duplication).
+- FIXME? */
+-enum arm_builtins
+-{
+- ARM_BUILTIN_GETWCX,
+- ARM_BUILTIN_SETWCX,
+-
+- ARM_BUILTIN_WZERO,
+-
+- ARM_BUILTIN_WAVG2BR,
+- ARM_BUILTIN_WAVG2HR,
+- ARM_BUILTIN_WAVG2B,
+- ARM_BUILTIN_WAVG2H,
+-
+- ARM_BUILTIN_WACCB,
+- ARM_BUILTIN_WACCH,
+- ARM_BUILTIN_WACCW,
+-
+- ARM_BUILTIN_WMACS,
+- ARM_BUILTIN_WMACSZ,
+- ARM_BUILTIN_WMACU,
+- ARM_BUILTIN_WMACUZ,
+-
+- ARM_BUILTIN_WSADB,
+- ARM_BUILTIN_WSADBZ,
+- ARM_BUILTIN_WSADH,
+- ARM_BUILTIN_WSADHZ,
+-
+- ARM_BUILTIN_WALIGN,
+-
+- ARM_BUILTIN_TMIA,
+- ARM_BUILTIN_TMIAPH,
+- ARM_BUILTIN_TMIABB,
+- ARM_BUILTIN_TMIABT,
+- ARM_BUILTIN_TMIATB,
+- ARM_BUILTIN_TMIATT,
+-
+- ARM_BUILTIN_TMOVMSKB,
+- ARM_BUILTIN_TMOVMSKH,
+- ARM_BUILTIN_TMOVMSKW,
+-
+- ARM_BUILTIN_TBCSTB,
+- ARM_BUILTIN_TBCSTH,
+- ARM_BUILTIN_TBCSTW,
+-
+- ARM_BUILTIN_WMADDS,
+- ARM_BUILTIN_WMADDU,
+-
+- ARM_BUILTIN_WPACKHSS,
+- ARM_BUILTIN_WPACKWSS,
+- ARM_BUILTIN_WPACKDSS,
+- ARM_BUILTIN_WPACKHUS,
+- ARM_BUILTIN_WPACKWUS,
+- ARM_BUILTIN_WPACKDUS,
+-
+- ARM_BUILTIN_WADDB,
+- ARM_BUILTIN_WADDH,
+- ARM_BUILTIN_WADDW,
+- ARM_BUILTIN_WADDSSB,
+- ARM_BUILTIN_WADDSSH,
+- ARM_BUILTIN_WADDSSW,
+- ARM_BUILTIN_WADDUSB,
+- ARM_BUILTIN_WADDUSH,
+- ARM_BUILTIN_WADDUSW,
+- ARM_BUILTIN_WSUBB,
+- ARM_BUILTIN_WSUBH,
+- ARM_BUILTIN_WSUBW,
+- ARM_BUILTIN_WSUBSSB,
+- ARM_BUILTIN_WSUBSSH,
+- ARM_BUILTIN_WSUBSSW,
+- ARM_BUILTIN_WSUBUSB,
+- ARM_BUILTIN_WSUBUSH,
+- ARM_BUILTIN_WSUBUSW,
+-
+- ARM_BUILTIN_WAND,
+- ARM_BUILTIN_WANDN,
+- ARM_BUILTIN_WOR,
+- ARM_BUILTIN_WXOR,
+-
+- ARM_BUILTIN_WCMPEQB,
+- ARM_BUILTIN_WCMPEQH,
+- ARM_BUILTIN_WCMPEQW,
+- ARM_BUILTIN_WCMPGTUB,
+- ARM_BUILTIN_WCMPGTUH,
+- ARM_BUILTIN_WCMPGTUW,
+- ARM_BUILTIN_WCMPGTSB,
+- ARM_BUILTIN_WCMPGTSH,
+- ARM_BUILTIN_WCMPGTSW,
+-
+- ARM_BUILTIN_TEXTRMSB,
+- ARM_BUILTIN_TEXTRMSH,
+- ARM_BUILTIN_TEXTRMSW,
+- ARM_BUILTIN_TEXTRMUB,
+- ARM_BUILTIN_TEXTRMUH,
+- ARM_BUILTIN_TEXTRMUW,
+- ARM_BUILTIN_TINSRB,
+- ARM_BUILTIN_TINSRH,
+- ARM_BUILTIN_TINSRW,
+-
+- ARM_BUILTIN_WMAXSW,
+- ARM_BUILTIN_WMAXSH,
+- ARM_BUILTIN_WMAXSB,
+- ARM_BUILTIN_WMAXUW,
+- ARM_BUILTIN_WMAXUH,
+- ARM_BUILTIN_WMAXUB,
+- ARM_BUILTIN_WMINSW,
+- ARM_BUILTIN_WMINSH,
+- ARM_BUILTIN_WMINSB,
+- ARM_BUILTIN_WMINUW,
+- ARM_BUILTIN_WMINUH,
+- ARM_BUILTIN_WMINUB,
+-
+- ARM_BUILTIN_WMULUM,
+- ARM_BUILTIN_WMULSM,
+- ARM_BUILTIN_WMULUL,
+-
+- ARM_BUILTIN_PSADBH,
+- ARM_BUILTIN_WSHUFH,
+-
+- ARM_BUILTIN_WSLLH,
+- ARM_BUILTIN_WSLLW,
+- ARM_BUILTIN_WSLLD,
+- ARM_BUILTIN_WSRAH,
+- ARM_BUILTIN_WSRAW,
+- ARM_BUILTIN_WSRAD,
+- ARM_BUILTIN_WSRLH,
+- ARM_BUILTIN_WSRLW,
+- ARM_BUILTIN_WSRLD,
+- ARM_BUILTIN_WRORH,
+- ARM_BUILTIN_WRORW,
+- ARM_BUILTIN_WRORD,
+- ARM_BUILTIN_WSLLHI,
+- ARM_BUILTIN_WSLLWI,
+- ARM_BUILTIN_WSLLDI,
+- ARM_BUILTIN_WSRAHI,
+- ARM_BUILTIN_WSRAWI,
+- ARM_BUILTIN_WSRADI,
+- ARM_BUILTIN_WSRLHI,
+- ARM_BUILTIN_WSRLWI,
+- ARM_BUILTIN_WSRLDI,
+- ARM_BUILTIN_WRORHI,
+- ARM_BUILTIN_WRORWI,
+- ARM_BUILTIN_WRORDI,
+-
+- ARM_BUILTIN_WUNPCKIHB,
+- ARM_BUILTIN_WUNPCKIHH,
+- ARM_BUILTIN_WUNPCKIHW,
+- ARM_BUILTIN_WUNPCKILB,
+- ARM_BUILTIN_WUNPCKILH,
+- ARM_BUILTIN_WUNPCKILW,
+-
+- ARM_BUILTIN_WUNPCKEHSB,
+- ARM_BUILTIN_WUNPCKEHSH,
+- ARM_BUILTIN_WUNPCKEHSW,
+- ARM_BUILTIN_WUNPCKEHUB,
+- ARM_BUILTIN_WUNPCKEHUH,
+- ARM_BUILTIN_WUNPCKEHUW,
+- ARM_BUILTIN_WUNPCKELSB,
+- ARM_BUILTIN_WUNPCKELSH,
+- ARM_BUILTIN_WUNPCKELSW,
+- ARM_BUILTIN_WUNPCKELUB,
+- ARM_BUILTIN_WUNPCKELUH,
+- ARM_BUILTIN_WUNPCKELUW,
+-
+- ARM_BUILTIN_THREAD_POINTER,
+-
+- ARM_BUILTIN_NEON_BASE,
+-
+- ARM_BUILTIN_MAX = ARM_BUILTIN_NEON_BASE /* FIXME: Wrong! */
+-};
+-
+ /* Do not emit .note.GNU-stack by default. */
+ #ifndef NEED_INDICATE_EXEC_STACK
+ #define NEED_INDICATE_EXEC_STACK 0
+@@ -2460,4 +2286,25 @@
+ instruction. */
+ #define MAX_LDM_STM_OPS 4
+
++#define ASM_CPU_SPEC \
++ " %{mcpu=generic-*:-march=%*;" \
++ " :%{mcpu=*:-mcpu=%*} %{march=*:-march=%*}}"
++
++/* -mcpu=native handling only makes sense with compiler running on
++ an ARM chip. */
++#if defined(__arm__)
++extern const char *host_detect_local_cpu (int argc, const char **argv);
++# define EXTRA_SPEC_FUNCTIONS \
++ { "local_cpu_detect", host_detect_local_cpu },
++
++# define MCPU_MTUNE_NATIVE_SPECS \
++ " %{march=native:%<march=native %:local_cpu_detect(arch)}" \
++ " %{mcpu=native:%<mcpu=native %:local_cpu_detect(cpu)}" \
++ " %{mtune=native:%<mtune=native %:local_cpu_detect(tune)}"
++#else
++# define MCPU_MTUNE_NATIVE_SPECS ""
++#endif
++
++#define DRIVER_SELF_SPECS MCPU_MTUNE_NATIVE_SPECS
++
+ #endif /* ! GCC_ARM_H */
+--- a/src/gcc/config/arm/arm.md
++++ b/src/gcc/config/arm/arm.md
+@@ -48,6 +48,15 @@
+ (DOM_CC_X_OR_Y 2)
+ ]
+ )
++;; conditional compare combination
++(define_constants
++ [(CMP_CMP 0)
++ (CMN_CMP 1)
++ (CMP_CMN 2)
++ (CMN_CMN 3)
++ (NUM_OF_COND_CMP 4)
++ ]
++)
+
+ ;; UNSPEC Usage:
+ ;; Note: sin and cos are no-longer used.
+@@ -104,6 +113,10 @@
+ (UNSPEC_SYMBOL_OFFSET 27) ; The offset of the start of the symbol from
+ ; another symbolic address.
+ (UNSPEC_MEMORY_BARRIER 28) ; Represent a memory barrier.
++ (UNSPEC_UNALIGNED_LOAD 29) ; Used to represent ldr/ldrh instructions that access
++ ; unaligned locations, on architectures which support
++ ; that.
++ (UNSPEC_UNALIGNED_STORE 30) ; Same for str/strh.
+ ]
+ )
+
+@@ -332,6 +345,13 @@
+ (const_string "mult")
+ (const_string "alu")))
+
++; Is this an (integer side) multiply with a 64-bit result?
++(define_attr "mul64" "no,yes"
++ (if_then_else
++ (eq_attr "insn" "smlalxy,umull,umulls,umlal,umlals,smull,smulls,smlal,smlals")
++ (const_string "yes")
++ (const_string "no")))
++
+ ; Load scheduling, set from the arm_ld_sched variable
+ ; initialized by arm_option_override()
+ (define_attr "ldsched" "no,yes" (const (symbol_ref "arm_ld_sched")))
+@@ -490,7 +510,7 @@
+
+ (define_attr "tune_cortexr4" "yes,no"
+ (const (if_then_else
+- (eq_attr "tune" "cortexr4,cortexr4f")
++ (eq_attr "tune" "cortexr4,cortexr4f,cortexr5")
+ (const_string "yes")
+ (const_string "no"))))
+
+@@ -498,7 +518,7 @@
+
+ (define_attr "generic_sched" "yes,no"
+ (const (if_then_else
+- (ior (eq_attr "tune" "fa526,fa626,fa606te,fa626te,fmp626,fa726te,arm926ejs,arm1020e,arm1026ejs,arm1136js,arm1136jfs,cortexa5,cortexa8,cortexa9,cortexm4")
++ (ior (eq_attr "tune" "fa526,fa626,fa606te,fa626te,fmp626,fa726te,arm926ejs,arm1020e,arm1026ejs,arm1136js,arm1136jfs,cortexa5,cortexa8,cortexa9,cortexa15,cortexm4")
+ (eq_attr "tune_cortexr4" "yes"))
+ (const_string "no")
+ (const_string "yes"))))
+@@ -524,6 +544,7 @@
+ (include "cortex-a5.md")
+ (include "cortex-a8.md")
+ (include "cortex-a9.md")
++(include "cortex-a15.md")
+ (include "cortex-r4.md")
+ (include "cortex-r4f.md")
+ (include "cortex-m4.md")
+@@ -701,21 +722,24 @@
+ ;; (plus (reg rN) (reg sp)) into (reg rN). In this case reload will
+ ;; put the duplicated register first, and not try the commutative version.
+ (define_insn_and_split "*arm_addsi3"
+- [(set (match_operand:SI 0 "s_register_operand" "=r, k,r,r, k,r")
+- (plus:SI (match_operand:SI 1 "s_register_operand" "%rk,k,r,rk,k,rk")
+- (match_operand:SI 2 "reg_or_int_operand" "rI,rI,k,L, L,?n")))]
++ [(set (match_operand:SI 0 "s_register_operand" "=r, k,r,r, k, r, k,r, k, r")
++ (plus:SI (match_operand:SI 1 "s_register_operand" "%rk,k,r,rk,k, rk,k,rk,k, rk")
++ (match_operand:SI 2 "reg_or_int_operand" "rI,rI,k,Pj,Pj,L, L,PJ,PJ,?n")))]
+ "TARGET_32BIT"
+ "@
+ add%?\\t%0, %1, %2
+ add%?\\t%0, %1, %2
+ add%?\\t%0, %2, %1
++ addw%?\\t%0, %1, %2
++ addw%?\\t%0, %1, %2
+ sub%?\\t%0, %1, #%n2
+ sub%?\\t%0, %1, #%n2
++ subw%?\\t%0, %1, #%n2
++ subw%?\\t%0, %1, #%n2
+ #"
+ "TARGET_32BIT
+ && GET_CODE (operands[2]) == CONST_INT
+- && !(const_ok_for_arm (INTVAL (operands[2]))
+- || const_ok_for_arm (-INTVAL (operands[2])))
++ && !const_ok_for_op (INTVAL (operands[2]), PLUS)
+ && (reload_completed || !arm_eliminable_register (operands[1]))"
+ [(clobber (const_int 0))]
+ "
+@@ -724,8 +748,9 @@
+ operands[1], 0);
+ DONE;
+ "
+- [(set_attr "length" "4,4,4,4,4,16")
+- (set_attr "predicable" "yes")]
++ [(set_attr "length" "4,4,4,4,4,4,4,4,4,16")
++ (set_attr "predicable" "yes")
++ (set_attr "arch" "*,*,*,t2,t2,*,*,t2,t2,*")]
+ )
+
+ (define_insn_and_split "*thumb1_addsi3"
+@@ -791,7 +816,7 @@
+ ""
+ )
+
+-(define_insn "*addsi3_compare0"
++(define_insn "addsi3_compare0"
+ [(set (reg:CC_NOOV CC_REGNUM)
+ (compare:CC_NOOV
+ (plus:SI (match_operand:SI 1 "s_register_operand" "r, r")
+@@ -1806,7 +1831,37 @@
+ (set_attr "predicable" "yes")]
+ )
+
+-(define_insn "*maddhidi4"
++;; Note: there is no maddhisi4ibt because this one is canonical form
++(define_insn "*maddhisi4tb"
++ [(set (match_operand:SI 0 "s_register_operand" "=r")
++ (plus:SI (mult:SI (ashiftrt:SI
++ (match_operand:SI 1 "s_register_operand" "r")
++ (const_int 16))
++ (sign_extend:SI
++ (match_operand:HI 2 "s_register_operand" "r")))
++ (match_operand:SI 3 "s_register_operand" "r")))]
++ "TARGET_DSP_MULTIPLY"
++ "smlatb%?\\t%0, %1, %2, %3"
++ [(set_attr "insn" "smlaxy")
++ (set_attr "predicable" "yes")]
++)
++
++(define_insn "*maddhisi4tt"
++ [(set (match_operand:SI 0 "s_register_operand" "=r")
++ (plus:SI (mult:SI (ashiftrt:SI
++ (match_operand:SI 1 "s_register_operand" "r")
++ (const_int 16))
++ (ashiftrt:SI
++ (match_operand:SI 2 "s_register_operand" "r")
++ (const_int 16)))
++ (match_operand:SI 3 "s_register_operand" "r")))]
++ "TARGET_DSP_MULTIPLY"
++ "smlatt%?\\t%0, %1, %2, %3"
++ [(set_attr "insn" "smlaxy")
++ (set_attr "predicable" "yes")]
++)
++
++(define_insn "maddhidi4"
+ [(set (match_operand:DI 0 "s_register_operand" "=r")
+ (plus:DI
+ (mult:DI (sign_extend:DI
+@@ -1819,6 +1874,39 @@
+ [(set_attr "insn" "smlalxy")
+ (set_attr "predicable" "yes")])
+
++;; Note: there is no maddhidi4ibt because this one is canonical form
++(define_insn "*maddhidi4tb"
++ [(set (match_operand:DI 0 "s_register_operand" "=r")
++ (plus:DI
++ (mult:DI (sign_extend:DI
++ (ashiftrt:SI
++ (match_operand:SI 1 "s_register_operand" "r")
++ (const_int 16)))
++ (sign_extend:DI
++ (match_operand:HI 2 "s_register_operand" "r")))
++ (match_operand:DI 3 "s_register_operand" "0")))]
++ "TARGET_DSP_MULTIPLY"
++ "smlaltb%?\\t%Q0, %R0, %1, %2"
++ [(set_attr "insn" "smlalxy")
++ (set_attr "predicable" "yes")])
++
++(define_insn "*maddhidi4tt"
++ [(set (match_operand:DI 0 "s_register_operand" "=r")
++ (plus:DI
++ (mult:DI (sign_extend:DI
++ (ashiftrt:SI
++ (match_operand:SI 1 "s_register_operand" "r")
++ (const_int 16)))
++ (sign_extend:DI
++ (ashiftrt:SI
++ (match_operand:SI 2 "s_register_operand" "r")
++ (const_int 16))))
++ (match_operand:DI 3 "s_register_operand" "0")))]
++ "TARGET_DSP_MULTIPLY"
++ "smlaltt%?\\t%Q0, %R0, %1, %2"
++ [(set_attr "insn" "smlalxy")
++ (set_attr "predicable" "yes")])
++
+ (define_expand "mulsf3"
+ [(set (match_operand:SF 0 "s_register_operand" "")
+ (mult:SF (match_operand:SF 1 "s_register_operand" "")
+@@ -2384,10 +2472,10 @@
+ ;;; this insv pattern, so this pattern needs to be reevalutated.
+
+ (define_expand "insv"
+- [(set (zero_extract:SI (match_operand:SI 0 "s_register_operand" "")
+- (match_operand:SI 1 "general_operand" "")
+- (match_operand:SI 2 "general_operand" ""))
+- (match_operand:SI 3 "reg_or_int_operand" ""))]
++ [(set (zero_extract (match_operand 0 "nonimmediate_operand" "")
++ (match_operand 1 "general_operand" "")
++ (match_operand 2 "general_operand" ""))
++ (match_operand 3 "reg_or_int_operand" ""))]
+ "TARGET_ARM || arm_arch_thumb2"
+ "
+ {
+@@ -2398,35 +2486,70 @@
+
+ if (arm_arch_thumb2)
+ {
+- bool use_bfi = TRUE;
+-
+- if (GET_CODE (operands[3]) == CONST_INT)
++ if (unaligned_access && MEM_P (operands[0])
++ && s_register_operand (operands[3], GET_MODE (operands[3]))
++ && (width == 16 || width == 32) && (start_bit % BITS_PER_UNIT) == 0)
+ {
+- HOST_WIDE_INT val = INTVAL (operands[3]) & mask;
++ rtx base_addr;
++
++ if (BYTES_BIG_ENDIAN)
++ start_bit = GET_MODE_BITSIZE (GET_MODE (operands[3])) - width
++ - start_bit;
+
+- if (val == 0)
++ if (width == 32)
+ {
+- emit_insn (gen_insv_zero (operands[0], operands[1],
+- operands[2]));
+- DONE;
++ base_addr = adjust_address (operands[0], SImode,
++ start_bit / BITS_PER_UNIT);
++ emit_insn (gen_unaligned_storesi (base_addr, operands[3]));
+ }
++ else
++ {
++ rtx tmp = gen_reg_rtx (HImode);
+
+- /* See if the set can be done with a single orr instruction. */
+- if (val == mask && const_ok_for_arm (val << start_bit))
+- use_bfi = FALSE;
++ base_addr = adjust_address (operands[0], HImode,
++ start_bit / BITS_PER_UNIT);
++ emit_move_insn (tmp, gen_lowpart (HImode, operands[3]));
++ emit_insn (gen_unaligned_storehi (base_addr, tmp));
++ }
++ DONE;
+ }
+-
+- if (use_bfi)
++ else if (s_register_operand (operands[0], GET_MODE (operands[0])))
+ {
+- if (GET_CODE (operands[3]) != REG)
+- operands[3] = force_reg (SImode, operands[3]);
++ bool use_bfi = TRUE;
+
+- emit_insn (gen_insv_t2 (operands[0], operands[1], operands[2],
+- operands[3]));
+- DONE;
++ if (GET_CODE (operands[3]) == CONST_INT)
++ {
++ HOST_WIDE_INT val = INTVAL (operands[3]) & mask;
++
++ if (val == 0)
++ {
++ emit_insn (gen_insv_zero (operands[0], operands[1],
++ operands[2]));
++ DONE;
++ }
++
++ /* See if the set can be done with a single orr instruction. */
++ if (val == mask && const_ok_for_arm (val << start_bit))
++ use_bfi = FALSE;
++ }
++
++ if (use_bfi)
++ {
++ if (GET_CODE (operands[3]) != REG)
++ operands[3] = force_reg (SImode, operands[3]);
++
++ emit_insn (gen_insv_t2 (operands[0], operands[1], operands[2],
++ operands[3]));
++ DONE;
++ }
+ }
++ else
++ FAIL;
+ }
+
++ if (!s_register_operand (operands[0], GET_MODE (operands[0])))
++ FAIL;
++
+ target = copy_rtx (operands[0]);
+ /* Avoid using a subreg as a subtarget, and avoid writing a paradoxical
+ subreg as the final target. */
+@@ -3618,12 +3741,10 @@
+ ;; to reduce register pressure later on.
+
+ (define_expand "extzv"
+- [(set (match_dup 4)
+- (ashift:SI (match_operand:SI 1 "register_operand" "")
+- (match_operand:SI 2 "const_int_operand" "")))
+- (set (match_operand:SI 0 "register_operand" "")
+- (lshiftrt:SI (match_dup 4)
+- (match_operand:SI 3 "const_int_operand" "")))]
++ [(set (match_operand 0 "s_register_operand" "")
++ (zero_extract (match_operand 1 "nonimmediate_operand" "")
++ (match_operand 2 "const_int_operand" "")
++ (match_operand 3 "const_int_operand" "")))]
+ "TARGET_THUMB1 || arm_arch_thumb2"
+ "
+ {
+@@ -3632,10 +3753,57 @@
+
+ if (arm_arch_thumb2)
+ {
+- emit_insn (gen_extzv_t2 (operands[0], operands[1], operands[2],
+- operands[3]));
+- DONE;
++ HOST_WIDE_INT width = INTVAL (operands[2]);
++ HOST_WIDE_INT bitpos = INTVAL (operands[3]);
++
++ if (unaligned_access && MEM_P (operands[1])
++ && (width == 16 || width == 32) && (bitpos % BITS_PER_UNIT) == 0)
++ {
++ rtx base_addr;
++
++ if (BYTES_BIG_ENDIAN)
++ bitpos = GET_MODE_BITSIZE (GET_MODE (operands[0])) - width
++ - bitpos;
++
++ if (width == 32)
++ {
++ base_addr = adjust_address (operands[1], SImode,
++ bitpos / BITS_PER_UNIT);
++ emit_insn (gen_unaligned_loadsi (operands[0], base_addr));
++ }
++ else
++ {
++ rtx dest = operands[0];
++ rtx tmp = gen_reg_rtx (SImode);
++
++ /* We may get a paradoxical subreg here. Strip it off. */
++ if (GET_CODE (dest) == SUBREG
++ && GET_MODE (dest) == SImode
++ && GET_MODE (SUBREG_REG (dest)) == HImode)
++ dest = SUBREG_REG (dest);
++
++ if (GET_MODE_BITSIZE (GET_MODE (dest)) != width)
++ FAIL;
++
++ base_addr = adjust_address (operands[1], HImode,
++ bitpos / BITS_PER_UNIT);
++ emit_insn (gen_unaligned_loadhiu (tmp, base_addr));
++ emit_move_insn (gen_lowpart (SImode, dest), tmp);
++ }
++ DONE;
++ }
++ else if (s_register_operand (operands[1], GET_MODE (operands[1])))
++ {
++ emit_insn (gen_extzv_t2 (operands[0], operands[1], operands[2],
++ operands[3]));
++ DONE;
++ }
++ else
++ FAIL;
+ }
++
++ if (!s_register_operand (operands[1], GET_MODE (operands[1])))
++ FAIL;
+
+ operands[3] = GEN_INT (rshift);
+
+@@ -3645,12 +3813,154 @@
+ DONE;
+ }
+
+- operands[2] = GEN_INT (lshift);
+- operands[4] = gen_reg_rtx (SImode);
++ emit_insn (gen_extzv_t1 (operands[0], operands[1], GEN_INT (lshift),
++ operands[3], gen_reg_rtx (SImode)));
++ DONE;
+ }"
+ )
+
+-(define_insn "extv"
++;; Helper for extzv, for the Thumb-1 register-shifts case.
++
++(define_expand "extzv_t1"
++ [(set (match_operand:SI 4 "s_register_operand" "")
++ (ashift:SI (match_operand:SI 1 "nonimmediate_operand" "")
++ (match_operand:SI 2 "const_int_operand" "")))
++ (set (match_operand:SI 0 "s_register_operand" "")
++ (lshiftrt:SI (match_dup 4)
++ (match_operand:SI 3 "const_int_operand" "")))]
++ "TARGET_THUMB1"
++ "")
++
++(define_expand "extv"
++ [(set (match_operand 0 "s_register_operand" "")
++ (sign_extract (match_operand 1 "nonimmediate_operand" "")
++ (match_operand 2 "const_int_operand" "")
++ (match_operand 3 "const_int_operand" "")))]
++ "arm_arch_thumb2"
++{
++ HOST_WIDE_INT width = INTVAL (operands[2]);
++ HOST_WIDE_INT bitpos = INTVAL (operands[3]);
++
++ if (unaligned_access && MEM_P (operands[1]) && (width == 16 || width == 32)
++ && (bitpos % BITS_PER_UNIT) == 0)
++ {
++ rtx base_addr;
++
++ if (BYTES_BIG_ENDIAN)
++ bitpos = GET_MODE_BITSIZE (GET_MODE (operands[0])) - width - bitpos;
++
++ if (width == 32)
++ {
++ base_addr = adjust_address (operands[1], SImode,
++ bitpos / BITS_PER_UNIT);
++ emit_insn (gen_unaligned_loadsi (operands[0], base_addr));
++ }
++ else
++ {
++ rtx dest = operands[0];
++ rtx tmp = gen_reg_rtx (SImode);
++
++ /* We may get a paradoxical subreg here. Strip it off. */
++ if (GET_CODE (dest) == SUBREG
++ && GET_MODE (dest) == SImode
++ && GET_MODE (SUBREG_REG (dest)) == HImode)
++ dest = SUBREG_REG (dest);
++
++ if (GET_MODE_BITSIZE (GET_MODE (dest)) != width)
++ FAIL;
++
++ base_addr = adjust_address (operands[1], HImode,
++ bitpos / BITS_PER_UNIT);
++ emit_insn (gen_unaligned_loadhis (tmp, base_addr));
++ emit_move_insn (gen_lowpart (SImode, dest), tmp);
++ }
++
++ DONE;
++ }
++ else if (!s_register_operand (operands[1], GET_MODE (operands[1])))
++ FAIL;
++ else if (GET_MODE (operands[0]) == SImode
++ && GET_MODE (operands[1]) == SImode)
++ {
++ emit_insn (gen_extv_regsi (operands[0], operands[1], operands[2],
++ operands[3]));
++ DONE;
++ }
++
++ FAIL;
++})
++
++; Helper to expand register forms of extv with the proper modes.
++
++(define_expand "extv_regsi"
++ [(set (match_operand:SI 0 "s_register_operand" "")
++ (sign_extract:SI (match_operand:SI 1 "s_register_operand" "")
++ (match_operand 2 "const_int_operand" "")
++ (match_operand 3 "const_int_operand" "")))]
++ ""
++{
++})
++
++; ARMv6+ unaligned load/store instructions (used for packed structure accesses).
++
++(define_insn "unaligned_loadsi"
++ [(set (match_operand:SI 0 "s_register_operand" "=l,r")
++ (unspec:SI [(match_operand:SI 1 "memory_operand" "Uw,m")]
++ UNSPEC_UNALIGNED_LOAD))]
++ "unaligned_access && TARGET_32BIT"
++ "ldr%?\t%0, %1\t@ unaligned"
++ [(set_attr "arch" "t2,any")
++ (set_attr "length" "2,4")
++ (set_attr "predicable" "yes")
++ (set_attr "type" "load1")])
++
++(define_insn "unaligned_loadhis"
++ [(set (match_operand:SI 0 "s_register_operand" "=l,r")
++ (sign_extend:SI
++ (unspec:HI [(match_operand:HI 1 "memory_operand" "Uw,m")]
++ UNSPEC_UNALIGNED_LOAD)))]
++ "unaligned_access && TARGET_32BIT"
++ "ldr%(sh%)\t%0, %1\t@ unaligned"
++ [(set_attr "arch" "t2,any")
++ (set_attr "length" "2,4")
++ (set_attr "predicable" "yes")
++ (set_attr "type" "load_byte")])
++
++(define_insn "unaligned_loadhiu"
++ [(set (match_operand:SI 0 "s_register_operand" "=l,r")
++ (zero_extend:SI
++ (unspec:HI [(match_operand:HI 1 "memory_operand" "Uw,m")]
++ UNSPEC_UNALIGNED_LOAD)))]
++ "unaligned_access && TARGET_32BIT"
++ "ldr%(h%)\t%0, %1\t@ unaligned"
++ [(set_attr "arch" "t2,any")
++ (set_attr "length" "2,4")
++ (set_attr "predicable" "yes")
++ (set_attr "type" "load_byte")])
++
++(define_insn "unaligned_storesi"
++ [(set (match_operand:SI 0 "memory_operand" "=Uw,m")
++ (unspec:SI [(match_operand:SI 1 "s_register_operand" "l,r")]
++ UNSPEC_UNALIGNED_STORE))]
++ "unaligned_access && TARGET_32BIT"
++ "str%?\t%1, %0\t@ unaligned"
++ [(set_attr "arch" "t2,any")
++ (set_attr "length" "2,4")
++ (set_attr "predicable" "yes")
++ (set_attr "type" "store1")])
++
++(define_insn "unaligned_storehi"
++ [(set (match_operand:HI 0 "memory_operand" "=Uw,m")
++ (unspec:HI [(match_operand:HI 1 "s_register_operand" "l,r")]
++ UNSPEC_UNALIGNED_STORE))]
++ "unaligned_access && TARGET_32BIT"
++ "str%(h%)\t%1, %0\t@ unaligned"
++ [(set_attr "arch" "t2,any")
++ (set_attr "length" "2,4")
++ (set_attr "predicable" "yes")
++ (set_attr "type" "store1")])
++
++(define_insn "*extv_reg"
+ [(set (match_operand:SI 0 "s_register_operand" "=r")
+ (sign_extract:SI (match_operand:SI 1 "s_register_operand" "r")
+ (match_operand:SI 2 "const_int_operand" "M")
+@@ -3672,6 +3982,28 @@
+ (set_attr "predicable" "yes")]
+ )
+
++
++;; Division instructions
++(define_insn "divsi3"
++ [(set (match_operand:SI 0 "s_register_operand" "=r")
++ (div:SI (match_operand:SI 1 "s_register_operand" "r")
++ (match_operand:SI 2 "s_register_operand" "r")))]
++ "TARGET_IDIV"
++ "sdiv%?\t%0, %1, %2"
++ [(set_attr "predicable" "yes")
++ (set_attr "insn" "sdiv")]
++)
++
++(define_insn "udivsi3"
++ [(set (match_operand:SI 0 "s_register_operand" "=r")
++ (udiv:SI (match_operand:SI 1 "s_register_operand" "r")
++ (match_operand:SI 2 "s_register_operand" "r")))]
++ "TARGET_IDIV"
++ "udiv%?\t%0, %1, %2"
++ [(set_attr "predicable" "yes")
++ (set_attr "insn" "udiv")]
++)
++
+
+ ;; Unary arithmetic insns
+
+@@ -4044,8 +4376,8 @@
+
+ (define_insn "zero_extend<mode>di2"
+ [(set (match_operand:DI 0 "s_register_operand" "=r")
+- (zero_extend:DI (match_operand:QHSI 1 "<qhs_extenddi_op>"
+- "<qhs_extenddi_cstr>")))]
++ (zero_extend:DI (match_operand:QHSI 1 "<qhs_zextenddi_op>"
++ "<qhs_zextenddi_cstr>")))]
+ "TARGET_32BIT <qhs_zextenddi_cond>"
+ "#"
+ [(set_attr "length" "8")
+@@ -5937,8 +6269,8 @@
+
+
+ (define_insn "*arm_movqi_insn"
+- [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,r,m")
+- (match_operand:QI 1 "general_operand" "rI,K,m,r"))]
++ [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,l,Uu,r,m")
++ (match_operand:QI 1 "general_operand" "rI,K,Uu,l,m,r"))]
+ "TARGET_32BIT
+ && ( register_operand (operands[0], QImode)
+ || register_operand (operands[1], QImode))"
+@@ -5946,10 +6278,14 @@
+ mov%?\\t%0, %1
+ mvn%?\\t%0, #%B1
+ ldr%(b%)\\t%0, %1
++ str%(b%)\\t%1, %0
++ ldr%(b%)\\t%0, %1
+ str%(b%)\\t%1, %0"
+- [(set_attr "type" "*,*,load1,store1")
+- (set_attr "insn" "mov,mvn,*,*")
+- (set_attr "predicable" "yes")]
++ [(set_attr "type" "*,*,load1,store1,load1,store1")
++ (set_attr "insn" "mov,mvn,*,*,*,*")
++ (set_attr "predicable" "yes")
++ (set_attr "arch" "any,any,t2,t2,any,any")
++ (set_attr "length" "4,4,2,2,4,4")]
+ )
+
+ (define_insn "*thumb1_movqi_insn"
+@@ -6179,7 +6515,7 @@
+ [(match_operand:DF 0 "arm_reload_memory_operand" "=o")
+ (match_operand:DF 1 "s_register_operand" "r")
+ (match_operand:SI 2 "s_register_operand" "=&r")]
+- "TARGET_32BIT"
++ "TARGET_THUMB2"
+ "
+ {
+ enum rtx_code code = GET_CODE (XEXP (operands[0], 0));
+@@ -6442,7 +6778,7 @@
+
+ (define_expand "cbranchsi4"
+ [(set (pc) (if_then_else
+- (match_operator 0 "arm_comparison_operator"
++ (match_operator 0 "expandable_comparison_operator"
+ [(match_operand:SI 1 "s_register_operand" "")
+ (match_operand:SI 2 "nonmemory_operand" "")])
+ (label_ref (match_operand 3 "" ""))
+@@ -6493,7 +6829,7 @@
+
+ (define_expand "cbranchsf4"
+ [(set (pc) (if_then_else
+- (match_operator 0 "arm_comparison_operator"
++ (match_operator 0 "expandable_comparison_operator"
+ [(match_operand:SF 1 "s_register_operand" "")
+ (match_operand:SF 2 "arm_float_compare_operand" "")])
+ (label_ref (match_operand 3 "" ""))
+@@ -6505,7 +6841,7 @@
+
+ (define_expand "cbranchdf4"
+ [(set (pc) (if_then_else
+- (match_operator 0 "arm_comparison_operator"
++ (match_operator 0 "expandable_comparison_operator"
+ [(match_operand:DF 1 "s_register_operand" "")
+ (match_operand:DF 2 "arm_float_compare_operand" "")])
+ (label_ref (match_operand 3 "" ""))
+@@ -6517,7 +6853,7 @@
+
+ (define_expand "cbranchdi4"
+ [(set (pc) (if_then_else
+- (match_operator 0 "arm_comparison_operator"
++ (match_operator 0 "expandable_comparison_operator"
+ [(match_operand:DI 1 "cmpdi_operand" "")
+ (match_operand:DI 2 "cmpdi_operand" "")])
+ (label_ref (match_operand 3 "" ""))
+@@ -7106,13 +7442,17 @@
+
+ (define_insn "*arm_cmpsi_insn"
+ [(set (reg:CC CC_REGNUM)
+- (compare:CC (match_operand:SI 0 "s_register_operand" "r,r")
+- (match_operand:SI 1 "arm_add_operand" "rI,L")))]
++ (compare:CC (match_operand:SI 0 "s_register_operand" "l,r,r,r")
++ (match_operand:SI 1 "arm_add_operand" "Py,r,rI,L")))]
+ "TARGET_32BIT"
+ "@
+ cmp%?\\t%0, %1
++ cmp%?\\t%0, %1
++ cmp%?\\t%0, %1
+ cmn%?\\t%0, #%n1"
+- [(set_attr "conds" "set")]
++ [(set_attr "conds" "set")
++ (set_attr "arch" "t2,t2,any,any")
++ (set_attr "length" "2,2,4,4")]
+ )
+
+ (define_insn "*cmpsi_shiftsi"
+@@ -7283,7 +7623,14 @@
+ return \"b%d1\\t%l0\";
+ "
+ [(set_attr "conds" "use")
+- (set_attr "type" "branch")]
++ (set_attr "type" "branch")
++ (set (attr "length")
++ (if_then_else
++ (and (ne (symbol_ref "TARGET_THUMB2") (const_int 0))
++ (and (ge (minus (match_dup 0) (pc)) (const_int -250))
++ (le (minus (match_dup 0) (pc)) (const_int 256))))
++ (const_int 2)
++ (const_int 4)))]
+ )
+
+ (define_insn "*arm_cond_branch_reversed"
+@@ -7302,7 +7649,14 @@
+ return \"b%D1\\t%l0\";
+ "
+ [(set_attr "conds" "use")
+- (set_attr "type" "branch")]
++ (set_attr "type" "branch")
++ (set (attr "length")
++ (if_then_else
++ (and (ne (symbol_ref "TARGET_THUMB2") (const_int 0))
++ (and (ge (minus (match_dup 0) (pc)) (const_int -250))
++ (le (minus (match_dup 0) (pc)) (const_int 256))))
++ (const_int 2)
++ (const_int 4)))]
+ )
+
+
+@@ -7354,7 +7708,7 @@
+
+ (define_expand "cstoresi4"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+- (match_operator:SI 1 "arm_comparison_operator"
++ (match_operator:SI 1 "expandable_comparison_operator"
+ [(match_operand:SI 2 "s_register_operand" "")
+ (match_operand:SI 3 "reg_or_int_operand" "")]))]
+ "TARGET_32BIT || TARGET_THUMB1"
+@@ -7490,7 +7844,7 @@
+
+ (define_expand "cstoresf4"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+- (match_operator:SI 1 "arm_comparison_operator"
++ (match_operator:SI 1 "expandable_comparison_operator"
+ [(match_operand:SF 2 "s_register_operand" "")
+ (match_operand:SF 3 "arm_float_compare_operand" "")]))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT"
+@@ -7500,7 +7854,7 @@
+
+ (define_expand "cstoredf4"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+- (match_operator:SI 1 "arm_comparison_operator"
++ (match_operator:SI 1 "expandable_comparison_operator"
+ [(match_operand:DF 2 "s_register_operand" "")
+ (match_operand:DF 3 "arm_float_compare_operand" "")]))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_VFP_SINGLE"
+@@ -7510,7 +7864,7 @@
+
+ (define_expand "cstoredi4"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+- (match_operator:SI 1 "arm_comparison_operator"
++ (match_operator:SI 1 "expandable_comparison_operator"
+ [(match_operand:DI 2 "cmpdi_operand" "")
+ (match_operand:DI 3 "cmpdi_operand" "")]))]
+ "TARGET_32BIT"
+@@ -7630,7 +7984,7 @@
+
+ (define_expand "movsicc"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+- (if_then_else:SI (match_operand 1 "arm_comparison_operator" "")
++ (if_then_else:SI (match_operand 1 "expandable_comparison_operator" "")
+ (match_operand:SI 2 "arm_not_operand" "")
+ (match_operand:SI 3 "arm_not_operand" "")))]
+ "TARGET_32BIT"
+@@ -7650,7 +8004,7 @@
+
+ (define_expand "movsfcc"
+ [(set (match_operand:SF 0 "s_register_operand" "")
+- (if_then_else:SF (match_operand 1 "arm_comparison_operator" "")
++ (if_then_else:SF (match_operand 1 "expandable_comparison_operator" "")
+ (match_operand:SF 2 "s_register_operand" "")
+ (match_operand:SF 3 "nonmemory_operand" "")))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT"
+@@ -7676,7 +8030,7 @@
+
+ (define_expand "movdfcc"
+ [(set (match_operand:DF 0 "s_register_operand" "")
+- (if_then_else:DF (match_operand 1 "arm_comparison_operator" "")
++ (if_then_else:DF (match_operand 1 "expandable_comparison_operator" "")
+ (match_operand:DF 2 "s_register_operand" "")
+ (match_operand:DF 3 "arm_float_add_operand" "")))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP_DOUBLE)"
+@@ -7754,7 +8108,14 @@
+ return \"b%?\\t%l0\";
+ }
+ "
+- [(set_attr "predicable" "yes")]
++ [(set_attr "predicable" "yes")
++ (set (attr "length")
++ (if_then_else
++ (and (ne (symbol_ref "TARGET_THUMB2") (const_int 0))
++ (and (ge (minus (match_dup 0) (pc)) (const_int -2044))
++ (le (minus (match_dup 0) (pc)) (const_int 2048))))
++ (const_int 2)
++ (const_int 4)))]
+ )
+
+ (define_insn "*thumb_jump"
+@@ -8839,40 +9200,85 @@
+ (set_attr "length" "8,12")]
+ )
+
+-;; ??? Is it worth using these conditional patterns in Thumb-2 mode?
+ (define_insn "*cmp_ite0"
+ [(set (match_operand 6 "dominant_cc_register" "")
+ (compare
+ (if_then_else:SI
+ (match_operator 4 "arm_comparison_operator"
+- [(match_operand:SI 0 "s_register_operand" "r,r,r,r")
+- (match_operand:SI 1 "arm_add_operand" "rI,L,rI,L")])
++ [(match_operand:SI 0 "s_register_operand"
++ "l,l,l,r,r,r,r,r,r")
++ (match_operand:SI 1 "arm_add_operand"
++ "lPy,lPy,lPy,rI,L,rI,L,rI,L")])
+ (match_operator:SI 5 "arm_comparison_operator"
+- [(match_operand:SI 2 "s_register_operand" "r,r,r,r")
+- (match_operand:SI 3 "arm_add_operand" "rI,rI,L,L")])
++ [(match_operand:SI 2 "s_register_operand"
++ "l,r,r,l,l,r,r,r,r")
++ (match_operand:SI 3 "arm_add_operand"
++ "lPy,rI,L,lPy,lPy,rI,rI,L,L")])
+ (const_int 0))
+ (const_int 0)))]
+- "TARGET_ARM"
++ "TARGET_32BIT"
+ "*
+ {
+- static const char * const opcodes[4][2] =
++ static const char * const cmp1[NUM_OF_COND_CMP][2] =
+ {
+- {\"cmp\\t%2, %3\;cmp%d5\\t%0, %1\",
+- \"cmp\\t%0, %1\;cmp%d4\\t%2, %3\"},
+- {\"cmp\\t%2, %3\;cmn%d5\\t%0, #%n1\",
+- \"cmn\\t%0, #%n1\;cmp%d4\\t%2, %3\"},
+- {\"cmn\\t%2, #%n3\;cmp%d5\\t%0, %1\",
+- \"cmp\\t%0, %1\;cmn%d4\\t%2, #%n3\"},
+- {\"cmn\\t%2, #%n3\;cmn%d5\\t%0, #%n1\",
+- \"cmn\\t%0, #%n1\;cmn%d4\\t%2, #%n3\"}
++ {\"cmp%d5\\t%0, %1\",
++ \"cmp%d4\\t%2, %3\"},
++ {\"cmn%d5\\t%0, #%n1\",
++ \"cmp%d4\\t%2, %3\"},
++ {\"cmp%d5\\t%0, %1\",
++ \"cmn%d4\\t%2, #%n3\"},
++ {\"cmn%d5\\t%0, #%n1\",
++ \"cmn%d4\\t%2, #%n3\"}
+ };
++ static const char * const cmp2[NUM_OF_COND_CMP][2] =
++ {
++ {\"cmp\\t%2, %3\",
++ \"cmp\\t%0, %1\"},
++ {\"cmp\\t%2, %3\",
++ \"cmn\\t%0, #%n1\"},
++ {\"cmn\\t%2, #%n3\",
++ \"cmp\\t%0, %1\"},
++ {\"cmn\\t%2, #%n3\",
++ \"cmn\\t%0, #%n1\"}
++ };
++ static const char * const ite[2] =
++ {
++ \"it\\t%d5\",
++ \"it\\t%d4\"
++ };
++ static const int cmp_idx[9] = {CMP_CMP, CMP_CMP, CMP_CMN,
++ CMP_CMP, CMN_CMP, CMP_CMP,
++ CMN_CMP, CMP_CMN, CMN_CMN};
+ int swap =
+ comparison_dominates_p (GET_CODE (operands[5]), GET_CODE (operands[4]));
+
+- return opcodes[which_alternative][swap];
++ output_asm_insn (cmp2[cmp_idx[which_alternative]][swap], operands);
++ if (TARGET_THUMB2) {
++ output_asm_insn (ite[swap], operands);
++ }
++ output_asm_insn (cmp1[cmp_idx[which_alternative]][swap], operands);
++ return \"\";
+ }"
+ [(set_attr "conds" "set")
+- (set_attr "length" "8")]
++ (set_attr "arch" "t2,t2,t2,t2,t2,any,any,any,any")
++ (set_attr_alternative "length"
++ [(const_int 6)
++ (const_int 8)
++ (const_int 8)
++ (const_int 8)
++ (const_int 8)
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))])]
+ )
+
+ (define_insn "*cmp_ite1"
+@@ -8880,35 +9286,81 @@
+ (compare
+ (if_then_else:SI
+ (match_operator 4 "arm_comparison_operator"
+- [(match_operand:SI 0 "s_register_operand" "r,r,r,r")
+- (match_operand:SI 1 "arm_add_operand" "rI,L,rI,L")])
++ [(match_operand:SI 0 "s_register_operand"
++ "l,l,l,r,r,r,r,r,r")
++ (match_operand:SI 1 "arm_add_operand"
++ "lPy,lPy,lPy,rI,L,rI,L,rI,L")])
+ (match_operator:SI 5 "arm_comparison_operator"
+- [(match_operand:SI 2 "s_register_operand" "r,r,r,r")
+- (match_operand:SI 3 "arm_add_operand" "rI,rI,L,L")])
++ [(match_operand:SI 2 "s_register_operand"
++ "l,r,r,l,l,r,r,r,r")
++ (match_operand:SI 3 "arm_add_operand"
++ "lPy,rI,L,lPy,lPy,rI,rI,L,L")])
+ (const_int 1))
+ (const_int 0)))]
+- "TARGET_ARM"
++ "TARGET_32BIT"
+ "*
+ {
+- static const char * const opcodes[4][2] =
++ static const char * const cmp1[NUM_OF_COND_CMP][2] =
++ {
++ {\"cmp\\t%0, %1\",
++ \"cmp\\t%2, %3\"},
++ {\"cmn\\t%0, #%n1\",
++ \"cmp\\t%2, %3\"},
++ {\"cmp\\t%0, %1\",
++ \"cmn\\t%2, #%n3\"},
++ {\"cmn\\t%0, #%n1\",
++ \"cmn\\t%2, #%n3\"}
++ };
++ static const char * const cmp2[NUM_OF_COND_CMP][2] =
+ {
+- {\"cmp\\t%0, %1\;cmp%d4\\t%2, %3\",
+- \"cmp\\t%2, %3\;cmp%D5\\t%0, %1\"},
+- {\"cmn\\t%0, #%n1\;cmp%d4\\t%2, %3\",
+- \"cmp\\t%2, %3\;cmn%D5\\t%0, #%n1\"},
+- {\"cmp\\t%0, %1\;cmn%d4\\t%2, #%n3\",
+- \"cmn\\t%2, #%n3\;cmp%D5\\t%0, %1\"},
+- {\"cmn\\t%0, #%n1\;cmn%d4\\t%2, #%n3\",
+- \"cmn\\t%2, #%n3\;cmn%D5\\t%0, #%n1\"}
++ {\"cmp%d4\\t%2, %3\",
++ \"cmp%D5\\t%0, %1\"},
++ {\"cmp%d4\\t%2, %3\",
++ \"cmn%D5\\t%0, #%n1\"},
++ {\"cmn%d4\\t%2, #%n3\",
++ \"cmp%D5\\t%0, %1\"},
++ {\"cmn%d4\\t%2, #%n3\",
++ \"cmn%D5\\t%0, #%n1\"}
+ };
++ static const char * const ite[2] =
++ {
++ \"it\\t%d4\",
++ \"it\\t%D5\"
++ };
++ static const int cmp_idx[9] = {CMP_CMP, CMP_CMP, CMP_CMN,
++ CMP_CMP, CMN_CMP, CMP_CMP,
++ CMN_CMP, CMP_CMN, CMN_CMN};
+ int swap =
+ comparison_dominates_p (GET_CODE (operands[5]),
+ reverse_condition (GET_CODE (operands[4])));
+
+- return opcodes[which_alternative][swap];
++ output_asm_insn (cmp1[cmp_idx[which_alternative]][swap], operands);
++ if (TARGET_THUMB2) {
++ output_asm_insn (ite[swap], operands);
++ }
++ output_asm_insn (cmp2[cmp_idx[which_alternative]][swap], operands);
++ return \"\";
+ }"
+ [(set_attr "conds" "set")
+- (set_attr "length" "8")]
++ (set_attr "arch" "t2,t2,t2,t2,t2,any,any,any,any")
++ (set_attr_alternative "length"
++ [(const_int 6)
++ (const_int 8)
++ (const_int 8)
++ (const_int 8)
++ (const_int 8)
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))])]
+ )
+
+ (define_insn "*cmp_and"
+@@ -8916,34 +9368,80 @@
+ (compare
+ (and:SI
+ (match_operator 4 "arm_comparison_operator"
+- [(match_operand:SI 0 "s_register_operand" "r,r,r,r")
+- (match_operand:SI 1 "arm_add_operand" "rI,L,rI,L")])
++ [(match_operand:SI 0 "s_register_operand"
++ "l,l,l,r,r,r,r,r,r")
++ (match_operand:SI 1 "arm_add_operand"
++ "lPy,lPy,lPy,rI,L,rI,L,rI,L")])
+ (match_operator:SI 5 "arm_comparison_operator"
+- [(match_operand:SI 2 "s_register_operand" "r,r,r,r")
+- (match_operand:SI 3 "arm_add_operand" "rI,rI,L,L")]))
++ [(match_operand:SI 2 "s_register_operand"
++ "l,r,r,l,l,r,r,r,r")
++ (match_operand:SI 3 "arm_add_operand"
++ "lPy,rI,L,lPy,lPy,rI,rI,L,L")]))
+ (const_int 0)))]
+- "TARGET_ARM"
++ "TARGET_32BIT"
+ "*
+ {
+- static const char *const opcodes[4][2] =
++ static const char *const cmp1[NUM_OF_COND_CMP][2] =
++ {
++ {\"cmp%d5\\t%0, %1\",
++ \"cmp%d4\\t%2, %3\"},
++ {\"cmn%d5\\t%0, #%n1\",
++ \"cmp%d4\\t%2, %3\"},
++ {\"cmp%d5\\t%0, %1\",
++ \"cmn%d4\\t%2, #%n3\"},
++ {\"cmn%d5\\t%0, #%n1\",
++ \"cmn%d4\\t%2, #%n3\"}
++ };
++ static const char *const cmp2[NUM_OF_COND_CMP][2] =
++ {
++ {\"cmp\\t%2, %3\",
++ \"cmp\\t%0, %1\"},
++ {\"cmp\\t%2, %3\",
++ \"cmn\\t%0, #%n1\"},
++ {\"cmn\\t%2, #%n3\",
++ \"cmp\\t%0, %1\"},
++ {\"cmn\\t%2, #%n3\",
++ \"cmn\\t%0, #%n1\"}
++ };
++ static const char *const ite[2] =
+ {
+- {\"cmp\\t%2, %3\;cmp%d5\\t%0, %1\",
+- \"cmp\\t%0, %1\;cmp%d4\\t%2, %3\"},
+- {\"cmp\\t%2, %3\;cmn%d5\\t%0, #%n1\",
+- \"cmn\\t%0, #%n1\;cmp%d4\\t%2, %3\"},
+- {\"cmn\\t%2, #%n3\;cmp%d5\\t%0, %1\",
+- \"cmp\\t%0, %1\;cmn%d4\\t%2, #%n3\"},
+- {\"cmn\\t%2, #%n3\;cmn%d5\\t%0, #%n1\",
+- \"cmn\\t%0, #%n1\;cmn%d4\\t%2, #%n3\"}
++ \"it\\t%d5\",
++ \"it\\t%d4\"
+ };
++ static const int cmp_idx[9] = {CMP_CMP, CMP_CMP, CMP_CMN,
++ CMP_CMP, CMN_CMP, CMP_CMP,
++ CMN_CMP, CMP_CMN, CMN_CMN};
+ int swap =
+ comparison_dominates_p (GET_CODE (operands[5]), GET_CODE (operands[4]));
+
+- return opcodes[which_alternative][swap];
++ output_asm_insn (cmp2[cmp_idx[which_alternative]][swap], operands);
++ if (TARGET_THUMB2) {
++ output_asm_insn (ite[swap], operands);
++ }
++ output_asm_insn (cmp1[cmp_idx[which_alternative]][swap], operands);
++ return \"\";
+ }"
+ [(set_attr "conds" "set")
+ (set_attr "predicable" "no")
+- (set_attr "length" "8")]
++ (set_attr "arch" "t2,t2,t2,t2,t2,any,any,any,any")
++ (set_attr_alternative "length"
++ [(const_int 6)
++ (const_int 8)
++ (const_int 8)
++ (const_int 8)
++ (const_int 8)
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))])]
+ )
+
+ (define_insn "*cmp_ior"
+@@ -8951,34 +9449,80 @@
+ (compare
+ (ior:SI
+ (match_operator 4 "arm_comparison_operator"
+- [(match_operand:SI 0 "s_register_operand" "r,r,r,r")
+- (match_operand:SI 1 "arm_add_operand" "rI,L,rI,L")])
++ [(match_operand:SI 0 "s_register_operand"
++ "l,l,l,r,r,r,r,r,r")
++ (match_operand:SI 1 "arm_add_operand"
++ "lPy,lPy,lPy,rI,L,rI,L,rI,L")])
+ (match_operator:SI 5 "arm_comparison_operator"
+- [(match_operand:SI 2 "s_register_operand" "r,r,r,r")
+- (match_operand:SI 3 "arm_add_operand" "rI,rI,L,L")]))
++ [(match_operand:SI 2 "s_register_operand"
++ "l,r,r,l,l,r,r,r,r")
++ (match_operand:SI 3 "arm_add_operand"
++ "lPy,rI,L,lPy,lPy,rI,rI,L,L")]))
+ (const_int 0)))]
+- "TARGET_ARM"
++ "TARGET_32BIT"
+ "*
+-{
+- static const char *const opcodes[4][2] =
+ {
+- {\"cmp\\t%0, %1\;cmp%D4\\t%2, %3\",
+- \"cmp\\t%2, %3\;cmp%D5\\t%0, %1\"},
+- {\"cmn\\t%0, #%n1\;cmp%D4\\t%2, %3\",
+- \"cmp\\t%2, %3\;cmn%D5\\t%0, #%n1\"},
+- {\"cmp\\t%0, %1\;cmn%D4\\t%2, #%n3\",
+- \"cmn\\t%2, #%n3\;cmp%D5\\t%0, %1\"},
+- {\"cmn\\t%0, #%n1\;cmn%D4\\t%2, #%n3\",
+- \"cmn\\t%2, #%n3\;cmn%D5\\t%0, #%n1\"}
+- };
+- int swap =
+- comparison_dominates_p (GET_CODE (operands[5]), GET_CODE (operands[4]));
++ static const char *const cmp1[NUM_OF_COND_CMP][2] =
++ {
++ {\"cmp\\t%0, %1\",
++ \"cmp\\t%2, %3\"},
++ {\"cmn\\t%0, #%n1\",
++ \"cmp\\t%2, %3\"},
++ {\"cmp\\t%0, %1\",
++ \"cmn\\t%2, #%n3\"},
++ {\"cmn\\t%0, #%n1\",
++ \"cmn\\t%2, #%n3\"}
++ };
++ static const char *const cmp2[NUM_OF_COND_CMP][2] =
++ {
++ {\"cmp%D4\\t%2, %3\",
++ \"cmp%D5\\t%0, %1\"},
++ {\"cmp%D4\\t%2, %3\",
++ \"cmn%D5\\t%0, #%n1\"},
++ {\"cmn%D4\\t%2, #%n3\",
++ \"cmp%D5\\t%0, %1\"},
++ {\"cmn%D4\\t%2, #%n3\",
++ \"cmn%D5\\t%0, #%n1\"}
++ };
++ static const char *const ite[2] =
++ {
++ \"it\\t%D4\",
++ \"it\\t%D5\"
++ };
++ static const int cmp_idx[9] = {CMP_CMP, CMP_CMP, CMP_CMN,
++ CMP_CMP, CMN_CMP, CMP_CMP,
++ CMN_CMP, CMP_CMN, CMN_CMN};
++ int swap =
++ comparison_dominates_p (GET_CODE (operands[5]), GET_CODE (operands[4]));
+
+- return opcodes[which_alternative][swap];
+-}
+-"
++ output_asm_insn (cmp1[cmp_idx[which_alternative]][swap], operands);
++ if (TARGET_THUMB2) {
++ output_asm_insn (ite[swap], operands);
++ }
++ output_asm_insn (cmp2[cmp_idx[which_alternative]][swap], operands);
++ return \"\";
++ }
++ "
+ [(set_attr "conds" "set")
+- (set_attr "length" "8")]
++ (set_attr "arch" "t2,t2,t2,t2,t2,any,any,any,any")
++ (set_attr_alternative "length"
++ [(const_int 6)
++ (const_int 8)
++ (const_int 8)
++ (const_int 8)
++ (const_int 8)
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 8)
++ (const_int 10))])]
+ )
+
+ (define_insn_and_split "*ior_scc_scc"
+@@ -8990,11 +9534,11 @@
+ [(match_operand:SI 4 "s_register_operand" "r")
+ (match_operand:SI 5 "arm_add_operand" "rIL")])))
+ (clobber (reg:CC CC_REGNUM))]
+- "TARGET_ARM
++ "TARGET_32BIT
+ && (arm_select_dominance_cc_mode (operands[3], operands[6], DOM_CC_X_OR_Y)
+ != CCmode)"
+ "#"
+- "TARGET_ARM && reload_completed"
++ "TARGET_32BIT && reload_completed"
+ [(set (match_dup 7)
+ (compare
+ (ior:SI
+@@ -9023,9 +9567,9 @@
+ (set (match_operand:SI 7 "s_register_operand" "=r")
+ (ior:SI (match_op_dup 3 [(match_dup 1) (match_dup 2)])
+ (match_op_dup 6 [(match_dup 4) (match_dup 5)])))]
+- "TARGET_ARM"
++ "TARGET_32BIT"
+ "#"
+- "TARGET_ARM && reload_completed"
++ "TARGET_32BIT && reload_completed"
+ [(set (match_dup 0)
+ (compare
+ (ior:SI
+@@ -9046,11 +9590,11 @@
+ [(match_operand:SI 4 "s_register_operand" "r")
+ (match_operand:SI 5 "arm_add_operand" "rIL")])))
+ (clobber (reg:CC CC_REGNUM))]
+- "TARGET_ARM
++ "TARGET_32BIT
+ && (arm_select_dominance_cc_mode (operands[3], operands[6], DOM_CC_X_AND_Y)
+ != CCmode)"
+ "#"
+- "TARGET_ARM && reload_completed
++ "TARGET_32BIT && reload_completed
+ && (arm_select_dominance_cc_mode (operands[3], operands[6], DOM_CC_X_AND_Y)
+ != CCmode)"
+ [(set (match_dup 7)
+@@ -9081,9 +9625,9 @@
+ (set (match_operand:SI 7 "s_register_operand" "=r")
+ (and:SI (match_op_dup 3 [(match_dup 1) (match_dup 2)])
+ (match_op_dup 6 [(match_dup 4) (match_dup 5)])))]
+- "TARGET_ARM"
++ "TARGET_32BIT"
+ "#"
+- "TARGET_ARM && reload_completed"
++ "TARGET_32BIT && reload_completed"
+ [(set (match_dup 0)
+ (compare
+ (and:SI
+@@ -9108,11 +9652,11 @@
+ [(match_operand:SI 4 "s_register_operand" "r,r,r")
+ (match_operand:SI 5 "arm_add_operand" "rIL,rIL,rIL")])))
+ (clobber (reg:CC CC_REGNUM))]
+- "TARGET_ARM
++ "TARGET_32BIT
+ && (arm_select_dominance_cc_mode (operands[3], operands[6], DOM_CC_X_AND_Y)
+ == CCmode)"
+ "#"
+- "TARGET_ARM && reload_completed"
++ "TARGET_32BIT && reload_completed"
+ [(parallel [(set (match_dup 0)
+ (match_op_dup 3 [(match_dup 1) (match_dup 2)]))
+ (clobber (reg:CC CC_REGNUM))])
+@@ -10222,6 +10766,8 @@
+ ;; Push multiple registers to the stack. Registers are in parallel (use ...)
+ ;; expressions. For simplicity, the first register is also in the unspec
+ ;; part.
++;; To avoid the usage of GNU extension, the length attribute is computed
++;; in a C function arm_attr_length_push_multi.
+ (define_insn "*push_multi"
+ [(match_parallel 2 "multi_register_push"
+ [(set (match_operand:BLK 0 "memory_operand" "=m")
+@@ -10261,7 +10807,9 @@
+
+ return \"\";
+ }"
+- [(set_attr "type" "store4")]
++ [(set_attr "type" "store4")
++ (set (attr "length")
++ (symbol_ref "arm_attr_length_push_multi (operands[2], operands[1])"))]
+ )
+
+ (define_insn "stack_tie"
+--- a/src/gcc/config/arm/arm.opt
++++ b/src/gcc/config/arm/arm.opt
+@@ -48,6 +48,11 @@
+ Target RejectNegative Joined
+ Specify the name of the target architecture
+
++; Other arm_arch values are loaded from arm-tables.opt
++; but that is a generated file and this is an odd-one-out.
++EnumValue
++Enum(arm_arch) String(native) Value(-1) DriverOnly
++
+ marm
+ Target RejectNegative InverseMask(THUMB) Undocumented
+
+@@ -153,14 +158,23 @@
+ Target RejectNegative Joined
+ Tune code for the given processor
+
++; Other processor_type values are loaded from arm-tables.opt
++; but that is a generated file and this is an odd-one-out.
++EnumValue
++Enum(processor_type) String(native) Value(-1) DriverOnly
++
+ mwords-little-endian
+ Target Report RejectNegative Mask(LITTLE_WORDS)
+ Assume big endian bytes, little endian words
+
+ mvectorize-with-neon-quad
+-Target Report Mask(NEON_VECTORIZE_QUAD)
++Target Report RejectNegative InverseMask(NEON_VECTORIZE_DOUBLE)
+ Use Neon quad-word (rather than double-word) registers for vectorization
+
++mvectorize-with-neon-double
++Target Report RejectNegative Mask(NEON_VECTORIZE_DOUBLE)
++Use Neon double-word (rather than quad-word) registers for vectorization
++
+ mword-relocations
+ Target Report Var(target_word_relocations) Init(TARGET_DEFAULT_WORD_RELOCATIONS)
+ Only generate absolute relocations on word sized values.
+@@ -169,3 +183,7 @@
+ Target Report Var(fix_cm3_ldrd) Init(2)
+ Avoid overlapping destination and address registers on LDRD instructions
+ that may trigger Cortex-M3 errata.
++
++munaligned-access
++Target Report Var(unaligned_access) Init(2)
++Enable unaligned word and halfword accesses to packed data.
+--- a/src/gcc/config/arm/bpabi.h
++++ b/src/gcc/config/arm/bpabi.h
+@@ -56,7 +56,8 @@
+ "|march=armv4|mcpu=fa526|mcpu=fa626:--fix-v4bx}"
+
+ #define BE8_LINK_SPEC " %{mbig-endian:%{march=armv7-a|mcpu=cortex-a5"\
+- "|mcpu=cortex-a8|mcpu=cortex-a9|mcpu=cortex-a15:%{!r:--be8}}}"
++ "|mcpu=cortex-a8|mcpu=cortex-a9|mcpu=cortex-a15|mcpu=generic-armv7-a"\
++ ":%{!r:--be8}}}"
+
+ /* Tell the assembler to build BPABI binaries. */
+ #undef SUBTARGET_EXTRA_ASM_SPEC
+--- a/src/gcc/config/arm/constraints.md
++++ b/src/gcc/config/arm/constraints.md
+@@ -31,11 +31,12 @@
+ ;; The following multi-letter normal constraints have been used:
+ ;; in ARM/Thumb-2 state: Da, Db, Dc, Dn, Dl, DL, Dv, Dy, Di, Dz
+ ;; in Thumb-1 state: Pa, Pb, Pc, Pd
+-;; in Thumb-2 state: Ps, Pt, Pu, Pv, Pw, Px
++;; in Thumb-2 state: Pj, PJ, Ps, Pt, Pu, Pv, Pw, Px, Py
+
+ ;; The following memory constraints have been used:
+ ;; in ARM/Thumb-2 state: Q, Ut, Uv, Uy, Un, Um, Us
+ ;; in ARM state: Uq
++;; in Thumb state: Uu, Uw
+
+
+ (define_register_constraint "f" "TARGET_ARM ? FPA_REGS : NO_REGS"
+@@ -74,6 +75,18 @@
+ (and (match_code "const_int")
+ (match_test "(ival & 0xffff0000) == 0")))))
+
++(define_constraint "Pj"
++ "@internal A 12-bit constant suitable for an ADDW or SUBW instruction. (Thumb-2)"
++ (and (match_code "const_int")
++ (and (match_test "TARGET_THUMB2")
++ (match_test "(ival & 0xfffff000) == 0"))))
++
++(define_constraint "PJ"
++ "@internal A constant that satisfies the Pj constrant if negated."
++ (and (match_code "const_int")
++ (and (match_test "TARGET_THUMB2")
++ (match_test "((-ival) & 0xfffff000) == 0"))))
++
+ (define_register_constraint "k" "STACK_REG"
+ "@internal The stack register.")
+
+@@ -189,6 +202,11 @@
+ (and (match_code "const_int")
+ (match_test "TARGET_THUMB2 && ival >= -7 && ival <= -1")))
+
++(define_constraint "Py"
++ "@internal In Thumb-2 state a constant in the range 0 to 255"
++ (and (match_code "const_int")
++ (match_test "TARGET_THUMB2 && ival >= 0 && ival <= 255")))
++
+ (define_constraint "G"
+ "In ARM/Thumb-2 state a valid FPA immediate constant."
+ (and (match_code "const_double")
+@@ -327,6 +345,27 @@
+ (and (match_code "mem")
+ (match_test "REG_P (XEXP (op, 0))")))
+
++(define_memory_constraint "Uu"
++ "@internal
++ In Thumb state an address that is valid in 16bit encoding."
++ (and (match_code "mem")
++ (match_test "TARGET_THUMB
++ && thumb1_legitimate_address_p (GET_MODE (op), XEXP (op, 0),
++ 0)")))
++
++; The 16-bit post-increment LDR/STR accepted by thumb1_legitimate_address_p
++; are actually LDM/STM instructions, so cannot be used to access unaligned
++; data.
++(define_memory_constraint "Uw"
++ "@internal
++ In Thumb state an address that is valid in 16bit encoding, and that can be
++ used for unaligned accesses."
++ (and (match_code "mem")
++ (match_test "TARGET_THUMB
++ && thumb1_legitimate_address_p (GET_MODE (op), XEXP (op, 0),
++ 0)
++ && GET_CODE (XEXP (op, 0)) != POST_INC")))
++
+ ;; We used to have constraint letters for S and R in ARM state, but
+ ;; all uses of these now appear to have been removed.
+
+--- a/src/gcc/config/arm/cortex-a15.md
++++ b/src/gcc/config/arm/cortex-a15.md
+@@ -0,0 +1,186 @@
++;; ARM Cortex-A15 pipeline description
++;; Copyright (C) 2011 Free Software Foundation, Inc.
++;;
++;; Written by Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
++
++;; 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 3, 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 COPYING3. If not see
++;; <http://www.gnu.org/licenses/>.
++
++(define_automaton "cortex_a15")
++
++;; The Cortex-A15 core is modelled as a triple issue pipeline that has
++;; the following dispatch units.
++;; 1. Two pipelines for simple integer operations: SX1, SX2
++;; 2. Two pipelines for Neon and FP data-processing operations: CX1, CX2
++;; 3. One pipeline for branch operations: BX
++;; 4. One pipeline for integer multiply and divide operations: MX
++;; 5. Two pipelines for load and store operations: LS1, LS2
++;;
++;; We can issue into three pipelines per-cycle.
++;;
++;; We assume that where we have unit pairs xx1 is always filled before xx2.
++
++;; The three issue units
++(define_cpu_unit "ca15_i0, ca15_i1, ca15_i2" "cortex_a15")
++
++(define_reservation "ca15_issue1" "(ca15_i0|ca15_i1|ca15_i2)")
++(define_reservation "ca15_issue2" "((ca15_i0+ca15_i1)|(ca15_i1+ca15_i2))")
++(define_reservation "ca15_issue3" "(ca15_i0+ca15_i1+ca15_i2)")
++(final_presence_set "ca15_i1" "ca15_i0")
++(final_presence_set "ca15_i2" "ca15_i1")
++
++;; The main dispatch units
++(define_cpu_unit "ca15_sx1, ca15_sx2" "cortex_a15")
++(define_cpu_unit "ca15_cx1, ca15_cx2" "cortex_a15")
++(define_cpu_unit "ca15_ls1, ca15_ls2" "cortex_a15")
++(define_cpu_unit "ca15_bx, ca15_mx" "cortex_a15")
++
++(define_reservation "ca15_ls" "(ca15_ls1|ca15_ls2)")
++
++;; The extended load-store pipeline
++(define_cpu_unit "ca15_ldr, ca15_str" "cortex_a15")
++
++;; The extended ALU pipeline
++(define_cpu_unit "ca15_sx1_alu, ca15_sx1_shf, ca15_sx1_sat" "cortex_a15")
++(define_cpu_unit "ca15_sx2_alu, ca15_sx2_shf, ca15_sx2_sat" "cortex_a15")
++
++;; Simple Execution Unit:
++;;
++;; Simple ALU without shift
++(define_insn_reservation "cortex_a15_alu" 2
++ (and (eq_attr "tune" "cortexa15")
++ (and (eq_attr "type" "alu")
++ (eq_attr "neon_type" "none")))
++ "ca15_issue1,(ca15_sx1,ca15_sx1_alu)|(ca15_sx2,ca15_sx2_alu)")
++
++;; ALU ops with immediate shift
++(define_insn_reservation "cortex_a15_alu_shift" 3
++ (and (eq_attr "tune" "cortexa15")
++ (and (eq_attr "type" "alu_shift")
++ (eq_attr "neon_type" "none")))
++ "ca15_issue1,(ca15_sx1,ca15_sx1+ca15_sx1_shf,ca15_sx1_alu)\
++ |(ca15_sx2,ca15_sx2+ca15_sx2_shf,ca15_sx2_alu)")
++
++;; ALU ops with register controlled shift
++(define_insn_reservation "cortex_a15_alu_shift_reg" 3
++ (and (eq_attr "tune" "cortexa15")
++ (and (eq_attr "type" "alu_shift_reg")
++ (eq_attr "neon_type" "none")))
++ "(ca15_issue2,ca15_sx1+ca15_sx2,ca15_sx1_shf,ca15_sx2_alu)\
++ |(ca15_issue1,(ca15_issue1+ca15_sx2,ca15_sx1+ca15_sx2_shf)\
++ |(ca15_issue1+ca15_sx1,ca15_sx1+ca15_sx1_shf),ca15_sx1_alu)")
++
++;; Multiply Execution Unit:
++;;
++;; 32-bit multiplies
++(define_insn_reservation "cortex_a15_mult32" 3
++ (and (eq_attr "tune" "cortexa15")
++ (and (eq_attr "type" "mult")
++ (and (eq_attr "neon_type" "none")
++ (eq_attr "mul64" "no"))))
++ "ca15_issue1,ca15_mx")
++
++;; 64-bit multiplies
++(define_insn_reservation "cortex_a15_mult64" 4
++ (and (eq_attr "tune" "cortexa15")
++ (and (eq_attr "type" "mult")
++ (and (eq_attr "neon_type" "none")
++ (eq_attr "mul64" "yes"))))
++ "ca15_issue1,ca15_mx*2")
++
++;; Integer divide
++(define_insn_reservation "cortex_a15_udiv" 9
++ (and (eq_attr "tune" "cortexa15")
++ (eq_attr "insn" "udiv"))
++ "ca15_issue1,ca15_mx")
++
++(define_insn_reservation "cortex_a15_sdiv" 10
++ (and (eq_attr "tune" "cortexa15")
++ (eq_attr "insn" "sdiv"))
++ "ca15_issue1,ca15_mx")
++
++;; Block all issue pipes for a cycle
++(define_insn_reservation "cortex_a15_block" 1
++ (and (eq_attr "tune" "cortexa15")
++ (and (eq_attr "type" "block")
++ (eq_attr "neon_type" "none")))
++ "ca15_issue3")
++
++;; Branch execution Unit
++;;
++;; Branches take one issue slot.
++;; No latency as there is no result
++(define_insn_reservation "cortex_a15_branch" 0
++ (and (eq_attr "tune" "cortexa15")
++ (and (eq_attr "type" "branch")
++ (eq_attr "neon_type" "none")))
++ "ca15_issue1,ca15_bx")
++
++
++;; We lie with calls. They take up all issue slots, and form a block in the
++;; pipeline. The result however is available the next cycle.
++;;
++;; Addition of new units requires this to be updated.
++(define_insn_reservation "cortex_a15_call" 1
++ (and (eq_attr "tune" "cortexa15")
++ (and (eq_attr "type" "call")
++ (eq_attr "neon_type" "none")))
++ "ca15_issue3,\
++ ca15_sx1+ca15_sx2+ca15_bx+ca15_mx+ca15_cx1+ca15_cx2+ca15_ls1+ca15_ls2,\
++ ca15_sx1_alu+ca15_sx1_shf+ca15_sx1_sat+ca15_sx2_alu+ca15_sx2_shf\
++ +ca15_sx2_sat+ca15_ldr+ca15_str")
++
++;; Load-store execution Unit
++;;
++;; Loads of up to two words.
++(define_insn_reservation "cortex_a15_load1" 4
++ (and (eq_attr "tune" "cortexa15")
++ (and (eq_attr "type" "load_byte,load1,load2")
++ (eq_attr "neon_type" "none")))
++ "ca15_issue1,ca15_ls,ca15_ldr,nothing")
++
++;; Loads of three or four words.
++(define_insn_reservation "cortex_a15_load3" 5
++ (and (eq_attr "tune" "cortexa15")
++ (and (eq_attr "type" "load3,load4")
++ (eq_attr "neon_type" "none")))
++ "ca15_issue2,ca15_ls1+ca15_ls2,ca15_ldr,ca15_ldr,nothing")
++
++;; Stores of up to two words.
++(define_insn_reservation "cortex_a15_store1" 0
++ (and (eq_attr "tune" "cortexa15")
++ (and (eq_attr "type" "store1,store2")
++ (eq_attr "neon_type" "none")))
++ "ca15_issue1,ca15_ls,ca15_str")
++
++;; Stores of three or four words.
++(define_insn_reservation "cortex_a15_store3" 0
++ (and (eq_attr "tune" "cortexa15")
++ (and (eq_attr "type" "store3,store4")
++ (eq_attr "neon_type" "none")))
++ "ca15_issue2,ca15_ls1+ca15_ls2,ca15_str,ca15_str")
++
++;; Simple execution unit bypasses
++(define_bypass 1 "cortex_a15_alu"
++ "cortex_a15_alu,cortex_a15_alu_shift,cortex_a15_alu_shift_reg")
++(define_bypass 2 "cortex_a15_alu_shift"
++ "cortex_a15_alu,cortex_a15_alu_shift,cortex_a15_alu_shift_reg")
++(define_bypass 2 "cortex_a15_alu_shift_reg"
++ "cortex_a15_alu,cortex_a15_alu_shift,cortex_a15_alu_shift_reg")
++(define_bypass 1 "cortex_a15_alu" "cortex_a15_load1,cortex_a15_load3")
++(define_bypass 2 "cortex_a15_alu_shift" "cortex_a15_load1,cortex_a15_load3")
++(define_bypass 2 "cortex_a15_alu_shift_reg"
++ "cortex_a15_load1,cortex_a15_load3")
+--- a/src/gcc/config/arm/cortex-a9.md
++++ b/src/gcc/config/arm/cortex-a9.md
+@@ -68,7 +68,8 @@
+ "cortex_a9_mac_m1*2, cortex_a9_mac_m2, cortex_a9_p0_wb")
+ (define_reservation "cortex_a9_mac"
+ "cortex_a9_multcycle1*2 ,cortex_a9_mac_m2, cortex_a9_p0_wb")
+-
++(define_reservation "cortex_a9_mult_long"
++ "cortex_a9_mac_m1*3, cortex_a9_mac_m2, cortex_a9_p0_wb")
+
+ ;; Issue at the same time along the load store pipeline and
+ ;; the VFP / Neon pipeline is not possible.
+@@ -139,29 +140,35 @@
+ (eq_attr "insn" "smlaxy"))
+ "cortex_a9_mac16")
+
+-
+ (define_insn_reservation "cortex_a9_multiply" 4
+ (and (eq_attr "tune" "cortexa9")
+- (eq_attr "insn" "mul"))
++ (eq_attr "insn" "mul,smmul,smmulr"))
+ "cortex_a9_mult")
+
+ (define_insn_reservation "cortex_a9_mac" 4
+ (and (eq_attr "tune" "cortexa9")
+- (eq_attr "insn" "mla"))
++ (eq_attr "insn" "mla,smmla"))
+ "cortex_a9_mac")
+
++(define_insn_reservation "cortex_a9_multiply_long" 5
++ (and (eq_attr "tune" "cortexa9")
++ (eq_attr "insn" "smull,umull,smulls,umulls,smlal,smlals,umlal,umlals"))
++ "cortex_a9_mult_long")
++
+ ;; An instruction with a result in E2 can be forwarded
+ ;; to E2 or E1 or M1 or the load store unit in the next cycle.
+
+ (define_bypass 1 "cortex_a9_dp"
+ "cortex_a9_dp_shift, cortex_a9_multiply,
+ cortex_a9_load1_2, cortex_a9_dp, cortex_a9_store1_2,
+- cortex_a9_mult16, cortex_a9_mac16, cortex_a9_mac, cortex_a9_store3_4, cortex_a9_load3_4")
++ cortex_a9_mult16, cortex_a9_mac16, cortex_a9_mac, cortex_a9_store3_4, cortex_a9_load3_4,
++ cortex_a9_multiply_long")
+
+ (define_bypass 2 "cortex_a9_dp_shift"
+ "cortex_a9_dp_shift, cortex_a9_multiply,
+ cortex_a9_load1_2, cortex_a9_dp, cortex_a9_store1_2,
+- cortex_a9_mult16, cortex_a9_mac16, cortex_a9_mac, cortex_a9_store3_4, cortex_a9_load3_4")
++ cortex_a9_mult16, cortex_a9_mac16, cortex_a9_mac, cortex_a9_store3_4, cortex_a9_load3_4,
++ cortex_a9_multiply_long")
+
+ ;; An instruction in the load store pipeline can provide
+ ;; read access to a DP instruction in the P0 default pipeline
+@@ -212,7 +219,7 @@
+
+ (define_bypass 1
+ "cortex_a9_fps"
+- "cortex_a9_fadd, cortex_a9_fps, cortex_a9_fcmp, cortex_a9_dp, cortex_a9_dp_shift, cortex_a9_multiply")
++ "cortex_a9_fadd, cortex_a9_fps, cortex_a9_fcmp, cortex_a9_dp, cortex_a9_dp_shift, cortex_a9_multiply, cortex_a9_multiply_long")
+
+ ;; Scheduling on the FP_ADD pipeline.
+ (define_reservation "ca9fp_add" "ca9_issue_vfp_neon + ca9fp_add1, ca9fp_add2, ca9fp_add3, ca9fp_add4")
+--- a/src/gcc/config/arm/driver-arm.c
++++ b/src/gcc/config/arm/driver-arm.c
+@@ -0,0 +1,149 @@
++/* Subroutines for the gcc driver.
++ Copyright (C) 2011 Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 3, 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 COPYING3. If not see
++<http://www.gnu.org/licenses/>. */
++
++#include "config.h"
++#include "system.h"
++#include "coretypes.h"
++#include "tm.h"
++#include "configargs.h"
++
++struct vendor_cpu {
++ const char *part_no;
++ const char *arch_name;
++ const char *cpu_name;
++};
++
++static struct vendor_cpu arm_cpu_table[] = {
++ {"0x926", "armv5te", "arm926ej-s"},
++ {"0xa26", "armv5te", "arm1026ej-s"},
++ {"0xb02", "armv6k", "mpcore"},
++ {"0xb36", "armv6j", "arm1136j-s"},
++ {"0xb56", "armv6t2", "arm1156t2-s"},
++ {"0xb76", "armv6zk", "arm1176jz-s"},
++ {"0xc05", "armv7-a", "cortex-a5"},
++ {"0xc08", "armv7-a", "cortex-a8"},
++ {"0xc09", "armv7-a", "cortex-a9"},
++ {"0xc0f", "armv7-a", "cortex-a15"},
++ {"0xc14", "armv7-r", "cortex-r4"},
++ {"0xc15", "armv7-r", "cortex-r5"},
++ {"0xc20", "armv6-m", "cortex-m0"},
++ {"0xc21", "armv6-m", "cortex-m1"},
++ {"0xc23", "armv7-m", "cortex-m3"},
++ {"0xc24", "armv7e-m", "cortex-m4"},
++ {NULL, NULL, NULL}
++};
++
++static struct {
++ const char *vendor_no;
++ const struct vendor_cpu *vendor_parts;
++} vendors[] = {
++ {"0x41", arm_cpu_table},
++ {NULL, NULL}
++};
++
++/* This will be called by the spec parser in gcc.c when it sees
++ a %:local_cpu_detect(args) construct. Currently it will be called
++ with either "arch", "cpu" or "tune" as argument depending on if
++ -march=native, -mcpu=native or -mtune=native is to be substituted.
++
++ It returns a string containing new command line parameters to be
++ put at the place of the above two options, depending on what CPU
++ this is executed. E.g. "-march=armv7-a" on a Cortex-A8 for
++ -march=native. If the routine can't detect a known processor,
++ the -march or -mtune option is discarded.
++
++ ARGC and ARGV are set depending on the actual arguments given
++ in the spec. */
++const char *
++host_detect_local_cpu (int argc, const char **argv)
++{
++ const char *val = NULL;
++ char buf[128];
++ FILE *f = NULL;
++ bool arch;
++ const struct vendor_cpu *cpu_table = NULL;
++
++ if (argc < 1)
++ goto not_found;
++
++ arch = strcmp (argv[0], "arch") == 0;
++ if (!arch && strcmp (argv[0], "cpu") != 0 && strcmp (argv[0], "tune"))
++ goto not_found;
++
++ f = fopen ("/proc/cpuinfo", "r");
++ if (f == NULL)
++ goto not_found;
++
++ while (fgets (buf, sizeof (buf), f) != NULL)
++ {
++ /* Ensure that CPU implementer is ARM (0x41). */
++ if (strncmp (buf, "CPU implementer", sizeof ("CPU implementer") - 1) == 0)
++ {
++ int i;
++ for (i = 0; vendors[i].vendor_no != NULL; i++)
++ if (strstr (buf, vendors[i].vendor_no) != NULL)
++ {
++ cpu_table = vendors[i].vendor_parts;
++ break;
++ }
++ }
++
++ /* Detect arch/cpu. */
++ if (strncmp (buf, "CPU part", sizeof ("CPU part") - 1) == 0)
++ {
++ int i;
++
++ if (cpu_table == NULL)
++ goto not_found;
++
++ for (i = 0; cpu_table[i].part_no != NULL; i++)
++ if (strstr (buf, cpu_table[i].part_no) != NULL)
++ {
++ val = arch ? cpu_table[i].arch_name : cpu_table[i].cpu_name;
++ break;
++ }
++ break;
++ }
++ }
++
++ fclose (f);
++
++ if (val == NULL)
++ goto not_found;
++
++ return concat ("-m", argv[0], "=", val, NULL);
++
++not_found:
++ {
++ unsigned int i;
++ unsigned int opt;
++ const char *search[] = {NULL, "arch"};
++
++ if (f)
++ fclose (f);
++
++ search[0] = argv[0];
++ for (opt = 0; opt < ARRAY_SIZE (search); opt++)
++ for (i = 0; i < ARRAY_SIZE (configure_default_options); i++)
++ if (strcmp (configure_default_options[i].name, search[opt]) == 0)
++ return concat ("-m", search[opt], "=",
++ configure_default_options[i].value, NULL);
++ return NULL;
++ }
++}
+--- a/src/gcc/config/arm/elf.h
++++ b/src/gcc/config/arm/elf.h
+@@ -56,8 +56,7 @@
+ #define ASM_SPEC "\
+ %{mbig-endian:-EB} \
+ %{mlittle-endian:-EL} \
+-%{mcpu=*:-mcpu=%*} \
+-%{march=*:-march=%*} \
++%(asm_cpu_spec) \
+ %{mapcs-*:-mapcs-%*} \
+ %(subtarget_asm_float_spec) \
+ %{mthumb-interwork:-mthumb-interwork} \
+--- a/src/gcc/config/arm/iterators.md
++++ b/src/gcc/config/arm/iterators.md
+@@ -33,6 +33,15 @@
+ ;; A list of integer modes that are up to one word long
+ (define_mode_iterator QHSI [QI HI SI])
+
++;; A list of integer modes that are less than a word
++(define_mode_iterator NARROW [QI HI])
++
++;; A list of all the integer modes upto 64bit
++(define_mode_iterator QHSD [QI HI SI DI])
++
++;; A list of the 32bit and 64bit integer modes
++(define_mode_iterator SIDI [SI DI])
++
+ ;; Integer element sizes implemented by IWMMXT.
+ (define_mode_iterator VMMX [V2SI V4HI V8QI])
+
+@@ -194,24 +203,22 @@
+
+ ;; Mode of pair of elements for each vector mode, to define transfer
+ ;; size for structure lane/dup loads and stores.
+-(define_mode_attr V_two_elem [(V8QI "HI") (V16QI "HI")
+- (V4HI "SI") (V8HI "SI")
++(define_mode_attr V_two_elem [(V8QI "HI") (V16QI "HI")
++ (V4HI "SI") (V8HI "SI")
+ (V2SI "V2SI") (V4SI "V2SI")
+ (V2SF "V2SF") (V4SF "V2SF")
+ (DI "V2DI") (V2DI "V2DI")])
+
+ ;; Similar, for three elements.
+-;; ??? Should we define extra modes so that sizes of all three-element
+-;; accesses can be accurately represented?
+-(define_mode_attr V_three_elem [(V8QI "SI") (V16QI "SI")
+- (V4HI "V4HI") (V8HI "V4HI")
+- (V2SI "V4SI") (V4SI "V4SI")
+- (V2SF "V4SF") (V4SF "V4SF")
+- (DI "EI") (V2DI "EI")])
++(define_mode_attr V_three_elem [(V8QI "BLK") (V16QI "BLK")
++ (V4HI "BLK") (V8HI "BLK")
++ (V2SI "BLK") (V4SI "BLK")
++ (V2SF "BLK") (V4SF "BLK")
++ (DI "EI") (V2DI "EI")])
+
+ ;; Similar, for four elements.
+ (define_mode_attr V_four_elem [(V8QI "SI") (V16QI "SI")
+- (V4HI "V4HI") (V8HI "V4HI")
++ (V4HI "V4HI") (V8HI "V4HI")
+ (V2SI "V4SI") (V4SI "V4SI")
+ (V2SF "V4SF") (V4SF "V4SF")
+ (DI "OI") (V2DI "OI")])
+@@ -381,10 +388,17 @@
+ (define_mode_attr qhs_zextenddi_cond [(SI "") (HI "&& arm_arch6") (QI "")])
+ (define_mode_attr qhs_sextenddi_cond [(SI "") (HI "&& arm_arch6")
+ (QI "&& arm_arch6")])
+-(define_mode_attr qhs_extenddi_op [(SI "s_register_operand")
++(define_mode_attr qhs_zextenddi_op [(SI "s_register_operand")
+ (HI "nonimmediate_operand")
+ (QI "nonimmediate_operand")])
+-(define_mode_attr qhs_extenddi_cstr [(SI "r") (HI "rm") (QI "rm")])
++(define_mode_attr qhs_extenddi_op [(SI "s_register_operand")
++ (HI "nonimmediate_operand")
++ (QI "arm_reg_or_extendqisi_mem_op")])
++(define_mode_attr qhs_extenddi_cstr [(SI "r") (HI "rm") (QI "rUq")])
++(define_mode_attr qhs_zextenddi_cstr [(SI "r") (HI "rm") (QI "rm")])
++
++;; Mode attribute for vshll.
++(define_mode_attr V_innermode [(V8QI "QI") (V4HI "HI") (V2SI "SI")])
+
+ ;;----------------------------------------------------------------------------
+ ;; Code attributes
+--- a/src/gcc/config/arm/linux-atomic-64bit.c
++++ b/src/gcc/config/arm/linux-atomic-64bit.c
+@@ -0,0 +1,166 @@
++/* 64bit Linux-specific atomic operations for ARM EABI.
++ Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
++ Based on linux-atomic.c
++
++ 64 bit additions david.gilbert@linaro.org
++
++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 3, 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.
++
++Under Section 7 of GPL version 3, you are granted additional
++permissions described in the GCC Runtime Library Exception, version
++3.1, as published by the Free Software Foundation.
++
++You should have received a copy of the GNU General Public License and
++a copy of the GCC Runtime Library Exception along with this program;
++see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
++<http://www.gnu.org/licenses/>. */
++
++/* 64bit helper functions for atomic operations; the compiler will
++ call these when the code is compiled for a CPU without ldrexd/strexd.
++ (If the CPU had those then the compiler inlines the operation).
++
++ These helpers require a kernel helper that's only present on newer
++ kernels; we check for that in an init section and bail out rather
++ unceremoneously. */
++
++extern unsigned int __write (int fd, const void *buf, unsigned int count);
++extern void abort (void);
++
++/* Kernel helper for compare-and-exchange. */
++typedef int (__kernel_cmpxchg64_t) (const long long* oldval,
++ const long long* newval,
++ long long *ptr);
++#define __kernel_cmpxchg64 (*(__kernel_cmpxchg64_t *) 0xffff0f60)
++
++/* Kernel helper page version number. */
++#define __kernel_helper_version (*(unsigned int *)0xffff0ffc)
++
++/* Check that the kernel has a new enough version at load. */
++static void __check_for_sync8_kernelhelper (void)
++{
++ if (__kernel_helper_version < 5)
++ {
++ const char err[] = "A newer kernel is required to run this binary. "
++ "(__kernel_cmpxchg64 helper)\n";
++ /* At this point we need a way to crash with some information
++ for the user - I'm not sure I can rely on much else being
++ available at this point, so do the same as generic-morestack.c
++ write () and abort (). */
++ __write (2 /* stderr. */, err, sizeof (err));
++ abort ();
++ }
++};
++
++static void (*__sync8_kernelhelper_inithook[]) (void)
++ __attribute__ ((used, section (".init_array"))) = {
++ &__check_for_sync8_kernelhelper
++};
++
++#define HIDDEN __attribute__ ((visibility ("hidden")))
++
++#define FETCH_AND_OP_WORD64(OP, PFX_OP, INF_OP) \
++ long long HIDDEN \
++ __sync_fetch_and_##OP##_8 (long long *ptr, long long val) \
++ { \
++ int failure; \
++ long long tmp,tmp2; \
++ \
++ do { \
++ tmp = *ptr; \
++ tmp2 = PFX_OP (tmp INF_OP val); \
++ failure = __kernel_cmpxchg64 (&tmp, &tmp2, ptr); \
++ } while (failure != 0); \
++ \
++ return tmp; \
++ }
++
++FETCH_AND_OP_WORD64 (add, , +)
++FETCH_AND_OP_WORD64 (sub, , -)
++FETCH_AND_OP_WORD64 (or, , |)
++FETCH_AND_OP_WORD64 (and, , &)
++FETCH_AND_OP_WORD64 (xor, , ^)
++FETCH_AND_OP_WORD64 (nand, ~, &)
++
++#define NAME_oldval(OP, WIDTH) __sync_fetch_and_##OP##_##WIDTH
++#define NAME_newval(OP, WIDTH) __sync_##OP##_and_fetch_##WIDTH
++
++/* Implement both __sync_<op>_and_fetch and __sync_fetch_and_<op> for
++ subword-sized quantities. */
++
++#define OP_AND_FETCH_WORD64(OP, PFX_OP, INF_OP) \
++ long long HIDDEN \
++ __sync_##OP##_and_fetch_8 (long long *ptr, long long val) \
++ { \
++ int failure; \
++ long long tmp,tmp2; \
++ \
++ do { \
++ tmp = *ptr; \
++ tmp2 = PFX_OP (tmp INF_OP val); \
++ failure = __kernel_cmpxchg64 (&tmp, &tmp2, ptr); \
++ } while (failure != 0); \
++ \
++ return tmp2; \
++ }
++
++OP_AND_FETCH_WORD64 (add, , +)
++OP_AND_FETCH_WORD64 (sub, , -)
++OP_AND_FETCH_WORD64 (or, , |)
++OP_AND_FETCH_WORD64 (and, , &)
++OP_AND_FETCH_WORD64 (xor, , ^)
++OP_AND_FETCH_WORD64 (nand, ~, &)
++
++long long HIDDEN
++__sync_val_compare_and_swap_8 (long long *ptr, long long oldval,
++ long long newval)
++{
++ int failure;
++ long long actual_oldval;
++
++ while (1)
++ {
++ actual_oldval = *ptr;
++
++ if (__builtin_expect (oldval != actual_oldval, 0))
++ return actual_oldval;
++
++ failure = __kernel_cmpxchg64 (&actual_oldval, &newval, ptr);
++
++ if (__builtin_expect (!failure, 1))
++ return oldval;
++ }
++}
++
++typedef unsigned char bool;
++
++bool HIDDEN
++__sync_bool_compare_and_swap_8 (long long *ptr, long long oldval,
++ long long newval)
++{
++ int failure = __kernel_cmpxchg64 (&oldval, &newval, ptr);
++ return (failure == 0);
++}
++
++long long HIDDEN
++__sync_lock_test_and_set_8 (long long *ptr, long long val)
++{
++ int failure;
++ long long oldval;
++
++ do {
++ oldval = *ptr;
++ failure = __kernel_cmpxchg64 (&oldval, &val, ptr);
++ } while (failure != 0);
++
++ return oldval;
++}
+--- a/src/gcc/config/arm/linux-atomic.c
++++ b/src/gcc/config/arm/linux-atomic.c
+@@ -32,8 +32,8 @@
+ #define __kernel_dmb (*(__kernel_dmb_t *) 0xffff0fa0)
+
+ /* Note: we implement byte, short and int versions of atomic operations using
+- the above kernel helpers, but there is no support for "long long" (64-bit)
+- operations as yet. */
++ the above kernel helpers; see linux-atomic-64bit.c for "long long" (64-bit)
++ operations. */
+
+ #define HIDDEN __attribute__ ((visibility ("hidden")))
+
+@@ -273,6 +273,7 @@
+ *ptr = 0; \
+ }
+
++SYNC_LOCK_RELEASE (long long, 8)
+ SYNC_LOCK_RELEASE (int, 4)
+ SYNC_LOCK_RELEASE (short, 2)
+ SYNC_LOCK_RELEASE (char, 1)
+--- a/src/gcc/config/arm/neon-testgen.ml
++++ b/src/gcc/config/arm/neon-testgen.ml
+@@ -177,7 +177,7 @@
+ let alt2 = commas (fun x -> x) (n_things n elt_regexp) "" in
+ "\\\\\\{((" ^ alt1 ^ ")|(" ^ alt2 ^ "))\\\\\\}"
+ | (PtrTo elt | CstPtrTo elt) ->
+- "\\\\\\[" ^ (analyze_shape_elt elt) ^ "\\\\\\]"
++ "\\\\\\[" ^ (analyze_shape_elt elt) ^ "\\(:\\[0-9\\]+\\)?\\\\\\]"
+ | Element_of_dreg -> (analyze_shape_elt Dreg) ^ "\\\\\\[\\[0-9\\]+\\\\\\]"
+ | Element_of_qreg -> (analyze_shape_elt Qreg) ^ "\\\\\\[\\[0-9\\]+\\\\\\]"
+ | All_elements_of_dreg -> (analyze_shape_elt Dreg) ^ "\\\\\\[\\\\\\]"
+--- a/src/gcc/config/arm/neon.md
++++ b/src/gcc/config/arm/neon.md
+@@ -783,30 +783,57 @@
+
+ (define_insn "orn<mode>3_neon"
+ [(set (match_operand:VDQ 0 "s_register_operand" "=w")
+- (ior:VDQ (match_operand:VDQ 1 "s_register_operand" "w")
+- (not:VDQ (match_operand:VDQ 2 "s_register_operand" "w"))))]
++ (ior:VDQ (not:VDQ (match_operand:VDQ 2 "s_register_operand" "w"))
++ (match_operand:VDQ 1 "s_register_operand" "w")))]
+ "TARGET_NEON"
+ "vorn\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
+ [(set_attr "neon_type" "neon_int_1")]
+ )
+
+-(define_insn "orndi3_neon"
+- [(set (match_operand:DI 0 "s_register_operand" "=w,?=&r,?&r")
+- (ior:DI (match_operand:DI 1 "s_register_operand" "w,r,0")
+- (not:DI (match_operand:DI 2 "s_register_operand" "w,0,r"))))]
++;; TODO: investigate whether we should disable
++;; this and bicdi3_neon for the A8 in line with the other
++;; changes above.
++(define_insn_and_split "orndi3_neon"
++ [(set (match_operand:DI 0 "s_register_operand" "=w,?&r,?&r,?&r")
++ (ior:DI (not:DI (match_operand:DI 2 "s_register_operand" "w,0,0,r"))
++ (match_operand:DI 1 "s_register_operand" "w,r,r,0")))]
+ "TARGET_NEON"
+ "@
+ vorn\t%P0, %P1, %P2
+ #
++ #
+ #"
+- [(set_attr "neon_type" "neon_int_1,*,*")
+- (set_attr "length" "*,8,8")]
++ "reload_completed &&
++ (TARGET_NEON && !(IS_VFP_REGNUM (REGNO (operands[0]))))"
++ [(set (match_dup 0) (ior:SI (not:SI (match_dup 2)) (match_dup 1)))
++ (set (match_dup 3) (ior:SI (not:SI (match_dup 4)) (match_dup 5)))]
++ "
++ {
++ if (TARGET_THUMB2)
++ {
++ operands[3] = gen_highpart (SImode, operands[0]);
++ operands[0] = gen_lowpart (SImode, operands[0]);
++ operands[4] = gen_highpart (SImode, operands[2]);
++ operands[2] = gen_lowpart (SImode, operands[2]);
++ operands[5] = gen_highpart (SImode, operands[1]);
++ operands[1] = gen_lowpart (SImode, operands[1]);
++ }
++ else
++ {
++ emit_insn (gen_one_cmpldi2 (operands[0], operands[2]));
++ emit_insn (gen_iordi3 (operands[0], operands[1], operands[0]));
++ DONE;
++ }
++ }"
++ [(set_attr "neon_type" "neon_int_1,*,*,*")
++ (set_attr "length" "*,16,8,8")
++ (set_attr "arch" "any,a,t2,t2")]
+ )
+
+ (define_insn "bic<mode>3_neon"
+ [(set (match_operand:VDQ 0 "s_register_operand" "=w")
+- (and:VDQ (match_operand:VDQ 1 "s_register_operand" "w")
+- (not:VDQ (match_operand:VDQ 2 "s_register_operand" "w"))))]
++ (and:VDQ (not:VDQ (match_operand:VDQ 2 "s_register_operand" "w"))
++ (match_operand:VDQ 1 "s_register_operand" "w")))]
+ "TARGET_NEON"
+ "vbic\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
+ [(set_attr "neon_type" "neon_int_1")]
+@@ -929,17 +956,59 @@
+ ; SImode elements.
+
+ (define_insn "vashl<mode>3"
++ [(set (match_operand:VDQIW 0 "s_register_operand" "=w,w")
++ (ashift:VDQIW (match_operand:VDQIW 1 "s_register_operand" "w,w")
++ (match_operand:VDQIW 2 "imm_lshift_or_reg_neon" "w,Dn")))]
++ "TARGET_NEON"
++ {
++ switch (which_alternative)
++ {
++ case 0: return "vshl.<V_s_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2";
++ case 1: return neon_output_shift_immediate ("vshl", 'i', &operands[2],
++ <MODE>mode,
++ VALID_NEON_QREG_MODE (<MODE>mode),
++ true);
++ default: gcc_unreachable ();
++ }
++ }
++ [(set (attr "neon_type")
++ (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
++ (const_string "neon_vshl_ddd")
++ (const_string "neon_shift_3")))]
++)
++
++(define_insn "vashr<mode>3_imm"
+ [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
+- (ashift:VDQIW (match_operand:VDQIW 1 "s_register_operand" "w")
+- (match_operand:VDQIW 2 "s_register_operand" "w")))]
++ (ashiftrt:VDQIW (match_operand:VDQIW 1 "s_register_operand" "w")
++ (match_operand:VDQIW 2 "imm_for_neon_rshift_operand" "Dn")))]
+ "TARGET_NEON"
+- "vshl.<V_s_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
++ {
++ return neon_output_shift_immediate ("vshr", 's', &operands[2],
++ <MODE>mode, VALID_NEON_QREG_MODE (<MODE>mode),
++ false);
++ }
+ [(set (attr "neon_type")
+ (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
+ (const_string "neon_vshl_ddd")
+ (const_string "neon_shift_3")))]
+ )
+
++(define_insn "vlshr<mode>3_imm"
++ [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
++ (lshiftrt:VDQIW (match_operand:VDQIW 1 "s_register_operand" "w")
++ (match_operand:VDQIW 2 "imm_for_neon_rshift_operand" "Dn")))]
++ "TARGET_NEON"
++ {
++ return neon_output_shift_immediate ("vshr", 'u', &operands[2],
++ <MODE>mode, VALID_NEON_QREG_MODE (<MODE>mode),
++ false);
++ }
++ [(set (attr "neon_type")
++ (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
++ (const_string "neon_vshl_ddd")
++ (const_string "neon_shift_3")))]
++)
++
+ ; Used for implementing logical shift-right, which is a left-shift by a negative
+ ; amount, with signed operands. This is essentially the same as ashl<mode>3
+ ; above, but using an unspec in case GCC tries anything tricky with negative
+@@ -977,28 +1046,34 @@
+ (define_expand "vashr<mode>3"
+ [(set (match_operand:VDQIW 0 "s_register_operand" "")
+ (ashiftrt:VDQIW (match_operand:VDQIW 1 "s_register_operand" "")
+- (match_operand:VDQIW 2 "s_register_operand" "")))]
++ (match_operand:VDQIW 2 "imm_rshift_or_reg_neon" "")))]
+ "TARGET_NEON"
+ {
+ rtx neg = gen_reg_rtx (<MODE>mode);
+-
+- emit_insn (gen_neg<mode>2 (neg, operands[2]));
+- emit_insn (gen_ashl<mode>3_signed (operands[0], operands[1], neg));
+-
++ if (REG_P (operands[2]))
++ {
++ emit_insn (gen_neg<mode>2 (neg, operands[2]));
++ emit_insn (gen_ashl<mode>3_signed (operands[0], operands[1], neg));
++ }
++ else
++ emit_insn (gen_vashr<mode>3_imm (operands[0], operands[1], operands[2]));
+ DONE;
+ })
+
+ (define_expand "vlshr<mode>3"
+ [(set (match_operand:VDQIW 0 "s_register_operand" "")
+ (lshiftrt:VDQIW (match_operand:VDQIW 1 "s_register_operand" "")
+- (match_operand:VDQIW 2 "s_register_operand" "")))]
++ (match_operand:VDQIW 2 "imm_rshift_or_reg_neon" "")))]
+ "TARGET_NEON"
+ {
+ rtx neg = gen_reg_rtx (<MODE>mode);
+-
+- emit_insn (gen_neg<mode>2 (neg, operands[2]));
+- emit_insn (gen_ashl<mode>3_unsigned (operands[0], operands[1], neg));
+-
++ if (REG_P (operands[2]))
++ {
++ emit_insn (gen_neg<mode>2 (neg, operands[2]));
++ emit_insn (gen_ashl<mode>3_unsigned (operands[0], operands[1], neg));
++ }
++ else
++ emit_insn (gen_vlshr<mode>3_imm (operands[0], operands[1], operands[2]));
+ DONE;
+ })
+
+@@ -1160,66 +1235,14 @@
+ (const_string "neon_int_1") (const_string "neon_int_5")))]
+ )
+
+-; FIXME: We wouldn't need the following insns if we could write subregs of
+-; vector registers. Make an attempt at removing unnecessary moves, though
+-; we're really at the mercy of the register allocator.
+-
+-(define_insn "neon_move_lo_quad_<mode>"
+- [(set (match_operand:ANY128 0 "s_register_operand" "+w")
+- (vec_concat:ANY128
+- (match_operand:<V_HALF> 1 "s_register_operand" "w")
+- (vec_select:<V_HALF>
+- (match_dup 0)
+- (match_operand:ANY128 2 "vect_par_constant_high" ""))))]
+- "TARGET_NEON"
+-{
+- int dest = REGNO (operands[0]);
+- int src = REGNO (operands[1]);
+-
+- if (dest != src)
+- return "vmov\t%e0, %P1";
+- else
+- return "";
+-}
+- [(set_attr "neon_type" "neon_bp_simple")]
+-)
+-
+-(define_insn "neon_move_hi_quad_<mode>"
+- [(set (match_operand:ANY128 0 "s_register_operand" "+w")
+- (vec_concat:ANY128
+- (vec_select:<V_HALF>
+- (match_dup 0)
+- (match_operand:ANY128 2 "vect_par_constant_low" ""))
+- (match_operand:<V_HALF> 1 "s_register_operand" "w")))]
+-
+- "TARGET_NEON"
+-{
+- int dest = REGNO (operands[0]);
+- int src = REGNO (operands[1]);
+-
+- if (dest != src)
+- return "vmov\t%f0, %P1";
+- else
+- return "";
+-}
+- [(set_attr "neon_type" "neon_bp_simple")]
+-)
+-
+ (define_expand "move_hi_quad_<mode>"
+ [(match_operand:ANY128 0 "s_register_operand" "")
+ (match_operand:<V_HALF> 1 "s_register_operand" "")]
+ "TARGET_NEON"
+ {
+- rtvec v = rtvec_alloc (<V_mode_nunits>/2);
+- rtx t1;
+- int i;
+-
+- for (i=0; i < (<V_mode_nunits>/2); i++)
+- RTVEC_ELT (v, i) = GEN_INT (i);
+-
+- t1 = gen_rtx_PARALLEL (<MODE>mode, v);
+- emit_insn (gen_neon_move_hi_quad_<mode> (operands[0], operands[1], t1));
+-
++ emit_move_insn (simplify_gen_subreg (<V_HALF>mode, operands[0], <MODE>mode,
++ GET_MODE_SIZE (<V_HALF>mode)),
++ operands[1]);
+ DONE;
+ })
+
+@@ -1228,16 +1251,9 @@
+ (match_operand:<V_HALF> 1 "s_register_operand" "")]
+ "TARGET_NEON"
+ {
+- rtvec v = rtvec_alloc (<V_mode_nunits>/2);
+- rtx t1;
+- int i;
+-
+- for (i=0; i < (<V_mode_nunits>/2); i++)
+- RTVEC_ELT (v, i) = GEN_INT ((<V_mode_nunits>/2) + i);
+-
+- t1 = gen_rtx_PARALLEL (<MODE>mode, v);
+- emit_insn (gen_neon_move_lo_quad_<mode> (operands[0], operands[1], t1));
+-
++ emit_move_insn (simplify_gen_subreg (<V_HALF>mode, operands[0],
++ <MODE>mode, 0),
++ operands[1]);
+ DONE;
+ })
+
+@@ -2875,183 +2891,27 @@
+ (set_attr "neon_type" "neon_bp_simple")]
+ )
+
+-(define_insn "neon_vget_highv16qi"
+- [(set (match_operand:V8QI 0 "s_register_operand" "=w")
+- (vec_select:V8QI (match_operand:V16QI 1 "s_register_operand" "w")
+- (parallel [(const_int 8) (const_int 9)
+- (const_int 10) (const_int 11)
+- (const_int 12) (const_int 13)
+- (const_int 14) (const_int 15)])))]
+- "TARGET_NEON"
+-{
+- int dest = REGNO (operands[0]);
+- int src = REGNO (operands[1]);
+-
+- if (dest != src + 2)
+- return "vmov\t%P0, %f1";
+- else
+- return "";
+-}
+- [(set_attr "neon_type" "neon_bp_simple")]
+-)
+-
+-(define_insn "neon_vget_highv8hi"
+- [(set (match_operand:V4HI 0 "s_register_operand" "=w")
+- (vec_select:V4HI (match_operand:V8HI 1 "s_register_operand" "w")
+- (parallel [(const_int 4) (const_int 5)
+- (const_int 6) (const_int 7)])))]
+- "TARGET_NEON"
+-{
+- int dest = REGNO (operands[0]);
+- int src = REGNO (operands[1]);
+-
+- if (dest != src + 2)
+- return "vmov\t%P0, %f1";
+- else
+- return "";
+-}
+- [(set_attr "neon_type" "neon_bp_simple")]
+-)
+-
+-(define_insn "neon_vget_highv4si"
+- [(set (match_operand:V2SI 0 "s_register_operand" "=w")
+- (vec_select:V2SI (match_operand:V4SI 1 "s_register_operand" "w")
+- (parallel [(const_int 2) (const_int 3)])))]
+- "TARGET_NEON"
+-{
+- int dest = REGNO (operands[0]);
+- int src = REGNO (operands[1]);
+-
+- if (dest != src + 2)
+- return "vmov\t%P0, %f1";
+- else
+- return "";
+-}
+- [(set_attr "neon_type" "neon_bp_simple")]
+-)
+-
+-(define_insn "neon_vget_highv4sf"
+- [(set (match_operand:V2SF 0 "s_register_operand" "=w")
+- (vec_select:V2SF (match_operand:V4SF 1 "s_register_operand" "w")
+- (parallel [(const_int 2) (const_int 3)])))]
+- "TARGET_NEON"
+-{
+- int dest = REGNO (operands[0]);
+- int src = REGNO (operands[1]);
+-
+- if (dest != src + 2)
+- return "vmov\t%P0, %f1";
+- else
+- return "";
+-}
+- [(set_attr "neon_type" "neon_bp_simple")]
+-)
+-
+-(define_insn "neon_vget_highv2di"
+- [(set (match_operand:DI 0 "s_register_operand" "=w")
+- (vec_select:DI (match_operand:V2DI 1 "s_register_operand" "w")
+- (parallel [(const_int 1)])))]
+- "TARGET_NEON"
+-{
+- int dest = REGNO (operands[0]);
+- int src = REGNO (operands[1]);
+-
+- if (dest != src + 2)
+- return "vmov\t%P0, %f1";
+- else
+- return "";
+-}
+- [(set_attr "neon_type" "neon_bp_simple")]
+-)
+-
+-(define_insn "neon_vget_lowv16qi"
+- [(set (match_operand:V8QI 0 "s_register_operand" "=w")
+- (vec_select:V8QI (match_operand:V16QI 1 "s_register_operand" "w")
+- (parallel [(const_int 0) (const_int 1)
+- (const_int 2) (const_int 3)
+- (const_int 4) (const_int 5)
+- (const_int 6) (const_int 7)])))]
+- "TARGET_NEON"
+-{
+- int dest = REGNO (operands[0]);
+- int src = REGNO (operands[1]);
+-
+- if (dest != src)
+- return "vmov\t%P0, %e1";
+- else
+- return "";
+-}
+- [(set_attr "neon_type" "neon_bp_simple")]
+-)
+-
+-(define_insn "neon_vget_lowv8hi"
+- [(set (match_operand:V4HI 0 "s_register_operand" "=w")
+- (vec_select:V4HI (match_operand:V8HI 1 "s_register_operand" "w")
+- (parallel [(const_int 0) (const_int 1)
+- (const_int 2) (const_int 3)])))]
+- "TARGET_NEON"
+-{
+- int dest = REGNO (operands[0]);
+- int src = REGNO (operands[1]);
+-
+- if (dest != src)
+- return "vmov\t%P0, %e1";
+- else
+- return "";
+-}
+- [(set_attr "neon_type" "neon_bp_simple")]
+-)
+-
+-(define_insn "neon_vget_lowv4si"
+- [(set (match_operand:V2SI 0 "s_register_operand" "=w")
+- (vec_select:V2SI (match_operand:V4SI 1 "s_register_operand" "w")
+- (parallel [(const_int 0) (const_int 1)])))]
+- "TARGET_NEON"
+-{
+- int dest = REGNO (operands[0]);
+- int src = REGNO (operands[1]);
+-
+- if (dest != src)
+- return "vmov\t%P0, %e1";
+- else
+- return "";
+-}
+- [(set_attr "neon_type" "neon_bp_simple")]
+-)
+-
+-(define_insn "neon_vget_lowv4sf"
+- [(set (match_operand:V2SF 0 "s_register_operand" "=w")
+- (vec_select:V2SF (match_operand:V4SF 1 "s_register_operand" "w")
+- (parallel [(const_int 0) (const_int 1)])))]
++(define_expand "neon_vget_high<mode>"
++ [(match_operand:<V_HALF> 0 "s_register_operand")
++ (match_operand:VQX 1 "s_register_operand")]
+ "TARGET_NEON"
+ {
+- int dest = REGNO (operands[0]);
+- int src = REGNO (operands[1]);
+-
+- if (dest != src)
+- return "vmov\t%P0, %e1";
+- else
+- return "";
+-}
+- [(set_attr "neon_type" "neon_bp_simple")]
+-)
++ emit_move_insn (operands[0],
++ simplify_gen_subreg (<V_HALF>mode, operands[1], <MODE>mode,
++ GET_MODE_SIZE (<V_HALF>mode)));
++ DONE;
++})
+
+-(define_insn "neon_vget_lowv2di"
+- [(set (match_operand:DI 0 "s_register_operand" "=w")
+- (vec_select:DI (match_operand:V2DI 1 "s_register_operand" "w")
+- (parallel [(const_int 0)])))]
++(define_expand "neon_vget_low<mode>"
++ [(match_operand:<V_HALF> 0 "s_register_operand")
++ (match_operand:VQX 1 "s_register_operand")]
+ "TARGET_NEON"
+ {
+- int dest = REGNO (operands[0]);
+- int src = REGNO (operands[1]);
+-
+- if (dest != src)
+- return "vmov\t%P0, %e1";
+- else
+- return "";
+-}
+- [(set_attr "neon_type" "neon_bp_simple")]
+-)
++ emit_move_insn (operands[0],
++ simplify_gen_subreg (<V_HALF>mode, operands[1],
++ <MODE>mode, 0));
++ DONE;
++})
+
+ (define_insn "neon_vcvt<mode>"
+ [(set (match_operand:<V_CVTTO> 0 "s_register_operand" "=w")
+@@ -4248,18 +4108,24 @@
+ DONE;
+ })
+
++(define_expand "vec_load_lanes<mode><mode>"
++ [(set (match_operand:VDQX 0 "s_register_operand")
++ (unspec:VDQX [(match_operand:VDQX 1 "neon_struct_operand")]
++ UNSPEC_VLD1))]
++ "TARGET_NEON")
++
+ (define_insn "neon_vld1<mode>"
+ [(set (match_operand:VDQX 0 "s_register_operand" "=w")
+- (unspec:VDQX [(mem:VDQX (match_operand:SI 1 "s_register_operand" "r"))]
++ (unspec:VDQX [(match_operand:VDQX 1 "neon_struct_operand" "Um")]
+ UNSPEC_VLD1))]
+ "TARGET_NEON"
+- "vld1.<V_sz_elem>\t%h0, [%1]"
++ "vld1.<V_sz_elem>\t%h0, %A1"
+ [(set_attr "neon_type" "neon_vld1_1_2_regs")]
+ )
+
+ (define_insn "neon_vld1_lane<mode>"
+ [(set (match_operand:VDX 0 "s_register_operand" "=w")
+- (unspec:VDX [(mem:<V_elem> (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:VDX [(match_operand:<V_elem> 1 "neon_struct_operand" "Um")
+ (match_operand:VDX 2 "s_register_operand" "0")
+ (match_operand:SI 3 "immediate_operand" "i")]
+ UNSPEC_VLD1_LANE))]
+@@ -4270,9 +4136,9 @@
+ if (lane < 0 || lane >= max)
+ error ("lane out of range");
+ if (max == 1)
+- return "vld1.<V_sz_elem>\t%P0, [%1]";
++ return "vld1.<V_sz_elem>\t%P0, %A1";
+ else
+- return "vld1.<V_sz_elem>\t{%P0[%c3]}, [%1]";
++ return "vld1.<V_sz_elem>\t{%P0[%c3]}, %A1";
+ }
+ [(set (attr "neon_type")
+ (if_then_else (eq (const_string "<V_mode_nunits>") (const_int 2))
+@@ -4282,7 +4148,7 @@
+
+ (define_insn "neon_vld1_lane<mode>"
+ [(set (match_operand:VQX 0 "s_register_operand" "=w")
+- (unspec:VQX [(mem:<V_elem> (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:VQX [(match_operand:<V_elem> 1 "neon_struct_operand" "Um")
+ (match_operand:VQX 2 "s_register_operand" "0")
+ (match_operand:SI 3 "immediate_operand" "i")]
+ UNSPEC_VLD1_LANE))]
+@@ -4301,9 +4167,9 @@
+ }
+ operands[0] = gen_rtx_REG (<V_HALF>mode, regno);
+ if (max == 2)
+- return "vld1.<V_sz_elem>\t%P0, [%1]";
++ return "vld1.<V_sz_elem>\t%P0, %A1";
+ else
+- return "vld1.<V_sz_elem>\t{%P0[%c3]}, [%1]";
++ return "vld1.<V_sz_elem>\t{%P0[%c3]}, %A1";
+ }
+ [(set (attr "neon_type")
+ (if_then_else (eq (const_string "<V_mode_nunits>") (const_int 2))
+@@ -4313,14 +4179,14 @@
+
+ (define_insn "neon_vld1_dup<mode>"
+ [(set (match_operand:VDX 0 "s_register_operand" "=w")
+- (unspec:VDX [(mem:<V_elem> (match_operand:SI 1 "s_register_operand" "r"))]
++ (unspec:VDX [(match_operand:<V_elem> 1 "neon_struct_operand" "Um")]
+ UNSPEC_VLD1_DUP))]
+ "TARGET_NEON"
+ {
+ if (GET_MODE_NUNITS (<MODE>mode) > 1)
+- return "vld1.<V_sz_elem>\t{%P0[]}, [%1]";
++ return "vld1.<V_sz_elem>\t{%P0[]}, %A1";
+ else
+- return "vld1.<V_sz_elem>\t%h0, [%1]";
++ return "vld1.<V_sz_elem>\t%h0, %A1";
+ }
+ [(set (attr "neon_type")
+ (if_then_else (gt (const_string "<V_mode_nunits>") (const_string "1"))
+@@ -4330,14 +4196,14 @@
+
+ (define_insn "neon_vld1_dup<mode>"
+ [(set (match_operand:VQX 0 "s_register_operand" "=w")
+- (unspec:VQX [(mem:<V_elem> (match_operand:SI 1 "s_register_operand" "r"))]
++ (unspec:VQX [(match_operand:<V_elem> 1 "neon_struct_operand" "Um")]
+ UNSPEC_VLD1_DUP))]
+ "TARGET_NEON"
+ {
+ if (GET_MODE_NUNITS (<MODE>mode) > 2)
+- return "vld1.<V_sz_elem>\t{%e0[], %f0[]}, [%1]";
++ return "vld1.<V_sz_elem>\t{%e0[], %f0[]}, %A1";
+ else
+- return "vld1.<V_sz_elem>\t%h0, [%1]";
++ return "vld1.<V_sz_elem>\t%h0, %A1";
+ }
+ [(set (attr "neon_type")
+ (if_then_else (gt (const_string "<V_mode_nunits>") (const_string "1"))
+@@ -4345,16 +4211,22 @@
+ (const_string "neon_vld1_1_2_regs")))]
+ )
+
++(define_expand "vec_store_lanes<mode><mode>"
++ [(set (match_operand:VDQX 0 "neon_struct_operand")
++ (unspec:VDQX [(match_operand:VDQX 1 "s_register_operand")]
++ UNSPEC_VST1))]
++ "TARGET_NEON")
++
+ (define_insn "neon_vst1<mode>"
+- [(set (mem:VDQX (match_operand:SI 0 "s_register_operand" "r"))
++ [(set (match_operand:VDQX 0 "neon_struct_operand" "=Um")
+ (unspec:VDQX [(match_operand:VDQX 1 "s_register_operand" "w")]
+ UNSPEC_VST1))]
+ "TARGET_NEON"
+- "vst1.<V_sz_elem>\t%h1, [%0]"
++ "vst1.<V_sz_elem>\t%h1, %A0"
+ [(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs")])
+
+ (define_insn "neon_vst1_lane<mode>"
+- [(set (mem:<V_elem> (match_operand:SI 0 "s_register_operand" "r"))
++ [(set (match_operand:<V_elem> 0 "neon_struct_operand" "=Um")
+ (vec_select:<V_elem>
+ (match_operand:VDX 1 "s_register_operand" "w")
+ (parallel [(match_operand:SI 2 "neon_lane_number" "i")])))]
+@@ -4365,9 +4237,9 @@
+ if (lane < 0 || lane >= max)
+ error ("lane out of range");
+ if (max == 1)
+- return "vst1.<V_sz_elem>\t{%P1}, [%0]";
++ return "vst1.<V_sz_elem>\t{%P1}, %A0";
+ else
+- return "vst1.<V_sz_elem>\t{%P1[%c2]}, [%0]";
++ return "vst1.<V_sz_elem>\t{%P1[%c2]}, %A0";
+ }
+ [(set (attr "neon_type")
+ (if_then_else (eq (const_string "<V_mode_nunits>") (const_int 1))
+@@ -4375,7 +4247,7 @@
+ (const_string "neon_vst1_vst2_lane")))])
+
+ (define_insn "neon_vst1_lane<mode>"
+- [(set (mem:<V_elem> (match_operand:SI 0 "s_register_operand" "r"))
++ [(set (match_operand:<V_elem> 0 "neon_struct_operand" "=Um")
+ (vec_select:<V_elem>
+ (match_operand:VQX 1 "s_register_operand" "w")
+ (parallel [(match_operand:SI 2 "neon_lane_number" "i")])))]
+@@ -4394,24 +4266,31 @@
+ }
+ operands[1] = gen_rtx_REG (<V_HALF>mode, regno);
+ if (max == 2)
+- return "vst1.<V_sz_elem>\t{%P1}, [%0]";
++ return "vst1.<V_sz_elem>\t{%P1}, %A0";
+ else
+- return "vst1.<V_sz_elem>\t{%P1[%c2]}, [%0]";
++ return "vst1.<V_sz_elem>\t{%P1[%c2]}, %A0";
+ }
+ [(set_attr "neon_type" "neon_vst1_vst2_lane")]
+ )
+
++(define_expand "vec_load_lanesti<mode>"
++ [(set (match_operand:TI 0 "s_register_operand")
++ (unspec:TI [(match_operand:TI 1 "neon_struct_operand")
++ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_VLD2))]
++ "TARGET_NEON")
++
+ (define_insn "neon_vld2<mode>"
+ [(set (match_operand:TI 0 "s_register_operand" "=w")
+- (unspec:TI [(mem:TI (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:TI [(match_operand:TI 1 "neon_struct_operand" "Um")
+ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ UNSPEC_VLD2))]
+ "TARGET_NEON"
+ {
+ if (<V_sz_elem> == 64)
+- return "vld1.64\t%h0, [%1]";
++ return "vld1.64\t%h0, %A1";
+ else
+- return "vld2.<V_sz_elem>\t%h0, [%1]";
++ return "vld2.<V_sz_elem>\t%h0, %A1";
+ }
+ [(set (attr "neon_type")
+ (if_then_else (eq (const_string "<V_sz_elem>") (const_string "64"))
+@@ -4419,18 +4298,25 @@
+ (const_string "neon_vld2_2_regs_vld1_vld2_all_lanes")))]
+ )
+
++(define_expand "vec_load_lanesoi<mode>"
++ [(set (match_operand:OI 0 "s_register_operand")
++ (unspec:OI [(match_operand:OI 1 "neon_struct_operand")
++ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_VLD2))]
++ "TARGET_NEON")
++
+ (define_insn "neon_vld2<mode>"
+ [(set (match_operand:OI 0 "s_register_operand" "=w")
+- (unspec:OI [(mem:OI (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ UNSPEC_VLD2))]
+ "TARGET_NEON"
+- "vld2.<V_sz_elem>\t%h0, [%1]"
++ "vld2.<V_sz_elem>\t%h0, %A1"
+ [(set_attr "neon_type" "neon_vld2_2_regs_vld1_vld2_all_lanes")])
+
+ (define_insn "neon_vld2_lane<mode>"
+ [(set (match_operand:TI 0 "s_register_operand" "=w")
+- (unspec:TI [(mem:<V_two_elem> (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:TI [(match_operand:<V_two_elem> 1 "neon_struct_operand" "Um")
+ (match_operand:TI 2 "s_register_operand" "0")
+ (match_operand:SI 3 "immediate_operand" "i")
+ (unspec:VD [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+@@ -4447,7 +4333,7 @@
+ ops[1] = gen_rtx_REG (DImode, regno + 2);
+ ops[2] = operands[1];
+ ops[3] = operands[3];
+- output_asm_insn ("vld2.<V_sz_elem>\t{%P0[%c3], %P1[%c3]}, [%2]", ops);
++ output_asm_insn ("vld2.<V_sz_elem>\t{%P0[%c3], %P1[%c3]}, %A2", ops);
+ return "";
+ }
+ [(set_attr "neon_type" "neon_vld1_vld2_lane")]
+@@ -4455,7 +4341,7 @@
+
+ (define_insn "neon_vld2_lane<mode>"
+ [(set (match_operand:OI 0 "s_register_operand" "=w")
+- (unspec:OI [(mem:<V_two_elem> (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:OI [(match_operand:<V_two_elem> 1 "neon_struct_operand" "Um")
+ (match_operand:OI 2 "s_register_operand" "0")
+ (match_operand:SI 3 "immediate_operand" "i")
+ (unspec:VMQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+@@ -4477,7 +4363,7 @@
+ ops[1] = gen_rtx_REG (DImode, regno + 4);
+ ops[2] = operands[1];
+ ops[3] = GEN_INT (lane);
+- output_asm_insn ("vld2.<V_sz_elem>\t{%P0[%c3], %P1[%c3]}, [%2]", ops);
++ output_asm_insn ("vld2.<V_sz_elem>\t{%P0[%c3], %P1[%c3]}, %A2", ops);
+ return "";
+ }
+ [(set_attr "neon_type" "neon_vld1_vld2_lane")]
+@@ -4485,15 +4371,15 @@
+
+ (define_insn "neon_vld2_dup<mode>"
+ [(set (match_operand:TI 0 "s_register_operand" "=w")
+- (unspec:TI [(mem:<V_two_elem> (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:TI [(match_operand:<V_two_elem> 1 "neon_struct_operand" "Um")
+ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ UNSPEC_VLD2_DUP))]
+ "TARGET_NEON"
+ {
+ if (GET_MODE_NUNITS (<MODE>mode) > 1)
+- return "vld2.<V_sz_elem>\t{%e0[], %f0[]}, [%1]";
++ return "vld2.<V_sz_elem>\t{%e0[], %f0[]}, %A1";
+ else
+- return "vld1.<V_sz_elem>\t%h0, [%1]";
++ return "vld1.<V_sz_elem>\t%h0, %A1";
+ }
+ [(set (attr "neon_type")
+ (if_then_else (gt (const_string "<V_mode_nunits>") (const_string "1"))
+@@ -4501,17 +4387,24 @@
+ (const_string "neon_vld1_1_2_regs")))]
+ )
+
++(define_expand "vec_store_lanesti<mode>"
++ [(set (match_operand:TI 0 "neon_struct_operand")
++ (unspec:TI [(match_operand:TI 1 "s_register_operand")
++ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_VST2))]
++ "TARGET_NEON")
++
+ (define_insn "neon_vst2<mode>"
+- [(set (mem:TI (match_operand:SI 0 "s_register_operand" "r"))
++ [(set (match_operand:TI 0 "neon_struct_operand" "=Um")
+ (unspec:TI [(match_operand:TI 1 "s_register_operand" "w")
+ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ UNSPEC_VST2))]
+ "TARGET_NEON"
+ {
+ if (<V_sz_elem> == 64)
+- return "vst1.64\t%h1, [%0]";
++ return "vst1.64\t%h1, %A0";
+ else
+- return "vst2.<V_sz_elem>\t%h1, [%0]";
++ return "vst2.<V_sz_elem>\t%h1, %A0";
+ }
+ [(set (attr "neon_type")
+ (if_then_else (eq (const_string "<V_sz_elem>") (const_string "64"))
+@@ -4519,18 +4412,25 @@
+ (const_string "neon_vst1_1_2_regs_vst2_2_regs")))]
+ )
+
++(define_expand "vec_store_lanesoi<mode>"
++ [(set (match_operand:OI 0 "neon_struct_operand")
++ (unspec:OI [(match_operand:OI 1 "s_register_operand")
++ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_VST2))]
++ "TARGET_NEON")
++
+ (define_insn "neon_vst2<mode>"
+- [(set (mem:OI (match_operand:SI 0 "s_register_operand" "r"))
++ [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
+ (unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ UNSPEC_VST2))]
+ "TARGET_NEON"
+- "vst2.<V_sz_elem>\t%h1, [%0]"
++ "vst2.<V_sz_elem>\t%h1, %A0"
+ [(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs")]
+ )
+
+ (define_insn "neon_vst2_lane<mode>"
+- [(set (mem:<V_two_elem> (match_operand:SI 0 "s_register_operand" "r"))
++ [(set (match_operand:<V_two_elem> 0 "neon_struct_operand" "=Um")
+ (unspec:<V_two_elem>
+ [(match_operand:TI 1 "s_register_operand" "w")
+ (match_operand:SI 2 "immediate_operand" "i")
+@@ -4548,14 +4448,14 @@
+ ops[1] = gen_rtx_REG (DImode, regno);
+ ops[2] = gen_rtx_REG (DImode, regno + 2);
+ ops[3] = operands[2];
+- output_asm_insn ("vst2.<V_sz_elem>\t{%P1[%c3], %P2[%c3]}, [%0]", ops);
++ output_asm_insn ("vst2.<V_sz_elem>\t{%P1[%c3], %P2[%c3]}, %A0", ops);
+ return "";
+ }
+ [(set_attr "neon_type" "neon_vst1_vst2_lane")]
+ )
+
+ (define_insn "neon_vst2_lane<mode>"
+- [(set (mem:<V_two_elem> (match_operand:SI 0 "s_register_operand" "r"))
++ [(set (match_operand:<V_two_elem> 0 "neon_struct_operand" "=Um")
+ (unspec:<V_two_elem>
+ [(match_operand:OI 1 "s_register_operand" "w")
+ (match_operand:SI 2 "immediate_operand" "i")
+@@ -4578,23 +4478,30 @@
+ ops[1] = gen_rtx_REG (DImode, regno);
+ ops[2] = gen_rtx_REG (DImode, regno + 4);
+ ops[3] = GEN_INT (lane);
+- output_asm_insn ("vst2.<V_sz_elem>\t{%P1[%c3], %P2[%c3]}, [%0]", ops);
++ output_asm_insn ("vst2.<V_sz_elem>\t{%P1[%c3], %P2[%c3]}, %A0", ops);
+ return "";
+ }
+ [(set_attr "neon_type" "neon_vst1_vst2_lane")]
+ )
+
++(define_expand "vec_load_lanesei<mode>"
++ [(set (match_operand:EI 0 "s_register_operand")
++ (unspec:EI [(match_operand:EI 1 "neon_struct_operand")
++ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_VLD3))]
++ "TARGET_NEON")
++
+ (define_insn "neon_vld3<mode>"
+ [(set (match_operand:EI 0 "s_register_operand" "=w")
+- (unspec:EI [(mem:EI (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:EI [(match_operand:EI 1 "neon_struct_operand" "Um")
+ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ UNSPEC_VLD3))]
+ "TARGET_NEON"
+ {
+ if (<V_sz_elem> == 64)
+- return "vld1.64\t%h0, [%1]";
++ return "vld1.64\t%h0, %A1";
+ else
+- return "vld3.<V_sz_elem>\t%h0, [%1]";
++ return "vld3.<V_sz_elem>\t%h0, %A1";
+ }
+ [(set (attr "neon_type")
+ (if_then_else (eq (const_string "<V_sz_elem>") (const_string "64"))
+@@ -4602,28 +4509,36 @@
+ (const_string "neon_vld3_vld4")))]
+ )
+
++(define_expand "vec_load_lanesci<mode>"
++ [(match_operand:CI 0 "s_register_operand")
++ (match_operand:CI 1 "neon_struct_operand")
++ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ "TARGET_NEON"
++{
++ emit_insn (gen_neon_vld3<mode> (operands[0], operands[1]));
++ DONE;
++})
++
+ (define_expand "neon_vld3<mode>"
+- [(match_operand:CI 0 "s_register_operand" "=w")
+- (match_operand:SI 1 "s_register_operand" "+r")
++ [(match_operand:CI 0 "s_register_operand")
++ (match_operand:CI 1 "neon_struct_operand")
+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ "TARGET_NEON"
+ {
+- emit_insn (gen_neon_vld3qa<mode> (operands[0], operands[0],
+- operands[1], operands[1]));
+- emit_insn (gen_neon_vld3qb<mode> (operands[0], operands[0],
+- operands[1], operands[1]));
++ rtx mem;
++
++ mem = adjust_address (operands[1], EImode, 0);
++ emit_insn (gen_neon_vld3qa<mode> (operands[0], mem));
++ mem = adjust_address (mem, EImode, GET_MODE_SIZE (EImode));
++ emit_insn (gen_neon_vld3qb<mode> (operands[0], mem, operands[0]));
+ DONE;
+ })
+
+ (define_insn "neon_vld3qa<mode>"
+ [(set (match_operand:CI 0 "s_register_operand" "=w")
+- (unspec:CI [(mem:CI (match_operand:SI 3 "s_register_operand" "2"))
+- (match_operand:CI 1 "s_register_operand" "0")
++ (unspec:CI [(match_operand:EI 1 "neon_struct_operand" "Um")
+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+- UNSPEC_VLD3A))
+- (set (match_operand:SI 2 "s_register_operand" "=r")
+- (plus:SI (match_dup 3)
+- (const_int 24)))]
++ UNSPEC_VLD3A))]
+ "TARGET_NEON"
+ {
+ int regno = REGNO (operands[0]);
+@@ -4631,8 +4546,8 @@
+ ops[0] = gen_rtx_REG (DImode, regno);
+ ops[1] = gen_rtx_REG (DImode, regno + 4);
+ ops[2] = gen_rtx_REG (DImode, regno + 8);
+- ops[3] = operands[2];
+- output_asm_insn ("vld3.<V_sz_elem>\t{%P0, %P1, %P2}, [%3]!", ops);
++ ops[3] = operands[1];
++ output_asm_insn ("vld3.<V_sz_elem>\t{%P0, %P1, %P2}, %A3", ops);
+ return "";
+ }
+ [(set_attr "neon_type" "neon_vld3_vld4")]
+@@ -4640,13 +4555,10 @@
+
+ (define_insn "neon_vld3qb<mode>"
+ [(set (match_operand:CI 0 "s_register_operand" "=w")
+- (unspec:CI [(mem:CI (match_operand:SI 3 "s_register_operand" "2"))
+- (match_operand:CI 1 "s_register_operand" "0")
++ (unspec:CI [(match_operand:EI 1 "neon_struct_operand" "Um")
++ (match_operand:CI 2 "s_register_operand" "0")
+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+- UNSPEC_VLD3B))
+- (set (match_operand:SI 2 "s_register_operand" "=r")
+- (plus:SI (match_dup 3)
+- (const_int 24)))]
++ UNSPEC_VLD3B))]
+ "TARGET_NEON"
+ {
+ int regno = REGNO (operands[0]);
+@@ -4654,8 +4566,8 @@
+ ops[0] = gen_rtx_REG (DImode, regno + 2);
+ ops[1] = gen_rtx_REG (DImode, regno + 6);
+ ops[2] = gen_rtx_REG (DImode, regno + 10);
+- ops[3] = operands[2];
+- output_asm_insn ("vld3.<V_sz_elem>\t{%P0, %P1, %P2}, [%3]!", ops);
++ ops[3] = operands[1];
++ output_asm_insn ("vld3.<V_sz_elem>\t{%P0, %P1, %P2}, %A3", ops);
+ return "";
+ }
+ [(set_attr "neon_type" "neon_vld3_vld4")]
+@@ -4663,7 +4575,7 @@
+
+ (define_insn "neon_vld3_lane<mode>"
+ [(set (match_operand:EI 0 "s_register_operand" "=w")
+- (unspec:EI [(mem:<V_three_elem> (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:EI [(match_operand:<V_three_elem> 1 "neon_struct_operand" "Um")
+ (match_operand:EI 2 "s_register_operand" "0")
+ (match_operand:SI 3 "immediate_operand" "i")
+ (unspec:VD [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+@@ -4681,7 +4593,7 @@
+ ops[2] = gen_rtx_REG (DImode, regno + 4);
+ ops[3] = operands[1];
+ ops[4] = operands[3];
+- output_asm_insn ("vld3.<V_sz_elem>\t{%P0[%c4], %P1[%c4], %P2[%c4]}, [%3]",
++ output_asm_insn ("vld3.<V_sz_elem>\t{%P0[%c4], %P1[%c4], %P2[%c4]}, %A3",
+ ops);
+ return "";
+ }
+@@ -4690,7 +4602,7 @@
+
+ (define_insn "neon_vld3_lane<mode>"
+ [(set (match_operand:CI 0 "s_register_operand" "=w")
+- (unspec:CI [(mem:<V_three_elem> (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:CI [(match_operand:<V_three_elem> 1 "neon_struct_operand" "Um")
+ (match_operand:CI 2 "s_register_operand" "0")
+ (match_operand:SI 3 "immediate_operand" "i")
+ (unspec:VMQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+@@ -4713,7 +4625,7 @@
+ ops[2] = gen_rtx_REG (DImode, regno + 8);
+ ops[3] = operands[1];
+ ops[4] = GEN_INT (lane);
+- output_asm_insn ("vld3.<V_sz_elem>\t{%P0[%c4], %P1[%c4], %P2[%c4]}, [%3]",
++ output_asm_insn ("vld3.<V_sz_elem>\t{%P0[%c4], %P1[%c4], %P2[%c4]}, %A3",
+ ops);
+ return "";
+ }
+@@ -4722,7 +4634,7 @@
+
+ (define_insn "neon_vld3_dup<mode>"
+ [(set (match_operand:EI 0 "s_register_operand" "=w")
+- (unspec:EI [(mem:<V_three_elem> (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:EI [(match_operand:<V_three_elem> 1 "neon_struct_operand" "Um")
+ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ UNSPEC_VLD3_DUP))]
+ "TARGET_NEON"
+@@ -4735,91 +4647,106 @@
+ ops[1] = gen_rtx_REG (DImode, regno + 2);
+ ops[2] = gen_rtx_REG (DImode, regno + 4);
+ ops[3] = operands[1];
+- output_asm_insn ("vld3.<V_sz_elem>\t{%P0[], %P1[], %P2[]}, [%3]", ops);
++ output_asm_insn ("vld3.<V_sz_elem>\t{%P0[], %P1[], %P2[]}, %A3", ops);
+ return "";
+ }
+ else
+- return "vld1.<V_sz_elem>\t%h0, [%1]";
++ return "vld1.<V_sz_elem>\t%h0, %A1";
+ }
+ [(set (attr "neon_type")
+ (if_then_else (gt (const_string "<V_mode_nunits>") (const_string "1"))
+ (const_string "neon_vld3_vld4_all_lanes")
+ (const_string "neon_vld1_1_2_regs")))])
+
++(define_expand "vec_store_lanesei<mode>"
++ [(set (match_operand:EI 0 "neon_struct_operand")
++ (unspec:EI [(match_operand:EI 1 "s_register_operand")
++ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_VST3))]
++ "TARGET_NEON")
++
+ (define_insn "neon_vst3<mode>"
+- [(set (mem:EI (match_operand:SI 0 "s_register_operand" "r"))
++ [(set (match_operand:EI 0 "neon_struct_operand" "=Um")
+ (unspec:EI [(match_operand:EI 1 "s_register_operand" "w")
+ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ UNSPEC_VST3))]
+ "TARGET_NEON"
+ {
+ if (<V_sz_elem> == 64)
+- return "vst1.64\t%h1, [%0]";
++ return "vst1.64\t%h1, %A0";
+ else
+- return "vst3.<V_sz_elem>\t%h1, [%0]";
++ return "vst3.<V_sz_elem>\t%h1, %A0";
+ }
+ [(set (attr "neon_type")
+ (if_then_else (eq (const_string "<V_sz_elem>") (const_string "64"))
+ (const_string "neon_vst1_1_2_regs_vst2_2_regs")
+ (const_string "neon_vst2_4_regs_vst3_vst4")))])
+
++(define_expand "vec_store_lanesci<mode>"
++ [(match_operand:CI 0 "neon_struct_operand")
++ (match_operand:CI 1 "s_register_operand")
++ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ "TARGET_NEON"
++{
++ emit_insn (gen_neon_vst3<mode> (operands[0], operands[1]));
++ DONE;
++})
++
+ (define_expand "neon_vst3<mode>"
+- [(match_operand:SI 0 "s_register_operand" "+r")
+- (match_operand:CI 1 "s_register_operand" "w")
++ [(match_operand:CI 0 "neon_struct_operand")
++ (match_operand:CI 1 "s_register_operand")
+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ "TARGET_NEON"
+ {
+- emit_insn (gen_neon_vst3qa<mode> (operands[0], operands[0], operands[1]));
+- emit_insn (gen_neon_vst3qb<mode> (operands[0], operands[0], operands[1]));
++ rtx mem;
++
++ mem = adjust_address (operands[0], EImode, 0);
++ emit_insn (gen_neon_vst3qa<mode> (mem, operands[1]));
++ mem = adjust_address (mem, EImode, GET_MODE_SIZE (EImode));
++ emit_insn (gen_neon_vst3qb<mode> (mem, operands[1]));
+ DONE;
+ })
+
+ (define_insn "neon_vst3qa<mode>"
+- [(set (mem:EI (match_operand:SI 1 "s_register_operand" "0"))
+- (unspec:EI [(match_operand:CI 2 "s_register_operand" "w")
++ [(set (match_operand:EI 0 "neon_struct_operand" "=Um")
++ (unspec:EI [(match_operand:CI 1 "s_register_operand" "w")
+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+- UNSPEC_VST3A))
+- (set (match_operand:SI 0 "s_register_operand" "=r")
+- (plus:SI (match_dup 1)
+- (const_int 24)))]
++ UNSPEC_VST3A))]
+ "TARGET_NEON"
+ {
+- int regno = REGNO (operands[2]);
++ int regno = REGNO (operands[1]);
+ rtx ops[4];
+ ops[0] = operands[0];
+ ops[1] = gen_rtx_REG (DImode, regno);
+ ops[2] = gen_rtx_REG (DImode, regno + 4);
+ ops[3] = gen_rtx_REG (DImode, regno + 8);
+- output_asm_insn ("vst3.<V_sz_elem>\t{%P1, %P2, %P3}, [%0]!", ops);
++ output_asm_insn ("vst3.<V_sz_elem>\t{%P1, %P2, %P3}, %A0", ops);
+ return "";
+ }
+ [(set_attr "neon_type" "neon_vst2_4_regs_vst3_vst4")]
+ )
+
+ (define_insn "neon_vst3qb<mode>"
+- [(set (mem:EI (match_operand:SI 1 "s_register_operand" "0"))
+- (unspec:EI [(match_operand:CI 2 "s_register_operand" "w")
++ [(set (match_operand:EI 0 "neon_struct_operand" "=Um")
++ (unspec:EI [(match_operand:CI 1 "s_register_operand" "w")
+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+- UNSPEC_VST3B))
+- (set (match_operand:SI 0 "s_register_operand" "=r")
+- (plus:SI (match_dup 1)
+- (const_int 24)))]
++ UNSPEC_VST3B))]
+ "TARGET_NEON"
+ {
+- int regno = REGNO (operands[2]);
++ int regno = REGNO (operands[1]);
+ rtx ops[4];
+ ops[0] = operands[0];
+ ops[1] = gen_rtx_REG (DImode, regno + 2);
+ ops[2] = gen_rtx_REG (DImode, regno + 6);
+ ops[3] = gen_rtx_REG (DImode, regno + 10);
+- output_asm_insn ("vst3.<V_sz_elem>\t{%P1, %P2, %P3}, [%0]!", ops);
++ output_asm_insn ("vst3.<V_sz_elem>\t{%P1, %P2, %P3}, %A0", ops);
+ return "";
+ }
+ [(set_attr "neon_type" "neon_vst2_4_regs_vst3_vst4")]
+ )
+
+ (define_insn "neon_vst3_lane<mode>"
+- [(set (mem:<V_three_elem> (match_operand:SI 0 "s_register_operand" "r"))
++ [(set (match_operand:<V_three_elem> 0 "neon_struct_operand" "=Um")
+ (unspec:<V_three_elem>
+ [(match_operand:EI 1 "s_register_operand" "w")
+ (match_operand:SI 2 "immediate_operand" "i")
+@@ -4838,7 +4765,7 @@
+ ops[2] = gen_rtx_REG (DImode, regno + 2);
+ ops[3] = gen_rtx_REG (DImode, regno + 4);
+ ops[4] = operands[2];
+- output_asm_insn ("vst3.<V_sz_elem>\t{%P1[%c4], %P2[%c4], %P3[%c4]}, [%0]",
++ output_asm_insn ("vst3.<V_sz_elem>\t{%P1[%c4], %P2[%c4], %P3[%c4]}, %A0",
+ ops);
+ return "";
+ }
+@@ -4846,7 +4773,7 @@
+ )
+
+ (define_insn "neon_vst3_lane<mode>"
+- [(set (mem:<V_three_elem> (match_operand:SI 0 "s_register_operand" "r"))
++ [(set (match_operand:<V_three_elem> 0 "neon_struct_operand" "=Um")
+ (unspec:<V_three_elem>
+ [(match_operand:CI 1 "s_register_operand" "w")
+ (match_operand:SI 2 "immediate_operand" "i")
+@@ -4870,23 +4797,30 @@
+ ops[2] = gen_rtx_REG (DImode, regno + 4);
+ ops[3] = gen_rtx_REG (DImode, regno + 8);
+ ops[4] = GEN_INT (lane);
+- output_asm_insn ("vst3.<V_sz_elem>\t{%P1[%c4], %P2[%c4], %P3[%c4]}, [%0]",
++ output_asm_insn ("vst3.<V_sz_elem>\t{%P1[%c4], %P2[%c4], %P3[%c4]}, %A0",
+ ops);
+ return "";
+ }
+ [(set_attr "neon_type" "neon_vst3_vst4_lane")])
+
++(define_expand "vec_load_lanesoi<mode>"
++ [(set (match_operand:OI 0 "s_register_operand")
++ (unspec:OI [(match_operand:OI 1 "neon_struct_operand")
++ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_VLD4))]
++ "TARGET_NEON")
++
+ (define_insn "neon_vld4<mode>"
+ [(set (match_operand:OI 0 "s_register_operand" "=w")
+- (unspec:OI [(mem:OI (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
+ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ UNSPEC_VLD4))]
+ "TARGET_NEON"
+ {
+ if (<V_sz_elem> == 64)
+- return "vld1.64\t%h0, [%1]";
++ return "vld1.64\t%h0, %A1";
+ else
+- return "vld4.<V_sz_elem>\t%h0, [%1]";
++ return "vld4.<V_sz_elem>\t%h0, %A1";
+ }
+ [(set (attr "neon_type")
+ (if_then_else (eq (const_string "<V_sz_elem>") (const_string "64"))
+@@ -4894,28 +4828,36 @@
+ (const_string "neon_vld3_vld4")))]
+ )
+
++(define_expand "vec_load_lanesxi<mode>"
++ [(match_operand:XI 0 "s_register_operand")
++ (match_operand:XI 1 "neon_struct_operand")
++ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ "TARGET_NEON"
++{
++ emit_insn (gen_neon_vld4<mode> (operands[0], operands[1]));
++ DONE;
++})
++
+ (define_expand "neon_vld4<mode>"
+- [(match_operand:XI 0 "s_register_operand" "=w")
+- (match_operand:SI 1 "s_register_operand" "+r")
++ [(match_operand:XI 0 "s_register_operand")
++ (match_operand:XI 1 "neon_struct_operand")
+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ "TARGET_NEON"
+ {
+- emit_insn (gen_neon_vld4qa<mode> (operands[0], operands[0],
+- operands[1], operands[1]));
+- emit_insn (gen_neon_vld4qb<mode> (operands[0], operands[0],
+- operands[1], operands[1]));
++ rtx mem;
++
++ mem = adjust_address (operands[1], OImode, 0);
++ emit_insn (gen_neon_vld4qa<mode> (operands[0], mem));
++ mem = adjust_address (mem, OImode, GET_MODE_SIZE (OImode));
++ emit_insn (gen_neon_vld4qb<mode> (operands[0], mem, operands[0]));
+ DONE;
+ })
+
+ (define_insn "neon_vld4qa<mode>"
+ [(set (match_operand:XI 0 "s_register_operand" "=w")
+- (unspec:XI [(mem:XI (match_operand:SI 3 "s_register_operand" "2"))
+- (match_operand:XI 1 "s_register_operand" "0")
++ (unspec:XI [(match_operand:OI 1 "neon_struct_operand" "Um")
+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+- UNSPEC_VLD4A))
+- (set (match_operand:SI 2 "s_register_operand" "=r")
+- (plus:SI (match_dup 3)
+- (const_int 32)))]
++ UNSPEC_VLD4A))]
+ "TARGET_NEON"
+ {
+ int regno = REGNO (operands[0]);
+@@ -4924,8 +4866,8 @@
+ ops[1] = gen_rtx_REG (DImode, regno + 4);
+ ops[2] = gen_rtx_REG (DImode, regno + 8);
+ ops[3] = gen_rtx_REG (DImode, regno + 12);
+- ops[4] = operands[2];
+- output_asm_insn ("vld4.<V_sz_elem>\t{%P0, %P1, %P2, %P3}, [%4]!", ops);
++ ops[4] = operands[1];
++ output_asm_insn ("vld4.<V_sz_elem>\t{%P0, %P1, %P2, %P3}, %A4", ops);
+ return "";
+ }
+ [(set_attr "neon_type" "neon_vld3_vld4")]
+@@ -4933,13 +4875,10 @@
+
+ (define_insn "neon_vld4qb<mode>"
+ [(set (match_operand:XI 0 "s_register_operand" "=w")
+- (unspec:XI [(mem:XI (match_operand:SI 3 "s_register_operand" "2"))
+- (match_operand:XI 1 "s_register_operand" "0")
++ (unspec:XI [(match_operand:OI 1 "neon_struct_operand" "Um")
++ (match_operand:XI 2 "s_register_operand" "0")
+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+- UNSPEC_VLD4B))
+- (set (match_operand:SI 2 "s_register_operand" "=r")
+- (plus:SI (match_dup 3)
+- (const_int 32)))]
++ UNSPEC_VLD4B))]
+ "TARGET_NEON"
+ {
+ int regno = REGNO (operands[0]);
+@@ -4948,8 +4887,8 @@
+ ops[1] = gen_rtx_REG (DImode, regno + 6);
+ ops[2] = gen_rtx_REG (DImode, regno + 10);
+ ops[3] = gen_rtx_REG (DImode, regno + 14);
+- ops[4] = operands[2];
+- output_asm_insn ("vld4.<V_sz_elem>\t{%P0, %P1, %P2, %P3}, [%4]!", ops);
++ ops[4] = operands[1];
++ output_asm_insn ("vld4.<V_sz_elem>\t{%P0, %P1, %P2, %P3}, %A4", ops);
+ return "";
+ }
+ [(set_attr "neon_type" "neon_vld3_vld4")]
+@@ -4957,7 +4896,7 @@
+
+ (define_insn "neon_vld4_lane<mode>"
+ [(set (match_operand:OI 0 "s_register_operand" "=w")
+- (unspec:OI [(mem:<V_four_elem> (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:OI [(match_operand:<V_four_elem> 1 "neon_struct_operand" "Um")
+ (match_operand:OI 2 "s_register_operand" "0")
+ (match_operand:SI 3 "immediate_operand" "i")
+ (unspec:VD [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+@@ -4976,7 +4915,7 @@
+ ops[3] = gen_rtx_REG (DImode, regno + 6);
+ ops[4] = operands[1];
+ ops[5] = operands[3];
+- output_asm_insn ("vld4.<V_sz_elem>\t{%P0[%c5], %P1[%c5], %P2[%c5], %P3[%c5]}, [%4]",
++ output_asm_insn ("vld4.<V_sz_elem>\t{%P0[%c5], %P1[%c5], %P2[%c5], %P3[%c5]}, %A4",
+ ops);
+ return "";
+ }
+@@ -4985,7 +4924,7 @@
+
+ (define_insn "neon_vld4_lane<mode>"
+ [(set (match_operand:XI 0 "s_register_operand" "=w")
+- (unspec:XI [(mem:<V_four_elem> (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:XI [(match_operand:<V_four_elem> 1 "neon_struct_operand" "Um")
+ (match_operand:XI 2 "s_register_operand" "0")
+ (match_operand:SI 3 "immediate_operand" "i")
+ (unspec:VMQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+@@ -5009,7 +4948,7 @@
+ ops[3] = gen_rtx_REG (DImode, regno + 12);
+ ops[4] = operands[1];
+ ops[5] = GEN_INT (lane);
+- output_asm_insn ("vld4.<V_sz_elem>\t{%P0[%c5], %P1[%c5], %P2[%c5], %P3[%c5]}, [%4]",
++ output_asm_insn ("vld4.<V_sz_elem>\t{%P0[%c5], %P1[%c5], %P2[%c5], %P3[%c5]}, %A4",
+ ops);
+ return "";
+ }
+@@ -5018,7 +4957,7 @@
+
+ (define_insn "neon_vld4_dup<mode>"
+ [(set (match_operand:OI 0 "s_register_operand" "=w")
+- (unspec:OI [(mem:<V_four_elem> (match_operand:SI 1 "s_register_operand" "r"))
++ (unspec:OI [(match_operand:<V_four_elem> 1 "neon_struct_operand" "Um")
+ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ UNSPEC_VLD4_DUP))]
+ "TARGET_NEON"
+@@ -5032,12 +4971,12 @@
+ ops[2] = gen_rtx_REG (DImode, regno + 4);
+ ops[3] = gen_rtx_REG (DImode, regno + 6);
+ ops[4] = operands[1];
+- output_asm_insn ("vld4.<V_sz_elem>\t{%P0[], %P1[], %P2[], %P3[]}, [%4]",
++ output_asm_insn ("vld4.<V_sz_elem>\t{%P0[], %P1[], %P2[], %P3[]}, %A4",
+ ops);
+ return "";
+ }
+ else
+- return "vld1.<V_sz_elem>\t%h0, [%1]";
++ return "vld1.<V_sz_elem>\t%h0, %A1";
+ }
+ [(set (attr "neon_type")
+ (if_then_else (gt (const_string "<V_mode_nunits>") (const_string "1"))
+@@ -5045,17 +4984,24 @@
+ (const_string "neon_vld1_1_2_regs")))]
+ )
+
++(define_expand "vec_store_lanesoi<mode>"
++ [(set (match_operand:OI 0 "neon_struct_operand")
++ (unspec:OI [(match_operand:OI 1 "s_register_operand")
++ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_VST4))]
++ "TARGET_NEON")
++
+ (define_insn "neon_vst4<mode>"
+- [(set (mem:OI (match_operand:SI 0 "s_register_operand" "r"))
++ [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
+ (unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
+ (unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ UNSPEC_VST4))]
+ "TARGET_NEON"
+ {
+ if (<V_sz_elem> == 64)
+- return "vst1.64\t%h1, [%0]";
++ return "vst1.64\t%h1, %A0";
+ else
+- return "vst4.<V_sz_elem>\t%h1, [%0]";
++ return "vst4.<V_sz_elem>\t%h1, %A0";
+ }
+ [(set (attr "neon_type")
+ (if_then_else (eq (const_string "<V_sz_elem>") (const_string "64"))
+@@ -5063,65 +5009,73 @@
+ (const_string "neon_vst2_4_regs_vst3_vst4")))]
+ )
+
++(define_expand "vec_store_lanesxi<mode>"
++ [(match_operand:XI 0 "neon_struct_operand")
++ (match_operand:XI 1 "s_register_operand")
++ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ "TARGET_NEON"
++{
++ emit_insn (gen_neon_vst4<mode> (operands[0], operands[1]));
++ DONE;
++})
++
+ (define_expand "neon_vst4<mode>"
+- [(match_operand:SI 0 "s_register_operand" "+r")
+- (match_operand:XI 1 "s_register_operand" "w")
++ [(match_operand:XI 0 "neon_struct_operand")
++ (match_operand:XI 1 "s_register_operand")
+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+ "TARGET_NEON"
+ {
+- emit_insn (gen_neon_vst4qa<mode> (operands[0], operands[0], operands[1]));
+- emit_insn (gen_neon_vst4qb<mode> (operands[0], operands[0], operands[1]));
++ rtx mem;
++
++ mem = adjust_address (operands[0], OImode, 0);
++ emit_insn (gen_neon_vst4qa<mode> (mem, operands[1]));
++ mem = adjust_address (mem, OImode, GET_MODE_SIZE (OImode));
++ emit_insn (gen_neon_vst4qb<mode> (mem, operands[1]));
+ DONE;
+ })
+
+ (define_insn "neon_vst4qa<mode>"
+- [(set (mem:OI (match_operand:SI 1 "s_register_operand" "0"))
+- (unspec:OI [(match_operand:XI 2 "s_register_operand" "w")
++ [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
++ (unspec:OI [(match_operand:XI 1 "s_register_operand" "w")
+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+- UNSPEC_VST4A))
+- (set (match_operand:SI 0 "s_register_operand" "=r")
+- (plus:SI (match_dup 1)
+- (const_int 32)))]
++ UNSPEC_VST4A))]
+ "TARGET_NEON"
+ {
+- int regno = REGNO (operands[2]);
++ int regno = REGNO (operands[1]);
+ rtx ops[5];
+ ops[0] = operands[0];
+ ops[1] = gen_rtx_REG (DImode, regno);
+ ops[2] = gen_rtx_REG (DImode, regno + 4);
+ ops[3] = gen_rtx_REG (DImode, regno + 8);
+ ops[4] = gen_rtx_REG (DImode, regno + 12);
+- output_asm_insn ("vst4.<V_sz_elem>\t{%P1, %P2, %P3, %P4}, [%0]!", ops);
++ output_asm_insn ("vst4.<V_sz_elem>\t{%P1, %P2, %P3, %P4}, %A0", ops);
+ return "";
+ }
+ [(set_attr "neon_type" "neon_vst2_4_regs_vst3_vst4")]
+ )
+
+ (define_insn "neon_vst4qb<mode>"
+- [(set (mem:OI (match_operand:SI 1 "s_register_operand" "0"))
+- (unspec:OI [(match_operand:XI 2 "s_register_operand" "w")
++ [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
++ (unspec:OI [(match_operand:XI 1 "s_register_operand" "w")
+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
+- UNSPEC_VST4B))
+- (set (match_operand:SI 0 "s_register_operand" "=r")
+- (plus:SI (match_dup 1)
+- (const_int 32)))]
++ UNSPEC_VST4B))]
+ "TARGET_NEON"
+ {
+- int regno = REGNO (operands[2]);
++ int regno = REGNO (operands[1]);
+ rtx ops[5];
+ ops[0] = operands[0];
+ ops[1] = gen_rtx_REG (DImode, regno + 2);
+ ops[2] = gen_rtx_REG (DImode, regno + 6);
+ ops[3] = gen_rtx_REG (DImode, regno + 10);
+ ops[4] = gen_rtx_REG (DImode, regno + 14);
+- output_asm_insn ("vst4.<V_sz_elem>\t{%P1, %P2, %P3, %P4}, [%0]!", ops);
++ output_asm_insn ("vst4.<V_sz_elem>\t{%P1, %P2, %P3, %P4}, %A0", ops);
+ return "";
+ }
+ [(set_attr "neon_type" "neon_vst2_4_regs_vst3_vst4")]
+ )
+
+ (define_insn "neon_vst4_lane<mode>"
+- [(set (mem:<V_four_elem> (match_operand:SI 0 "s_register_operand" "r"))
++ [(set (match_operand:<V_four_elem> 0 "neon_struct_operand" "=Um")
+ (unspec:<V_four_elem>
+ [(match_operand:OI 1 "s_register_operand" "w")
+ (match_operand:SI 2 "immediate_operand" "i")
+@@ -5141,7 +5095,7 @@
+ ops[3] = gen_rtx_REG (DImode, regno + 4);
+ ops[4] = gen_rtx_REG (DImode, regno + 6);
+ ops[5] = operands[2];
+- output_asm_insn ("vst4.<V_sz_elem>\t{%P1[%c5], %P2[%c5], %P3[%c5], %P4[%c5]}, [%0]",
++ output_asm_insn ("vst4.<V_sz_elem>\t{%P1[%c5], %P2[%c5], %P3[%c5], %P4[%c5]}, %A0",
+ ops);
+ return "";
+ }
+@@ -5149,7 +5103,7 @@
+ )
+
+ (define_insn "neon_vst4_lane<mode>"
+- [(set (mem:<V_four_elem> (match_operand:SI 0 "s_register_operand" "r"))
++ [(set (match_operand:<V_four_elem> 0 "neon_struct_operand" "=Um")
+ (unspec:<V_four_elem>
+ [(match_operand:XI 1 "s_register_operand" "w")
+ (match_operand:SI 2 "immediate_operand" "i")
+@@ -5174,7 +5128,7 @@
+ ops[3] = gen_rtx_REG (DImode, regno + 8);
+ ops[4] = gen_rtx_REG (DImode, regno + 12);
+ ops[5] = GEN_INT (lane);
+- output_asm_insn ("vst4.<V_sz_elem>\t{%P1[%c5], %P2[%c5], %P3[%c5], %P4[%c5]}, [%0]",
++ output_asm_insn ("vst4.<V_sz_elem>\t{%P1[%c5], %P2[%c5], %P3[%c5], %P4[%c5]}, %A0",
+ ops);
+ return "";
+ }
+@@ -5362,6 +5316,44 @@
+ }
+ )
+
++(define_insn "neon_vec_<US>shiftl_<mode>"
++ [(set (match_operand:<V_widen> 0 "register_operand" "=w")
++ (SE:<V_widen> (ashift:VW (match_operand:VW 1 "register_operand" "w")
++ (match_operand:<V_innermode> 2 "const_neon_scalar_shift_amount_operand" ""))))]
++ "TARGET_NEON"
++{
++ return "vshll.<US><V_sz_elem> %q0, %P1, %2";
++}
++ [(set_attr "neon_type" "neon_shift_1")]
++)
++
++(define_expand "vec_widen_<US>shiftl_lo_<mode>"
++ [(match_operand:<V_unpack> 0 "register_operand" "")
++ (SE:<V_unpack> (match_operand:VU 1 "register_operand" ""))
++ (match_operand:SI 2 "immediate_operand" "i")]
++ "TARGET_NEON && !BYTES_BIG_ENDIAN"
++ {
++ emit_insn (gen_neon_vec_<US>shiftl_<V_half> (operands[0],
++ simplify_gen_subreg (<V_HALF>mode, operands[1], <MODE>mode, 0),
++ operands[2]));
++ DONE;
++ }
++)
++
++(define_expand "vec_widen_<US>shiftl_hi_<mode>"
++ [(match_operand:<V_unpack> 0 "register_operand" "")
++ (SE:<V_unpack> (match_operand:VU 1 "register_operand" ""))
++ (match_operand:SI 2 "immediate_operand" "i")]
++ "TARGET_NEON && !BYTES_BIG_ENDIAN"
++ {
++ emit_insn (gen_neon_vec_<US>shiftl_<V_half> (operands[0],
++ simplify_gen_subreg (<V_HALF>mode, operands[1], <MODE>mode,
++ GET_MODE_SIZE (<V_HALF>mode)),
++ operands[2]));
++ DONE;
++ }
++)
++
+ ;; Vectorize for non-neon-quad case
+ (define_insn "neon_unpack<US>_<mode>"
+ [(set (match_operand:<V_widen> 0 "register_operand" "=w")
+@@ -5438,6 +5430,34 @@
+ }
+ )
+
++(define_expand "vec_widen_<US>shiftl_hi_<mode>"
++ [(match_operand:<V_double_width> 0 "register_operand" "")
++ (SE:<V_double_width> (match_operand:VDI 1 "register_operand" ""))
++ (match_operand:SI 2 "immediate_operand" "i")]
++ "TARGET_NEON"
++ {
++ rtx tmpreg = gen_reg_rtx (<V_widen>mode);
++ emit_insn (gen_neon_vec_<US>shiftl_<mode> (tmpreg, operands[1], operands[2]));
++ emit_insn (gen_neon_vget_high<V_widen_l> (operands[0], tmpreg));
++
++ DONE;
++ }
++)
++
++(define_expand "vec_widen_<US>shiftl_lo_<mode>"
++ [(match_operand:<V_double_width> 0 "register_operand" "")
++ (SE:<V_double_width> (match_operand:VDI 1 "register_operand" ""))
++ (match_operand:SI 2 "immediate_operand" "i")]
++ "TARGET_NEON"
++ {
++ rtx tmpreg = gen_reg_rtx (<V_widen>mode);
++ emit_insn (gen_neon_vec_<US>shiftl_<mode> (tmpreg, operands[1], operands[2]));
++ emit_insn (gen_neon_vget_low<V_widen_l> (operands[0], tmpreg));
++
++ DONE;
++ }
++)
++
+ ;; The case when using all quad registers.
+ (define_insn "vec_pack_trunc_<mode>"
+ [(set (match_operand:<V_narrow_pack> 0 "register_operand" "=&w")
+@@ -5474,3 +5494,32 @@
+ emit_insn (gen_neon_vec_pack_trunc_<V_double> (operands[0], tempreg));
+ DONE;
+ })
++
++(define_insn "neon_vabd<mode>_2"
++ [(set (match_operand:VDQ 0 "s_register_operand" "=w")
++ (abs:VDQ (minus:VDQ (match_operand:VDQ 1 "s_register_operand" "w")
++ (match_operand:VDQ 2 "s_register_operand" "w"))))]
++ "TARGET_NEON && (!<Is_float_mode> || flag_unsafe_math_optimizations)"
++ "vabd.<V_s_elem> %<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set (attr "neon_type")
++ (if_then_else (ne (symbol_ref "<Is_float_mode>") (const_int 0))
++ (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
++ (const_string "neon_fp_vadd_ddd_vabs_dd")
++ (const_string "neon_fp_vadd_qqq_vabs_qq"))
++ (const_string "neon_int_5")))]
++)
++
++(define_insn "neon_vabd<mode>_3"
++ [(set (match_operand:VDQ 0 "s_register_operand" "=w")
++ (abs:VDQ (unspec:VDQ [(match_operand:VDQ 1 "s_register_operand" "w")
++ (match_operand:VDQ 2 "s_register_operand" "w")]
++ UNSPEC_VSUB)))]
++ "TARGET_NEON && (!<Is_float_mode> || flag_unsafe_math_optimizations)"
++ "vabd.<V_if_elem> %<V_reg>0, %<V_reg>1, %<V_reg>2"
++ [(set (attr "neon_type")
++ (if_then_else (ne (symbol_ref "<Is_float_mode>") (const_int 0))
++ (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
++ (const_string "neon_fp_vadd_ddd_vabs_dd")
++ (const_string "neon_fp_vadd_qqq_vabs_qq"))
++ (const_string "neon_int_5")))]
++)
+--- a/src/gcc/config/arm/predicates.md
++++ b/src/gcc/config/arm/predicates.md
+@@ -129,11 +129,18 @@
+ (ior (match_operand 0 "arm_rhs_operand")
+ (match_operand 0 "memory_operand")))
+
++;; This doesn't have to do much because the constant is already checked
++;; in the shift_operator predicate.
+ (define_predicate "shift_amount_operand"
+ (ior (and (match_test "TARGET_ARM")
+ (match_operand 0 "s_register_operand"))
+ (match_operand 0 "const_int_operand")))
+
++(define_predicate "const_neon_scalar_shift_amount_operand"
++ (and (match_code "const_int")
++ (match_test "((unsigned HOST_WIDE_INT) INTVAL (op)) <= GET_MODE_BITSIZE (mode)
++ && ((unsigned HOST_WIDE_INT) INTVAL (op)) > 0")))
++
+ (define_predicate "arm_add_operand"
+ (ior (match_operand 0 "arm_rhs_operand")
+ (match_operand 0 "arm_neg_immediate_operand")))
+@@ -218,13 +225,20 @@
+ (match_test "mode == GET_MODE (op)")))
+
+ ;; True for shift operators.
++;; Notes:
++;; * mult is only permitted with a constant shift amount
++;; * patterns that permit register shift amounts only in ARM mode use
++;; shift_amount_operand, patterns that always allow registers do not,
++;; so we don't have to worry about that sort of thing here.
+ (define_special_predicate "shift_operator"
+ (and (ior (ior (and (match_code "mult")
+ (match_test "power_of_two_operand (XEXP (op, 1), mode)"))
+ (and (match_code "rotate")
+ (match_test "GET_CODE (XEXP (op, 1)) == CONST_INT
+ && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1))) < 32")))
+- (match_code "ashift,ashiftrt,lshiftrt,rotatert"))
++ (and (match_code "ashift,ashiftrt,lshiftrt,rotatert")
++ (match_test "GET_CODE (XEXP (op, 1)) != CONST_INT
++ || ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1))) < 32")))
+ (match_test "mode == GET_MODE (op)")))
+
+ ;; True for MULT, to identify which variant of shift_operator is in use.
+@@ -241,11 +255,15 @@
+
+ ;; True for integer comparisons and, if FP is active, for comparisons
+ ;; other than LTGT or UNEQ.
++(define_special_predicate "expandable_comparison_operator"
++ (match_code "eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu,
++ unordered,ordered,unlt,unle,unge,ungt"))
++
++;; Likewise, but only accept comparisons that are directly supported
++;; by ARM condition codes.
+ (define_special_predicate "arm_comparison_operator"
+- (ior (match_code "eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu")
+- (and (match_test "TARGET_32BIT && TARGET_HARD_FLOAT
+- && (TARGET_FPA || TARGET_VFP)")
+- (match_code "unordered,ordered,unlt,unle,unge,ungt"))))
++ (and (match_operand 0 "expandable_comparison_operator")
++ (match_test "maybe_get_arm_condition_code (op) != ARM_NV")))
+
+ (define_special_predicate "lt_ge_comparison_operator"
+ (match_code "lt,ge"))
+@@ -289,8 +307,11 @@
+
+ (define_special_predicate "arm_extendqisi_mem_op"
+ (and (match_operand 0 "memory_operand")
+- (match_test "arm_legitimate_address_outer_p (mode, XEXP (op, 0),
+- SIGN_EXTEND, 0)")))
++ (match_test "TARGET_ARM ? arm_legitimate_address_outer_p (mode,
++ XEXP (op, 0),
++ SIGN_EXTEND,
++ 0)
++ : memory_address_p (QImode, XEXP (op, 0))")))
+
+ (define_special_predicate "arm_reg_or_extendqisi_mem_op"
+ (ior (match_operand 0 "arm_extendqisi_mem_op")
+@@ -585,6 +606,26 @@
+ return neon_immediate_valid_for_move (op, mode, NULL, NULL);
+ })
+
++(define_predicate "imm_for_neon_lshift_operand"
++ (match_code "const_vector")
++{
++ return neon_immediate_valid_for_shift (op, mode, NULL, NULL, true);
++})
++
++(define_predicate "imm_for_neon_rshift_operand"
++ (match_code "const_vector")
++{
++ return neon_immediate_valid_for_shift (op, mode, NULL, NULL, false);
++})
++
++(define_predicate "imm_lshift_or_reg_neon"
++ (ior (match_operand 0 "s_register_operand")
++ (match_operand 0 "imm_for_neon_lshift_operand")))
++
++(define_predicate "imm_rshift_or_reg_neon"
++ (ior (match_operand 0 "s_register_operand")
++ (match_operand 0 "imm_for_neon_rshift_operand")))
++
+ (define_predicate "imm_for_neon_logic_operand"
+ (match_code "const_vector")
+ {
+@@ -684,5 +725,9 @@
+ return true;
+ })
+
++(define_special_predicate "neon_struct_operand"
++ (and (match_code "mem")
++ (match_test "TARGET_32BIT && neon_vector_mem_operand (op, 2)")))
++
+ (define_special_predicate "add_operator"
+ (match_code "plus"))
+--- a/src/gcc/config/arm/semi.h
++++ b/src/gcc/config/arm/semi.h
+@@ -65,8 +65,7 @@
+ #define ASM_SPEC "\
+ %{fpic|fpie: -k} %{fPIC|fPIE: -k} \
+ %{mbig-endian:-EB} \
+-%{mcpu=*:-mcpu=%*} \
+-%{march=*:-march=%*} \
++%(arm_cpu_spec) \
+ %{mapcs-float:-mfloat} \
+ %{msoft-float:-mfloat-abi=soft} %{mhard-float:-mfloat-abi=hard} \
+ %{mfloat-abi=*} %{mfpu=*} \
+--- a/src/gcc/config/arm/sync.md
++++ b/src/gcc/config/arm/sync.md
+@@ -1,6 +1,7 @@
+ ;; Machine description for ARM processor synchronization primitives.
+ ;; Copyright (C) 2010 Free Software Foundation, Inc.
+ ;; Written by Marcus Shawcroft (marcus.shawcroft@arm.com)
++;; 64bit Atomics by Dave Gilbert (david.gilbert@linaro.org)
+ ;;
+ ;; This file is part of GCC.
+ ;;
+@@ -33,31 +34,24 @@
+ MEM_VOLATILE_P (operands[0]) = 1;
+ })
+
+-(define_expand "sync_compare_and_swapsi"
+- [(set (match_operand:SI 0 "s_register_operand")
+- (unspec_volatile:SI [(match_operand:SI 1 "memory_operand")
+- (match_operand:SI 2 "s_register_operand")
+- (match_operand:SI 3 "s_register_operand")]
+- VUNSPEC_SYNC_COMPARE_AND_SWAP))]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
+- {
+- struct arm_sync_generator generator;
+- generator.op = arm_sync_generator_omrn;
+- generator.u.omrn = gen_arm_sync_compare_and_swapsi;
+- arm_expand_sync (SImode, &generator, operands[0], operands[1], operands[2],
+- operands[3]);
+- DONE;
+- })
+
+-(define_mode_iterator NARROW [QI HI])
++(define_mode_attr sync_predtab [(SI "TARGET_HAVE_LDREX &&
++ TARGET_HAVE_MEMORY_BARRIER")
++ (QI "TARGET_HAVE_LDREXBH &&
++ TARGET_HAVE_MEMORY_BARRIER")
++ (HI "TARGET_HAVE_LDREXBH &&
++ TARGET_HAVE_MEMORY_BARRIER")
++ (DI "TARGET_HAVE_LDREXD &&
++ ARM_DOUBLEWORD_ALIGN &&
++ TARGET_HAVE_MEMORY_BARRIER")])
+
+ (define_expand "sync_compare_and_swap<mode>"
+- [(set (match_operand:NARROW 0 "s_register_operand")
+- (unspec_volatile:NARROW [(match_operand:NARROW 1 "memory_operand")
+- (match_operand:NARROW 2 "s_register_operand")
+- (match_operand:NARROW 3 "s_register_operand")]
++ [(set (match_operand:QHSD 0 "s_register_operand")
++ (unspec_volatile:QHSD [(match_operand:QHSD 1 "memory_operand")
++ (match_operand:QHSD 2 "s_register_operand")
++ (match_operand:QHSD 3 "s_register_operand")]
+ VUNSPEC_SYNC_COMPARE_AND_SWAP))]
+- "TARGET_HAVE_LDREXBHD && TARGET_HAVE_MEMORY_BARRIER"
++ "<sync_predtab>"
+ {
+ struct arm_sync_generator generator;
+ generator.op = arm_sync_generator_omrn;
+@@ -67,25 +61,11 @@
+ DONE;
+ })
+
+-(define_expand "sync_lock_test_and_setsi"
+- [(match_operand:SI 0 "s_register_operand")
+- (match_operand:SI 1 "memory_operand")
+- (match_operand:SI 2 "s_register_operand")]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
+- {
+- struct arm_sync_generator generator;
+- generator.op = arm_sync_generator_omn;
+- generator.u.omn = gen_arm_sync_lock_test_and_setsi;
+- arm_expand_sync (SImode, &generator, operands[0], operands[1], NULL,
+- operands[2]);
+- DONE;
+- })
+-
+ (define_expand "sync_lock_test_and_set<mode>"
+- [(match_operand:NARROW 0 "s_register_operand")
+- (match_operand:NARROW 1 "memory_operand")
+- (match_operand:NARROW 2 "s_register_operand")]
+- "TARGET_HAVE_LDREXBHD && TARGET_HAVE_MEMORY_BARRIER"
++ [(match_operand:QHSD 0 "s_register_operand")
++ (match_operand:QHSD 1 "memory_operand")
++ (match_operand:QHSD 2 "s_register_operand")]
++ "<sync_predtab>"
+ {
+ struct arm_sync_generator generator;
+ generator.op = arm_sync_generator_omn;
+@@ -115,51 +95,25 @@
+ (plus "*")
+ (minus "*")])
+
+-(define_expand "sync_<sync_optab>si"
+- [(match_operand:SI 0 "memory_operand")
+- (match_operand:SI 1 "s_register_operand")
+- (syncop:SI (match_dup 0) (match_dup 1))]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
+- {
+- struct arm_sync_generator generator;
+- generator.op = arm_sync_generator_omn;
+- generator.u.omn = gen_arm_sync_new_<sync_optab>si;
+- arm_expand_sync (SImode, &generator, NULL, operands[0], NULL, operands[1]);
+- DONE;
+- })
+-
+-(define_expand "sync_nandsi"
+- [(match_operand:SI 0 "memory_operand")
+- (match_operand:SI 1 "s_register_operand")
+- (not:SI (and:SI (match_dup 0) (match_dup 1)))]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
+- {
+- struct arm_sync_generator generator;
+- generator.op = arm_sync_generator_omn;
+- generator.u.omn = gen_arm_sync_new_nandsi;
+- arm_expand_sync (SImode, &generator, NULL, operands[0], NULL, operands[1]);
+- DONE;
+- })
+-
+ (define_expand "sync_<sync_optab><mode>"
+- [(match_operand:NARROW 0 "memory_operand")
+- (match_operand:NARROW 1 "s_register_operand")
+- (syncop:NARROW (match_dup 0) (match_dup 1))]
+- "TARGET_HAVE_LDREXBHD && TARGET_HAVE_MEMORY_BARRIER"
++ [(match_operand:QHSD 0 "memory_operand")
++ (match_operand:QHSD 1 "s_register_operand")
++ (syncop:QHSD (match_dup 0) (match_dup 1))]
++ "<sync_predtab>"
+ {
+ struct arm_sync_generator generator;
+ generator.op = arm_sync_generator_omn;
+ generator.u.omn = gen_arm_sync_new_<sync_optab><mode>;
+ arm_expand_sync (<MODE>mode, &generator, NULL, operands[0], NULL,
+- operands[1]);
++ operands[1]);
+ DONE;
+ })
+
+ (define_expand "sync_nand<mode>"
+- [(match_operand:NARROW 0 "memory_operand")
+- (match_operand:NARROW 1 "s_register_operand")
+- (not:NARROW (and:NARROW (match_dup 0) (match_dup 1)))]
+- "TARGET_HAVE_LDREXBHD && TARGET_HAVE_MEMORY_BARRIER"
++ [(match_operand:QHSD 0 "memory_operand")
++ (match_operand:QHSD 1 "s_register_operand")
++ (not:QHSD (and:QHSD (match_dup 0) (match_dup 1)))]
++ "<sync_predtab>"
+ {
+ struct arm_sync_generator generator;
+ generator.op = arm_sync_generator_omn;
+@@ -169,57 +123,27 @@
+ DONE;
+ })
+
+-(define_expand "sync_new_<sync_optab>si"
+- [(match_operand:SI 0 "s_register_operand")
+- (match_operand:SI 1 "memory_operand")
+- (match_operand:SI 2 "s_register_operand")
+- (syncop:SI (match_dup 1) (match_dup 2))]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
+- {
+- struct arm_sync_generator generator;
+- generator.op = arm_sync_generator_omn;
+- generator.u.omn = gen_arm_sync_new_<sync_optab>si;
+- arm_expand_sync (SImode, &generator, operands[0], operands[1], NULL,
+- operands[2]);
+- DONE;
+- })
+-
+-(define_expand "sync_new_nandsi"
+- [(match_operand:SI 0 "s_register_operand")
+- (match_operand:SI 1 "memory_operand")
+- (match_operand:SI 2 "s_register_operand")
+- (not:SI (and:SI (match_dup 1) (match_dup 2)))]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
+- {
+- struct arm_sync_generator generator;
+- generator.op = arm_sync_generator_omn;
+- generator.u.omn = gen_arm_sync_new_nandsi;
+- arm_expand_sync (SImode, &generator, operands[0], operands[1], NULL,
+- operands[2]);
+- DONE;
+- })
+-
+ (define_expand "sync_new_<sync_optab><mode>"
+- [(match_operand:NARROW 0 "s_register_operand")
+- (match_operand:NARROW 1 "memory_operand")
+- (match_operand:NARROW 2 "s_register_operand")
+- (syncop:NARROW (match_dup 1) (match_dup 2))]
+- "TARGET_HAVE_LDREXBHD && TARGET_HAVE_MEMORY_BARRIER"
++ [(match_operand:QHSD 0 "s_register_operand")
++ (match_operand:QHSD 1 "memory_operand")
++ (match_operand:QHSD 2 "s_register_operand")
++ (syncop:QHSD (match_dup 1) (match_dup 2))]
++ "<sync_predtab>"
+ {
+ struct arm_sync_generator generator;
+ generator.op = arm_sync_generator_omn;
+ generator.u.omn = gen_arm_sync_new_<sync_optab><mode>;
+ arm_expand_sync (<MODE>mode, &generator, operands[0], operands[1],
+- NULL, operands[2]);
++ NULL, operands[2]);
+ DONE;
+ })
+
+ (define_expand "sync_new_nand<mode>"
+- [(match_operand:NARROW 0 "s_register_operand")
+- (match_operand:NARROW 1 "memory_operand")
+- (match_operand:NARROW 2 "s_register_operand")
+- (not:NARROW (and:NARROW (match_dup 1) (match_dup 2)))]
+- "TARGET_HAVE_LDREXBHD && TARGET_HAVE_MEMORY_BARRIER"
++ [(match_operand:QHSD 0 "s_register_operand")
++ (match_operand:QHSD 1 "memory_operand")
++ (match_operand:QHSD 2 "s_register_operand")
++ (not:QHSD (and:QHSD (match_dup 1) (match_dup 2)))]
++ "<sync_predtab>"
+ {
+ struct arm_sync_generator generator;
+ generator.op = arm_sync_generator_omn;
+@@ -229,57 +153,27 @@
+ DONE;
+ });
+
+-(define_expand "sync_old_<sync_optab>si"
+- [(match_operand:SI 0 "s_register_operand")
+- (match_operand:SI 1 "memory_operand")
+- (match_operand:SI 2 "s_register_operand")
+- (syncop:SI (match_dup 1) (match_dup 2))]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
+- {
+- struct arm_sync_generator generator;
+- generator.op = arm_sync_generator_omn;
+- generator.u.omn = gen_arm_sync_old_<sync_optab>si;
+- arm_expand_sync (SImode, &generator, operands[0], operands[1], NULL,
+- operands[2]);
+- DONE;
+- })
+-
+-(define_expand "sync_old_nandsi"
+- [(match_operand:SI 0 "s_register_operand")
+- (match_operand:SI 1 "memory_operand")
+- (match_operand:SI 2 "s_register_operand")
+- (not:SI (and:SI (match_dup 1) (match_dup 2)))]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
+- {
+- struct arm_sync_generator generator;
+- generator.op = arm_sync_generator_omn;
+- generator.u.omn = gen_arm_sync_old_nandsi;
+- arm_expand_sync (SImode, &generator, operands[0], operands[1], NULL,
+- operands[2]);
+- DONE;
+- })
+-
+ (define_expand "sync_old_<sync_optab><mode>"
+- [(match_operand:NARROW 0 "s_register_operand")
+- (match_operand:NARROW 1 "memory_operand")
+- (match_operand:NARROW 2 "s_register_operand")
+- (syncop:NARROW (match_dup 1) (match_dup 2))]
+- "TARGET_HAVE_LDREXBHD && TARGET_HAVE_MEMORY_BARRIER"
++ [(match_operand:QHSD 0 "s_register_operand")
++ (match_operand:QHSD 1 "memory_operand")
++ (match_operand:QHSD 2 "s_register_operand")
++ (syncop:QHSD (match_dup 1) (match_dup 2))]
++ "<sync_predtab>"
+ {
+ struct arm_sync_generator generator;
+ generator.op = arm_sync_generator_omn;
+ generator.u.omn = gen_arm_sync_old_<sync_optab><mode>;
+ arm_expand_sync (<MODE>mode, &generator, operands[0], operands[1],
+- NULL, operands[2]);
++ NULL, operands[2]);
+ DONE;
+ })
+
+ (define_expand "sync_old_nand<mode>"
+- [(match_operand:NARROW 0 "s_register_operand")
+- (match_operand:NARROW 1 "memory_operand")
+- (match_operand:NARROW 2 "s_register_operand")
+- (not:NARROW (and:NARROW (match_dup 1) (match_dup 2)))]
+- "TARGET_HAVE_LDREXBHD && TARGET_HAVE_MEMORY_BARRIER"
++ [(match_operand:QHSD 0 "s_register_operand")
++ (match_operand:QHSD 1 "memory_operand")
++ (match_operand:QHSD 2 "s_register_operand")
++ (not:QHSD (and:QHSD (match_dup 1) (match_dup 2)))]
++ "<sync_predtab>"
+ {
+ struct arm_sync_generator generator;
+ generator.op = arm_sync_generator_omn;
+@@ -289,22 +183,22 @@
+ DONE;
+ })
+
+-(define_insn "arm_sync_compare_and_swapsi"
+- [(set (match_operand:SI 0 "s_register_operand" "=&r")
+- (unspec_volatile:SI
+- [(match_operand:SI 1 "arm_sync_memory_operand" "+Q")
+- (match_operand:SI 2 "s_register_operand" "r")
+- (match_operand:SI 3 "s_register_operand" "r")]
+- VUNSPEC_SYNC_COMPARE_AND_SWAP))
+- (set (match_dup 1) (unspec_volatile:SI [(match_dup 2)]
++(define_insn "arm_sync_compare_and_swap<mode>"
++ [(set (match_operand:SIDI 0 "s_register_operand" "=&r")
++ (unspec_volatile:SIDI
++ [(match_operand:SIDI 1 "arm_sync_memory_operand" "+Q")
++ (match_operand:SIDI 2 "s_register_operand" "r")
++ (match_operand:SIDI 3 "s_register_operand" "r")]
++ VUNSPEC_SYNC_COMPARE_AND_SWAP))
++ (set (match_dup 1) (unspec_volatile:SIDI [(match_dup 2)]
+ VUNSPEC_SYNC_COMPARE_AND_SWAP))
+ (set (reg:CC CC_REGNUM) (unspec_volatile:CC [(match_dup 1)]
+ VUNSPEC_SYNC_COMPARE_AND_SWAP))
+ ]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
++ "<sync_predtab>"
+ {
+ return arm_output_sync_insn (insn, operands);
+- }
++ }
+ [(set_attr "sync_result" "0")
+ (set_attr "sync_memory" "1")
+ (set_attr "sync_required_value" "2")
+@@ -318,7 +212,7 @@
+ (zero_extend:SI
+ (unspec_volatile:NARROW
+ [(match_operand:NARROW 1 "arm_sync_memory_operand" "+Q")
+- (match_operand:SI 2 "s_register_operand" "r")
++ (match_operand:SI 2 "s_register_operand" "r")
+ (match_operand:SI 3 "s_register_operand" "r")]
+ VUNSPEC_SYNC_COMPARE_AND_SWAP)))
+ (set (match_dup 1) (unspec_volatile:NARROW [(match_dup 2)]
+@@ -326,10 +220,10 @@
+ (set (reg:CC CC_REGNUM) (unspec_volatile:CC [(match_dup 1)]
+ VUNSPEC_SYNC_COMPARE_AND_SWAP))
+ ]
+- "TARGET_HAVE_LDREXBHD && TARGET_HAVE_MEMORY_BARRIER"
++ "<sync_predtab>"
+ {
+ return arm_output_sync_insn (insn, operands);
+- }
++ }
+ [(set_attr "sync_result" "0")
+ (set_attr "sync_memory" "1")
+ (set_attr "sync_required_value" "2")
+@@ -338,18 +232,18 @@
+ (set_attr "conds" "clob")
+ (set_attr "predicable" "no")])
+
+-(define_insn "arm_sync_lock_test_and_setsi"
+- [(set (match_operand:SI 0 "s_register_operand" "=&r")
+- (match_operand:SI 1 "arm_sync_memory_operand" "+Q"))
++(define_insn "arm_sync_lock_test_and_set<mode>"
++ [(set (match_operand:SIDI 0 "s_register_operand" "=&r")
++ (match_operand:SIDI 1 "arm_sync_memory_operand" "+Q"))
+ (set (match_dup 1)
+- (unspec_volatile:SI [(match_operand:SI 2 "s_register_operand" "r")]
+- VUNSPEC_SYNC_LOCK))
++ (unspec_volatile:SIDI [(match_operand:SIDI 2 "s_register_operand" "r")]
++ VUNSPEC_SYNC_LOCK))
+ (clobber (reg:CC CC_REGNUM))
+ (clobber (match_scratch:SI 3 "=&r"))]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
++ "<sync_predtab>"
+ {
+ return arm_output_sync_insn (insn, operands);
+- }
++ }
+ [(set_attr "sync_release_barrier" "no")
+ (set_attr "sync_result" "0")
+ (set_attr "sync_memory" "1")
+@@ -364,10 +258,10 @@
+ (zero_extend:SI (match_operand:NARROW 1 "arm_sync_memory_operand" "+Q")))
+ (set (match_dup 1)
+ (unspec_volatile:NARROW [(match_operand:SI 2 "s_register_operand" "r")]
+- VUNSPEC_SYNC_LOCK))
++ VUNSPEC_SYNC_LOCK))
+ (clobber (reg:CC CC_REGNUM))
+ (clobber (match_scratch:SI 3 "=&r"))]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
++ "<sync_predtab>"
+ {
+ return arm_output_sync_insn (insn, operands);
+ }
+@@ -380,22 +274,22 @@
+ (set_attr "conds" "clob")
+ (set_attr "predicable" "no")])
+
+-(define_insn "arm_sync_new_<sync_optab>si"
+- [(set (match_operand:SI 0 "s_register_operand" "=&r")
+- (unspec_volatile:SI [(syncop:SI
+- (match_operand:SI 1 "arm_sync_memory_operand" "+Q")
+- (match_operand:SI 2 "s_register_operand" "r"))
+- ]
+- VUNSPEC_SYNC_NEW_OP))
++(define_insn "arm_sync_new_<sync_optab><mode>"
++ [(set (match_operand:SIDI 0 "s_register_operand" "=&r")
++ (unspec_volatile:SIDI [(syncop:SIDI
++ (match_operand:SIDI 1 "arm_sync_memory_operand" "+Q")
++ (match_operand:SIDI 2 "s_register_operand" "r"))
++ ]
++ VUNSPEC_SYNC_NEW_OP))
+ (set (match_dup 1)
+- (unspec_volatile:SI [(match_dup 1) (match_dup 2)]
+- VUNSPEC_SYNC_NEW_OP))
++ (unspec_volatile:SIDI [(match_dup 1) (match_dup 2)]
++ VUNSPEC_SYNC_NEW_OP))
+ (clobber (reg:CC CC_REGNUM))
+ (clobber (match_scratch:SI 3 "=&r"))]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
++ "<sync_predtab>"
+ {
+ return arm_output_sync_insn (insn, operands);
+- }
++ }
+ [(set_attr "sync_result" "0")
+ (set_attr "sync_memory" "1")
+ (set_attr "sync_new_value" "2")
+@@ -405,54 +299,54 @@
+ (set_attr "conds" "clob")
+ (set_attr "predicable" "no")])
+
+-(define_insn "arm_sync_new_nandsi"
++(define_insn "arm_sync_new_<sync_optab><mode>"
+ [(set (match_operand:SI 0 "s_register_operand" "=&r")
+- (unspec_volatile:SI [(not:SI (and:SI
+- (match_operand:SI 1 "arm_sync_memory_operand" "+Q")
+- (match_operand:SI 2 "s_register_operand" "r")))
+- ]
+- VUNSPEC_SYNC_NEW_OP))
++ (unspec_volatile:SI [(syncop:SI
++ (zero_extend:SI
++ (match_operand:NARROW 1 "arm_sync_memory_operand" "+Q"))
++ (match_operand:SI 2 "s_register_operand" "r"))
++ ]
++ VUNSPEC_SYNC_NEW_OP))
+ (set (match_dup 1)
+- (unspec_volatile:SI [(match_dup 1) (match_dup 2)]
+- VUNSPEC_SYNC_NEW_OP))
++ (unspec_volatile:NARROW [(match_dup 1) (match_dup 2)]
++ VUNSPEC_SYNC_NEW_OP))
+ (clobber (reg:CC CC_REGNUM))
+ (clobber (match_scratch:SI 3 "=&r"))]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
++ "<sync_predtab>"
+ {
+ return arm_output_sync_insn (insn, operands);
+- }
++ }
+ [(set_attr "sync_result" "0")
+ (set_attr "sync_memory" "1")
+ (set_attr "sync_new_value" "2")
+ (set_attr "sync_t1" "0")
+ (set_attr "sync_t2" "3")
+- (set_attr "sync_op" "nand")
++ (set_attr "sync_op" "<sync_optab>")
+ (set_attr "conds" "clob")
+ (set_attr "predicable" "no")])
+
+-(define_insn "arm_sync_new_<sync_optab><mode>"
+- [(set (match_operand:SI 0 "s_register_operand" "=&r")
+- (unspec_volatile:SI [(syncop:SI
+- (zero_extend:SI
+- (match_operand:NARROW 1 "arm_sync_memory_operand" "+Q"))
+- (match_operand:SI 2 "s_register_operand" "r"))
+- ]
+- VUNSPEC_SYNC_NEW_OP))
++(define_insn "arm_sync_new_nand<mode>"
++ [(set (match_operand:SIDI 0 "s_register_operand" "=&r")
++ (unspec_volatile:SIDI [(not:SIDI (and:SIDI
++ (match_operand:SIDI 1 "arm_sync_memory_operand" "+Q")
++ (match_operand:SIDI 2 "s_register_operand" "r")))
++ ]
++ VUNSPEC_SYNC_NEW_OP))
+ (set (match_dup 1)
+- (unspec_volatile:NARROW [(match_dup 1) (match_dup 2)]
+- VUNSPEC_SYNC_NEW_OP))
++ (unspec_volatile:SIDI [(match_dup 1) (match_dup 2)]
++ VUNSPEC_SYNC_NEW_OP))
+ (clobber (reg:CC CC_REGNUM))
+ (clobber (match_scratch:SI 3 "=&r"))]
+- "TARGET_HAVE_LDREXBHD && TARGET_HAVE_MEMORY_BARRIER"
++ "<sync_predtab>"
+ {
+ return arm_output_sync_insn (insn, operands);
+- }
++ }
+ [(set_attr "sync_result" "0")
+ (set_attr "sync_memory" "1")
+ (set_attr "sync_new_value" "2")
+ (set_attr "sync_t1" "0")
+ (set_attr "sync_t2" "3")
+- (set_attr "sync_op" "<sync_optab>")
++ (set_attr "sync_op" "nand")
+ (set_attr "conds" "clob")
+ (set_attr "predicable" "no")])
+
+@@ -461,19 +355,19 @@
+ (unspec_volatile:SI
+ [(not:SI
+ (and:SI
+- (zero_extend:SI
+- (match_operand:NARROW 1 "arm_sync_memory_operand" "+Q"))
+- (match_operand:SI 2 "s_register_operand" "r")))
++ (zero_extend:SI
++ (match_operand:NARROW 1 "arm_sync_memory_operand" "+Q"))
++ (match_operand:SI 2 "s_register_operand" "r")))
+ ] VUNSPEC_SYNC_NEW_OP))
+ (set (match_dup 1)
+ (unspec_volatile:NARROW [(match_dup 1) (match_dup 2)]
+- VUNSPEC_SYNC_NEW_OP))
++ VUNSPEC_SYNC_NEW_OP))
+ (clobber (reg:CC CC_REGNUM))
+ (clobber (match_scratch:SI 3 "=&r"))]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
++ "<sync_predtab>"
+ {
+ return arm_output_sync_insn (insn, operands);
+- }
++ }
+ [(set_attr "sync_result" "0")
+ (set_attr "sync_memory" "1")
+ (set_attr "sync_new_value" "2")
+@@ -483,20 +377,20 @@
+ (set_attr "conds" "clob")
+ (set_attr "predicable" "no")])
+
+-(define_insn "arm_sync_old_<sync_optab>si"
+- [(set (match_operand:SI 0 "s_register_operand" "=&r")
+- (unspec_volatile:SI [(syncop:SI
+- (match_operand:SI 1 "arm_sync_memory_operand" "+Q")
+- (match_operand:SI 2 "s_register_operand" "r"))
+- ]
+- VUNSPEC_SYNC_OLD_OP))
++(define_insn "arm_sync_old_<sync_optab><mode>"
++ [(set (match_operand:SIDI 0 "s_register_operand" "=&r")
++ (unspec_volatile:SIDI [(syncop:SIDI
++ (match_operand:SIDI 1 "arm_sync_memory_operand" "+Q")
++ (match_operand:SIDI 2 "s_register_operand" "r"))
++ ]
++ VUNSPEC_SYNC_OLD_OP))
+ (set (match_dup 1)
+- (unspec_volatile:SI [(match_dup 1) (match_dup 2)]
+- VUNSPEC_SYNC_OLD_OP))
++ (unspec_volatile:SIDI [(match_dup 1) (match_dup 2)]
++ VUNSPEC_SYNC_OLD_OP))
+ (clobber (reg:CC CC_REGNUM))
+- (clobber (match_scratch:SI 3 "=&r"))
++ (clobber (match_scratch:SIDI 3 "=&r"))
+ (clobber (match_scratch:SI 4 "<sync_clobber>"))]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
++ "<sync_predtab>"
+ {
+ return arm_output_sync_insn (insn, operands);
+ }
+@@ -509,20 +403,21 @@
+ (set_attr "conds" "clob")
+ (set_attr "predicable" "no")])
+
+-(define_insn "arm_sync_old_nandsi"
++(define_insn "arm_sync_old_<sync_optab><mode>"
+ [(set (match_operand:SI 0 "s_register_operand" "=&r")
+- (unspec_volatile:SI [(not:SI (and:SI
+- (match_operand:SI 1 "arm_sync_memory_operand" "+Q")
+- (match_operand:SI 2 "s_register_operand" "r")))
+- ]
+- VUNSPEC_SYNC_OLD_OP))
++ (unspec_volatile:SI [(syncop:SI
++ (zero_extend:SI
++ (match_operand:NARROW 1 "arm_sync_memory_operand" "+Q"))
++ (match_operand:SI 2 "s_register_operand" "r"))
++ ]
++ VUNSPEC_SYNC_OLD_OP))
+ (set (match_dup 1)
+- (unspec_volatile:SI [(match_dup 1) (match_dup 2)]
+- VUNSPEC_SYNC_OLD_OP))
++ (unspec_volatile:NARROW [(match_dup 1) (match_dup 2)]
++ VUNSPEC_SYNC_OLD_OP))
+ (clobber (reg:CC CC_REGNUM))
+ (clobber (match_scratch:SI 3 "=&r"))
+- (clobber (match_scratch:SI 4 "=&r"))]
+- "TARGET_HAVE_LDREX && TARGET_HAVE_MEMORY_BARRIER"
++ (clobber (match_scratch:SI 4 "<sync_clobber>"))]
++ "<sync_predtab>"
+ {
+ return arm_output_sync_insn (insn, operands);
+ }
+@@ -530,26 +425,25 @@
+ (set_attr "sync_memory" "1")
+ (set_attr "sync_new_value" "2")
+ (set_attr "sync_t1" "3")
+- (set_attr "sync_t2" "4")
+- (set_attr "sync_op" "nand")
++ (set_attr "sync_t2" "<sync_t2_reqd>")
++ (set_attr "sync_op" "<sync_optab>")
+ (set_attr "conds" "clob")
+ (set_attr "predicable" "no")])
+
+-(define_insn "arm_sync_old_<sync_optab><mode>"
+- [(set (match_operand:SI 0 "s_register_operand" "=&r")
+- (unspec_volatile:SI [(syncop:SI
+- (zero_extend:SI
+- (match_operand:NARROW 1 "arm_sync_memory_operand" "+Q"))
+- (match_operand:SI 2 "s_register_operand" "r"))
+- ]
+- VUNSPEC_SYNC_OLD_OP))
++(define_insn "arm_sync_old_nand<mode>"
++ [(set (match_operand:SIDI 0 "s_register_operand" "=&r")
++ (unspec_volatile:SIDI [(not:SIDI (and:SIDI
++ (match_operand:SIDI 1 "arm_sync_memory_operand" "+Q")
++ (match_operand:SIDI 2 "s_register_operand" "r")))
++ ]
++ VUNSPEC_SYNC_OLD_OP))
+ (set (match_dup 1)
+- (unspec_volatile:NARROW [(match_dup 1) (match_dup 2)]
++ (unspec_volatile:SIDI [(match_dup 1) (match_dup 2)]
+ VUNSPEC_SYNC_OLD_OP))
+ (clobber (reg:CC CC_REGNUM))
+- (clobber (match_scratch:SI 3 "=&r"))
+- (clobber (match_scratch:SI 4 "<sync_clobber>"))]
+- "TARGET_HAVE_LDREXBHD && TARGET_HAVE_MEMORY_BARRIER"
++ (clobber (match_scratch:SIDI 3 "=&r"))
++ (clobber (match_scratch:SI 4 "=&r"))]
++ "<sync_predtab>"
+ {
+ return arm_output_sync_insn (insn, operands);
+ }
+@@ -557,26 +451,26 @@
+ (set_attr "sync_memory" "1")
+ (set_attr "sync_new_value" "2")
+ (set_attr "sync_t1" "3")
+- (set_attr "sync_t2" "<sync_t2_reqd>")
+- (set_attr "sync_op" "<sync_optab>")
++ (set_attr "sync_t2" "4")
++ (set_attr "sync_op" "nand")
+ (set_attr "conds" "clob")
+ (set_attr "predicable" "no")])
+
+ (define_insn "arm_sync_old_nand<mode>"
+ [(set (match_operand:SI 0 "s_register_operand" "=&r")
+- (unspec_volatile:SI [(not:SI (and:SI
+- (zero_extend:SI
+- (match_operand:NARROW 1 "arm_sync_memory_operand" "+Q"))
+- (match_operand:SI 2 "s_register_operand" "r")))
+- ]
+- VUNSPEC_SYNC_OLD_OP))
++ (unspec_volatile:SI [(not:SI (and:SI
++ (zero_extend:SI
++ (match_operand:NARROW 1 "arm_sync_memory_operand" "+Q"))
++ (match_operand:SI 2 "s_register_operand" "r")))
++ ]
++ VUNSPEC_SYNC_OLD_OP))
+ (set (match_dup 1)
+- (unspec_volatile:NARROW [(match_dup 1) (match_dup 2)]
+- VUNSPEC_SYNC_OLD_OP))
++ (unspec_volatile:NARROW [(match_dup 1) (match_dup 2)]
++ VUNSPEC_SYNC_OLD_OP))
+ (clobber (reg:CC CC_REGNUM))
+ (clobber (match_scratch:SI 3 "=&r"))
+ (clobber (match_scratch:SI 4 "=&r"))]
+- "TARGET_HAVE_LDREXBHD && TARGET_HAVE_MEMORY_BARRIER"
++ "<sync_predtab>"
+ {
+ return arm_output_sync_insn (insn, operands);
+ }
+--- a/src/gcc/config/arm/t-arm
++++ b/src/gcc/config/arm/t-arm
+@@ -31,6 +31,16 @@
+ $(srcdir)/config/arm/fmp626.md \
+ $(srcdir)/config/arm/fa726te.md \
+ $(srcdir)/config/arm/arm926ejs.md \
++ $(srcdir)/config/arm/cortex-a15.md \
++ $(srcdir)/config/arm/cortex-a5.md \
++ $(srcdir)/config/arm/cortex-a8.md \
++ $(srcdir)/config/arm/cortex-a8-neon.md \
++ $(srcdir)/config/arm/cortex-a9.md \
++ $(srcdir)/config/arm/cortex-a9-neon.md \
++ $(srcdir)/config/arm/cortex-m4-fpu.md \
++ $(srcdir)/config/arm/cortex-m4.md \
++ $(srcdir)/config/arm/cortex-r4f.md \
++ $(srcdir)/config/arm/cortex-r4.md \
+ $(srcdir)/config/arm/cirrus.md \
+ $(srcdir)/config/arm/fpa.md \
+ $(srcdir)/config/arm/vec-common.md \
+--- a/src/gcc/config/arm/t-linux-eabi
++++ b/src/gcc/config/arm/t-linux-eabi
+@@ -36,3 +36,4 @@
+ EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
+
+ LIB2FUNCS_STATIC_EXTRA += $(srcdir)/config/arm/linux-atomic.c
++LIB2FUNCS_STATIC_EXTRA += $(srcdir)/config/arm/linux-atomic-64bit.c
+--- a/src/gcc/config/arm/thumb2.md
++++ b/src/gcc/config/arm/thumb2.md
+@@ -207,7 +207,9 @@
+ (define_insn "*thumb2_movhi_insn"
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m,r")
+ (match_operand:HI 1 "general_operand" "rI,n,r,m"))]
+- "TARGET_THUMB2"
++ "TARGET_THUMB2
++ && (register_operand (operands[0], HImode)
++ || register_operand (operands[1], HImode))"
+ "@
+ mov%?\\t%0, %1\\t%@ movhi
+ movw%?\\t%0, %L1\\t%@ movhi
+@@ -779,26 +781,6 @@
+ (set_attr "length" "2")]
+ )
+
+-(define_insn "divsi3"
+- [(set (match_operand:SI 0 "s_register_operand" "=r")
+- (div:SI (match_operand:SI 1 "s_register_operand" "r")
+- (match_operand:SI 2 "s_register_operand" "r")))]
+- "TARGET_THUMB2 && arm_arch_hwdiv"
+- "sdiv%?\t%0, %1, %2"
+- [(set_attr "predicable" "yes")
+- (set_attr "insn" "sdiv")]
+-)
+-
+-(define_insn "udivsi3"
+- [(set (match_operand:SI 0 "s_register_operand" "=r")
+- (udiv:SI (match_operand:SI 1 "s_register_operand" "r")
+- (match_operand:SI 2 "s_register_operand" "r")))]
+- "TARGET_THUMB2 && arm_arch_hwdiv"
+- "udiv%?\t%0, %1, %2"
+- [(set_attr "predicable" "yes")
+- (set_attr "insn" "udiv")]
+-)
+-
+ (define_insn "*thumb2_subsi_short"
+ [(set (match_operand:SI 0 "low_register_operand" "=l")
+ (minus:SI (match_operand:SI 1 "low_register_operand" "l")
+@@ -836,7 +818,7 @@
+ "operands[4] = GEN_INT (- INTVAL (operands[2]));"
+ )
+
+-(define_insn "*thumb2_addsi3_compare0"
++(define_insn "thumb2_addsi3_compare0"
+ [(set (reg:CC_NOOV CC_REGNUM)
+ (compare:CC_NOOV
+ (plus:SI (match_operand:SI 1 "s_register_operand" "l, 0, r")
+@@ -1118,3 +1100,54 @@
+ "
+ operands[2] = GEN_INT (32 - INTVAL (operands[2]));
+ ")
++
++;; Define the subtract-one-and-jump insns so loop.c
++;; knows what to generate.
++(define_expand "doloop_end"
++ [(use (match_operand 0 "" "")) ; loop pseudo
++ (use (match_operand 1 "" "")) ; iterations; zero if unknown
++ (use (match_operand 2 "" "")) ; max iterations
++ (use (match_operand 3 "" "")) ; loop level
++ (use (match_operand 4 "" ""))] ; label
++ "TARGET_32BIT"
++ "
++ {
++ /* Currently SMS relies on the do-loop pattern to recognize loops
++ where (1) the control part consists of all insns defining and/or
++ using a certain 'count' register and (2) the loop count can be
++ adjusted by modifying this register prior to the loop.
++ ??? The possible introduction of a new block to initialize the
++ new IV can potentially affect branch optimizations. */
++ if (optimize > 0 && flag_modulo_sched)
++ {
++ rtx s0;
++ rtx bcomp;
++ rtx loc_ref;
++ rtx cc_reg;
++ rtx insn;
++ rtx cmp;
++
++ /* Only use this on innermost loops. */
++ if (INTVAL (operands[3]) > 1)
++ FAIL;
++ if (GET_MODE (operands[0]) != SImode)
++ FAIL;
++
++ s0 = operands [0];
++ if (TARGET_THUMB2)
++ insn = emit_insn (gen_thumb2_addsi3_compare0 (s0, s0, GEN_INT (-1)));
++ else
++ insn = emit_insn (gen_addsi3_compare0 (s0, s0, GEN_INT (-1)));
++
++ cmp = XVECEXP (PATTERN (insn), 0, 0);
++ cc_reg = SET_DEST (cmp);
++ bcomp = gen_rtx_NE (VOIDmode, cc_reg, const0_rtx);
++ loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands [4]);
++ emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx,
++ gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp,
++ loc_ref, pc_rtx)));
++ DONE;
++ }else
++ FAIL;
++}")
++
+--- a/src/gcc/config/arm/unwind-arm.c
++++ b/src/gcc/config/arm/unwind-arm.c
+@@ -32,13 +32,18 @@
+ typedef unsigned char bool;
+
+ typedef struct _ZSt9type_info type_info; /* This names C++ type_info type */
++enum __cxa_type_match_result
++ {
++ ctm_failed = 0,
++ ctm_succeeded = 1,
++ ctm_succeeded_with_ptr_to_base = 2
++ };
+
+ void __attribute__((weak)) __cxa_call_unexpected(_Unwind_Control_Block *ucbp);
+ bool __attribute__((weak)) __cxa_begin_cleanup(_Unwind_Control_Block *ucbp);
+-bool __attribute__((weak)) __cxa_type_match(_Unwind_Control_Block *ucbp,
+- const type_info *rttip,
+- bool is_reference,
+- void **matched_object);
++enum __cxa_type_match_result __attribute__((weak)) __cxa_type_match
++ (_Unwind_Control_Block *ucbp, const type_info *rttip,
++ bool is_reference, void **matched_object);
+
+ _Unwind_Ptr __attribute__((weak))
+ __gnu_Unwind_Find_exidx (_Unwind_Ptr, int *);
+@@ -1107,6 +1112,7 @@
+ _uw rtti;
+ bool is_reference = (data[0] & uint32_highbit) != 0;
+ void *matched;
++ enum __cxa_type_match_result match_type;
+
+ /* Check for no-throw areas. */
+ if (data[1] == (_uw) -2)
+@@ -1118,17 +1124,31 @@
+ {
+ /* Match a catch specification. */
+ rtti = _Unwind_decode_target2 ((_uw) &data[1]);
+- if (!__cxa_type_match (ucbp, (type_info *) rtti,
+- is_reference,
+- &matched))
+- matched = (void *)0;
++ match_type = __cxa_type_match (ucbp,
++ (type_info *) rtti,
++ is_reference,
++ &matched);
+ }
++ else
++ match_type = ctm_succeeded;
+
+- if (matched)
++ if (match_type)
+ {
+ ucbp->barrier_cache.sp =
+ _Unwind_GetGR (context, R_SP);
+- ucbp->barrier_cache.bitpattern[0] = (_uw) matched;
++ // ctm_succeeded_with_ptr_to_base really
++ // means _c_t_m indirected the pointer
++ // object. We have to reconstruct the
++ // additional pointer layer by using a temporary.
++ if (match_type == ctm_succeeded_with_ptr_to_base)
++ {
++ ucbp->barrier_cache.bitpattern[2]
++ = (_uw) matched;
++ ucbp->barrier_cache.bitpattern[0]
++ = (_uw) &ucbp->barrier_cache.bitpattern[2];
++ }
++ else
++ ucbp->barrier_cache.bitpattern[0] = (_uw) matched;
+ ucbp->barrier_cache.bitpattern[1] = (_uw) data;
+ return _URC_HANDLER_FOUND;
+ }
+@@ -1196,8 +1216,6 @@
+ ucbp->barrier_cache.bitpattern[4] = (_uw) &data[1];
+
+ if (data[0] & uint32_highbit)
+- phase2_call_unexpected_after_unwind = 1;
+- else
+ {
+ data += rtti_count + 1;
+ /* Setup for entry to the handler. */
+@@ -1207,6 +1225,8 @@
+ _Unwind_SetGR (context, 0, (_uw) ucbp);
+ return _URC_INSTALL_CONTEXT;
+ }
++ else
++ phase2_call_unexpected_after_unwind = 1;
+ }
+ if (data[0] & uint32_highbit)
+ data++;
+--- a/src/gcc/config/arm/vfp.md
++++ b/src/gcc/config/arm/vfp.md
+@@ -401,8 +401,8 @@
+ ;; DFmode moves
+
+ (define_insn "*movdf_vfp"
+- [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,r, m,w ,Uv,w,r")
+- (match_operand:DF 1 "soft_df_operand" " ?r,w,Dy,mF,r,UvF,w, w,r"))]
++ [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,w ,Uv,r, m,w,r")
++ (match_operand:DF 1 "soft_df_operand" " ?r,w,Dy,UvF,w ,mF,r,w,r"))]
+ "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP
+ && ( register_operand (operands[0], DFmode)
+ || register_operand (operands[1], DFmode))"
+@@ -418,9 +418,9 @@
+ gcc_assert (TARGET_VFP_DOUBLE);
+ return \"fconstd%?\\t%P0, #%G1\";
+ case 3: case 4:
+- return output_move_double (operands);
+- case 5: case 6:
+ return output_move_vfp (operands);
++ case 5: case 6:
++ return output_move_double (operands);
+ case 7:
+ if (TARGET_VFP_SINGLE)
+ return \"fcpys%?\\t%0, %1\;fcpys%?\\t%p0, %p1\";
+@@ -435,7 +435,7 @@
+ "
+ [(set_attr "type"
+ "r_2_f,f_2_r,fconstd,f_loadd,f_stored,load2,store2,ffarithd,*")
+- (set (attr "length") (cond [(eq_attr "alternative" "3,4,8") (const_int 8)
++ (set (attr "length") (cond [(eq_attr "alternative" "5,6,8") (const_int 8)
+ (eq_attr "alternative" "7")
+ (if_then_else
+ (eq (symbol_ref "TARGET_VFP_SINGLE")
+@@ -449,8 +449,8 @@
+ )
+
+ (define_insn "*thumb2_movdf_vfp"
+- [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,r, m,w ,Uv,w,r")
+- (match_operand:DF 1 "soft_df_operand" " ?r,w,Dy,mF,r,UvF,w, w,r"))]
++ [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,w ,Uv,r ,m,w,r")
++ (match_operand:DF 1 "soft_df_operand" " ?r,w,Dy,UvF,w, mF,r, w,r"))]
+ "TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP"
+ "*
+ {
+@@ -463,10 +463,10 @@
+ case 2:
+ gcc_assert (TARGET_VFP_DOUBLE);
+ return \"fconstd%?\\t%P0, #%G1\";
+- case 3: case 4: case 8:
+- return output_move_double (operands);
+- case 5: case 6:
++ case 3: case 4:
+ return output_move_vfp (operands);
++ case 5: case 6: case 8:
++ return output_move_double (operands);
+ case 7:
+ if (TARGET_VFP_SINGLE)
+ return \"fcpys%?\\t%0, %1\;fcpys%?\\t%p0, %p1\";
+@@ -478,8 +478,8 @@
+ }
+ "
+ [(set_attr "type"
+- "r_2_f,f_2_r,fconstd,load2,store2,f_loadd,f_stored,ffarithd,*")
+- (set (attr "length") (cond [(eq_attr "alternative" "3,4,8") (const_int 8)
++ "r_2_f,f_2_r,fconstd,f_loadd,f_stored,load2,store2,ffarithd,*")
++ (set (attr "length") (cond [(eq_attr "alternative" "5,6,8") (const_int 8)
+ (eq_attr "alternative" "7")
+ (if_then_else
+ (eq (symbol_ref "TARGET_VFP_SINGLE")
+@@ -487,8 +487,8 @@
+ (const_int 8)
+ (const_int 4))]
+ (const_int 4)))
+- (set_attr "pool_range" "*,*,*,4096,*,1020,*,*,*")
+- (set_attr "neg_pool_range" "*,*,*,0,*,1008,*,*,*")]
++ (set_attr "pool_range" "*,*,*,1020,*,4096,*,*,*")
++ (set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
+ )
+
+
+--- a/src/gcc/config/arm/x-arm
++++ b/src/gcc/config/arm/x-arm
+@@ -0,0 +1,3 @@
++driver-arm.o: $(srcdir)/config/arm/driver-arm.c \
++ $(CONFIG_H) $(SYSTEM_H)
++ $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
+--- a/src/gcc/config/darwin.c
++++ b/src/gcc/config/darwin.c
+@@ -1753,19 +1753,51 @@
+ return (!strncmp ((const char *)p, "_OBJC_", 6));
+ }
+
+-/* LTO support for Mach-O. */
++/* LTO support for Mach-O.
+
+-/* Section names for LTO sections. */
+-static unsigned int lto_section_names_offset = 0;
++ This version uses three mach-o sections to encapsulate the (unlimited
++ number of) lto sections.
+
+-/* This is the obstack which we use to allocate the many strings. */
+-static struct obstack lto_section_names_obstack;
++ __GNU_LTO, __lto_sections contains the concatented GNU LTO section data.
++ __GNU_LTO, __section_names contains the GNU LTO section names.
++ __GNU_LTO, __section_index contains an array of values that index these.
++
++ Indexed thus:
++ <section offset from the start of __GNU_LTO, __lto_sections>,
++ <section length>
++ <name offset from the start of __GNU_LTO, __section_names,
++ <name length>.
++
++ At present, for both m32 and m64 mach-o files each of these fields is
++ represented by a uint32_t. This is because, AFAICT, a mach-o object
++ cannot exceed 4Gb because the section_64 offset field (see below) is 32bits.
++
++ uint32_t offset;
++ "offset An integer specifying the offset to this section in the file." */
++
++/* Count lto section numbers. */
++static unsigned int lto_section_num = 0;
++
++/* A vector of information about LTO sections, at present, we only have
++ the name. TODO: see if we can get the data length somehow. */
++typedef struct GTY (()) darwin_lto_section_e {
++ const char *sectname;
++} darwin_lto_section_e ;
++DEF_VEC_O(darwin_lto_section_e);
++DEF_VEC_ALLOC_O(darwin_lto_section_e, gc);
+
+-/* Segment name for LTO sections. */
++static GTY (()) VEC (darwin_lto_section_e, gc) * lto_section_names;
++
++/* Segment for LTO data. */
+ #define LTO_SEGMENT_NAME "__GNU_LTO"
+
+-/* Section name for LTO section names section. */
+-#define LTO_NAMES_SECTION "__section_names"
++/* Section wrapper scheme (used here to wrap the unlimited number of LTO
++ sections into three Mach-O ones).
++ NOTE: These names MUST be kept in sync with those in
++ libiberty/simple-object-mach-o. */
++#define LTO_SECTS_SECTION "__wrapper_sects"
++#define LTO_NAMES_SECTION "__wrapper_names"
++#define LTO_INDEX_SECTION "__wrapper_index"
+
+ /* File to temporarily store LTO data. This is appended to asm_out_file
+ in darwin_end_file. */
+@@ -1808,37 +1840,38 @@
+ unsigned int flags,
+ tree decl ATTRIBUTE_UNUSED)
+ {
+- /* LTO sections go in a special segment __GNU_LTO. We want to replace the
+- section name with something we can use to represent arbitrary-length
+- names (section names in Mach-O are at most 16 characters long). */
++ /* LTO sections go in a special section that encapsulates the (unlimited)
++ number of GNU LTO sections within a single mach-o one. */
+ if (strncmp (name, LTO_SECTION_NAME_PREFIX,
+ strlen (LTO_SECTION_NAME_PREFIX)) == 0)
+ {
++ darwin_lto_section_e e;
+ /* We expect certain flags to be set... */
+ gcc_assert ((flags & (SECTION_DEBUG | SECTION_NAMED))
+ == (SECTION_DEBUG | SECTION_NAMED));
+
+- /* Add the section name to the things to output when we end the
+- current assembler output file.
+- This is all not very efficient, but that doesn't matter -- this
+- shouldn't be a hot path in the compiler... */
+- obstack_1grow (&lto_section_names_obstack, '\t');
+- obstack_grow (&lto_section_names_obstack, ".ascii ", 7);
+- obstack_1grow (&lto_section_names_obstack, '"');
+- obstack_grow (&lto_section_names_obstack, name, strlen (name));
+- obstack_grow (&lto_section_names_obstack, "\\0\"\n", 4);
+-
+- /* Output the dummy section name. */
+- fprintf (asm_out_file, "\t# %s\n", name);
+- fprintf (asm_out_file, "\t.section %s,__%08X,regular,debug\n",
+- LTO_SEGMENT_NAME, lto_section_names_offset);
+-
+- /* Update the offset for the next section name. Make sure we stay
+- within reasonable length. */
+- lto_section_names_offset += strlen (name) + 1;
+- gcc_assert (lto_section_names_offset > 0
+- && lto_section_names_offset < ((unsigned) 1 << 31));
+- }
++ /* Switch to our combined section. */
++ fprintf (asm_out_file, "\t.section %s,%s,regular,debug\n",
++ LTO_SEGMENT_NAME, LTO_SECTS_SECTION);
++ /* Output a label for the start of this sub-section. */
++ fprintf (asm_out_file, "L_GNU_LTO%d:\t;# %s\n",
++ lto_section_num, name);
++ /* We have to jump through hoops to get the values of the intra-section
++ offsets... */
++ fprintf (asm_out_file, "\t.set L$gnu$lto$offs%d,L_GNU_LTO%d-L_GNU_LTO0\n",
++ lto_section_num, lto_section_num);
++ fprintf (asm_out_file,
++ "\t.set L$gnu$lto$size%d,L_GNU_LTO%d-L_GNU_LTO%d\n",
++ lto_section_num, lto_section_num+1, lto_section_num);
++ lto_section_num++;
++ e.sectname = xstrdup (name);
++ /* Keep the names, we'll need to make a table later.
++ TODO: check that we do not revisit sections, that would break
++ the assumption of how this is done. */
++ if (lto_section_names == NULL)
++ lto_section_names = VEC_alloc (darwin_lto_section_e, gc, 16);
++ VEC_safe_push (darwin_lto_section_e, gc, lto_section_names, &e);
++ }
+ else if (strncmp (name, "__DWARF,", 8) == 0)
+ darwin_asm_dwarf_section (name, flags, decl);
+ else
+@@ -2711,16 +2744,12 @@
+ darwin_asm_output_dwarf_delta (file, size, lab, sname);
+ }
+
+-/* Called from the within the TARGET_ASM_FILE_START for each target.
+- Initialize the stuff we need for LTO long section names support. */
++/* Called from the within the TARGET_ASM_FILE_START for each target. */
+
+ void
+ darwin_file_start (void)
+ {
+- /* We fill this obstack with the complete section text for the lto section
+- names to write in darwin_file_end. */
+- obstack_init (&lto_section_names_obstack);
+- lto_section_names_offset = 0;
++ /* Nothing to do. */
+ }
+
+ /* Called for the TARGET_ASM_FILE_END hook.
+@@ -2731,8 +2760,6 @@
+ void
+ darwin_file_end (void)
+ {
+- const char *lto_section_names;
+-
+ machopic_finish (asm_out_file);
+ if (strcmp (lang_hooks.name, "GNU C++") == 0)
+ {
+@@ -2762,6 +2789,13 @@
+ lto_asm_txt = buf = (char *) xmalloc (n + 1);
+ while (fgets (lto_asm_txt, n, lto_asm_out_file))
+ fputs (lto_asm_txt, asm_out_file);
++ /* Put a termination label. */
++ fprintf (asm_out_file, "\t.section %s,%s,regular,debug\n",
++ LTO_SEGMENT_NAME, LTO_SECTS_SECTION);
++ fprintf (asm_out_file, "L_GNU_LTO%d:\t;# end of lto\n",
++ lto_section_num);
++ /* Make sure our termination label stays in this section. */
++ fputs ("\t.space\t1\n", asm_out_file);
+ }
+
+ /* Remove the temporary file. */
+@@ -2770,21 +2804,50 @@
+ free (lto_asm_out_name);
+ }
+
+- /* Finish the LTO section names obstack. Don't output anything if
+- there are no recorded section names. */
+- obstack_1grow (&lto_section_names_obstack, '\0');
+- lto_section_names = XOBFINISH (&lto_section_names_obstack, const char *);
+- if (strlen (lto_section_names) > 0)
++ /* Output the names and indices. */
++ if (lto_section_names && VEC_length (darwin_lto_section_e, lto_section_names))
+ {
+- fprintf (asm_out_file,
+- "\t.section %s,%s,regular,debug\n",
++ int count;
++ darwin_lto_section_e *ref;
++ /* For now, we'll make the offsets 4 bytes and unaligned - we'll fix
++ the latter up ourselves. */
++ const char *op = integer_asm_op (4,0);
++
++ /* Emit the names. */
++ fprintf (asm_out_file, "\t.section %s,%s,regular,debug\n",
+ LTO_SEGMENT_NAME, LTO_NAMES_SECTION);
+- fprintf (asm_out_file,
+- "\t# Section names in %s are offsets into this table\n",
+- LTO_SEGMENT_NAME);
+- fprintf (asm_out_file, "%s\n", lto_section_names);
++ FOR_EACH_VEC_ELT (darwin_lto_section_e, lto_section_names, count, ref)
++ {
++ fprintf (asm_out_file, "L_GNU_LTO_NAME%d:\n", count);
++ /* We have to jump through hoops to get the values of the intra-section
++ offsets... */
++ fprintf (asm_out_file,
++ "\t.set L$gnu$lto$noff%d,L_GNU_LTO_NAME%d-L_GNU_LTO_NAME0\n",
++ count, count);
++ fprintf (asm_out_file,
++ "\t.set L$gnu$lto$nsiz%d,L_GNU_LTO_NAME%d-L_GNU_LTO_NAME%d\n",
++ count, count+1, count);
++ fprintf (asm_out_file, "\t.asciz\t\"%s\"\n", ref->sectname);
++ }
++ fprintf (asm_out_file, "L_GNU_LTO_NAME%d:\t;# end\n", lto_section_num);
++ /* make sure our termination label stays in this section. */
++ fputs ("\t.space\t1\n", asm_out_file);
++
++ /* Emit the Index. */
++ fprintf (asm_out_file, "\t.section %s,%s,regular,debug\n",
++ LTO_SEGMENT_NAME, LTO_INDEX_SECTION);
++ fputs ("\t.align\t2\n", asm_out_file);
++ fputs ("# Section offset, Section length, Name offset, Name length\n",
++ asm_out_file);
++ FOR_EACH_VEC_ELT (darwin_lto_section_e, lto_section_names, count, ref)
++ {
++ fprintf (asm_out_file, "%s L$gnu$lto$offs%d\t;# %s\n",
++ op, count, ref->sectname);
++ fprintf (asm_out_file, "%s L$gnu$lto$size%d\n", op, count);
++ fprintf (asm_out_file, "%s L$gnu$lto$noff%d\n", op, count);
++ fprintf (asm_out_file, "%s L$gnu$lto$nsiz%d\n", op, count);
++ }
+ }
+- obstack_free (&lto_section_names_obstack, NULL);
+
+ /* If we have section anchors, then we must prevent the linker from
+ re-arranging data. */
+--- a/src/gcc/config/host-linux.c
++++ b/src/gcc/config/host-linux.c
+@@ -84,6 +84,8 @@
+ # define TRY_EMPTY_VM_SPACE 0x60000000
+ #elif defined(__mc68000__)
+ # define TRY_EMPTY_VM_SPACE 0x40000000
++#elif defined(__ARM_EABI__)
++# define TRY_EMPTY_VM_SPACE 0x60000000
+ #else
+ # define TRY_EMPTY_VM_SPACE 0
+ #endif
+--- a/src/gcc/config/i386/i386.c
++++ b/src/gcc/config/i386/i386.c
+@@ -16329,7 +16329,6 @@
+ basic_block bb = BLOCK_FOR_INSN (insn);
+ int distance = 0;
+ df_ref *def_rec;
+- enum attr_type insn_type;
+
+ if (insn != BB_HEAD (bb))
+ {
+@@ -16345,8 +16344,8 @@
+ && (regno1 == DF_REF_REGNO (*def_rec)
+ || regno2 == DF_REF_REGNO (*def_rec)))
+ {
+- insn_type = get_attr_type (prev);
+- if (insn_type != TYPE_LEA)
++ if (recog_memoized (prev) < 0
++ || get_attr_type (prev) != TYPE_LEA)
+ goto done;
+ }
+ }
+@@ -16385,8 +16384,8 @@
+ && (regno1 == DF_REF_REGNO (*def_rec)
+ || regno2 == DF_REF_REGNO (*def_rec)))
+ {
+- insn_type = get_attr_type (prev);
+- if (insn_type != TYPE_LEA)
++ if (recog_memoized (prev) < 0
++ || get_attr_type (prev) != TYPE_LEA)
+ goto done;
+ }
+ }
+--- a/src/gcc/config/i386/i386.md
++++ b/src/gcc/config/i386/i386.md
+@@ -5103,7 +5103,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(set (match_dup 0) (float:MODEF (match_dup 1)))])
+
+ (define_split
+@@ -5116,7 +5116,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(set (match_dup 2) (match_dup 1))
+ (set (match_dup 0) (float:MODEF (match_dup 2)))])
+
+@@ -5207,7 +5207,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(const_int 0)]
+ {
+ rtx op1 = operands[1];
+@@ -5248,7 +5248,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(const_int 0)]
+ {
+ operands[3] = simplify_gen_subreg (<ssevecmode>mode, operands[0],
+@@ -5270,7 +5270,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(const_int 0)]
+ {
+ rtx op1 = operands[1];
+@@ -5314,7 +5314,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(const_int 0)]
+ {
+ operands[3] = simplify_gen_subreg (<ssevecmode>mode, operands[0],
+@@ -5375,7 +5375,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(set (match_dup 0) (float:MODEF (match_dup 1)))])
+
+ (define_insn "*float<SSEMODEI24:mode><MODEF:mode>2_sse_nointerunit"
+@@ -5410,7 +5410,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(set (match_dup 2) (match_dup 1))
+ (set (match_dup 0) (float:MODEF (match_dup 2)))])
+
+@@ -5423,7 +5423,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(set (match_dup 0) (float:MODEF (match_dup 1)))])
+
+ (define_insn "*float<SSEMODEI24:mode><X87MODEF:mode>2_i387_with_temp"
+@@ -14625,7 +14625,7 @@
+ emit_insn (gen_sse4_1_round<mode>2
+ (operands[0], operands[1], GEN_INT (0x04)));
+ else
+- ix86_expand_rint (operand0, operand1);
++ ix86_expand_rint (operands[0], operands[1]);
+ }
+ else
+ {
+@@ -14649,9 +14649,9 @@
+ if (optimize_insn_for_size_p ())
+ FAIL;
+ if (TARGET_64BIT || (<MODE>mode != DFmode))
+- ix86_expand_round (operand0, operand1);
++ ix86_expand_round (operands[0], operands[1]);
+ else
+- ix86_expand_rounddf_32 (operand0, operand1);
++ ix86_expand_rounddf_32 (operands[0], operands[1]);
+ DONE;
+ })
+
+@@ -14796,7 +14796,7 @@
+ {
+ if (optimize_insn_for_size_p ())
+ FAIL;
+- ix86_expand_lround (operand0, operand1);
++ ix86_expand_lround (operands[0], operands[1]);
+ DONE;
+ })
+
+@@ -14871,9 +14871,9 @@
+ emit_insn (gen_sse4_1_round<mode>2
+ (operands[0], operands[1], GEN_INT (0x01)));
+ else if (TARGET_64BIT || (<MODE>mode != DFmode))
+- ix86_expand_floorceil (operand0, operand1, true);
++ ix86_expand_floorceil (operands[0], operands[1], true);
+ else
+- ix86_expand_floorceildf_32 (operand0, operand1, true);
++ ix86_expand_floorceildf_32 (operands[0], operands[1], true);
+ }
+ else
+ {
+@@ -15053,7 +15053,7 @@
+ {
+ if (TARGET_64BIT && optimize_insn_for_size_p ())
+ FAIL;
+- ix86_expand_lfloorceil (operand0, operand1, true);
++ ix86_expand_lfloorceil (operands[0], operands[1], true);
+ DONE;
+ })
+
+@@ -15128,9 +15128,9 @@
+ else if (optimize_insn_for_size_p ())
+ FAIL;
+ else if (TARGET_64BIT || (<MODE>mode != DFmode))
+- ix86_expand_floorceil (operand0, operand1, false);
++ ix86_expand_floorceil (operands[0], operands[1], false);
+ else
+- ix86_expand_floorceildf_32 (operand0, operand1, false);
++ ix86_expand_floorceildf_32 (operands[0], operands[1], false);
+ }
+ else
+ {
+@@ -15308,7 +15308,7 @@
+ "SSE_FLOAT_MODE_P (<MODEF:MODE>mode) && TARGET_SSE_MATH
+ && !flag_trapping_math"
+ {
+- ix86_expand_lfloorceil (operand0, operand1, false);
++ ix86_expand_lfloorceil (operands[0], operands[1], false);
+ DONE;
+ })
+
+@@ -15383,9 +15383,9 @@
+ else if (optimize_insn_for_size_p ())
+ FAIL;
+ else if (TARGET_64BIT || (<MODE>mode != DFmode))
+- ix86_expand_trunc (operand0, operand1);
++ ix86_expand_trunc (operands[0], operands[1]);
+ else
+- ix86_expand_truncdf_32 (operand0, operand1);
++ ix86_expand_truncdf_32 (operands[0], operands[1]);
+ }
+ else
+ {
+@@ -18285,8 +18285,8 @@
+ (match_operand:SI 3 "const_int_operand" "i")]
+ UNSPECV_LWPVAL_INTRINSIC)]
+ "TARGET_LWP"
+- "/* Avoid unused variable warning. */
+- (void) operand0;")
++ ;; Avoid unused variable warning.
++ "(void) operands[0];")
+
+ (define_insn "*lwp_lwpval<mode>3_1"
+ [(unspec_volatile [(match_operand:SWI48 0 "register_operand" "r")
+--- a/src/gcc/config/i386/sse.md
++++ b/src/gcc/config/i386/sse.md
+@@ -4521,15 +4521,14 @@
+ [(set (match_operand:V4DF 0 "register_operand" "=x,x")
+ (vec_select:V4DF
+ (vec_concat:V8DF
+- (match_operand:V4DF 1 "nonimmediate_operand" "xm,x")
+- (match_operand:V4DF 2 "nonimmediate_operand" " 1,xm"))
++ (match_operand:V4DF 1 "nonimmediate_operand" " x,m")
++ (match_operand:V4DF 2 "nonimmediate_operand" "xm,1"))
+ (parallel [(const_int 0) (const_int 4)
+ (const_int 2) (const_int 6)])))]
+- "TARGET_AVX
+- && (!MEM_P (operands[1]) || rtx_equal_p (operands[1], operands[2]))"
++ "TARGET_AVX"
+ "@
+- vmovddup\t{%1, %0|%0, %1}
+- vunpcklpd\t{%2, %1, %0|%0, %1, %2}"
++ vunpcklpd\t{%2, %1, %0|%0, %1, %2}
++ vmovddup\t{%1, %0|%0, %1}"
+ [(set_attr "type" "sselog")
+ (set_attr "prefix" "vex")
+ (set_attr "mode" "V4DF")])
+--- a/src/gcc/config/pa/pa.c
++++ b/src/gcc/config/pa/pa.c
+@@ -1863,6 +1863,11 @@
+ /* Handle the most common case: storing into a register. */
+ else if (register_operand (operand0, mode))
+ {
++ /* Legitimize TLS symbol references. This happens for references
++ that aren't a legitimate constant. */
++ if (PA_SYMBOL_REF_TLS_P (operand1))
++ operand1 = legitimize_tls_address (operand1);
++
+ if (register_operand (operand1, mode)
+ || (GET_CODE (operand1) == CONST_INT
+ && cint_ok_for_move (INTVAL (operand1)))
+--- a/src/gcc/config/pa/pa.h
++++ b/src/gcc/config/pa/pa.h
+@@ -848,6 +848,9 @@
+ && (NEW_HP_ASSEMBLER \
+ || TARGET_GAS \
+ || GET_CODE (X) != LABEL_REF) \
++ && (!PA_SYMBOL_REF_TLS_P (X) \
++ || (SYMBOL_REF_TLS_MODEL (X) != TLS_MODEL_GLOBAL_DYNAMIC \
++ && SYMBOL_REF_TLS_MODEL (X) != TLS_MODEL_LOCAL_DYNAMIC)) \
+ && (!TARGET_64BIT \
+ || GET_CODE (X) != CONST_DOUBLE) \
+ && (!TARGET_64BIT \
+--- a/src/gcc/config/rs6000/rs6000.c
++++ b/src/gcc/config/rs6000/rs6000.c
+@@ -5134,7 +5134,9 @@
+ for (i = 0; i < n_elts; ++i)
+ {
+ x = XVECEXP (vals, 0, i);
+- if (!CONSTANT_P (x))
++ if (!(CONST_INT_P (x)
++ || GET_CODE (x) == CONST_DOUBLE
++ || GET_CODE (x) == CONST_FIXED))
+ ++n_var;
+ }
+ if (n_var == 0)
+@@ -5286,7 +5288,9 @@
+ for (i = 0; i < n_elts; ++i)
+ {
+ x = XVECEXP (vals, 0, i);
+- if (!CONSTANT_P (x))
++ if (!(CONST_INT_P (x)
++ || GET_CODE (x) == CONST_DOUBLE
++ || GET_CODE (x) == CONST_FIXED))
+ ++n_var, one_var = i;
+ else if (x != CONST0_RTX (inner_mode))
+ all_const_zero = false;
+@@ -6824,6 +6828,7 @@
+ #if TARGET_MACHO
+ && DEFAULT_ABI == ABI_DARWIN
+ && (flag_pic || MACHO_DYNAMIC_NO_PIC_P)
++ && machopic_symbol_defined_p (x)
+ #else
+ && DEFAULT_ABI == ABI_V4
+ && !flag_pic
+@@ -20227,7 +20232,7 @@
+ {
+ /* This blockage is needed so that sched doesn't decide to move
+ the sp change before the register restores. */
+- if (frame_reg_rtx != sp_reg_rtx
++ if (DEFAULT_ABI == ABI_V4
+ || (TARGET_SPE_ABI
+ && info->spe_64bit_regs_used != 0
+ && info->first_gp_reg_save != 32))
+--- a/src/gcc/config/sparc/sparc.h
++++ b/src/gcc/config/sparc/sparc.h
+@@ -408,6 +408,7 @@
+ %{mcpu=sparclite:-Asparclite} \
+ %{mcpu=sparclite86x:-Asparclite} \
+ %{mcpu=f930:-Asparclite} %{mcpu=f934:-Asparclite} \
++%{mcpu=v8:-Av8} \
+ %{mv8plus:-Av8plus} \
+ %{mcpu=v9:-Av9} \
+ %{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
+--- a/src/gcc/config/sparc/sparc.md
++++ b/src/gcc/config/sparc/sparc.md
+@@ -1813,8 +1813,8 @@
+ })
+
+ (define_insn "*movsf_insn"
+- [(set (match_operand:V32 0 "nonimmediate_operand" "=d,f,*r,*r,*r,f,*r,m,m")
+- (match_operand:V32 1 "input_operand" "GY,f,*rRY,Q,S,m,m,f,*rGY"))]
++ [(set (match_operand:V32 0 "nonimmediate_operand" "=d,f, *r,*r,*r,f,*r,m, m")
++ (match_operand:V32 1 "input_operand" "GY,f,*rRY, Q, S,m, m,f,*rGY"))]
+ "TARGET_FPU
+ && (register_operand (operands[0], <V32:MODE>mode)
+ || register_or_zero_operand (operands[1], <V32:MODE>mode))"
+@@ -1861,8 +1861,8 @@
+ ;; when -mno-fpu.
+
+ (define_insn "*movsf_insn_no_fpu"
+- [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,r,r,m")
+- (match_operand:SF 1 "input_operand" "rR,Q,S,m,rG"))]
++ [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,r,r, m")
++ (match_operand:SF 1 "input_operand" "rR,Q,S,m,rG"))]
+ "! TARGET_FPU
+ && (register_operand (operands[0], SFmode)
+ || register_or_zero_operand (operands[1], SFmode))"
+@@ -1948,8 +1948,8 @@
+
+ ;; Be careful, fmovd does not exist when !v9.
+ (define_insn "*movdf_insn_sp32"
+- [(set (match_operand:DF 0 "nonimmediate_operand" "=e,W,U,T,o,e,*r,o,e,o")
+- (match_operand:DF 1 "input_operand" "W#F,e,T,U,G,e,*rFo,*r,o#F,e"))]
++ [(set (match_operand:DF 0 "nonimmediate_operand" "= e,W,U,T,o,e, *r, o, e,o")
++ (match_operand:DF 1 "input_operand" "W#F,e,T,U,G,e,*rFo,*r,o#F,e"))]
+ "TARGET_FPU
+ && ! TARGET_V9
+ && (register_operand (operands[0], DFmode)
+@@ -1969,8 +1969,8 @@
+ (set_attr "length" "*,*,*,*,2,2,2,2,2,2")])
+
+ (define_insn "*movdf_insn_sp32_no_fpu"
+- [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,o,r,o")
+- (match_operand:DF 1 "input_operand" "T,U,G,ro,r"))]
++ [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,o, r,o")
++ (match_operand:DF 1 "input_operand" " T,U,G,ro,r"))]
+ "! TARGET_FPU
+ && ! TARGET_V9
+ && (register_operand (operands[0], DFmode)
+@@ -1986,8 +1986,8 @@
+
+ ;; We have available v9 double floats but not 64-bit integer registers.
+ (define_insn "*movdf_insn_sp32_v9"
+- [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e,e,T,W,U,T,f,*r,o")
+- (match_operand:V64 1 "input_operand" "GY,e,W#F,GY,e,T,U,o#F,*roGYDF,*rGYf"))]
++ [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e, e, T,W,U,T, f, *r, o")
++ (match_operand:V64 1 "input_operand" "GY,e,W#F,GY,e,T,U,o#F,*roFD,*rGYf"))]
+ "TARGET_FPU
+ && TARGET_V9
+ && ! TARGET_ARCH64
+@@ -2009,8 +2009,8 @@
+ (set_attr "fptype" "double,double,*,*,*,*,*,*,*,*")])
+
+ (define_insn "*movdf_insn_sp32_v9_no_fpu"
+- [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,T,r,o")
+- (match_operand:DF 1 "input_operand" "T,U,G,ro,rG"))]
++ [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,T, r, o")
++ (match_operand:DF 1 "input_operand" " T,U,G,ro,rG"))]
+ "! TARGET_FPU
+ && TARGET_V9
+ && ! TARGET_ARCH64
+@@ -2027,8 +2027,8 @@
+
+ ;; We have available both v9 double floats and 64-bit integer registers.
+ (define_insn "*movdf_insn_sp64"
+- [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e,e,W,*r,*r,m,*r")
+- (match_operand:V64 1 "input_operand" "GY,e,W#F,e,*rGY,m,*rGY,DF"))]
++ [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e, e,W, *r,*r, m,*r")
++ (match_operand:V64 1 "input_operand" "GY,e,W#F,e,*rGY, m,*rGY,FD"))]
+ "TARGET_FPU
+ && TARGET_ARCH64
+ && (register_operand (operands[0], <V64:MODE>mode)
+@@ -2047,8 +2047,8 @@
+ (set_attr "fptype" "double,double,*,*,*,*,*,*")])
+
+ (define_insn "*movdf_insn_sp64_no_fpu"
+- [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m")
+- (match_operand:DF 1 "input_operand" "r,m,rG"))]
++ [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r, m")
++ (match_operand:DF 1 "input_operand" "r,m,rG"))]
+ "! TARGET_FPU
+ && TARGET_ARCH64
+ && (register_operand (operands[0], DFmode)
+@@ -2288,8 +2288,8 @@
+ })
+
+ (define_insn "*movtf_insn_sp32"
+- [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,o,U,r")
+- (match_operand:TF 1 "input_operand" "G,oe,GeUr,o,roG"))]
++ [(set (match_operand:TF 0 "nonimmediate_operand" "=b, e, o,U, r")
++ (match_operand:TF 1 "input_operand" " G,oe,GeUr,o,roG"))]
+ "TARGET_FPU
+ && ! TARGET_ARCH64
+ && (register_operand (operands[0], TFmode)
+@@ -2302,8 +2302,8 @@
+ ;; when -mno-fpu.
+
+ (define_insn "*movtf_insn_sp32_no_fpu"
+- [(set (match_operand:TF 0 "nonimmediate_operand" "=o,U,o,r,o")
+- (match_operand:TF 1 "input_operand" "G,o,U,roG,r"))]
++ [(set (match_operand:TF 0 "nonimmediate_operand" "=o,U,o, r,o")
++ (match_operand:TF 1 "input_operand" " G,o,U,roG,r"))]
+ "! TARGET_FPU
+ && ! TARGET_ARCH64
+ && (register_operand (operands[0], TFmode)
+@@ -2312,8 +2312,8 @@
+ [(set_attr "length" "4")])
+
+ (define_insn "*movtf_insn_sp64"
+- [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,o,r")
+- (match_operand:TF 1 "input_operand" "G,oe,Ger,roG"))]
++ [(set (match_operand:TF 0 "nonimmediate_operand" "=b, e, o, r")
++ (match_operand:TF 1 "input_operand" "G,oe,Ger,roG"))]
+ "TARGET_FPU
+ && TARGET_ARCH64
+ && ! TARGET_HARD_QUAD
+@@ -2323,8 +2323,8 @@
+ [(set_attr "length" "2")])
+
+ (define_insn "*movtf_insn_sp64_hq"
+- [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,e,m,o,r")
+- (match_operand:TF 1 "input_operand" "G,e,m,e,rG,roG"))]
++ [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,e,m, o, r")
++ (match_operand:TF 1 "input_operand" "G,e,m,e,rG,roG"))]
+ "TARGET_FPU
+ && TARGET_ARCH64
+ && TARGET_HARD_QUAD
+@@ -2341,8 +2341,8 @@
+ (set_attr "length" "2,*,*,*,2,2")])
+
+ (define_insn "*movtf_insn_sp64_no_fpu"
+- [(set (match_operand:TF 0 "nonimmediate_operand" "=r,o")
+- (match_operand:TF 1 "input_operand" "orG,rG"))]
++ [(set (match_operand:TF 0 "nonimmediate_operand" "= r, o")
++ (match_operand:TF 1 "input_operand" "orG,rG"))]
+ "! TARGET_FPU
+ && TARGET_ARCH64
+ && (register_operand (operands[0], TFmode)
+--- a/src/gcc/config.host
++++ b/src/gcc/config.host
+@@ -100,6 +100,14 @@
+ esac
+
+ case ${host} in
++ arm*-*-linux*)
++ case ${target} in
++ arm*-*-*)
++ host_extra_gcc_objs="driver-arm.o"
++ host_xmake_file="${host_xmake_file} arm/x-arm"
++ ;;
++ esac
++ ;;
+ alpha*-*-linux*)
+ case ${target} in
+ alpha*-*-linux*)
+--- a/src/gcc/configure
++++ b/src/gcc/configure
+@@ -1647,7 +1647,8 @@
+ use sysroot as the system root during the build
+ --with-sysroot=DIR Search for usr/lib, usr/include, et al, within DIR.
+ --with-specs=SPECS add SPECS to driver command-line processing
+- --with-pkgversion=PKG Use PKG in the version string in place of "GCC"
++ --with-pkgversion=PKG Use PKG in the version string in place of "Linaro
++ GCC `cat $srcdir/LINARO-VERSION`"
+ --with-bugurl=URL Direct users to URL to report a bug
+ --with-multilib-list Select multilibs (SH only)
+ --with-gnu-ld assume the C compiler uses GNU ld default=no
+@@ -7129,7 +7130,7 @@
+ *) PKGVERSION="($withval) " ;;
+ esac
+ else
+- PKGVERSION="(GCC) "
++ PKGVERSION="(Linaro GCC `cat $srcdir/LINARO-VERSION`) "
+
+ fi
+
+@@ -7442,17 +7443,7 @@
+ RANLIB="$ac_cv_prog_RANLIB"
+ fi
+
+-case "${host}" in
+-*-*-darwin*)
+- # By default, the Darwin ranlib will not treat common symbols as
+- # definitions when building the archive table of contents. Other
+- # ranlibs do that; pass an option to the Darwin ranlib that makes
+- # it behave similarly.
+- ranlib_flags="-c"
+- ;;
+-*)
+- ranlib_flags=""
+-esac
++ranlib_flags=""
+
+
+ # Find a good install program. We prefer a C program (faster),
+@@ -15740,7 +15731,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -16653,7 +16644,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -16671,7 +16662,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -17505,7 +17496,7 @@
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 17508 "configure"
++#line 17499 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -17611,7 +17602,7 @@
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 17614 "configure"
++#line 17605 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -18537,7 +18528,7 @@
+ esac
+ ;;
+
+- freebsd[12]*)
++ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ ld_shlibs_CXX=no
+@@ -20312,7 +20303,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -20330,7 +20321,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+--- a/src/gcc/configure.ac
++++ b/src/gcc/configure.ac
+@@ -760,7 +760,7 @@
+ )
+ AC_SUBST(CONFIGURE_SPECS)
+
+-ACX_PKGVERSION([GCC])
++ACX_PKGVERSION([Linaro GCC `cat $srcdir/LINARO-VERSION`])
+ ACX_BUGURL([http://gcc.gnu.org/bugs.html])
+
+ # Sanity check enable_languages in case someone does not run the toplevel
+@@ -807,17 +807,7 @@
+ gcc_AC_PROG_LN_S
+ ACX_PROG_LN($LN_S)
+ AC_PROG_RANLIB
+-case "${host}" in
+-*-*-darwin*)
+- # By default, the Darwin ranlib will not treat common symbols as
+- # definitions when building the archive table of contents. Other
+- # ranlibs do that; pass an option to the Darwin ranlib that makes
+- # it behave similarly.
+- ranlib_flags="-c"
+- ;;
+-*)
+- ranlib_flags=""
+-esac
++ranlib_flags=""
+ AC_SUBST(ranlib_flags)
+
+ gcc_AC_PROG_INSTALL
+--- a/src/gcc/cp/ChangeLog
++++ b/src/gcc/cp/ChangeLog
+@@ -1,3 +1,32 @@
++2011-11-22 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/51265
++ * semantics.c (finish_decltype_type): Handle PTRMEM_CST.
++
++2011-11-18 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/51150
++ * pt.c (tsubst_copy_and_build): Handle FIX_TRUNC_EXPR.
++
++2011-11-07 Jason Merrill <jason@redhat.com>
++
++ PR c++/50870
++ * pt.c (tsubst_copy): Handle NAMESPACE_DECL.
++ (tsubst_copy_and_build) [COMPONENT_REF]: Handle a still-dependent
++ object.
++
++2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR c++/50608
++ * semantics.c (finish_offsetof): Adjust call to fold_offsetof.
++ * typeck.c (cp_build_addr_expr_1): Call fold_offsetof_1.
++
++2011-10-29 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/50901
++ * call.c (build_new_op_1): Handle ABS_EXPR together with the
++ other unary EXPR.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/gcc/cp/call.c
++++ b/src/gcc/cp/call.c
+@@ -4996,6 +4996,7 @@
+ case POSTDECREMENT_EXPR:
+ case REALPART_EXPR:
+ case IMAGPART_EXPR:
++ case ABS_EXPR:
+ return cp_build_unary_op (code, arg1, candidates != 0, complain);
+
+ case ARRAY_REF:
+--- a/src/gcc/cp/pt.c
++++ b/src/gcc/cp/pt.c
+@@ -11439,6 +11439,9 @@
+ mark_used (t);
+ return t;
+
++ case NAMESPACE_DECL:
++ return t;
++
+ case OVERLOAD:
+ /* An OVERLOAD will always be a non-dependent overload set; an
+ overload set from function scope will just be represented with an
+@@ -12704,6 +12707,10 @@
+ return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
+ complain);
+
++ case FIX_TRUNC_EXPR:
++ return cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
++ 0, complain);
++
+ case ADDR_EXPR:
+ op1 = TREE_OPERAND (t, 0);
+ if (TREE_CODE (op1) == LABEL_DECL)
+@@ -13179,7 +13186,9 @@
+ if (member == error_mark_node)
+ return error_mark_node;
+
+- if (object_type && !CLASS_TYPE_P (object_type))
++ if (type_dependent_expression_p (object))
++ /* We can't do much here. */;
++ else if (!CLASS_TYPE_P (object_type))
+ {
+ if (SCALAR_TYPE_P (object_type))
+ {
+--- a/src/gcc/cp/semantics.c
++++ b/src/gcc/cp/semantics.c
+@@ -3348,7 +3348,7 @@
+ }
+ if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
+ expr = TREE_OPERAND (expr, 0);
+- return fold_offsetof (expr, NULL_TREE);
++ return fold_offsetof (expr);
+ }
+
+ /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. This
+@@ -4927,8 +4927,9 @@
+ gcc_unreachable ();
+
+ case INTEGER_CST:
++ case PTRMEM_CST:
+ /* We can get here when the id-expression refers to an
+- enumerator. */
++ enumerator or non-type template parameter. */
+ type = TREE_TYPE (expr);
+ break;
+
+--- a/src/gcc/cp/typeck.c
++++ b/src/gcc/cp/typeck.c
+@@ -4835,9 +4835,7 @@
+ && TREE_CONSTANT (TREE_OPERAND (val, 0)))
+ {
+ tree type = build_pointer_type (argtype);
+- tree op0 = fold_convert (type, TREE_OPERAND (val, 0));
+- tree op1 = fold_convert (sizetype, fold_offsetof (arg, val));
+- return fold_build2 (POINTER_PLUS_EXPR, type, op0, op1);
++ return fold_convert (type, fold_offsetof_1 (arg));
+ }
+
+ /* Handle complex lvalues (when permitted)
+--- a/src/gcc/cp/typeck2.c
++++ b/src/gcc/cp/typeck2.c
+@@ -479,18 +479,20 @@
+
+
+ /* The recursive part of split_nonconstant_init. DEST is an lvalue
+- expression to which INIT should be assigned. INIT is a CONSTRUCTOR. */
++ expression to which INIT should be assigned. INIT is a CONSTRUCTOR.
++ Return true if the whole of the value was initialized by the
++ generated statements. */
+
+-static void
+-split_nonconstant_init_1 (tree dest, tree *initp)
++static bool
++split_nonconstant_init_1 (tree dest, tree init)
+ {
+ unsigned HOST_WIDE_INT idx;
+- tree init = *initp;
+ tree field_index, value;
+ tree type = TREE_TYPE (dest);
+ tree inner_type = NULL;
+ bool array_type_p = false;
+- HOST_WIDE_INT num_type_elements, num_initialized_elements;
++ bool complete_p = true;
++ HOST_WIDE_INT num_split_elts = 0;
+
+ switch (TREE_CODE (type))
+ {
+@@ -502,7 +504,6 @@
+ case RECORD_TYPE:
+ case UNION_TYPE:
+ case QUAL_UNION_TYPE:
+- num_initialized_elements = 0;
+ FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), idx,
+ field_index, value)
+ {
+@@ -525,13 +526,14 @@
+ sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
+ NULL_TREE);
+
+- split_nonconstant_init_1 (sub, &value);
++ if (!split_nonconstant_init_1 (sub, value))
++ complete_p = false;
++ num_split_elts++;
+ }
+ else if (!initializer_constant_valid_p (value, inner_type))
+ {
+ tree code;
+ tree sub;
+- HOST_WIDE_INT inner_elements;
+
+ /* FIXME: Ordered removal is O(1) so the whole function is
+ worst-case quadratic. This could be fixed using an aside
+@@ -555,21 +557,9 @@
+ code = build_stmt (input_location, EXPR_STMT, code);
+ add_stmt (code);
+
+- inner_elements = count_type_elements (inner_type, true);
+- if (inner_elements < 0)
+- num_initialized_elements = -1;
+- else if (num_initialized_elements >= 0)
+- num_initialized_elements += inner_elements;
+- continue;
++ num_split_elts++;
+ }
+ }
+-
+- num_type_elements = count_type_elements (type, true);
+- /* If all elements of the initializer are non-constant and
+- have been split out, we don't need the empty CONSTRUCTOR. */
+- if (num_type_elements > 0
+- && num_type_elements == num_initialized_elements)
+- *initp = NULL;
+ break;
+
+ case VECTOR_TYPE:
+@@ -581,6 +571,7 @@
+ code = build2 (MODIFY_EXPR, type, dest, cons);
+ code = build_stmt (input_location, EXPR_STMT, code);
+ add_stmt (code);
++ num_split_elts += CONSTRUCTOR_NELTS (init);
+ }
+ break;
+
+@@ -590,6 +581,8 @@
+
+ /* The rest of the initializer is now a constant. */
+ TREE_CONSTANT (init) = 1;
++ return complete_p && complete_ctor_at_level_p (TREE_TYPE (init),
++ num_split_elts, inner_type);
+ }
+
+ /* A subroutine of store_init_value. Splits non-constant static
+@@ -605,7 +598,8 @@
+ if (TREE_CODE (init) == CONSTRUCTOR)
+ {
+ code = push_stmt_list ();
+- split_nonconstant_init_1 (dest, &init);
++ if (split_nonconstant_init_1 (dest, init))
++ init = NULL_TREE;
+ code = pop_stmt_list (code);
+ DECL_INITIAL (dest) = init;
+ TREE_READONLY (dest) = 0;
+--- a/src/gcc/ddg.c
++++ b/src/gcc/ddg.c
+@@ -145,6 +145,27 @@
+ return rtx_mem_access_p (PATTERN (insn));
+ }
+
++/* Return true if DEF_INSN contains address being auto-inc or auto-dec
++ which is used in USE_INSN. Otherwise return false. The result is
++ being used to decide whether to remove the edge between def_insn and
++ use_insn when -fmodulo-sched-allow-regmoves is set. This function
++ doesn't need to consider the specific address register; no reg_moves
++ will be allowed for any life range defined by def_insn and used
++ by use_insn, if use_insn uses an address register auto-inc'ed by
++ def_insn. */
++bool
++autoinc_var_is_used_p (rtx def_insn, rtx use_insn)
++{
++ rtx note;
++
++ for (note = REG_NOTES (def_insn); note; note = XEXP (note, 1))
++ if (REG_NOTE_KIND (note) == REG_INC
++ && reg_referenced_p (XEXP (note, 0), PATTERN (use_insn)))
++ return true;
++
++ return false;
++}
++
+ /* Computes the dependence parameters (latency, distance etc.), creates
+ a ddg_edge and adds it to the given DDG. */
+ static void
+@@ -173,10 +194,15 @@
+ compensate for that by generating reg-moves based on the life-range
+ analysis. The anti-deps that will be deleted are the ones which
+ have true-deps edges in the opposite direction (in other words
+- the kernel has only one def of the relevant register). TODO:
+- support the removal of all anti-deps edges, i.e. including those
++ the kernel has only one def of the relevant register).
++ If the address that is being auto-inc or auto-dec in DEST_NODE
++ is used in SRC_NODE then do not remove the edge to make sure
++ reg-moves will not be created for this address.
++ TODO: support the removal of all anti-deps edges, i.e. including those
+ whose register has multiple defs in the loop. */
+- if (flag_modulo_sched_allow_regmoves && (t == ANTI_DEP && dt == REG_DEP))
++ if (flag_modulo_sched_allow_regmoves
++ && (t == ANTI_DEP && dt == REG_DEP)
++ && !autoinc_var_is_used_p (dest_node->insn, src_node->insn))
+ {
+ rtx set;
+
+@@ -301,8 +327,15 @@
+
+ gcc_assert (first_def_node);
+
++ /* Always create the edge if the use node is a branch in
++ order to prevent the creation of reg-moves.
++ If the address that is being auto-inc or auto-dec in LAST_DEF
++ is used in USE_INSN then do not remove the edge to make sure
++ reg-moves will not be created for that address. */
+ if (DF_REF_ID (last_def) != DF_REF_ID (first_def)
+- || !flag_modulo_sched_allow_regmoves)
++ || !flag_modulo_sched_allow_regmoves
++ || JUMP_P (use_node->insn)
++ || autoinc_var_is_used_p (DF_REF_INSN (last_def), use_insn))
+ create_ddg_dep_no_link (g, use_node, first_def_node, ANTI_DEP,
+ REG_DEP, 1);
+
+@@ -385,6 +418,33 @@
+ &PATTERN (insn2));
+ }
+
++/* Given two nodes, analyze their RTL insns and add intra-loop mem deps
++ to ddg G. */
++static void
++add_intra_loop_mem_dep (ddg_ptr g, ddg_node_ptr from, ddg_node_ptr to)
++{
++
++ if ((from->cuid == to->cuid)
++ || !insns_may_alias_p (from->insn, to->insn))
++ /* Do not create edge if memory references have disjoint alias sets
++ or 'to' and 'from' are the same instruction. */
++ return;
++
++ if (mem_write_insn_p (from->insn))
++ {
++ if (mem_read_insn_p (to->insn))
++ create_ddg_dep_no_link (g, from, to,
++ DEBUG_INSN_P (to->insn)
++ ? ANTI_DEP : TRUE_DEP, MEM_DEP, 0);
++ else
++ create_ddg_dep_no_link (g, from, to,
++ DEBUG_INSN_P (to->insn)
++ ? ANTI_DEP : OUTPUT_DEP, MEM_DEP, 0);
++ }
++ else if (!mem_read_insn_p (to->insn))
++ create_ddg_dep_no_link (g, from, to, ANTI_DEP, MEM_DEP, 0);
++}
++
+ /* Given two nodes, analyze their RTL insns and add inter-loop mem deps
+ to ddg G. */
+ static void
+@@ -472,10 +532,22 @@
+ if (DEBUG_INSN_P (j_node->insn))
+ continue;
+ if (mem_access_insn_p (j_node->insn))
+- /* Don't bother calculating inter-loop dep if an intra-loop dep
+- already exists. */
++ {
++ /* Don't bother calculating inter-loop dep if an intra-loop dep
++ already exists. */
+ if (! TEST_BIT (dest_node->successors, j))
+ add_inter_loop_mem_dep (g, dest_node, j_node);
++ /* If -fmodulo-sched-allow-regmoves
++ is set certain anti-dep edges are not created.
++ It might be that these anti-dep edges are on the
++ path from one memory instruction to another such that
++ removing these edges could cause a violation of the
++ memory dependencies. Thus we add intra edges between
++ every two memory instructions in this case. */
++ if (flag_modulo_sched_allow_regmoves
++ && !TEST_BIT (dest_node->predecessors, j))
++ add_intra_loop_mem_dep (g, j_node, dest_node);
++ }
+ }
+ }
+ }
+@@ -1011,6 +1083,7 @@
+ for (i = 0; i < all_sccs->num_sccs; i++)
+ free_scc (all_sccs->sccs[i]);
+
++ free (all_sccs->sccs);
+ free (all_sccs);
+ }
+
+--- a/src/gcc/ddg.h
++++ b/src/gcc/ddg.h
+@@ -186,4 +186,6 @@
+ int find_nodes_on_paths (sbitmap result, ddg_ptr, sbitmap from, sbitmap to);
+ int longest_simple_path (ddg_ptr, int from, int to, sbitmap via);
+
++bool autoinc_var_is_used_p (rtx, rtx);
++
+ #endif /* GCC_DDG_H */
+--- a/src/gcc/df-problems.c
++++ b/src/gcc/df-problems.c
+@@ -3375,7 +3375,7 @@
+ while (*mws_rec)
+ {
+ struct df_mw_hardreg *mws = *mws_rec;
+- if ((DF_MWS_REG_DEF_P (mws))
++ if (DF_MWS_REG_USE_P (mws)
+ && !df_ignore_stack_reg (mws->start_regno))
+ {
+ bool really_add_notes = debug_insn != 0;
+--- a/src/gcc/doc/tm.texi.in
++++ b/src/gcc/doc/tm.texi.in
+@@ -2521,7 +2521,7 @@
+ register, so @code{TARGET_PREFERRED_RELOAD_CLASS} returns @code{NO_REGS} when
+ @var{x} is a floating-point constant. If the constant can't be loaded
+ into any kind of register, code generation will be better if
+-@code{LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
++@code{TARGET_LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
+ of using @code{TARGET_PREFERRED_RELOAD_CLASS}.
+
+ If an insn has pseudos in it after register allocation, reload will go
+@@ -2558,8 +2558,8 @@
+ register, so @code{PREFERRED_RELOAD_CLASS} returns @code{NO_REGS} when
+ @var{x} is a floating-point constant. If the constant can't be loaded
+ into any kind of register, code generation will be better if
+-@code{LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
+-of using @code{PREFERRED_RELOAD_CLASS}.
++@code{TARGET_LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead
++of using @code{TARGET_PREFERRED_RELOAD_CLASS}.
+
+ If an insn has pseudos in it after register allocation, reload will go
+ through the alternatives and call repeatedly @code{PREFERRED_RELOAD_CLASS}
+@@ -4305,6 +4305,8 @@
+ must have move patterns for this mode.
+ @end deftypefn
+
++@hook TARGET_ARRAY_MODE_SUPPORTED_P
++
+ @hook TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P
+ Define this to return nonzero for machine modes for which the port has
+ small register classes. If this target hook returns nonzero for a given
+@@ -5555,13 +5557,13 @@
+ @code{TARGET_MODE_DEPENDENT_ADDRESS_P} target hook.
+ @end defmac
+
+-@defmac LEGITIMATE_CONSTANT_P (@var{x})
+-A C expression that is nonzero if @var{x} is a legitimate constant for
+-an immediate operand on the target machine. You can assume that
+-@var{x} satisfies @code{CONSTANT_P}, so you need not check this. In fact,
+-@samp{1} is a suitable definition for this macro on machines where
+-anything @code{CONSTANT_P} is valid.
+-@end defmac
++@hook TARGET_LEGITIMATE_CONSTANT_P
++This hook returns true if @var{x} is a legitimate constant for a
++@var{mode}-mode immediate operand on the target machine. You can assume that
++@var{x} satisfies @code{CONSTANT_P}, so you need not check this.
++
++The default definition returns true.
++@end deftypefn
+
+ @hook TARGET_DELEGITIMIZE_ADDRESS
+ This hook is used to undo the possibly obfuscating effects of the
+--- a/src/gcc/dojump.c
++++ b/src/gcc/dojump.c
+@@ -36,6 +36,7 @@
+ #include "ggc.h"
+ #include "basic-block.h"
+ #include "output.h"
++#include "tm_p.h"
+
+ static bool prefer_and_bit_test (enum machine_mode, int);
+ static void do_jump_by_parts_greater (tree, tree, int, rtx, rtx, int);
+--- a/src/gcc/dwarf2out.c
++++ b/src/gcc/dwarf2out.c
+@@ -4431,6 +4431,11 @@
+ const char *section; /* Section this loclist is relative to */
+ dw_loc_descr_ref expr;
+ hashval_t hash;
++ /* True if all addresses in this and subsequent lists are known to be
++ resolved. */
++ bool resolved_addr;
++ /* True if this list has been replaced by dw_loc_next. */
++ bool replaced;
+ bool emitted;
+ } dw_loc_list_node;
+
+@@ -6091,6 +6096,19 @@
+ /* Table of decl location linked lists. */
+ static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
+
++/* A cached location list. */
++struct GTY (()) cached_dw_loc_list_def {
++ /* The DECL_UID of the decl that this entry describes. */
++ unsigned int decl_id;
++
++ /* The cached location list. */
++ dw_loc_list_ref loc_list;
++};
++typedef struct cached_dw_loc_list_def cached_dw_loc_list;
++
++/* Table of cached location lists. */
++static GTY ((param_is (cached_dw_loc_list))) htab_t cached_dw_loc_list_table;
++
+ /* A pointer to the base of a list of references to DIE's that
+ are uniquely identified by their tag, presence/absence of
+ children DIE's, and list of attribute/value pairs. */
+@@ -6439,7 +6457,7 @@
+ static void insert_double (double_int, unsigned char *);
+ static void insert_float (const_rtx, unsigned char *);
+ static rtx rtl_for_decl_location (tree);
+-static bool add_location_or_const_value_attribute (dw_die_ref, tree,
++static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool,
+ enum dwarf_attribute);
+ static bool tree_add_const_value_attribute (dw_die_ref, tree);
+ static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
+@@ -8173,6 +8191,24 @@
+ htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
+ }
+
++/* Returns a hash value for X (which really is a cached_dw_loc_list_list). */
++
++static hashval_t
++cached_dw_loc_list_table_hash (const void *x)
++{
++ return (hashval_t) ((const cached_dw_loc_list *) x)->decl_id;
++}
++
++/* Return nonzero if decl_id of cached_dw_loc_list X is the same as
++ UID of decl *Y. */
++
++static int
++cached_dw_loc_list_table_eq (const void *x, const void *y)
++{
++ return (((const cached_dw_loc_list *) x)->decl_id
++ == DECL_UID ((const_tree) y));
++}
++
+ /* Equate a DIE to a particular declaration. */
+
+ static void
+@@ -16995,15 +17031,22 @@
+ these things can crop up in other ways also.) Note that one type of
+ constant value which can be passed into an inlined function is a constant
+ pointer. This can happen for example if an actual argument in an inlined
+- function call evaluates to a compile-time constant address. */
++ function call evaluates to a compile-time constant address.
++
++ CACHE_P is true if it is worth caching the location list for DECL,
++ so that future calls can reuse it rather than regenerate it from scratch.
++ This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
++ since we will need to refer to them each time the function is inlined. */
+
+ static bool
+-add_location_or_const_value_attribute (dw_die_ref die, tree decl,
++add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p,
+ enum dwarf_attribute attr)
+ {
+ rtx rtl;
+ dw_loc_list_ref list;
+ var_loc_list *loc_list;
++ cached_dw_loc_list *cache;
++ void **slot;
+
+ if (TREE_CODE (decl) == ERROR_MARK)
+ return false;
+@@ -17040,7 +17083,33 @@
+ && add_const_value_attribute (die, rtl))
+ return true;
+ }
+- list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
++ /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
++ list several times. See if we've already cached the contents. */
++ list = NULL;
++ if (loc_list == NULL || cached_dw_loc_list_table == NULL)
++ cache_p = false;
++ if (cache_p)
++ {
++ cache = (cached_dw_loc_list *)
++ htab_find_with_hash (cached_dw_loc_list_table, decl, DECL_UID (decl));
++ if (cache)
++ list = cache->loc_list;
++ }
++ if (list == NULL)
++ {
++ list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
++ /* It is usually worth caching this result if the decl is from
++ BLOCK_NONLOCALIZED_VARS and if the list has at least two elements. */
++ if (cache_p && list && list->dw_loc_next)
++ {
++ slot = htab_find_slot_with_hash (cached_dw_loc_list_table, decl,
++ DECL_UID (decl), INSERT);
++ cache = ggc_alloc_cleared_cached_dw_loc_list ();
++ cache->decl_id = DECL_UID (decl);
++ cache->loc_list = list;
++ *slot = cache;
++ }
++ }
+ if (list)
+ {
+ add_AT_location_description (die, attr, list);
+@@ -18738,7 +18807,7 @@
+ equate_decl_number_to_die (node, parm_die);
+ if (! DECL_ABSTRACT (node_or_origin))
+ add_location_or_const_value_attribute (parm_die, node_or_origin,
+- DW_AT_location);
++ node == NULL, DW_AT_location);
+
+ break;
+
+@@ -18923,6 +18992,7 @@
+ tree context;
+ int was_abstract;
+ htab_t old_decl_loc_table;
++ htab_t old_cached_dw_loc_list_table;
+
+ /* Make sure we have the actual abstract inline, not a clone. */
+ decl = DECL_ORIGIN (decl);
+@@ -18937,6 +19007,8 @@
+ get locations in abstract instantces. */
+ old_decl_loc_table = decl_loc_table;
+ decl_loc_table = NULL;
++ old_cached_dw_loc_list_table = cached_dw_loc_list_table;
++ cached_dw_loc_list_table = NULL;
+
+ /* Be sure we've emitted the in-class declaration DIE (if any) first, so
+ we don't get confused by DECL_ABSTRACT. */
+@@ -18961,6 +19033,7 @@
+
+ current_function_decl = save_fn;
+ decl_loc_table = old_decl_loc_table;
++ cached_dw_loc_list_table = old_cached_dw_loc_list_table;
+ pop_cfun ();
+ }
+
+@@ -19745,9 +19818,8 @@
+ && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
+ defer_location (decl_or_origin, var_die);
+ else
+- add_location_or_const_value_attribute (var_die,
+- decl_or_origin,
+- DW_AT_location);
++ add_location_or_const_value_attribute (var_die, decl_or_origin,
++ decl == NULL, DW_AT_location);
+ add_pubname (decl_or_origin, var_die);
+ }
+ else
+@@ -21534,6 +21606,7 @@
+ dwarf2out_decl (decl);
+
+ htab_empty (decl_loc_table);
++ htab_empty (cached_dw_loc_list_table);
+ }
+
+ /* Output a marker (i.e. a label) for the beginning of the generated code for
+@@ -22267,6 +22340,11 @@
+ decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
+ decl_loc_table_eq, NULL);
+
++ /* Allocate the cached_dw_loc_list_table. */
++ cached_dw_loc_list_table
++ = htab_create_ggc (10, cached_dw_loc_list_table_hash,
++ cached_dw_loc_list_table_eq, NULL);
++
+ /* Allocate the initial hunk of the decl_scope_table. */
+ decl_scope_table = VEC_alloc (tree, gc, 256);
+
+@@ -22907,30 +22985,53 @@
+ {
+ dw_die_ref c;
+ dw_attr_ref a;
+- dw_loc_list_ref *curr;
++ dw_loc_list_ref *curr, *start, loc;
+ unsigned ix;
+
+ FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
+ switch (AT_class (a))
+ {
+ case dw_val_class_loc_list:
+- curr = AT_loc_list_ptr (a);
+- while (*curr)
++ start = curr = AT_loc_list_ptr (a);
++ loc = *curr;
++ gcc_assert (loc);
++ /* The same list can be referenced more than once. See if we have
++ already recorded the result from a previous pass. */
++ if (loc->replaced)
++ *curr = loc->dw_loc_next;
++ else if (!loc->resolved_addr)
+ {
+- if (!resolve_addr_in_expr ((*curr)->expr))
++ /* As things stand, we do not expect or allow one die to
++ reference a suffix of another die's location list chain.
++ References must be identical or completely separate.
++ There is therefore no need to cache the result of this
++ pass on any list other than the first; doing so
++ would lead to unnecessary writes. */
++ while (*curr)
+ {
+- dw_loc_list_ref next = (*curr)->dw_loc_next;
+- if (next && (*curr)->ll_symbol)
++ gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
++ if (!resolve_addr_in_expr ((*curr)->expr))
+ {
+- gcc_assert (!next->ll_symbol);
+- next->ll_symbol = (*curr)->ll_symbol;
++ dw_loc_list_ref next = (*curr)->dw_loc_next;
++ if (next && (*curr)->ll_symbol)
++ {
++ gcc_assert (!next->ll_symbol);
++ next->ll_symbol = (*curr)->ll_symbol;
++ }
++ *curr = next;
+ }
+- *curr = next;
++ else
++ curr = &(*curr)->dw_loc_next;
+ }
++ if (loc == *start)
++ loc->resolved_addr = 1;
+ else
+- curr = &(*curr)->dw_loc_next;
++ {
++ loc->replaced = 1;
++ loc->dw_loc_next = *start;
++ }
+ }
+- if (!AT_loc_list (a))
++ if (!*start)
+ {
+ remove_AT (die, a->dw_attr);
+ ix--;
+@@ -23359,6 +23460,7 @@
+ add_location_or_const_value_attribute (
+ VEC_index (deferred_locations, deferred_locations_list, i)->die,
+ VEC_index (deferred_locations, deferred_locations_list, i)->variable,
++ false,
+ DW_AT_location);
+ }
+
+--- a/src/gcc/expmed.c
++++ b/src/gcc/expmed.c
+@@ -657,6 +657,10 @@
+ && GET_MODE (value) != BLKmode
+ && bitsize > 0
+ && GET_MODE_BITSIZE (op_mode) >= bitsize
++ /* Do not use insv for volatile bitfields when
++ -fstrict-volatile-bitfields is in effect. */
++ && !(MEM_P (op0) && MEM_VOLATILE_P (op0)
++ && flag_strict_volatile_bitfields > 0)
+ && ! ((REG_P (op0) || GET_CODE (op0) == SUBREG)
+ && (bitsize + bitpos > GET_MODE_BITSIZE (op_mode)))
+ && insn_data[CODE_FOR_insv].operand[1].predicate (GEN_INT (bitsize),
+@@ -700,19 +704,21 @@
+ copy_back = true;
+ }
+
+- /* On big-endian machines, we count bits from the most significant.
+- If the bit field insn does not, we must invert. */
+-
+- if (BITS_BIG_ENDIAN != BYTES_BIG_ENDIAN)
+- xbitpos = unit - bitsize - xbitpos;
+-
+ /* We have been counting XBITPOS within UNIT.
+ Count instead within the size of the register. */
+- if (BITS_BIG_ENDIAN && !MEM_P (xop0))
++ if (BYTES_BIG_ENDIAN && !MEM_P (xop0))
+ xbitpos += GET_MODE_BITSIZE (op_mode) - unit;
+
+ unit = GET_MODE_BITSIZE (op_mode);
+
++ /* If BITS_BIG_ENDIAN is zero on a BYTES_BIG_ENDIAN machine, we count
++ "backwards" from the size of the unit we are inserting into.
++ Otherwise, we count bits from the most significant on a
++ BYTES/BITS_BIG_ENDIAN machine. */
++
++ if (BITS_BIG_ENDIAN != BYTES_BIG_ENDIAN)
++ xbitpos = unit - bitsize - xbitpos;
++
+ /* Convert VALUE to op_mode (which insv insn wants) in VALUE1. */
+ value1 = value;
+ if (GET_MODE (value) != op_mode)
+@@ -1528,6 +1534,10 @@
+ if (ext_mode != MAX_MACHINE_MODE
+ && bitsize > 0
+ && GET_MODE_BITSIZE (ext_mode) >= bitsize
++ /* Do not use extv/extzv for volatile bitfields when
++ -fstrict-volatile-bitfields is in effect. */
++ && !(MEM_P (op0) && MEM_VOLATILE_P (op0)
++ && flag_strict_volatile_bitfields > 0)
+ /* If op0 is a register, we need it in EXT_MODE to make it
+ acceptable to the format of ext(z)v. */
+ && !(GET_CODE (op0) == SUBREG && GET_MODE (op0) != ext_mode)
+@@ -1552,17 +1562,20 @@
+ /* Get ref to first byte containing part of the field. */
+ xop0 = adjust_address (xop0, byte_mode, xoffset);
+
+- /* On big-endian machines, we count bits from the most significant.
+- If the bit field insn does not, we must invert. */
+- if (BITS_BIG_ENDIAN != BYTES_BIG_ENDIAN)
+- xbitpos = unit - bitsize - xbitpos;
+-
+ /* Now convert from counting within UNIT to counting in EXT_MODE. */
+- if (BITS_BIG_ENDIAN && !MEM_P (xop0))
++ if (BYTES_BIG_ENDIAN && !MEM_P (xop0))
+ xbitpos += GET_MODE_BITSIZE (ext_mode) - unit;
+
+ unit = GET_MODE_BITSIZE (ext_mode);
+
++ /* If BITS_BIG_ENDIAN is zero on a BYTES_BIG_ENDIAN machine, we count
++ "backwards" from the size of the unit we are extracting from.
++ Otherwise, we count bits from the most significant on a
++ BYTES/BITS_BIG_ENDIAN machine. */
++
++ if (BITS_BIG_ENDIAN != BYTES_BIG_ENDIAN)
++ xbitpos = unit - bitsize - xbitpos;
++
+ if (xtarget == 0)
+ xtarget = xspec_target = gen_reg_rtx (tmode);
+
+--- a/src/gcc/expr.c
++++ b/src/gcc/expr.c
+@@ -1497,7 +1497,7 @@
+ if (nregs == 0)
+ return;
+
+- if (CONSTANT_P (x) && ! LEGITIMATE_CONSTANT_P (x))
++ if (CONSTANT_P (x) && !targetm.legitimate_constant_p (mode, x))
+ x = validize_mem (force_const_mem (mode, x));
+
+ /* See if the machine can do this with a load multiple insn. */
+@@ -2308,7 +2308,7 @@
+ offset -= size;
+
+ cst = (*constfun) (constfundata, offset, mode);
+- if (!LEGITIMATE_CONSTANT_P (cst))
++ if (!targetm.legitimate_constant_p (mode, cst))
+ return 0;
+
+ if (!reverse)
+@@ -3363,7 +3363,7 @@
+
+ y_cst = y;
+
+- if (!LEGITIMATE_CONSTANT_P (y))
++ if (!targetm.legitimate_constant_p (mode, y))
+ {
+ y = force_const_mem (mode, y);
+
+@@ -3419,7 +3419,7 @@
+
+ REAL_VALUE_FROM_CONST_DOUBLE (r, y);
+
+- if (LEGITIMATE_CONSTANT_P (y))
++ if (targetm.legitimate_constant_p (dstmode, y))
+ oldcost = rtx_cost (y, SET, speed);
+ else
+ oldcost = rtx_cost (force_const_mem (dstmode, y), SET, speed);
+@@ -3442,7 +3442,7 @@
+
+ trunc_y = CONST_DOUBLE_FROM_REAL_VALUE (r, srcmode);
+
+- if (LEGITIMATE_CONSTANT_P (trunc_y))
++ if (targetm.legitimate_constant_p (srcmode, trunc_y))
+ {
+ /* Skip if the target needs extra instructions to perform
+ the extension. */
+@@ -3855,7 +3855,7 @@
+ by setting SKIP to 0. */
+ skip = (reg_parm_stack_space == 0) ? 0 : not_stack;
+
+- if (CONSTANT_P (x) && ! LEGITIMATE_CONSTANT_P (x))
++ if (CONSTANT_P (x) && !targetm.legitimate_constant_p (mode, x))
+ x = validize_mem (force_const_mem (mode, x));
+
+ /* If X is a hard register in a non-integer mode, copy it into a pseudo;
+@@ -4866,16 +4866,136 @@
+ return NULL_RTX;
+ }
+
++/* Return true if field F of structure TYPE is a flexible array. */
++
++static bool
++flexible_array_member_p (const_tree f, const_tree type)
++{
++ const_tree tf;
++
++ tf = TREE_TYPE (f);
++ return (DECL_CHAIN (f) == NULL
++ && TREE_CODE (tf) == ARRAY_TYPE
++ && TYPE_DOMAIN (tf)
++ && TYPE_MIN_VALUE (TYPE_DOMAIN (tf))
++ && integer_zerop (TYPE_MIN_VALUE (TYPE_DOMAIN (tf)))
++ && !TYPE_MAX_VALUE (TYPE_DOMAIN (tf))
++ && int_size_in_bytes (type) >= 0);
++}
++
++/* If FOR_CTOR_P, return the number of top-level elements that a constructor
++ must have in order for it to completely initialize a value of type TYPE.
++ Return -1 if the number isn't known.
++
++ If !FOR_CTOR_P, return an estimate of the number of scalars in TYPE. */
++
++static HOST_WIDE_INT
++count_type_elements (const_tree type, bool for_ctor_p)
++{
++ switch (TREE_CODE (type))
++ {
++ case ARRAY_TYPE:
++ {
++ tree nelts;
++
++ nelts = array_type_nelts (type);
++ if (nelts && host_integerp (nelts, 1))
++ {
++ unsigned HOST_WIDE_INT n;
++
++ n = tree_low_cst (nelts, 1) + 1;
++ if (n == 0 || for_ctor_p)
++ return n;
++ else
++ return n * count_type_elements (TREE_TYPE (type), false);
++ }
++ return for_ctor_p ? -1 : 1;
++ }
++
++ case RECORD_TYPE:
++ {
++ unsigned HOST_WIDE_INT n;
++ tree f;
++
++ n = 0;
++ for (f = TYPE_FIELDS (type); f ; f = DECL_CHAIN (f))
++ if (TREE_CODE (f) == FIELD_DECL)
++ {
++ if (!for_ctor_p)
++ n += count_type_elements (TREE_TYPE (f), false);
++ else if (!flexible_array_member_p (f, type))
++ /* Don't count flexible arrays, which are not supposed
++ to be initialized. */
++ n += 1;
++ }
++
++ return n;
++ }
++
++ case UNION_TYPE:
++ case QUAL_UNION_TYPE:
++ {
++ tree f;
++ HOST_WIDE_INT n, m;
++
++ gcc_assert (!for_ctor_p);
++ /* Estimate the number of scalars in each field and pick the
++ maximum. Other estimates would do instead; the idea is simply
++ to make sure that the estimate is not sensitive to the ordering
++ of the fields. */
++ n = 1;
++ for (f = TYPE_FIELDS (type); f ; f = DECL_CHAIN (f))
++ if (TREE_CODE (f) == FIELD_DECL)
++ {
++ m = count_type_elements (TREE_TYPE (f), false);
++ /* If the field doesn't span the whole union, add an extra
++ scalar for the rest. */
++ if (simple_cst_equal (TYPE_SIZE (TREE_TYPE (f)),
++ TYPE_SIZE (type)) != 1)
++ m++;
++ if (n < m)
++ n = m;
++ }
++ return n;
++ }
++
++ case COMPLEX_TYPE:
++ return 2;
++
++ case VECTOR_TYPE:
++ return TYPE_VECTOR_SUBPARTS (type);
++
++ case INTEGER_TYPE:
++ case REAL_TYPE:
++ case FIXED_POINT_TYPE:
++ case ENUMERAL_TYPE:
++ case BOOLEAN_TYPE:
++ case POINTER_TYPE:
++ case OFFSET_TYPE:
++ case REFERENCE_TYPE:
++ return 1;
++
++ case ERROR_MARK:
++ return 0;
++
++ case VOID_TYPE:
++ case METHOD_TYPE:
++ case FUNCTION_TYPE:
++ case LANG_TYPE:
++ default:
++ gcc_unreachable ();
++ }
++}
++
+ /* Helper for categorize_ctor_elements. Identical interface. */
+
+ static bool
+ categorize_ctor_elements_1 (const_tree ctor, HOST_WIDE_INT *p_nz_elts,
+- HOST_WIDE_INT *p_elt_count,
+- bool *p_must_clear)
++ HOST_WIDE_INT *p_init_elts, bool *p_complete)
+ {
+ unsigned HOST_WIDE_INT idx;
+- HOST_WIDE_INT nz_elts, elt_count;
+- tree value, purpose;
++ HOST_WIDE_INT nz_elts, init_elts, num_fields;
++ tree value, purpose, elt_type;
+
+ /* Whether CTOR is a valid constant initializer, in accordance with what
+ initializer_constant_valid_p does. If inferred from the constructor
+@@ -4884,7 +5004,9 @@
+ bool const_p = const_from_elts_p ? true : TREE_STATIC (ctor);
+
+ nz_elts = 0;
+- elt_count = 0;
++ init_elts = 0;
++ num_fields = 0;
++ elt_type = NULL_TREE;
+
+ FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (ctor), idx, purpose, value)
+ {
+@@ -4899,6 +5021,8 @@
+ mult = (tree_low_cst (hi_index, 1)
+ - tree_low_cst (lo_index, 1) + 1);
+ }
++ num_fields += mult;
++ elt_type = TREE_TYPE (value);
+
+ switch (TREE_CODE (value))
+ {
+@@ -4906,11 +5030,11 @@
+ {
+ HOST_WIDE_INT nz = 0, ic = 0;
+
+- bool const_elt_p
+- = categorize_ctor_elements_1 (value, &nz, &ic, p_must_clear);
++ bool const_elt_p = categorize_ctor_elements_1 (value, &nz, &ic,
++ p_complete);
+
+ nz_elts += mult * nz;
+- elt_count += mult * ic;
++ init_elts += mult * ic;
+
+ if (const_from_elts_p && const_p)
+ const_p = const_elt_p;
+@@ -4922,12 +5046,12 @@
+ case FIXED_CST:
+ if (!initializer_zerop (value))
+ nz_elts += mult;
+- elt_count += mult;
++ init_elts += mult;
+ break;
+
+ case STRING_CST:
+ nz_elts += mult * TREE_STRING_LENGTH (value);
+- elt_count += mult * TREE_STRING_LENGTH (value);
++ init_elts += mult * TREE_STRING_LENGTH (value);
+ break;
+
+ case COMPLEX_CST:
+@@ -4935,7 +5059,7 @@
+ nz_elts += mult;
+ if (!initializer_zerop (TREE_IMAGPART (value)))
+ nz_elts += mult;
+- elt_count += mult;
++ init_elts += mult;
+ break;
+
+ case VECTOR_CST:
+@@ -4945,65 +5069,31 @@
+ {
+ if (!initializer_zerop (TREE_VALUE (v)))
+ nz_elts += mult;
+- elt_count += mult;
++ init_elts += mult;
+ }
+ }
+ break;
+
+ default:
+ {
+- HOST_WIDE_INT tc = count_type_elements (TREE_TYPE (value), true);
+- if (tc < 1)
+- tc = 1;
++ HOST_WIDE_INT tc = count_type_elements (elt_type, false);
+ nz_elts += mult * tc;
+- elt_count += mult * tc;
++ init_elts += mult * tc;
+
+ if (const_from_elts_p && const_p)
+- const_p = initializer_constant_valid_p (value, TREE_TYPE (value))
++ const_p = initializer_constant_valid_p (value, elt_type)
+ != NULL_TREE;
+ }
+ break;
+ }
+ }
+
+- if (!*p_must_clear
+- && (TREE_CODE (TREE_TYPE (ctor)) == UNION_TYPE
+- || TREE_CODE (TREE_TYPE (ctor)) == QUAL_UNION_TYPE))
+- {
+- tree init_sub_type;
+- bool clear_this = true;
+-
+- if (!VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (ctor)))
+- {
+- /* We don't expect more than one element of the union to be
+- initialized. Not sure what we should do otherwise... */
+- gcc_assert (VEC_length (constructor_elt, CONSTRUCTOR_ELTS (ctor))
+- == 1);
+-
+- init_sub_type = TREE_TYPE (VEC_index (constructor_elt,
+- CONSTRUCTOR_ELTS (ctor),
+- 0)->value);
+-
+- /* ??? We could look at each element of the union, and find the
+- largest element. Which would avoid comparing the size of the
+- initialized element against any tail padding in the union.
+- Doesn't seem worth the effort... */
+- if (simple_cst_equal (TYPE_SIZE (TREE_TYPE (ctor)),
+- TYPE_SIZE (init_sub_type)) == 1)
+- {
+- /* And now we have to find out if the element itself is fully
+- constructed. E.g. for union { struct { int a, b; } s; } u
+- = { .s = { .a = 1 } }. */
+- if (elt_count == count_type_elements (init_sub_type, false))
+- clear_this = false;
+- }
+- }
+-
+- *p_must_clear = clear_this;
+- }
++ if (*p_complete && !complete_ctor_at_level_p (TREE_TYPE (ctor),
++ num_fields, elt_type))
++ *p_complete = false;
+
+ *p_nz_elts += nz_elts;
+- *p_elt_count += elt_count;
++ *p_init_elts += init_elts;
+
+ return const_p;
+ }
+@@ -5013,111 +5103,50 @@
+ and place it in *P_NZ_ELTS;
+ * how many scalar fields in total are in CTOR,
+ and place it in *P_ELT_COUNT.
+- * if a type is a union, and the initializer from the constructor
+- is not the largest element in the union, then set *p_must_clear.
++ * whether the constructor is complete -- in the sense that every
++ meaningful byte is explicitly given a value --
++ and place it in *P_COMPLETE.
+
+ Return whether or not CTOR is a valid static constant initializer, the same
+ as "initializer_constant_valid_p (CTOR, TREE_TYPE (CTOR)) != 0". */
+
+ bool
+ categorize_ctor_elements (const_tree ctor, HOST_WIDE_INT *p_nz_elts,
+- HOST_WIDE_INT *p_elt_count,
+- bool *p_must_clear)
++ HOST_WIDE_INT *p_init_elts, bool *p_complete)
+ {
+ *p_nz_elts = 0;
+- *p_elt_count = 0;
+- *p_must_clear = false;
++ *p_init_elts = 0;
++ *p_complete = true;
+
+- return
+- categorize_ctor_elements_1 (ctor, p_nz_elts, p_elt_count, p_must_clear);
++ return categorize_ctor_elements_1 (ctor, p_nz_elts, p_init_elts, p_complete);
+ }
+
+-/* Count the number of scalars in TYPE. Return -1 on overflow or
+- variable-sized. If ALLOW_FLEXARR is true, don't count flexible
+- array member at the end of the structure. */
++/* TYPE is initialized by a constructor with NUM_ELTS elements, the last
++ of which had type LAST_TYPE. Each element was itself a complete
++ initializer, in the sense that every meaningful byte was explicitly
++ given a value. Return true if the same is true for the constructor
++ as a whole. */
+
+-HOST_WIDE_INT
+-count_type_elements (const_tree type, bool allow_flexarr)
++bool
++complete_ctor_at_level_p (const_tree type, HOST_WIDE_INT num_elts,
++ const_tree last_type)
+ {
+- const HOST_WIDE_INT max = ~((HOST_WIDE_INT)1 << (HOST_BITS_PER_WIDE_INT-1));
+- switch (TREE_CODE (type))
++ if (TREE_CODE (type) == UNION_TYPE
++ || TREE_CODE (type) == QUAL_UNION_TYPE)
+ {
+- case ARRAY_TYPE:
+- {
+- tree telts = array_type_nelts (type);
+- if (telts && host_integerp (telts, 1))
+- {
+- HOST_WIDE_INT n = tree_low_cst (telts, 1) + 1;
+- HOST_WIDE_INT m = count_type_elements (TREE_TYPE (type), false);
+- if (n == 0)
+- return 0;
+- else if (max / n > m)
+- return n * m;
+- }
+- return -1;
+- }
+-
+- case RECORD_TYPE:
+- {
+- HOST_WIDE_INT n = 0, t;
+- tree f;
+-
+- for (f = TYPE_FIELDS (type); f ; f = DECL_CHAIN (f))
+- if (TREE_CODE (f) == FIELD_DECL)
+- {
+- t = count_type_elements (TREE_TYPE (f), false);
+- if (t < 0)
+- {
+- /* Check for structures with flexible array member. */
+- tree tf = TREE_TYPE (f);
+- if (allow_flexarr
+- && DECL_CHAIN (f) == NULL
+- && TREE_CODE (tf) == ARRAY_TYPE
+- && TYPE_DOMAIN (tf)
+- && TYPE_MIN_VALUE (TYPE_DOMAIN (tf))
+- && integer_zerop (TYPE_MIN_VALUE (TYPE_DOMAIN (tf)))
+- && !TYPE_MAX_VALUE (TYPE_DOMAIN (tf))
+- && int_size_in_bytes (type) >= 0)
+- break;
+-
+- return -1;
+- }
+- n += t;
+- }
+-
+- return n;
+- }
+-
+- case UNION_TYPE:
+- case QUAL_UNION_TYPE:
+- return -1;
+-
+- case COMPLEX_TYPE:
+- return 2;
+-
+- case VECTOR_TYPE:
+- return TYPE_VECTOR_SUBPARTS (type);
+-
+- case INTEGER_TYPE:
+- case REAL_TYPE:
+- case FIXED_POINT_TYPE:
+- case ENUMERAL_TYPE:
+- case BOOLEAN_TYPE:
+- case POINTER_TYPE:
+- case OFFSET_TYPE:
+- case REFERENCE_TYPE:
+- return 1;
++ if (num_elts == 0)
++ return false;
+
+- case ERROR_MARK:
+- return 0;
++ gcc_assert (num_elts == 1 && last_type);
+
+- case VOID_TYPE:
+- case METHOD_TYPE:
+- case FUNCTION_TYPE:
+- case LANG_TYPE:
+- default:
+- gcc_unreachable ();
++ /* ??? We could look at each element of the union, and find the
++ largest element. Which would avoid comparing the size of the
++ initialized element against any tail padding in the union.
++ Doesn't seem worth the effort... */
++ return simple_cst_equal (TYPE_SIZE (type), TYPE_SIZE (last_type)) == 1;
+ }
++
++ return count_type_elements (type, true) == num_elts;
+ }
+
+ /* Return 1 if EXP contains mostly (3/4) zeros. */
+@@ -5126,18 +5155,12 @@
+ mostly_zeros_p (const_tree exp)
+ {
+ if (TREE_CODE (exp) == CONSTRUCTOR)
+-
+ {
+- HOST_WIDE_INT nz_elts, count, elts;
+- bool must_clear;
+-
+- categorize_ctor_elements (exp, &nz_elts, &count, &must_clear);
+- if (must_clear)
+- return 1;
+-
+- elts = count_type_elements (TREE_TYPE (exp), false);
++ HOST_WIDE_INT nz_elts, init_elts;
++ bool complete_p;
+
+- return nz_elts < elts / 4;
++ categorize_ctor_elements (exp, &nz_elts, &init_elts, &complete_p);
++ return !complete_p || nz_elts < init_elts / 4;
+ }
+
+ return initializer_zerop (exp);
+@@ -5149,12 +5172,11 @@
+ all_zeros_p (const_tree exp)
+ {
+ if (TREE_CODE (exp) == CONSTRUCTOR)
+-
+ {
+- HOST_WIDE_INT nz_elts, count;
+- bool must_clear;
++ HOST_WIDE_INT nz_elts, init_elts;
++ bool complete_p;
+
+- categorize_ctor_elements (exp, &nz_elts, &count, &must_clear);
++ categorize_ctor_elements (exp, &nz_elts, &init_elts, &complete_p);
+ return nz_elts == 0;
+ }
+
+@@ -7666,18 +7688,16 @@
+ {
+ enum machine_mode innermode = TYPE_MODE (TREE_TYPE (treeop0));
+ this_optab = usmul_widen_optab;
+- if (mode == GET_MODE_2XWIDER_MODE (innermode))
++ if (find_widening_optab_handler (this_optab, mode, innermode, 0)
++ != CODE_FOR_nothing)
+ {
+- if (optab_handler (this_optab, mode) != CODE_FOR_nothing)
+- {
+- if (TYPE_UNSIGNED (TREE_TYPE (treeop0)))
+- expand_operands (treeop0, treeop1, NULL_RTX, &op0, &op1,
+- EXPAND_NORMAL);
+- else
+- expand_operands (treeop0, treeop1, NULL_RTX, &op1, &op0,
+- EXPAND_NORMAL);
+- goto binop3;
+- }
++ if (TYPE_UNSIGNED (TREE_TYPE (treeop0)))
++ expand_operands (treeop0, treeop1, NULL_RTX, &op0, &op1,
++ EXPAND_NORMAL);
++ else
++ expand_operands (treeop0, treeop1, NULL_RTX, &op1, &op0,
++ EXPAND_NORMAL);
++ goto binop3;
+ }
+ }
+ /* Check for a multiplication with matching signedness. */
+@@ -7692,10 +7712,10 @@
+ optab other_optab = zextend_p ? smul_widen_optab : umul_widen_optab;
+ this_optab = zextend_p ? umul_widen_optab : smul_widen_optab;
+
+- if (mode == GET_MODE_2XWIDER_MODE (innermode)
+- && TREE_CODE (treeop0) != INTEGER_CST)
++ if (TREE_CODE (treeop0) != INTEGER_CST)
+ {
+- if (optab_handler (this_optab, mode) != CODE_FOR_nothing)
++ if (find_widening_optab_handler (this_optab, mode, innermode, 0)
++ != CODE_FOR_nothing)
+ {
+ expand_operands (treeop0, treeop1, NULL_RTX, &op0, &op1,
+ EXPAND_NORMAL);
+@@ -7703,7 +7723,8 @@
+ unsignedp, this_optab);
+ return REDUCE_BIT_FIELD (temp);
+ }
+- if (optab_handler (other_optab, mode) != CODE_FOR_nothing
++ if (find_widening_optab_handler (other_optab, mode, innermode, 0)
++ != CODE_FOR_nothing
+ && innermode == word_mode)
+ {
+ rtx htem, hipart;
+@@ -8269,6 +8290,19 @@
+ return target;
+ }
+
++ case VEC_WIDEN_LSHIFT_HI_EXPR:
++ case VEC_WIDEN_LSHIFT_LO_EXPR:
++ {
++ tree oprnd0 = treeop0;
++ tree oprnd1 = treeop1;
++
++ expand_operands (oprnd0, oprnd1, NULL_RTX, &op0, &op1, EXPAND_NORMAL);
++ target = expand_widen_pattern_expr (ops, op0, op1, NULL_RTX,
++ target, unsignedp);
++ gcc_assert (target);
++ return target;
++ }
++
+ case VEC_PACK_TRUNC_EXPR:
+ case VEC_PACK_SAT_EXPR:
+ case VEC_PACK_FIX_TRUNC_EXPR:
+@@ -8545,10 +8579,13 @@
+ if (code == SSA_NAME
+ && (g = SSA_NAME_DEF_STMT (ssa_name))
+ && gimple_code (g) == GIMPLE_CALL)
+- pmode = promote_function_mode (type, mode, &unsignedp,
+- TREE_TYPE
+- (TREE_TYPE (gimple_call_fn (g))),
+- 2);
++ {
++ gcc_assert (!gimple_call_internal_p (g));
++ pmode = promote_function_mode (type, mode, &unsignedp,
++ TREE_TYPE
++ (TREE_TYPE (gimple_call_fn (g))),
++ 2);
++ }
+ else
+ pmode = promote_decl_mode (exp, &unsignedp);
+ gcc_assert (GET_MODE (decl_rtl) == pmode);
+@@ -9108,7 +9145,7 @@
+ constant and we don't need a memory reference. */
+ if (CONSTANT_P (op0)
+ && mode2 != BLKmode
+- && LEGITIMATE_CONSTANT_P (op0)
++ && targetm.legitimate_constant_p (mode2, op0)
+ && !must_force_mem)
+ op0 = force_reg (mode2, op0);
+
+@@ -9189,8 +9226,11 @@
+ && modifier != EXPAND_CONST_ADDRESS
+ && modifier != EXPAND_INITIALIZER)
+ /* If the field is volatile, we always want an aligned
+- access. */
+- || (volatilep && flag_strict_volatile_bitfields > 0)
++ access. Only do this if the access is not already naturally
++ aligned, otherwise "normal" (non-bitfield) volatile fields
++ become non-addressable. */
++ || (volatilep && flag_strict_volatile_bitfields > 0
++ && (bitpos % GET_MODE_ALIGNMENT (mode) != 0))
+ /* If the field isn't aligned enough to fetch as a memref,
+ fetch it as a bit field. */
+ || (mode1 != BLKmode
+--- a/src/gcc/fold-const.c
++++ b/src/gcc/fold-const.c
+@@ -9232,15 +9232,10 @@
+ 0 <= N < M as is common. In general, the precise value of P is unknown.
+ M is chosen as large as possible such that constant N can be determined.
+
+- Returns M and sets *RESIDUE to N.
+-
+- If ALLOW_FUNC_ALIGN is true, do take functions' DECL_ALIGN_UNIT into
+- account. This is not always possible due to PR 35705.
+- */
++ Returns M and sets *RESIDUE to N. */
+
+ static unsigned HOST_WIDE_INT
+-get_pointer_modulus_and_residue (tree expr, unsigned HOST_WIDE_INT *residue,
+- bool allow_func_align)
++get_pointer_modulus_and_residue (tree expr, unsigned HOST_WIDE_INT *residue)
+ {
+ enum tree_code code;
+
+@@ -9270,9 +9265,8 @@
+ }
+ }
+
+- if (DECL_P (expr)
+- && (allow_func_align || TREE_CODE (expr) != FUNCTION_DECL))
+- return DECL_ALIGN_UNIT (expr);
++ if (DECL_P (expr))
++ return get_object_alignment (expr, ~0U) / BITS_PER_UNIT;
+ }
+ else if (code == POINTER_PLUS_EXPR)
+ {
+@@ -9282,8 +9276,7 @@
+
+ op0 = TREE_OPERAND (expr, 0);
+ STRIP_NOPS (op0);
+- modulus = get_pointer_modulus_and_residue (op0, residue,
+- allow_func_align);
++ modulus = get_pointer_modulus_and_residue (op0, residue);
+
+ op1 = TREE_OPERAND (expr, 1);
+ STRIP_NOPS (op1);
+@@ -11163,8 +11156,7 @@
+ unsigned HOST_WIDE_INT modulus, residue;
+ unsigned HOST_WIDE_INT low = TREE_INT_CST_LOW (arg1);
+
+- modulus = get_pointer_modulus_and_residue (arg0, &residue,
+- integer_onep (arg1));
++ modulus = get_pointer_modulus_and_residue (arg0, &residue);
+
+ /* This works because modulus is a power of 2. If this weren't the
+ case, we'd have to replace it by its greatest power-of-2
+--- a/src/gcc/fortran/ChangeLog
++++ b/src/gcc/fortran/ChangeLog
+@@ -1,3 +1,18 @@
++2011-11-25 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/50408
++ * trans-decl.c (gfc_get_module_backend_decl): Also copy
++ ts.u.derived from the gsym if the ts.type is BT_CLASS.
++ (gfc_get_extern_function_decl): Copy also the backend_decl
++ for the symbol's ts.u.{derived,cl} from the gsym.
++ * trans-types.c (gfc_copy_dt_decls_ifequal): Directly
++ return if "from" and "to" are the same.
++
++2011-11-24 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/51218
++ * gfortran.dg/implicit_pure_1.f90: New.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/gcc/fortran/resolve.c
++++ b/src/gcc/fortran/resolve.c
+@@ -3132,10 +3132,10 @@
+ "procedure within a PURE procedure", name, &expr->where);
+ t = FAILURE;
+ }
+- }
+
+- if (!pure_function (expr, &name) && name && gfc_implicit_pure (NULL))
+- gfc_current_ns->proc_name->attr.implicit_pure = 0;
++ if (gfc_implicit_pure (NULL))
++ gfc_current_ns->proc_name->attr.implicit_pure = 0;
++ }
+
+ /* Functions without the RECURSIVE attribution are not allowed to
+ * call themselves. */
+@@ -3195,6 +3195,9 @@
+ else if (gfc_pure (NULL))
+ gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name,
+ &c->loc);
++
++ if (gfc_implicit_pure (NULL))
++ gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ }
+
+
+--- a/src/gcc/fortran/trans-decl.c
++++ b/src/gcc/fortran/trans-decl.c
+@@ -677,7 +677,7 @@
+ }
+ else if (s->backend_decl)
+ {
+- if (sym->ts.type == BT_DERIVED)
++ if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
+ gfc_copy_dt_decls_ifequal (s->ts.u.derived, sym->ts.u.derived,
+ true);
+ else if (sym->ts.type == BT_CHARACTER)
+@@ -1602,6 +1602,11 @@
+ gfc_find_symbol (sym->name, gsym->ns, 0, &s);
+ if (s && s->backend_decl)
+ {
++ if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
++ gfc_copy_dt_decls_ifequal (s->ts.u.derived, sym->ts.u.derived,
++ true);
++ else if (sym->ts.type == BT_CHARACTER)
++ sym->ts.u.cl->backend_decl = s->ts.u.cl->backend_decl;
+ sym->backend_decl = s->backend_decl;
+ return sym->backend_decl;
+ }
+--- a/src/gcc/fortran/trans-types.c
++++ b/src/gcc/fortran/trans-types.c
+@@ -2092,6 +2092,9 @@
+ gfc_component *to_cm;
+ gfc_component *from_cm;
+
++ if (from == to)
++ return 1;
++
+ if (from->backend_decl == NULL
+ || !gfc_compare_derived_types (from, to))
+ return 0;
+--- a/src/gcc/gengtype-lex.c
++++ b/src/gcc/gengtype-lex.c
+@@ -55,7 +55,6 @@
+ typedef unsigned char flex_uint8_t;
+ typedef unsigned short int flex_uint16_t;
+ typedef unsigned int flex_uint32_t;
+-#endif /* ! C99 */
+
+ /* Limits of integral types. */
+ #ifndef INT8_MIN
+@@ -86,6 +85,8 @@
+ #define UINT32_MAX (4294967295U)
+ #endif
+
++#endif /* ! C99 */
++
+ #endif /* ! FLEXINT_H */
+
+ #ifdef __cplusplus
+@@ -142,7 +143,15 @@
+
+ /* Size of default input buffer. */
+ #ifndef YY_BUF_SIZE
++#ifdef __ia64__
++/* On IA-64, the buffer size is 16k, not 8k.
++ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
++ * Ditto for the __ia64__ case accordingly.
++ */
++#define YY_BUF_SIZE 32768
++#else
+ #define YY_BUF_SIZE 16384
++#endif /* __ia64__ */
+ #endif
+
+ /* The state buf must be large enough to hold one state per character in the main buffer.
+@@ -942,7 +951,7 @@
+ #define YY_MORE_ADJ 0
+ #define YY_RESTORE_YY_MORE_OFFSET
+ char *yytext;
+-#line 1 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 1 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ /* -*- indented-text -*- */
+ /* Process source files and output type information.
+ Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
+@@ -964,7 +973,7 @@
+ along with GCC; see the file COPYING3. If not see
+ <http://www.gnu.org/licenses/>. */
+ #define YY_NO_INPUT 1
+-#line 25 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 25 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ #include "bconfig.h"
+ #include "system.h"
+
+@@ -988,7 +997,7 @@
+ }
+
+
+-#line 991 "gengtype-lex.c"
++#line 1000 "gengtype-lex.c"
+
+ #define INITIAL 0
+ #define in_struct 1
+@@ -1070,7 +1079,12 @@
+
+ /* Amount of stuff to slurp up with each read. */
+ #ifndef YY_READ_BUF_SIZE
++#ifdef __ia64__
++/* On IA-64, the buffer size is 16k, not 8k */
++#define YY_READ_BUF_SIZE 16384
++#else
+ #define YY_READ_BUF_SIZE 8192
++#endif /* __ia64__ */
+ #endif
+
+ /* Copy whatever the last rule matched to the standard output. */
+@@ -1089,7 +1103,7 @@
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ { \
+ int c = '*'; \
+- unsigned n; \
++ size_t n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+@@ -1174,7 +1188,7 @@
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+
+-#line 59 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 59 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+
+ /* Do this on entry to yylex(): */
+ *yylval = 0;
+@@ -1185,7 +1199,7 @@
+ }
+
+ /* Things we look for in skipping mode: */
+-#line 1188 "gengtype-lex.c"
++#line 1202 "gengtype-lex.c"
+
+ if ( !(yy_init) )
+ {
+@@ -1271,7 +1285,7 @@
+ (yy_c_buf_p) = yy_cp -= 1;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 70 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 70 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ BEGIN(in_struct);
+ return TYPEDEF;
+@@ -1283,7 +1297,7 @@
+ (yy_c_buf_p) = yy_cp -= 1;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 74 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 74 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ BEGIN(in_struct);
+ return STRUCT;
+@@ -1295,7 +1309,7 @@
+ (yy_c_buf_p) = yy_cp -= 1;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 78 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 78 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ BEGIN(in_struct);
+ return UNION;
+@@ -1307,7 +1321,7 @@
+ (yy_c_buf_p) = yy_cp -= 1;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 82 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 82 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ BEGIN(in_struct);
+ return EXTERN;
+@@ -1319,7 +1333,7 @@
+ (yy_c_buf_p) = yy_cp -= 1;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 86 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 86 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ BEGIN(in_struct);
+ return STATIC;
+@@ -1331,7 +1345,7 @@
+ (yy_c_buf_p) = yy_cp -= 1;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 91 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 91 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ BEGIN(in_struct);
+ return DEFVEC_OP;
+@@ -1343,7 +1357,7 @@
+ (yy_c_buf_p) = yy_cp -= 1;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 95 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 95 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ BEGIN(in_struct);
+ return DEFVEC_I;
+@@ -1355,7 +1369,7 @@
+ (yy_c_buf_p) = yy_cp -= 1;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 99 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 99 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ BEGIN(in_struct);
+ return DEFVEC_ALLOC;
+@@ -1365,19 +1379,19 @@
+
+ case 9:
+ YY_RULE_SETUP
+-#line 107 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 107 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { BEGIN(in_struct_comment); }
+ YY_BREAK
+ case 10:
+ /* rule 10 can match eol */
+ YY_RULE_SETUP
+-#line 109 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 109 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { update_lineno (yytext, yyleng); }
+ YY_BREAK
+ case 11:
+ /* rule 11 can match eol */
+ YY_RULE_SETUP
+-#line 110 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 110 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { lexer_line.line++; }
+ YY_BREAK
+ case 12:
+@@ -1386,7 +1400,7 @@
+ (yy_c_buf_p) = yy_cp = yy_bp + 5;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 112 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 112 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ /* don't care */
+ YY_BREAK
+ case 13:
+@@ -1395,7 +1409,7 @@
+ (yy_c_buf_p) = yy_cp = yy_bp + 3;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 113 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 113 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { return GTY_TOKEN; }
+ YY_BREAK
+ case 14:
+@@ -1404,7 +1418,7 @@
+ (yy_c_buf_p) = yy_cp = yy_bp + 3;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 114 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 114 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { return VEC_TOKEN; }
+ YY_BREAK
+ case 15:
+@@ -1413,7 +1427,7 @@
+ (yy_c_buf_p) = yy_cp = yy_bp + 5;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 115 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 115 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { return UNION; }
+ YY_BREAK
+ case 16:
+@@ -1422,7 +1436,7 @@
+ (yy_c_buf_p) = yy_cp = yy_bp + 6;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 116 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 116 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { return STRUCT; }
+ YY_BREAK
+ case 17:
+@@ -1431,7 +1445,7 @@
+ (yy_c_buf_p) = yy_cp = yy_bp + 4;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 117 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 117 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { return ENUM; }
+ YY_BREAK
+ case 18:
+@@ -1440,7 +1454,7 @@
+ (yy_c_buf_p) = yy_cp = yy_bp + 9;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 118 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 118 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { return PTR_ALIAS; }
+ YY_BREAK
+ case 19:
+@@ -1449,12 +1463,12 @@
+ (yy_c_buf_p) = yy_cp = yy_bp + 10;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 119 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 119 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { return NESTED_PTR; }
+ YY_BREAK
+ case 20:
+ YY_RULE_SETUP
+-#line 120 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 120 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { return NUM; }
+ YY_BREAK
+ case 21:
+@@ -1463,7 +1477,7 @@
+ (yy_c_buf_p) = yy_cp -= 1;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 121 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 121 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
+ return PARAM_IS;
+@@ -1474,11 +1488,11 @@
+ *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+ (yy_c_buf_p) = yy_cp -= 1;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+-#line 127 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 127 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ case 23:
+ /* rule 23 can match eol */
+ YY_RULE_SETUP
+-#line 127 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 127 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ size_t len;
+
+@@ -1496,7 +1510,7 @@
+ (yy_c_buf_p) = yy_cp -= 1;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 139 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 139 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
+ return ID;
+@@ -1505,7 +1519,7 @@
+ case 25:
+ /* rule 25 can match eol */
+ YY_RULE_SETUP
+-#line 144 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 144 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
+ return STRING;
+@@ -1515,7 +1529,7 @@
+ case 26:
+ /* rule 26 can match eol */
+ YY_RULE_SETUP
+-#line 149 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 149 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
+ return ARRAY;
+@@ -1524,7 +1538,7 @@
+ case 27:
+ /* rule 27 can match eol */
+ YY_RULE_SETUP
+-#line 153 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 153 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng);
+ return CHAR;
+@@ -1532,24 +1546,24 @@
+ YY_BREAK
+ case 28:
+ YY_RULE_SETUP
+-#line 158 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 158 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { return ELLIPSIS; }
+ YY_BREAK
+ case 29:
+ YY_RULE_SETUP
+-#line 159 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 159 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { return yytext[0]; }
+ YY_BREAK
+ /* ignore pp-directives */
+ case 30:
+ /* rule 30 can match eol */
+ YY_RULE_SETUP
+-#line 162 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 162 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {lexer_line.line++;}
+ YY_BREAK
+ case 31:
+ YY_RULE_SETUP
+-#line 164 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 164 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ error_at_line (&lexer_line, "unexpected character `%s'", yytext);
+ }
+@@ -1557,30 +1571,30 @@
+
+ case 32:
+ YY_RULE_SETUP
+-#line 169 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 169 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { BEGIN(in_comment); }
+ YY_BREAK
+ case 33:
+ /* rule 33 can match eol */
+ YY_RULE_SETUP
+-#line 170 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 170 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { lexer_line.line++; }
+ YY_BREAK
+ case 34:
+-#line 172 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 172 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ case 35:
+ /* rule 35 can match eol */
+-#line 173 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 173 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ case 36:
+ /* rule 36 can match eol */
+ YY_RULE_SETUP
+-#line 173 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 173 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ /* do nothing */
+ YY_BREAK
+ case 37:
+ /* rule 37 can match eol */
+ YY_RULE_SETUP
+-#line 174 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 174 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { update_lineno (yytext, yyleng); }
+ YY_BREAK
+ case 38:
+@@ -1589,21 +1603,21 @@
+ (yy_c_buf_p) = yy_cp = yy_bp + 1;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 175 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 175 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ /* do nothing */
+ YY_BREAK
+
+ case 39:
+ /* rule 39 can match eol */
+ YY_RULE_SETUP
+-#line 178 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 178 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { lexer_line.line++; }
+ YY_BREAK
+ case 40:
+-#line 180 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 180 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ case 41:
+ YY_RULE_SETUP
+-#line 180 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 180 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ /* do nothing */
+ YY_BREAK
+ case 42:
+@@ -1612,25 +1626,25 @@
+ (yy_c_buf_p) = yy_cp = yy_bp + 1;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+-#line 181 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 181 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ /* do nothing */
+ YY_BREAK
+
+ case 43:
+ YY_RULE_SETUP
+-#line 183 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 183 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { BEGIN(INITIAL); }
+ YY_BREAK
+ case 44:
+ YY_RULE_SETUP
+-#line 184 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 184 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ { BEGIN(in_struct); }
+ YY_BREAK
+ case 45:
+-#line 187 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 187 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ case 46:
+ YY_RULE_SETUP
+-#line 187 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 187 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ {
+ error_at_line (&lexer_line,
+ "unterminated comment or string; unexpected EOF");
+@@ -1639,15 +1653,15 @@
+ case 47:
+ /* rule 47 can match eol */
+ YY_RULE_SETUP
+-#line 192 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 192 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ /* do nothing */
+ YY_BREAK
+ case 48:
+ YY_RULE_SETUP
+-#line 194 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 194 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+ YY_FATAL_ERROR( "flex scanner jammed" );
+ YY_BREAK
+-#line 1650 "gengtype-lex.c"
++#line 1664 "gengtype-lex.c"
+ case YY_STATE_EOF(INITIAL):
+ case YY_STATE_EOF(in_struct):
+ case YY_STATE_EOF(in_struct_comment):
+@@ -2371,8 +2385,8 @@
+
+ /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+- * @param bytes the byte buffer to scan
+- * @param len the number of bytes in the buffer pointed to by @a bytes.
++ * @param yybytes the byte buffer to scan
++ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+@@ -2611,7 +2625,7 @@
+
+ #define YYTABLES_NAME "yytables"
+
+-#line 194 "/d/gcc-4.6.2/gcc-4.6.2/gcc/gengtype-lex.l"
++#line 194 "/home/ams/tmp/linaro/gcc-4.6/gcc-linaro-4.6-2011.12/gcc/gengtype-lex.l"
+
+
+
+--- a/src/gcc/genopinit.c
++++ b/src/gcc/genopinit.c
+@@ -46,10 +46,12 @@
+ used. $A and $B are replaced with the full name of the mode; $a and $b
+ are replaced with the short form of the name, as above.
+
+- If $N is present in the pattern, it means the two modes must be consecutive
+- widths in the same mode class (e.g, QImode and HImode). $I means that
+- only full integer modes should be considered for the next mode, and $F
+- means that only float modes should be considered.
++ If $N is present in the pattern, it means the two modes must be in
++ the same mode class, and $b must be greater than $a (e.g, QImode
++ and HImode).
++
++ $I means that only full integer modes should be considered for the
++ next mode, and $F means that only float modes should be considered.
+ $P means that both full and partial integer modes should be considered.
+ $Q means that only fixed-point modes should be considered.
+
+@@ -74,6 +76,8 @@
+ "set_convert_optab_handler (fractuns_optab, $B, $A, CODE_FOR_$(fractuns$Q$a$I$b2$))",
+ "set_convert_optab_handler (satfract_optab, $B, $A, CODE_FOR_$(satfract$a$Q$b2$))",
+ "set_convert_optab_handler (satfractuns_optab, $B, $A, CODE_FOR_$(satfractuns$I$a$Q$b2$))",
++ "set_convert_optab_handler (vec_load_lanes_optab, $A, $B, CODE_FOR_$(vec_load_lanes$a$b$))",
++ "set_convert_optab_handler (vec_store_lanes_optab, $A, $B, CODE_FOR_$(vec_store_lanes$a$b$))",
+ "set_optab_handler (add_optab, $A, CODE_FOR_$(add$P$a3$))",
+ "set_optab_handler (addv_optab, $A, CODE_FOR_$(add$F$a3$)),\n\
+ set_optab_handler (add_optab, $A, CODE_FOR_$(add$F$a3$))",
+@@ -97,17 +101,17 @@
+ "set_optab_handler (smulv_optab, $A, CODE_FOR_$(mulv$I$a3$))",
+ "set_optab_handler (umul_highpart_optab, $A, CODE_FOR_$(umul$a3_highpart$))",
+ "set_optab_handler (smul_highpart_optab, $A, CODE_FOR_$(smul$a3_highpart$))",
+- "set_optab_handler (smul_widen_optab, $B, CODE_FOR_$(mul$a$b3$)$N)",
+- "set_optab_handler (umul_widen_optab, $B, CODE_FOR_$(umul$a$b3$)$N)",
+- "set_optab_handler (usmul_widen_optab, $B, CODE_FOR_$(usmul$a$b3$)$N)",
+- "set_optab_handler (smadd_widen_optab, $B, CODE_FOR_$(madd$a$b4$)$N)",
+- "set_optab_handler (umadd_widen_optab, $B, CODE_FOR_$(umadd$a$b4$)$N)",
+- "set_optab_handler (ssmadd_widen_optab, $B, CODE_FOR_$(ssmadd$a$b4$)$N)",
+- "set_optab_handler (usmadd_widen_optab, $B, CODE_FOR_$(usmadd$a$b4$)$N)",
+- "set_optab_handler (smsub_widen_optab, $B, CODE_FOR_$(msub$a$b4$)$N)",
+- "set_optab_handler (umsub_widen_optab, $B, CODE_FOR_$(umsub$a$b4$)$N)",
+- "set_optab_handler (ssmsub_widen_optab, $B, CODE_FOR_$(ssmsub$a$b4$)$N)",
+- "set_optab_handler (usmsub_widen_optab, $B, CODE_FOR_$(usmsub$a$b4$)$N)",
++ "set_widening_optab_handler (smul_widen_optab, $B, $A, CODE_FOR_$(mul$a$b3$)$N)",
++ "set_widening_optab_handler (umul_widen_optab, $B, $A, CODE_FOR_$(umul$a$b3$)$N)",
++ "set_widening_optab_handler (usmul_widen_optab, $B, $A, CODE_FOR_$(usmul$a$b3$)$N)",
++ "set_widening_optab_handler (smadd_widen_optab, $B, $A, CODE_FOR_$(madd$a$b4$)$N)",
++ "set_widening_optab_handler (umadd_widen_optab, $B, $A, CODE_FOR_$(umadd$a$b4$)$N)",
++ "set_widening_optab_handler (ssmadd_widen_optab, $B, $A, CODE_FOR_$(ssmadd$a$b4$)$N)",
++ "set_widening_optab_handler (usmadd_widen_optab, $B, $A, CODE_FOR_$(usmadd$a$b4$)$N)",
++ "set_widening_optab_handler (smsub_widen_optab, $B, $A, CODE_FOR_$(msub$a$b4$)$N)",
++ "set_widening_optab_handler (umsub_widen_optab, $B, $A, CODE_FOR_$(umsub$a$b4$)$N)",
++ "set_widening_optab_handler (ssmsub_widen_optab, $B, $A, CODE_FOR_$(ssmsub$a$b4$)$N)",
++ "set_widening_optab_handler (usmsub_widen_optab, $B, $A, CODE_FOR_$(usmsub$a$b4$)$N)",
+ "set_optab_handler (sdiv_optab, $A, CODE_FOR_$(div$a3$))",
+ "set_optab_handler (ssdiv_optab, $A, CODE_FOR_$(ssdiv$Q$a3$))",
+ "set_optab_handler (sdivv_optab, $A, CODE_FOR_$(div$V$I$a3$))",
+@@ -264,6 +268,10 @@
+ "set_optab_handler (vec_widen_umult_lo_optab, $A, CODE_FOR_$(vec_widen_umult_lo_$a$))",
+ "set_optab_handler (vec_widen_smult_hi_optab, $A, CODE_FOR_$(vec_widen_smult_hi_$a$))",
+ "set_optab_handler (vec_widen_smult_lo_optab, $A, CODE_FOR_$(vec_widen_smult_lo_$a$))",
++ "set_optab_handler (vec_widen_ushiftl_hi_optab, $A, CODE_FOR_$(vec_widen_ushiftl_hi_$a$))",
++ "set_optab_handler (vec_widen_ushiftl_lo_optab, $A, CODE_FOR_$(vec_widen_ushiftl_lo_$a$))",
++ "set_optab_handler (vec_widen_sshiftl_hi_optab, $A, CODE_FOR_$(vec_widen_sshiftl_hi_$a$))",
++ "set_optab_handler (vec_widen_sshiftl_lo_optab, $A, CODE_FOR_$(vec_widen_sshiftl_lo_$a$))",
+ "set_optab_handler (vec_unpacks_hi_optab, $A, CODE_FOR_$(vec_unpacks_hi_$a$))",
+ "set_optab_handler (vec_unpacks_lo_optab, $A, CODE_FOR_$(vec_unpacks_lo_$a$))",
+ "set_optab_handler (vec_unpacku_hi_optab, $A, CODE_FOR_$(vec_unpacku_hi_$a$))",
+@@ -302,7 +310,7 @@
+ {
+ int force_float = 0, force_int = 0, force_partial_int = 0;
+ int force_fixed = 0;
+- int force_consec = 0;
++ int force_wider = 0;
+ int matches = 1;
+
+ for (pp = optabs[pindex]; pp[0] != '$' || pp[1] != '('; pp++)
+@@ -320,7 +328,7 @@
+ switch (*++pp)
+ {
+ case 'N':
+- force_consec = 1;
++ force_wider = 1;
+ break;
+ case 'I':
+ force_int = 1;
+@@ -389,7 +397,10 @@
+ || mode_class[i] == MODE_VECTOR_FRACT
+ || mode_class[i] == MODE_VECTOR_UFRACT
+ || mode_class[i] == MODE_VECTOR_ACCUM
+- || mode_class[i] == MODE_VECTOR_UACCUM))
++ || mode_class[i] == MODE_VECTOR_UACCUM)
++ && (! force_wider
++ || *pp == 'a'
++ || m1 < i))
+ break;
+ }
+
+@@ -409,8 +420,7 @@
+ }
+
+ if (matches && pp[0] == '$' && pp[1] == ')'
+- && *np == 0
+- && (! force_consec || (int) GET_MODE_WIDER_MODE(m1) == m2))
++ && *np == 0)
+ break;
+ }
+
+--- a/src/gcc/gimple-low.c
++++ b/src/gcc/gimple-low.c
+@@ -218,6 +218,10 @@
+ tree fndecl, parms, p;
+ unsigned int i, nargs;
+
++ /* Calls to internal functions always match their signature. */
++ if (gimple_call_internal_p (stmt))
++ return true;
++
+ nargs = gimple_call_num_args (stmt);
+
+ /* Get argument types for verification. */
+--- a/src/gcc/gimple-pretty-print.c
++++ b/src/gcc/gimple-pretty-print.c
+@@ -343,6 +343,8 @@
+ case VEC_EXTRACT_ODD_EXPR:
+ case VEC_INTERLEAVE_HIGH_EXPR:
+ case VEC_INTERLEAVE_LOW_EXPR:
++ case VEC_WIDEN_LSHIFT_HI_EXPR:
++ case VEC_WIDEN_LSHIFT_LO_EXPR:
+ for (p = tree_code_name [(int) code]; *p; p++)
+ pp_character (buffer, TOUPPER (*p));
+ pp_string (buffer, " <");
+@@ -596,8 +598,12 @@
+
+ if (flags & TDF_RAW)
+ {
+- dump_gimple_fmt (buffer, spc, flags, "%G <%T, %T",
+- gs, gimple_call_fn (gs), lhs);
++ if (gimple_call_internal_p (gs))
++ dump_gimple_fmt (buffer, spc, flags, "%G <%s, %T", gs,
++ internal_fn_name (gimple_call_internal_fn (gs)), lhs);
++ else
++ dump_gimple_fmt (buffer, spc, flags, "%G <%T, %T",
++ gs, gimple_call_fn (gs), lhs);
+ if (gimple_call_num_args (gs) > 0)
+ {
+ pp_string (buffer, ", ");
+@@ -617,7 +623,10 @@
+
+ pp_space (buffer);
+ }
+- print_call_name (buffer, gimple_call_fn (gs), flags);
++ if (gimple_call_internal_p (gs))
++ pp_string (buffer, internal_fn_name (gimple_call_internal_fn (gs)));
++ else
++ print_call_name (buffer, gimple_call_fn (gs), flags);
+ pp_string (buffer, " (");
+ dump_gimple_call_args (buffer, gs, flags);
+ pp_character (buffer, ')');
+--- a/src/gcc/gimple.c
++++ b/src/gcc/gimple.c
+@@ -276,6 +276,59 @@
+ }
+
+
++/* Helper for gimple_build_call_internal and gimple_build_call_internal_vec.
++ Build the basic components of a GIMPLE_CALL statement to internal
++ function FN with NARGS arguments. */
++
++static inline gimple
++gimple_build_call_internal_1 (enum internal_fn fn, unsigned nargs)
++{
++ gimple s = gimple_build_with_ops (GIMPLE_CALL, ERROR_MARK, nargs + 3);
++ s->gsbase.subcode |= GF_CALL_INTERNAL;
++ gimple_call_set_internal_fn (s, fn);
++ gimple_call_reset_alias_info (s);
++ return s;
++}
++
++
++/* Build a GIMPLE_CALL statement to internal function FN. NARGS is
++ the number of arguments. The ... are the arguments. */
++
++gimple
++gimple_build_call_internal (enum internal_fn fn, unsigned nargs, ...)
++{
++ va_list ap;
++ gimple call;
++ unsigned i;
++
++ call = gimple_build_call_internal_1 (fn, nargs);
++ va_start (ap, nargs);
++ for (i = 0; i < nargs; i++)
++ gimple_call_set_arg (call, i, va_arg (ap, tree));
++ va_end (ap);
++
++ return call;
++}
++
++
++/* Build a GIMPLE_CALL statement to internal function FN with the arguments
++ specified in vector ARGS. */
++
++gimple
++gimple_build_call_internal_vec (enum internal_fn fn, VEC(tree, heap) *args)
++{
++ unsigned i, nargs;
++ gimple call;
++
++ nargs = VEC_length (tree, args);
++ call = gimple_build_call_internal_1 (fn, nargs);
++ for (i = 0; i < nargs; i++)
++ gimple_call_set_arg (call, i, VEC_index (tree, args, i));
++
++ return call;
++}
++
++
+ /* Build a GIMPLE_CALL statement from CALL_EXPR T. Note that T is
+ assumed to be in GIMPLE form already. Minimal checking is done of
+ this fact. */
+@@ -1774,6 +1827,20 @@
+ return (gimple_body (fndecl) || (fn && fn->cfg));
+ }
+
++/* Return true if calls C1 and C2 are known to go to the same function. */
++
++bool
++gimple_call_same_target_p (const_gimple c1, const_gimple c2)
++{
++ if (gimple_call_internal_p (c1))
++ return (gimple_call_internal_p (c2)
++ && gimple_call_internal_fn (c1) == gimple_call_internal_fn (c2));
++ else
++ return (gimple_call_fn (c1) == gimple_call_fn (c2)
++ || (gimple_call_fndecl (c1)
++ && gimple_call_fndecl (c1) == gimple_call_fndecl (c2)));
++}
++
+ /* Detect flags from a GIMPLE_CALL. This is just like
+ call_expr_flags, but for gimple tuples. */
+
+@@ -1786,6 +1853,8 @@
+
+ if (decl)
+ flags = flags_from_decl_or_type (decl);
++ else if (gimple_call_internal_p (stmt))
++ flags = internal_fn_flags (gimple_call_internal_fn (stmt));
+ else
+ {
+ t = TREE_TYPE (gimple_call_fn (stmt));
+@@ -1801,18 +1870,35 @@
+ return flags;
+ }
+
++/* Return the "fn spec" string for call STMT. */
++
++static tree
++gimple_call_fnspec (const_gimple stmt)
++{
++ tree fn, type, attr;
++
++ fn = gimple_call_fn (stmt);
++ if (!fn)
++ return NULL_TREE;
++
++ type = TREE_TYPE (TREE_TYPE (fn));
++ if (!type)
++ return NULL_TREE;
++
++ attr = lookup_attribute ("fn spec", TYPE_ATTRIBUTES (type));
++ if (!attr)
++ return NULL_TREE;
++
++ return TREE_VALUE (TREE_VALUE (attr));
++}
++
+ /* Detects argument flags for argument number ARG on call STMT. */
+
+ int
+ gimple_call_arg_flags (const_gimple stmt, unsigned arg)
+ {
+- tree type = TREE_TYPE (TREE_TYPE (gimple_call_fn (stmt)));
+- tree attr = lookup_attribute ("fn spec", TYPE_ATTRIBUTES (type));
+- if (!attr)
+- return 0;
+-
+- attr = TREE_VALUE (TREE_VALUE (attr));
+- if (1 + arg >= (unsigned) TREE_STRING_LENGTH (attr))
++ tree attr = gimple_call_fnspec (stmt);
++ if (!attr || 1 + arg >= (unsigned) TREE_STRING_LENGTH (attr))
+ return 0;
+
+ switch (TREE_STRING_POINTER (attr)[1 + arg])
+@@ -1850,13 +1936,8 @@
+ if (gimple_call_flags (stmt) & ECF_MALLOC)
+ return ERF_NOALIAS;
+
+- type = TREE_TYPE (TREE_TYPE (gimple_call_fn (stmt)));
+- attr = lookup_attribute ("fn spec", TYPE_ATTRIBUTES (type));
+- if (!attr)
+- return 0;
+-
+- attr = TREE_VALUE (TREE_VALUE (attr));
+- if (TREE_STRING_LENGTH (attr) < 1)
++ attr = gimple_call_fnspec (stmt);
++ if (!attr || TREE_STRING_LENGTH (attr) < 1)
+ return 0;
+
+ switch (TREE_STRING_POINTER (attr)[0])
+@@ -2293,6 +2374,7 @@
+ if (is_gimple_call (s))
+ {
+ unsigned nargs = gimple_call_num_args (s);
++ tree fn;
+
+ if (!(gimple_call_flags (s) & (ECF_CONST | ECF_PURE)))
+ return true;
+@@ -2307,7 +2389,8 @@
+ return true;
+ }
+
+- if (TREE_SIDE_EFFECTS (gimple_call_fn (s)))
++ fn = gimple_call_fn (s);
++ if (fn && TREE_SIDE_EFFECTS (fn))
+ return true;
+
+ for (i = 0; i < nargs; i++)
+@@ -2349,14 +2432,15 @@
+ if (is_gimple_call (s))
+ {
+ unsigned nargs = gimple_call_num_args (s);
++ tree fn;
+
+ if (!(gimple_call_flags (s) & (ECF_CONST | ECF_PURE)))
+ return true;
+
+ /* We cannot use gimple_has_volatile_ops here,
+ because we must ignore a volatile LHS. */
+- if (TREE_SIDE_EFFECTS (gimple_call_fn (s))
+- || TREE_THIS_VOLATILE (gimple_call_fn (s)))
++ fn = gimple_call_fn (s);
++ if (fn && (TREE_SIDE_EFFECTS (fn) || TREE_THIS_VOLATILE (fn)))
+ {
+ gcc_assert (gimple_has_volatile_ops (s));
+ return true;
+@@ -3113,7 +3197,6 @@
+ gimple_call_copy_skip_args (gimple stmt, bitmap args_to_skip)
+ {
+ int i;
+- tree fn = gimple_call_fn (stmt);
+ int nargs = gimple_call_num_args (stmt);
+ VEC(tree, heap) *vargs = VEC_alloc (tree, heap, nargs);
+ gimple new_stmt;
+@@ -3122,7 +3205,11 @@
+ if (!bitmap_bit_p (args_to_skip, i))
+ VEC_quick_push (tree, vargs, gimple_call_arg (stmt, i));
+
+- new_stmt = gimple_build_call_vec (fn, vargs);
++ if (gimple_call_internal_p (stmt))
++ new_stmt = gimple_build_call_internal_vec (gimple_call_internal_fn (stmt),
++ vargs);
++ else
++ new_stmt = gimple_build_call_vec (gimple_call_fn (stmt), vargs);
+ VEC_free (tree, heap, vargs);
+ if (gimple_call_lhs (stmt))
+ gimple_call_set_lhs (new_stmt, gimple_call_lhs (stmt));
+--- a/src/gcc/gimple.h
++++ b/src/gcc/gimple.h
+@@ -30,6 +30,7 @@
+ #include "basic-block.h"
+ #include "tree-ssa-operands.h"
+ #include "tree-ssa-alias.h"
++#include "internal-fn.h"
+
+ struct gimple_seq_node_d;
+ typedef struct gimple_seq_node_d *gimple_seq_node;
+@@ -82,6 +83,8 @@
+ name, a _DECL, a _REF, etc. */
+ };
+
++#define GF_CALL_INTERNAL_FN_SHIFT 8
++
+ /* Specific flags for individual GIMPLE statements. These flags are
+ always stored in gimple_statement_base.subcode and they may only be
+ defined for statement codes that do not use sub-codes.
+@@ -102,6 +105,8 @@
+ GF_CALL_TAILCALL = 1 << 3,
+ GF_CALL_VA_ARG_PACK = 1 << 4,
+ GF_CALL_NOTHROW = 1 << 5,
++ GF_CALL_INTERNAL = 1 << 6,
++ GF_CALL_INTERNAL_FN = 0xff << GF_CALL_INTERNAL_FN_SHIFT,
+ GF_OMP_PARALLEL_COMBINED = 1 << 0,
+
+ /* True on an GIMPLE_OMP_RETURN statement if the return does not require
+@@ -817,6 +822,8 @@
+
+ gimple gimple_build_call_vec (tree, VEC(tree, heap) *);
+ gimple gimple_build_call (tree, unsigned, ...);
++gimple gimple_build_call_internal (enum internal_fn, unsigned, ...);
++gimple gimple_build_call_internal_vec (enum internal_fn, VEC(tree, heap) *);
+ gimple gimple_build_call_from_tree (tree);
+ gimple gimplify_assign (tree, tree, gimple_seq *);
+ gimple gimple_build_cond (enum tree_code, tree, tree, tree, tree);
+@@ -861,6 +868,7 @@
+ void gimple_seq_free (gimple_seq);
+ void gimple_seq_add_seq (gimple_seq *, gimple_seq);
+ gimple_seq gimple_seq_copy (gimple_seq);
++bool gimple_call_same_target_p (const_gimple, const_gimple);
+ int gimple_call_flags (const_gimple);
+ int gimple_call_return_flags (const_gimple);
+ int gimple_call_arg_flags (const_gimple, unsigned);
+@@ -2012,6 +2020,27 @@
+ }
+
+
++/* Return true if call GS calls an internal-only function, as enumerated
++ by internal_fn. */
++
++static inline bool
++gimple_call_internal_p (const_gimple gs)
++{
++ GIMPLE_CHECK (gs, GIMPLE_CALL);
++ return (gs->gsbase.subcode & GF_CALL_INTERNAL) != 0;
++}
++
++
++/* Return the target of internal call GS. */
++
++static inline enum internal_fn
++gimple_call_internal_fn (const_gimple gs)
++{
++ gcc_assert (gimple_call_internal_p (gs));
++ return (enum internal_fn) (gs->gsbase.subcode >> GF_CALL_INTERNAL_FN_SHIFT);
++}
++
++
+ /* Return a pointer to the tree node representing the function called by call
+ statement GS. */
+
+@@ -2029,6 +2058,7 @@
+ gimple_call_set_fn (gimple gs, tree fn)
+ {
+ GIMPLE_CHECK (gs, GIMPLE_CALL);
++ gcc_assert (!gimple_call_internal_p (gs));
+ gimple_set_op (gs, 1, fn);
+ }
+
+@@ -2039,10 +2069,23 @@
+ gimple_call_set_fndecl (gimple gs, tree decl)
+ {
+ GIMPLE_CHECK (gs, GIMPLE_CALL);
++ gcc_assert (!gimple_call_internal_p (gs));
+ gimple_set_op (gs, 1, build_fold_addr_expr_loc (gimple_location (gs), decl));
+ }
+
+
++/* Set internal function FN to be the function called by call statement GS. */
++
++static inline void
++gimple_call_set_internal_fn (gimple gs, enum internal_fn fn)
++{
++ GIMPLE_CHECK (gs, GIMPLE_CALL);
++ gcc_assert (gimple_call_internal_p (gs));
++ gs->gsbase.subcode &= ~GF_CALL_INTERNAL_FN;
++ gs->gsbase.subcode |= (int) fn << GF_CALL_INTERNAL_FN_SHIFT;
++}
++
++
+ /* If a given GIMPLE_CALL's callee is a FUNCTION_DECL, return it.
+ Otherwise return NULL. This function is analogous to
+ get_callee_fndecl in tree land. */
+@@ -2051,7 +2094,7 @@
+ gimple_call_fndecl (const_gimple gs)
+ {
+ tree addr = gimple_call_fn (gs);
+- if (TREE_CODE (addr) == ADDR_EXPR)
++ if (addr && TREE_CODE (addr) == ADDR_EXPR)
+ {
+ tree fndecl = TREE_OPERAND (addr, 0);
+ if (TREE_CODE (fndecl) == MEM_REF)
+@@ -2073,8 +2116,13 @@
+ static inline tree
+ gimple_call_return_type (const_gimple gs)
+ {
+- tree fn = gimple_call_fn (gs);
+- tree type = TREE_TYPE (fn);
++ tree fn, type;
++
++ fn = gimple_call_fn (gs);
++ if (fn == NULL_TREE)
++ return TREE_TYPE (gimple_call_lhs (gs));
++
++ type = TREE_TYPE (fn);
+
+ /* See through the pointer. */
+ type = TREE_TYPE (type);
+--- a/src/gcc/gimplify.c
++++ b/src/gcc/gimplify.c
+@@ -3711,9 +3711,8 @@
+ case ARRAY_TYPE:
+ {
+ struct gimplify_init_ctor_preeval_data preeval_data;
+- HOST_WIDE_INT num_type_elements, num_ctor_elements;
+- HOST_WIDE_INT num_nonzero_elements;
+- bool cleared, valid_const_initializer;
++ HOST_WIDE_INT num_ctor_elements, num_nonzero_elements;
++ bool cleared, complete_p, valid_const_initializer;
+
+ /* Aggregate types must lower constructors to initialization of
+ individual elements. The exception is that a CONSTRUCTOR node
+@@ -3730,7 +3729,7 @@
+ can only do so if it known to be a valid constant initializer. */
+ valid_const_initializer
+ = categorize_ctor_elements (ctor, &num_nonzero_elements,
+- &num_ctor_elements, &cleared);
++ &num_ctor_elements, &complete_p);
+
+ /* If a const aggregate variable is being initialized, then it
+ should never be a lose to promote the variable to be static. */
+@@ -3768,26 +3767,29 @@
+ parts in, then generate code for the non-constant parts. */
+ /* TODO. There's code in cp/typeck.c to do this. */
+
+- num_type_elements = count_type_elements (type, true);
+-
+- /* If count_type_elements could not determine number of type elements
+- for a constant-sized object, assume clearing is needed.
+- Don't do this for variable-sized objects, as store_constructor
+- will ignore the clearing of variable-sized objects. */
+- if (num_type_elements < 0 && int_size_in_bytes (type) >= 0)
++ if (int_size_in_bytes (TREE_TYPE (ctor)) < 0)
++ /* store_constructor will ignore the clearing of variable-sized
++ objects. Initializers for such objects must explicitly set
++ every field that needs to be set. */
++ cleared = false;
++ else if (!complete_p)
++ /* If the constructor isn't complete, clear the whole object
++ beforehand.
++
++ ??? This ought not to be needed. For any element not present
++ in the initializer, we should simply set them to zero. Except
++ we'd need to *find* the elements that are not present, and that
++ requires trickery to avoid quadratic compile-time behavior in
++ large cases or excessive memory use in small cases. */
+ cleared = true;
+- /* If there are "lots" of zeros, then block clear the object first. */
+- else if (num_type_elements - num_nonzero_elements
++ else if (num_ctor_elements - num_nonzero_elements
+ > CLEAR_RATIO (optimize_function_for_speed_p (cfun))
+- && num_nonzero_elements < num_type_elements/4)
+- cleared = true;
+- /* ??? This bit ought not be needed. For any element not present
+- in the initializer, we should simply set them to zero. Except
+- we'd need to *find* the elements that are not present, and that
+- requires trickery to avoid quadratic compile-time behavior in
+- large cases or excessive memory use in small cases. */
+- else if (num_ctor_elements < num_type_elements)
++ && num_nonzero_elements < num_ctor_elements / 4)
++ /* If there are "lots" of zeros, it's more efficient to clear
++ the memory and then set the nonzero elements. */
+ cleared = true;
++ else
++ cleared = false;
+
+ /* If there are "lots" of initialized elements, and all of them
+ are valid address constants, then the entire initializer can
+--- a/src/gcc/hooks.c
++++ b/src/gcc/hooks.c
+@@ -101,6 +101,15 @@
+ return true;
+ }
+
++/* Generic hook that takes (enum machine_mode, unsigned HOST_WIDE_INT)
++ and returns false. */
++bool
++hook_bool_mode_uhwi_false (enum machine_mode mode ATTRIBUTE_UNUSED,
++ unsigned HOST_WIDE_INT value ATTRIBUTE_UNUSED)
++{
++ return false;
++}
++
+ /* Generic hook that takes (FILE *, const char *) and does nothing. */
+ void
+ hook_void_FILEptr_constcharptr (FILE *a ATTRIBUTE_UNUSED, const char *b ATTRIBUTE_UNUSED)
+--- a/src/gcc/hooks.h
++++ b/src/gcc/hooks.h
+@@ -34,6 +34,8 @@
+ extern bool hook_bool_mode_true (enum machine_mode);
+ extern bool hook_bool_mode_const_rtx_false (enum machine_mode, const_rtx);
+ extern bool hook_bool_mode_const_rtx_true (enum machine_mode, const_rtx);
++extern bool hook_bool_mode_uhwi_false (enum machine_mode,
++ unsigned HOST_WIDE_INT);
+ extern bool hook_bool_tree_false (tree);
+ extern bool hook_bool_const_tree_false (const_tree);
+ extern bool hook_bool_tree_true (tree);
+--- a/src/gcc/ifcvt.c
++++ b/src/gcc/ifcvt.c
+@@ -1,5 +1,6 @@
+ /* If-conversion support.
+- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010
++ Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010,
++ 2011
+ Free Software Foundation, Inc.
+
+ This file is part of GCC.
+@@ -304,6 +305,10 @@
+
+ for (insn = start; ; insn = NEXT_INSN (insn))
+ {
++ /* dwarf2out can't cope with conditional prologues. */
++ if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_PROLOGUE_END)
++ return FALSE;
++
+ if (NOTE_P (insn) || DEBUG_INSN_P (insn))
+ goto insn_done;
+
+--- a/src/gcc/internal-fn.c
++++ b/src/gcc/internal-fn.c
+@@ -0,0 +1,147 @@
++/* Internal functions.
++ Copyright (C) 2011 Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 3, 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 COPYING3. If not see
++<http://www.gnu.org/licenses/>. */
++
++#include "config.h"
++#include "system.h"
++#include "coretypes.h"
++#include "gimple.h"
++#include "tree.h"
++#include "expr.h"
++#include "optabs.h"
++#include "recog.h"
++
++/* The names of each internal function, indexed by function number. */
++const char *const internal_fn_name_array[] = {
++#define DEF_INTERNAL_FN(CODE, FLAGS) #CODE,
++#include "internal-fn.def"
++#undef DEF_INTERNAL_FN
++ "<invalid-fn>"
++};
++
++/* The ECF_* flags of each internal function, indexed by function number. */
++const int internal_fn_flags_array[] = {
++#define DEF_INTERNAL_FN(CODE, FLAGS) FLAGS,
++#include "internal-fn.def"
++#undef DEF_INTERNAL_FN
++ 0
++};
++
++/* ARRAY_TYPE is an array of vector modes. Return the associated insn
++ for load-lanes-style optab OPTAB. The insn must exist. */
++
++static enum insn_code
++get_multi_vector_move (tree array_type, convert_optab optab)
++{
++ enum insn_code icode;
++ enum machine_mode imode;
++ enum machine_mode vmode;
++
++ gcc_assert (TREE_CODE (array_type) == ARRAY_TYPE);
++ imode = TYPE_MODE (array_type);
++ vmode = TYPE_MODE (TREE_TYPE (array_type));
++
++ icode = convert_optab_handler (optab, imode, vmode);
++ gcc_assert (icode != CODE_FOR_nothing);
++ return icode;
++}
++
++/* Expand LOAD_LANES call STMT. */
++
++static void
++expand_LOAD_LANES (gimple stmt)
++{
++ tree type, lhs, rhs;
++ rtx target, mem;
++ enum insn_code icode;
++ const struct insn_operand_data *operand;
++
++ lhs = gimple_call_lhs (stmt);
++ rhs = gimple_call_arg (stmt, 0);
++ type = TREE_TYPE (lhs);
++
++ target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
++ mem = expand_normal (rhs);
++
++ gcc_assert (REG_P (target));
++ gcc_assert (MEM_P (mem));
++ PUT_MODE (mem, TYPE_MODE (type));
++
++ icode = get_multi_vector_move (type, vec_load_lanes_optab);
++
++ operand = &insn_data[(int) icode].operand[1];
++ if (operand->predicate && !operand->predicate (mem, operand->mode))
++ mem = replace_equiv_address (mem, force_reg (Pmode, XEXP (mem, 0)));
++
++ emit_insn (GEN_FCN (icode) (target, mem));
++}
++
++/* Expand STORE_LANES call STMT. */
++
++static void
++expand_STORE_LANES (gimple stmt)
++{
++ tree type, lhs, rhs;
++ rtx target, reg;
++ enum insn_code icode;
++ const struct insn_operand_data *operand;
++
++ lhs = gimple_call_lhs (stmt);
++ rhs = gimple_call_arg (stmt, 0);
++ type = TREE_TYPE (rhs);
++
++ target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
++ reg = expand_normal (rhs);
++
++ gcc_assert (MEM_P (target));
++ PUT_MODE (target, TYPE_MODE (type));
++
++ icode = get_multi_vector_move (type, vec_store_lanes_optab);
++
++ operand = &insn_data[(int) icode].operand[0];
++ if (operand->predicate && !operand->predicate (target, operand->mode))
++ target = replace_equiv_address (target,
++ force_reg (Pmode, XEXP (target, 0)));
++
++ operand = &insn_data[(int) icode].operand[1];
++ if (operand->predicate && !operand->predicate (reg, operand->mode))
++ reg = force_reg (TYPE_MODE (type), reg);
++
++ emit_insn (GEN_FCN (icode) (target, reg));
++}
++
++/* Routines to expand each internal function, indexed by function number.
++ Each routine has the prototype:
++
++ expand_<NAME> (gimple stmt)
++
++ where STMT is the statement that performs the call. */
++static void (*const internal_fn_expanders[]) (gimple) = {
++#define DEF_INTERNAL_FN(CODE, FLAGS) expand_##CODE,
++#include "internal-fn.def"
++#undef DEF_INTERNAL_FN
++ 0
++};
++
++/* Expand STMT, which is a call to internal function FN. */
++
++void
++expand_internal_call (gimple stmt)
++{
++ internal_fn_expanders[(int) gimple_call_internal_fn (stmt)] (stmt);
++}
+--- a/src/gcc/internal-fn.def
++++ b/src/gcc/internal-fn.def
+@@ -0,0 +1,42 @@
++/* Internal functions.
++ Copyright (C) 2011 Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 3, 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 COPYING3. If not see
++<http://www.gnu.org/licenses/>. */
++
++/* This file specifies a list of internal "functions". These functions
++ differ from built-in functions in that they have no linkage and cannot
++ be called directly by the user. They represent operations that are only
++ synthesised by GCC itself.
++
++ Internal functions are used instead of tree codes if the operation
++ and its operands are more naturally represented as a GIMPLE_CALL
++ than a GIMPLE_ASSIGN.
++
++ Each entry in this file has the form:
++
++ DEF_INTERNAL_FN (NAME, FLAGS)
++
++ where NAME is the name of the function and FLAGS is a set of
++ ECF_* flags. Each entry must have a corresponding expander
++ of the form:
++
++ void expand_NAME (gimple stmt)
++
++ where STMT is the statement that performs the call. */
++
++DEF_INTERNAL_FN (LOAD_LANES, ECF_CONST | ECF_LEAF)
++DEF_INTERNAL_FN (STORE_LANES, ECF_CONST | ECF_LEAF)
+--- a/src/gcc/internal-fn.h
++++ b/src/gcc/internal-fn.h
+@@ -0,0 +1,52 @@
++/* Internal functions.
++ Copyright (C) 2011 Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 3, 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 COPYING3. If not see
++<http://www.gnu.org/licenses/>. */
++
++#ifndef GCC_INTERNAL_FN_H
++#define GCC_INTERNAL_FN_H
++
++enum internal_fn {
++#define DEF_INTERNAL_FN(CODE, FLAGS) IFN_##CODE,
++#include "internal-fn.def"
++#undef DEF_INTERNAL_FN
++ IFN_LAST
++};
++
++extern const char *const internal_fn_name_array[];
++extern const int internal_fn_flags_array[];
++
++/* Return the name of internal function FN. The name is only meaningful
++ for dumps; it has no linkage. */
++
++static inline const char *
++internal_fn_name (enum internal_fn fn)
++{
++ return internal_fn_name_array[(int) fn];
++}
++
++/* Return the ECF_* flags for function FN. */
++
++static inline int
++internal_fn_flags (enum internal_fn fn)
++{
++ return internal_fn_flags_array[(int) fn];
++}
++
++extern void expand_internal_call (gimple);
++
++#endif
+--- a/src/gcc/ipa-prop.c
++++ b/src/gcc/ipa-prop.c
+@@ -1418,6 +1418,8 @@
+ {
+ tree target = gimple_call_fn (call);
+
++ if (!target)
++ return;
+ if (TREE_CODE (target) == SSA_NAME)
+ ipa_analyze_indirect_call_uses (node, info, parms_info, call, target);
+ else if (TREE_CODE (target) == OBJ_TYPE_REF)
+--- a/src/gcc/loop-doloop.c
++++ b/src/gcc/loop-doloop.c
+@@ -78,6 +78,8 @@
+ rtx inc_src;
+ rtx condition;
+ rtx pattern;
++ rtx cc_reg = NULL_RTX;
++ rtx reg_orig = NULL_RTX;
+
+ /* The canonical doloop pattern we expect has one of the following
+ forms:
+@@ -96,7 +98,16 @@
+ 2) (set (reg) (plus (reg) (const_int -1))
+ (set (pc) (if_then_else (reg != 0)
+ (label_ref (label))
+- (pc))). */
++ (pc))).
++
++ Some targets (ARM) do the comparison before the branch, as in the
++ following form:
++
++ 3) (parallel [(set (cc) (compare ((plus (reg) (const_int -1), 0)))
++ (set (reg) (plus (reg) (const_int -1)))])
++ (set (pc) (if_then_else (cc == NE)
++ (label_ref (label))
++ (pc))) */
+
+ pattern = PATTERN (doloop_pat);
+
+@@ -104,19 +115,47 @@
+ {
+ rtx cond;
+ rtx prev_insn = prev_nondebug_insn (doloop_pat);
++ rtx cmp_arg1, cmp_arg2;
++ rtx cmp_orig;
+
+- /* We expect the decrement to immediately precede the branch. */
++ /* In case the pattern is not PARALLEL we expect two forms
++ of doloop which are cases 2) and 3) above: in case 2) the
++ decrement immediately precedes the branch, while in case 3)
++ the compare and decrement instructions immediately precede
++ the branch. */
+
+ if (prev_insn == NULL_RTX || !INSN_P (prev_insn))
+ return 0;
+
+ cmp = pattern;
+- inc = PATTERN (PREV_INSN (doloop_pat));
++ if (GET_CODE (PATTERN (prev_insn)) == PARALLEL)
++ {
++ /* The third case: the compare and decrement instructions
++ immediately precede the branch. */
++ cmp_orig = XVECEXP (PATTERN (prev_insn), 0, 0);
++ if (GET_CODE (cmp_orig) != SET)
++ return 0;
++ if (GET_CODE (SET_SRC (cmp_orig)) != COMPARE)
++ return 0;
++ cmp_arg1 = XEXP (SET_SRC (cmp_orig), 0);
++ cmp_arg2 = XEXP (SET_SRC (cmp_orig), 1);
++ if (cmp_arg2 != const0_rtx
++ || GET_CODE (cmp_arg1) != PLUS)
++ return 0;
++ reg_orig = XEXP (cmp_arg1, 0);
++ if (XEXP (cmp_arg1, 1) != GEN_INT (-1)
++ || !REG_P (reg_orig))
++ return 0;
++ cc_reg = SET_DEST (cmp_orig);
++
++ inc = XVECEXP (PATTERN (prev_insn), 0, 1);
++ }
++ else
++ inc = PATTERN (prev_insn);
+ /* We expect the condition to be of the form (reg != 0) */
+ cond = XEXP (SET_SRC (cmp), 0);
+ if (GET_CODE (cond) != NE || XEXP (cond, 1) != const0_rtx)
+ return 0;
+-
+ }
+ else
+ {
+@@ -162,11 +201,15 @@
+ return 0;
+
+ if ((XEXP (condition, 0) == reg)
++ /* For the third case: */
++ || ((cc_reg != NULL_RTX)
++ && (XEXP (condition, 0) == cc_reg)
++ && (reg_orig == reg))
+ || (GET_CODE (XEXP (condition, 0)) == PLUS
+- && XEXP (XEXP (condition, 0), 0) == reg))
++ && XEXP (XEXP (condition, 0), 0) == reg))
+ {
+ if (GET_CODE (pattern) != PARALLEL)
+- /* The second form we expect:
++ /* For the second form we expect:
+
+ (set (reg) (plus (reg) (const_int -1))
+ (set (pc) (if_then_else (reg != 0)
+@@ -181,7 +224,24 @@
+ (set (reg) (plus (reg) (const_int -1)))
+ (additional clobbers and uses)])
+
+- So we return that form instead.
++ For the third form we expect:
++
++ (parallel [(set (cc) (compare ((plus (reg) (const_int -1)), 0))
++ (set (reg) (plus (reg) (const_int -1)))])
++ (set (pc) (if_then_else (cc == NE)
++ (label_ref (label))
++ (pc)))
++
++ which is equivalent to the following:
++
++ (parallel [(set (cc) (compare (reg, 1))
++ (set (reg) (plus (reg) (const_int -1)))
++ (set (pc) (if_then_else (NE == cc)
++ (label_ref (label))
++ (pc))))])
++
++ So we return the second form instead for the two cases.
++
+ */
+ condition = gen_rtx_fmt_ee (NE, VOIDmode, inc_src, const1_rtx);
+
+--- a/src/gcc/modulo-sched.c
++++ b/src/gcc/modulo-sched.c
+@@ -116,14 +116,18 @@
+
+ /* The number of different iterations the nodes in ps span, assuming
+ the stage boundaries are placed efficiently. */
+-#define PS_STAGE_COUNT(ps) ((PS_MAX_CYCLE (ps) - PS_MIN_CYCLE (ps) \
+- + 1 + (ps)->ii - 1) / (ps)->ii)
++#define CALC_STAGE_COUNT(max_cycle,min_cycle,ii) ((max_cycle - min_cycle \
++ + 1 + ii - 1) / ii)
++/* The stage count of ps. */
++#define PS_STAGE_COUNT(ps) (((partial_schedule_ptr)(ps))->stage_count)
+
+ /* A single instruction in the partial schedule. */
+ struct ps_insn
+ {
+- /* The corresponding DDG_NODE. */
+- ddg_node_ptr node;
++ /* Identifies the instruction to be scheduled. Values smaller than
++ the ddg's num_nodes refer directly to ddg nodes. A value of
++ X - num_nodes refers to register move X. */
++ int id;
+
+ /* The (absolute) cycle in which the PS instruction is scheduled.
+ Same as SCHED_TIME (node). */
+@@ -133,10 +137,35 @@
+ ps_insn_ptr next_in_row,
+ prev_in_row;
+
+- /* The number of nodes in the same row that come after this node. */
+- int row_rest_count;
+ };
+
++/* Information about a register move that has been added to a partial
++ schedule. */
++struct ps_reg_move_info
++{
++ /* The source of the move is defined by the ps_insn with id DEF.
++ The destination is used by the ps_insns with the ids in USES. */
++ int def;
++ sbitmap uses;
++
++ /* The original form of USES' instructions used OLD_REG, but they
++ should now use NEW_REG. */
++ rtx old_reg;
++ rtx new_reg;
++
++ /* The number of consecutive stages that the move occupies. */
++ int num_consecutive_stages;
++
++ /* An instruction that sets NEW_REG to the correct value. The first
++ move associated with DEF will have an rhs of OLD_REG; later moves
++ use the result of the previous move. */
++ rtx insn;
++};
++
++typedef struct ps_reg_move_info ps_reg_move_info;
++DEF_VEC_O (ps_reg_move_info);
++DEF_VEC_ALLOC_O (ps_reg_move_info, heap);
++
+ /* Holds the partial schedule as an array of II rows. Each entry of the
+ array points to a linked list of PS_INSNs, which represents the
+ instructions that are scheduled for that row. */
+@@ -148,6 +177,16 @@
+ /* rows[i] points to linked list of insns scheduled in row i (0<=i<ii). */
+ ps_insn_ptr *rows;
+
++ /* All the moves added for this partial schedule. Index X has
++ a ps_insn id of X + g->num_nodes. */
++ VEC (ps_reg_move_info, heap) *reg_moves;
++
++ /* rows_length[i] holds the number of instructions in the row.
++ It is used only (as an optimization) to back off quickly from
++ trying to schedule a node in a full row; that is, to avoid running
++ through futile DFA state transitions. */
++ int *rows_length;
++
+ /* The earliest absolute cycle of an insn in the partial schedule. */
+ int min_cycle;
+
+@@ -155,29 +194,18 @@
+ int max_cycle;
+
+ ddg_ptr g; /* The DDG of the insns in the partial schedule. */
+-};
+
+-/* We use this to record all the register replacements we do in
+- the kernel so we can undo SMS if it is not profitable. */
+-struct undo_replace_buff_elem
+-{
+- rtx insn;
+- rtx orig_reg;
+- rtx new_reg;
+- struct undo_replace_buff_elem *next;
++ int stage_count; /* The stage count of the partial schedule. */
+ };
+
+
+-
+ static partial_schedule_ptr create_partial_schedule (int ii, ddg_ptr, int history);
+ static void free_partial_schedule (partial_schedule_ptr);
+ static void reset_partial_schedule (partial_schedule_ptr, int new_ii);
+ void print_partial_schedule (partial_schedule_ptr, FILE *);
+ static void verify_partial_schedule (partial_schedule_ptr, sbitmap);
+ static ps_insn_ptr ps_add_node_check_conflicts (partial_schedule_ptr,
+- ddg_node_ptr node, int cycle,
+- sbitmap must_precede,
+- sbitmap must_follow);
++ int, int, sbitmap, sbitmap);
+ static void rotate_partial_schedule (partial_schedule_ptr, int);
+ void set_row_column_for_ps (partial_schedule_ptr);
+ static void ps_insert_empty_row (partial_schedule_ptr, int, sbitmap);
+@@ -193,34 +221,27 @@
+ static void permute_partial_schedule (partial_schedule_ptr, rtx);
+ static void generate_prolog_epilog (partial_schedule_ptr, struct loop *,
+ rtx, rtx);
+-static void duplicate_insns_of_cycles (partial_schedule_ptr,
+- int, int, int, rtx);
+-
+-#define SCHED_ASAP(x) (((node_sched_params_ptr)(x)->aux.info)->asap)
+-#define SCHED_TIME(x) (((node_sched_params_ptr)(x)->aux.info)->time)
+-#define SCHED_FIRST_REG_MOVE(x) \
+- (((node_sched_params_ptr)(x)->aux.info)->first_reg_move)
+-#define SCHED_NREG_MOVES(x) \
+- (((node_sched_params_ptr)(x)->aux.info)->nreg_moves)
+-#define SCHED_ROW(x) (((node_sched_params_ptr)(x)->aux.info)->row)
+-#define SCHED_STAGE(x) (((node_sched_params_ptr)(x)->aux.info)->stage)
+-#define SCHED_COLUMN(x) (((node_sched_params_ptr)(x)->aux.info)->column)
++static int calculate_stage_count (partial_schedule_ptr, int);
++static void calculate_must_precede_follow (ddg_node_ptr, int, int,
++ int, int, sbitmap, sbitmap, sbitmap);
++static int get_sched_window (partial_schedule_ptr, ddg_node_ptr,
++ sbitmap, int, int *, int *, int *);
++static bool try_scheduling_node_in_cycle (partial_schedule_ptr, int, int,
++ sbitmap, int *, sbitmap, sbitmap);
++static void remove_node_from_ps (partial_schedule_ptr, ps_insn_ptr);
++
++#define NODE_ASAP(node) ((node)->aux.count)
++
++#define SCHED_PARAMS(x) VEC_index (node_sched_params, node_sched_param_vec, x)
++#define SCHED_TIME(x) (SCHED_PARAMS (x)->time)
++#define SCHED_ROW(x) (SCHED_PARAMS (x)->row)
++#define SCHED_STAGE(x) (SCHED_PARAMS (x)->stage)
++#define SCHED_COLUMN(x) (SCHED_PARAMS (x)->column)
+
+ /* The scheduling parameters held for each node. */
+ typedef struct node_sched_params
+ {
+- int asap; /* A lower-bound on the absolute scheduling cycle. */
+- int time; /* The absolute scheduling cycle (time >= asap). */
+-
+- /* The following field (first_reg_move) is a pointer to the first
+- register-move instruction added to handle the modulo-variable-expansion
+- of the register defined by this node. This register-move copies the
+- original register defined by the node. */
+- rtx first_reg_move;
+-
+- /* The number of register-move instructions added, immediately preceding
+- first_reg_move. */
+- int nreg_moves;
++ int time; /* The absolute scheduling cycle. */
+
+ int row; /* Holds time % ii. */
+ int stage; /* Holds time / ii. */
+@@ -230,6 +251,9 @@
+ int column;
+ } *node_sched_params_ptr;
+
++typedef struct node_sched_params node_sched_params;
++DEF_VEC_O (node_sched_params);
++DEF_VEC_ALLOC_O (node_sched_params, heap);
+
+ /* The following three functions are copied from the current scheduler
+ code in order to use sched_analyze() for computing the dependencies.
+@@ -279,6 +303,49 @@
+ 0
+ };
+
++/* Partial schedule instruction ID in PS is a register move. Return
++ information about it. */
++static struct ps_reg_move_info *
++ps_reg_move (partial_schedule_ptr ps, int id)
++{
++ gcc_checking_assert (id >= ps->g->num_nodes);
++ return VEC_index (ps_reg_move_info, ps->reg_moves, id - ps->g->num_nodes);
++}
++
++/* Return the rtl instruction that is being scheduled by partial schedule
++ instruction ID, which belongs to schedule PS. */
++static rtx
++ps_rtl_insn (partial_schedule_ptr ps, int id)
++{
++ if (id < ps->g->num_nodes)
++ return ps->g->nodes[id].insn;
++ else
++ return ps_reg_move (ps, id)->insn;
++}
++
++/* Partial schedule instruction ID, which belongs to PS, occured in
++ the original (unscheduled) loop. Return the first instruction
++ in the loop that was associated with ps_rtl_insn (PS, ID).
++ If the instruction had some notes before it, this is the first
++ of those notes. */
++static rtx
++ps_first_note (partial_schedule_ptr ps, int id)
++{
++ gcc_assert (id < ps->g->num_nodes);
++ return ps->g->nodes[id].first_note;
++}
++
++/* Return the number of consecutive stages that are occupied by
++ partial schedule instruction ID in PS. */
++static int
++ps_num_consecutive_stages (partial_schedule_ptr ps, int id)
++{
++ if (id < ps->g->num_nodes)
++ return 1;
++ else
++ return ps_reg_move (ps, id)->num_consecutive_stages;
++}
++
+ /* Given HEAD and TAIL which are the first and last insns in a loop;
+ return the register which controls the loop. Return zero if it has
+ more than one occurrence in the loop besides the control part or the
+@@ -310,10 +377,10 @@
+ either a single (parallel) branch-on-count or a (non-parallel)
+ branch immediately preceded by a single (decrement) insn. */
+ first_insn_not_to_check = (GET_CODE (PATTERN (tail)) == PARALLEL ? tail
+- : PREV_INSN (tail));
++ : prev_nondebug_insn (tail));
+
+ for (insn = head; insn != first_insn_not_to_check; insn = NEXT_INSN (insn))
+- if (reg_mentioned_p (reg, insn))
++ if (reg_mentioned_p (reg, insn) && !DEBUG_INSN_P (insn))
+ {
+ if (dump_file)
+ {
+@@ -379,35 +446,59 @@
+ }
+
+
+-/* Points to the array that contains the sched data for each node. */
+-static node_sched_params_ptr node_sched_params;
++/* A vector that contains the sched data for each ps_insn. */
++static VEC (node_sched_params, heap) *node_sched_param_vec;
+
+-/* Allocate sched_params for each node and initialize it. Assumes that
+- the aux field of each node contain the asap bound (computed earlier),
+- and copies it into the sched_params field. */
++/* Allocate sched_params for each node and initialize it. */
+ static void
+ set_node_sched_params (ddg_ptr g)
+ {
+- int i;
++ VEC_truncate (node_sched_params, node_sched_param_vec, 0);
++ VEC_safe_grow_cleared (node_sched_params, heap,
++ node_sched_param_vec, g->num_nodes);
++}
+
+- /* Allocate for each node in the DDG a place to hold the "sched_data". */
+- /* Initialize ASAP/ALAP/HIGHT to zero. */
+- node_sched_params = (node_sched_params_ptr)
+- xcalloc (g->num_nodes,
+- sizeof (struct node_sched_params));
++/* Make sure that node_sched_param_vec has an entry for every move in PS. */
++static void
++extend_node_sched_params (partial_schedule_ptr ps)
++{
++ VEC_safe_grow_cleared (node_sched_params, heap, node_sched_param_vec,
++ ps->g->num_nodes + VEC_length (ps_reg_move_info,
++ ps->reg_moves));
++}
+
+- /* Set the pointer of the general data of the node to point to the
+- appropriate sched_params structure. */
+- for (i = 0; i < g->num_nodes; i++)
++/* Update the sched_params (time, row and stage) for node U using the II,
++ the CYCLE of U and MIN_CYCLE.
++ We're not simply taking the following
++ SCHED_STAGE (u) = CALC_STAGE_COUNT (SCHED_TIME (u), min_cycle, ii);
++ because the stages may not be aligned on cycle 0. */
++static void
++update_node_sched_params (int u, int ii, int cycle, int min_cycle)
++{
++ int sc_until_cycle_zero;
++ int stage;
++
++ SCHED_TIME (u) = cycle;
++ SCHED_ROW (u) = SMODULO (cycle, ii);
++
++ /* The calculation of stage count is done adding the number
++ of stages before cycle zero and after cycle zero. */
++ sc_until_cycle_zero = CALC_STAGE_COUNT (-1, min_cycle, ii);
++
++ if (SCHED_TIME (u) < 0)
++ {
++ stage = CALC_STAGE_COUNT (-1, SCHED_TIME (u), ii);
++ SCHED_STAGE (u) = sc_until_cycle_zero - stage;
++ }
++ else
+ {
+- /* Watch out for aliasing problems? */
+- node_sched_params[i].asap = g->nodes[i].aux.count;
+- g->nodes[i].aux.info = &node_sched_params[i];
++ stage = CALC_STAGE_COUNT (SCHED_TIME (u), 0, ii);
++ SCHED_STAGE (u) = sc_until_cycle_zero + stage - 1;
+ }
+ }
+
+ static void
+-print_node_sched_params (FILE *file, int num_nodes, ddg_ptr g)
++print_node_sched_params (FILE *file, int num_nodes, partial_schedule_ptr ps)
+ {
+ int i;
+
+@@ -415,22 +506,170 @@
+ return;
+ for (i = 0; i < num_nodes; i++)
+ {
+- node_sched_params_ptr nsp = &node_sched_params[i];
+- rtx reg_move = nsp->first_reg_move;
+- int j;
++ node_sched_params_ptr nsp = SCHED_PARAMS (i);
+
+ fprintf (file, "Node = %d; INSN = %d\n", i,
+- (INSN_UID (g->nodes[i].insn)));
+- fprintf (file, " asap = %d:\n", nsp->asap);
++ INSN_UID (ps_rtl_insn (ps, i)));
++ fprintf (file, " asap = %d:\n", NODE_ASAP (&ps->g->nodes[i]));
+ fprintf (file, " time = %d:\n", nsp->time);
+- fprintf (file, " nreg_moves = %d:\n", nsp->nreg_moves);
+- for (j = 0; j < nsp->nreg_moves; j++)
++ fprintf (file, " stage = %d:\n", nsp->stage);
++ }
++}
++
++/* Set SCHED_COLUMN for each instruction in row ROW of PS. */
++static void
++set_columns_for_row (partial_schedule_ptr ps, int row)
++{
++ ps_insn_ptr cur_insn;
++ int column;
++
++ column = 0;
++ for (cur_insn = ps->rows[row]; cur_insn; cur_insn = cur_insn->next_in_row)
++ SCHED_COLUMN (cur_insn->id) = column++;
++}
++
++/* Set SCHED_COLUMN for each instruction in PS. */
++static void
++set_columns_for_ps (partial_schedule_ptr ps)
++{
++ int row;
++
++ for (row = 0; row < ps->ii; row++)
++ set_columns_for_row (ps, row);
++}
++
++/* Try to schedule the move with ps_insn identifier I_REG_MOVE in PS.
++ Its single predecessor has already been scheduled, as has its
++ ddg node successors. (The move may have also another move as its
++ successor, in which case that successor will be scheduled later.)
++
++ The move is part of a chain that satisfies register dependencies
++ between a producing ddg node and various consuming ddg nodes.
++ If some of these dependencies have a distance of 1 (meaning that
++ the use is upward-exposoed) then DISTANCE1_USES is nonnull and
++ contains the set of uses with distance-1 dependencies.
++ DISTANCE1_USES is null otherwise.
++
++ MUST_FOLLOW is a scratch bitmap that is big enough to hold
++ all current ps_insn ids.
++
++ Return true on success. */
++static bool
++schedule_reg_move (partial_schedule_ptr ps, int i_reg_move,
++ sbitmap distance1_uses, sbitmap must_follow)
++{
++ unsigned int u;
++ int this_time, this_distance, this_start, this_end, this_latency;
++ int start, end, c, ii;
++ sbitmap_iterator sbi;
++ ps_reg_move_info *move;
++ rtx this_insn;
++ ps_insn_ptr psi;
++
++ move = ps_reg_move (ps, i_reg_move);
++ ii = ps->ii;
++ if (dump_file)
++ {
++ fprintf (dump_file, "Scheduling register move INSN %d; ii = %d"
++ ", min cycle = %d\n\n", INSN_UID (move->insn), ii,
++ PS_MIN_CYCLE (ps));
++ print_rtl_single (dump_file, move->insn);
++ fprintf (dump_file, "\n%11s %11s %5s\n", "start", "end", "time");
++ fprintf (dump_file, "=========== =========== =====\n");
++ }
++
++ start = INT_MIN;
++ end = INT_MAX;
++
++ /* For dependencies of distance 1 between a producer ddg node A
++ and consumer ddg node B, we have a chain of dependencies:
++
++ A --(T,L1,1)--> M1 --(T,L2,0)--> M2 ... --(T,Ln,0)--> B
++
++ where Mi is the ith move. For dependencies of distance 0 between
++ a producer ddg node A and consumer ddg node C, we have a chain of
++ dependencies:
++
++ A --(T,L1',0)--> M1' --(T,L2',0)--> M2' ... --(T,Ln',0)--> C
++
++ where Mi' occupies the same position as Mi but occurs a stage later.
++ We can only schedule each move once, so if we have both types of
++ chain, we model the second as:
++
++ A --(T,L1',1)--> M1 --(T,L2',0)--> M2 ... --(T,Ln',-1)--> C
++
++ First handle the dependencies between the previously-scheduled
++ predecessor and the move. */
++ this_insn = ps_rtl_insn (ps, move->def);
++ this_latency = insn_latency (this_insn, move->insn);
++ this_distance = distance1_uses && move->def < ps->g->num_nodes ? 1 : 0;
++ this_time = SCHED_TIME (move->def) - this_distance * ii;
++ this_start = this_time + this_latency;
++ this_end = this_time + ii;
++ if (dump_file)
++ fprintf (dump_file, "%11d %11d %5d %d --(T,%d,%d)--> %d\n",
++ this_start, this_end, SCHED_TIME (move->def),
++ INSN_UID (this_insn), this_latency, this_distance,
++ INSN_UID (move->insn));
++
++ if (start < this_start)
++ start = this_start;
++ if (end > this_end)
++ end = this_end;
++
++ /* Handle the dependencies between the move and previously-scheduled
++ successors. */
++ EXECUTE_IF_SET_IN_SBITMAP (move->uses, 0, u, sbi)
++ {
++ this_insn = ps_rtl_insn (ps, u);
++ this_latency = insn_latency (move->insn, this_insn);
++ if (distance1_uses && !TEST_BIT (distance1_uses, u))
++ this_distance = -1;
++ else
++ this_distance = 0;
++ this_time = SCHED_TIME (u) + this_distance * ii;
++ this_start = this_time - ii;
++ this_end = this_time - this_latency;
++ if (dump_file)
++ fprintf (dump_file, "%11d %11d %5d %d --(T,%d,%d)--> %d\n",
++ this_start, this_end, SCHED_TIME (u), INSN_UID (move->insn),
++ this_latency, this_distance, INSN_UID (this_insn));
++
++ if (start < this_start)
++ start = this_start;
++ if (end > this_end)
++ end = this_end;
++ }
++
++ if (dump_file)
++ {
++ fprintf (dump_file, "----------- ----------- -----\n");
++ fprintf (dump_file, "%11d %11d %5s %s\n", start, end, "", "(max, min)");
++ }
++
++ sbitmap_zero (must_follow);
++ SET_BIT (must_follow, move->def);
++
++ start = MAX (start, end - (ii - 1));
++ for (c = end; c >= start; c--)
++ {
++ psi = ps_add_node_check_conflicts (ps, i_reg_move, c,
++ move->uses, must_follow);
++ if (psi)
+ {
+- fprintf (file, " reg_move = ");
+- print_rtl_single (file, reg_move);
+- reg_move = PREV_INSN (reg_move);
++ update_node_sched_params (i_reg_move, ii, c, PS_MIN_CYCLE (ps));
++ if (dump_file)
++ fprintf (dump_file, "\nScheduled register move INSN %d at"
++ " time %d, row %d\n\n", INSN_UID (move->insn), c,
++ SCHED_ROW (i_reg_move));
++ return true;
+ }
+ }
++
++ if (dump_file)
++ fprintf (dump_file, "\nNo available slot\n\n");
++
++ return false;
+ }
+
+ /*
+@@ -444,175 +683,201 @@
+ nreg_moves = ----------------------------------- + 1 - { dependence.
+ ii { 1 if not.
+ */
+-static struct undo_replace_buff_elem *
+-generate_reg_moves (partial_schedule_ptr ps, bool rescan)
++static bool
++schedule_reg_moves (partial_schedule_ptr ps)
+ {
+ ddg_ptr g = ps->g;
+ int ii = ps->ii;
+ int i;
+- struct undo_replace_buff_elem *reg_move_replaces = NULL;
+
+ for (i = 0; i < g->num_nodes; i++)
+ {
+ ddg_node_ptr u = &g->nodes[i];
+ ddg_edge_ptr e;
+ int nreg_moves = 0, i_reg_move;
+- sbitmap *uses_of_defs;
+- rtx last_reg_move;
+ rtx prev_reg, old_reg;
+-
++ int first_move;
++ int distances[2];
++ sbitmap must_follow;
++ sbitmap distance1_uses;
++ rtx set = single_set (u->insn);
++
++ /* Skip instructions that do not set a register. */
++ if ((set && !REG_P (SET_DEST (set))))
++ continue;
++
+ /* Compute the number of reg_moves needed for u, by looking at life
+ ranges started at u (excluding self-loops). */
++ distances[0] = distances[1] = false;
+ for (e = u->out; e; e = e->next_out)
+ if (e->type == TRUE_DEP && e->dest != e->src)
+ {
+- int nreg_moves4e = (SCHED_TIME (e->dest) - SCHED_TIME (e->src)) / ii;
++ int nreg_moves4e = (SCHED_TIME (e->dest->cuid)
++ - SCHED_TIME (e->src->cuid)) / ii;
+
+ if (e->distance == 1)
+- nreg_moves4e = (SCHED_TIME (e->dest) - SCHED_TIME (e->src) + ii) / ii;
++ nreg_moves4e = (SCHED_TIME (e->dest->cuid)
++ - SCHED_TIME (e->src->cuid) + ii) / ii;
+
+ /* If dest precedes src in the schedule of the kernel, then dest
+ will read before src writes and we can save one reg_copy. */
+- if (SCHED_ROW (e->dest) == SCHED_ROW (e->src)
+- && SCHED_COLUMN (e->dest) < SCHED_COLUMN (e->src))
++ if (SCHED_ROW (e->dest->cuid) == SCHED_ROW (e->src->cuid)
++ && SCHED_COLUMN (e->dest->cuid) < SCHED_COLUMN (e->src->cuid))
+ nreg_moves4e--;
+
++ if (nreg_moves4e >= 1)
++ {
++ /* !single_set instructions are not supported yet and
++ thus we do not except to encounter them in the loop
++ except from the doloop part. For the latter case
++ we assume no regmoves are generated as the doloop
++ instructions are tied to the branch with an edge. */
++ gcc_assert (set);
++ /* If the instruction contains auto-inc register then
++ validate that the regmov is being generated for the
++ target regsiter rather then the inc'ed register. */
++ gcc_assert (!autoinc_var_is_used_p (u->insn, e->dest->insn));
++ }
++
++ if (nreg_moves4e)
++ {
++ gcc_assert (e->distance < 2);
++ distances[e->distance] = true;
++ }
+ nreg_moves = MAX (nreg_moves, nreg_moves4e);
+ }
+
+ if (nreg_moves == 0)
+ continue;
+
++ /* Create NREG_MOVES register moves. */
++ first_move = VEC_length (ps_reg_move_info, ps->reg_moves);
++ VEC_safe_grow_cleared (ps_reg_move_info, heap, ps->reg_moves,
++ first_move + nreg_moves);
++ extend_node_sched_params (ps);
++
++ /* Record the moves associated with this node. */
++ first_move += ps->g->num_nodes;
++
++ /* Generate each move. */
++ old_reg = prev_reg = SET_DEST (single_set (u->insn));
++ for (i_reg_move = 0; i_reg_move < nreg_moves; i_reg_move++)
++ {
++ ps_reg_move_info *move = ps_reg_move (ps, first_move + i_reg_move);
++
++ move->def = i_reg_move > 0 ? first_move + i_reg_move - 1 : i;
++ move->uses = sbitmap_alloc (first_move + nreg_moves);
++ move->old_reg = old_reg;
++ move->new_reg = gen_reg_rtx (GET_MODE (prev_reg));
++ move->num_consecutive_stages = distances[0] && distances[1] ? 2 : 1;
++ move->insn = gen_move_insn (move->new_reg, copy_rtx (prev_reg));
++ sbitmap_zero (move->uses);
++
++ prev_reg = move->new_reg;
++ }
++
++ distance1_uses = distances[1] ? sbitmap_alloc (g->num_nodes) : NULL;
++
+ /* Every use of the register defined by node may require a different
+ copy of this register, depending on the time the use is scheduled.
+- Set a bitmap vector, telling which nodes use each copy of this
+- register. */
+- uses_of_defs = sbitmap_vector_alloc (nreg_moves, g->num_nodes);
+- sbitmap_vector_zero (uses_of_defs, nreg_moves);
++ Record which uses require which move results. */
+ for (e = u->out; e; e = e->next_out)
+ if (e->type == TRUE_DEP && e->dest != e->src)
+ {
+- int dest_copy = (SCHED_TIME (e->dest) - SCHED_TIME (e->src)) / ii;
++ int dest_copy = (SCHED_TIME (e->dest->cuid)
++ - SCHED_TIME (e->src->cuid)) / ii;
+
+ if (e->distance == 1)
+- dest_copy = (SCHED_TIME (e->dest) - SCHED_TIME (e->src) + ii) / ii;
++ dest_copy = (SCHED_TIME (e->dest->cuid)
++ - SCHED_TIME (e->src->cuid) + ii) / ii;
+
+- if (SCHED_ROW (e->dest) == SCHED_ROW (e->src)
+- && SCHED_COLUMN (e->dest) < SCHED_COLUMN (e->src))
++ if (SCHED_ROW (e->dest->cuid) == SCHED_ROW (e->src->cuid)
++ && SCHED_COLUMN (e->dest->cuid) < SCHED_COLUMN (e->src->cuid))
+ dest_copy--;
+
+ if (dest_copy)
+- SET_BIT (uses_of_defs[dest_copy - 1], e->dest->cuid);
+- }
++ {
++ ps_reg_move_info *move;
+
+- /* Now generate the reg_moves, attaching relevant uses to them. */
+- SCHED_NREG_MOVES (u) = nreg_moves;
+- old_reg = prev_reg = copy_rtx (SET_DEST (single_set (u->insn)));
+- /* Insert the reg-moves right before the notes which precede
+- the insn they relates to. */
+- last_reg_move = u->first_note;
++ move = ps_reg_move (ps, first_move + dest_copy - 1);
++ SET_BIT (move->uses, e->dest->cuid);
++ if (e->distance == 1)
++ SET_BIT (distance1_uses, e->dest->cuid);
++ }
++ }
+
++ must_follow = sbitmap_alloc (first_move + nreg_moves);
+ for (i_reg_move = 0; i_reg_move < nreg_moves; i_reg_move++)
+- {
+- unsigned int i_use = 0;
+- rtx new_reg = gen_reg_rtx (GET_MODE (prev_reg));
+- rtx reg_move = gen_move_insn (new_reg, prev_reg);
+- sbitmap_iterator sbi;
+-
+- add_insn_before (reg_move, last_reg_move, NULL);
+- last_reg_move = reg_move;
+-
+- if (!SCHED_FIRST_REG_MOVE (u))
+- SCHED_FIRST_REG_MOVE (u) = reg_move;
+-
+- EXECUTE_IF_SET_IN_SBITMAP (uses_of_defs[i_reg_move], 0, i_use, sbi)
+- {
+- struct undo_replace_buff_elem *rep;
+-
+- rep = (struct undo_replace_buff_elem *)
+- xcalloc (1, sizeof (struct undo_replace_buff_elem));
+- rep->insn = g->nodes[i_use].insn;
+- rep->orig_reg = old_reg;
+- rep->new_reg = new_reg;
+-
+- if (! reg_move_replaces)
+- reg_move_replaces = rep;
+- else
+- {
+- rep->next = reg_move_replaces;
+- reg_move_replaces = rep;
+- }
+-
+- replace_rtx (g->nodes[i_use].insn, old_reg, new_reg);
+- if (rescan)
+- df_insn_rescan (g->nodes[i_use].insn);
+- }
+-
+- prev_reg = new_reg;
+- }
+- sbitmap_vector_free (uses_of_defs);
++ if (!schedule_reg_move (ps, first_move + i_reg_move,
++ distance1_uses, must_follow))
++ break;
++ sbitmap_free (must_follow);
++ if (distance1_uses)
++ sbitmap_free (distance1_uses);
++ if (i_reg_move < nreg_moves)
++ return false;
+ }
+- return reg_move_replaces;
++ return true;
+ }
+
+-/* Free memory allocated for the undo buffer. */
++/* Emit the moves associatied with PS. Apply the substitutions
++ associated with them. */
+ static void
+-free_undo_replace_buff (struct undo_replace_buff_elem *reg_move_replaces)
++apply_reg_moves (partial_schedule_ptr ps)
+ {
++ ps_reg_move_info *move;
++ int i;
+
+- while (reg_move_replaces)
++ FOR_EACH_VEC_ELT (ps_reg_move_info, ps->reg_moves, i, move)
+ {
+- struct undo_replace_buff_elem *rep = reg_move_replaces;
++ unsigned int i_use;
++ sbitmap_iterator sbi;
+
+- reg_move_replaces = reg_move_replaces->next;
+- free (rep);
++ EXECUTE_IF_SET_IN_SBITMAP (move->uses, 0, i_use, sbi)
++ {
++ replace_rtx (ps->g->nodes[i_use].insn, move->old_reg, move->new_reg);
++ df_insn_rescan (ps->g->nodes[i_use].insn);
++ }
+ }
+ }
+
+-/* Bump the SCHED_TIMEs of all nodes to start from zero. Set the values
+- of SCHED_ROW and SCHED_STAGE. */
++/* Bump the SCHED_TIMEs of all nodes by AMOUNT. Set the values of
++ SCHED_ROW and SCHED_STAGE. */
+ static void
+-normalize_sched_times (partial_schedule_ptr ps)
++reset_sched_times (partial_schedule_ptr ps, int amount)
+ {
+ int row;
+- int amount = PS_MIN_CYCLE (ps);
+ int ii = ps->ii;
+ ps_insn_ptr crr_insn;
+
+ for (row = 0; row < ii; row++)
+ for (crr_insn = ps->rows[row]; crr_insn; crr_insn = crr_insn->next_in_row)
+ {
+- ddg_node_ptr u = crr_insn->node;
++ int u = crr_insn->id;
+ int normalized_time = SCHED_TIME (u) - amount;
++ int new_min_cycle = PS_MIN_CYCLE (ps) - amount;
+
+- if (dump_file)
+- fprintf (dump_file, "crr_insn->node=%d, crr_insn->cycle=%d,\
+- min_cycle=%d\n", crr_insn->node->cuid, SCHED_TIME
+- (u), ps->min_cycle);
++ if (dump_file)
++ {
++ /* Print the scheduling times after the rotation. */
++ rtx insn = ps_rtl_insn (ps, u);
++
++ fprintf (dump_file, "crr_insn->node=%d (insn id %d), "
++ "crr_insn->cycle=%d, min_cycle=%d", u,
++ INSN_UID (insn), normalized_time, new_min_cycle);
++ if (JUMP_P (insn))
++ fprintf (dump_file, " (branch)");
++ fprintf (dump_file, "\n");
++ }
++
+ gcc_assert (SCHED_TIME (u) >= ps->min_cycle);
+ gcc_assert (SCHED_TIME (u) <= ps->max_cycle);
+- SCHED_TIME (u) = normalized_time;
+- SCHED_ROW (u) = normalized_time % ii;
+- SCHED_STAGE (u) = normalized_time / ii;
+- }
+-}
+-
+-/* Set SCHED_COLUMN of each node according to its position in PS. */
+-static void
+-set_columns_for_ps (partial_schedule_ptr ps)
+-{
+- int row;
+-
+- for (row = 0; row < ps->ii; row++)
+- {
+- ps_insn_ptr cur_insn = ps->rows[row];
+- int column = 0;
+
+- for (; cur_insn; cur_insn = cur_insn->next_in_row)
+- SCHED_COLUMN (cur_insn->node) = column++;
+- }
++ crr_insn->cycle = normalized_time;
++ update_node_sched_params (u, ii, normalized_time, new_min_cycle);
++ }
+ }
+-
++
+ /* Permute the insns according to their order in PS, from row 0 to
+ row ii-1, and position them right before LAST. This schedules
+ the insns of the loop kernel. */
+@@ -625,14 +890,220 @@
+
+ for (row = 0; row < ii ; row++)
+ for (ps_ij = ps->rows[row]; ps_ij; ps_ij = ps_ij->next_in_row)
+- if (PREV_INSN (last) != ps_ij->node->insn)
+- reorder_insns_nobb (ps_ij->node->first_note, ps_ij->node->insn,
+- PREV_INSN (last));
++ {
++ rtx insn = ps_rtl_insn (ps, ps_ij->id);
++
++ if (PREV_INSN (last) != insn)
++ {
++ if (ps_ij->id < ps->g->num_nodes)
++ reorder_insns_nobb (ps_first_note (ps, ps_ij->id), insn,
++ PREV_INSN (last));
++ else
++ add_insn_before (insn, last, NULL);
++ }
++ }
++}
++
++/* Set bitmaps TMP_FOLLOW and TMP_PRECEDE to MUST_FOLLOW and MUST_PRECEDE
++ respectively only if cycle C falls on the border of the scheduling
++ window boundaries marked by START and END cycles. STEP is the
++ direction of the window. */
++static inline void
++set_must_precede_follow (sbitmap *tmp_follow, sbitmap must_follow,
++ sbitmap *tmp_precede, sbitmap must_precede, int c,
++ int start, int end, int step)
++{
++ *tmp_precede = NULL;
++ *tmp_follow = NULL;
++
++ if (c == start)
++ {
++ if (step == 1)
++ *tmp_precede = must_precede;
++ else /* step == -1. */
++ *tmp_follow = must_follow;
++ }
++ if (c == end - step)
++ {
++ if (step == 1)
++ *tmp_follow = must_follow;
++ else /* step == -1. */
++ *tmp_precede = must_precede;
++ }
++
++}
++
++/* Return True if the branch can be moved to row ii-1 while
++ normalizing the partial schedule PS to start from cycle zero and thus
++ optimize the SC. Otherwise return False. */
++static bool
++optimize_sc (partial_schedule_ptr ps, ddg_ptr g)
++{
++ int amount = PS_MIN_CYCLE (ps);
++ sbitmap sched_nodes = sbitmap_alloc (g->num_nodes);
++ int start, end, step;
++ int ii = ps->ii;
++ bool ok = false;
++ int stage_count, stage_count_curr;
++
++ /* Compare the SC after normalization and SC after bringing the branch
++ to row ii-1. If they are equal just bail out. */
++ stage_count = calculate_stage_count (ps, amount);
++ stage_count_curr =
++ calculate_stage_count (ps, SCHED_TIME (g->closing_branch->cuid) - (ii - 1));
++
++ if (stage_count == stage_count_curr)
++ {
++ if (dump_file)
++ fprintf (dump_file, "SMS SC already optimized.\n");
++
++ ok = false;
++ goto clear;
++ }
++
++ if (dump_file)
++ {
++ fprintf (dump_file, "SMS Trying to optimize branch location\n");
++ fprintf (dump_file, "SMS partial schedule before trial:\n");
++ print_partial_schedule (ps, dump_file);
++ }
++
++ /* First, normalize the partial scheduling. */
++ reset_sched_times (ps, amount);
++ rotate_partial_schedule (ps, amount);
++ if (dump_file)
++ {
++ fprintf (dump_file,
++ "SMS partial schedule after normalization (ii, %d, SC %d):\n",
++ ii, stage_count);
++ print_partial_schedule (ps, dump_file);
++ }
++
++ if (SMODULO (SCHED_TIME (g->closing_branch->cuid), ii) == ii - 1)
++ {
++ ok = true;
++ goto clear;
++ }
++
++ sbitmap_ones (sched_nodes);
++
++ /* Calculate the new placement of the branch. It should be in row
++ ii-1 and fall into it's scheduling window. */
++ if (get_sched_window (ps, g->closing_branch, sched_nodes, ii, &start,
++ &step, &end) == 0)
++ {
++ bool success;
++ ps_insn_ptr next_ps_i;
++ int branch_cycle = SCHED_TIME (g->closing_branch->cuid);
++ int row = SMODULO (branch_cycle, ps->ii);
++ int num_splits = 0;
++ sbitmap must_precede, must_follow, tmp_precede, tmp_follow;
++ int c;
++
++ if (dump_file)
++ fprintf (dump_file, "\nTrying to schedule node %d "
++ "INSN = %d in (%d .. %d) step %d\n",
++ g->closing_branch->cuid,
++ (INSN_UID (g->closing_branch->insn)), start, end, step);
++
++ gcc_assert ((step > 0 && start < end) || (step < 0 && start > end));
++ if (step == 1)
++ {
++ c = start + ii - SMODULO (start, ii) - 1;
++ gcc_assert (c >= start);
++ if (c >= end)
++ {
++ ok = false;
++ if (dump_file)
++ fprintf (dump_file,
++ "SMS failed to schedule branch at cycle: %d\n", c);
++ goto clear;
++ }
++ }
++ else
++ {
++ c = start - SMODULO (start, ii) - 1;
++ gcc_assert (c <= start);
++
++ if (c <= end)
++ {
++ if (dump_file)
++ fprintf (dump_file,
++ "SMS failed to schedule branch at cycle: %d\n", c);
++ ok = false;
++ goto clear;
++ }
++ }
++
++ must_precede = sbitmap_alloc (g->num_nodes);
++ must_follow = sbitmap_alloc (g->num_nodes);
++
++ /* Try to schedule the branch is it's new cycle. */
++ calculate_must_precede_follow (g->closing_branch, start, end,
++ step, ii, sched_nodes,
++ must_precede, must_follow);
++
++ set_must_precede_follow (&tmp_follow, must_follow, &tmp_precede,
++ must_precede, c, start, end, step);
++
++ /* Find the element in the partial schedule related to the closing
++ branch so we can remove it from it's current cycle. */
++ for (next_ps_i = ps->rows[row];
++ next_ps_i; next_ps_i = next_ps_i->next_in_row)
++ if (next_ps_i->id == g->closing_branch->cuid)
++ break;
++
++ remove_node_from_ps (ps, next_ps_i);
++ success =
++ try_scheduling_node_in_cycle (ps, g->closing_branch->cuid, c,
++ sched_nodes, &num_splits,
++ tmp_precede, tmp_follow);
++ gcc_assert (num_splits == 0);
++ if (!success)
++ {
++ if (dump_file)
++ fprintf (dump_file,
++ "SMS failed to schedule branch at cycle: %d, "
++ "bringing it back to cycle %d\n", c, branch_cycle);
++
++ /* The branch was failed to be placed in row ii - 1.
++ Put it back in it's original place in the partial
++ schedualing. */
++ set_must_precede_follow (&tmp_follow, must_follow, &tmp_precede,
++ must_precede, branch_cycle, start, end,
++ step);
++ success =
++ try_scheduling_node_in_cycle (ps, g->closing_branch->cuid,
++ branch_cycle, sched_nodes,
++ &num_splits, tmp_precede,
++ tmp_follow);
++ gcc_assert (success && (num_splits == 0));
++ ok = false;
++ }
++ else
++ {
++ /* The branch is placed in row ii - 1. */
++ if (dump_file)
++ fprintf (dump_file,
++ "SMS success in moving branch to cycle %d\n", c);
++
++ update_node_sched_params (g->closing_branch->cuid, ii, c,
++ PS_MIN_CYCLE (ps));
++ ok = true;
++ }
++
++ free (must_precede);
++ free (must_follow);
++ }
++
++clear:
++ free (sched_nodes);
++ return ok;
+ }
+
+ static void
+ duplicate_insns_of_cycles (partial_schedule_ptr ps, int from_stage,
+- int to_stage, int for_prolog, rtx count_reg)
++ int to_stage, rtx count_reg)
+ {
+ int row;
+ ps_insn_ptr ps_ij;
+@@ -640,59 +1111,30 @@
+ for (row = 0; row < ps->ii; row++)
+ for (ps_ij = ps->rows[row]; ps_ij; ps_ij = ps_ij->next_in_row)
+ {
+- ddg_node_ptr u_node = ps_ij->node;
+- int j, i_reg_moves;
+- rtx reg_move = NULL_RTX;
++ int u = ps_ij->id;
++ int first_u, last_u;
++ rtx u_insn;
+
+ /* Do not duplicate any insn which refers to count_reg as it
+ belongs to the control part.
++ The closing branch is scheduled as well and thus should
++ be ignored.
+ TODO: This should be done by analyzing the control part of
+ the loop. */
+- if (reg_mentioned_p (count_reg, u_node->insn))
++ u_insn = ps_rtl_insn (ps, u);
++ if (reg_mentioned_p (count_reg, u_insn)
++ || JUMP_P (u_insn))
+ continue;
+
+- if (for_prolog)
+- {
+- /* SCHED_STAGE (u_node) >= from_stage == 0. Generate increasing
+- number of reg_moves starting with the second occurrence of
+- u_node, which is generated if its SCHED_STAGE <= to_stage. */
+- i_reg_moves = to_stage - SCHED_STAGE (u_node) + 1;
+- i_reg_moves = MAX (i_reg_moves, 0);
+- i_reg_moves = MIN (i_reg_moves, SCHED_NREG_MOVES (u_node));
+-
+- /* The reg_moves start from the *first* reg_move backwards. */
+- if (i_reg_moves)
+- {
+- reg_move = SCHED_FIRST_REG_MOVE (u_node);
+- for (j = 1; j < i_reg_moves; j++)
+- reg_move = PREV_INSN (reg_move);
+- }
+- }
+- else /* It's for the epilog. */
++ first_u = SCHED_STAGE (u);
++ last_u = first_u + ps_num_consecutive_stages (ps, u) - 1;
++ if (from_stage <= last_u && to_stage >= first_u)
+ {
+- /* SCHED_STAGE (u_node) <= to_stage. Generate all reg_moves,
+- starting to decrease one stage after u_node no longer occurs;
+- that is, generate all reg_moves until
+- SCHED_STAGE (u_node) == from_stage - 1. */
+- i_reg_moves = SCHED_NREG_MOVES (u_node)
+- - (from_stage - SCHED_STAGE (u_node) - 1);
+- i_reg_moves = MAX (i_reg_moves, 0);
+- i_reg_moves = MIN (i_reg_moves, SCHED_NREG_MOVES (u_node));
+-
+- /* The reg_moves start from the *last* reg_move forwards. */
+- if (i_reg_moves)
+- {
+- reg_move = SCHED_FIRST_REG_MOVE (u_node);
+- for (j = 1; j < SCHED_NREG_MOVES (u_node); j++)
+- reg_move = PREV_INSN (reg_move);
+- }
++ if (u < ps->g->num_nodes)
++ duplicate_insn_chain (ps_first_note (ps, u), u_insn);
++ else
++ emit_insn (copy_rtx (PATTERN (u_insn)));
+ }
+-
+- for (j = 0; j < i_reg_moves; j++, reg_move = NEXT_INSN (reg_move))
+- emit_insn (copy_rtx (PATTERN (reg_move)));
+- if (SCHED_STAGE (u_node) >= from_stage
+- && SCHED_STAGE (u_node) <= to_stage)
+- duplicate_insn_chain (u_node->first_note, u_node->insn);
+ }
+ }
+
+@@ -726,11 +1168,13 @@
+ }
+
+ for (i = 0; i < last_stage; i++)
+- duplicate_insns_of_cycles (ps, 0, i, 1, count_reg);
++ duplicate_insns_of_cycles (ps, 0, i, count_reg);
+
+ /* Put the prolog on the entry edge. */
+ e = loop_preheader_edge (loop);
+ split_edge_and_insert (e, get_insns ());
++ if (!flag_resched_modulo_sched)
++ e->dest->flags |= BB_DISABLE_SCHEDULE;
+
+ end_sequence ();
+
+@@ -738,15 +1182,30 @@
+ start_sequence ();
+
+ for (i = 0; i < last_stage; i++)
+- duplicate_insns_of_cycles (ps, i + 1, last_stage, 0, count_reg);
++ duplicate_insns_of_cycles (ps, i + 1, last_stage, count_reg);
+
+ /* Put the epilogue on the exit edge. */
+ gcc_assert (single_exit (loop));
+ e = single_exit (loop);
+ split_edge_and_insert (e, get_insns ());
++ if (!flag_resched_modulo_sched)
++ e->dest->flags |= BB_DISABLE_SCHEDULE;
++
+ end_sequence ();
+ }
+
++/* Mark LOOP as software pipelined so the later
++ scheduling passes don't touch it. */
++static void
++mark_loop_unsched (struct loop *loop)
++{
++ unsigned i;
++ basic_block *bbs = get_loop_body (loop);
++
++ for (i = 0; i < loop->num_nodes; i++)
++ bbs[i]->flags |= BB_DISABLE_SCHEDULE;
++}
++
+ /* Return true if all the BBs of the loop are empty except the
+ loop header. */
+ static bool
+@@ -1009,10 +1468,10 @@
+ continue;
+ }
+
+- /* Don't handle BBs with calls or barriers, or !single_set insns,
+- or auto-increment insns (to avoid creating invalid reg-moves
+- for the auto-increment insns).
+- ??? Should handle auto-increment insns.
++ /* Don't handle BBs with calls or barriers
++ or !single_set with the exception of instructions that include
++ count_reg---these instructions are part of the control part
++ that do-loop recognizes.
+ ??? Should handle insns defining subregs. */
+ for (insn = head; insn != NEXT_INSN (tail); insn = NEXT_INSN (insn))
+ {
+@@ -1021,8 +1480,8 @@
+ if (CALL_P (insn)
+ || BARRIER_P (insn)
+ || (NONDEBUG_INSN_P (insn) && !JUMP_P (insn)
+- && !single_set (insn) && GET_CODE (PATTERN (insn)) != USE)
+- || (FIND_REG_INC_NOTE (insn, NULL_RTX) != 0)
++ && !single_set (insn) && GET_CODE (PATTERN (insn)) != USE
++ && !reg_mentioned_p (count_reg, insn))
+ || (INSN_P (insn) && (set = single_set (insn))
+ && GET_CODE (SET_DEST (set)) == SUBREG))
+ break;
+@@ -1036,8 +1495,6 @@
+ fprintf (dump_file, "SMS loop-with-call\n");
+ else if (BARRIER_P (insn))
+ fprintf (dump_file, "SMS loop-with-barrier\n");
+- else if (FIND_REG_INC_NOTE (insn, NULL_RTX) != 0)
+- fprintf (dump_file, "SMS reg inc\n");
+ else if ((NONDEBUG_INSN_P (insn) && !JUMP_P (insn)
+ && !single_set (insn) && GET_CODE (PATTERN (insn)) != USE))
+ fprintf (dump_file, "SMS loop-with-not-single-set\n");
+@@ -1049,7 +1506,11 @@
+ continue;
+ }
+
+- if (! (g = create_ddg (bb, 0)))
++ /* Always schedule the closing branch with the rest of the
++ instructions. The branch is rotated to be in row ii-1 at the
++ end of the scheduling procedure to make sure it's the last
++ instruction in the iteration. */
++ if (! (g = create_ddg (bb, 1)))
+ {
+ if (dump_file)
+ fprintf (dump_file, "SMS create_ddg failed\n");
+@@ -1072,9 +1533,9 @@
+ {
+ rtx head, tail;
+ rtx count_reg, count_init;
+- int mii, rec_mii;
+- unsigned stage_count = 0;
++ int mii, rec_mii, stage_count, min_cycle;
+ HOST_WIDEST_INT loop_count = 0;
++ bool opt_sc_p;
+
+ if (! (g = g_arr[loop->num]))
+ continue;
+@@ -1151,63 +1612,103 @@
+ fprintf (dump_file, "SMS iis %d %d %d (rec_mii, mii, maxii)\n",
+ rec_mii, mii, maxii);
+
+- /* After sms_order_nodes and before sms_schedule_by_order, to copy over
+- ASAP. */
+- set_node_sched_params (g);
+-
+- ps = sms_schedule_by_order (g, mii, maxii, node_order);
+-
+- if (ps){
+- stage_count = PS_STAGE_COUNT (ps);
+- gcc_assert(stage_count >= 1);
+- }
+-
+- /* Stage count of 1 means that there is no interleaving between
+- iterations, let the scheduling passes do the job. */
+- if (stage_count <= 1
+- || (count_init && (loop_count <= stage_count))
+- || (flag_branch_probabilities && (trip_count <= stage_count)))
++ for (;;)
+ {
+- if (dump_file)
++ set_node_sched_params (g);
++
++ stage_count = 0;
++ opt_sc_p = false;
++ ps = sms_schedule_by_order (g, mii, maxii, node_order);
++
++ if (ps)
+ {
+- fprintf (dump_file, "SMS failed... \n");
+- fprintf (dump_file, "SMS sched-failed (stage-count=%d, loop-count=", stage_count);
+- fprintf (dump_file, HOST_WIDEST_INT_PRINT_DEC, loop_count);
+- fprintf (dump_file, ", trip-count=");
+- fprintf (dump_file, HOST_WIDEST_INT_PRINT_DEC, trip_count);
+- fprintf (dump_file, ")\n");
+- }
+- continue;
+- }
+- else
+- {
+- struct undo_replace_buff_elem *reg_move_replaces;
++ /* Try to achieve optimized SC by normalizing the partial
++ schedule (having the cycles start from cycle zero).
++ The branch location must be placed in row ii-1 in the
++ final scheduling. If failed, shift all instructions to
++ position the branch in row ii-1. */
++ opt_sc_p = optimize_sc (ps, g);
++ if (opt_sc_p)
++ stage_count = calculate_stage_count (ps, 0);
++ else
++ {
++ /* Bring the branch to cycle ii-1. */
++ int amount = (SCHED_TIME (g->closing_branch->cuid)
++ - (ps->ii - 1));
++
++ if (dump_file)
++ fprintf (dump_file, "SMS schedule branch at cycle ii-1\n");
+
+- if (dump_file)
++ stage_count = calculate_stage_count (ps, amount);
++ }
++
++ gcc_assert (stage_count >= 1);
++ }
++
++ /* The default value of PARAM_SMS_MIN_SC is 2 as stage count of
++ 1 means that there is no interleaving between iterations thus
++ we let the scheduling passes do the job in this case. */
++ if (stage_count < PARAM_VALUE (PARAM_SMS_MIN_SC)
++ || (count_init && (loop_count <= stage_count))
++ || (flag_branch_probabilities && (trip_count <= stage_count)))
+ {
+- fprintf (dump_file,
+- "SMS succeeded %d %d (with ii, sc)\n", ps->ii,
+- stage_count);
+- print_partial_schedule (ps, dump_file);
+- fprintf (dump_file,
+- "SMS Branch (%d) will later be scheduled at cycle %d.\n",
+- g->closing_branch->cuid, PS_MIN_CYCLE (ps) - 1);
++ if (dump_file)
++ {
++ fprintf (dump_file, "SMS failed... \n");
++ fprintf (dump_file, "SMS sched-failed (stage-count=%d,"
++ " loop-count=", stage_count);
++ fprintf (dump_file, HOST_WIDEST_INT_PRINT_DEC, loop_count);
++ fprintf (dump_file, ", trip-count=");
++ fprintf (dump_file, HOST_WIDEST_INT_PRINT_DEC, trip_count);
++ fprintf (dump_file, ")\n");
++ }
++ break;
+ }
+
+- /* Set the stage boundaries. If the DDG is built with closing_branch_deps,
+- the closing_branch was scheduled and should appear in the last (ii-1)
+- row. Otherwise, we are free to schedule the branch, and we let nodes
+- that were scheduled at the first PS_MIN_CYCLE cycle appear in the first
+- row; this should reduce stage_count to minimum.
+- TODO: Revisit the issue of scheduling the insns of the
+- control part relative to the branch when the control part
+- has more than one insn. */
+- normalize_sched_times (ps);
+- rotate_partial_schedule (ps, PS_MIN_CYCLE (ps));
++ if (!opt_sc_p)
++ {
++ /* Rotate the partial schedule to have the branch in row ii-1. */
++ int amount = SCHED_TIME (g->closing_branch->cuid) - (ps->ii - 1);
++
++ reset_sched_times (ps, amount);
++ rotate_partial_schedule (ps, amount);
++ }
++
+ set_columns_for_ps (ps);
+
++ min_cycle = PS_MIN_CYCLE (ps) - SMODULO (PS_MIN_CYCLE (ps), ps->ii);
++ if (!schedule_reg_moves (ps))
++ {
++ mii = ps->ii + 1;
++ free_partial_schedule (ps);
++ continue;
++ }
++
++ /* Moves that handle incoming values might have been added
++ to a new first stage. Bump the stage count if so.
++
++ ??? Perhaps we could consider rotating the schedule here
++ instead? */
++ if (PS_MIN_CYCLE (ps) < min_cycle)
++ {
++ reset_sched_times (ps, 0);
++ stage_count++;
++ }
++
++ /* The stage count should now be correct without rotation. */
++ gcc_checking_assert (stage_count == calculate_stage_count (ps, 0));
++ PS_STAGE_COUNT (ps) = stage_count;
++
+ canon_loop (loop);
+
++ if (dump_file)
++ {
++ fprintf (dump_file,
++ "%s:%d SMS succeeded %d %d (with ii, sc)\n",
++ insn_file (tail), insn_line (tail), ps->ii, stage_count);
++ print_partial_schedule (ps, dump_file);
++ }
++
+ /* case the BCT count is not known , Do loop-versioning */
+ if (count_reg && ! count_init)
+ {
+@@ -1230,23 +1731,23 @@
+ permute_partial_schedule (ps, g->closing_branch->first_note);
+
+ /* Mark this loop as software pipelined so the later
+- scheduling passes doesn't touch it. */
++ scheduling passes don't touch it. */
+ if (! flag_resched_modulo_sched)
+- g->bb->flags |= BB_DISABLE_SCHEDULE;
++ mark_loop_unsched (loop);
++
+ /* The life-info is not valid any more. */
+ df_set_bb_dirty (g->bb);
+
+- reg_move_replaces = generate_reg_moves (ps, true);
++ apply_reg_moves (ps);
+ if (dump_file)
+- print_node_sched_params (dump_file, g->num_nodes, g);
++ print_node_sched_params (dump_file, g->num_nodes, ps);
+ /* Generate prolog and epilog. */
+ generate_prolog_epilog (ps, loop, count_reg, count_init);
+-
+- free_undo_replace_buff (reg_move_replaces);
++ break;
+ }
+
+ free_partial_schedule (ps);
+- free (node_sched_params);
++ VEC_free (node_sched_params, heap, node_sched_param_vec);
+ free (node_order);
+ free_ddg (g);
+ }
+@@ -1347,19 +1848,21 @@
+ scheduling window is empty and zero otherwise. */
+
+ static int
+-get_sched_window (partial_schedule_ptr ps, int *nodes_order, int i,
+- sbitmap sched_nodes, int ii, int *start_p, int *step_p, int *end_p)
++get_sched_window (partial_schedule_ptr ps, ddg_node_ptr u_node,
++ sbitmap sched_nodes, int ii, int *start_p, int *step_p,
++ int *end_p)
+ {
+ int start, step, end;
++ int early_start, late_start;
+ ddg_edge_ptr e;
+- int u = nodes_order [i];
+- ddg_node_ptr u_node = &ps->g->nodes[u];
+ sbitmap psp = sbitmap_alloc (ps->g->num_nodes);
+ sbitmap pss = sbitmap_alloc (ps->g->num_nodes);
+ sbitmap u_node_preds = NODE_PREDECESSORS (u_node);
+ sbitmap u_node_succs = NODE_SUCCESSORS (u_node);
+ int psp_not_empty;
+ int pss_not_empty;
++ int count_preds;
++ int count_succs;
+
+ /* 1. compute sched window for u (start, end, step). */
+ sbitmap_zero (psp);
+@@ -1367,214 +1870,119 @@
+ psp_not_empty = sbitmap_a_and_b_cg (psp, u_node_preds, sched_nodes);
+ pss_not_empty = sbitmap_a_and_b_cg (pss, u_node_succs, sched_nodes);
+
+- if (psp_not_empty && !pss_not_empty)
+- {
+- int early_start = INT_MIN;
+-
+- end = INT_MAX;
+- for (e = u_node->in; e != 0; e = e->next_in)
+- {
+- ddg_node_ptr v_node = e->src;
+-
+- if (dump_file)
+- {
+- fprintf (dump_file, "\nProcessing edge: ");
+- print_ddg_edge (dump_file, e);
+- fprintf (dump_file,
+- "\nScheduling %d (%d) in psp_not_empty,"
+- " checking p %d (%d): ", u_node->cuid,
+- INSN_UID (u_node->insn), v_node->cuid, INSN_UID
+- (v_node->insn));
+- }
+-
+- if (TEST_BIT (sched_nodes, v_node->cuid))
+- {
+- int p_st = SCHED_TIME (v_node);
+-
+- early_start =
+- MAX (early_start, p_st + e->latency - (e->distance * ii));
+-
+- if (dump_file)
+- fprintf (dump_file,
+- "pred st = %d; early_start = %d; latency: %d",
+- p_st, early_start, e->latency);
++ /* We first compute a forward range (start <= end), then decide whether
++ to reverse it. */
++ early_start = INT_MIN;
++ late_start = INT_MAX;
++ start = INT_MIN;
++ end = INT_MAX;
++ step = 1;
++
++ count_preds = 0;
++ count_succs = 0;
++
++ if (dump_file && (psp_not_empty || pss_not_empty))
++ {
++ fprintf (dump_file, "\nAnalyzing dependencies for node %d (INSN %d)"
++ "; ii = %d\n\n", u_node->cuid, INSN_UID (u_node->insn), ii);
++ fprintf (dump_file, "%11s %11s %11s %11s %5s\n",
++ "start", "early start", "late start", "end", "time");
++ fprintf (dump_file, "=========== =========== =========== ==========="
++ " =====\n");
++ }
++ /* Calculate early_start and limit end. Both bounds are inclusive. */
++ if (psp_not_empty)
++ for (e = u_node->in; e != 0; e = e->next_in)
++ {
++ int v = e->src->cuid;
+
+- if (e->data_type == MEM_DEP)
+- end = MIN (end, SCHED_TIME (v_node) + ii - 1);
+- }
+- else if (dump_file)
+- fprintf (dump_file, "the node is not scheduled\n");
+- }
+- start = early_start;
+- end = MIN (end, early_start + ii);
+- /* Schedule the node close to it's predecessors. */
+- step = 1;
++ if (TEST_BIT (sched_nodes, v))
++ {
++ int p_st = SCHED_TIME (v);
++ int earliest = p_st + e->latency - (e->distance * ii);
++ int latest = (e->data_type == MEM_DEP ? p_st + ii - 1 : INT_MAX);
+
+- if (dump_file)
+- fprintf (dump_file,
+- "\nScheduling %d (%d) in a window (%d..%d) with step %d\n",
+- u_node->cuid, INSN_UID (u_node->insn), start, end, step);
+- }
++ if (dump_file)
++ {
++ fprintf (dump_file, "%11s %11d %11s %11d %5d",
++ "", earliest, "", latest, p_st);
++ print_ddg_edge (dump_file, e);
++ fprintf (dump_file, "\n");
++ }
+
+- else if (!psp_not_empty && pss_not_empty)
+- {
+- int late_start = INT_MAX;
++ early_start = MAX (early_start, earliest);
++ end = MIN (end, latest);
+
+- end = INT_MIN;
+- for (e = u_node->out; e != 0; e = e->next_out)
+- {
+- ddg_node_ptr v_node = e->dest;
++ if (e->type == TRUE_DEP && e->data_type == REG_DEP)
++ count_preds++;
++ }
++ }
+
+- if (dump_file)
+- {
+- fprintf (dump_file, "\nProcessing edge:");
+- print_ddg_edge (dump_file, e);
+- fprintf (dump_file,
+- "\nScheduling %d (%d) in pss_not_empty,"
+- " checking s %d (%d): ", u_node->cuid,
+- INSN_UID (u_node->insn), v_node->cuid, INSN_UID
+- (v_node->insn));
+- }
++ /* Calculate late_start and limit start. Both bounds are inclusive. */
++ if (pss_not_empty)
++ for (e = u_node->out; e != 0; e = e->next_out)
++ {
++ int v = e->dest->cuid;
+
+- if (TEST_BIT (sched_nodes, v_node->cuid))
+- {
+- int s_st = SCHED_TIME (v_node);
++ if (TEST_BIT (sched_nodes, v))
++ {
++ int s_st = SCHED_TIME (v);
++ int earliest = (e->data_type == MEM_DEP ? s_st - ii + 1 : INT_MIN);
++ int latest = s_st - e->latency + (e->distance * ii);
+
+- late_start = MIN (late_start,
+- s_st - e->latency + (e->distance * ii));
++ if (dump_file)
++ {
++ fprintf (dump_file, "%11d %11s %11d %11s %5d",
++ earliest, "", latest, "", s_st);
++ print_ddg_edge (dump_file, e);
++ fprintf (dump_file, "\n");
++ }
+
+- if (dump_file)
+- fprintf (dump_file,
+- "succ st = %d; late_start = %d; latency = %d",
+- s_st, late_start, e->latency);
+-
+- if (e->data_type == MEM_DEP)
+- end = MAX (end, SCHED_TIME (v_node) - ii + 1);
+- if (dump_file)
+- fprintf (dump_file, "end = %d\n", end);
++ start = MAX (start, earliest);
++ late_start = MIN (late_start, latest);
+
+- }
+- else if (dump_file)
+- fprintf (dump_file, "the node is not scheduled\n");
++ if (e->type == TRUE_DEP && e->data_type == REG_DEP)
++ count_succs++;
++ }
++ }
+
+- }
+- start = late_start;
+- end = MAX (end, late_start - ii);
+- /* Schedule the node close to it's successors. */
++ if (dump_file && (psp_not_empty || pss_not_empty))
++ {
++ fprintf (dump_file, "----------- ----------- ----------- -----------"
++ " -----\n");
++ fprintf (dump_file, "%11d %11d %11d %11d %5s %s\n",
++ start, early_start, late_start, end, "",
++ "(max, max, min, min)");
++ }
++
++ /* Get a target scheduling window no bigger than ii. */
++ if (early_start == INT_MIN && late_start == INT_MAX)
++ early_start = NODE_ASAP (u_node);
++ else if (early_start == INT_MIN)
++ early_start = late_start - (ii - 1);
++ late_start = MIN (late_start, early_start + (ii - 1));
++
++ /* Apply memory dependence limits. */
++ start = MAX (start, early_start);
++ end = MIN (end, late_start);
++
++ if (dump_file && (psp_not_empty || pss_not_empty))
++ fprintf (dump_file, "%11s %11d %11d %11s %5s final window\n",
++ "", start, end, "", "");
++
++ /* If there are at least as many successors as predecessors, schedule the
++ node close to its successors. */
++ if (pss_not_empty && count_succs >= count_preds)
++ {
++ int tmp = end;
++ end = start;
++ start = tmp;
+ step = -1;
+-
+- if (dump_file)
+- fprintf (dump_file,
+- "\nScheduling %d (%d) in a window (%d..%d) with step %d\n",
+- u_node->cuid, INSN_UID (u_node->insn), start, end, step);
+-
+ }
+
+- else if (psp_not_empty && pss_not_empty)
+- {
+- int early_start = INT_MIN;
+- int late_start = INT_MAX;
+- int count_preds = 0;
+- int count_succs = 0;
+-
+- start = INT_MIN;
+- end = INT_MAX;
+- for (e = u_node->in; e != 0; e = e->next_in)
+- {
+- ddg_node_ptr v_node = e->src;
+-
+- if (dump_file)
+- {
+- fprintf (dump_file, "\nProcessing edge:");
+- print_ddg_edge (dump_file, e);
+- fprintf (dump_file,
+- "\nScheduling %d (%d) in psp_pss_not_empty,"
+- " checking p %d (%d): ", u_node->cuid, INSN_UID
+- (u_node->insn), v_node->cuid, INSN_UID
+- (v_node->insn));
+- }
+-
+- if (TEST_BIT (sched_nodes, v_node->cuid))
+- {
+- int p_st = SCHED_TIME (v_node);
+-
+- early_start = MAX (early_start,
+- p_st + e->latency
+- - (e->distance * ii));
+-
+- if (dump_file)
+- fprintf (dump_file,
+- "pred st = %d; early_start = %d; latency = %d",
+- p_st, early_start, e->latency);
+-
+- if (e->type == TRUE_DEP && e->data_type == REG_DEP)
+- count_preds++;
+-
+- if (e->data_type == MEM_DEP)
+- end = MIN (end, SCHED_TIME (v_node) + ii - 1);
+- }
+- else if (dump_file)
+- fprintf (dump_file, "the node is not scheduled\n");
+-
+- }
+- for (e = u_node->out; e != 0; e = e->next_out)
+- {
+- ddg_node_ptr v_node = e->dest;
+-
+- if (dump_file)
+- {
+- fprintf (dump_file, "\nProcessing edge:");
+- print_ddg_edge (dump_file, e);
+- fprintf (dump_file,
+- "\nScheduling %d (%d) in psp_pss_not_empty,"
+- " checking s %d (%d): ", u_node->cuid, INSN_UID
+- (u_node->insn), v_node->cuid, INSN_UID
+- (v_node->insn));
+- }
+-
+- if (TEST_BIT (sched_nodes, v_node->cuid))
+- {
+- int s_st = SCHED_TIME (v_node);
+-
+- late_start = MIN (late_start,
+- s_st - e->latency
+- + (e->distance * ii));
+-
+- if (dump_file)
+- fprintf (dump_file,
+- "succ st = %d; late_start = %d; latency = %d",
+- s_st, late_start, e->latency);
+-
+- if (e->type == TRUE_DEP && e->data_type == REG_DEP)
+- count_succs++;
+-
+- if (e->data_type == MEM_DEP)
+- start = MAX (start, SCHED_TIME (v_node) - ii + 1);
+- }
+- else if (dump_file)
+- fprintf (dump_file, "the node is not scheduled\n");
+-
+- }
+- start = MAX (start, early_start);
+- end = MIN (end, MIN (early_start + ii, late_start + 1));
+- step = 1;
+- /* If there are more successors than predecessors schedule the
+- node close to it's successors. */
+- if (count_succs >= count_preds)
+- {
+- int old_start = start;
+-
+- start = end - 1;
+- end = old_start - 1;
+- step = -1;
+- }
+- }
+- else /* psp is empty && pss is empty. */
+- {
+- start = SCHED_ASAP (u_node);
+- end = start + ii;
+- step = 1;
+- }
++ /* Now that we've finalized the window, make END an exclusive rather
++ than an inclusive bound. */
++ end += step;
+
+ *start_p = start;
+ *step_p = step;
+@@ -1587,10 +1995,10 @@
+ if (dump_file)
+ fprintf (dump_file, "\nEmpty window: start=%d, end=%d, step=%d\n",
+ start, end, step);
+- return -1;
++ return -1;
+ }
+
+- return 0;
++ return 0;
+ }
+
+ /* Calculate MUST_PRECEDE/MUST_FOLLOW bitmaps of U_NODE; which is the
+@@ -1646,7 +2054,7 @@
+ SCHED_TIME (e->src) - (e->distance * ii) == first_cycle_in_window */
+ for (e = u_node->in; e != 0; e = e->next_in)
+ if (TEST_BIT (sched_nodes, e->src->cuid)
+- && ((SCHED_TIME (e->src) - (e->distance * ii)) ==
++ && ((SCHED_TIME (e->src->cuid) - (e->distance * ii)) ==
+ first_cycle_in_window))
+ {
+ if (dump_file)
+@@ -1671,7 +2079,7 @@
+ SCHED_TIME (e->dest) + (e->distance * ii) == last_cycle_in_window */
+ for (e = u_node->out; e != 0; e = e->next_out)
+ if (TEST_BIT (sched_nodes, e->dest->cuid)
+- && ((SCHED_TIME (e->dest) + (e->distance * ii)) ==
++ && ((SCHED_TIME (e->dest->cuid) + (e->distance * ii)) ==
+ last_cycle_in_window))
+ {
+ if (dump_file)
+@@ -1695,7 +2103,7 @@
+ last row of the scheduling window) */
+
+ static bool
+-try_scheduling_node_in_cycle (partial_schedule_ptr ps, ddg_node_ptr u_node,
++try_scheduling_node_in_cycle (partial_schedule_ptr ps,
+ int u, int cycle, sbitmap sched_nodes,
+ int *num_splits, sbitmap must_precede,
+ sbitmap must_follow)
+@@ -1704,11 +2112,10 @@
+ bool success = 0;
+
+ verify_partial_schedule (ps, sched_nodes);
+- psi = ps_add_node_check_conflicts (ps, u_node, cycle,
+- must_precede, must_follow);
++ psi = ps_add_node_check_conflicts (ps, u, cycle, must_precede, must_follow);
+ if (psi)
+ {
+- SCHED_TIME (u_node) = cycle;
++ SCHED_TIME (u) = cycle;
+ SET_BIT (sched_nodes, u);
+ success = 1;
+ *num_splits = 0;
+@@ -1760,23 +2167,17 @@
+ continue;
+ }
+
+- if (JUMP_P (insn)) /* Closing branch handled later. */
+- {
+- RESET_BIT (tobe_scheduled, u);
+- continue;
+- }
+-
+ if (TEST_BIT (sched_nodes, u))
+ continue;
+
+ /* Try to get non-empty scheduling window. */
+ success = 0;
+- if (get_sched_window (ps, nodes_order, i, sched_nodes, ii, &start,
++ if (get_sched_window (ps, u_node, sched_nodes, ii, &start,
+ &step, &end) == 0)
+ {
+ if (dump_file)
+- fprintf (dump_file, "\nTrying to schedule node %d \
+- INSN = %d in (%d .. %d) step %d\n", u, (INSN_UID
++ fprintf (dump_file, "\nTrying to schedule node %d "
++ "INSN = %d in (%d .. %d) step %d\n", u, (INSN_UID
+ (g->nodes[u].insn)), start, end, step);
+
+ gcc_assert ((step > 0 && start < end)
+@@ -1788,26 +2189,13 @@
+
+ for (c = start; c != end; c += step)
+ {
+- sbitmap tmp_precede = NULL;
+- sbitmap tmp_follow = NULL;
+-
+- if (c == start)
+- {
+- if (step == 1)
+- tmp_precede = must_precede;
+- else /* step == -1. */
+- tmp_follow = must_follow;
+- }
+- if (c == end - step)
+- {
+- if (step == 1)
+- tmp_follow = must_follow;
+- else /* step == -1. */
+- tmp_precede = must_precede;
+- }
++ sbitmap tmp_precede, tmp_follow;
+
++ set_must_precede_follow (&tmp_follow, must_follow,
++ &tmp_precede, must_precede,
++ c, start, end, step);
+ success =
+- try_scheduling_node_in_cycle (ps, u_node, u, c,
++ try_scheduling_node_in_cycle (ps, u, c,
+ sched_nodes,
+ &num_splits, tmp_precede,
+ tmp_follow);
+@@ -1883,6 +2271,7 @@
+ int ii = ps->ii;
+ int new_ii = ii + 1;
+ int row;
++ int *rows_length_new;
+
+ verify_partial_schedule (ps, sched_nodes);
+
+@@ -1893,18 +2282,20 @@
+ if (dump_file)
+ fprintf (dump_file, "split_row=%d\n", split_row);
+
+- normalize_sched_times (ps);
+- rotate_partial_schedule (ps, ps->min_cycle);
++ reset_sched_times (ps, PS_MIN_CYCLE (ps));
++ rotate_partial_schedule (ps, PS_MIN_CYCLE (ps));
+
+ rows_new = (ps_insn_ptr *) xcalloc (new_ii, sizeof (ps_insn_ptr));
++ rows_length_new = (int *) xcalloc (new_ii, sizeof (int));
+ for (row = 0; row < split_row; row++)
+ {
+ rows_new[row] = ps->rows[row];
++ rows_length_new[row] = ps->rows_length[row];
+ ps->rows[row] = NULL;
+ for (crr_insn = rows_new[row];
+ crr_insn; crr_insn = crr_insn->next_in_row)
+ {
+- ddg_node_ptr u = crr_insn->node;
++ int u = crr_insn->id;
+ int new_time = SCHED_TIME (u) + (SCHED_TIME (u) / ii);
+
+ SCHED_TIME (u) = new_time;
+@@ -1920,11 +2311,12 @@
+ for (row = split_row; row < ii; row++)
+ {
+ rows_new[row + 1] = ps->rows[row];
++ rows_length_new[row + 1] = ps->rows_length[row];
+ ps->rows[row] = NULL;
+ for (crr_insn = rows_new[row + 1];
+ crr_insn; crr_insn = crr_insn->next_in_row)
+ {
+- ddg_node_ptr u = crr_insn->node;
++ int u = crr_insn->id;
+ int new_time = SCHED_TIME (u) + (SCHED_TIME (u) / ii) + 1;
+
+ SCHED_TIME (u) = new_time;
+@@ -1941,6 +2333,8 @@
+ + (SMODULO (ps->max_cycle, ii) >= split_row ? 1 : 0);
+ free (ps->rows);
+ ps->rows = rows_new;
++ free (ps->rows_length);
++ ps->rows_length = rows_length_new;
+ ps->ii = new_ii;
+ gcc_assert (ps->min_cycle >= 0);
+
+@@ -1962,24 +2356,24 @@
+ {
+ ddg_edge_ptr e;
+ int lower = INT_MIN, upper = INT_MAX;
+- ddg_node_ptr crit_pred = NULL;
+- ddg_node_ptr crit_succ = NULL;
++ int crit_pred = -1;
++ int crit_succ = -1;
+ int crit_cycle;
+
+ for (e = u_node->in; e != 0; e = e->next_in)
+ {
+- ddg_node_ptr v_node = e->src;
++ int v = e->src->cuid;
+
+- if (TEST_BIT (sched_nodes, v_node->cuid)
+- && (low == SCHED_TIME (v_node) + e->latency - (e->distance * ii)))
+- if (SCHED_TIME (v_node) > lower)
++ if (TEST_BIT (sched_nodes, v)
++ && (low == SCHED_TIME (v) + e->latency - (e->distance * ii)))
++ if (SCHED_TIME (v) > lower)
+ {
+- crit_pred = v_node;
+- lower = SCHED_TIME (v_node);
++ crit_pred = v;
++ lower = SCHED_TIME (v);
+ }
+ }
+
+- if (crit_pred != NULL)
++ if (crit_pred >= 0)
+ {
+ crit_cycle = SCHED_TIME (crit_pred) + 1;
+ return SMODULO (crit_cycle, ii);
+@@ -1987,17 +2381,18 @@
+
+ for (e = u_node->out; e != 0; e = e->next_out)
+ {
+- ddg_node_ptr v_node = e->dest;
+- if (TEST_BIT (sched_nodes, v_node->cuid)
+- && (up == SCHED_TIME (v_node) - e->latency + (e->distance * ii)))
+- if (SCHED_TIME (v_node) < upper)
++ int v = e->dest->cuid;
++
++ if (TEST_BIT (sched_nodes, v)
++ && (up == SCHED_TIME (v) - e->latency + (e->distance * ii)))
++ if (SCHED_TIME (v) < upper)
+ {
+- crit_succ = v_node;
+- upper = SCHED_TIME (v_node);
++ crit_succ = v;
++ upper = SCHED_TIME (v);
+ }
+ }
+
+- if (crit_succ != NULL)
++ if (crit_succ >= 0)
+ {
+ crit_cycle = SCHED_TIME (crit_succ);
+ return SMODULO (crit_cycle, ii);
+@@ -2016,16 +2411,23 @@
+ ps_insn_ptr crr_insn;
+
+ for (row = 0; row < ps->ii; row++)
+- for (crr_insn = ps->rows[row]; crr_insn; crr_insn = crr_insn->next_in_row)
+- {
+- ddg_node_ptr u = crr_insn->node;
+-
+- gcc_assert (TEST_BIT (sched_nodes, u->cuid));
+- /* ??? Test also that all nodes of sched_nodes are in ps, perhaps by
+- popcount (sched_nodes) == number of insns in ps. */
+- gcc_assert (SCHED_TIME (u) >= ps->min_cycle);
+- gcc_assert (SCHED_TIME (u) <= ps->max_cycle);
+- }
++ {
++ int length = 0;
++
++ for (crr_insn = ps->rows[row]; crr_insn; crr_insn = crr_insn->next_in_row)
++ {
++ int u = crr_insn->id;
++
++ length++;
++ gcc_assert (TEST_BIT (sched_nodes, u));
++ /* ??? Test also that all nodes of sched_nodes are in ps, perhaps by
++ popcount (sched_nodes) == number of insns in ps. */
++ gcc_assert (SCHED_TIME (u) >= ps->min_cycle);
++ gcc_assert (SCHED_TIME (u) <= ps->max_cycle);
++ }
++
++ gcc_assert (ps->rows_length[row] == length);
++ }
+ }
+
+
+@@ -2431,6 +2833,8 @@
+ {
+ partial_schedule_ptr ps = XNEW (struct partial_schedule);
+ ps->rows = (ps_insn_ptr *) xcalloc (ii, sizeof (ps_insn_ptr));
++ ps->rows_length = (int *) xcalloc (ii, sizeof (int));
++ ps->reg_moves = NULL;
+ ps->ii = ii;
+ ps->history = history;
+ ps->min_cycle = INT_MAX;
+@@ -2465,10 +2869,19 @@
+ static void
+ free_partial_schedule (partial_schedule_ptr ps)
+ {
++ ps_reg_move_info *move;
++ unsigned int i;
++
+ if (!ps)
+ return;
++
++ FOR_EACH_VEC_ELT (ps_reg_move_info, ps->reg_moves, i, move)
++ sbitmap_free (move->uses);
++ VEC_free (ps_reg_move_info, heap, ps->reg_moves);
++
+ free_ps_insns (ps);
+ free (ps->rows);
++ free (ps->rows_length);
+ free (ps);
+ }
+
+@@ -2486,6 +2899,8 @@
+ ps->rows = (ps_insn_ptr *) xrealloc (ps->rows, new_ii
+ * sizeof (ps_insn_ptr));
+ memset (ps->rows, 0, new_ii * sizeof (ps_insn_ptr));
++ ps->rows_length = (int *) xrealloc (ps->rows_length, new_ii * sizeof (int));
++ memset (ps->rows_length, 0, new_ii * sizeof (int));
+ ps->ii = new_ii;
+ ps->min_cycle = INT_MAX;
+ ps->max_cycle = INT_MIN;
+@@ -2505,8 +2920,13 @@
+ fprintf (dump, "\n[ROW %d ]: ", i);
+ while (ps_i)
+ {
+- fprintf (dump, "%d, ",
+- INSN_UID (ps_i->node->insn));
++ rtx insn = ps_rtl_insn (ps, ps_i->id);
++
++ if (JUMP_P (insn))
++ fprintf (dump, "%d (branch), ", INSN_UID (insn));
++ else
++ fprintf (dump, "%d, ", INSN_UID (insn));
++
+ ps_i = ps_i->next_in_row;
+ }
+ }
+@@ -2514,36 +2934,31 @@
+
+ /* Creates an object of PS_INSN and initializes it to the given parameters. */
+ static ps_insn_ptr
+-create_ps_insn (ddg_node_ptr node, int rest_count, int cycle)
++create_ps_insn (int id, int cycle)
+ {
+ ps_insn_ptr ps_i = XNEW (struct ps_insn);
+
+- ps_i->node = node;
++ ps_i->id = id;
+ ps_i->next_in_row = NULL;
+ ps_i->prev_in_row = NULL;
+- ps_i->row_rest_count = rest_count;
+ ps_i->cycle = cycle;
+
+ return ps_i;
+ }
+
+
+-/* Removes the given PS_INSN from the partial schedule. Returns false if the
+- node is not found in the partial schedule, else returns true. */
+-static bool
++/* Removes the given PS_INSN from the partial schedule. */
++static void
+ remove_node_from_ps (partial_schedule_ptr ps, ps_insn_ptr ps_i)
+ {
+ int row;
+
+- if (!ps || !ps_i)
+- return false;
+-
++ gcc_assert (ps && ps_i);
++
+ row = SMODULO (ps_i->cycle, ps->ii);
+ if (! ps_i->prev_in_row)
+ {
+- if (ps_i != ps->rows[row])
+- return false;
+-
++ gcc_assert (ps_i == ps->rows[row]);
+ ps->rows[row] = ps_i->next_in_row;
+ if (ps->rows[row])
+ ps->rows[row]->prev_in_row = NULL;
+@@ -2554,8 +2969,10 @@
+ if (ps_i->next_in_row)
+ ps_i->next_in_row->prev_in_row = ps_i->prev_in_row;
+ }
++
++ ps->rows_length[row] -= 1;
+ free (ps_i);
+- return true;
++ return;
+ }
+
+ /* Unlike what literature describes for modulo scheduling (which focuses
+@@ -2571,6 +2988,7 @@
+ ps_insn_ptr next_ps_i;
+ ps_insn_ptr first_must_follow = NULL;
+ ps_insn_ptr last_must_precede = NULL;
++ ps_insn_ptr last_in_row = NULL;
+ int row;
+
+ if (! ps_i)
+@@ -2585,10 +3003,11 @@
+ next_ps_i;
+ next_ps_i = next_ps_i->next_in_row)
+ {
+- if (must_follow && TEST_BIT (must_follow, next_ps_i->node->cuid)
++ if (must_follow
++ && TEST_BIT (must_follow, next_ps_i->id)
+ && ! first_must_follow)
+ first_must_follow = next_ps_i;
+- if (must_precede && TEST_BIT (must_precede, next_ps_i->node->cuid))
++ if (must_precede && TEST_BIT (must_precede, next_ps_i->id))
+ {
+ /* If we have already met a node that must follow, then
+ there is no possible column. */
+@@ -2597,8 +3016,37 @@
+ else
+ last_must_precede = next_ps_i;
+ }
++ /* The closing branch must be the last in the row. */
++ if (must_precede
++ && TEST_BIT (must_precede, next_ps_i->id)
++ && JUMP_P (ps_rtl_insn (ps, next_ps_i->id)))
++ return false;
++
++ last_in_row = next_ps_i;
+ }
+
++ /* The closing branch is scheduled as well. Make sure there is no
++ dependent instruction after it as the branch should be the last
++ instruction in the row. */
++ if (JUMP_P (ps_rtl_insn (ps, ps_i->id)))
++ {
++ if (first_must_follow)
++ return false;
++ if (last_in_row)
++ {
++ /* Make the branch the last in the row. New instructions
++ will be inserted at the beginning of the row or after the
++ last must_precede instruction thus the branch is guaranteed
++ to remain the last instruction in the row. */
++ last_in_row->next_in_row = ps_i;
++ ps_i->prev_in_row = last_in_row;
++ ps_i->next_in_row = NULL;
++ }
++ else
++ ps->rows[row] = ps_i;
++ return true;
++ }
++
+ /* Now insert the node after INSERT_AFTER_PSI. */
+
+ if (! last_must_precede)
+@@ -2631,7 +3079,6 @@
+ {
+ ps_insn_ptr prev, next;
+ int row;
+- ddg_node_ptr next_node;
+
+ if (!ps || !ps_i)
+ return false;
+@@ -2641,11 +3088,9 @@
+ if (! ps_i->next_in_row)
+ return false;
+
+- next_node = ps_i->next_in_row->node;
+-
+ /* Check if next_in_row is dependent on ps_i, both having same sched
+ times (typically ANTI_DEP). If so, ps_i cannot skip over it. */
+- if (must_follow && TEST_BIT (must_follow, next_node->cuid))
++ if (must_follow && TEST_BIT (must_follow, ps_i->next_in_row->id))
+ return false;
+
+ /* Advance PS_I over its next_in_row in the doubly linked list. */
+@@ -2676,21 +3121,16 @@
+ before/after (respectively) the node pointed to by PS_I when scheduled
+ in the same cycle. */
+ static ps_insn_ptr
+-add_node_to_ps (partial_schedule_ptr ps, ddg_node_ptr node, int cycle,
++add_node_to_ps (partial_schedule_ptr ps, int id, int cycle,
+ sbitmap must_precede, sbitmap must_follow)
+ {
+ ps_insn_ptr ps_i;
+- int rest_count = 1;
+ int row = SMODULO (cycle, ps->ii);
+
+- if (ps->rows[row]
+- && ps->rows[row]->row_rest_count >= issue_rate)
++ if (ps->rows_length[row] >= issue_rate)
+ return NULL;
+
+- if (ps->rows[row])
+- rest_count += ps->rows[row]->row_rest_count;
+-
+- ps_i = create_ps_insn (node, rest_count, cycle);
++ ps_i = create_ps_insn (id, cycle);
+
+ /* Finds and inserts PS_I according to MUST_FOLLOW and
+ MUST_PRECEDE. */
+@@ -2700,6 +3140,7 @@
+ return NULL;
+ }
+
++ ps->rows_length[row] += 1;
+ return ps_i;
+ }
+
+@@ -2741,7 +3182,7 @@
+ crr_insn;
+ crr_insn = crr_insn->next_in_row)
+ {
+- rtx insn = crr_insn->node->insn;
++ rtx insn = ps_rtl_insn (ps, crr_insn->id);
+
+ if (!NONDEBUG_INSN_P (insn))
+ continue;
+@@ -2778,7 +3219,7 @@
+ cuid N must be come before/after (respectively) the node pointed to by
+ PS_I when scheduled in the same cycle. */
+ ps_insn_ptr
+-ps_add_node_check_conflicts (partial_schedule_ptr ps, ddg_node_ptr n,
++ps_add_node_check_conflicts (partial_schedule_ptr ps, int n,
+ int c, sbitmap must_precede,
+ sbitmap must_follow)
+ {
+@@ -2820,6 +3261,22 @@
+ return ps_i;
+ }
+
++/* Calculate the stage count of the partial schedule PS. The calculation
++ takes into account the rotation amount passed in ROTATION_AMOUNT. */
++int
++calculate_stage_count (partial_schedule_ptr ps, int rotation_amount)
++{
++ int new_min_cycle = PS_MIN_CYCLE (ps) - rotation_amount;
++ int new_max_cycle = PS_MAX_CYCLE (ps) - rotation_amount;
++ int stage_count = CALC_STAGE_COUNT (-1, new_min_cycle, ps->ii);
++
++ /* The calculation of stage count is done adding the number of stages
++ before cycle zero and after cycle zero. */
++ stage_count += CALC_STAGE_COUNT (new_max_cycle, 0, ps->ii);
++
++ return stage_count;
++}
++
+ /* Rotate the rows of PS such that insns scheduled at time
+ START_CYCLE will appear in row 0. Updates max/min_cycles. */
+ void
+@@ -2837,11 +3294,16 @@
+ for (i = 0; i < backward_rotates; i++)
+ {
+ ps_insn_ptr first_row = ps->rows[0];
++ int first_row_length = ps->rows_length[0];
+
+ for (row = 0; row < last_row; row++)
+- ps->rows[row] = ps->rows[row+1];
++ {
++ ps->rows[row] = ps->rows[row + 1];
++ ps->rows_length[row] = ps->rows_length[row + 1];
++ }
+
+ ps->rows[last_row] = first_row;
++ ps->rows_length[last_row] = first_row_length;
+ }
+
+ ps->max_cycle -= start_cycle;
+--- a/src/gcc/objc/ChangeLog
++++ b/src/gcc/objc/ChangeLog
+@@ -1,3 +1,18 @@
++2011-11-12 Iain Sandoe <iains@gcc.gnu.org>
++
++ Backport from mainline
++ 2011-10-29 Iain Sandoe <iains@gcc.gnu.org>
++
++ PR target/47997
++ * objc-act.c (objc_build_string_object): Remove redundant second
++ call to fix_string_type (). Add a checking assert that we are,
++ indeed, passed a STRING_CST.
++
++2011-11-12 Iain Sandoe <iains@gcc.gnu.org>
++
++ * objc-next-runtime-abi-01.c (objc_eh_personality): Use gcc personality
++ for Objective-C m32.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/gcc/objc/objc-act.c
++++ b/src/gcc/objc/objc-act.c
+@@ -3136,9 +3136,8 @@
+ struct string_descriptor *desc, key;
+ void **loc;
+
+- /* Prep the string argument. */
+- string = fix_string_type (string);
+- TREE_SET_CODE (string, STRING_CST);
++ /* We should be passed a STRING_CST. */
++ gcc_checking_assert (TREE_CODE (string) == STRING_CST);
+ length = TREE_STRING_LENGTH (string) - 1;
+
+ /* The target may have different ideas on how to construct an ObjC string
+--- a/src/gcc/objc/objc-next-runtime-abi-01.c
++++ b/src/gcc/objc/objc-next-runtime-abi-01.c
+@@ -2871,12 +2871,15 @@
+ return eh_id;
+ }
+
++/* For NeXT ABI 0 and 1, the personality routines are just those of the
++ underlying language. */
++
+ static tree
+ objc_eh_personality (void)
+ {
+ if (!objc_eh_personality_decl)
+ #ifndef OBJCPLUS
+- objc_eh_personality_decl = build_personality_function ("objc");
++ objc_eh_personality_decl = build_personality_function ("gcc");
+ #else
+ objc_eh_personality_decl = build_personality_function ("gxx");
+ #endif
+--- a/src/gcc/optabs.c
++++ b/src/gcc/optabs.c
+@@ -225,6 +225,61 @@
+ return 1;
+ }
+
++/* Given two input operands, OP0 and OP1, determine what the correct from_mode
++ for a widening operation would be. In most cases this would be OP0, but if
++ that's a constant it'll be VOIDmode, which isn't useful. */
++
++static enum machine_mode
++widened_mode (enum machine_mode to_mode, rtx op0, rtx op1)
++{
++ enum machine_mode m0 = GET_MODE (op0);
++ enum machine_mode m1 = GET_MODE (op1);
++ enum machine_mode result;
++
++ if (m0 == VOIDmode && m1 == VOIDmode)
++ return to_mode;
++ else if (m0 == VOIDmode || GET_MODE_SIZE (m0) < GET_MODE_SIZE (m1))
++ result = m1;
++ else
++ result = m0;
++
++ if (GET_MODE_SIZE (result) > GET_MODE_SIZE (to_mode))
++ return to_mode;
++
++ return result;
++}
++
++/* Find a widening optab even if it doesn't widen as much as we want.
++ E.g. if from_mode is HImode, and to_mode is DImode, and there is no
++ direct HI->SI insn, then return SI->DI, if that exists.
++ If PERMIT_NON_WIDENING is non-zero then this can be used with
++ non-widening optabs also. */
++
++enum insn_code
++find_widening_optab_handler_and_mode (optab op, enum machine_mode to_mode,
++ enum machine_mode from_mode,
++ int permit_non_widening,
++ enum machine_mode *found_mode)
++{
++ for (; (permit_non_widening || from_mode != to_mode)
++ && GET_MODE_SIZE (from_mode) <= GET_MODE_SIZE (to_mode)
++ && from_mode != VOIDmode;
++ from_mode = GET_MODE_WIDER_MODE (from_mode))
++ {
++ enum insn_code handler = widening_optab_handler (op, to_mode,
++ from_mode);
++
++ if (handler != CODE_FOR_nothing)
++ {
++ if (found_mode)
++ *found_mode = from_mode;
++ return handler;
++ }
++ }
++
++ return CODE_FOR_nothing;
++}
++
+ /* Widen OP to MODE and return the rtx for the widened operand. UNSIGNEDP
+ says whether OP is signed or unsigned. NO_EXTEND is nonzero if we need
+ not actually do a sign-extend or zero-extend, but can leave the
+@@ -399,6 +454,14 @@
+ return TYPE_UNSIGNED (type) ?
+ vec_widen_umult_lo_optab : vec_widen_smult_lo_optab;
+
++ case VEC_WIDEN_LSHIFT_HI_EXPR:
++ return TYPE_UNSIGNED (type) ?
++ vec_widen_ushiftl_hi_optab : vec_widen_sshiftl_hi_optab;
++
++ case VEC_WIDEN_LSHIFT_LO_EXPR:
++ return TYPE_UNSIGNED (type) ?
++ vec_widen_ushiftl_lo_optab : vec_widen_sshiftl_lo_optab;
++
+ case VEC_UNPACK_HI_EXPR:
+ return TYPE_UNSIGNED (type) ?
+ vec_unpacku_hi_optab : vec_unpacks_hi_optab;
+@@ -517,8 +580,9 @@
+ optab_for_tree_code (ops->code, TREE_TYPE (oprnd0), optab_default);
+ if (ops->code == WIDEN_MULT_PLUS_EXPR
+ || ops->code == WIDEN_MULT_MINUS_EXPR)
+- icode = (int) optab_handler (widen_pattern_optab,
+- TYPE_MODE (TREE_TYPE (ops->op2)));
++ icode = (int) find_widening_optab_handler (widen_pattern_optab,
++ TYPE_MODE (TREE_TYPE (ops->op2)),
++ tmode0, 0);
+ else
+ icode = (int) optab_handler (widen_pattern_optab, tmode0);
+ gcc_assert (icode != CODE_FOR_nothing);
+@@ -1389,7 +1453,9 @@
+ rtx target, int unsignedp, enum optab_methods methods,
+ rtx last)
+ {
+- int icode = (int) optab_handler (binoptab, mode);
++ enum machine_mode from_mode = widened_mode (mode, op0, op1);
++ int icode = (int) find_widening_optab_handler (binoptab, mode,
++ from_mode, 1);
+ enum machine_mode mode0 = insn_data[icode].operand[1].mode;
+ enum machine_mode mode1 = insn_data[icode].operand[2].mode;
+ enum machine_mode tmp_mode;
+@@ -1546,7 +1612,9 @@
+ /* If we can do it with a three-operand insn, do so. */
+
+ if (methods != OPTAB_MUST_WIDEN
+- && optab_handler (binoptab, mode) != CODE_FOR_nothing)
++ && find_widening_optab_handler (binoptab, mode,
++ widened_mode (mode, op0, op1), 1)
++ != CODE_FOR_nothing)
+ {
+ temp = expand_binop_directly (mode, binoptab, op0, op1, target,
+ unsignedp, methods, last);
+@@ -1586,8 +1654,9 @@
+
+ if (binoptab == smul_optab
+ && GET_MODE_WIDER_MODE (mode) != VOIDmode
+- && (optab_handler ((unsignedp ? umul_widen_optab : smul_widen_optab),
+- GET_MODE_WIDER_MODE (mode))
++ && (widening_optab_handler ((unsignedp ? umul_widen_optab
++ : smul_widen_optab),
++ GET_MODE_WIDER_MODE (mode), mode)
+ != CODE_FOR_nothing))
+ {
+ temp = expand_binop (GET_MODE_WIDER_MODE (mode),
+@@ -1618,9 +1687,11 @@
+ if (optab_handler (binoptab, wider_mode) != CODE_FOR_nothing
+ || (binoptab == smul_optab
+ && GET_MODE_WIDER_MODE (wider_mode) != VOIDmode
+- && (optab_handler ((unsignedp ? umul_widen_optab
+- : smul_widen_optab),
+- GET_MODE_WIDER_MODE (wider_mode))
++ && (find_widening_optab_handler ((unsignedp
++ ? umul_widen_optab
++ : smul_widen_optab),
++ GET_MODE_WIDER_MODE (wider_mode),
++ mode, 0)
+ != CODE_FOR_nothing)))
+ {
+ rtx xop0 = op0, xop1 = op1;
+@@ -2043,8 +2114,8 @@
+ && optab_handler (add_optab, word_mode) != CODE_FOR_nothing)
+ {
+ rtx product = NULL_RTX;
+-
+- if (optab_handler (umul_widen_optab, mode) != CODE_FOR_nothing)
++ if (widening_optab_handler (umul_widen_optab, mode, word_mode)
++ != CODE_FOR_nothing)
+ {
+ product = expand_doubleword_mult (mode, op0, op1, target,
+ true, methods);
+@@ -2053,7 +2124,8 @@
+ }
+
+ if (product == NULL_RTX
+- && optab_handler (smul_widen_optab, mode) != CODE_FOR_nothing)
++ && widening_optab_handler (smul_widen_optab, mode, word_mode)
++ != CODE_FOR_nothing)
+ {
+ product = expand_doubleword_mult (mode, op0, op1, target,
+ false, methods);
+@@ -2144,7 +2216,8 @@
+ wider_mode != VOIDmode;
+ wider_mode = GET_MODE_WIDER_MODE (wider_mode))
+ {
+- if (optab_handler (binoptab, wider_mode) != CODE_FOR_nothing
++ if (find_widening_optab_handler (binoptab, wider_mode, mode, 1)
++ != CODE_FOR_nothing
+ || (methods == OPTAB_LIB
+ && optab_libfunc (binoptab, wider_mode)))
+ {
+@@ -6171,6 +6244,9 @@
+ init_optab (usashl_optab, US_ASHIFT);
+ init_optab (ashr_optab, ASHIFTRT);
+ init_optab (lshr_optab, LSHIFTRT);
++ init_optabv (vashl_optab, ASHIFT);
++ init_optabv (vashr_optab, ASHIFTRT);
++ init_optabv (vlshr_optab, LSHIFTRT);
+ init_optab (rotl_optab, ROTATE);
+ init_optab (rotr_optab, ROTATERT);
+ init_optab (smin_optab, SMIN);
+@@ -6283,6 +6359,10 @@
+ init_optab (vec_widen_umult_lo_optab, UNKNOWN);
+ init_optab (vec_widen_smult_hi_optab, UNKNOWN);
+ init_optab (vec_widen_smult_lo_optab, UNKNOWN);
++ init_optab (vec_widen_ushiftl_hi_optab, UNKNOWN);
++ init_optab (vec_widen_ushiftl_lo_optab, UNKNOWN);
++ init_optab (vec_widen_sshiftl_hi_optab, UNKNOWN);
++ init_optab (vec_widen_sshiftl_lo_optab, UNKNOWN);
+ init_optab (vec_unpacks_hi_optab, UNKNOWN);
+ init_optab (vec_unpacks_lo_optab, UNKNOWN);
+ init_optab (vec_unpacku_hi_optab, UNKNOWN);
+--- a/src/gcc/optabs.h
++++ b/src/gcc/optabs.h
+@@ -42,6 +42,11 @@
+ int insn_code;
+ };
+
++struct widening_optab_handlers
++{
++ struct optab_handlers handlers[NUM_MACHINE_MODES][NUM_MACHINE_MODES];
++};
++
+ struct optab_d
+ {
+ enum rtx_code code;
+@@ -50,6 +55,7 @@
+ void (*libcall_gen)(struct optab_d *, const char *name, char suffix,
+ enum machine_mode);
+ struct optab_handlers handlers[NUM_MACHINE_MODES];
++ struct widening_optab_handlers *widening;
+ };
+ typedef struct optab_d * optab;
+
+@@ -344,6 +350,12 @@
+ OTI_vec_widen_umult_lo,
+ OTI_vec_widen_smult_hi,
+ OTI_vec_widen_smult_lo,
++ /* Widening shift left.
++ The high/low part of the resulting vector is returned. */
++ OTI_vec_widen_ushiftl_hi,
++ OTI_vec_widen_ushiftl_lo,
++ OTI_vec_widen_sshiftl_hi,
++ OTI_vec_widen_sshiftl_lo,
+ /* Extract and widen the high/low part of a vector of signed or
+ floating point elements. */
+ OTI_vec_unpacks_hi,
+@@ -536,6 +548,10 @@
+ #define vec_widen_umult_lo_optab (&optab_table[OTI_vec_widen_umult_lo])
+ #define vec_widen_smult_hi_optab (&optab_table[OTI_vec_widen_smult_hi])
+ #define vec_widen_smult_lo_optab (&optab_table[OTI_vec_widen_smult_lo])
++#define vec_widen_ushiftl_hi_optab (&optab_table[OTI_vec_widen_ushiftl_hi])
++#define vec_widen_ushiftl_lo_optab (&optab_table[OTI_vec_widen_ushiftl_lo])
++#define vec_widen_sshiftl_hi_optab (&optab_table[OTI_vec_widen_sshiftl_hi])
++#define vec_widen_sshiftl_lo_optab (&optab_table[OTI_vec_widen_sshiftl_lo])
+ #define vec_unpacks_hi_optab (&optab_table[OTI_vec_unpacks_hi])
+ #define vec_unpacks_lo_optab (&optab_table[OTI_vec_unpacks_lo])
+ #define vec_unpacku_hi_optab (&optab_table[OTI_vec_unpacku_hi])
+@@ -578,6 +594,9 @@
+ COI_satfract,
+ COI_satfractuns,
+
++ COI_vec_load_lanes,
++ COI_vec_store_lanes,
++
+ COI_MAX
+ };
+
+@@ -598,6 +617,8 @@
+ #define fractuns_optab (&convert_optab_table[COI_fractuns])
+ #define satfract_optab (&convert_optab_table[COI_satfract])
+ #define satfractuns_optab (&convert_optab_table[COI_satfractuns])
++#define vec_load_lanes_optab (&convert_optab_table[COI_vec_load_lanes])
++#define vec_store_lanes_optab (&convert_optab_table[COI_vec_store_lanes])
+
+ /* Contains the optab used for each rtx code. */
+ extern optab code_to_optab[NUM_RTX_CODE + 1];
+@@ -794,6 +815,15 @@
+ extern void emit_unop_insn (int, rtx, rtx, enum rtx_code);
+ extern bool maybe_emit_unop_insn (int, rtx, rtx, enum rtx_code);
+
++/* Find a widening optab even if it doesn't widen as much as we want. */
++#define find_widening_optab_handler(A,B,C,D) \
++ find_widening_optab_handler_and_mode (A, B, C, D, NULL)
++extern enum insn_code find_widening_optab_handler_and_mode (optab,
++ enum machine_mode,
++ enum machine_mode,
++ int,
++ enum machine_mode *);
++
+ /* An extra flag to control optab_for_tree_code's behavior. This is needed to
+ distinguish between machines with a vector shift that takes a scalar for the
+ shift amount vs. machines that take a vector for the shift amount. */
+@@ -869,6 +899,23 @@
+ + (int) CODE_FOR_nothing);
+ }
+
++/* Like optab_handler, but for widening_operations that have a TO_MODE and
++ a FROM_MODE. */
++
++static inline enum insn_code
++widening_optab_handler (optab op, enum machine_mode to_mode,
++ enum machine_mode from_mode)
++{
++ if (to_mode == from_mode || from_mode == VOIDmode)
++ return optab_handler (op, to_mode);
++
++ if (op->widening)
++ return (enum insn_code) (op->widening->handlers[(int) to_mode][(int) from_mode].insn_code
++ + (int) CODE_FOR_nothing);
++
++ return CODE_FOR_nothing;
++}
++
+ /* Record that insn CODE should be used to implement mode MODE of OP. */
+
+ static inline void
+@@ -877,6 +924,26 @@
+ op->handlers[(int) mode].insn_code = (int) code - (int) CODE_FOR_nothing;
+ }
+
++/* Like set_optab_handler, but for widening operations that have a TO_MODE
++ and a FROM_MODE. */
++
++static inline void
++set_widening_optab_handler (optab op, enum machine_mode to_mode,
++ enum machine_mode from_mode, enum insn_code code)
++{
++ if (to_mode == from_mode)
++ set_optab_handler (op, to_mode, code);
++ else
++ {
++ if (op->widening == NULL)
++ op->widening = (struct widening_optab_handlers *)
++ xcalloc (1, sizeof (struct widening_optab_handlers));
++
++ op->widening->handlers[(int) to_mode][(int) from_mode].insn_code
++ = (int) code - (int) CODE_FOR_nothing;
++ }
++}
++
+ /* Return the insn used to perform conversion OP from mode FROM_MODE
+ to mode TO_MODE; return CODE_FOR_nothing if the target does not have
+ such an insn. */
+--- a/src/gcc/opts.c
++++ b/src/gcc/opts.c
+@@ -823,6 +823,12 @@
+ opts->x_flag_split_stack = 0;
+ }
+ }
++
++ /* Set PARAM_MAX_STORES_TO_SINK to 0 if either vectorization or if-conversion
++ is disabled. */
++ if (!opts->x_flag_tree_vectorize || !opts->x_flag_tree_loop_if_convert)
++ maybe_set_param_value (PARAM_MAX_STORES_TO_SINK, 0,
++ opts->x_param_values, opts_set->x_param_values);
+ }
+
+ #define LEFT_COLUMN 27
+--- a/src/gcc/params.def
++++ b/src/gcc/params.def
+@@ -344,6 +344,11 @@
+ "sms-max-ii-factor",
+ "A factor for tuning the upper bound that swing modulo scheduler uses for scheduling a loop",
+ 100, 0, 0)
++/* The minimum value of stage count that swing modulo scheduler will generate. */
++DEFPARAM(PARAM_SMS_MIN_SC,
++ "sms-min-sc",
++ "The minimum value of stage count that swing modulo scheduler will generate.",
++ 2, 1, 1)
+ DEFPARAM(PARAM_SMS_DFA_HISTORY,
+ "sms-dfa-history",
+ "The number of cycles the swing modulo scheduler considers when checking conflicts using DFA",
+@@ -883,6 +888,13 @@
+ "name lookup fails",
+ 1000, 0, 0)
+
++/* Maximum number of conditional store pairs that can be sunk. */
++DEFPARAM (PARAM_MAX_STORES_TO_SINK,
++ "max-stores-to-sink",
++ "Maximum number of conditional store pairs that can be sunk",
++ 2, 0, 0)
++
++
+ /*
+ Local variables:
+ mode:c
+--- a/src/gcc/params.h
++++ b/src/gcc/params.h
+@@ -206,4 +206,6 @@
+ PARAM_VALUE (PARAM_PREFETCH_MIN_INSN_TO_MEM_RATIO)
+ #define MIN_NONDEBUG_INSN_UID \
+ PARAM_VALUE (PARAM_MIN_NONDEBUG_INSN_UID)
++#define MAX_STORES_TO_SINK \
++ PARAM_VALUE (PARAM_MAX_STORES_TO_SINK)
+ #endif /* ! GCC_PARAMS_H */
+--- a/src/gcc/po/ChangeLog
++++ b/src/gcc/po/ChangeLog
+@@ -1,3 +1,7 @@
++2011-10-30 Joseph Myers <joseph@codesourcery.com>
++
++ * ja.po: Update.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/gcc/po/ja.po
++++ b/src/gcc/po/ja.po
+@@ -20,7 +20,7 @@
+ "Project-Id-Version: gcc 4.6.1\n"
+ "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+ "POT-Creation-Date: 2011-06-21 10:27+0000\n"
+-"PO-Revision-Date: 2011-10-25 22:36+0900\n"
++"PO-Revision-Date: 2011-10-30 18:48+0900\n"
+ "Last-Translator: Yasuaki Taniguchi <yasuakit@gmail.com>\n"
+ "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
+ "Language: ja\n"
+@@ -834,12 +834,12 @@
+ #: gcov.c:420
+ #, c-format
+ msgid " -a, --all-blocks Show information for every basic block\n"
+-msgstr ""
++msgstr " -a, --all-blocks å„基本ブロックã«é–¢ã™ã‚‹æƒ…報を表示ã™ã‚‹\n"
+
+ #: gcov.c:421
+ #, c-format
+ msgid " -b, --branch-probabilities Include branch probabilities in output\n"
+-msgstr ""
++msgstr " -b, --branch-probabilities 出力ã«åˆ†å²å¯èƒ½æ€§æƒ…報をå«ã‚ã‚‹\n"
+
+ #: gcov.c:422
+ #, c-format
+@@ -847,6 +847,8 @@
+ " -c, --branch-counts Given counts of branches taken\n"
+ " rather than percentages\n"
+ msgstr ""
++" -c, --branch-counts 分å²ã«é–¢ã™ã‚‹ç™¾åˆ†çއã§ã¯ç„¡ã行ã‚れãŸ\n"
++" 回数をå–å¾—ã™ã‚‹\n"
+
+ #: gcov.c:424
+ #, c-format
+@@ -859,21 +861,23 @@
+ " -l, --long-file-names Use long output file names for included\n"
+ " source files\n"
+ msgstr ""
++" -l, --long-file-names インクルードã•れãŸã‚½ãƒ¼ã‚¹ãƒ•ァイルã«é–¢ã™ã‚‹é•·ã„\n"
++" 出力ファイルåを使用ã™ã‚‹\n"
+
+ #: gcov.c:427
+ #, c-format
+ msgid " -f, --function-summaries Output summaries for each function\n"
+-msgstr ""
++msgstr " -f, --function-summaries å„関数ã«é–¢ã™ã‚‹è¦ç´„を出力ã™ã‚‹\n"
+
+ #: gcov.c:428
+ #, c-format
+ msgid " -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n"
+-msgstr ""
++msgstr " -o, --object-directory DIR|FILE オブジェクトファイルを DIR 内ã¾ãŸã¯å‘¼ã³å‡ºã—用 FILE å†…ã§æ¤œç´¢ã™ã‚‹\n"
+
+ #: gcov.c:429
+ #, c-format
+ msgid " -p, --preserve-paths Preserve all pathname components\n"
+-msgstr ""
++msgstr " -p, --preserve-paths ã™ã¹ã¦ã®ãƒ‘スåè¦ç´ ã‚’ä¿è­·ã™ã‚‹\n"
+
+ #: gcov.c:430
+ #, c-format
+@@ -977,7 +981,7 @@
+ #: gcov.c:1045
+ #, c-format
+ msgid "%s:cannot open data file, assuming not executed\n"
+-msgstr ""
++msgstr "%s:データファイルを開ã‘ã¾ã›ã‚“。実行ã•れã¦ã„ãªã„ã¨è¦‹ãªã—ã¾ã™\n"
+
+ #: gcov.c:1052
+ #, c-format
+@@ -1027,7 +1031,7 @@
+ #: gcov.c:1379
+ #, c-format
+ msgid "%s:graph is unsolvable for '%s'\n"
+-msgstr ""
++msgstr "%s: '%s' 用ã®ã‚°ãƒ©ãƒ•ãŒè§£æ±ºã§ãã¾ã›ã‚“\n"
+
+ #: gcov.c:1459
+ #, c-format
+@@ -1037,7 +1041,7 @@
+ #: gcov.c:1462
+ #, c-format
+ msgid "Lines executed:%s of %d\n"
+-msgstr ""
++msgstr "実行ã•れãŸè¡Œ:%s of %d\n"
+
+ #: gcov.c:1466
+ #, c-format
+@@ -1047,7 +1051,7 @@
+ #: gcov.c:1472
+ #, c-format
+ msgid "Branches executed:%s of %d\n"
+-msgstr ""
++msgstr "実行ã•れãŸåˆ†å²:%s of %d\n"
+
+ #: gcov.c:1476
+ #, c-format
+@@ -1057,12 +1061,12 @@
+ #: gcov.c:1482
+ #, c-format
+ msgid "No branches\n"
+-msgstr ""
++msgstr "分å²ãŒã‚りã¾ã›ã‚“\n"
+
+ #: gcov.c:1484
+ #, c-format
+ msgid "Calls executed:%s of %d\n"
+-msgstr ""
++msgstr "実行ã•れãŸå‘¼ã³å‡ºã—:%s of %d\n"
+
+ #: gcov.c:1488
+ #, c-format
+@@ -1075,24 +1079,24 @@
+ msgstr "%s: '%s' ã«å¯¾ã™ã‚‹è¡ŒãŒã‚りã¾ã›ã‚“\n"
+
+ #: gcov.c:1843
+-#, fuzzy, c-format
++#, c-format
+ msgid "call %2d returned %s\n"
+-msgstr "呼ã³å‡ºã— %d ã®æˆ»ã‚Š = %d\n"
++msgstr ""
+
+ #: gcov.c:1848
+-#, fuzzy, c-format
++#, c-format
+ msgid "call %2d never executed\n"
+-msgstr "呼ã³å‡ºã— %d ã¯ä¸€åº¦ã‚‚実行ã›ãš\n"
++msgstr ""
+
+ #: gcov.c:1853
+-#, fuzzy, c-format
++#, c-format
+ msgid "branch %2d taken %s%s\n"
+-msgstr "ブランム%d å—ç† = %d%%\n"
++msgstr ""
+
+ #: gcov.c:1857
+-#, fuzzy, c-format
++#, c-format
+ msgid "branch %2d never executed\n"
+-msgstr "ブランム%d ã¯ä¸€åº¦ã‚‚実行ã•れãš\n"
++msgstr ""
+
+ #: gcov.c:1862
+ #, c-format
+@@ -1100,9 +1104,9 @@
+ msgstr ""
+
+ #: gcov.c:1865
+-#, fuzzy, c-format
++#, c-format
+ msgid "unconditional %2d never executed\n"
+-msgstr "呼ã³å‡ºã— %d ã¯ä¸€åº¦ã‚‚実行ã›ãš\n"
++msgstr ""
+
+ #: gcov.c:1901
+ #, c-format
+@@ -1412,11 +1416,11 @@
+
+ #: opts.c:1183
+ msgid "The following options take separate arguments"
+-msgstr ""
++msgstr "次ã®ã‚ªãƒ—ションã¯åˆ†é›¢ã—ãŸå¼•æ•°ã‚’å–りã¾ã™"
+
+ #: opts.c:1185
+ msgid "The following options take joined arguments"
+-msgstr ""
++msgstr "次ã®ã‚ªãƒ—ションã¯çµåˆã—ãŸå¼•æ•°ã‚’å–りã¾ã™"
+
+ #: opts.c:1196
+ msgid "The following options are language-related"
+@@ -1472,7 +1476,7 @@
+ #: targhooks.c:1469
+ #, c-format
+ msgid "created and used with differing settings of '%s'"
+-msgstr ""
++msgstr "ä½œæˆæ™‚ã¨ä½¿ç”¨æ™‚ã§ '%s' ã®è¨­å®šãŒç•°ãªã‚Šã¾ã™"
+
+ #: targhooks.c:1471
+ msgid "out of memory"
+@@ -1480,11 +1484,11 @@
+
+ #: targhooks.c:1486
+ msgid "created and used with different settings of -fpic"
+-msgstr ""
++msgstr "ä½œæˆæ™‚ã¨ä½¿ç”¨æ™‚ã§ -fpic ã®è¨­å®šãŒç•°ãªã‚Šã¾ã™"
+
+ #: targhooks.c:1488
+ msgid "created and used with different settings of -fpie"
+-msgstr ""
++msgstr "ä½œæˆæ™‚ã¨ä½¿ç”¨æ™‚ã§ -fpie ã®è¨­å®šãŒç•°ãªã‚Šã¾ã™"
+
+ #: tlink.c:386
+ #, c-format
+@@ -1717,11 +1721,11 @@
+
+ #: params.def:100
+ msgid "The maximum depth of recursive inlining for inline functions"
+-msgstr ""
++msgstr "インライン関数をå†å¸°çš„ã«ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³åŒ–ã™ã‚‹æ™‚ã®æœ€å¤§æ·±åº¦"
+
+ #: params.def:105
+ msgid "The maximum depth of recursive inlining for non-inline functions"
+-msgstr ""
++msgstr "éžã‚¤ãƒ³ãƒ©ã‚¤ãƒ³é–¢æ•°ã‚’å†å¸°çš„ã«ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³åŒ–ã™ã‚‹æ™‚ã®æœ€å¤§æ·±åº¦"
+
+ #: params.def:110
+ msgid "Inline recursively only when the probability of call being executed exceeds the parameter"
+@@ -1761,16 +1765,15 @@
+
+ #: params.def:180
+ msgid "The size of function body to be considered large"
+-msgstr ""
++msgstr "大ãã„ã¨è¦‹ãªã•れる関数本体ã®ã‚µã‚¤ã‚º"
+
+ #: params.def:184
+ msgid "Maximal growth due to inlining of large function (in percent)"
+ msgstr ""
+
+ #: params.def:188
+-#, fuzzy
+ msgid "The size of translation unit to be considered large"
+-msgstr "翻訳å˜ä½å…¨ä½“をファイルã«ãƒ€ãƒ³ãƒ—ã™ã‚‹"
++msgstr "大ãã„ã¨è¦‹ãªã•れる翻訳å˜ä½ã®ã‚µã‚¤ã‚º"
+
+ #: params.def:192
+ msgid "How much can given compilation unit grow because of the inlining (in percent)"
+@@ -1786,20 +1789,19 @@
+
+ #: params.def:204
+ msgid "The size of stack frame to be considered large"
+-msgstr ""
++msgstr "大ãã„ã¨è¦‹ãªã•れるスタックフレームã®ã‚µã‚¤ã‚º"
+
+ #: params.def:208
+ msgid "Maximal stack frame growth due to inlining (in percent)"
+-msgstr ""
++msgstr "インライン化ã«ã‚ˆã£ã¦å¢—加ã™ã‚‹ã‚¹ã‚¿ãƒƒã‚¯ãƒ•ãƒ¬ãƒ¼ãƒ ã®æœ€å¤§é‡ (百分率)"
+
+ #: params.def:215
+ msgid "The maximum amount of memory to be allocated by GCSE"
+-msgstr ""
++msgstr "GCSE ã«ã‚ˆã£ã¦é…ç½®ã•ã‚Œã‚‹ãƒ¡ãƒ¢ãƒªã®æœ€å¤§é‡"
+
+ #: params.def:222
+-#, fuzzy
+ msgid "The maximum ratio of insertions to deletions of expressions in GCSE"
+-msgstr "RPTS ç”¨ã®æœ€å¤§å復数を指定ã™ã‚‹"
++msgstr ""
+
+ #: params.def:233
+ msgid "The threshold ratio for performing partial redundancy elimination after reload"
+@@ -1963,9 +1965,8 @@
+ msgstr ""
+
+ #: params.def:470
+-#, fuzzy
+ msgid "Bound on number of iv uses in loop optimized in iv optimizations"
+-msgstr "目立ãŸãªã„ã€ã‚³ã‚¹ãƒˆã®ã‹ã‹ã‚‹æœ€é©åŒ–を行ãªã†"
++msgstr ""
+
+ #: params.def:478
+ msgid "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization"
+@@ -2044,9 +2045,8 @@
+ msgstr ""
+
+ #: params.def:594
+-#, fuzzy
+ msgid "The maximum number of iterations through CFG to extend regions"
+-msgstr "RPTS ç”¨ã®æœ€å¤§å復数を指定ã™ã‚‹"
++msgstr ""
+
+ #: params.def:599
+ msgid "The maximum conflict delay for an insn to be considered for speculative motion"
+@@ -2077,9 +2077,8 @@
+ msgstr ""
+
+ #: params.def:637
+-#, fuzzy
+ msgid "The upper bound for sharing integer constants"
+-msgstr "`%s' ã®åˆ—æŒ™å€¤ãŒæ•´æ•°å®šæ•°ã§ã¯ã‚りã¾ã›ã‚“"
++msgstr "整数定数を共有ã™ã‚‹ãŸã‚ã®ä¸Šé™å€¤"
+
+ #: params.def:656
+ msgid "Minimum number of virtual mappings to consider switching to full virtual renames"
+@@ -2111,11 +2110,11 @@
+
+ #: params.def:714
+ msgid "The number of insns executed before prefetch is completed"
+-msgstr ""
++msgstr "プリフェッãƒãŒå®Œäº†ã™ã‚‹å‰ã«å®Ÿè¡Œã•れる命令数"
+
+ #: params.def:721
+ msgid "The number of prefetches that can run at the same time"
+-msgstr ""
++msgstr "åŒæ™‚ã«å®Ÿè¡Œå¯èƒ½ãªãƒ—リフェッãƒã®æ•°"
+
+ #: params.def:728
+ msgid "The size of L1 cache"
+@@ -2162,9 +2161,8 @@
+ msgstr ""
+
+ #: params.def:806
+-#, fuzzy
+ msgid "maximum number of parameters in a SCoP"
+-msgstr "RPTS ç”¨ã®æœ€å¤§å復数を指定ã™ã‚‹"
++msgstr "SCoP 内ã®ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ã®æœ€å¤§æ•°"
+
+ #: params.def:813
+ msgid "maximum number of basic blocks per function to be analyzed by Graphite"
+@@ -2597,9 +2595,9 @@
+ msgstr "無効㪠%%E 値"
+
+ #: config/alpha/alpha.c:5431 config/alpha/alpha.c:5479
+-#, fuzzy, c-format
++#, c-format
+ msgid "unknown relocation unspec"
+-msgstr "䏿˜Žãªè¨­å®šæ¸ˆã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿åž‹ã§ã™"
++msgstr ""
+
+ #: config/alpha/alpha.c:5440 config/crx/crx.c:1119
+ #: config/rs6000/rs6000.c:16490 config/spu/spu.c:1726
+@@ -3000,32 +2998,32 @@
+ #: config/i386/i386.c:14106 config/i386/i386.c:14146
+ #, c-format
+ msgid "operand is not a condition code, invalid operand code 'D'"
+-msgstr ""
++msgstr "被演算å­ã¯æ¡ä»¶ã‚³ãƒ¼ãƒ‰ã§ã¯ã‚りã¾ã›ã‚“。無効ãªè¢«æ¼”ç®—å­ã‚³ãƒ¼ãƒ‰ 'D' ã§ã™"
+
+ #: config/i386/i386.c:14172
+ #, c-format
+ msgid "operand is neither a constant nor a condition code, invalid operand code 'C'"
+-msgstr ""
++msgstr "被演算å­ã¯å®šæ•°ã§ã‚‚æ¡ä»¶ã‚³ãƒ¼ãƒ‰ã§ã‚‚ã‚りã¾ã›ã‚“。無効ãªè¢«æ¼”ç®—å­ã‚³ãƒ¼ãƒ‰ 'C' ã§ã™"
+
+ #: config/i386/i386.c:14182
+ #, c-format
+ msgid "operand is neither a constant nor a condition code, invalid operand code 'F'"
+-msgstr ""
++msgstr "被演算å­ã¯å®šæ•°ã§ã‚‚æ¡ä»¶ã‚³ãƒ¼ãƒ‰ã§ã‚‚ã‚りã¾ã›ã‚“。無効ãªè¢«æ¼”ç®—å­ã‚³ãƒ¼ãƒ‰ 'F' ã§ã™"
+
+ #: config/i386/i386.c:14200
+ #, c-format
+ msgid "operand is neither a constant nor a condition code, invalid operand code 'c'"
+-msgstr ""
++msgstr "被演算å­ã¯å®šæ•°ã§ã‚‚æ¡ä»¶ã‚³ãƒ¼ãƒ‰ã§ã‚‚ã‚りã¾ã›ã‚“。無効ãªè¢«æ¼”ç®—å­ã‚³ãƒ¼ãƒ‰ 'c' ã§ã™"
+
+ #: config/i386/i386.c:14210
+ #, c-format
+ msgid "operand is neither a constant nor a condition code, invalid operand code 'f'"
+-msgstr ""
++msgstr "被演算å­ã¯å®šæ•°ã§ã‚‚æ¡ä»¶ã‚³ãƒ¼ãƒ‰ã§ã‚‚ã‚りã¾ã›ã‚“。無効ãªè¢«æ¼”ç®—å­ã‚³ãƒ¼ãƒ‰ 'f' ã§ã™"
+
+ #: config/i386/i386.c:14313
+ #, c-format
+ msgid "operand is not a condition code, invalid operand code 'Y'"
+-msgstr ""
++msgstr "被演算å­ã¯æ¡ä»¶ã‚³ãƒ¼ãƒ‰ã§ã¯ã‚りã¾ã›ã‚“。無効ãªè¢«æ¼”ç®—å­ã‚³ãƒ¼ãƒ‰ 'Y' ã§ã™"
+
+ #: config/i386/i386.c:14339
+ #, c-format
+@@ -3098,7 +3096,7 @@
+ #: config/lm32/lm32.c:529
+ #, c-format
+ msgid "only 0.0 can be loaded as an immediate"
+-msgstr ""
++msgstr "å³å€¤ã¨ã—ã¦ãƒ­ãƒ¼ãƒ‰ã§ãã‚‹ã®ã¯ 0.0 ã®ã¿ã§ã™"
+
+ #: config/lm32/lm32.c:599
+ msgid "bad operand"
+@@ -3138,15 +3136,15 @@
+
+ #: config/m32r/m32r.c:2290
+ msgid "pre-increment address is not a register"
+-msgstr ""
++msgstr "å‰ç½®å¢—分アドレスãŒãƒ¬ã‚¸ã‚¹ã‚¿ã§ã¯ã‚りã¾ã›ã‚“"
+
+ #: config/m32r/m32r.c:2297
+ msgid "pre-decrement address is not a register"
+-msgstr ""
++msgstr "å‰ç½®æ¸›åˆ†ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãƒ¬ã‚¸ã‚¹ã‚¿ã§ã¯ã‚りã¾ã›ã‚“"
+
+ #: config/m32r/m32r.c:2304
+ msgid "post-increment address is not a register"
+-msgstr ""
++msgstr "後置増分アドレスãŒãƒ¬ã‚¸ã‚¹ã‚¿ã§ã¯ã‚りã¾ã›ã‚“"
+
+ #: config/m32r/m32r.c:2380 config/m32r/m32r.c:2394
+ #: config/rs6000/rs6000.c:25500
+@@ -3252,7 +3250,7 @@
+
+ #: config/mmix/mmix.c:1589 config/mmix/mmix.c:1719
+ msgid "MMIX Internal: Expected a CONST_INT, not this"
+-msgstr ""
++msgstr "MMIX 内部: CONST_INT ãŒäºˆæœŸã•れã¾ã™ãŒã€ç•°ãªã£ã¦ã„ã¾ã™"
+
+ #: config/mmix/mmix.c:1668
+ msgid "MMIX Internal: Bad value for 'm', not a CONST_INT"
+@@ -3260,11 +3258,11 @@
+
+ #: config/mmix/mmix.c:1687
+ msgid "MMIX Internal: Expected a register, not this"
+-msgstr ""
++msgstr "MMIX 内部: レジスタãŒäºˆæœŸã•れã¾ã™ãŒã€ç•°ãªã£ã¦ã„ã¾ã™"
+
+ #: config/mmix/mmix.c:1697
+ msgid "MMIX Internal: Expected a constant, not this"
+-msgstr ""
++msgstr "MMIX 内部: 定数ãŒäºˆæœŸã•れã¾ã™ãŒã€ç•°ãªã£ã¦ã„ã¾ã™"
+
+ #. We need the original here.
+ #: config/mmix/mmix.c:1781
+@@ -3301,7 +3299,7 @@
+
+ #: config/picochip/picochip.c:2983 config/picochip/picochip.c:3015
+ msgid "Bad address, not (reg+disp):"
+-msgstr ""
++msgstr "誤ã£ãŸã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã™ã€‚ (reg+disp) ã§ã¯ã‚りã¾ã›ã‚“:"
+
+ #: config/picochip/picochip.c:3029
+ msgid "Bad address, not register:"
+@@ -3526,15 +3524,15 @@
+
+ #: config/sh/sh.c:9271
+ msgid "created and used with different architectures / ABIs"
+-msgstr ""
++msgstr "ä½œæˆæ™‚ã¨ä½¿ç”¨æ™‚㧠アーキテクãƒãƒ£/ABI ãŒç•°ãªã‚Šã¾ã™"
+
+ #: config/sh/sh.c:9273
+ msgid "created and used with different ABIs"
+-msgstr ""
++msgstr "ä½œæˆæ™‚ã¨ä½¿ç”¨æ™‚ã§ ABI ãŒç•°ãªã‚Šã¾ã™"
+
+ #: config/sh/sh.c:9275
+ msgid "created and used with different endianness"
+-msgstr ""
++msgstr "ä½œæˆæ™‚ã¨ä½¿ç”¨æ™‚ã§ã‚¨ãƒ³ãƒ‡ã‚£ã‚¢ãƒ³ãŒç•°ãªã‚Šã¾ã™"
+
+ #: config/sparc/sparc.c:7445 config/sparc/sparc.c:7451
+ #, c-format
+@@ -3617,7 +3615,7 @@
+ #: config/vax/vax.c:427
+ #, c-format
+ msgid "symbol with offset used in PIC mode"
+-msgstr ""
++msgstr "PIC モードã§ä½¿ç”¨ã•れるオフセット付ãã®ã‚·ãƒ³ãƒœãƒ«ã§ã™"
+
+ #: config/vax/vax.c:513
+ #, c-format
+@@ -3837,19 +3835,19 @@
+ msgstr "%s:%d:%d: ã“ã“ã‹ã‚‰å†å¸°çš„ã«å®Ÿä½“化ã•れã¾ã—ãŸ"
+
+ #: cp/error.c:2913
+-#, fuzzy, c-format
++#, c-format
+ msgid "%s:%d:%d: instantiated from here"
+ msgstr "%s:%d:%d: ã“ã“ã‹ã‚‰å®Ÿä½“化ã•れã¾ã—ãŸ"
+
+ #: cp/error.c:2918
+ #, c-format
+ msgid "%s:%d: recursively instantiated from here"
+-msgstr ""
++msgstr "%s:%d: ã“ã“ã‹ã‚‰å†å¸°çš„ã«å®Ÿä½“化ã•れã¾ã—ãŸ"
+
+ #: cp/error.c:2919
+-#, fuzzy, c-format
++#, c-format
+ msgid "%s:%d: instantiated from here"
+-msgstr "%s:%d: ã“ã“ã§å®Ÿä½“化ã•れã¾ã—ãŸ\n"
++msgstr "%s:%d: ã“ã“ã‹ã‚‰å®Ÿä½“化ã•れã¾ã—ãŸ"
+
+ #: cp/error.c:2962
+ #, c-format
+@@ -4029,22 +4027,21 @@
+ #: fortran/expr.c:607
+ #, c-format
+ msgid "Constant expression required at %C"
+-msgstr ""
++msgstr "%C ã§ã¯å®šæ•°å¼ãŒè¦æ±‚ã•れã¾ã™"
+
+ #: fortran/expr.c:610
+ #, c-format
+ msgid "Integer expression required at %C"
+-msgstr ""
++msgstr "%C ã§ã¯æ•´æ•°å¼ãŒè¦æ±‚ã•れã¾ã™"
+
+ #: fortran/expr.c:615
+-#, fuzzy, c-format
++#, c-format
+ msgid "Integer value too large in expression at %C"
+-msgstr "å¼ã®æ•´æ•°ãŒã‚ªãƒ¼ãƒãƒ¼ãƒ•ローã—ã¾ã—ãŸ"
++msgstr "%C ã®å¼å†…ã§æ•´æ•°å€¤ãŒå¤§ãã™ãŽã¾ã™"
+
+ #: fortran/expr.c:3147
+-#, fuzzy
+ msgid "array assignment"
+-msgstr "代入"
++msgstr "é…列代入"
+
+ #: fortran/gfortranspec.c:303
+ #, c-format
+@@ -4080,7 +4077,7 @@
+
+ #: fortran/io.c:551
+ msgid "Unexpected element '%c' in format string at %L"
+-msgstr ""
++msgstr "予期ã—ãªã„è¦ç´  '%c' ãŒæ›¸å¼æ–‡å­—列内 (ä½ç½® %L) ã«ã‚りã¾ã™"
+
+ #: fortran/io.c:553
+ msgid "Unexpected end of format string"
+@@ -4088,15 +4085,15 @@
+
+ #: fortran/io.c:554
+ msgid "Zero width in format descriptor"
+-msgstr ""
++msgstr "å¹… 0 ã®æ›¸å¼è¨˜è¿°å­ã§ã™"
+
+ #: fortran/io.c:574
+ msgid "Missing leading left parenthesis"
+-msgstr ""
++msgstr "å‰ã«å·¦å°æ‹¬å¼§ãŒã‚りã¾ã›ã‚“"
+
+ #: fortran/io.c:603
+ msgid "Left parenthesis required after '*'"
+-msgstr ""
++msgstr "'*' ã®å¾Œã«ã¯å·¦å°æ‹¬å¼§ãŒå¿…è¦ã§ã™"
+
+ #: fortran/io.c:634
+ msgid "Expected P edit descriptor"
+@@ -4116,9 +4113,8 @@
+ msgstr ""
+
+ #: fortran/io.c:844
+-#, fuzzy
+ msgid "E specifier not allowed with g0 descriptor"
+-msgstr "åž‹æŒ‡å®šå­ `%s' 㯠struct ã‚„ class ã®å¾Œã«ã¯ä½¿ãˆã¾ã›ã‚“"
++msgstr ""
+
+ #: fortran/io.c:914
+ msgid "Positive exponent width required"
+@@ -4362,9 +4358,8 @@
+ msgstr ""
+
+ #: fortran/resolve.c:6233
+-#, fuzzy
+ msgid "End expression in DO loop"
+-msgstr "オペランドã¨ã—ã¦ç„¡åйãªå¼"
++msgstr ""
+
+ #: fortran/resolve.c:6237
+ msgid "Step expression in DO loop"
+@@ -4564,7 +4559,7 @@
+ #: java/jcf-dump.c:1148
+ #, c-format
+ msgid " --extdirs PATH Set extensions directory path\n"
+-msgstr ""
++msgstr " --extdirs PATH æ‹¡å¼µã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ‘スを設定ã™ã‚‹\n"
+
+ #: java/jcf-dump.c:1149
+ #, c-format
+@@ -4734,18 +4729,18 @@
+ #: config/pa/pa-hpux11.h:111 config/pa/pa64-hpux.h:30 config/pa/pa64-hpux.h:33
+ #: config/pa/pa64-hpux.h:42 config/pa/pa64-hpux.h:45
+ msgid "warning: consider linking with '-static' as system libraries with"
+-msgstr ""
++msgstr "警告: システムライブラリã¨ãƒªãƒ³ã‚¯ã™ã‚‹æ™‚㯠'-static' を指定ã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„"
+
+ #: config/pa/pa-hpux10.h:90 config/pa/pa-hpux10.h:93 config/pa/pa-hpux10.h:101
+ #: config/pa/pa-hpux10.h:104 config/pa/pa-hpux11.h:109
+ #: config/pa/pa-hpux11.h:112 config/pa/pa64-hpux.h:31 config/pa/pa64-hpux.h:34
+ #: config/pa/pa64-hpux.h:43 config/pa/pa64-hpux.h:46
+ msgid " profiling support are only provided in archive format"
+-msgstr ""
++msgstr " プロファイリングサãƒãƒ¼ãƒˆã¯æ›¸åº«ãƒ•ォーマット内ã§ã®ã¿æä¾›ã•れã¾ã™"
+
+ #: config/rs6000/darwin.h:99
+ msgid " conflicting code gen style switches are used"
+-msgstr ""
++msgstr " ç«¶åˆã—ã¦ã„るコード生æˆã‚¹ã‚¿ã‚¤ãƒ«ã‚¹ã‚¤ãƒƒãƒãŒä½¿ç”¨ã•れã¦ã„ã¾ã™"
+
+ #: config/arm/arm.h:178
+ msgid "-msoft-float and -mhard_float may not be used together"
+@@ -4805,7 +4800,7 @@
+
+ #: config/i386/linux-unwind.h:186
+ msgid "ax ; {int $0x80 | syscall"
+-msgstr ""
++msgstr "ax ; {int $0x80 | syscall"
+
+ #: config/s390/tpf.h:120
+ msgid "static is not supported on TPF-OS"
+@@ -4869,7 +4864,7 @@
+
+ #: java/lang.opt:206
+ msgid "--extdirs=<path>\tSet the extension directory path"
+-msgstr ""
++msgstr "--extdirs=<path>\tæ‹¡å¼µã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ‘スを設定ã™ã‚‹"
+
+ #: java/lang.opt:216
+ msgid "Input file is a file with a list of filenames to compile"
+@@ -5388,7 +5383,7 @@
+
+ #: config/frv/frv.opt:31
+ msgid "Enable label alignment optimizations"
+-msgstr ""
++msgstr "ラベル整列最é©åŒ–を有効ã«ã™ã‚‹"
+
+ #: config/frv/frv.opt:35
+ msgid "Dynamically allocate cc registers"
+@@ -5452,7 +5447,7 @@
+
+ #: config/frv/frv.opt:116
+ msgid "Enable use of GPREL for read-only data in FDPIC"
+-msgstr ""
++msgstr "FDPIC 内ã®èª­ã¿å–り専用データ用 GPREL ã®ä½¿ç”¨ã‚’有効ã«ã™ã‚‹"
+
+ #: config/frv/frv.opt:120 config/rs6000/rs6000.opt:216
+ #: config/pdp11/pdp11.opt:67
+@@ -5460,9 +5455,8 @@
+ msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æµ®å‹•å°æ•°ç‚¹ã‚’利用ã™ã‚‹"
+
+ #: config/frv/frv.opt:124 config/bfin/bfin.opt:77
+-#, fuzzy
+ msgid "Enable inlining of PLT in function calls"
+-msgstr "関数呼ã³å‡ºã—ã®å‰å¾Œã§ãƒ¬ã‚¸ã‚¹ã‚¿ã®ä¿å­˜ã‚’有効ã«ã™ã‚‹"
++msgstr "関数呼ã³å‡ºã—内㧠PLT ã®ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³åŒ–を有効ã«ã™ã‚‹"
+
+ #: config/frv/frv.opt:128
+ msgid "Enable PIC support for building libraries"
+@@ -5478,7 +5472,7 @@
+
+ #: config/frv/frv.opt:140
+ msgid "Use media instructions"
+-msgstr ""
++msgstr "media 命令を使用ã™ã‚‹"
+
+ #: config/frv/frv.opt:144
+ msgid "Use multiply add/subtract instructions"
+@@ -5494,7 +5488,7 @@
+
+ #: config/frv/frv.opt:157
+ msgid "Do not mark ABI switches in e_flags"
+-msgstr ""
++msgstr "e_flags 内㮠ABI スイッãƒã‚’マークã—ãªã„"
+
+ #: config/frv/frv.opt:161
+ msgid "Remove redundant membars"
+@@ -5506,7 +5500,7 @@
+
+ #: config/frv/frv.opt:169
+ msgid "Enable setting GPRs to the result of comparisons"
+-msgstr ""
++msgstr "æ¯”è¼ƒçµæžœã‚’汎用レジスタã«è¨­å®šã™ã‚‹ã“ã¨ã‚’有効ã«ã™ã‚‹"
+
+ #: config/frv/frv.opt:173
+ msgid "Change the amount of scheduler lookahead"
+@@ -5565,9 +5559,8 @@
+ msgstr ""
+
+ #: config/mn10300/mn10300.opt:56
+-#, fuzzy
+ msgid "Allow gcc to generate LIW instructions"
+-msgstr "gcc ㌠repeat/erepeat 命令を使用ã™ã‚‹ã“ã¨ã‚’許å¯ã™ã‚‹"
++msgstr "gcc ㌠LIW 命令を生æˆã™ã‚‹ã“ã¨ã‚’許å¯ã™ã‚‹"
+
+ #: config/s390/tpf.opt:23
+ msgid "Enable TPF-OS tracing code"
+@@ -5640,11 +5633,11 @@
+
+ #: config/s390/s390.opt:91
+ msgid "Warn if a function uses alloca or creates an array with dynamic size"
+-msgstr ""
++msgstr "関数㧠alloca を使用ã™ã‚‹ã‹ã€ã¾ãŸã¯å‹•的サイズã®é…列を作æˆã—ãŸå ´åˆã«ã€è­¦å‘Šã™ã‚‹"
+
+ #: config/s390/s390.opt:95
+ msgid "Warn if a single function's framesize exceeds the given framesize"
+-msgstr ""
++msgstr "一ã¤ã®é–¢æ•°ã®ãƒ•レームサイズãŒä¸Žãˆã‚‰ã‚ŒãŸãƒ•レームサイズを超éŽã™ã‚‹å ´åˆã«è­¦å‘Šã™ã‚‹"
+
+ #: config/s390/s390.opt:99
+ msgid "z/Architecture"
+@@ -5692,7 +5685,7 @@
+
+ #: config/ia64/ia64.opt:56
+ msgid "gp is constant (but save/restore gp on indirect calls)"
+-msgstr "gp を定数ã¨ã™ã‚‹ï¼ˆä½†ã€é–“接呼ã³å‡ºã—ã§ã¯ gp ã‚’ save/restore ã™ã‚‹ï¼‰"
++msgstr "gp を定数ã¨ã™ã‚‹ï¼ˆãŸã ã—ã€é–“接呼ã³å‡ºã—ã§ã¯ gp ã‚’ save/restore ã™ã‚‹ï¼‰"
+
+ #: config/ia64/ia64.opt:60
+ msgid "Generate self-relocatable code"
+@@ -5741,39 +5734,39 @@
+ #: config/ia64/ia64.opt:107 config/spu/spu.opt:72 config/sh/sh.opt:258
+ #: config/pa/pa.opt:51
+ msgid "Specify range of registers to make fixed"
+-msgstr ""
++msgstr "固定ã™ã‚‹ãƒ¬ã‚¸ã‚¹ã‚¿ã®ç¯„囲を指定ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:119
+ msgid "Use data speculation before reload"
+-msgstr ""
++msgstr "reload å‰ã«ãƒ‡ãƒ¼ã‚¿æŠ•機を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:123
+ msgid "Use data speculation after reload"
+-msgstr ""
++msgstr "reload 後ã«ãƒ‡ãƒ¼ã‚¿æŠ•機を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:127
+ msgid "Use control speculation"
+-msgstr ""
++msgstr "制御投機を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:131
+ msgid "Use in block data speculation before reload"
+-msgstr ""
++msgstr "reload å‰ã«ãƒ–ロック内データ投機を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:135
+ msgid "Use in block data speculation after reload"
+-msgstr ""
++msgstr "reload 後ã«ãƒ–ロック内データ投機を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:139
+ msgid "Use in block control speculation"
+-msgstr ""
++msgstr "ブロック内制御投機を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:143
+ msgid "Use simple data speculation check"
+-msgstr ""
++msgstr "å˜ç´”データ投機検査を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:147
+ msgid "Use simple data speculation check for control speculation"
+-msgstr ""
++msgstr "制御投機用ã®å˜ç´”データ投機検査を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:151
+ msgid "If set, data speculative instructions will be chosen for schedule only if there are no other choices at the moment "
+@@ -5789,7 +5782,7 @@
+
+ #: config/ia64/ia64.opt:163
+ msgid "Place a stop bit after every cycle when scheduling"
+-msgstr ""
++msgstr "スケジューリング時ã®å„サイクル後ã«ã‚¹ãƒˆãƒƒãƒ—ビットをé…ç½®ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:167
+ msgid "Assume that floating-point stores and loads are not likely to cause conflict when placed into one instruction group"
+@@ -5805,7 +5798,7 @@
+
+ #: config/ia64/ia64.opt:179
+ msgid "Don't generate checks for control speculation in selective scheduling"
+-msgstr ""
++msgstr "é¸æŠžçš„ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒªãƒ³ã‚°å†…ã§ã¯åˆ¶å¾¡æŠ•æ©Ÿç”¨ã®æ¤œæŸ»ã‚’生æˆã—ãªã„"
+
+ #: config/ia64/vms_symvec_libgcc_s.opt:3
+ msgid "! It would be better to auto-generate this file."
+@@ -6109,7 +6102,7 @@
+
+ #: config/m68k/m68k.opt:160 config/bfin/bfin.opt:61
+ msgid "Enable separate data segment"
+-msgstr ""
++msgstr "分離データセグメントを有効ã«ã™ã‚‹"
+
+ #: config/m68k/m68k.opt:164 config/bfin/bfin.opt:57
+ msgid "ID of shared library to build"
+@@ -6149,7 +6142,7 @@
+
+ #: config/i386/mingw.opt:23
+ msgid "Warn about none ISO msvcrt scanf/printf width extensions"
+-msgstr ""
++msgstr "éž ISO ã® msvcrt scanf/printf ã®å¹…æ‹¡å¼µã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
+
+ #: config/i386/mingw.opt:27
+ msgid "For nested functions on stack executable permission is set."
+@@ -6201,7 +6194,7 @@
+
+ #: config/i386/i386.opt:114
+ msgid "Data greater than given threshold will go into .ldata section in x86-64 medium model"
+-msgstr ""
++msgstr "x86-64 メディアモデルã§ã¯ä¸Žãˆã‚‰ã‚ŒãŸé–¾å€¤ã‚ˆã‚Šå¤§ãã„データを .ldata セクションã«é…ç½®ã™ã‚‹"
+
+ #: config/i386/i386.opt:118
+ msgid "Use given x86-64 code model"
+@@ -6217,16 +6210,15 @@
+
+ #: config/i386/i386.opt:129
+ msgid "Always use Dynamic Realigned Argument Pointer (DRAP) to realign stack"
+-msgstr ""
++msgstr "ã‚¹ã‚¿ãƒƒã‚¯ã‚’å†æ•´åˆ—ã™ã‚‹ãŸã‚ã«å‹•çš„å†æ•´åˆ—引数ãƒã‚¤ãƒ³ã‚¿ (Dynamic Realigned Argument Pointer, DRAP) を常ã«ä½¿ç”¨ã™ã‚‹"
+
+ #: config/i386/i386.opt:133
+ msgid "Return values of functions in FPU registers"
+ msgstr "FPU ãƒ¬ã‚¸ã‚¹ã‚¿å†…ã®æ©Ÿèƒ½ã®å€¤ã‚’è¿”ã™"
+
+ #: config/i386/i386.opt:137
+-#, fuzzy
+ msgid "Generate floating point mathematics using given instruction set"
+-msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æµ®å‹•å°æ•°ç‚¹å‘½ä»¤ã‚’使用ã™ã‚‹"
++msgstr "与ãˆã‚‰ã‚ŒãŸå‘½ä»¤é›†åˆã‚’使用ã—ã¦æµ®å‹•å°æ•°æ•°å€¤è¨ˆç®—を生æˆã™ã‚‹"
+
+ #: config/i386/i386.opt:149
+ msgid "Inline all known string operations"
+@@ -6314,8 +6306,9 @@
+ msgstr "8 ãƒã‚¤ãƒˆãƒ™ã‚¯ãƒˆãƒ«ã‚’メモリã«è¿”ã™"
+
+ #: config/i386/i386.opt:253
++#, fuzzy
+ msgid "Generate reciprocals instead of divss and sqrtss."
+-msgstr ""
++msgstr "divss ãŠã‚ˆã³ sqrtss ã®ä»£ã‚りã«é€†æ•° (reciprocal) を生æˆã™ã‚‹"
+
+ #: config/i386/i386.opt:257
+ msgid "Generate cld instruction in the function prologue."
+@@ -6331,7 +6324,7 @@
+
+ #: config/i386/i386.opt:271
+ msgid "Use 128-bit AVX instructions instead of 256-bit AVX instructions in the auto-vectorizer."
+-msgstr ""
++msgstr "自動ベクトル化㧠256 ビット AVX 命令ã®ä»£ã‚り㫠128 ビット AVX 命令を使用ã™ã‚‹"
+
+ #: config/i386/i386.opt:277
+ msgid "Generate 32bit i386 code"
+@@ -6382,9 +6375,8 @@
+ msgstr "SSE4.1 㨠SSE4.2 ã®çµ„ã¿è¾¼ã¿é–¢æ•°ã¨ã‚³ãƒ¼ãƒ‰ç”Ÿæˆã‚’サãƒãƒ¼ãƒˆã—ãªã„"
+
+ #: config/i386/i386.opt:328
+-#, fuzzy
+ msgid "%<-msse5%> was removed"
+-msgstr "'-msse5' ã¯å‰Šé™¤ã•れã¾ã—ãŸ"
++msgstr "%<-msse5%> ã¯å‰Šé™¤ã•れã¾ã—ãŸ"
+
+ #: config/i386/i386.opt:333
+ msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation"
+@@ -6544,7 +6536,7 @@
+
+ #: config/rs6000/rs6000.opt:152
+ msgid "Use PowerPC General Purpose group optional instructions"
+-msgstr "PowerPC 一般用途グループオプション命令を使用ã™ã‚‹"
++msgstr "PowerPC 汎用グループオプション命令を使用ã™ã‚‹"
+
+ #: config/rs6000/rs6000.opt:156
+ msgid "Use PowerPC Graphics group optional instructions"
+@@ -7002,7 +6994,7 @@
+
+ #: config/mcore/mcore.opt:56 config/fr30/fr30.opt:27
+ msgid "Assume that run-time support has been provided, so omit -lsim from the linker command line"
+-msgstr ""
++msgstr "実行時サãƒãƒ¼ãƒˆãŒæä¾›ã•れるã¨è¦‹ãªã—ã€ãƒªãƒ³ã‚«ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã« -lsim ã‚’å«ã‚ãªã„"
+
+ #: config/mcore/mcore.opt:60
+ msgid "Use arbitrary sized immediates in bit operations"
+@@ -7014,7 +7006,7 @@
+
+ #: config/mcore/mcore.opt:71
+ msgid "Set the maximum amount for a single stack increment operation"
+-msgstr "å˜ä¸€ã®ã‚¹ã‚¿ãƒƒã‚¯ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆæ“ä½œã®æœ€å¤§å€¤ã‚’設定ã™ã‚‹"
++msgstr "å˜ä¸€ã®ã‚¹ã‚¿ãƒƒã‚¯å¢—分æ“ä½œã®æœ€å¤§å€¤ã‚’設定ã™ã‚‹"
+
+ #: config/mcore/mcore.opt:75
+ msgid "Always treat bitfields as int-sized"
+@@ -7234,7 +7226,7 @@
+
+ #: config/sh/sh.opt:246
+ msgid "Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table"
+-msgstr ""
++msgstr "é™¤ç®—æˆ¦ç•¥ã€æ¬¡ã®ã„ãšã‚Œã‹: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table"
+
+ #: config/sh/sh.opt:250
+ msgid "Specify name for 32 bit signed division function"
+@@ -7282,7 +7274,7 @@
+
+ #: config/sh/sh.opt:298
+ msgid "Mark MAC register as call-clobbered"
+-msgstr ""
++msgstr "MAC レジスタを呼ã³å‡ºã—ã§ç ´å£Šã•れるã¨ãƒžãƒ¼ã‚¯ã™ã‚‹"
+
+ #: config/sh/sh.opt:304
+ msgid "Make structs a multiple of 4 bytes (warning: ABI altered)"
+@@ -7960,7 +7952,7 @@
+
+ #: config/m68hc11/m68hc11.opt:49
+ msgid "Auto pre/post decrement increment allowed"
+-msgstr "自動 pre/post デクリメント インクリメントを許容ã™ã‚‹"
++msgstr "自動 å‰ç½®/後置 減分/増分 を許容ã™ã‚‹"
+
+ #: config/m68hc11/m68hc11.opt:53
+ msgid "Min/max instructions allowed"
+@@ -7972,7 +7964,7 @@
+
+ #: config/m68hc11/m68hc11.opt:61
+ msgid "Auto pre/post decrement increment not allowed"
+-msgstr "自動 pre/post デクリメント インクリメントを許容ã—ãªã„"
++msgstr "自動 å‰ç½®/後置 減分/増分を許容ã—ãªã„"
+
+ #: config/m68hc11/m68hc11.opt:65
+ msgid "Use jsr and rts for function calls and returns"
+@@ -8346,7 +8338,7 @@
+
+ #: config/bfin/bfin.opt:69
+ msgid "Link with the fast floating-point library"
+-msgstr ""
++msgstr "é«˜é€Ÿãªæµ®å‹•å°æ•°ãƒ©ã‚¤ãƒ–ラリã¨ãƒªãƒ³ã‚¯ã™ã‚‹"
+
+ #: config/bfin/bfin.opt:81
+ msgid "Do stack checking using bounds in L1 scratch memory"
+@@ -8382,7 +8374,7 @@
+
+ #: config/picochip/picochip.opt:31
+ msgid "Specify whether the byte access instructions should be used. Enabled by default."
+-msgstr ""
++msgstr "ãƒã‚¤ãƒˆã‚¢ã‚¯ã‚»ã‚¹å‘½ä»¤ã‚’使用ã™ã‚‹ã‹ã©ã†ã‹ã‚’指定ã™ã‚‹ã€‚デフォルトã§ã¯æœ‰åйã¨ãªã‚‹"
+
+ #: config/picochip/picochip.opt:35
+ msgid "Enable debug output to be generated."
+@@ -8390,11 +8382,11 @@
+
+ #: config/picochip/picochip.opt:39
+ msgid "Allow a symbol value to be used as an immediate value in an instruction."
+-msgstr ""
++msgstr "命令内ã§ã‚·ãƒ³ãƒœãƒ«å€¤ãŒå³å€¤ã¨ã—ã¦ä½¿ç”¨ã•れるã“ã¨ã‚’許å¯ã™ã‚‹"
+
+ #: config/picochip/picochip.opt:43
+ msgid "Generate warnings when inefficient code is known to be generated."
+-msgstr ""
++msgstr "éžåŠ¹çŽ‡ãªã‚³ãƒ¼ãƒ‰ãŒç”Ÿæˆã•ã‚ŒãŸæ™‚ã«è­¦å‘Šã™ã‚‹"
+
+ #: config/vxworks.opt:36
+ msgid "Assume the VxWorks RTP environment"
+@@ -8418,7 +8410,7 @@
+
+ #: config/darwin.opt:205
+ msgid "Warn if constant CFString objects contain non-portable characters"
+-msgstr ""
++msgstr "定数 CFString オブジェクトãŒç§»æ¤æ€§ã®ç„¡ã„文字をå«ã‚€å ´åˆã«è­¦å‘Šã™ã‚‹"
+
+ #: config/darwin.opt:210
+ msgid "Generate AT&T-style stubs for Mach-O"
+@@ -8430,7 +8422,7 @@
+
+ #: config/darwin.opt:218
+ msgid "Generate code suitable for fast turn around debugging"
+-msgstr ""
++msgstr "デãƒãƒƒã‚°ã‚’高速ã«è¡Œã†ãŸã‚ã«é©ã—ãŸã‚³ãƒ¼ãƒ‰ã‚’生æˆã™ã‚‹"
+
+ #: config/darwin.opt:227
+ msgid "The earliest MacOS X version on which this program will run"
+@@ -8442,15 +8434,15 @@
+
+ #: config/darwin.opt:235
+ msgid "Generate code for darwin loadable kernel extensions"
+-msgstr ""
++msgstr "darwin ロードå¯èƒ½ã‚«ãƒ¼ãƒãƒ«æ‹¡å¼µç”¨ã®ã‚³ãƒ¼ãƒ‰ã‚’生æˆã™ã‚‹"
+
+ #: config/darwin.opt:239
+ msgid "Generate code for the kernel or loadable kernel extensions"
+-msgstr ""
++msgstr "カーãƒãƒ«ç”¨ã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ‰å¯èƒ½ã‚«ãƒ¼ãƒãƒ«æ‹¡å¼µç”¨ã®ã‚³ãƒ¼ãƒ‰ã‚’生æˆã™ã‚‹"
+
+ #: config/darwin.opt:243
+ msgid "-iframework <dir>\tAdd <dir> to the end of the system framework include path"
+-msgstr ""
++msgstr "-iframework <dir>\t<dir> ã‚’ã‚·ã‚¹ãƒ†ãƒ ãƒ•ãƒ¬ãƒ¼ãƒ ãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãƒ‘ã‚¹ã®æœ«å°¾ã«åŠ ãˆã‚‹"
+
+ #: config/lynx.opt:23
+ msgid "Support legacy multi-threading"
+@@ -8737,7 +8729,6 @@
+ msgstr ""
+
+ #: config/microblaze/microblaze.opt:92
+-#, fuzzy
+ msgid "Use hardware floating point conversion instructions"
+ msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æµ®å‹•å°æ•°ç‚¹å¤‰æ›å‘½ä»¤ã‚’使用ã™ã‚‹"
+
+@@ -8862,7 +8853,7 @@
+
+ #: c-family/c.opt:249
+ msgid "-MT <target>\tAdd an unquoted target"
+-msgstr ""
++msgstr "-MT <target>\tターゲット (引用符を付ã‘ãªã„) を追加ã™ã‚‹"
+
+ #: c-family/c.opt:253
+ msgid "Do not generate #line directives"
+@@ -8898,11 +8889,11 @@
+
+ #: c-family/c.opt:288
+ msgid "Warn about C constructs that are not in the common subset of C and C++"
+-msgstr ""
++msgstr "C 㨠C++ ã®å…±é€šéƒ¨åˆ†é›†åˆã§ã¯ç„¡ã„ C æ§‹æ–‡ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
+
+ #: c-family/c.opt:292
+ msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 200x"
+-msgstr ""
++msgstr "ISO C++ 1998 㨠ISO C++ 200x ã§æ„味ãŒç•°ãªã‚‹ C++ æ§‹æ–‡ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
+
+ #: c-family/c.opt:296
+ msgid "Warn about casts which discard qualifiers"
+@@ -8962,7 +8953,7 @@
+
+ #: c-family/c.opt:352
+ msgid "Warn about stray tokens after #elif and #endif"
+-msgstr ""
++msgstr "#elif ãŠã‚ˆã³ #endif ã®å¾Œã«ã‚ã‚‹ã¯ãれãŸãƒˆãƒ¼ã‚¯ãƒ³ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
+
+ #: c-family/c.opt:356
+ msgid "Warn about comparison of different enum types"
+@@ -8977,9 +8968,8 @@
+ msgstr "æµ®å‹•å°æ•°ç‚¹æ•°ã®ç­‰ä¾¡æ¯”較ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
+
+ #: c-family/c.opt:372
+-#, fuzzy
+ msgid "Warn about printf/scanf/strftime/strfmon format string anomalies"
+-msgstr "printf/scanf/strftime/strfmon å½¢å¼ã®å¤‰å‰‡çš„ãªã‚‚ã®ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
++msgstr "printf/scanf/strftime/strfmon æ›¸å¼æ–‡å­—列異常ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
+
+ #: c-family/c.opt:376
+ msgid "Warn if passing too many arguments to a function for its format string"
+@@ -8998,9 +8988,8 @@
+ msgstr "セキュリティå•題ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚る書å¼é–¢æ•°ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
+
+ #: c-family/c.opt:392
+-#, fuzzy
+ msgid "Warn about strftime formats yielding 2-digit years"
+-msgstr "strftime å½¢å¼ãŒäºŒæ¡ã§å¹´ã‚’表ã—ã¦ã„る時ã®è­¦å‘Šã—ãªã„"
++msgstr "strftime 書å¼ãŒ 2 æ¡ã®å¹´ã®å ´åˆã«è­¦å‘Šã™ã‚‹"
+
+ #: c-family/c.opt:396
+ msgid "Warn about zero-length formats"
+@@ -9409,7 +9398,7 @@
+
+ #: c-family/c.opt:823
+ msgid "Don't emit dllexported inline functions unless needed"
+-msgstr ""
++msgstr "å¿…è¦ãŒç„¡ã„é™ã‚Š dllexported インライン関数を発行ã—ãªã„"
+
+ #: c-family/c.opt:830
+ msgid "Allow implicit conversions between vectors with differing numbers of subparts and/or differing element types."
+@@ -9501,7 +9490,7 @@
+
+ #: c-family/c.opt:942
+ msgid "Generate run time type descriptor information"
+-msgstr ""
++msgstr "å®Ÿè¡Œæ™‚åž‹è¨˜è¿°å­æƒ…報を生æˆã™ã‚‹"
+
+ #: c-family/c.opt:946
+ msgid "Use the same size for double as for float"
+@@ -9889,19 +9878,16 @@
+ msgstr "関数㌠__attribute__((pure)) ã®å€™è£œã¨ãªã‚Šãã†ãªå ´åˆã«è­¦å‘Šã™ã‚‹"
+
+ #: common.opt:608
+-#, fuzzy
+ msgid "Warn about enumerated switches, with no default, missing a case"
+-msgstr "列挙定数㮠switch ã§ case æŒ‡å®šãŒæ¬ ã‘ã¦ã„ã‚‹ã‚‚ã®ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
++msgstr "列挙定数を使用ã—㟠switch 文㧠default æ–‡ãŒç„¡ã„ã‹ç‰¹å®šã® case ãŒç„¡ã„å ´åˆã«è­¦å‘Šã™ã‚‹"
+
+ #: common.opt:612
+-#, fuzzy
+ msgid "Warn about enumerated switches missing a \"default:\" statement"
+-msgstr "列挙定数㮠switch ã§ case æŒ‡å®šãŒæ¬ ã‘ã¦ã„ã‚‹ã‚‚ã®ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
++msgstr "列挙定数を使用ã—㟠switch 文㧠\"default:\" æ–‡ãŒç„¡ã„å ´åˆã«è­¦å‘Šã™ã‚‹"
+
+ #: common.opt:616
+-#, fuzzy
+ msgid "Warn about all enumerated switches missing a specific case"
+-msgstr "列挙定数㮠switch ã§ case æŒ‡å®šãŒæ¬ ã‘ã¦ã„ã‚‹ã‚‚ã®ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
++msgstr "列挙定数を使用ã—㟠switch æ–‡ã§ç‰¹å®šã® case ãŒç„¡ã„å ´åˆã«è­¦å‘Šã™ã‚‹"
+
+ #: common.opt:620
+ msgid "Do not suppress warnings from system headers"
+@@ -10000,9 +9986,8 @@
+ msgstr "自動増加/減少命令を生æˆã™ã‚‹"
+
+ #: common.opt:821
+-#, fuzzy
+ msgid "Generate code to check bounds before indexing arrays"
+-msgstr "é…åˆ—ã®æ·»å­—ã¨æ·»å­—境界を検査ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’生æˆã™ã‚‹"
++msgstr "é…åˆ—ã®æ·»ãˆå­—を使用ã™ã‚‹å‰ã«å¢ƒç•Œæ¤œæŸ»ã‚’行ã†ã‚³ãƒ¼ãƒ‰ã‚’生æˆã™ã‚‹"
+
+ #: common.opt:825
+ #, fuzzy
+@@ -10043,7 +10028,7 @@
+
+ #: common.opt:864
+ msgid "Looks for opportunities to reduce stack adjustments and stack references."
+-msgstr ""
++msgstr "スタック調整ãŠã‚ˆã³ã‚¹ã‚¿ãƒƒã‚¯å‚照を削減ã™ã‚‹æ©Ÿä¼šã‚’探ã™"
+
+ #: common.opt:868
+ msgid "Do not put uninitialized globals in the common section"
+@@ -10058,18 +10043,16 @@
+ msgstr ""
+
+ #: common.opt:884
+-#, fuzzy
+ msgid "Perform comparison elimination after register allocation has finished"
+-msgstr "グローãƒãƒ«å…±é€šéƒ¨åˆ†å¼ã‚’除去ã™ã‚‹"
++msgstr "レジスタã¯ä½ç½®ãŒå®Œäº†ã—ãŸå¾Œã«æ¯”較ã®é™¤åŽ»ã‚’è¡Œã†"
+
+ #: common.opt:888
+ msgid "Do not perform optimizations increasing noticeably stack usage"
+-msgstr ""
++msgstr "スタック使用é‡ã‚’è‘—ã—ã増加ã•ã›ã‚‹æœ€é©åŒ–を行ã‚ãªã„"
+
+ #: common.opt:892
+-#, fuzzy
+ msgid "Perform a register copy-propagation optimization pass"
+-msgstr "最é©åŒ–éŽç¨‹ã®ãƒ¬ã‚¸ã‚¹ã‚¿ã¤ã‘変ãˆã‚’行ãªã†"
++msgstr ""
+
+ #: common.opt:896
+ msgid "Perform cross-jumping optimization"
+@@ -10101,7 +10084,7 @@
+
+ #: common.opt:928
+ msgid "Map one directory name to another in debug information"
+-msgstr ""
++msgstr "デãƒãƒƒã‚°æƒ…報内ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼åã‚’ä»–ã®ã‚‚ã®ã«ãƒžãƒƒãƒ—ã™ã‚‹"
+
+ #: common.opt:934
+ msgid "Defer popping functions args from stack until later"
+@@ -10116,9 +10099,8 @@
+ msgstr "ç„¡æ„味㪠null ãƒã‚¤ãƒ³ã‚¿æ¤œæŸ»ã‚’削除ã™ã‚‹"
+
+ #: common.opt:946
+-#, fuzzy
+ msgid "Try to convert virtual calls to direct ones."
+-msgstr "リンカ㌠PIC 呼ã³å‡ºã—を直接呼ã³å‡ºã—ã«å¤‰æ›´ã™ã‚‹ã“ã¨ã‚’許å¯ã™ã‚‹ã‚ˆã†ã«è©¦ã¿ã‚‹"
++msgstr "仮想呼ã³å‡ºã—を直接呼ã³å‡ºã—ã«å¤‰æ›ã™ã‚‹ã“ã¨ã‚’試ã¿ã‚‹"
+
+ #: common.opt:950
+ #, fuzzy
+@@ -10137,7 +10119,7 @@
+
+ #: common.opt:978
+ msgid "-fdump-final-insns=filename\tDump to filename the insns at the end of translation"
+-msgstr ""
++msgstr "-fdump-final-insns=filename\t翻訳終了時㫠filename ã¸å‘½ä»¤ã‚’ダンプã™ã‚‹"
+
+ #: common.opt:982
+ msgid "-fdump-go-spec=filename\tWrite all declarations to file as Go code"
+@@ -10173,7 +10155,7 @@
+
+ #: common.opt:1014 common.opt:1018
+ msgid "Perform unused type elimination in debug info"
+-msgstr ""
++msgstr "デãƒãƒƒã‚°æƒ…報内ã§ä½¿ç”¨ã•れã¦ã„ãªã„åž‹ã®é™¤åŽ»ã‚’è¡Œã†"
+
+ #: common.opt:1022
+ msgid "Do not suppress C++ class debug information."
+@@ -10181,25 +10163,24 @@
+
+ #: common.opt:1026
+ msgid "Generate debug information to support Identical Code Folding (ICF)"
+-msgstr ""
++msgstr "Identical Code Folding (ICF) をサãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã®ãƒ‡ãƒãƒƒã‚°æƒ…報を生æˆã™ã‚‹"
+
+ #: common.opt:1030
+ msgid "Enable exception handling"
+ msgstr "例外処ç†ã‚’有効ã«ã™ã‚‹"
+
+ #: common.opt:1034
+-#, fuzzy
+ msgid "Perform a number of minor, expensive optimizations"
+-msgstr "目立ãŸãªã„ã€ã‚³ã‚¹ãƒˆã®ã‹ã‹ã‚‹æœ€é©åŒ–を行ãªã†"
++msgstr "多ãã®ã€ç›®ç«‹ãŸãªã„ãŒã‚³ã‚¹ãƒˆãŒé«˜ã„最é©åŒ–を行ã†"
+
+ #: common.opt:1038
+ msgid "-fexcess-precision=[fast|standard]\tSpecify handling of excess floating-point precision"
+-msgstr ""
++msgstr "-fexcess-precision=[fast|standard]\tä½™åˆ†ãªæµ®å‹•å°æ•°ç‚¹ç²¾åº¦ã®å–り扱ã„を指定ã™ã‚‹"
+
+ #: common.opt:1041
+ #, c-format
+ msgid "unknown excess precision style %qs"
+-msgstr ""
++msgstr "䏿˜Žãªä½™åˆ†ãªç²¾åº¦ã‚¹ã‚¿ã‚¤ãƒ« %qs ã§ã™"
+
+ #: common.opt:1054
+ msgid "Assume no NaNs or infinities are generated"
+@@ -10222,52 +10203,45 @@
+ msgstr ""
+
+ #: common.opt:1077
+-#, fuzzy, c-format
++#, c-format
+ msgid "unknown floating point contraction style %qs"
+-msgstr "æµ®å‹•å°æ•°ç‚¹å®šæ•°ã‚’ TOC 内ã«é…ç½®ã™ã‚‹"
++msgstr "䏿˜Žãªæµ®å‹•å°æ•°çŸ­ç¸®å½¢ %qs ã§ã™"
+
+ #: common.opt:1094
+ msgid "Allow function addresses to be held in registers"
+ msgstr "é–¢æ•°ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’ãƒ¬ã‚¸ã‚¹ã‚¿ã«æŒãŸã›ã‚‹äº‹ã‚’許å¯ã™ã‚‹"
+
+ #: common.opt:1098
+-#, fuzzy
+ msgid "Place each function into its own section"
+-msgstr "å„々ã®é–¢æ•°ã‚’ãれ自身ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«é…ç½®ã™ã‚‹"
++msgstr "ãれãžã‚Œã®é–¢æ•°ã‚’ãれ自身ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«é…ç½®ã™ã‚‹"
+
+ #: common.opt:1102
+-#, fuzzy
+ msgid "Perform global common subexpression elimination"
+-msgstr "グローãƒãƒ«å…±é€šéƒ¨åˆ†å¼ã‚’除去ã™ã‚‹"
++msgstr "大域共通部分å¼ã®é™¤åŽ»ã‚’è¡Œã†"
+
+ #: common.opt:1106
+-#, fuzzy
+ msgid "Perform enhanced load motion during global common subexpression elimination"
+-msgstr "グローãƒãƒ«å…±é€šéƒ¨åˆ†å¼ã‚’除去ã™ã‚‹"
++msgstr ""
+
+ #: common.opt:1110
+-#, fuzzy
+ msgid "Perform store motion after global common subexpression elimination"
+-msgstr "グローãƒãƒ«å…±é€šéƒ¨åˆ†å¼ã‚’除去ã™ã‚‹"
++msgstr ""
+
+ #: common.opt:1114
+ msgid "Perform redundant load after store elimination in global common subexpression"
+ msgstr ""
+
+ #: common.opt:1119
+-#, fuzzy
+ msgid "Perform global common subexpression elimination after register allocation"
+-msgstr "グローãƒãƒ«å…±é€šéƒ¨åˆ†å¼ã‚’除去ã™ã‚‹"
++msgstr "レジスタé…置後ã«å¤§åŸŸå…±é€šéƒ¨åˆ†å¼ã®é™¤åŽ»ã‚’è¡Œã†"
+
+ #: common.opt:1125
+-#, fuzzy
+ msgid "Enable in and out of Graphite representation"
+-msgstr "自動テンプレート実体化を有効ã«ã™ã‚‹"
++msgstr ""
+
+ #: common.opt:1129
+-#, fuzzy
+ msgid "Enable Graphite Identity transformation"
+-msgstr "呼ã³å‡ºã—グラフ情報をé€å‡ºã™ã‚‹"
++msgstr ""
+
+ #: common.opt:1133
+ msgid "Mark all loops as parallel"
+@@ -10306,9 +10280,8 @@
+ msgstr ""
+
+ #: common.opt:1173
+-#, fuzzy
+ msgid "Perform conversion of conditional jumps to conditional execution"
+-msgstr "æ¡ä»¶çš„ãªå®Ÿè¡Œã¸ã®å¤‰æ›´ã®ãŸã‚ã®é–¾å€¤ã‚’変更ã™ã‚‹"
++msgstr ""
+
+ #: common.opt:1177
+ msgid "Convert conditional jumps in innermost loops to branchless equivalents"
+@@ -10376,13 +10349,12 @@
+ msgstr ""
+
+ #: common.opt:1253
+-#, fuzzy
+ msgid "Discover pure and const functions"
+-msgstr "使ã‚れãªã„仮想関数を切りæ¨ã¦ã‚‹"
++msgstr "純粋ãŠã‚ˆã³å®šæ•°é–¢æ•°ã‚’見ã¤ã‘ã‚‹"
+
+ #: common.opt:1257
+ msgid "Discover readonly and non addressable static variables"
+-msgstr ""
++msgstr "読ã¿å–り専用ãŠã‚ˆã³ã‚¢ãƒ‰ãƒ¬ã‚¹ä»˜ã‘ã§ããªã„é™çš„変数を見ã¤ã‘ã‚‹"
+
+ #: common.opt:1261
+ msgid "Perform matrix layout flattening and transposing based"
+@@ -10415,9 +10387,8 @@
+ msgstr ""
+
+ #: common.opt:1305
+-#, fuzzy
+ msgid "Share slots for saving different hard registers."
+-msgstr "引数レジスタã«ãƒ­ãƒ¼ã‚«ãƒ«ã®ã‚‚ã®ã‚’æ ¼ç´ã™ã‚‹"
++msgstr ""
+
+ #: common.opt:1309
+ msgid "Share stack slots for spilled pseudo-registers."
+@@ -10621,19 +10592,19 @@
+
+ #: common.opt:1521
+ msgid "Enable basic program profiling code"
+-msgstr ""
++msgstr "基本プログラムプロファイリングコードを有効ã«ã™ã‚‹"
+
+ #: common.opt:1525
+ msgid "Insert arc-based program profiling code"
+-msgstr ""
++msgstr "円弧ベースプログラムプロファイリングコードを挿入ã™ã‚‹"
+
+ #: common.opt:1529
+ msgid "Set the top-level directory for storing the profile data."
+-msgstr ""
++msgstr "プロファイルデータä¿å­˜ç”¨ã®æœ€ä¸Šä½ãƒ‡ã‚£ãƒ¬ã‚¯ãƒªãƒ¼ã‚’設定ã™ã‚‹"
+
+ #: common.opt:1534
+ msgid "Enable correction of flow inconsistent profile data input"
+-msgstr ""
++msgstr "フロー一貫性ãŒç„¡ã„データ入力ã®è¨‚正を有効ã«ã™ã‚‹"
+
+ #: common.opt:1538
+ msgid "Enable common options for generating profile info for profile feedback directed optimizations"
+@@ -10653,7 +10624,7 @@
+
+ #: common.opt:1554
+ msgid "Insert code to profile values of expressions"
+-msgstr ""
++msgstr "å¼ã®å€¤ã‚’プロファイルã™ã‚‹ãŸã‚ã®ã‚³ãƒ¼ãƒ‰ã‚’挿入ã™ã‚‹"
+
+ #: common.opt:1561
+ msgid "-frandom-seed=<string>\tMake compile reproducible using <string>"
+@@ -11836,7 +11807,7 @@
+ #: c-decl.c:1150
+ #, gcc-internal-format
+ msgid "nested function %q+D declared but never defined"
+-msgstr ""
++msgstr "入れå­ã«ãªã£ãŸé–¢æ•° %q+D ãŒå®£è¨€ã•れã¾ã—ãŸãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“"
+
+ #: c-decl.c:1162
+ #, gcc-internal-format
+@@ -11893,7 +11864,7 @@
+ #: c-decl.c:1613
+ #, gcc-internal-format
+ msgid "prototype for %q+D follows non-prototype definition"
+-msgstr ""
++msgstr "éžãƒ—ロトタイプ定義ã«ç¶šã„㦠%q+D 用ã®ãƒ—ロトタイプãŒã‚りã¾ã™"
+
+ #: c-decl.c:1628
+ #, gcc-internal-format
+@@ -11969,9 +11940,9 @@
+ msgstr "%q+D ãŒç•°ãªã‚‹åž‹ã§å†å®šç¾©ã•れã¾ã—ãŸ"
+
+ #: c-decl.c:1818
+-#, fuzzy, gcc-internal-format
++#, gcc-internal-format
+ msgid "redefinition of typedef %q+D with variably modified type"
+-msgstr "%q+D ãŒç•°ãªã‚‹åž‹ã§å†å®šç¾©ã•れã¾ã—ãŸ"
++msgstr ""
+
+ #: c-decl.c:1825
+ #, gcc-internal-format
+@@ -12016,17 +11987,17 @@
+ #: c-decl.c:2001
+ #, gcc-internal-format
+ msgid "extern declaration of %q+D follows declaration with no linkage"
+-msgstr ""
++msgstr "リンク無ã—宣言ã®å¾Œã« %q+D ã® extern 宣言ãŒç¶šã„ã¦ã„ã¾ã™"
+
+ #: c-decl.c:2037
+ #, gcc-internal-format
+ msgid "declaration of %q+D with no linkage follows extern declaration"
+-msgstr ""
++msgstr "extern 宣言ã®å¾Œã«ãƒªãƒ³ã‚¯ç„¡ã— %q+D ã®å®£è¨€ãŒç¶šã„ã¦ã„ã¾ã™"
+
+ #: c-decl.c:2043
+ #, gcc-internal-format
+ msgid "redeclaration of %q+D with no linkage"
+-msgstr ""
++msgstr "リンク無㗠%q+D ã®å†å®šç¾©ã§ã™"
+
+ #: c-decl.c:2069
+ #, gcc-internal-format
+@@ -12354,7 +12325,7 @@
+ #: c-decl.c:4614
+ #, gcc-internal-format
+ msgid "defining a type in a compound literal is invalid in C++"
+-msgstr ""
++msgstr "複åˆãƒªãƒ†ãƒ©ãƒ«å†…ã§ã®åž‹å®šç¾©ã¯ C++ ã§ã¯ç„¡åйã§ã™"
+
+ #: c-decl.c:4666 c-decl.c:4681
+ #, gcc-internal-format
+@@ -13393,23 +13364,23 @@
+ #: c-parser.c:1829
+ #, gcc-internal-format
+ msgid "expression in static assertion is not an integer"
+-msgstr ""
++msgstr "é™çš„アサーション内ã®å¼ãŒæ•´æ•°ã§ã¯ã‚りã¾ã›ã‚“"
+
+ #: c-parser.c:1836
+ #, gcc-internal-format
+ msgid "expression in static assertion is not an integer constant expression"
+-msgstr ""
++msgstr "é™çš„アサーション内ã®å¼ãŒæ•´æ•°å®šæ•°å¼ã§ã¯ã‚りã¾ã›ã‚“"
+
+ #: c-parser.c:1841
+ #, gcc-internal-format
+ msgid "expression in static assertion is not constant"
+-msgstr ""
++msgstr "é™çš„アサーション内ã®å¼ãŒå®šæ•°ã§ã¯ã‚りã¾ã›ã‚“"
+
+ #. Report the error.
+ #: c-parser.c:1846 cp/semantics.c:4719
+ #, gcc-internal-format
+ msgid "static assertion failed: %E"
+-msgstr ""
++msgstr "é™çš„アサーションã«å¤±æ•—ã—ã¾ã—ãŸ: %E"
+
+ #: c-parser.c:2207 c-parser.c:3063 c-parser.c:3709 c-parser.c:3983
+ #: c-parser.c:5084 c-parser.c:5175 c-parser.c:5800 c-parser.c:6083
+@@ -14125,12 +14096,12 @@
+ #: c-typeck.c:3578
+ #, gcc-internal-format
+ msgid "increment of enumeration value is invalid in C++"
+-msgstr "列挙値ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã¯ C++ ã§ã¯ç„¡åйã§ã™"
++msgstr "列挙値ã®å¢—分㯠C++ ã§ã¯ç„¡åйã§ã™"
+
+ #: c-typeck.c:3581
+ #, gcc-internal-format
+ msgid "decrement of enumeration value is invalid in C++"
+-msgstr "列挙値ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã¯ C++ ã§ã¯ç„¡åйã§ã™"
++msgstr "åˆ—æŒ™å€¤ã®æ¸›åˆ†ã¯ C++ ã§ã¯ç„¡åйã§ã™"
+
+ #: c-typeck.c:3594
+ #, gcc-internal-format
+@@ -14140,22 +14111,22 @@
+ #: c-typeck.c:3613 c-typeck.c:3645
+ #, gcc-internal-format
+ msgid "wrong type argument to increment"
+-msgstr "インクリメントã™ã‚‹å¼•æ•°ã®åž‹ãŒé–“é•ã£ã¦ã„ã¾ã™"
++msgstr "増分ã™ã‚‹å¼•æ•°ã®åž‹ãŒé–“é•ã£ã¦ã„ã¾ã™"
+
+ #: c-typeck.c:3615 c-typeck.c:3648
+ #, gcc-internal-format
+ msgid "wrong type argument to decrement"
+-msgstr "デクリメントã™ã‚‹å¼•æ•°ã®åž‹ãŒé–“é•ã£ã¦ã„ã¾ã™"
++msgstr "減分ã™ã‚‹å¼•æ•°ã®åž‹ãŒé–“é•ã£ã¦ã„ã¾ã™"
+
+ #: c-typeck.c:3635
+ #, gcc-internal-format
+ msgid "increment of pointer to unknown structure"
+-msgstr "䏿˜Žãªæ§‹é€ ä½“ã¸ã®ãƒã‚¤ãƒ³ã‚¿ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "䏿˜Žãªæ§‹é€ ä½“ã¸ã®ãƒã‚¤ãƒ³ã‚¿ã®å¢—分ã§ã™"
+
+ #: c-typeck.c:3638
+ #, gcc-internal-format
+ msgid "decrement of pointer to unknown structure"
+-msgstr "䏿˜Žãªæ§‹é€ ä½“ã¸ã®ãƒã‚¤ãƒ³ã‚¿ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "䏿˜Žãªæ§‹é€ ä½“ã¸ã®ãƒã‚¤ãƒ³ã‚¿ã®æ¸›åˆ†ã§ã™"
+
+ #: c-typeck.c:3722
+ #, gcc-internal-format
+@@ -14170,12 +14141,12 @@
+ #: c-typeck.c:3895 c-family/c-common.c:8658
+ #, gcc-internal-format
+ msgid "increment of read-only location %qE"
+-msgstr "読ã¿å–り専用ä½ç½® %qE ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用ä½ç½® %qE ã®å¢—分ã§ã™"
+
+ #: c-typeck.c:3898 c-family/c-common.c:8659
+ #, gcc-internal-format
+ msgid "decrement of read-only location %qE"
+-msgstr "読ã¿å–り専用ä½ç½® %qE ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用ä½ç½® %qE ã®æ¸›åˆ†ã§ã™"
+
+ #: c-typeck.c:3939
+ #, gcc-internal-format
+@@ -19787,12 +19758,12 @@
+ #: c-family/c-common.c:8611
+ #, gcc-internal-format
+ msgid "increment of member %qD in read-only object"
+-msgstr "読ã¿å–り専用オブジェクト内ã®ãƒ¡ãƒ³ãƒ %qD ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用オブジェクト内ã®ãƒ¡ãƒ³ãƒ %qD ã®å¢—分ã§ã™"
+
+ #: c-family/c-common.c:8613
+ #, gcc-internal-format
+ msgid "decrement of member %qD in read-only object"
+-msgstr "読ã¿å–り専用オブジェクト内ã®ãƒ¡ãƒ³ãƒ %qD ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用オブジェクト内ã®ãƒ¡ãƒ³ãƒ %qD ã®æ¸›åˆ†ã§ã™"
+
+ #: c-family/c-common.c:8615
+ #, gcc-internal-format
+@@ -19807,12 +19778,12 @@
+ #: c-family/c-common.c:8620
+ #, gcc-internal-format
+ msgid "increment of read-only member %qD"
+-msgstr "読ã¿å–り専用メンム%qD ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用メンム%qD ã®å¢—分ã§ã™"
+
+ #: c-family/c-common.c:8621
+ #, gcc-internal-format
+ msgid "decrement of read-only member %qD"
+-msgstr "読ã¿å–り専用メンム%qD ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用メンム%qD ã®æ¸›åˆ†ã§ã™"
+
+ #: c-family/c-common.c:8622
+ #, gcc-internal-format
+@@ -19827,12 +19798,12 @@
+ #: c-family/c-common.c:8627
+ #, gcc-internal-format
+ msgid "increment of read-only variable %qD"
+-msgstr "読ã¿å–り専用変数 %qD ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用変数 %qD ã®å¢—分ã§ã™"
+
+ #: c-family/c-common.c:8628
+ #, gcc-internal-format
+ msgid "decrement of read-only variable %qD"
+-msgstr "読ã¿å–り専用変数 %qD ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用変数 %qD ã®æ¸›åˆ†ã§ã™"
+
+ #: c-family/c-common.c:8629
+ #, gcc-internal-format
+@@ -19847,12 +19818,12 @@
+ #: c-family/c-common.c:8633
+ #, gcc-internal-format
+ msgid "increment of read-only parameter %qD"
+-msgstr "読ã¿å–り専用パラメータ %qD ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用パラメータ %qD ã®å¢—分ã§ã™"
+
+ #: c-family/c-common.c:8634
+ #, gcc-internal-format
+ msgid "decrement of read-only parameter %qD"
+-msgstr "読ã¿å–り専用パラメータ %qD ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用パラメータ %qD ã®æ¸›åˆ†ã§ã™"
+
+ #: c-family/c-common.c:8635
+ #, gcc-internal-format
+@@ -19867,12 +19838,12 @@
+ #: c-family/c-common.c:8642
+ #, gcc-internal-format
+ msgid "increment of read-only named return value %qD"
+-msgstr "読ã¿å–り専用åå‰ä»˜ã戻り値 %qD ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用åå‰ä»˜ã戻り値 %qD ã®å¢—分ã§ã™"
+
+ #: c-family/c-common.c:8644
+ #, gcc-internal-format
+ msgid "decrement of read-only named return value %qD"
+-msgstr "読ã¿å–り専用åå‰ä»˜ã戻り値 %qD ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用åå‰ä»˜ã戻り値 %qD ã®æ¸›åˆ†ã§ã™"
+
+ #: c-family/c-common.c:8646
+ #, gcc-internal-format
+@@ -19887,12 +19858,12 @@
+ #: c-family/c-common.c:8652
+ #, gcc-internal-format
+ msgid "increment of function %qD"
+-msgstr "関数 %qD ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "関数 %qD ã®å¢—分ã§ã™"
+
+ #: c-family/c-common.c:8653
+ #, gcc-internal-format
+ msgid "decrement of function %qD"
+-msgstr "関数 %qD ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "関数 %qD ã®æ¸›åˆ†ã§ã™"
+
+ #: c-family/c-common.c:8654
+ #, gcc-internal-format
+@@ -19912,12 +19883,12 @@
+ #: c-family/c-common.c:8677
+ #, gcc-internal-format
+ msgid "lvalue required as increment operand"
+-msgstr "インクリメントã®è¢«æ¼”ç®—å­ã¨ã—ã¦å·¦è¾ºå€¤ãŒå¿…è¦ã§ã™"
++msgstr "増分ã®è¢«æ¼”ç®—å­ã¨ã—ã¦å·¦è¾ºå€¤ãŒå¿…è¦ã§ã™"
+
+ #: c-family/c-common.c:8680
+ #, gcc-internal-format
+ msgid "lvalue required as decrement operand"
+-msgstr "デクリメントã®è¢«æ¼”ç®—å­ã¨ã—ã¦å·¦è¾ºå€¤ãŒå¿…è¦ã§ã™"
++msgstr "減分ã®è¢«æ¼”ç®—å­ã¨ã—ã¦å·¦è¾ºå€¤ãŒå¿…è¦ã§ã™"
+
+ #: c-family/c-common.c:8683
+ #, gcc-internal-format
+@@ -20556,12 +20527,12 @@
+ #: c-family/c-omp.c:375 cp/semantics.c:4431
+ #, gcc-internal-format
+ msgid "missing increment expression"
+-msgstr "インクリメントå¼ãŒã‚りã¾ã›ã‚“"
++msgstr "増分å¼ãŒã‚りã¾ã›ã‚“"
+
+ #: c-family/c-omp.c:444 cp/semantics.c:4287
+ #, gcc-internal-format
+ msgid "invalid increment expression"
+-msgstr "無効ãªã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆå¼ã§ã™"
++msgstr "無効ãªå¢—分å¼ã§ã™"
+
+ #: c-family/c-opts.c:303
+ #, gcc-internal-format
+@@ -20571,7 +20542,7 @@
+ #: c-family/c-opts.c:306
+ #, gcc-internal-format
+ msgid "obsolete option -I- used, please use -iquote instead"
+-msgstr "廃止ã‚れãŸã‚ªãƒ—ション -I- ãŒä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚代ã‚り㫠-iquote を使用ã—ã¦ãã ã•ã„"
++msgstr "廃止ã•れãŸã‚ªãƒ—ション -I- ãŒä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚代ã‚り㫠-iquote を使用ã—ã¦ãã ã•ã„"
+
+ #: c-family/c-opts.c:486
+ #, gcc-internal-format
+--- a/src/gcc/recog.c
++++ b/src/gcc/recog.c
+@@ -930,7 +930,9 @@
+ return ((GET_MODE (op) == VOIDmode || GET_MODE (op) == mode
+ || mode == VOIDmode)
+ && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
+- && LEGITIMATE_CONSTANT_P (op));
++ && targetm.legitimate_constant_p (mode == VOIDmode
++ ? GET_MODE (op)
++ : mode, op));
+
+ /* Except for certain constants with VOIDmode, already checked for,
+ OP's mode must match MODE if MODE specifies a mode. */
+@@ -1107,7 +1109,9 @@
+ && (GET_MODE (op) == mode || mode == VOIDmode
+ || GET_MODE (op) == VOIDmode)
+ && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op))
+- && LEGITIMATE_CONSTANT_P (op));
++ && targetm.legitimate_constant_p (mode == VOIDmode
++ ? GET_MODE (op)
++ : mode, op));
+ }
+
+ /* Returns 1 if OP is an operand that is a CONST_INT. */
+--- a/src/gcc/regcprop.c
++++ b/src/gcc/regcprop.c
+@@ -418,10 +418,9 @@
+
+ offset = ((WORDS_BIG_ENDIAN ? wordoffset : 0)
+ + (BYTES_BIG_ENDIAN ? byteoffset : 0));
+- return gen_rtx_raw_REG (new_mode,
+- regno + subreg_regno_offset (regno, orig_mode,
+- offset,
+- new_mode));
++ regno += subreg_regno_offset (regno, orig_mode, offset, new_mode);
++ if (HARD_REGNO_MODE_OK (regno, new_mode))
++ return gen_rtx_raw_REG (new_mode, regno);
+ }
+ return NULL_RTX;
+ }
+--- a/src/gcc/reload.c
++++ b/src/gcc/reload.c
+@@ -1017,6 +1017,7 @@
+ #ifdef CANNOT_CHANGE_MODE_CLASS
+ && !CANNOT_CHANGE_MODE_CLASS (GET_MODE (SUBREG_REG (in)), inmode, rclass)
+ #endif
++ && contains_reg_of_mode[(int) rclass][(int) GET_MODE (SUBREG_REG (in))]
+ && (CONSTANT_P (SUBREG_REG (in))
+ || GET_CODE (SUBREG_REG (in)) == PLUS
+ || strict_low
+@@ -1123,6 +1124,7 @@
+ #ifdef CANNOT_CHANGE_MODE_CLASS
+ && !CANNOT_CHANGE_MODE_CLASS (GET_MODE (SUBREG_REG (out)), outmode, rclass)
+ #endif
++ && contains_reg_of_mode[(int) rclass][(int) GET_MODE (SUBREG_REG (out))]
+ && (CONSTANT_P (SUBREG_REG (out))
+ || strict_low
+ || (((REG_P (SUBREG_REG (out))
+@@ -4721,7 +4723,8 @@
+ simplify_gen_subreg (GET_MODE (x), reg_equiv_constant[regno],
+ GET_MODE (SUBREG_REG (x)), SUBREG_BYTE (x));
+ gcc_assert (tem);
+- if (CONSTANT_P (tem) && !LEGITIMATE_CONSTANT_P (tem))
++ if (CONSTANT_P (tem)
++ && !targetm.legitimate_constant_p (GET_MODE (x), tem))
+ {
+ tem = force_const_mem (GET_MODE (x), tem);
+ i = find_reloads_address (GET_MODE (tem), &tem, XEXP (tem, 0),
+@@ -6049,7 +6052,7 @@
+ enum reload_type type, int ind_levels)
+ {
+ if (CONSTANT_P (x)
+- && (! LEGITIMATE_CONSTANT_P (x)
++ && (!targetm.legitimate_constant_p (mode, x)
+ || targetm.preferred_reload_class (x, rclass) == NO_REGS))
+ {
+ x = force_const_mem (mode, x);
+@@ -6059,7 +6062,7 @@
+
+ else if (GET_CODE (x) == PLUS
+ && CONSTANT_P (XEXP (x, 1))
+- && (! LEGITIMATE_CONSTANT_P (XEXP (x, 1))
++ && (!targetm.legitimate_constant_p (GET_MODE (x), XEXP (x, 1))
+ || targetm.preferred_reload_class (XEXP (x, 1), rclass)
+ == NO_REGS))
+ {
+--- a/src/gcc/reload1.c
++++ b/src/gcc/reload1.c
+@@ -3899,6 +3899,10 @@
+ if (XEXP (x, 0))
+ set_label_offsets (XEXP (x, 0), NULL_RTX, 1);
+
++ for (x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1))
++ if (XEXP (x, 0))
++ set_label_offsets (XEXP (x, 0), NULL_RTX, 1);
++
+ for_each_eh_label (set_initial_eh_label_offset);
+ }
+
+@@ -4155,6 +4159,9 @@
+ }
+ else if (function_invariant_p (x))
+ {
++ enum machine_mode mode;
++
++ mode = GET_MODE (SET_DEST (set));
+ if (GET_CODE (x) == PLUS)
+ {
+ /* This is PLUS of frame pointer and a constant,
+@@ -4167,12 +4174,11 @@
+ reg_equiv_invariant[i] = x;
+ num_eliminable_invariants++;
+ }
+- else if (LEGITIMATE_CONSTANT_P (x))
++ else if (targetm.legitimate_constant_p (mode, x))
+ reg_equiv_constant[i] = x;
+ else
+ {
+- reg_equiv_memory_loc[i]
+- = force_const_mem (GET_MODE (SET_DEST (set)), x);
++ reg_equiv_memory_loc[i] = force_const_mem (mode, x);
+ if (! reg_equiv_memory_loc[i])
+ reg_equiv_init[i] = NULL_RTX;
+ }
+@@ -4474,6 +4480,43 @@
+ }
+ }
+ }
++
++/* *OP_PTR and *OTHER_PTR are two operands to a conceptual reload.
++ If *OP_PTR is a paradoxical subreg, try to remove that subreg
++ and apply the corresponding narrowing subreg to *OTHER_PTR.
++ Return true if the operands were changed, false otherwise. */
++
++static bool
++strip_paradoxical_subreg (rtx *op_ptr, rtx *other_ptr)
++{
++ rtx op, inner, other, tem;
++
++ op = *op_ptr;
++ if (GET_CODE (op) != SUBREG)
++ return false;
++
++ inner = SUBREG_REG (op);
++ if (GET_MODE_SIZE (GET_MODE (op)) <= GET_MODE_SIZE (GET_MODE (inner)))
++ return false;
++
++ other = *other_ptr;
++ tem = gen_lowpart_common (GET_MODE (inner), other);
++ if (!tem)
++ return false;
++
++ /* If the lowpart operation turned a hard register into a subreg,
++ rather than simplifying it to another hard register, then the
++ mode change cannot be properly represented. For example, OTHER
++ might be valid in its current mode, but not in the new one. */
++ if (GET_CODE (tem) == SUBREG
++ && REG_P (other)
++ && HARD_REGISTER_P (other))
++ return false;
++
++ *op_ptr = inner;
++ *other_ptr = tem;
++ return true;
++}
+
+ /* A subroutine of reload_as_needed. If INSN has a REG_EH_REGION note,
+ examine all of the reload insns between PREV and NEXT exclusive, and
+@@ -5554,7 +5597,7 @@
+ chain reloads or do need an intermediate hard registers. */
+ bool result = true;
+ int regno, n, code;
+- rtx out, in, tem, insn;
++ rtx out, in, insn;
+ rtx last = get_last_insn ();
+
+ /* Make r2 a component of r1. */
+@@ -5573,11 +5616,7 @@
+
+ /* If IN is a paradoxical SUBREG, remove it and try to put the
+ opposite SUBREG on OUT. Likewise for a paradoxical SUBREG on OUT. */
+- if (GET_CODE (in) == SUBREG
+- && (GET_MODE_SIZE (GET_MODE (in))
+- > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
+- && (tem = gen_lowpart_common (GET_MODE (SUBREG_REG (in)), out)) != 0)
+- in = SUBREG_REG (in), out = tem;
++ strip_paradoxical_subreg (&in, &out);
+
+ if (GET_CODE (in) == PLUS
+ && (REG_P (XEXP (in, 0))
+@@ -6449,6 +6488,8 @@
+
+ if (regno >= 0
+ && reg_last_reload_reg[regno] != 0
++ && (GET_MODE_SIZE (GET_MODE (reg_last_reload_reg[regno]))
++ >= GET_MODE_SIZE (mode) + byte)
+ #ifdef CANNOT_CHANGE_MODE_CLASS
+ /* Verify that the register it's in can be used in
+ mode MODE. */
+@@ -6460,24 +6501,12 @@
+ {
+ enum reg_class rclass = rld[r].rclass, last_class;
+ rtx last_reg = reg_last_reload_reg[regno];
+- enum machine_mode need_mode;
+
+ i = REGNO (last_reg);
+ i += subreg_regno_offset (i, GET_MODE (last_reg), byte, mode);
+ last_class = REGNO_REG_CLASS (i);
+
+- if (byte == 0)
+- need_mode = mode;
+- else
+- need_mode
+- = smallest_mode_for_size
+- (GET_MODE_BITSIZE (mode) + byte * BITS_PER_UNIT,
+- GET_MODE_CLASS (mode) == MODE_PARTIAL_INT
+- ? MODE_INT : GET_MODE_CLASS (mode));
+-
+- if ((GET_MODE_SIZE (GET_MODE (last_reg))
+- >= GET_MODE_SIZE (need_mode))
+- && reg_reloaded_contents[i] == regno
++ if (reg_reloaded_contents[i] == regno
+ && TEST_HARD_REG_BIT (reg_reloaded_valid, i)
+ && HARD_REGNO_MODE_OK (i, rld[r].mode)
+ && (TEST_HARD_REG_BIT (reg_class_contents[(int) rclass], i)
+@@ -7579,7 +7608,6 @@
+ if (tertiary_icode != CODE_FOR_nothing)
+ {
+ rtx third_reloadreg = rld[tertiary_reload].reg_rtx;
+- rtx tem;
+
+ /* Copy primary reload reg to secondary reload reg.
+ (Note that these have been swapped above, then
+@@ -7588,13 +7616,7 @@
+ /* If REAL_OLD is a paradoxical SUBREG, remove it
+ and try to put the opposite SUBREG on
+ RELOADREG. */
+- if (GET_CODE (real_old) == SUBREG
+- && (GET_MODE_SIZE (GET_MODE (real_old))
+- > GET_MODE_SIZE (GET_MODE (SUBREG_REG (real_old))))
+- && 0 != (tem = gen_lowpart_common
+- (GET_MODE (SUBREG_REG (real_old)),
+- reloadreg)))
+- real_old = SUBREG_REG (real_old), reloadreg = tem;
++ strip_paradoxical_subreg (&real_old, &reloadreg);
+
+ gen_reload (reloadreg, second_reloadreg,
+ rl->opnum, rl->when_needed);
+@@ -8410,16 +8432,8 @@
+
+ /* If IN is a paradoxical SUBREG, remove it and try to put the
+ opposite SUBREG on OUT. Likewise for a paradoxical SUBREG on OUT. */
+- if (GET_CODE (in) == SUBREG
+- && (GET_MODE_SIZE (GET_MODE (in))
+- > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
+- && (tem = gen_lowpart_common (GET_MODE (SUBREG_REG (in)), out)) != 0)
+- in = SUBREG_REG (in), out = tem;
+- else if (GET_CODE (out) == SUBREG
+- && (GET_MODE_SIZE (GET_MODE (out))
+- > GET_MODE_SIZE (GET_MODE (SUBREG_REG (out))))
+- && (tem = gen_lowpart_common (GET_MODE (SUBREG_REG (out)), in)) != 0)
+- out = SUBREG_REG (out), in = tem;
++ if (!strip_paradoxical_subreg (&in, &out))
++ strip_paradoxical_subreg (&out, &in);
+
+ /* How to do this reload can get quite tricky. Normally, we are being
+ asked to reload a simple operand, such as a MEM, a constant, or a pseudo
+--- a/src/gcc/reorg.c
++++ b/src/gcc/reorg.c
+@@ -3554,9 +3554,11 @@
+ }
+ }
+
++ /* See if we have a simple (conditional) jump that is useless. */
+ if (! INSN_ANNULLED_BRANCH_P (delay_insn)
+- && prev_active_insn (target_label) == insn
+ && ! condjump_in_parallel_p (delay_insn)
++ && prev_active_insn (target_label) == insn
++ && ! BARRIER_P (prev_nonnote_insn (target_label))
+ #ifdef HAVE_cc0
+ /* If the last insn in the delay slot sets CC0 for some insn,
+ various code assumes that it is in a delay slot. We could
+--- a/src/gcc/simplify-rtx.c
++++ b/src/gcc/simplify-rtx.c
+@@ -1000,6 +1000,48 @@
+ && GET_CODE (XEXP (XEXP (op, 0), 1)) == LABEL_REF)
+ return XEXP (op, 0);
+
++ /* Extending a widening multiplication should be canonicalized to
++ a wider widening multiplication. */
++ if (GET_CODE (op) == MULT)
++ {
++ rtx lhs = XEXP (op, 0);
++ rtx rhs = XEXP (op, 1);
++ enum rtx_code lcode = GET_CODE (lhs);
++ enum rtx_code rcode = GET_CODE (rhs);
++
++ /* Widening multiplies usually extend both operands, but sometimes
++ they use a shift to extract a portion of a register. */
++ if ((lcode == SIGN_EXTEND
++ || (lcode == ASHIFTRT && CONST_INT_P (XEXP (lhs, 1))))
++ && (rcode == SIGN_EXTEND
++ || (rcode == ASHIFTRT && CONST_INT_P (XEXP (rhs, 1)))))
++ {
++ enum machine_mode lmode = GET_MODE (lhs);
++ enum machine_mode rmode = GET_MODE (rhs);
++ int bits;
++
++ if (lcode == ASHIFTRT)
++ /* Number of bits not shifted off the end. */
++ bits = GET_MODE_PRECISION (lmode) - INTVAL (XEXP (lhs, 1));
++ else /* lcode == SIGN_EXTEND */
++ /* Size of inner mode. */
++ bits = GET_MODE_PRECISION (GET_MODE (XEXP (lhs, 0)));
++
++ if (rcode == ASHIFTRT)
++ bits += GET_MODE_PRECISION (rmode) - INTVAL (XEXP (rhs, 1));
++ else /* rcode == SIGN_EXTEND */
++ bits += GET_MODE_PRECISION (GET_MODE (XEXP (rhs, 0)));
++
++ /* We can only widen multiplies if the result is mathematiclly
++ equivalent. I.e. if overflow was impossible. */
++ if (bits <= GET_MODE_PRECISION (GET_MODE (op)))
++ return simplify_gen_binary
++ (MULT, mode,
++ simplify_gen_unary (SIGN_EXTEND, mode, lhs, lmode),
++ simplify_gen_unary (SIGN_EXTEND, mode, rhs, rmode));
++ }
++ }
++
+ /* Check for a sign extension of a subreg of a promoted
+ variable, where the promotion is sign-extended, and the
+ target mode is the same as the variable's promotion. */
+@@ -1071,6 +1113,48 @@
+ && GET_MODE_SIZE (mode) <= GET_MODE_SIZE (GET_MODE (XEXP (op, 0))))
+ return rtl_hooks.gen_lowpart_no_emit (mode, op);
+
++ /* Extending a widening multiplication should be canonicalized to
++ a wider widening multiplication. */
++ if (GET_CODE (op) == MULT)
++ {
++ rtx lhs = XEXP (op, 0);
++ rtx rhs = XEXP (op, 1);
++ enum rtx_code lcode = GET_CODE (lhs);
++ enum rtx_code rcode = GET_CODE (rhs);
++
++ /* Widening multiplies usually extend both operands, but sometimes
++ they use a shift to extract a portion of a register. */
++ if ((lcode == ZERO_EXTEND
++ || (lcode == LSHIFTRT && CONST_INT_P (XEXP (lhs, 1))))
++ && (rcode == ZERO_EXTEND
++ || (rcode == LSHIFTRT && CONST_INT_P (XEXP (rhs, 1)))))
++ {
++ enum machine_mode lmode = GET_MODE (lhs);
++ enum machine_mode rmode = GET_MODE (rhs);
++ int bits;
++
++ if (lcode == LSHIFTRT)
++ /* Number of bits not shifted off the end. */
++ bits = GET_MODE_PRECISION (lmode) - INTVAL (XEXP (lhs, 1));
++ else /* lcode == ZERO_EXTEND */
++ /* Size of inner mode. */
++ bits = GET_MODE_PRECISION (GET_MODE (XEXP (lhs, 0)));
++
++ if (rcode == LSHIFTRT)
++ bits += GET_MODE_PRECISION (rmode) - INTVAL (XEXP (rhs, 1));
++ else /* rcode == ZERO_EXTEND */
++ bits += GET_MODE_PRECISION (GET_MODE (XEXP (rhs, 0)));
++
++ /* We can only widen multiplies if the result is mathematiclly
++ equivalent. I.e. if overflow was impossible. */
++ if (bits <= GET_MODE_PRECISION (GET_MODE (op)))
++ return simplify_gen_binary
++ (MULT, mode,
++ simplify_gen_unary (ZERO_EXTEND, mode, lhs, lmode),
++ simplify_gen_unary (ZERO_EXTEND, mode, rhs, rmode));
++ }
++ }
++
+ /* (zero_extend:M (zero_extend:N <X>)) is (zero_extend:M <X>). */
+ if (GET_CODE (op) == ZERO_EXTEND)
+ return simplify_gen_unary (ZERO_EXTEND, mode, XEXP (op, 0),
+@@ -2506,6 +2590,46 @@
+ XEXP (op0, 1), mode),
+ op1);
+
++ /* Given (xor (and A B) C), using P^Q == (~P&Q) | (~Q&P),
++ we can transform like this:
++ (A&B)^C == ~(A&B)&C | ~C&(A&B)
++ == (~A|~B)&C | ~C&(A&B) * DeMorgan's Law
++ == ~A&C | ~B&C | A&(~C&B) * Distribute and re-order
++ Attempt a few simplifications when B and C are both constants. */
++ if (GET_CODE (op0) == AND
++ && CONST_INT_P (op1)
++ && CONST_INT_P (XEXP (op0, 1)))
++ {
++ rtx a = XEXP (op0, 0);
++ rtx b = XEXP (op0, 1);
++ rtx c = op1;
++ HOST_WIDE_INT bval = INTVAL (b);
++ HOST_WIDE_INT cval = INTVAL (c);
++
++ rtx na_c
++ = simplify_binary_operation (AND, mode,
++ simplify_gen_unary (NOT, mode, a, mode),
++ c);
++ if ((~cval & bval) == 0)
++ {
++ /* Try to simplify ~A&C | ~B&C. */
++ if (na_c != NULL_RTX)
++ return simplify_gen_binary (IOR, mode, na_c,
++ GEN_INT (~bval & cval));
++ }
++ else
++ {
++ /* If ~A&C is zero, simplify A&(~C&B) | ~B&C. */
++ if (na_c == const0_rtx)
++ {
++ rtx a_nc_b = simplify_gen_binary (AND, mode, a,
++ GEN_INT (~cval & bval));
++ return simplify_gen_binary (IOR, mode, a_nc_b,
++ GEN_INT (~bval & cval));
++ }
++ }
++ }
++
+ /* (xor (comparison foo bar) (const_int 1)) can become the reversed
+ comparison if STORE_FLAG_VALUE is 1. */
+ if (STORE_FLAG_VALUE == 1
+@@ -5443,6 +5567,7 @@
+ /* Optimize SUBREG truncations of zero and sign extended values. */
+ if ((GET_CODE (op) == ZERO_EXTEND
+ || GET_CODE (op) == SIGN_EXTEND)
++ && SCALAR_INT_MODE_P (innermode)
+ && GET_MODE_BITSIZE (outermode) < GET_MODE_BITSIZE (innermode))
+ {
+ unsigned int bitpos = subreg_lsb_1 (outermode, innermode, byte);
+@@ -5481,6 +5606,7 @@
+ if ((GET_CODE (op) == LSHIFTRT
+ || GET_CODE (op) == ASHIFTRT)
+ && SCALAR_INT_MODE_P (outermode)
++ && SCALAR_INT_MODE_P (innermode)
+ /* Ensure that OUTERMODE is at least twice as wide as the INNERMODE
+ to avoid the possibility that an outer LSHIFTRT shifts by more
+ than the sign extension's sign_bit_copies and introduces zeros
+@@ -5500,6 +5626,7 @@
+ if ((GET_CODE (op) == LSHIFTRT
+ || GET_CODE (op) == ASHIFTRT)
+ && SCALAR_INT_MODE_P (outermode)
++ && SCALAR_INT_MODE_P (innermode)
+ && GET_MODE_BITSIZE (outermode) < GET_MODE_BITSIZE (innermode)
+ && CONST_INT_P (XEXP (op, 1))
+ && GET_CODE (XEXP (op, 0)) == ZERO_EXTEND
+@@ -5514,6 +5641,7 @@
+ the outer subreg is effectively a truncation to the original mode. */
+ if (GET_CODE (op) == ASHIFT
+ && SCALAR_INT_MODE_P (outermode)
++ && SCALAR_INT_MODE_P (innermode)
+ && GET_MODE_BITSIZE (outermode) < GET_MODE_BITSIZE (innermode)
+ && CONST_INT_P (XEXP (op, 1))
+ && (GET_CODE (XEXP (op, 0)) == ZERO_EXTEND
+@@ -5527,7 +5655,7 @@
+ /* Recognize a word extraction from a multi-word subreg. */
+ if ((GET_CODE (op) == LSHIFTRT
+ || GET_CODE (op) == ASHIFTRT)
+- && SCALAR_INT_MODE_P (outermode)
++ && SCALAR_INT_MODE_P (innermode)
+ && GET_MODE_BITSIZE (outermode) >= BITS_PER_WORD
+ && GET_MODE_BITSIZE (innermode) >= (2 * GET_MODE_BITSIZE (outermode))
+ && CONST_INT_P (XEXP (op, 1))
+@@ -5549,6 +5677,7 @@
+
+ if ((GET_CODE (op) == LSHIFTRT
+ || GET_CODE (op) == ASHIFTRT)
++ && SCALAR_INT_MODE_P (innermode)
+ && MEM_P (XEXP (op, 0))
+ && CONST_INT_P (XEXP (op, 1))
+ && GET_MODE_SIZE (outermode) < GET_MODE_SIZE (GET_MODE (op))
+--- a/src/gcc/stor-layout.c
++++ b/src/gcc/stor-layout.c
+@@ -546,6 +546,34 @@
+ return MIN (BIGGEST_ALIGNMENT, MAX (1, mode_base_align[mode]*BITS_PER_UNIT));
+ }
+
++/* Return the natural mode of an array, given that it is SIZE bytes in
++ total and has elements of type ELEM_TYPE. */
++
++static enum machine_mode
++mode_for_array (tree elem_type, tree size)
++{
++ tree elem_size;
++ unsigned HOST_WIDE_INT int_size, int_elem_size;
++ bool limit_p;
++
++ /* One-element arrays get the component type's mode. */
++ elem_size = TYPE_SIZE (elem_type);
++ if (simple_cst_equal (size, elem_size))
++ return TYPE_MODE (elem_type);
++
++ limit_p = true;
++ if (host_integerp (size, 1) && host_integerp (elem_size, 1))
++ {
++ int_size = tree_low_cst (size, 1);
++ int_elem_size = tree_low_cst (elem_size, 1);
++ if (int_elem_size > 0
++ && int_size % int_elem_size == 0
++ && targetm.array_mode_supported_p (TYPE_MODE (elem_type),
++ int_size / int_elem_size))
++ limit_p = false;
++ }
++ return mode_for_size_tree (size, MODE_INT, limit_p);
++}
+
+ /* Subroutine of layout_decl: Force alignment required for the data type.
+ But if the decl itself wants greater alignment, don't override that. */
+@@ -2039,14 +2067,8 @@
+ && (TYPE_MODE (TREE_TYPE (type)) != BLKmode
+ || TYPE_NO_FORCE_BLK (TREE_TYPE (type))))
+ {
+- /* One-element arrays get the component type's mode. */
+- if (simple_cst_equal (TYPE_SIZE (type),
+- TYPE_SIZE (TREE_TYPE (type))))
+- SET_TYPE_MODE (type, TYPE_MODE (TREE_TYPE (type)));
+- else
+- SET_TYPE_MODE (type, mode_for_size_tree (TYPE_SIZE (type),
+- MODE_INT, 1));
+-
++ SET_TYPE_MODE (type, mode_for_array (TREE_TYPE (type),
++ TYPE_SIZE (type)));
+ if (TYPE_MODE (type) != BLKmode
+ && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT
+ && TYPE_ALIGN (type) < GET_MODE_ALIGNMENT (TYPE_MODE (type)))
+--- a/src/gcc/target.def
++++ b/src/gcc/target.def
+@@ -1344,6 +1344,13 @@
+ unsigned, (unsigned nunroll, struct loop *loop),
+ NULL)
+
++/* True if X is a legitimate MODE-mode immediate operand. */
++DEFHOOK
++(legitimate_constant_p,
++ "",
++ bool, (enum machine_mode mode, rtx x),
++ default_legitimate_constant_p)
++
+ /* True if the constant X cannot be placed in the constant pool. */
+ DEFHOOK
+ (cannot_force_const_mem,
+@@ -1611,6 +1618,38 @@
+ bool, (enum machine_mode mode),
+ hook_bool_mode_false)
+
++/* True if we should try to use a scalar mode to represent an array,
++ overriding the usual MAX_FIXED_MODE limit. */
++DEFHOOK
++(array_mode_supported_p,
++ "Return true if GCC should try to use a scalar mode to store an array\n\
++of @var{nelems} elements, given that each element has mode @var{mode}.\n\
++Returning true here overrides the usual @code{MAX_FIXED_MODE} limit\n\
++and allows GCC to use any defined integer mode.\n\
++\n\
++One use of this hook is to support vector load and store operations\n\
++that operate on several homogeneous vectors. For example, ARM NEON\n\
++has operations like:\n\
++\n\
++@smallexample\n\
++int8x8x3_t vld3_s8 (const int8_t *)\n\
++@end smallexample\n\
++\n\
++where the return type is defined as:\n\
++\n\
++@smallexample\n\
++typedef struct int8x8x3_t\n\
++@{\n\
++ int8x8_t val[3];\n\
++@} int8x8x3_t;\n\
++@end smallexample\n\
++\n\
++If this hook allows @code{val} to have a scalar mode, then\n\
++@code{int8x8x3_t} can have the same mode. GCC can then store\n\
++@code{int8x8x3_t}s in registers rather than forcing them onto the stack.",
++ bool, (enum machine_mode mode, unsigned HOST_WIDE_INT nelems),
++ hook_bool_mode_uhwi_false)
++
+ /* Compute cost of moving data from a register of class FROM to one of
+ TO, using MODE. */
+ DEFHOOK
+--- a/src/gcc/targhooks.c
++++ b/src/gcc/targhooks.c
+@@ -1519,4 +1519,15 @@
+ { OPT_LEVELS_NONE, 0, NULL, 0 }
+ };
+
++bool
++default_legitimate_constant_p (enum machine_mode mode ATTRIBUTE_UNUSED,
++ rtx x ATTRIBUTE_UNUSED)
++{
++#ifdef LEGITIMATE_CONSTANT_P
++ return LEGITIMATE_CONSTANT_P (x);
++#else
++ return true;
++#endif
++}
++
+ #include "gt-targhooks.h"
+--- a/src/gcc/targhooks.h
++++ b/src/gcc/targhooks.h
+@@ -183,3 +183,4 @@
+
+ extern void *default_get_pch_validity (size_t *);
+ extern const char *default_pch_valid_p (const void *, size_t);
++extern bool default_legitimate_constant_p (enum machine_mode, rtx);
+--- a/src/gcc/testsuite/ChangeLog
++++ b/src/gcc/testsuite/ChangeLog
+@@ -1,3 +1,69 @@
++2011-11-25 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/50408
++ * gfortran.dg/whole_file_35.f90: New.
++
++2011-11-24 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/51218
++ * resolve.c (pure_subroutine): If called subroutine is
++ impure, unset implicit_pure.
++ (resolve_function): Move impure check to simplify code.
++
++2011-11-22 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/51265
++ * g++.dg/cpp0x/decltype36.C: New.
++
++2011-11-19 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc.dg/delay-slot-2.c: New test.
++
++2011-11-18 Joseph Myers <joseph@codesourcery.com>
++
++ * gcc.dg/cpp/assert4.c: Test __linux__, not __gnu_linux__.
++
++2011-11-18 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/51150
++ * g++.dg/cpp0x/pr51150.C: New.
++
++2011-11-16 Richard Earnshaw <rearnsha@arm.com>
++ Bernd Schmidt <bernds@coudesourcery.com>
++ Sebastian Huber <sebastian.huber@embedded-brains.de>
++
++ PR target/49641
++ * gcc.target/arm/pr49641.c: New test.
++
++2011-11-10 Jakub Jelinek <jakub@redhat.com>
++
++ PR middle-end/51077
++ * gcc.c-torture/compile/pr51077.c: New test.
++
++2011-11-07 Jason Merrill <jason@redhat.com>
++
++ PR c++/50870
++ * g++.dg/cpp0x/decltype35.C: New.
++
++2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
++
++ * g++.dg/other/offsetof7.C: New test.
++
++2011-11-02 Bernd Schmidt <bernds@codesourcery.com>
++
++ * gcc.c-torture/compile/20110907.c: New file.
++
++2011-10-29 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/50901
++ * g++.dg/cpp0x/pr50901.C: New.
++
++2011-10-27 Uros Bizjak <ubizjak@gmail.com>
++ Steven G. Kargl <kargl@gcc.gnu.org>
++
++ PR target/50875
++ * gfortran.dg/pr50875.f90: New test.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/gcc/testsuite/g++.dg/cpp0x/decltype35.C
++++ b/src/gcc/testsuite/g++.dg/cpp0x/decltype35.C
+@@ -0,0 +1,15 @@
++// PR c++/50870
++// { dg-options -std=c++0x }
++
++template <class V>
++ struct impl
++ {
++ template <class T> static T create();
++ };
++
++template <class T, class U, class V, class
++ = decltype(impl<V>::template create<T>()
++ -> impl<V>::template create<U>())>
++struct tester { };
++
++tester<impl<float>*, int, float> ti;
+--- a/src/gcc/testsuite/g++.dg/cpp0x/decltype36.C
++++ b/src/gcc/testsuite/g++.dg/cpp0x/decltype36.C
+@@ -0,0 +1,21 @@
++// PR c++/51265
++// { dg-options -std=c++0x }
++
++struct Funny
++{
++ int print(int);
++};
++
++template<typename X>
++void c();
++
++template<typename X, X ff>
++void xx()
++{
++ c<decltype(ff)>();
++}
++
++int main()
++{
++ xx<int(Funny::*)(int), &Funny::print>();
++}
+--- a/src/gcc/testsuite/g++.dg/cpp0x/pr50901.C
++++ b/src/gcc/testsuite/g++.dg/cpp0x/pr50901.C
+@@ -0,0 +1,9 @@
++// { dg-options "-std=c++0x" }
++
++template<class T> int foo(int a)
++{
++ const unsigned b = a < 0 ? -a : a;
++ return 0;
++}
++
++int i = foo<float>(1);
+--- a/src/gcc/testsuite/g++.dg/cpp0x/pr51150.C
++++ b/src/gcc/testsuite/g++.dg/cpp0x/pr51150.C
+@@ -0,0 +1,20 @@
++// PR c++/51150
++// { dg-options "-std=c++0x" }
++
++struct Clock {
++ double Now();
++};
++template <class T> void Foo(Clock* clock) {
++ const int now = clock->Now();
++}
++
++template void Foo<float>(Clock*);
++
++template <class T> void Boo(int val) {
++ const int now1 = (double)(val);
++ const int now2 = const_cast<double>(val); // { dg-error "invalid" }
++ const int now3 = static_cast<double>(val);
++ const int now4 = reinterpret_cast<double>(val); // { dg-error "invalid" }
++}
++
++template void Boo<float>(int);
+--- a/src/gcc/testsuite/g++.dg/other/offsetof7.C
++++ b/src/gcc/testsuite/g++.dg/other/offsetof7.C
+@@ -0,0 +1,17 @@
++// PR c++/50608
++// Testcase by <dberger@oubliette.org>
++// { dg-do compile }
++
++struct A {
++ int offset;
++};
++
++struct B: public A {
++};
++
++struct C {
++ A a;
++ B b;
++};
++
++int fails = __builtin_offsetof (C, b.offset);
+--- a/src/gcc/testsuite/gcc.c-torture/compile/20110401-1.c
++++ b/src/gcc/testsuite/gcc.c-torture/compile/20110401-1.c
+@@ -0,0 +1,22 @@
++void asn1_length_der (unsigned long int len, unsigned char *ans, int *ans_len)
++{
++ int k;
++ unsigned char temp[4];
++ if (len < 128) {
++ if (ans != ((void *) 0))
++ ans[0] = (unsigned char) len;
++ *ans_len = 1;
++ } else {
++ k = 0;
++ while (len) {
++ temp[k++] = len & 0xFF;
++ len = len >> 8;
++ }
++ *ans_len = k + 1;
++ if (ans != ((void *) 0)) {
++ ans[0] = ((unsigned char) k & 0x7F) + 128;
++ while (k--)
++ ans[*ans_len - 1 - k] = temp[k];
++ }
++ }
++}
+--- a/src/gcc/testsuite/gcc.c-torture/compile/20110913-1.c
++++ b/src/gcc/testsuite/gcc.c-torture/compile/20110913-1.c
+@@ -0,0 +1,26 @@
++struct ieee754_double {
++ double d;
++};
++extern const float __exp_deltatable[178];
++float __ieee754_expf (float x)
++{
++ static const float himark = 88.72283935546875;
++ static const float lomark = -103.972084045410;
++ if (__builtin_isless(x, himark) && __builtin_isgreater(x, lomark))
++ {
++ int tval;
++ double x22, t, result, dx;
++ float delta;
++ struct ieee754_double ex2_u;
++ dx -= t;
++ tval = (int) (t * 512.0);
++ if (t >= 0)
++ delta = - __exp_deltatable[tval];
++ else
++ delta = __exp_deltatable[-tval];
++ x22 = (0.5000000496709180453 * dx + 1.0000001192102037084) * dx + delta;
++ result = x22 * ex2_u.d + ex2_u.d;
++ return (float) result;
++ }
++ return x;
++}
+--- a/src/gcc/testsuite/gcc.c-torture/compile/pr51077.c
++++ b/src/gcc/testsuite/gcc.c-torture/compile/pr51077.c
+@@ -0,0 +1,15 @@
++/* PR middle-end/51077 */
++
++struct S { unsigned char s, t[256]; };
++
++void
++foo (const struct S *x, struct S *y, int z)
++{
++ int i;
++ for (i = 0; i < 8; i++)
++ {
++ const struct S *a = &x[i];
++ __builtin___memcpy_chk (y->t, a->t, z, __builtin_object_size (y->t, 0));
++ y = (struct S *) &y->t[z];
++ }
++}
+--- a/src/gcc/testsuite/gcc.dg/cpp/assert4.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/assert4.c
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2003, 2006, 2008 Free Software Foundation, Inc.
++/* Copyright (C) 2003, 2006, 2008, 2009, 2011 Free Software Foundation, Inc.
+ Test builtin preprocessor assertions.
+ By Kaveh Ghazi <ghazi@caip.rutgers.edu>. */
+
+@@ -7,7 +7,7 @@
+
+ /* Check for #system assertions. */
+
+-#if defined __gnu_linux__
++#if defined __linux__
+ # if !#system(linux) || !#system(unix) || !#system(posix)
+ # error
+ # endif
+--- a/src/gcc/testsuite/gcc.dg/delay-slot-2.c
++++ b/src/gcc/testsuite/gcc.dg/delay-slot-2.c
+@@ -0,0 +1,116 @@
++/* PR rtl-optimization/51187 */
++/* Reported by Jurij Smakov <jurij@wooyd.org> */
++
++/* { dg-do compile } */
++/* { dg-options "-g -O2" } */
++
++extern int printf (__const char *__restrict __format, ...);
++extern void print_c_condition (const char *);
++
++enum decision_type
++{
++ DT_num_insns,
++ DT_mode, DT_code, DT_veclen,
++ DT_elt_zero_int, DT_elt_one_int, DT_elt_zero_wide, DT_elt_zero_wide_safe,
++ DT_const_int,
++ DT_veclen_ge, DT_dup, DT_pred, DT_c_test,
++ DT_accept_op, DT_accept_insn
++};
++
++struct decision_test
++{
++ struct decision_test *next;
++ enum decision_type type;
++
++ union
++ {
++ int num_insns;
++
++ struct
++ {
++ const char *name;
++ } pred;
++
++ const char *c_test;
++ int veclen;
++ int dup;
++ long intval;
++ int opno;
++
++ struct {
++ int code_number;
++ int lineno;
++ int num_clobbers_to_add;
++ } insn;
++ } u;
++};
++
++enum routine_type {
++ RECOG, SPLIT, PEEPHOLE2
++};
++
++void
++write_cond (struct decision_test *p, int depth,
++ enum routine_type subroutine_type)
++{
++ switch (p->type)
++ {
++ case DT_num_insns:
++ printf ("peep2_current_count >= %d", p->u.num_insns);
++ break;
++
++ case DT_code:
++ printf ("GET_CODE (x%d) == ", depth);
++ break;
++
++ case DT_veclen:
++ printf ("XVECLEN (x%d, 0) == %d", depth, p->u.veclen);
++ break;
++
++ case DT_elt_zero_int:
++ printf ("XINT (x%d, 0) == %d", depth, (int) p->u.intval);
++ break;
++
++ case DT_elt_one_int:
++ printf ("XINT (x%d, 1) == %d", depth, (int) p->u.intval);
++ break;
++
++ case DT_elt_zero_wide:
++ case DT_elt_zero_wide_safe:
++ printf ("XWINT (x%d, 0) == ", depth);
++ print_host_wide_int (p->u.intval);
++ break;
++
++ case DT_const_int:
++ printf ("x%d == const_int_rtx[MAX_SAVED_CONST_INT + (%d)]",
++ depth, (int) p->u.intval);
++ break;
++
++ case DT_veclen_ge:
++ printf ("XVECLEN (x%d, 0) >= %d", depth, p->u.veclen);
++ break;
++
++ case DT_dup:
++ printf ("rtx_equal_p (x%d, operands[%d])", depth, p->u.dup);
++ break;
++
++ case DT_pred:
++ printf ("%s (x%d)", p->u.pred.name, depth);
++ break;
++
++ case DT_c_test:
++ print_c_condition (p->u.c_test);
++ break;
++
++ case DT_accept_insn:
++ ((void)(__builtin_expect(!(subroutine_type == RECOG), 0) ? __builtin_unreachable(), 0 : 0));
++ ((void)(__builtin_expect(!(p->u.insn.num_clobbers_to_add), 0) ? __builtin_unreachable(), 0 : 0));
++ printf ("pnum_clobbers != NULL");
++ break;
++
++ default:
++ __builtin_unreachable();
++ }
++}
++
++/* { dg-final { scan-assembler "printf" } } */
+--- a/src/gcc/testsuite/gcc.dg/di-longlong64-sync-1.c
++++ b/src/gcc/testsuite/gcc.dg/di-longlong64-sync-1.c
+@@ -0,0 +1,164 @@
++/* { dg-do run } */
++/* { dg-require-effective-target sync_longlong } */
++/* { dg-options "-std=gnu99" } */
++/* { dg-message "note: '__sync_fetch_and_nand' changed semantics in GCC 4.4" "" { target *-*-* } 0 } */
++/* { dg-message "note: '__sync_nand_and_fetch' changed semantics in GCC 4.4" "" { target *-*-* } 0 } */
++
++
++/* Test basic functionality of the intrinsics. The operations should
++ not be optimized away if no one checks the return values. */
++
++/* Based on ia64-sync-[12].c, but 1) long on ARM is 32 bit so use long long
++ (an explicit 64bit type maybe a better bet) and 2) Use values that cross
++ the 32bit boundary and cause carries since the actual maths are done as
++ pairs of 32 bit instructions. */
++
++/* Note: This file is #included by some of the ARM tests. */
++
++__extension__ typedef __SIZE_TYPE__ size_t;
++
++extern void abort (void);
++extern void *memcpy (void *, const void *, size_t);
++extern int memcmp (const void *, const void *, size_t);
++
++/* Temporary space where the work actually gets done. */
++static long long AL[24];
++/* Values copied into AL before we start. */
++static long long init_di[24] = { 0x100000002ll, 0x200000003ll, 0, 1,
++
++ 0x100000002ll, 0x100000002ll,
++ 0x100000002ll, 0x100000002ll,
++
++ 0, 0x1000e0de0000ll,
++ 42 , 0xc001c0de0000ll,
++
++ -1ll, 0, 0xff00ff0000ll, -1ll,
++
++ 0, 0x1000e0de0000ll,
++ 42 , 0xc001c0de0000ll,
++
++ -1ll, 0, 0xff00ff0000ll, -1ll};
++/* This is what should be in AL at the end. */
++static long long test_di[24] = { 0x1234567890ll, 0x1234567890ll, 1, 0,
++
++ 0x100000002ll, 0x100000002ll,
++ 0x100000002ll, 0x100000002ll,
++
++ 1, 0xc001c0de0000ll,
++ 20, 0x1000e0de0000ll,
++
++ 0x300000007ll , 0x500000009ll,
++ 0xf100ff0001ll, ~0xa00000007ll,
++
++ 1, 0xc001c0de0000ll,
++ 20, 0x1000e0de0000ll,
++
++ 0x300000007ll , 0x500000009ll,
++ 0xf100ff0001ll, ~0xa00000007ll };
++
++/* First check they work in terms of what they do to memory. */
++static void
++do_noret_di (void)
++{
++ __sync_val_compare_and_swap (AL+0, 0x100000002ll, 0x1234567890ll);
++ __sync_bool_compare_and_swap (AL+1, 0x200000003ll, 0x1234567890ll);
++ __sync_lock_test_and_set (AL+2, 1);
++ __sync_lock_release (AL+3);
++
++ /* The following tests should not change the value since the
++ original does NOT match. */
++ __sync_val_compare_and_swap (AL+4, 0x000000002ll, 0x1234567890ll);
++ __sync_val_compare_and_swap (AL+5, 0x100000000ll, 0x1234567890ll);
++ __sync_bool_compare_and_swap (AL+6, 0x000000002ll, 0x1234567890ll);
++ __sync_bool_compare_and_swap (AL+7, 0x100000000ll, 0x1234567890ll);
++
++ __sync_fetch_and_add (AL+8, 1);
++ __sync_fetch_and_add (AL+9, 0xb000e0000000ll); /* + to both halves & carry. */
++ __sync_fetch_and_sub (AL+10, 22);
++ __sync_fetch_and_sub (AL+11, 0xb000e0000000ll);
++
++ __sync_fetch_and_and (AL+12, 0x300000007ll);
++ __sync_fetch_and_or (AL+13, 0x500000009ll);
++ __sync_fetch_and_xor (AL+14, 0xe00000001ll);
++ __sync_fetch_and_nand (AL+15, 0xa00000007ll);
++
++ /* These should be the same as the fetch_and_* cases except for
++ return value. */
++ __sync_add_and_fetch (AL+16, 1);
++ /* add to both halves & carry. */
++ __sync_add_and_fetch (AL+17, 0xb000e0000000ll);
++ __sync_sub_and_fetch (AL+18, 22);
++ __sync_sub_and_fetch (AL+19, 0xb000e0000000ll);
++
++ __sync_and_and_fetch (AL+20, 0x300000007ll);
++ __sync_or_and_fetch (AL+21, 0x500000009ll);
++ __sync_xor_and_fetch (AL+22, 0xe00000001ll);
++ __sync_nand_and_fetch (AL+23, 0xa00000007ll);
++}
++
++/* Now check return values. */
++static void
++do_ret_di (void)
++{
++ if (__sync_val_compare_and_swap (AL+0, 0x100000002ll, 0x1234567890ll) !=
++ 0x100000002ll) abort ();
++ if (__sync_bool_compare_and_swap (AL+1, 0x200000003ll, 0x1234567890ll) !=
++ 1) abort ();
++ if (__sync_lock_test_and_set (AL+2, 1) != 0) abort ();
++ __sync_lock_release (AL+3); /* no return value, but keep to match results. */
++
++ /* The following tests should not change the value since the
++ original does NOT match. */
++ if (__sync_val_compare_and_swap (AL+4, 0x000000002ll, 0x1234567890ll) !=
++ 0x100000002ll) abort ();
++ if (__sync_val_compare_and_swap (AL+5, 0x100000000ll, 0x1234567890ll) !=
++ 0x100000002ll) abort ();
++ if (__sync_bool_compare_and_swap (AL+6, 0x000000002ll, 0x1234567890ll) !=
++ 0) abort ();
++ if (__sync_bool_compare_and_swap (AL+7, 0x100000000ll, 0x1234567890ll) !=
++ 0) abort ();
++
++ if (__sync_fetch_and_add (AL+8, 1) != 0) abort ();
++ if (__sync_fetch_and_add (AL+9, 0xb000e0000000ll) != 0x1000e0de0000ll) abort ();
++ if (__sync_fetch_and_sub (AL+10, 22) != 42) abort ();
++ if (__sync_fetch_and_sub (AL+11, 0xb000e0000000ll) != 0xc001c0de0000ll)
++ abort ();
++
++ if (__sync_fetch_and_and (AL+12, 0x300000007ll) != -1ll) abort ();
++ if (__sync_fetch_and_or (AL+13, 0x500000009ll) != 0) abort ();
++ if (__sync_fetch_and_xor (AL+14, 0xe00000001ll) != 0xff00ff0000ll) abort ();
++ if (__sync_fetch_and_nand (AL+15, 0xa00000007ll) != -1ll) abort ();
++
++ /* These should be the same as the fetch_and_* cases except for
++ return value. */
++ if (__sync_add_and_fetch (AL+16, 1) != 1) abort ();
++ if (__sync_add_and_fetch (AL+17, 0xb000e0000000ll) != 0xc001c0de0000ll)
++ abort ();
++ if (__sync_sub_and_fetch (AL+18, 22) != 20) abort ();
++ if (__sync_sub_and_fetch (AL+19, 0xb000e0000000ll) != 0x1000e0de0000ll)
++ abort ();
++
++ if (__sync_and_and_fetch (AL+20, 0x300000007ll) != 0x300000007ll) abort ();
++ if (__sync_or_and_fetch (AL+21, 0x500000009ll) != 0x500000009ll) abort ();
++ if (__sync_xor_and_fetch (AL+22, 0xe00000001ll) != 0xf100ff0001ll) abort ();
++ if (__sync_nand_and_fetch (AL+23, 0xa00000007ll) != ~0xa00000007ll) abort ();
++}
++
++int main ()
++{
++ memcpy (AL, init_di, sizeof (init_di));
++
++ do_noret_di ();
++
++ if (memcmp (AL, test_di, sizeof (test_di)))
++ abort ();
++
++ memcpy (AL, init_di, sizeof (init_di));
++
++ do_ret_di ();
++
++ if (memcmp (AL, test_di, sizeof (test_di)))
++ abort ();
++
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.dg/di-sync-multithread.c
++++ b/src/gcc/testsuite/gcc.dg/di-sync-multithread.c
+@@ -0,0 +1,205 @@
++/* { dg-do run } */
++/* { dg-require-effective-target sync_longlong } */
++/* { dg-require-effective-target pthread_h } */
++/* { dg-require-effective-target pthread } */
++/* { dg-options "-pthread -std=gnu99" } */
++
++/* test of long long atomic ops performed in parallel in 3 pthreads
++ david.gilbert@linaro.org */
++
++#include <pthread.h>
++#include <unistd.h>
++
++/*#define DEBUGIT 1 */
++
++#ifdef DEBUGIT
++#include <stdio.h>
++
++#define DOABORT(x,...) {\
++ fprintf (stderr, x, __VA_ARGS__); fflush (stderr); abort ();\
++ }
++
++#else
++
++#define DOABORT(x,...) abort ();
++
++#endif
++
++/* Passed to each thread to describe which bits it is going to work on. */
++struct threadwork {
++ unsigned long long count; /* incremented each time the worker loops. */
++ unsigned int thread; /* ID */
++ unsigned int addlsb; /* 8 bit */
++ unsigned int logic1lsb; /* 5 bit */
++ unsigned int logic2lsb; /* 8 bit */
++};
++
++/* The shared word where all the atomic work is done. */
++static volatile long long workspace;
++
++/* A shared word to tell the workers to quit when non-0. */
++static long long doquit;
++
++extern void abort (void);
++
++/* Note this test doesn't test the return values much. */
++void*
++worker (void* data)
++{
++ struct threadwork *tw = (struct threadwork*)data;
++ long long add1bit = 1ll << tw->addlsb;
++ long long logic1bit = 1ll << tw->logic1lsb;
++ long long logic2bit = 1ll << tw->logic2lsb;
++
++ /* Clear the bits we use. */
++ __sync_and_and_fetch (&workspace, ~(0xffll * add1bit));
++ __sync_fetch_and_and (&workspace, ~(0x1fll * logic1bit));
++ __sync_fetch_and_and (&workspace, ~(0xffll * logic2bit));
++
++ do
++ {
++ long long tmp1, tmp2, tmp3;
++ /* OK, lets try and do some stuff to the workspace - by the end
++ of the main loop our area should be the same as it is now - i.e. 0. */
++
++ /* Push the arithmetic section upto 128 - one of the threads will
++ case this to carry accross the 32bit boundary. */
++ for (tmp2 = 0; tmp2 < 64; tmp2++)
++ {
++ /* Add 2 using the two different adds. */
++ tmp1 = __sync_add_and_fetch (&workspace, add1bit);
++ tmp3 = __sync_fetch_and_add (&workspace, add1bit);
++
++ /* The value should be the intermediate add value in both cases. */
++ if ((tmp1 & (add1bit * 0xff)) != (tmp3 & (add1bit * 0xff)))
++ DOABORT ("Mismatch of add intermediates on thread %d "
++ "workspace=0x%llx tmp1=0x%llx "
++ "tmp2=0x%llx tmp3=0x%llx\n",
++ tw->thread, workspace, tmp1, tmp2, tmp3);
++ }
++
++ /* Set the logic bits. */
++ tmp2=__sync_or_and_fetch (&workspace,
++ 0x1fll * logic1bit | 0xffll * logic2bit);
++
++ /* Check the logic bits are set and the arithmetic value is correct. */
++ if ((tmp2 & (0x1fll * logic1bit | 0xffll * logic2bit
++ | 0xffll * add1bit))
++ != (0x1fll * logic1bit | 0xffll * logic2bit | 0x80ll * add1bit))
++ DOABORT ("Midloop check failed on thread %d "
++ "workspace=0x%llx tmp2=0x%llx "
++ "masktmp2=0x%llx expected=0x%llx\n",
++ tw->thread, workspace, tmp2,
++ tmp2 & (0x1fll * logic1bit | 0xffll * logic2bit |
++ 0xffll * add1bit),
++ (0x1fll * logic1bit | 0xffll * logic2bit | 0x80ll * add1bit));
++
++ /* Pull the arithmetic set back down to 0 - again this should cause a
++ carry across the 32bit boundary in one thread. */
++
++ for (tmp2 = 0; tmp2 < 64; tmp2++)
++ {
++ /* Subtract 2 using the two different subs. */
++ tmp1=__sync_sub_and_fetch (&workspace, add1bit);
++ tmp3=__sync_fetch_and_sub (&workspace, add1bit);
++
++ /* The value should be the intermediate sub value in both cases. */
++ if ((tmp1 & (add1bit * 0xff)) != (tmp3 & (add1bit * 0xff)))
++ DOABORT ("Mismatch of sub intermediates on thread %d "
++ "workspace=0x%llx tmp1=0x%llx "
++ "tmp2=0x%llx tmp3=0x%llx\n",
++ tw->thread, workspace, tmp1, tmp2, tmp3);
++ }
++
++
++ /* Clear the logic bits. */
++ __sync_fetch_and_xor (&workspace, 0x1fll * logic1bit);
++ tmp3=__sync_and_and_fetch (&workspace, ~(0xffll * logic2bit));
++
++ /* The logic bits and the arithmetic bits should be zero again. */
++ if (tmp3 & (0x1fll * logic1bit | 0xffll * logic2bit | 0xffll * add1bit))
++ DOABORT ("End of worker loop; bits none 0 on thread %d "
++ "workspace=0x%llx tmp3=0x%llx "
++ "mask=0x%llx maskedtmp3=0x%llx\n",
++ tw->thread, workspace, tmp3, (0x1fll * logic1bit |
++ 0xffll * logic2bit | 0xffll * add1bit),
++ tmp3 & (0x1fll * logic1bit | 0xffll * logic2bit | 0xffll * add1bit));
++
++ __sync_add_and_fetch (&tw->count, 1);
++ }
++ while (!__sync_bool_compare_and_swap (&doquit, 1, 1));
++
++ pthread_exit (0);
++}
++
++int
++main ()
++{
++ /* We have 3 threads doing three sets of operations, an 8 bit
++ arithmetic field, a 5 bit logic field and an 8 bit logic
++ field (just to pack them all in).
++
++ 6 5 4 4 3 2 1
++ 3 6 8 0 2 4 6 8 0
++ |...,...|...,...|...,...|...,...|...,...|...,...|...,...|...,...
++ - T0 -- T1 -- T2 --T2 -- T0 -*- T2-- T1-- T1 -***- T0-
++ logic2 logic2 arith log2 arith log1 log1 arith log1
++
++ */
++ unsigned int t;
++ long long tmp;
++ int err;
++
++ struct threadwork tw[3]={
++ { 0ll, 0, 27, 0, 56 },
++ { 0ll, 1, 8,16, 48 },
++ { 0ll, 2, 40,21, 35 }
++ };
++
++ pthread_t threads[3];
++
++ __sync_lock_release (&doquit);
++
++ /* Get the work space into a known value - All 1's. */
++ __sync_lock_release (&workspace); /* Now all 0. */
++ tmp = __sync_val_compare_and_swap (&workspace, 0, -1ll);
++ if (tmp!=0)
++ DOABORT ("Initial __sync_val_compare_and_swap wasn't 0 workspace=0x%llx "
++ "tmp=0x%llx\n", workspace,tmp);
++
++ for (t = 0; t < 3; t++)
++ {
++ err=pthread_create (&threads[t], NULL , worker, &tw[t]);
++ if (err) DOABORT ("pthread_create failed on thread %d with error %d\n",
++ t, err);
++ };
++
++ sleep (5);
++
++ /* Stop please. */
++ __sync_lock_test_and_set (&doquit, 1ll);
++
++ for (t = 0; t < 3; t++)
++ {
++ err=pthread_join (threads[t], NULL);
++ if (err)
++ DOABORT ("pthread_join failed on thread %d with error %d\n", t, err);
++ };
++
++ __sync_synchronize ();
++
++ /* OK, so all the workers have finished -
++ the workers should have zero'd their workspace, the unused areas
++ should still be 1. */
++ if (!__sync_bool_compare_and_swap (&workspace, 0x040000e0ll, 0))
++ DOABORT ("End of run workspace mismatch, got %llx\n", workspace);
++
++ /* All the workers should have done some work. */
++ for (t = 0; t < 3; t++)
++ {
++ if (tw[t].count == 0) DOABORT ("Worker %d gave 0 count\n", t);
++ };
++
++ return 0;
++}
++
+--- a/src/gcc/testsuite/gcc.dg/pr50193-1.c
++++ b/src/gcc/testsuite/gcc.dg/pr50193-1.c
+@@ -0,0 +1,10 @@
++/* PR 50193: ARM: ICE on a | (b << negative-constant) */
++/* Ensure that the compiler doesn't ICE. */
++
++/* { dg-options "-O2" } */
++
++int
++foo(int a, int b)
++{
++ return a | (b << -3); /* { dg-warning "left shift count is negative" } */
++}
+--- a/src/gcc/testsuite/gcc.dg/pr50717-1.c
++++ b/src/gcc/testsuite/gcc.dg/pr50717-1.c
+@@ -0,0 +1,26 @@
++/* PR tree-optimization/50717 */
++/* Ensure that widening multiply-and-accumulate is not used where integer
++ type promotion or users' casts should prevent it. */
++
++/* { dg-options "-O2 -fdump-tree-widening_mul" } */
++
++long long
++f (unsigned int a, char b, long long c)
++{
++ return (a * b) + c;
++}
++
++int
++g (short a, short b, int c)
++{
++ return (short)(a * b) + c;
++}
++
++int
++h (char a, char b, int c)
++{
++ return (char)(a * b) + c;
++}
++
++/* { dg-final { scan-tree-dump-times "WIDEN_MULT_PLUS_EXPR" 0 "widening_mul" } } */
++/* { dg-final { cleanup-tree-dump "widening_mul" } } */
+--- a/src/gcc/testsuite/gcc.dg/sms-10.c
++++ b/src/gcc/testsuite/gcc.dg/sms-10.c
+@@ -0,0 +1,118 @@
++ /* { dg-do run } */
++ /* { dg-options "-O2 -fmodulo-sched -fmodulo-sched-allow-regmoves -fdump-rtl-sms" } */
++
++
++typedef __SIZE_TYPE__ size_t;
++extern void *malloc (size_t);
++extern void free (void *);
++extern void abort (void);
++
++struct regstat_n_sets_and_refs_t
++{
++ int sets;
++ int refs;
++};
++
++struct regstat_n_sets_and_refs_t *regstat_n_sets_and_refs;
++
++struct df_reg_info
++{
++ unsigned int n_refs;
++};
++
++struct df_d
++{
++ struct df_reg_info **def_regs;
++ struct df_reg_info **use_regs;
++};
++struct df_d *df;
++
++static inline int
++REG_N_SETS (int regno)
++{
++ return regstat_n_sets_and_refs[regno].sets;
++}
++
++__attribute__ ((noinline))
++ int max_reg_num (void)
++{
++ return 100;
++}
++
++__attribute__ ((noinline))
++ void regstat_init_n_sets_and_refs (void)
++{
++ unsigned int i;
++ unsigned int max_regno = max_reg_num ();
++
++ for (i = 0; i < max_regno; i++)
++ {
++ (regstat_n_sets_and_refs[i].sets = (df->def_regs[(i)]->n_refs));
++ (regstat_n_sets_and_refs[i].refs =
++ (df->use_regs[(i)]->n_refs) + REG_N_SETS (i));
++ }
++}
++
++int a_sets[100] =
++ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
++ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
++ 40, 41, 42,
++ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
++ 62, 63, 64,
++ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
++ 84, 85, 86,
++ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
++};
++
++int a_refs[100] =
++ { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
++ 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76,
++ 78, 80, 82,
++ 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116,
++ 118, 120,
++ 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150,
++ 152, 154, 156,
++ 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186,
++ 188, 190, 192,
++ 194, 196, 198
++};
++
++int
++main ()
++{
++ struct df_reg_info *b[100], *c[100];
++ struct df_d df1;
++ size_t s = sizeof (struct df_reg_info);
++ struct regstat_n_sets_and_refs_t a[100];
++
++ df = &df1;
++ regstat_n_sets_and_refs = a;
++ int i;
++
++ for (i = 0; i < 100; i++)
++ {
++ b[i] = (struct df_reg_info *) malloc (s);
++ b[i]->n_refs = i;
++ c[i] = (struct df_reg_info *) malloc (s);
++ c[i]->n_refs = i;
++ }
++
++ df1.def_regs = b;
++ df1.use_regs = c;
++ regstat_init_n_sets_and_refs ();
++
++ for (i = 0; i < 100; i++)
++ if ((a[i].sets != a_sets[i]) || (a[i].refs != a_refs[i]))
++ abort ();
++
++ for (i = 0; i < 100; i++)
++ {
++ free (b[i]);
++ free (c[i]);
++ }
++
++ return 0;
++}
++
++/* { dg-final { scan-rtl-dump-times "SMS succeeded" 1 "sms" { target powerpc*-*-* } } } */
++/* { dg-final { cleanup-rtl-dump "sms" } } */
+--- a/src/gcc/testsuite/gcc.dg/sms-9.c
++++ b/src/gcc/testsuite/gcc.dg/sms-9.c
+@@ -0,0 +1,60 @@
++/* { dg-do run } */
++/* { dg-options "-O2 -fmodulo-sched -fno-auto-inc-dec -O2 -fmodulo-sched-allow-regmoves" } */
++
++#include <stdlib.h>
++#include <stdarg.h>
++
++struct df_ref_info
++{
++ unsigned int *begin;
++ unsigned int *count;
++};
++
++extern void *memset (void *s, int c, __SIZE_TYPE__ n);
++
++
++__attribute__ ((noinline))
++ int
++ df_reorganize_refs_by_reg_by_insn (struct df_ref_info *ref_info,
++ int num, unsigned int start)
++{
++ unsigned int m = num;
++ unsigned int offset = 77;
++ unsigned int r;
++
++ for (r = start; r < m; r++)
++ {
++ ref_info->begin[r] = offset;
++ offset += ref_info->count[r];
++ ref_info->count[r] = 0;
++ }
++
++ return offset;
++}
++
++int
++main ()
++{
++ struct df_ref_info temp;
++ int num = 100;
++ unsigned int start = 5;
++ int i, offset;
++
++ temp.begin = malloc (100 * sizeof (unsigned int));
++ temp.count = malloc (100 * sizeof (unsigned int));
++
++ memset (temp.begin, 0, sizeof (unsigned int) * num);
++ memset (temp.count, 0, sizeof (unsigned int) * num);
++
++ for (i = 0; i < num; i++)
++ temp.count[i] = i + 1;
++
++ offset = df_reorganize_refs_by_reg_by_insn (&temp, num, start);
++
++ if (offset != 5112)
++ abort ();
++
++ free (temp.begin);
++ free (temp.count);
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.dg/torture/pr49030.c
++++ b/src/gcc/testsuite/gcc.dg/torture/pr49030.c
+@@ -0,0 +1,19 @@
++void
++sample_move_d32u24_sS (char *dst, float *src, unsigned long nsamples,
++ unsigned long dst_skip)
++{
++ long long y;
++ while (nsamples--)
++ {
++ y = (long long) (*src * 8388608.0f) << 8;
++ if (y > 2147483647) {
++ *(int *) dst = 2147483647;
++ } else if (y < -2147483647 - 1) {
++ *(int *) dst = -2147483647 - 1;
++ } else {
++ *(int *) dst = (int) y;
++ }
++ dst += dst_skip;
++ src++;
++ }
++}
+--- a/src/gcc/testsuite/gcc.dg/torture/pr49169.c
++++ b/src/gcc/testsuite/gcc.dg/torture/pr49169.c
+@@ -0,0 +1,15 @@
++/* { dg-do compile { target { arm*-*-* || mips*-*-* } } } */
++
++#include <stdlib.h>
++#include <stdint.h>
++
++int
++main (void)
++{
++ void *p = main;
++ if ((intptr_t) p & 1)
++ abort ();
++ return 0;
++}
++
++/* { dg-final { scan-assembler "abort" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/O3-pr39675-2.c
++++ b/src/gcc/testsuite/gcc.dg/vect/O3-pr39675-2.c
+@@ -26,7 +26,7 @@
+ }
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided_wide } } } */
+-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_strided_wide } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_strided4 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/bb-slp-11.c
++++ b/src/gcc/testsuite/gcc.dg/vect/bb-slp-11.c
+@@ -48,7 +48,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 0 "slp" } } */
+-/* { dg-final { scan-tree-dump-times "SLP with multiple types" 1 "slp" } } */
++/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp" { target vect64 } } } */
+ /* { dg-final { cleanup-tree-dump "slp" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/bb-slp-24.c
++++ b/src/gcc/testsuite/gcc.dg/vect/bb-slp-24.c
+@@ -0,0 +1,59 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define A 3
++#define N 256
++
++short src[N], dst[N];
++
++void foo (short * __restrict__ dst, short * __restrict__ src, int h,
++ int stride, int dummy)
++{
++ int i;
++ h /= 8;
++ for (i = 0; i < h; i++)
++ {
++ dst[0] += A*src[0];
++ dst[1] += A*src[1];
++ dst[2] += A*src[2];
++ dst[3] += A*src[3];
++ dst[4] += A*src[4];
++ dst[5] += A*src[5];
++ dst[6] += A*src[6];
++ dst[7] += A*src[7];
++ dst += stride;
++ src += stride;
++ if (dummy == 32)
++ abort ();
++ }
++}
++
++
++int main (void)
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ dst[i] = 0;
++ src[i] = i;
++ }
++
++ foo (dst, src, N, 8, 0);
++
++ for (i = 0; i < N; i++)
++ {
++ if (dst[i] != A * i)
++ abort ();
++ }
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp" { target vect_element_align } } } */
++/* { dg-final { cleanup-tree-dump "slp" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/bb-slp-25.c
++++ b/src/gcc/testsuite/gcc.dg/vect/bb-slp-25.c
+@@ -0,0 +1,59 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define A 3
++#define B 4
++#define N 256
++
++short src[N], dst[N];
++
++void foo (short * __restrict__ dst, short * __restrict__ src, int h, int stride, int dummy)
++{
++ int i;
++ h /= 16;
++ for (i = 0; i < h; i++)
++ {
++ dst[0] += A*src[0] + src[stride];
++ dst[1] += A*src[1] + src[1+stride];
++ dst[2] += A*src[2] + src[2+stride];
++ dst[3] += A*src[3] + src[3+stride];
++ dst[4] += A*src[4] + src[4+stride];
++ dst[5] += A*src[5] + src[5+stride];
++ dst[6] += A*src[6] + src[6+stride];
++ dst[7] += A*src[7] + src[7+stride];
++ dst += 8;
++ src += 8;
++ if (dummy == 32)
++ abort ();
++ }
++}
++
++
++int main (void)
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ dst[i] = 0;
++ src[i] = i;
++ }
++
++ foo (dst, src, N, 8, 0);
++
++ for (i = 0; i < N/2; i++)
++ {
++ if (dst[i] != A * i + i + 8)
++ abort ();
++ }
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp" { target vect_element_align } } } */
++/* { dg-final { cleanup-tree-dump "slp" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/bb-slp-26.c
++++ b/src/gcc/testsuite/gcc.dg/vect/bb-slp-26.c
+@@ -0,0 +1,60 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define A 3
++#define B 4
++#define N 256
++
++char src[N], dst[N];
++
++void foo (char * __restrict__ dst, char * __restrict__ src, int h,
++ int stride, int dummy)
++{
++ int i;
++ h /= 16;
++ for (i = 0; i < h; i++)
++ {
++ dst[0] += A*src[0];
++ dst[1] += A*src[1];
++ dst[2] += A*src[2];
++ dst[3] += A*src[3];
++ dst[4] += A*src[4];
++ dst[5] += A*src[5];
++ dst[6] += A*src[6];
++ dst[7] += A*src[7];
++ dst += 8;
++ src += 8;
++ if (dummy == 32)
++ abort ();
++ }
++}
++
++
++int main (void)
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ dst[i] = 0;
++ src[i] = i/8;
++ }
++
++ foo (dst, src, N, 8, 0);
++
++ for (i = 0; i < N/2; i++)
++ {
++ if (dst[i] != A * src[i])
++ abort ();
++ }
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp" { target vect64 } } } */
++/* { dg-final { cleanup-tree-dump "slp" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/bb-slp-27.c
++++ b/src/gcc/testsuite/gcc.dg/vect/bb-slp-27.c
+@@ -0,0 +1,49 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define A 3
++#define N 16
++
++short src[N], dst[N];
++
++void foo (int a)
++{
++ dst[0] += a*src[0];
++ dst[1] += a*src[1];
++ dst[2] += a*src[2];
++ dst[3] += a*src[3];
++ dst[4] += a*src[4];
++ dst[5] += a*src[5];
++ dst[6] += a*src[6];
++ dst[7] += a*src[7];
++}
++
++
++int main (void)
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ dst[i] = 0;
++ src[i] = i;
++ }
++
++ foo (A);
++
++ for (i = 0; i < 8; i++)
++ {
++ if (dst[i] != A * i)
++ abort ();
++ }
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp" { target { vect_int_mult && { vect_unpack && vect_pack_trunc } } } } } */
++/* { dg-final { cleanup-tree-dump "slp" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/bb-slp-28.c
++++ b/src/gcc/testsuite/gcc.dg/vect/bb-slp-28.c
+@@ -0,0 +1,71 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define A 300
++#define N 16
++
++char src[N];
++short dst[N];
++short src1[N], dst1[N];
++
++void foo (int a)
++{
++ dst[0] = (short) (a * (int) src[0]);
++ dst[1] = (short) (a * (int) src[1]);
++ dst[2] = (short) (a * (int) src[2]);
++ dst[3] = (short) (a * (int) src[3]);
++ dst[4] = (short) (a * (int) src[4]);
++ dst[5] = (short) (a * (int) src[5]);
++ dst[6] = (short) (a * (int) src[6]);
++ dst[7] = (short) (a * (int) src[7]);
++ dst[8] = (short) (a * (int) src[8]);
++ dst[9] = (short) (a * (int) src[9]);
++ dst[10] = (short) (a * (int) src[10]);
++ dst[11] = (short) (a * (int) src[11]);
++ dst[12] = (short) (a * (int) src[12]);
++ dst[13] = (short) (a * (int) src[13]);
++ dst[14] = (short) (a * (int) src[14]);
++ dst[15] = (short) (a * (int) src[15]);
++
++ dst1[0] += src1[0];
++ dst1[1] += src1[1];
++ dst1[2] += src1[2];
++ dst1[3] += src1[3];
++ dst1[4] += src1[4];
++ dst1[5] += src1[5];
++ dst1[6] += src1[6];
++ dst1[7] += src1[7];
++}
++
++
++int main (void)
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ dst[i] = 2;
++ dst1[i] = 0;
++ src[i] = i;
++ src1[i] = i+2;
++ }
++
++ foo (A);
++
++ for (i = 0; i < N; i++)
++ {
++ if (dst[i] != A * i
++ || (i < N/2 && dst1[i] != i + 2))
++ abort ();
++ }
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp" { target { vect_int_mult && { vect_pack_trunc && vect_unpack } } } } } */
++/* { dg-final { cleanup-tree-dump "slp" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/bb-slp-29.c
++++ b/src/gcc/testsuite/gcc.dg/vect/bb-slp-29.c
+@@ -0,0 +1,59 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define A 3
++#define B 4
++#define N 256
++
++short src[N], dst[N];
++
++void foo (short * __restrict__ dst, short * __restrict__ src, int h, int stride, int dummy)
++{
++ int i;
++ h /= 16;
++ for (i = 0; i < h; i++)
++ {
++ dst[0] = A*src[0] + B*src[1];
++ dst[1] = A*src[1] + B*src[2];
++ dst[2] = A*src[2] + B*src[3];
++ dst[3] = A*src[3] + B*src[4];
++ dst[4] = A*src[4] + B*src[5];
++ dst[5] = A*src[5] + B*src[6];
++ dst[6] = A*src[6] + B*src[7];
++ dst[7] = A*src[7] + B*src[8];
++ dst += stride;
++ src += stride;
++ if (dummy == 32)
++ abort ();
++ }
++}
++
++
++int main (void)
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ dst[i] = 0;
++ src[i] = i;
++ }
++
++ foo (dst, src, N, 8, 0);
++
++ for (i = 0; i < N/2; i++)
++ {
++ if (dst[i] != A * src[i] + B * src[i+1])
++ abort ();
++ }
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp" { target { vect_int_mult && vect_element_align } } } } */
++/* { dg-final { cleanup-tree-dump "slp" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/bb-slp-cond-1.c
++++ b/src/gcc/testsuite/gcc.dg/vect/bb-slp-cond-1.c
+@@ -0,0 +1,46 @@
++/* { dg-require-effective-target vect_condition } */
++
++#include "tree-vect.h"
++
++#define N 128
++
++__attribute__((noinline, noclone)) void
++foo (int *a, int stride)
++{
++ int i;
++
++ for (i = 0; i < N/stride; i++, a += stride)
++ {
++ a[0] = a[0] ? 1 : 5;
++ a[1] = a[1] ? 2 : 6;
++ a[2] = a[2] ? 3 : 7;
++ a[3] = a[3] ? 4 : 8;
++ }
++}
++
++
++int a[N];
++int main ()
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ a[i] = i;
++
++ foo (a, 4);
++
++ for (i = 1; i < N; i++)
++ if (a[i] != i%4 + 1)
++ abort ();
++
++ if (a[0] != 5)
++ abort ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp" { target vect_element_align } } } */
++/* { dg-final { cleanup-tree-dump "slp" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/bb-slp-cond-3.c
++++ b/src/gcc/testsuite/gcc.dg/vect/bb-slp-cond-3.c
+@@ -0,0 +1,85 @@
++/* { dg-require-effective-target vect_condition } */
++
++#include "tree-vect.h"
++
++#define N 64
++
++/* Comparison in int, then/else and result in unsigned char. */
++
++static inline unsigned char
++foo (int x, int y, int a, int b)
++{
++ if (x >= y)
++ return a;
++ else
++ return b;
++}
++
++__attribute__((noinline, noclone)) void
++bar (unsigned char * __restrict__ a, unsigned char * __restrict__ b,
++ unsigned char * __restrict__ c, unsigned char * __restrict__ d,
++ unsigned char * __restrict__ e, int stride, int w)
++{
++ int i;
++ for (i = 0; i < N/stride; i++, a += stride, b += stride, c += stride,
++ d += stride, e += stride)
++ {
++ e[0] = foo (c[0], d[0], a[0] * w, b[0] * w);
++ e[1] = foo (c[1], d[1], a[1] * w, b[1] * w);
++ e[2] = foo (c[2], d[2], a[2] * w, b[2] * w);
++ e[3] = foo (c[3], d[3], a[3] * w, b[3] * w);
++ e[4] = foo (c[4], d[4], a[4] * w, b[4] * w);
++ e[5] = foo (c[5], d[5], a[5] * w, b[5] * w);
++ e[6] = foo (c[6], d[6], a[6] * w, b[6] * w);
++ e[7] = foo (c[7], d[7], a[7] * w, b[7] * w);
++ e[8] = foo (c[8], d[8], a[8] * w, b[8] * w);
++ e[9] = foo (c[9], d[9], a[9] * w, b[9] * w);
++ e[10] = foo (c[10], d[10], a[10] * w, b[10] * w);
++ e[11] = foo (c[11], d[11], a[11] * w, b[11] * w);
++ e[12] = foo (c[12], d[12], a[12] * w, b[12] * w);
++ e[13] = foo (c[13], d[13], a[13] * w, b[13] * w);
++ e[14] = foo (c[14], d[14], a[14] * w, b[14] * w);
++ e[15] = foo (c[15], d[15], a[15] * w, b[15] * w);
++ }
++}
++
++
++unsigned char a[N], b[N], c[N], d[N], e[N];
++
++int main ()
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ a[i] = i;
++ b[i] = 5;
++ e[i] = 0;
++
++ switch (i % 9)
++ {
++ case 0: asm (""); c[i] = i; d[i] = i + 1; break;
++ case 1: c[i] = 0; d[i] = 0; break;
++ case 2: c[i] = i + 1; d[i] = i - 1; break;
++ case 3: c[i] = i; d[i] = i + 7; break;
++ case 4: c[i] = i; d[i] = i; break;
++ case 5: c[i] = i + 16; d[i] = i + 3; break;
++ case 6: c[i] = i - 5; d[i] = i; break;
++ case 7: c[i] = i; d[i] = i; break;
++ case 8: c[i] = i; d[i] = i - 7; break;
++ }
++ }
++
++ bar (a, b, c, d, e, 16, 2);
++ for (i = 0; i < N; i++)
++ if (e[i] != ((i % 3) == 0 ? 10 : 2 * i))
++ abort ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp" { target { vect_element_align && vect_int_mult } } } } */
++/* { dg-final { cleanup-tree-dump "slp" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/bb-slp-cond-4.c
++++ b/src/gcc/testsuite/gcc.dg/vect/bb-slp-cond-4.c
+@@ -0,0 +1,85 @@
++/* { dg-require-effective-target vect_condition } */
++
++#include "tree-vect.h"
++
++#define N 64
++
++/* Comparison in short, then/else and result in int. */
++static inline int
++foo (short x, short y, int a, int b)
++{
++ if (x >= y)
++ return a;
++ else
++ return b;
++}
++
++__attribute__((noinline, noclone)) void
++bar (short * __restrict__ a, short * __restrict__ b,
++ short * __restrict__ c, short * __restrict__ d,
++ int * __restrict__ e, int stride, int w)
++{
++ int i;
++ for (i = 0; i < N/stride; i++, a += stride, b += stride, c += stride,
++ d += stride, e += stride)
++ {
++ e[0] = foo (c[0], d[0], a[0], b[0]);
++ e[1] = foo (c[1], d[1], a[1], b[1]);
++ e[2] = foo (c[2], d[2], a[2], b[2]);
++ e[3] = foo (c[3], d[3], a[3], b[3]);
++ e[4] = foo (c[4], d[4], a[4], b[4]);
++ e[5] = foo (c[5], d[5], a[5], b[5]);
++ e[6] = foo (c[6], d[6], a[6], b[6]);
++ e[7] = foo (c[7], d[7], a[7], b[7]);
++ e[8] = foo (c[8], d[8], a[8], b[8]);
++ e[9] = foo (c[9], d[9], a[9], b[9]);
++ e[10] = foo (c[10], d[10], a[10], b[10]);
++ e[11] = foo (c[11], d[11], a[11], b[11]);
++ e[12] = foo (c[12], d[12], a[12], b[12]);
++ e[13] = foo (c[13], d[13], a[13], b[13]);
++ e[14] = foo (c[14], d[14], a[14], b[14]);
++ e[15] = foo (c[15], d[15], a[15], b[15]);
++ }
++}
++
++
++short a[N], b[N], c[N], d[N];
++int e[N];
++
++int main ()
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ a[i] = i;
++ b[i] = 5;
++ e[i] = 0;
++
++ switch (i % 9)
++ {
++ case 0: asm (""); c[i] = - i - 1; d[i] = i + 1; break;
++ case 1: c[i] = 0; d[i] = 0; break;
++ case 2: c[i] = i + 1; d[i] = - i - 1; break;
++ case 3: c[i] = i; d[i] = i + 7; break;
++ case 4: c[i] = i; d[i] = i; break;
++ case 5: c[i] = i + 16; d[i] = i + 3; break;
++ case 6: c[i] = - i - 5; d[i] = - i; break;
++ case 7: c[i] = - i; d[i] = - i; break;
++ case 8: c[i] = - i; d[i] = - i - 7; break;
++ }
++ }
++
++ bar (a, b, c, d, e, 16, 2);
++ for (i = 0; i < N; i++)
++ if (e[i] != ((i % 3) == 0 ? 5 : i))
++ abort ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp" { target vect_element_align } } } */
++/* { dg-final { cleanup-tree-dump "slp" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/bb-slp-pattern-1.c
++++ b/src/gcc/testsuite/gcc.dg/vect/bb-slp-pattern-1.c
+@@ -0,0 +1,55 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 8
++
++unsigned short X[N];
++unsigned short Y[N];
++unsigned int result[N];
++
++/* unsigned short->unsigned int widening-mult. */
++__attribute__ ((noinline, noclone)) void
++foo (void)
++{
++ result[0] = (unsigned int)(X[0] * Y[0]);
++ result[1] = (unsigned int)(X[1] * Y[1]);
++ result[2] = (unsigned int)(X[2] * Y[2]);
++ result[3] = (unsigned int)(X[3] * Y[3]);
++ result[4] = (unsigned int)(X[4] * Y[4]);
++ result[5] = (unsigned int)(X[5] * Y[5]);
++ result[6] = (unsigned int)(X[6] * Y[6]);
++ result[7] = (unsigned int)(X[7] * Y[7]);
++}
++
++int main (void)
++{
++ int i, tmp;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ X[i] = i;
++ Y[i] = 64-i;
++ }
++
++ foo ();
++
++ for (i = 0; i < N; i++)
++ {
++ __asm__ volatile ("");
++ tmp = X[i] * Y[i];
++ if (result[i] != tmp)
++ abort ();
++ }
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "slp" { target { vect_widen_mult_hi_to_si || vect_unpack } } } } */
++/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 8 "slp" { target vect_widen_mult_hi_to_si_pattern } } } */
++/* { dg-final { scan-tree-dump-times "pattern recognized" 8 "slp" { target vect_widen_mult_hi_to_si_pattern } } } */
++/* { dg-final { cleanup-tree-dump "slp" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/bb-slp-pattern-2.c
++++ b/src/gcc/testsuite/gcc.dg/vect/bb-slp-pattern-2.c
+@@ -0,0 +1,53 @@
++/* { dg-require-effective-target vect_condition } */
++
++#include "tree-vect.h"
++
++#define N 128
++
++__attribute__((noinline, noclone)) void
++foo (short * __restrict__ a, int * __restrict__ b, int stride)
++{
++ int i;
++
++ for (i = 0; i < N/stride; i++, a += stride, b += stride)
++ {
++ a[0] = b[0] ? 1 : 7;
++ a[1] = b[1] ? 2 : 0;
++ a[2] = b[2] ? 3 : 0;
++ a[3] = b[3] ? 4 : 0;
++ a[4] = b[4] ? 5 : 0;
++ a[5] = b[5] ? 6 : 0;
++ a[6] = b[6] ? 7 : 0;
++ a[7] = b[7] ? 8 : 0;
++ }
++}
++
++short a[N];
++int b[N];
++int main ()
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ a[i] = i;
++ b[i] = -i;
++ }
++
++ foo (a, b, 8);
++
++ for (i = 1; i < N; i++)
++ if (a[i] != i%8 + 1)
++ abort ();
++
++ if (a[0] != 7)
++ abort ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp" { target { vect_element_align && vect_pack_trunc } } } } */
++/* { dg-final { cleanup-tree-dump "slp" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-12.c
++++ b/src/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-12.c
+@@ -113,7 +113,7 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" {target { vect_strided && vect_int_mult } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" {target { vect_strided && vect_int_mult } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" {target { vect_strided8 && vect_int_mult } } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" {target { vect_strided8 && vect_int_mult } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/fast-math-pr35982.c
++++ b/src/gcc/testsuite/gcc.dg/vect/fast-math-pr35982.c
+@@ -20,7 +20,7 @@
+ return avg;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_extract_even_odd_wide } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail vect_extract_even_odd_wide } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_extract_even_odd } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail vect_extract_even_odd } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/fast-math-slp-27.c
++++ b/src/gcc/testsuite/gcc.dg/vect/fast-math-slp-27.c
+@@ -13,5 +13,5 @@
+ }
+ }
+
+-/* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { target vect_strided } } } */
++/* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/fast-math-vect-complex-3.c
++++ b/src/gcc/testsuite/gcc.dg/vect/fast-math-vect-complex-3.c
+@@ -56,5 +56,5 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd_wide } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/if-cvt-stores-vect-ifcvt-18.c
++++ b/src/gcc/testsuite/gcc.dg/vect/if-cvt-stores-vect-ifcvt-18.c
+@@ -0,0 +1,69 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 50
++
++typedef struct {
++ short a;
++ short b;
++} data;
++
++data in1[N], in2[N], out[N];
++short result[N*2] = {10,-7,11,-6,12,-5,13,-4,14,-3,15,-2,16,-1,17,0,18,1,19,2,20,3,21,4,22,5,23,6,24,7,25,8,26,9,27,10,28,11,29,12,30,13,31,14,32,15,33,16,34,17,35,18,36,19,37,20,38,21,39,22,40,23,41,24,42,25,43,26,44,27,45,28,46,29,47,30,48,31,49,32,50,33,51,34,52,35,53,36,54,37,55,38,56,39,57,40,58,41,59,42};
++short out1[N], out2[N];
++
++__attribute__ ((noinline)) void
++foo ()
++{
++ int i;
++ short c, d;
++
++ for (i = 0; i < N; i++)
++ {
++ c = in1[i].b;
++ d = in2[i].b;
++
++ if (c >= d)
++ {
++ out[i].b = in1[i].a;
++ out[i].a = d + 5;
++ }
++ else
++ {
++ out[i].b = d - 12;
++ out[i].a = in2[i].a + d;
++ }
++ }
++}
++
++int
++main (void)
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ in1[i].a = i;
++ in1[i].b = i + 2;
++ in2[i].a = 5;
++ in2[i].b = i + 5;
++ __asm__ volatile ("");
++ }
++
++ foo ();
++
++ for (i = 0; i < N; i++)
++ {
++ if (out[i].a != result[2*i] || out[i].b != result[2*i+1])
++ abort ();
++ }
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align || { ! vect_strided2 } } } } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/no-fre-pre-pr50208.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-fre-pre-pr50208.c
+@@ -0,0 +1,17 @@
++/* { dg-do compile } */
++
++char c;
++int a, b;
++
++void foo (int j)
++{
++ int i;
++ while (--j)
++ {
++ b = 3;
++ for (i = 0; i < 2; ++i)
++ a = b ^ c;
++ }
++}
++
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10a.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10a.c
+@@ -54,5 +54,5 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10b.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10b.c
+@@ -53,5 +53,5 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-18.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-18.c
+@@ -47,5 +47,5 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target vect_interleave } } } */
++/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target { vect_interleave || vect_strided2 } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-20.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-20.c
+@@ -50,5 +50,5 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/no-tree-fre-pr50039.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-tree-fre-pr50039.c
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++
++extern unsigned char g_5;
++extern int g_31, g_76;
++int main(void) {
++ int i, j;
++ for (j=0; j < 2; ++j) {
++ g_31 = -3;
++ for (i=0; i < 2; ++i)
++ g_76 = (g_31 ? g_31+1 : 0) ^ g_5;
++ }
++}
++
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/no-vfa-pr29145.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-vfa-pr29145.c
+@@ -1,5 +1,4 @@
+ /* { dg-require-effective-target vect_int } */
+-/* { dg-add-options quad_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+@@ -8,7 +7,7 @@
+ void with_restrict(int * __restrict p)
+ {
+ int i;
+- int *q = p - 2;
++ int *q = p - 1;
+
+ for (i = 0; i < 1000; ++i) {
+ p[i] = q[i];
+@@ -19,7 +18,7 @@
+ void without_restrict(int * p)
+ {
+ int i;
+- int *q = p - 2;
++ int *q = p - 1;
+
+ for (i = 0; i < 1000; ++i) {
+ p[i] = q[i];
+@@ -38,8 +37,8 @@
+ a[i] = b[i] = i;
+ }
+
+- with_restrict(a + 2);
+- without_restrict(b + 2);
++ with_restrict(a + 1);
++ without_restrict(b + 1);
+
+ for (i = 0; i < 1002; ++i) {
+ if (a[i] != b[i])
+--- a/src/gcc/testsuite/gcc.dg/vect/no-vfa-vect-101.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-vfa-vect-101.c
+@@ -45,6 +45,7 @@
+ }
+
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "can't determine dependence" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "can't determine dependence" 1 "vect" { xfail vect_multiple_sizes } } } */
++/* { dg-final { scan-tree-dump-times "can't determine dependence" 2 "vect" { target vect_multiple_sizes } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/no-vfa-vect-102.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-vfa-vect-102.c
+@@ -53,6 +53,7 @@
+ }
+
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 1 "vect" { xfail vect_multiple_sizes } } } */
++/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 2 "vect" { target vect_multiple_sizes } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/no-vfa-vect-102a.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-vfa-vect-102a.c
+@@ -53,6 +53,7 @@
+ }
+
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 1 "vect" { xfail vect_multiple_sizes } } } */
++/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 2 "vect" { target vect_multiple_sizes } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/no-vfa-vect-37.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-vfa-vect-37.c
+@@ -58,5 +58,6 @@
+ If/when the aliasing problems are resolved, unalignment may
+ prevent vectorization on some targets. */
+ /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { xfail *-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "can't determine dependence between" 2 "vect" } } */
++/* { dg-final { scan-tree-dump-times "can't determine dependence" 2 "vect" { xfail vect_multiple_sizes } } } */
++/* { dg-final { scan-tree-dump-times "can't determine dependence" 4 "vect" { target vect_multiple_sizes } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/no-vfa-vect-79.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-vfa-vect-79.c
+@@ -46,5 +46,6 @@
+ If/when the aliasing problems are resolved, unalignment may
+ prevent vectorization on some targets. */
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "can't determine dependence between" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "can't determine dependence" 1 "vect" { xfail vect_multiple_sizes } } } */
++/* { dg-final { scan-tree-dump-times "can't determine dependence" 2 "vect" { target vect_multiple_sizes } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/pr30843.c
++++ b/src/gcc/testsuite/gcc.dg/vect/pr30843.c
+@@ -20,6 +20,6 @@
+ }
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave || vect_strided4 } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/pr30858.c
++++ b/src/gcc/testsuite/gcc.dg/vect/pr30858.c
+@@ -11,5 +11,6 @@
+ }
+
+ /* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Unknown def-use cycle pattern." 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Unknown def-use cycle pattern." 1 "vect" { xfail vect_multiple_sizes } } } */
++/* { dg-final { scan-tree-dump-times "Unknown def-use cycle pattern." 2 "vect" { target vect_multiple_sizes } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/pr33866.c
++++ b/src/gcc/testsuite/gcc.dg/vect/pr33866.c
+@@ -27,6 +27,6 @@
+ }
+
+ /* Needs interleaving support. */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave || vect_strided2 } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/pr37539.c
++++ b/src/gcc/testsuite/gcc.dg/vect/pr37539.c
+@@ -40,7 +40,7 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_strided_wide } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target { vect_strided4 && vect_strided2 } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+
+--- a/src/gcc/testsuite/gcc.dg/vect/pr50014.c
++++ b/src/gcc/testsuite/gcc.dg/vect/pr50014.c
+@@ -0,0 +1,16 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target vect_int } */
++
++int f(unsigned char *s, int n)
++{
++ int sum = 0;
++ int i;
++
++ for (i = 0; i < n; i++)
++ sum += 256 * s[i];
++
++ return sum;
++}
++
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-11.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-11.c
+@@ -1,113 +0,0 @@
+-/* { dg-require-effective-target vect_int } */
+-
+-#include <stdarg.h>
+-#include "tree-vect.h"
+-
+-#define N 8
+-
+-int
+-main1 ()
+-{
+- int i;
+- unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7;
+- unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+- float out2[N*8];
+-
+- /* Different operations - not SLPable. */
+- for (i = 0; i < N; i++)
+- {
+- a0 = in[i*8] + 5;
+- a1 = in[i*8 + 1] * 6;
+- a2 = in[i*8 + 2] + 7;
+- a3 = in[i*8 + 3] + 8;
+- a4 = in[i*8 + 4] + 9;
+- a5 = in[i*8 + 5] + 10;
+- a6 = in[i*8 + 6] + 11;
+- a7 = in[i*8 + 7] + 12;
+-
+- b0 = a0 * 3;
+- b1 = a1 * 2;
+- b2 = a2 * 12;
+- b3 = a3 * 5;
+- b4 = a4 * 8;
+- b5 = a5 * 4;
+- b6 = a6 * 3;
+- b7 = a7 * 2;
+-
+- out[i*8] = b0 - 2;
+- out[i*8 + 1] = b1 - 3;
+- out[i*8 + 2] = b2 - 2;
+- out[i*8 + 3] = b3 - 1;
+- out[i*8 + 4] = b4 - 8;
+- out[i*8 + 5] = b5 - 7;
+- out[i*8 + 6] = b6 - 3;
+- out[i*8 + 7] = b7 - 7;
+- }
+-
+- /* check results: */
+- for (i = 0; i < N; i++)
+- {
+- if (out[i*8] != (in[i*8] + 5) * 3 - 2
+- || out[i*8 + 1] != (in[i*8 + 1] * 6) * 2 - 3
+- || out[i*8 + 2] != (in[i*8 + 2] + 7) * 12 - 2
+- || out[i*8 + 3] != (in[i*8 + 3] + 8) * 5 - 1
+- || out[i*8 + 4] != (in[i*8 + 4] + 9) * 8 - 8
+- || out[i*8 + 5] != (in[i*8 + 5] + 10) * 4 - 7
+- || out[i*8 + 6] != (in[i*8 + 6] + 11) * 3 - 3
+- || out[i*8 + 7] != (in[i*8 + 7] + 12) * 2 - 7)
+- abort ();
+- }
+-
+- /* Requires permutation - not SLPable. */
+- for (i = 0; i < N*2; i++)
+- {
+- out[i*4] = (in[i*4] + 2) * 3;
+- out[i*4 + 1] = (in[i*4 + 2] + 2) * 7;
+- out[i*4 + 2] = (in[i*4 + 1] + 7) * 3;
+- out[i*4 + 3] = (in[i*4 + 3] + 3) * 4;
+- }
+-
+- /* check results: */
+- for (i = 0; i < N*2; i++)
+- {
+- if (out[i*4] != (in[i*4] + 2) * 3
+- || out[i*4 + 1] != (in[i*4 + 2] + 2) * 7
+- || out[i*4 + 2] != (in[i*4 + 1] + 7) * 3
+- || out[i*4 + 3] != (in[i*4 + 3] + 3) * 4)
+- abort ();
+- }
+-
+- /* Different operations - not SLPable. */
+- for (i = 0; i < N*4; i++)
+- {
+- out2[i*2] = ((float) in[i*2] * 2 + 6) ;
+- out2[i*2 + 1] = (float) (in[i*2 + 1] * 3 + 7);
+- }
+-
+- /* check results: */
+- for (i = 0; i < N*4; i++)
+- {
+- if (out2[i*2] != ((float) in[i*2] * 2 + 6)
+- || out2[i*2 + 1] != (float) (in[i*2 + 1] * 3 + 7))
+- abort ();
+- }
+-
+-
+- return 0;
+-}
+-
+-int main (void)
+-{
+- check_vect ();
+-
+- main1 ();
+-
+- return 0;
+-}
+-
+-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { target { { vect_uintfloat_cvt && vect_strided_wide } && vect_int_mult } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target { { { ! vect_uintfloat_cvt } && vect_strided_wide } && vect_int_mult } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" {target { ! { vect_int_mult && vect_strided_wide } } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" } } */
+-/* { dg-final { cleanup-tree-dump "vect" } } */
+-
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-11a.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-11a.c
+@@ -0,0 +1,75 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 8
++
++int
++main1 ()
++{
++ int i;
++ unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7;
++ unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
++
++ /* Different operations - not SLPable. */
++ for (i = 0; i < N; i++)
++ {
++ a0 = in[i*8] + 5;
++ a1 = in[i*8 + 1] * 6;
++ a2 = in[i*8 + 2] + 7;
++ a3 = in[i*8 + 3] + 8;
++ a4 = in[i*8 + 4] + 9;
++ a5 = in[i*8 + 5] + 10;
++ a6 = in[i*8 + 6] + 11;
++ a7 = in[i*8 + 7] + 12;
++
++ b0 = a0 * 3;
++ b1 = a1 * 2;
++ b2 = a2 * 12;
++ b3 = a3 * 5;
++ b4 = a4 * 8;
++ b5 = a5 * 4;
++ b6 = a6 * 3;
++ b7 = a7 * 2;
++
++ out[i*8] = b0 - 2;
++ out[i*8 + 1] = b1 - 3;
++ out[i*8 + 2] = b2 - 2;
++ out[i*8 + 3] = b3 - 1;
++ out[i*8 + 4] = b4 - 8;
++ out[i*8 + 5] = b5 - 7;
++ out[i*8 + 6] = b6 - 3;
++ out[i*8 + 7] = b7 - 7;
++ }
++
++ /* check results: */
++ for (i = 0; i < N; i++)
++ {
++ if (out[i*8] != (in[i*8] + 5) * 3 - 2
++ || out[i*8 + 1] != (in[i*8 + 1] * 6) * 2 - 3
++ || out[i*8 + 2] != (in[i*8 + 2] + 7) * 12 - 2
++ || out[i*8 + 3] != (in[i*8 + 3] + 8) * 5 - 1
++ || out[i*8 + 4] != (in[i*8 + 4] + 9) * 8 - 8
++ || out[i*8 + 5] != (in[i*8 + 5] + 10) * 4 - 7
++ || out[i*8 + 6] != (in[i*8 + 6] + 11) * 3 - 3
++ || out[i*8 + 7] != (in[i*8 + 7] + 12) * 2 - 7)
++ abort ();
++ }
++
++ return 0;
++}
++
++int main (void)
++{
++ check_vect ();
++
++ main1 ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_strided8 && vect_int_mult } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { vect_strided8 && vect_int_mult } } } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-11b.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-11b.c
+@@ -0,0 +1,49 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 8
++
++int
++main1 ()
++{
++ int i;
++ unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7;
++ unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
++
++ /* Requires permutation - not SLPable. */
++ for (i = 0; i < N*2; i++)
++ {
++ out[i*4] = (in[i*4] + 2) * 3;
++ out[i*4 + 1] = (in[i*4 + 2] + 2) * 7;
++ out[i*4 + 2] = (in[i*4 + 1] + 7) * 3;
++ out[i*4 + 3] = (in[i*4 + 3] + 3) * 4;
++ }
++
++ /* check results: */
++ for (i = 0; i < N*2; i++)
++ {
++ if (out[i*4] != (in[i*4] + 2) * 3
++ || out[i*4 + 1] != (in[i*4 + 2] + 2) * 7
++ || out[i*4 + 2] != (in[i*4 + 1] + 7) * 3
++ || out[i*4 + 3] != (in[i*4 + 3] + 3) * 4)
++ abort ();
++ }
++
++ return 0;
++}
++
++int main (void)
++{
++ check_vect ();
++
++ main1 ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_strided4 && vect_int_mult } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { vect_strided4 && vect_int_mult } } } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-11c.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-11c.c
+@@ -0,0 +1,46 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 8
++
++int
++main1 ()
++{
++ int i;
++ unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
++ float out[N*8];
++
++ /* Different operations - not SLPable. */
++ for (i = 0; i < N*4; i++)
++ {
++ out[i*2] = ((float) in[i*2] * 2 + 6) ;
++ out[i*2 + 1] = (float) (in[i*2 + 1] * 3 + 7);
++ }
++
++ /* check results: */
++ for (i = 0; i < N*4; i++)
++ {
++ if (out[i*2] != ((float) in[i*2] * 2 + 6)
++ || out[i*2 + 1] != (float) (in[i*2 + 1] * 3 + 7))
++ abort ();
++ }
++
++
++ return 0;
++}
++
++int main (void)
++{
++ check_vect ();
++
++ main1 ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { { vect_uintfloat_cvt && vect_strided2 } && vect_int_mult } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { { vect_uintfloat_cvt && vect_strided2 } && vect_int_mult } } } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-12a.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-12a.c
+@@ -11,7 +11,7 @@
+ int i;
+ unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7;
+ unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+- unsigned int ia[N], ib[N*2];
++ unsigned int ia[N];
+
+ for (i = 0; i < N; i++)
+ {
+@@ -61,27 +61,6 @@
+ abort ();
+ }
+
+- for (i = 0; i < N*2; i++)
+- {
+- out[i*4] = (in[i*4] + 2) * 3;
+- out[i*4 + 1] = (in[i*4 + 1] + 2) * 7;
+- out[i*4 + 2] = (in[i*4 + 2] + 7) * 3;
+- out[i*4 + 3] = (in[i*4 + 3] + 7) * 7;
+-
+- ib[i] = 7;
+- }
+-
+- /* check results: */
+- for (i = 0; i < N*2; i++)
+- {
+- if (out[i*4] != (in[i*4] + 2) * 3
+- || out[i*4 + 1] != (in[i*4 + 1] + 2) * 7
+- || out[i*4 + 2] != (in[i*4 + 2] + 7) * 3
+- || out[i*4 + 3] != (in[i*4 + 3] + 7) * 7
+- || ib[i] != 7)
+- abort ();
+- }
+-
+ return 0;
+ }
+
+@@ -94,11 +73,8 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" {target { vect_strided_wide && vect_int_mult} } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" {target { {! {vect_strided_wide}} && vect_int_mult } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" {target { ! vect_int_mult } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" {target { vect_strided_wide && vect_int_mult } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" {target { {! {vect_strided_wide}} && vect_int_mult } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" {target { ! vect_int_mult } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_strided8 && vect_int_mult } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { vect_strided8 && vect_int_mult } } } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { vect_strided8 && vect_int_mult } } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! { vect_strided8 && vect_int_mult } } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+-
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-12b.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-12b.c
+@@ -43,9 +43,9 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" {target { vect_strided_wide && vect_int_mult } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" {target { { ! { vect_int_mult }} || { ! {vect_strided_wide}}} } } } */
+-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" {target { vect_strided_wide && vect_int_mult } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" {target { { ! { vect_int_mult }} || { ! {vect_strided_wide}}} } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_strided2 && vect_int_mult } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { vect_strided2 && vect_int_mult } } } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { vect_strided2 && vect_int_mult } } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! { vect_strided2 && vect_int_mult } } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-12c.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-12c.c
+@@ -0,0 +1,53 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 8
++
++int
++main1 ()
++{
++ int i;
++ unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7;
++ unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
++ unsigned int ia[N*2];
++
++ for (i = 0; i < N*2; i++)
++ {
++ out[i*4] = (in[i*4] + 2) * 3;
++ out[i*4 + 1] = (in[i*4 + 1] + 2) * 7;
++ out[i*4 + 2] = (in[i*4 + 2] + 7) * 3;
++ out[i*4 + 3] = (in[i*4 + 3] + 7) * 7;
++
++ ia[i] = 7;
++ }
++
++ /* check results: */
++ for (i = 0; i < N*2; i++)
++ {
++ if (out[i*4] != (in[i*4] + 2) * 3
++ || out[i*4 + 1] != (in[i*4 + 1] + 2) * 7
++ || out[i*4 + 2] != (in[i*4 + 2] + 7) * 3
++ || out[i*4 + 3] != (in[i*4 + 3] + 7) * 7
++ || ia[i] != 7)
++ abort ();
++ }
++
++ return 0;
++}
++
++int main (void)
++{
++ check_vect ();
++
++ main1 ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_int_mult } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! vect_int_mult } } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_int_mult } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! vect_int_mult } } } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-18.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-18.c
+@@ -91,7 +91,7 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_strided } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { target { vect_strided } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { target vect_strided8 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-19.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-19.c
+@@ -1,154 +0,0 @@
+-/* { dg-require-effective-target vect_int } */
+-
+-#include <stdarg.h>
+-#include "tree-vect.h"
+-
+-#define N 16
+-
+-int
+-main1 ()
+-{
+- unsigned int i;
+- unsigned int out[N*8];
+- unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+- unsigned int ia[N*2], a0, a1, a2, a3;
+-
+- for (i = 0; i < N; i++)
+- {
+- out[i*8] = in[i*8];
+- out[i*8 + 1] = in[i*8 + 1];
+- out[i*8 + 2] = in[i*8 + 2];
+- out[i*8 + 3] = in[i*8 + 3];
+- out[i*8 + 4] = in[i*8 + 4];
+- out[i*8 + 5] = in[i*8 + 5];
+- out[i*8 + 6] = in[i*8 + 6];
+- out[i*8 + 7] = in[i*8 + 7];
+-
+- ia[i] = in[i*8 + 2];
+- }
+-
+- /* check results: */
+- for (i = 0; i < N; i++)
+- {
+- if (out[i*8] != in[i*8]
+- || out[i*8 + 1] != in[i*8 + 1]
+- || out[i*8 + 2] != in[i*8 + 2]
+- || out[i*8 + 3] != in[i*8 + 3]
+- || out[i*8 + 4] != in[i*8 + 4]
+- || out[i*8 + 5] != in[i*8 + 5]
+- || out[i*8 + 6] != in[i*8 + 6]
+- || out[i*8 + 7] != in[i*8 + 7]
+- || ia[i] != in[i*8 + 2])
+- abort ();
+- }
+-
+- for (i = 0; i < N*2; i++)
+- {
+- a0 = in[i*4] + 1;
+- a1 = in[i*4 + 1] + 2;
+- a2 = in[i*4 + 2] + 3;
+- a3 = in[i*4 + 3] + 4;
+-
+- out[i*4] = a0;
+- out[i*4 + 1] = a1;
+- out[i*4 + 2] = a2;
+- out[i*4 + 3] = a3;
+-
+- ia[i] = a2;
+- }
+-
+- /* check results: */
+- for (i = 0; i < N*2; i++)
+- {
+- if (out[i*4] != in[i*4] + 1
+- || out[i*4 + 1] != in[i*4 + 1] + 2
+- || out[i*4 + 2] != in[i*4 + 2] + 3
+- || out[i*4 + 3] != in[i*4 + 3] + 4
+- || ia[i] != in[i*4 + 2] + 3)
+- abort ();
+- }
+-
+- /* The last stmt requires interleaving of not power of 2 size - not
+- vectorizable. */
+- for (i = 0; i < N/2; i++)
+- {
+- out[i*12] = in[i*12];
+- out[i*12 + 1] = in[i*12 + 1];
+- out[i*12 + 2] = in[i*12 + 2];
+- out[i*12 + 3] = in[i*12 + 3];
+- out[i*12 + 4] = in[i*12 + 4];
+- out[i*12 + 5] = in[i*12 + 5];
+- out[i*12 + 6] = in[i*12 + 6];
+- out[i*12 + 7] = in[i*12 + 7];
+- out[i*12 + 8] = in[i*12 + 8];
+- out[i*12 + 9] = in[i*12 + 9];
+- out[i*12 + 10] = in[i*12 + 10];
+- out[i*12 + 11] = in[i*12 + 11];
+-
+- ia[i] = in[i*12 + 7];
+- }
+-
+- /* check results: */
+- for (i = 0; i < N/2; i++)
+- {
+- if (out[i*12] != in[i*12]
+- || out[i*12 + 1] != in[i*12 + 1]
+- || out[i*12 + 2] != in[i*12 + 2]
+- || out[i*12 + 3] != in[i*12 + 3]
+- || out[i*12 + 4] != in[i*12 + 4]
+- || out[i*12 + 5] != in[i*12 + 5]
+- || out[i*12 + 6] != in[i*12 + 6]
+- || out[i*12 + 7] != in[i*12 + 7]
+- || out[i*12 + 8] != in[i*12 + 8]
+- || out[i*12 + 9] != in[i*12 + 9]
+- || out[i*12 + 10] != in[i*12 + 10]
+- || out[i*12 + 11] != in[i*12 + 11]
+- || ia[i] != in[i*12 + 7])
+- abort ();
+- }
+-
+- /* Hybrid SLP with unrolling by 2. */
+- for (i = 0; i < N; i++)
+- {
+- out[i*6] = in[i*6];
+- out[i*6 + 1] = in[i*6 + 1];
+- out[i*6 + 2] = in[i*6 + 2];
+- out[i*6 + 3] = in[i*6 + 3];
+- out[i*6 + 4] = in[i*6 + 4];
+- out[i*6 + 5] = in[i*6 + 5];
+-
+- ia[i] = i;
+- }
+-
+- /* check results: */
+- for (i = 0; i < N/2; i++)
+- {
+- if (out[i*6] != in[i*6]
+- || out[i*6 + 1] != in[i*6 + 1]
+- || out[i*6 + 2] != in[i*6 + 2]
+- || out[i*6 + 3] != in[i*6 + 3]
+- || out[i*6 + 4] != in[i*6 + 4]
+- || out[i*6 + 5] != in[i*6 + 5]
+- || ia[i] != i)
+- abort ();
+- }
+-
+-
+- return 0;
+-}
+-
+-int main (void)
+-{
+- check_vect ();
+-
+- main1 ();
+-
+- return 0;
+-}
+-
+-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { target vect_strided_wide } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { vect_strided_wide } } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" { target vect_strided_wide } } } */
+-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { ! { vect_strided_wide } } } } } */
+-/* { dg-final { cleanup-tree-dump "vect" } } */
+-
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-19a.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-19a.c
+@@ -0,0 +1,61 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 16
++
++int
++main1 ()
++{
++ unsigned int i;
++ unsigned int out[N*8];
++ unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
++ unsigned int ia[N*2];
++
++ for (i = 0; i < N; i++)
++ {
++ out[i*8] = in[i*8];
++ out[i*8 + 1] = in[i*8 + 1];
++ out[i*8 + 2] = in[i*8 + 2];
++ out[i*8 + 3] = in[i*8 + 3];
++ out[i*8 + 4] = in[i*8 + 4];
++ out[i*8 + 5] = in[i*8 + 5];
++ out[i*8 + 6] = in[i*8 + 6];
++ out[i*8 + 7] = in[i*8 + 7];
++
++ ia[i] = in[i*8 + 2];
++ }
++
++ /* check results: */
++ for (i = 0; i < N; i++)
++ {
++ if (out[i*8] != in[i*8]
++ || out[i*8 + 1] != in[i*8 + 1]
++ || out[i*8 + 2] != in[i*8 + 2]
++ || out[i*8 + 3] != in[i*8 + 3]
++ || out[i*8 + 4] != in[i*8 + 4]
++ || out[i*8 + 5] != in[i*8 + 5]
++ || out[i*8 + 6] != in[i*8 + 6]
++ || out[i*8 + 7] != in[i*8 + 7]
++ || ia[i] != in[i*8 + 2])
++ abort ();
++ }
++
++ return 0;
++}
++
++int main (void)
++{
++ check_vect ();
++
++ main1 ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! vect_strided8 } } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_strided8 } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! vect_strided8} } } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-19b.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-19b.c
+@@ -0,0 +1,58 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 16
++
++int
++main1 ()
++{
++ unsigned int i;
++ unsigned int out[N*8];
++ unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
++ unsigned int ia[N*2], a0, a1, a2, a3;
++
++ for (i = 0; i < N*2; i++)
++ {
++ a0 = in[i*4] + 1;
++ a1 = in[i*4 + 1] + 2;
++ a2 = in[i*4 + 2] + 3;
++ a3 = in[i*4 + 3] + 4;
++
++ out[i*4] = a0;
++ out[i*4 + 1] = a1;
++ out[i*4 + 2] = a2;
++ out[i*4 + 3] = a3;
++
++ ia[i] = a2;
++ }
++
++ /* check results: */
++ for (i = 0; i < N*2; i++)
++ {
++ if (out[i*4] != in[i*4] + 1
++ || out[i*4 + 1] != in[i*4 + 1] + 2
++ || out[i*4 + 2] != in[i*4 + 2] + 3
++ || out[i*4 + 3] != in[i*4 + 3] + 4
++ || ia[i] != in[i*4 + 2] + 3)
++ abort ();
++ }
++
++ return 0;
++}
++
++int main (void)
++{
++ check_vect ();
++
++ main1 ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! vect_strided4 } } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_strided4 } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! vect_strided4 } } } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-19c.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-19c.c
+@@ -0,0 +1,95 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 16
++
++int
++main1 ()
++{
++ unsigned int i;
++ unsigned int out[N*8];
++ unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
++ unsigned int ia[N*2], a0, a1, a2, a3;
++
++ /* The last stmt requires interleaving of not power of 2 size - not
++ vectorizable. */
++ for (i = 0; i < N/2; i++)
++ {
++ out[i*12] = in[i*12];
++ out[i*12 + 1] = in[i*12 + 1];
++ out[i*12 + 2] = in[i*12 + 2];
++ out[i*12 + 3] = in[i*12 + 3];
++ out[i*12 + 4] = in[i*12 + 4];
++ out[i*12 + 5] = in[i*12 + 5];
++ out[i*12 + 6] = in[i*12 + 6];
++ out[i*12 + 7] = in[i*12 + 7];
++ out[i*12 + 8] = in[i*12 + 8];
++ out[i*12 + 9] = in[i*12 + 9];
++ out[i*12 + 10] = in[i*12 + 10];
++ out[i*12 + 11] = in[i*12 + 11];
++
++ ia[i] = in[i*12 + 7];
++ }
++
++ /* check results: */
++ for (i = 0; i < N/2; i++)
++ {
++ if (out[i*12] != in[i*12]
++ || out[i*12 + 1] != in[i*12 + 1]
++ || out[i*12 + 2] != in[i*12 + 2]
++ || out[i*12 + 3] != in[i*12 + 3]
++ || out[i*12 + 4] != in[i*12 + 4]
++ || out[i*12 + 5] != in[i*12 + 5]
++ || out[i*12 + 6] != in[i*12 + 6]
++ || out[i*12 + 7] != in[i*12 + 7]
++ || out[i*12 + 8] != in[i*12 + 8]
++ || out[i*12 + 9] != in[i*12 + 9]
++ || out[i*12 + 10] != in[i*12 + 10]
++ || out[i*12 + 11] != in[i*12 + 11]
++ || ia[i] != in[i*12 + 7])
++ abort ();
++ }
++
++ /* Hybrid SLP with unrolling by 2. */
++ for (i = 0; i < N; i++)
++ {
++ out[i*6] = in[i*6];
++ out[i*6 + 1] = in[i*6 + 1];
++ out[i*6 + 2] = in[i*6 + 2];
++ out[i*6 + 3] = in[i*6 + 3];
++ out[i*6 + 4] = in[i*6 + 4];
++ out[i*6 + 5] = in[i*6 + 5];
++
++ ia[i] = i;
++ }
++
++ /* check results: */
++ for (i = 0; i < N/2; i++)
++ {
++ if (out[i*6] != in[i*6]
++ || out[i*6 + 1] != in[i*6 + 1]
++ || out[i*6 + 2] != in[i*6 + 2]
++ || out[i*6 + 3] != in[i*6 + 3]
++ || out[i*6 + 4] != in[i*6 + 4]
++ || out[i*6 + 5] != in[i*6 + 5]
++ || ia[i] != i)
++ abort ();
++ }
++
++ return 0;
++}
++
++int main (void)
++{
++ check_vect ();
++
++ main1 ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-21.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-21.c
+@@ -199,9 +199,9 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" { target { vect_strided || vect_extract_even_odd } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { vect_strided || vect_extract_even_odd } } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { target vect_strided } } } */
+-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! { vect_strided } } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" { target { vect_strided4 || vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { vect_strided4 || vect_extract_even_odd } } } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { target vect_strided4 } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! { vect_strided4 } } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-23.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-23.c
+@@ -106,8 +106,8 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target { vect_strided_wide } && {! { vect_no_align} } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { vect_strided_wide || vect_no_align} } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target { vect_strided8 && { ! { vect_no_align} } } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { vect_strided8 || vect_no_align } } } } } */
+ /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-25.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-25.c
+@@ -1,5 +1,4 @@
+ /* { dg-require-effective-target vect_int } */
+-/* { dg-add-options quad_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-3.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-3.c
+@@ -1,12 +1,11 @@
+ /* { dg-require-effective-target vect_int } */
+-/* { dg-add-options quad_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+
+-#define N 8
++#define N 12
+
+-unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
++unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
+
+ int
+ main1 ()
+@@ -101,7 +100,7 @@
+ }
+
+ /* SLP with unrolling by 8. */
+- for (i = 0; i < N/2; i++)
++ for (i = 0; i < N/4; i++)
+ {
+ out[i*9] = in[i*9];
+ out[i*9 + 1] = in[i*9 + 1];
+@@ -115,7 +114,7 @@
+ }
+
+ /* check results: */
+- for (i = 0; i < N/2; i++)
++ for (i = 0; i < N/4; i++)
+ {
+ if (out[i*9] != in[i*9]
+ || out[i*9 + 1] != in[i*9 + 1]
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-cond-1.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-cond-1.c
+@@ -0,0 +1,126 @@
++/* { dg-require-effective-target vect_condition } */
++#include "tree-vect.h"
++
++#define N 32
++int a[N], b[N];
++int d[N], e[N];
++int k[N];
++
++__attribute__((noinline, noclone)) void
++f1 (void)
++{
++ int i;
++ for (i = 0; i < N/4; i++)
++ {
++ k[4*i] = a[4*i] < b[4*i] ? 17 : 0;
++ k[4*i+1] = a[4*i+1] < b[4*i+1] ? 17 : 0;
++ k[4*i+2] = a[4*i+2] < b[4*i+2] ? 17 : 0;
++ k[4*i+3] = a[4*i+3] < b[4*i+3] ? 17 : 0;
++ }
++}
++
++__attribute__((noinline, noclone)) void
++f2 (void)
++{
++ int i;
++ for (i = 0; i < N/2; ++i)
++ {
++ k[2*i] = a[2*i] < b[2*i] ? 0 : 24;
++ k[2*i+1] = a[2*i+1] < b[2*i+1] ? 7 : 4;
++ }
++}
++
++__attribute__((noinline, noclone)) void
++f3 (void)
++{
++ int i;
++ for (i = 0; i < N/2; ++i)
++ {
++ k[2*i] = a[2*i] < b[2*i] ? 51 : 12;
++ k[2*i+1] = a[2*i+1] > b[2*i+1] ? 51 : 12;
++ }
++}
++
++__attribute__((noinline, noclone)) void
++f4 (void)
++{
++ int i;
++ for (i = 0; i < N/2; ++i)
++ {
++ int d0 = d[2*i], e0 = e[2*i];
++ int d1 = d[2*i+1], e1 = e[2*i+1];
++ k[2*i] = a[2*i] >= b[2*i] ? d0 : e0;
++ k[2*i+1] = a[2*i+1] >= b[2*i+1] ? d1 : e1;
++ }
++}
++
++int
++main ()
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ switch (i % 9)
++ {
++ case 0: asm (""); a[i] = - i - 1; b[i] = i + 1; break;
++ case 1: a[i] = 0; b[i] = 0; break;
++ case 2: a[i] = i + 1; b[i] = - i - 1; break;
++ case 3: a[i] = i; b[i] = i + 7; break;
++ case 4: a[i] = i; b[i] = i; break;
++ case 5: a[i] = i + 16; b[i] = i + 3; break;
++ case 6: a[i] = - i - 5; b[i] = - i; break;
++ case 7: a[i] = - i; b[i] = - i; break;
++ case 8: a[i] = - i; b[i] = - i - 7; break;
++ }
++ d[i] = i;
++ e[i] = 2 * i;
++ }
++ f1 ();
++ for (i = 0; i < N; i++)
++ if (k[i] != ((i % 3) == 0 ? 17 : 0))
++ abort ();
++
++ f2 ();
++ for (i = 0; i < N; i++)
++ {
++ switch (i % 9)
++ {
++ case 0:
++ case 6:
++ if (k[i] != ((i/9 % 2) == 0 ? 0 : 7))
++ abort ();
++ break;
++ case 1:
++ case 5:
++ case 7:
++ if (k[i] != ((i/9 % 2) == 0 ? 4 : 24))
++ abort ();
++ break;
++ case 2:
++ case 4:
++ case 8:
++ if (k[i] != ((i/9 % 2) == 0 ? 24 : 4))
++ abort ();
++ break;
++ case 3:
++ if (k[i] != ((i/9 % 2) == 0 ? 7 : 0))
++ abort ();
++ break;
++ }
++ }
++
++ f3 ();
++
++ f4 ();
++ for (i = 0; i < N; i++)
++ if (k[i] != ((i % 3) == 0 ? e[i] : d[i]))
++ abort ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-reduc-6.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-reduc-6.c
+@@ -42,7 +42,7 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail { vect_no_int_add || { ! vect_unpack } } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail { vect_no_int_add || { ! { vect_unpack || vect_strided2 } } } } } } */
+ /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" } } */
+ /* { dg-final { scan-tree-dump-times "different interleaving chains in one node" 1 "vect" { target { ! vect_no_int_add } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-widen-mult-half.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-widen-mult-half.c
+@@ -0,0 +1,52 @@
++/* { dg-require-effective-target vect_int } */
++
++#include "tree-vect.h"
++#include <stdlib.h>
++
++#define N 32
++#define COEF 32470
++#define COEF2 324700
++
++unsigned char in[N];
++int out[N];
++int out2[N];
++
++__attribute__ ((noinline)) void
++foo ()
++{
++ int i;
++
++ for (i = 0; i < N/2; i++)
++ {
++ out[2*i] = in[2*i] * COEF;
++ out2[2*i] = in[2*i] + COEF2;
++ out[2*i+1] = in[2*i+1] * COEF;
++ out2[2*i+1] = in[2*i+1] + COEF2;
++ }
++}
++
++int main (void)
++{
++ int i;
++
++ for (i = 0; i < N; i++)
++ {
++ in[i] = i;
++ __asm__ volatile ("");
++ }
++
++ foo ();
++
++ for (i = 0; i < N; i++)
++ if (out[i] != in[i] * COEF || out2[i] != in[i] + COEF2)
++ abort ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_widen_mult_hi_to_si } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { target vect_widen_mult_hi_to_si } } } */
++/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
++/* { dg-final { scan-tree-dump-times "pattern recognized" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-1.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-1.c
+@@ -85,6 +85,6 @@
+ fbar (a);
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 6 loops" 1 "vect" { target vect_extract_even_odd_wide } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 5 loops" 1 "vect" { xfail vect_extract_even_odd_wide } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 6 loops" 1 "vect" { target vect_strided2 } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 5 loops" 1 "vect" { xfail vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-10.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-10.c
+@@ -22,5 +22,5 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { ! vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { ! vect_strided2 } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-104.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-104.c
+@@ -64,6 +64,7 @@
+ }
+
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 1 "vect" { xfail vect_multiple_sizes } } } */
++/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 2 "vect" { target vect_multiple_sizes } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-107.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-107.c
+@@ -40,6 +40,6 @@
+ return main1 ();
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_extract_even_odd_wide } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail vect_extract_even_odd_wide } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-109.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-109.c
+@@ -1,5 +1,4 @@
+ /* { dg-require-effective-target vect_int } */
+-/* { dg-add-options quad_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-119.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-119.c
+@@ -0,0 +1,28 @@
++/* { dg-do compile } */
++
++#define OUTER 32
++#define INNER 40
++
++static unsigned int
++bar (const unsigned int x[INNER][2], unsigned int sum)
++{
++ int i;
++
++ for (i = 0; i < INNER; i++)
++ sum += x[i][0] * x[i][0] + x[i][1] * x[i][1];
++ return sum;
++}
++
++unsigned int foo (const unsigned int x[OUTER][INNER][2])
++{
++ int i;
++ unsigned int sum;
++
++ sum = 0.0f;
++ for (i = 0; i < OUTER; i++)
++ sum = bar (x[i], sum);
++ return sum;
++}
++
++/* { dg-final { scan-tree-dump-times "Detected interleaving of size 2" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-40.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-40.c
+@@ -1,4 +1,5 @@
+ /* { dg-require-effective-target vect_float } */
++/* { dg-add-options double_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-42.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-42.c
+@@ -1,4 +1,5 @@
+ /* { dg-require-effective-target vect_float } */
++/* { dg-add-options double_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-46.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-46.c
+@@ -1,4 +1,5 @@
+ /* { dg-require-effective-target vect_float } */
++/* { dg-add-options double_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-48.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-48.c
+@@ -1,4 +1,5 @@
+ /* { dg-require-effective-target vect_float } */
++/* { dg-add-options double_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-52.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-52.c
+@@ -1,4 +1,5 @@
+ /* { dg-require-effective-target vect_float } */
++/* { dg-add-options double_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-54.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-54.c
+@@ -1,4 +1,5 @@
+ /* { dg-require-effective-target vect_float } */
++/* { dg-add-options double_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-96.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-96.c
+@@ -1,4 +1,5 @@
+ /* { dg-require-effective-target vect_int } */
++/* { dg-add-options double_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-98.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-98.c
+@@ -38,6 +38,6 @@
+ }
+
+ /* Needs interleaving support. */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd_wide } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { xfail { vect_interleave && vect_extract_even_odd_wide } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { xfail vect_strided4 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-cond-8a.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-cond-8a.c
+@@ -0,0 +1,75 @@
++/* { dg-require-effective-target vect_condition } */
++
++#include "tree-vect.h"
++
++#define N 1024
++int a[N], b[N], c[N];
++char d[N], e[N], f[N];
++unsigned char k[N];
++
++__attribute__((noinline, noclone)) void
++f1 (void)
++{
++ int i;
++ for (i = 0; i < N; ++i)
++ k[i] = a[i] < b[i] ? 17 : 0;
++}
++
++__attribute__((noinline, noclone)) void
++f2 (void)
++{
++ int i;
++ for (i = 0; i < N; ++i)
++ k[i] = a[i] < b[i] ? 0 : 24;
++}
++
++__attribute__((noinline, noclone)) void
++f3 (void)
++{
++ int i;
++ for (i = 0; i < N; ++i)
++ k[i] = a[i] < b[i] ? 51 : 12;
++}
++
++int
++main ()
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ switch (i % 9)
++ {
++ case 0: asm (""); a[i] = - i - 1; b[i] = i + 1; break;
++ case 1: a[i] = 0; b[i] = 0; break;
++ case 2: a[i] = i + 1; b[i] = - i - 1; break;
++ case 3: a[i] = i; b[i] = i + 7; break;
++ case 4: a[i] = i; b[i] = i; break;
++ case 5: a[i] = i + 16; b[i] = i + 3; break;
++ case 6: a[i] = - i - 5; b[i] = - i; break;
++ case 7: a[i] = - i; b[i] = - i; break;
++ case 8: a[i] = - i; b[i] = - i - 7; break;
++ }
++ d[i] = i;
++ e[i] = 2 * i;
++ }
++ f1 ();
++ for (i = 0; i < N; i++)
++ if (k[i] != ((i % 3) == 0 ? 17 : 0))
++ abort ();
++ f2 ();
++ for (i = 0; i < N; i++)
++ if (k[i] != ((i % 3) == 0 ? 0 : 24))
++ abort ();
++ f3 ();
++ for (i = 0; i < N; i++)
++ if (k[i] != ((i % 3) == 0 ? 51 : 12))
++ abort ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "note: vectorized 1 loops" 3 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-cselim-1.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-cselim-1.c
+@@ -0,0 +1,86 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 50
++
++typedef struct {
++ short a;
++ short b;
++} data;
++
++data in1[N], in2[N], out[N];
++short result[N*2] = {7,-7,9,-6,11,-5,13,-4,15,-3,17,-2,19,-1,21,0,23,1,25,2,27,3,29,4,31,5,33,6,35,7,37,8,39,9,41,10,43,11,45,12,47,13,49,14,51,15,53,16,55,17,57,18,59,19,61,20,63,21,65,22,67,23,69,24,71,25,73,26,75,27,77,28,79,29,81,30,83,31,85,32,87,33,89,34,91,35,93,36,95,37,97,38,99,39,101,40,103,41,105,42};
++short out1[N], out2[N];
++
++__attribute__ ((noinline)) void
++foo ()
++{
++ int i;
++ short c, d;
++
++ /* Vectorizable with conditional store sinking. */
++ for (i = 0; i < N; i++)
++ {
++ c = in1[i].b;
++ d = in2[i].b;
++
++ if (c >= d)
++ {
++ out[i].b = c;
++ out[i].a = d + 5;
++ }
++ else
++ {
++ out[i].b = d - 12;
++ out[i].a = c + d;
++ }
++ }
++
++ /* Not vectorizable. */
++ for (i = 0; i < N; i++)
++ {
++ c = in1[i].b;
++ d = in2[i].b;
++
++ if (c >= d)
++ {
++ out1[i] = c;
++ }
++ else
++ {
++ out2[i] = c + d;
++ }
++ }
++}
++
++int
++main (void)
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ in1[i].a = i;
++ in1[i].b = i + 2;
++ in2[i].a = 5;
++ in2[i].b = i + 5;
++ __asm__ volatile ("");
++ }
++
++ foo ();
++
++ for (i = 0; i < N; i++)
++ {
++ if (out[i].a != result[2*i] || out[i].b != result[2*i+1])
++ abort ();
++ }
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align || { ! vect_strided2 } } } } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-cselim-2.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-cselim-2.c
+@@ -0,0 +1,65 @@
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 50
++
++int a[N], b[N], in1[N], in2[N];
++int result[2*N] = {5,-7,7,-6,9,-5,11,-4,13,-3,15,-2,17,-1,19,0,21,1,23,2,25,3,27,4,29,5,31,6,33,7,35,8,37,9,39,10,41,11,43,12,45,13,47,14,49,15,51,16,53,17,55,18,57,19,59,20,61,21,63,22,65,23,67,24,69,25,71,26,73,27,75,28,77,29,79,30,81,31,83,32,85,33,87,34,89,35,91,36,93,37,95,38,97,39,99,40,101,41,103,42};
++
++__attribute__ ((noinline)) void
++foo (int *pa, int *pb)
++{
++ int i;
++ int c, d;
++
++ /* Store sinking should not work here since the pointers may alias. */
++ for (i = 0; i < N; i++)
++ {
++ c = in1[i];
++ d = in2[i];
++
++ if (c >= d)
++ {
++ *pa = c;
++ *pb = d + 5;
++ }
++ else
++ {
++ *pb = d - 12;
++ *pa = c + d;
++ }
++
++ pa++;
++ pb++;
++ }
++}
++
++int
++main (void)
++{
++ int i;
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ in1[i] = i;
++ in2[i] = i + 5;
++ __asm__ volatile ("");
++ }
++
++ foo (a, b);
++
++ for (i = 0; i < N; i++)
++ {
++ if (a[i] != result[2*i] || b[i] != result[2*i+1])
++ abort ();
++ }
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
+@@ -1,5 +1,4 @@
+ /* { dg-require-effective-target vect_int } */
+-/* { dg-add-options quad_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-3.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-3.c
+@@ -1,4 +1,5 @@
+ /* { dg-require-effective-target vect_int } */
++/* { dg-add-options double_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
+@@ -1,5 +1,4 @@
+ /* { dg-require-effective-target vect_int } */
+-/* { dg-add-options quad_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-6.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-6.c
+@@ -1,4 +1,5 @@
+ /* { dg-require-effective-target vect_int } */
++/* { dg-add-options double_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-outer-1.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-outer-1.c
+@@ -22,5 +22,6 @@
+ }
+
+ /* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail *-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "strided access in outer loop" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "strided access in outer loop" 1 "vect" { xfail vect_multiple_sizes } } } */
++/* { dg-final { scan-tree-dump-times "strided access in outer loop" 2 "vect" { target vect_multiple_sizes } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-outer-1a.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-outer-1a.c
+@@ -20,5 +20,6 @@
+ }
+
+ /* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail *-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "strided access in outer loop" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "strided access in outer loop" 1 "vect" { xfail vect_multiple_sizes } } } */
++/* { dg-final { scan-tree-dump-times "strided access in outer loop" 2 "vect" { target vect_multiple_sizes } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-outer-1b.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-outer-1b.c
+@@ -22,5 +22,6 @@
+ }
+
+ /* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail *-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "strided access in outer loop" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "strided access in outer loop" 1 "vect" { xfail vect_multiple_sizes } } } */
++/* { dg-final { scan-tree-dump-times "strided access in outer loop" 2 "vect" { target vect_multiple_sizes } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-outer-2b.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-outer-2b.c
+@@ -37,5 +37,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "strided access in outer loop." 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "strided access in outer loop" 1 "vect" { xfail vect_multiple_sizes } } } */
++/* { dg-final { scan-tree-dump-times "strided access in outer loop" 2 "vect" { target vect_multiple_sizes } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-outer-3a.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-outer-3a.c
+@@ -49,5 +49,6 @@
+ }
+
+ /* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "step doesn't divide the vector-size" 2 "vect" } } */
++/* { dg-final { scan-tree-dump-times "step doesn't divide the vector-size" 2 "vect" { xfail vect_multiple_sizes } } } */
++/* { dg-final { scan-tree-dump-times "step doesn't divide the vector-size" 3 "vect" { target vect_multiple_sizes } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-outer-3b.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-outer-3b.c
+@@ -49,5 +49,6 @@
+ }
+
+ /* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail *-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "strided access in outer loop" 2 "vect" } } */
++/* { dg-final { scan-tree-dump-times "strided access in outer loop" 2 "vect" { xfail vect_multiple_sizes } } } */
++/* { dg-final { scan-tree-dump-times "strided access in outer loop" 4 "vect" { target vect_multiple_sizes } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-outer-5.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-outer-5.c
+@@ -1,5 +1,4 @@
+ /* { dg-require-effective-target vect_float } */
+-/* { dg-add-options quad_vectors } */
+
+ #include <stdarg.h>
+ #include <signal.h>
+@@ -17,7 +16,7 @@
+ float B[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+ float C[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+ float D[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+- float E[4] = {0,1,2,480};
++ float E[4] = {0,480,960,1440};
+ float s;
+
+ int i, j;
+@@ -55,7 +54,7 @@
+ s = 0;
+ for (j=0; j<N; j+=4)
+ s += C[j];
+- B[i+3] = B[i] + s;
++ B[i+1] = B[i] + s;
+ }
+
+ /* check results: */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-over-widen-1.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-over-widen-1.c
+@@ -0,0 +1,64 @@
++/* { dg-require-effective-target vect_int } */
++/* { dg-require-effective-target vect_shift } */
++
++#include <stdlib.h>
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 64
++
++/* Modified rgb to rgb conversion from FFmpeg. */
++__attribute__ ((noinline)) void
++foo (unsigned char *src, unsigned char *dst)
++{
++ unsigned char *s = src;
++ unsigned short *d = (unsigned short *)dst;
++ int i;
++
++ for (i = 0; i < N/4; i++)
++ {
++ const int b = *s++;
++ const int g = *s++;
++ const int r = *s++;
++ const int a = *s++;
++ *d = ((b>>3) | ((g&0xFC)<<3) | ((r&0xF8)<<8) | (a>>5));
++ d++;
++ }
++
++ s = src;
++ d = (unsigned short *)dst;
++ for (i = 0; i < N/4; i++)
++ {
++ const int b = *s++;
++ const int g = *s++;
++ const int r = *s++;
++ const int a = *s++;
++ if (*d != ((b>>3) | ((g&0xFC)<<3) | ((r&0xF8)<<8) | (a>>5)))
++ abort ();
++ d++;
++ }
++}
++
++int main (void)
++{
++ int i;
++ unsigned char in[N], out[N];
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ in[i] = i;
++ out[i] = 255;
++ __asm__ volatile ("");
++ }
++
++ foo (in, out);
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vect_recog_over_widening_pattern: detected" 4 "vect" } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-over-widen-2.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-over-widen-2.c
+@@ -0,0 +1,65 @@
++/* { dg-require-effective-target vect_int } */
++/* { dg-require-effective-target vect_shift } */
++
++#include <stdlib.h>
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 64
++
++/* Modified rgb to rgb conversion from FFmpeg. */
++__attribute__ ((noinline)) void
++foo (unsigned char *src, unsigned char *dst)
++{
++ unsigned char *s = src;
++ int *d = (int *)dst;
++ int i;
++
++ for (i = 0; i < N/4; i++)
++ {
++ const int b = *s++;
++ const int g = *s++;
++ const int r = *s++;
++ const int a = *s++;
++ *d = ((b>>3) | ((g&0xFC)<<3) | ((r&0xF8)<<8) | (a>>5));
++ d++;
++ }
++
++ s = src;
++ d = (int *)dst;
++ for (i = 0; i < N/4; i++)
++ {
++ const int b = *s++;
++ const int g = *s++;
++ const int r = *s++;
++ const int a = *s++;
++ if (*d != ((b>>3) | ((g&0xFC)<<3) | ((r&0xF8)<<8) | (a>>5)))
++ abort ();
++ d++;
++ }
++}
++
++int main (void)
++{
++ int i;
++ unsigned char in[N], out[N];
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ in[i] = i;
++ out[i] = 255;
++ __asm__ volatile ("");
++ }
++
++ foo (in, out);
++
++ return 0;
++}
++
++/* Final value stays in int, so no over-widening is detected at the moment. */
++/* { dg-final { scan-tree-dump-times "vect_recog_over_widening_pattern: detected" 0 "vect" } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-over-widen-3.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-over-widen-3.c
+@@ -0,0 +1,64 @@
++/* { dg-require-effective-target vect_int } */
++/* { dg-require-effective-target vect_shift } */
++
++#include <stdlib.h>
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 64
++
++/* Modified rgb to rgb conversion from FFmpeg. */
++__attribute__ ((noinline)) void
++foo (unsigned char *src, unsigned char *dst)
++{
++ unsigned char *s = src;
++ unsigned short *d = (unsigned short *)dst;
++ int i;
++
++ for (i = 0; i < N/4; i++)
++ {
++ const int b = *s++;
++ const int g = *s++;
++ const int r = *s++;
++ const int a = *s++;
++ *d = ((b>>3) | ((g&0xFFC)<<3) | ((r+0xF8)>>8) | (a<<9));
++ d++;
++ }
++
++ s = src;
++ d = (unsigned short *)dst;
++ for (i = 0; i < N/4; i++)
++ {
++ const int b = *s++;
++ const int g = *s++;
++ const int r = *s++;
++ const int a = *s++;
++ if (*d != ((b>>3) | ((g&0xFFC)<<3) | ((r+0xF8)>>8) | (a<<9)))
++ abort ();
++ d++;
++ }
++}
++
++int main (void)
++{
++ int i;
++ unsigned char in[N], out[N];
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ in[i] = i;
++ out[i] = 255;
++ __asm__ volatile ("");
++ }
++
++ foo (in, out);
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vect_recog_over_widening_pattern: detected" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-over-widen-4.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-over-widen-4.c
+@@ -0,0 +1,68 @@
++/* { dg-require-effective-target vect_int } */
++/* { dg-require-effective-target vect_shift } */
++
++#include <stdlib.h>
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 64
++
++/* Modified rgb to rgb conversion from FFmpeg. */
++__attribute__ ((noinline)) int
++foo (unsigned char *src, unsigned char *dst)
++{
++ unsigned char *s = src;
++ unsigned short *d = (unsigned short *)dst, res;
++ int i, result = 0;
++
++ for (i = 0; i < N/4; i++)
++ {
++ const int b = *s++;
++ const int g = *s++;
++ const int r = *s++;
++ const int a = *s++;
++ res = ((b>>3) | ((g&0xFC)<<3) | ((r&0xF8)<<8) | (a>>5));
++ *d = res;
++ result += res;
++ d++;
++ }
++
++ s = src;
++ d = (unsigned short *)dst;
++ for (i = 0; i < N/4; i++)
++ {
++ const int b = *s++;
++ const int g = *s++;
++ const int r = *s++;
++ const int a = *s++;
++ if (*d != ((b>>3) | ((g&0xFC)<<3) | ((r&0xF8)<<8) | (a>>5)))
++ abort ();
++ d++;
++ }
++
++ return result;
++}
++
++int main (void)
++{
++ int i;
++ unsigned char in[N], out[N];
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ in[i] = i;
++ out[i] = 255;
++ __asm__ volatile ("");
++ }
++
++ foo (in, out);
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vect_recog_over_widening_pattern: detected" 4 "vect" } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-peel-1.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-peel-1.c
+@@ -1,5 +1,4 @@
+ /* { dg-require-effective-target vect_int } */
+-/* { dg-add-options quad_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-peel-2.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-peel-2.c
+@@ -1,5 +1,4 @@
+ /* { dg-require-effective-target vect_int } */
+-/* { dg-add-options quad_vectors } */
+
+ #include <stdarg.h>
+ #include "tree-vect.h"
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-peel-4.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-peel-4.c
+@@ -6,12 +6,12 @@
+ #define N 128
+
+ int ib[N+7];
++int ia[N+1];
+
+ __attribute__ ((noinline))
+ int main1 ()
+ {
+ int i;
+- int ia[N+1];
+
+ /* Don't peel keeping one load and the store aligned. */
+ for (i = 0; i <= N; i++)
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s8b.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s8b.c
+@@ -58,7 +58,8 @@
+ }
+
+ /* { dg-final { scan-tree-dump-times "vect_recog_dot_prod_pattern: detected" 1 "vect" { xfail *-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 1 "vect" { xfail vect_multiple_sizes } } } */
++/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 2 "vect" { target vect_multiple_sizes } } } */
+
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-shift-3.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-shift-3.c
+@@ -0,0 +1,37 @@
++/* { dg-require-effective-target vect_shift } */
++/* { dg-require-effective-target vect_int } */
++
++#include "tree-vect.h"
++
++#define N 32
++
++unsigned short dst[N] __attribute__((aligned(N)));
++unsigned short src[N] __attribute__((aligned(N)));
++
++__attribute__ ((noinline))
++void array_shift(void)
++{
++ int i;
++ for (i = 0; i < N; i++)
++ dst[i] = src[i] >> 3;
++}
++
++int main()
++{
++ volatile int i;
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ src[i] = i << 3;
++
++ array_shift ();
++
++ for (i = 0; i < N; i++)
++ if (dst[i] != i)
++ abort ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-shift-4.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-shift-4.c
+@@ -0,0 +1,37 @@
++/* { dg-require-effective-target vect_shift_char } */
++/* { dg-require-effective-target vect_int } */
++
++#include "tree-vect.h"
++
++#define N 32
++
++unsigned char dst[N] __attribute__((aligned(N)));
++unsigned char src[N] __attribute__((aligned(N)));
++
++__attribute__ ((noinline))
++void array_shift(void)
++{
++ int i;
++ for (i = 0; i < N; i++)
++ dst[i] = src[i] >> 3;
++}
++
++int main()
++{
++ volatile int i;
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ src[i] = i << 3;
++
++ array_shift ();
++
++ for (i = 0; i < N; i++)
++ if (dst[i] != i)
++ abort ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-mult.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-mult.c
+@@ -71,6 +71,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-i2.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-i2.c
+@@ -55,6 +55,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-i4.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-i4.c
+@@ -68,6 +68,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-mult.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-u16-mult.c
+@@ -62,6 +62,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-u32-mult.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-u32-mult.c
+@@ -61,6 +61,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i2-gap.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i2-gap.c
+@@ -69,6 +69,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i8-gap2.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i8-gap2.c
+@@ -76,6 +76,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i8-gap7.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i8-gap7.c
+@@ -81,6 +81,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-float.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-float.c
+@@ -39,7 +39,7 @@
+ }
+
+ /* Needs interleaving support. */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd_wide } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail { vect_interleave && vect_extract_even_odd_wide } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-mult-char-ls.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-mult-char-ls.c
+@@ -71,6 +71,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-mult.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-mult.c
+@@ -71,6 +71,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-same-dr.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-same-dr.c
+@@ -72,5 +72,5 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-store-a-u8-i2.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-store-a-u8-i2.c
+@@ -55,6 +55,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave || vect_strided2 } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-store-u16-i4.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-store-u16-i4.c
+@@ -65,8 +65,8 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target { vect_interleave && vect_pack_trunc } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { { ! { vect_interleave } } && { vect_pack_trunc } } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target { { vect_interleave || vect_strided4 } && vect_pack_trunc } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { { ! { vect_interleave || vect_strided4 } } && { vect_pack_trunc } } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-store-u32-i2.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-store-u32-i2.c
+@@ -39,7 +39,7 @@
+ }
+
+ /* Needs interleaving support. */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail { vect_interleave } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave || vect_strided2 } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail { vect_interleave || vect_strided2 } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i2.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i2.c
+@@ -55,6 +55,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i3.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i3.c
+@@ -0,0 +1,112 @@
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 128
++
++typedef struct {
++ unsigned short a;
++ unsigned short b;
++ unsigned short c;
++} s;
++
++#define A(I) (I)
++#define B(I) ((I) * 2)
++#define C(I) ((unsigned short) ~((I) ^ 0x18))
++
++void __attribute__ ((noinline))
++check1 (s *res)
++{
++ int i;
++
++ for (i = 0; i < N; i++)
++ if (res[i].a != C (i)
++ || res[i].b != A (i)
++ || res[i].c != B (i))
++ abort ();
++}
++
++void __attribute__ ((noinline))
++check2 (unsigned short *res)
++{
++ int i;
++
++ for (i = 0; i < N; i++)
++ if (res[i] != (unsigned short) (A (i) + B (i) + C (i)))
++ abort ();
++}
++
++void __attribute__ ((noinline))
++check3 (s *res)
++{
++ int i;
++
++ for (i = 0; i < N; i++)
++ if (res[i].a != i
++ || res[i].b != i
++ || res[i].c != i)
++ abort ();
++}
++
++void __attribute__ ((noinline))
++check4 (unsigned short *res)
++{
++ int i;
++
++ for (i = 0; i < N; i++)
++ if (res[i] != (unsigned short) (A (i) + B (i)))
++ abort ();
++}
++
++void __attribute__ ((noinline))
++main1 (s *arr)
++{
++ int i;
++ s *ptr = arr;
++ s res1[N];
++ unsigned short res2[N];
++
++ for (i = 0; i < N; i++)
++ {
++ res1[i].a = arr[i].c;
++ res1[i].b = arr[i].a;
++ res1[i].c = arr[i].b;
++ }
++ check1 (res1);
++
++ for (i = 0; i < N; i++)
++ res2[i] = arr[i].a + arr[i].b + arr[i].c;
++ check2 (res2);
++
++ for (i = 0; i < N; i++)
++ {
++ res1[i].a = i;
++ res1[i].b = i;
++ res1[i].c = i;
++ }
++ check3 (res1);
++
++ for (i = 0; i < N; i++)
++ res2[i] = arr[i].a + arr[i].b;
++ check4 (res2);
++}
++
++int main (void)
++{
++ int i;
++ s arr[N];
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ arr[i].a = A (i);
++ arr[i].b = B (i);
++ arr[i].c = C (i);
++ }
++ main1 (arr);
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" { target vect_strided3 } } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i4.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-u16-i4.c
+@@ -68,6 +68,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-u32-i4.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-u32-i4.c
+@@ -63,6 +63,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-u32-i8.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-u32-i8.c
+@@ -77,6 +77,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-u32-mult.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-u32-mult.c
+@@ -60,6 +60,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i2-gap.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i2-gap.c
+@@ -71,6 +71,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i2.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i2.c
+@@ -54,6 +54,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap2.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap2.c
+@@ -78,6 +78,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap4.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap4.c
+@@ -98,6 +98,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap7.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap7.c
+@@ -83,6 +83,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8.c
+@@ -85,6 +85,6 @@
+ return 0;
+ }
+
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-vfa-03.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-vfa-03.c
+@@ -53,6 +53,6 @@
+ }
+
+ /* Needs interleaving support. */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { xfail { vect_interleave && vect_extract_even_odd } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { xfail vect_strided2 } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c
+@@ -0,0 +1,60 @@
++/* { dg-require-effective-target vect_int } */
++
++#include "tree-vect.h"
++#include <stdlib.h>
++
++#define N 32
++
++__attribute__ ((noinline)) void
++foo (int *__restrict a,
++ short *__restrict b,
++ int n)
++{
++ int i;
++
++ for (i = 0; i < n; i++)
++ a[i] = b[i] * 2333;
++
++ for (i = 0; i < n; i++)
++ if (a[i] != b[i] * 2333)
++ abort ();
++}
++
++__attribute__ ((noinline)) void
++bar (int *__restrict a,
++ short *__restrict b,
++ int n)
++{
++ int i;
++
++ for (i = 0; i < n; i++)
++ a[i] = b[i] * (short) 2333;
++
++ for (i = 0; i < n; i++)
++ if (a[i] != b[i] * (short) 2333)
++ abort ();
++}
++
++int main (void)
++{
++ int i;
++ int a[N];
++ short b[N];
++
++ for (i = 0; i < N; i++)
++ {
++ a[i] = 0;
++ b[i] = i;
++ __asm__ volatile ("");
++ }
++
++ foo (a, b, N);
++ bar (a, b, N);
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_widen_mult_hi_to_si } } } */
++/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
++/* { dg-final { scan-tree-dump-times "pattern recognized" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-u16.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-u16.c
+@@ -0,0 +1,77 @@
++/* { dg-require-effective-target vect_int } */
++
++#include "tree-vect.h"
++#include <stdlib.h>
++
++#define N 32
++
++__attribute__ ((noinline)) void
++foo (unsigned int *__restrict a,
++ unsigned short *__restrict b,
++ int n)
++{
++ int i;
++
++ for (i = 0; i < n; i++)
++ a[i] = b[i] * 2333;
++
++ for (i = 0; i < n; i++)
++ if (a[i] != b[i] * 2333)
++ abort ();
++}
++
++__attribute__ ((noinline)) void
++bar (unsigned int *__restrict a,
++ unsigned short *__restrict b,
++ int n)
++{
++ int i;
++
++ for (i = 0; i < n; i++)
++ a[i] = (unsigned short) 2333 * b[i];
++
++ for (i = 0; i < n; i++)
++ if (a[i] != b[i] * (unsigned short) 2333)
++ abort ();
++}
++
++__attribute__ ((noinline)) void
++baz (unsigned int *__restrict a,
++ unsigned short *__restrict b,
++ int n)
++{
++ int i;
++
++ for (i = 0; i < n; i++)
++ a[i] = b[i] * 233333333;
++
++ for (i = 0; i < n; i++)
++ if (a[i] != b[i] * 233333333)
++ abort ();
++}
++
++
++int main (void)
++{
++ int i;
++ unsigned int a[N];
++ unsigned short b[N];
++
++ for (i = 0; i < N; i++)
++ {
++ a[i] = 0;
++ b[i] = i;
++ __asm__ volatile ("");
++ }
++
++ foo (a, b, N);
++ bar (a, b, N);
++ baz (a, b, N);
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" { target vect_widen_mult_hi_to_si } } } */
++/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
++/* { dg-final { scan-tree-dump-times "pattern recognized" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-widen-mult-half-u8.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-widen-mult-half-u8.c
+@@ -0,0 +1,59 @@
++/* { dg-require-effective-target vect_int } */
++
++#include "tree-vect.h"
++#include <stdlib.h>
++
++#define N 32
++#define COEF 32470
++
++unsigned char in[N];
++int out[N];
++
++__attribute__ ((noinline)) void
++foo ()
++{
++ int i;
++
++ for (i = 0; i < N; i++)
++ out[i] = in[i] * COEF;
++}
++
++__attribute__ ((noinline)) void
++bar ()
++{
++ int i;
++
++ for (i = 0; i < N; i++)
++ out[i] = COEF * in[i];
++}
++
++int main (void)
++{
++ int i;
++
++ for (i = 0; i < N; i++)
++ {
++ in[i] = i;
++ __asm__ volatile ("");
++ }
++
++ foo ();
++
++ for (i = 0; i < N; i++)
++ if (out[i] != in[i] * COEF)
++ abort ();
++
++ bar ();
++
++ for (i = 0; i < N; i++)
++ if (out[i] != in[i] * COEF)
++ abort ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_widen_mult_hi_to_si } } } */
++/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
++/* { dg-final { scan-tree-dump-times "pattern recognized" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-widen-mult-half.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-widen-mult-half.c
+@@ -0,0 +1,49 @@
++/* { dg-require-effective-target vect_int } */
++
++#include "tree-vect.h"
++#include <stdlib.h>
++
++#define N 32
++#define COEF 32470
++#define COEF2 324700
++
++unsigned char in[N];
++int out[N];
++int out2[N];
++
++__attribute__ ((noinline)) void
++foo (int a)
++{
++ int i;
++
++ for (i = 0; i < N; i++)
++ {
++ out[i] = in[i] * COEF;
++ out2[i] = in[i] + a;
++ }
++}
++
++int main (void)
++{
++ int i;
++
++ for (i = 0; i < N; i++)
++ {
++ in[i] = i;
++ __asm__ volatile ("");
++ }
++
++ foo (COEF2);
++
++ for (i = 0; i < N; i++)
++ if (out[i] != in[i] * COEF || out2[i] != in[i] + COEF2)
++ abort ();
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_widen_mult_hi_to_si } } } */
++/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 1 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
++/* { dg-final { scan-tree-dump-times "pattern recognized" 1 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-widen-mult-u16.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-widen-mult-u16.c
+@@ -9,13 +9,11 @@
+ unsigned short Y[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+ unsigned int result[N];
+
+-/* short->int widening-mult */
++/* unsigned short->unsigned int widening-mult. */
+ __attribute__ ((noinline)) int
+ foo1(int len) {
+ int i;
+
+- /* Not vectorized because X[i] and Y[i] are casted to 'int'
+- so the widening multiplication pattern is not recognized. */
+ for (i=0; i<len; i++) {
+ result[i] = (unsigned int)(X[i] * Y[i]);
+ }
+@@ -43,8 +41,8 @@
+ return 0;
+ }
+
+-/*The induction loop is vectorized */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail *-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_pack_trunc } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_widen_mult_hi_to_si || vect_unpack } } } } */
++/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 1 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
++/* { dg-final { scan-tree-dump-times "pattern recognized" 1 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-widen-mult-u8.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-widen-mult-u8.c
+@@ -9,7 +9,7 @@
+ unsigned char Y[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+ unsigned short result[N];
+
+-/* char->short widening-mult */
++/* unsigned char-> unsigned short widening-mult. */
+ __attribute__ ((noinline)) int
+ foo1(int len) {
+ int i;
+@@ -28,8 +28,7 @@
+ for (i=0; i<N; i++) {
+ X[i] = i;
+ Y[i] = 64-i;
+- if (i%4 == 0)
+- X[i] = 5;
++ __asm__ volatile ("");
+ }
+
+ foo1 (N);
+@@ -43,5 +42,7 @@
+ }
+
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_widen_mult_qi_to_hi || vect_unpack } } } } */
++/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 1 "vect" { target vect_widen_mult_qi_to_hi_pattern } } } */
++/* { dg-final { scan-tree-dump-times "pattern recognized" 1 "vect" { target vect_widen_mult_qi_to_hi_pattern } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-widen-shift-s16.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-widen-shift-s16.c
+@@ -0,0 +1,107 @@
++/* { dg-require-effective-target vect_int } */
++/* { dg-require-effective-target vect_shift } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 64
++#define C 16
++
++__attribute__ ((noinline)) void
++foo (short *src, int *dst)
++{
++ int i;
++ short b, b0, b1, b2, b3, *s = src;
++ int *d = dst;
++
++ for (i = 0; i < N/4; i++)
++ {
++ b0 = *s++;
++ b1 = *s++;
++ b2 = *s++;
++ b3 = *s++;
++ *d = b0 << C;
++ d++;
++ *d = b1 << C;
++ d++;
++ *d = b2 << C;
++ d++;
++ *d = b3 << C;
++ d++;
++ }
++
++ s = src;
++ d = dst;
++ for (i = 0; i < N; i++)
++ {
++ b = *s++;
++ if (*d != b << C)
++ abort ();
++ d++;
++ }
++
++ s = src;
++ d = dst;
++ for (i = 0; i < N/4; i++)
++ {
++ b0 = *s++;
++ b1 = *s++;
++ b2 = *s++;
++ b3 = *s++;
++ *d = b0 << C;
++ d++;
++ *d = b1 << C;
++ d++;
++ *d = b2 << C;
++ d++;
++ *d = b3 << 6;
++ d++;
++ }
++
++ s = src;
++ d = dst;
++ for (i = 0; i < N/4; i++)
++ {
++ b = *s++;
++ if (*d != b << C)
++ abort ();
++ d++;
++ b = *s++;
++ if (*d != b << C)
++ abort ();
++ d++;
++ b = *s++;
++ if (*d != b << C)
++ abort ();
++ d++;
++ b = *s++;
++ if (*d != b << 6)
++ abort ();
++ d++;
++ }
++}
++
++int main (void)
++{
++ int i;
++ short in[N];
++ int out[N];
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ in[i] = i;
++ out[i] = 255;
++ __asm__ volatile ("");
++ }
++
++ foo (in, out);
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vect_recog_widen_shift_pattern: detected" 8 "vect" { target vect_widen_shift } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-widen-shift-s8.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-widen-shift-s8.c
+@@ -0,0 +1,58 @@
++/* { dg-require-effective-target vect_int } */
++/* { dg-require-effective-target vect_shift } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 64
++#define C 12
++
++__attribute__ ((noinline)) void
++foo (char *src, int *dst)
++{
++ int i;
++ char b, *s = src;
++ int *d = dst;
++
++ for (i = 0; i < N; i++)
++ {
++ b = *s++;
++ *d = b << C;
++ d++;
++ }
++
++ s = src;
++ d = dst;
++ for (i = 0; i < N; i++)
++ {
++ b = *s++;
++ if (*d != b << C)
++ abort ();
++ d++;
++ }
++}
++
++int main (void)
++{
++ int i;
++ char in[N];
++ int out[N];
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ in[i] = i;
++ out[i] = 255;
++ __asm__ volatile ("");
++ }
++
++ foo (in, out);
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vect_recog_widen_shift_pattern: detected" 1 "vect" { target vect_widen_shift } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-widen-shift-u16.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-widen-shift-u16.c
+@@ -0,0 +1,58 @@
++/* { dg-require-effective-target vect_int } */
++/* { dg-require-effective-target vect_shift } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 64
++#define C 7
++
++__attribute__ ((noinline)) void
++foo (unsigned short *src, unsigned int *dst)
++{
++ int i;
++ unsigned short b, *s = src;
++ unsigned int *d = dst;
++
++ for (i = 0; i < N; i++)
++ {
++ b = *s++;
++ *d = b << C;
++ d++;
++ }
++
++ s = src;
++ d = dst;
++ for (i = 0; i < N; i++)
++ {
++ b = *s++;
++ if (*d != b << C)
++ abort ();
++ d++;
++ }
++}
++
++int main (void)
++{
++ int i;
++ unsigned short in[N];
++ unsigned int out[N];
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ in[i] = i;
++ out[i] = 255;
++ __asm__ volatile ("");
++ }
++
++ foo (in, out);
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vect_recog_widen_shift_pattern: detected" 1 "vect" { target vect_widen_shift } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-widen-shift-u8.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-widen-shift-u8.c
+@@ -0,0 +1,65 @@
++/* { dg-require-effective-target vect_int } */
++/* { dg-require-effective-target vect_shift } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 64
++#define C1 10
++#define C2 5
++
++__attribute__ ((noinline)) void
++foo (unsigned char *src, unsigned int *dst1, unsigned int *dst2)
++{
++ int i;
++ unsigned char b, *s = src;
++ unsigned int *d1 = dst1, *d2 = dst2;
++
++ for (i = 0; i < N; i++)
++ {
++ b = *s++;
++ *d1 = b << C1;
++ d1++;
++ *d2 = b << C2;
++ d2++;
++ }
++
++ s = src;
++ d1 = dst1;
++ d2 = dst2;
++ for (i = 0; i < N; i++)
++ {
++ b = *s++;
++ if (*d1 != b << C1 || *d2 != b << C2)
++ abort ();
++ d1++;
++ d2++;
++ }
++}
++
++int main (void)
++{
++ int i;
++ unsigned char in[N];
++ unsigned int out1[N];
++ unsigned int out2[N];
++
++ check_vect ();
++
++ for (i = 0; i < N; i++)
++ {
++ in[i] = i;
++ out1[i] = 255;
++ out2[i] = 255;
++ __asm__ volatile ("");
++ }
++
++ foo (in, out1, out2);
++
++ return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vect_recog_widen_shift_pattern: detected" 1 "vect" { target vect_widen_shift } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
++
+--- a/src/gcc/testsuite/gcc.dg/vect/vect.exp
++++ b/src/gcc/testsuite/gcc.dg/vect/vect.exp
+@@ -75,15 +75,20 @@
+ lappend VECT_SLP_CFLAGS "-fdump-tree-slp-details"
+
+ # Main loop.
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/pr*.\[cS\]]] \
+- "" $DEFAULT_VECTCFLAGS
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/vect-*.\[cS\]]] \
+- "" $DEFAULT_VECTCFLAGS
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/slp-*.\[cS\]]] \
+- "" $DEFAULT_VECTCFLAGS
+-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/bb-slp*.\[cS\]]] \
+- "" $VECT_SLP_CFLAGS
+-
++set VECT_ADDITIONAL_FLAGS [list ""]
++if { [check_effective_target_lto] } {
++ lappend VECT_ADDITIONAL_FLAGS "-flto"
++}
++foreach flags $VECT_ADDITIONAL_FLAGS {
++ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/pr*.\[cS\]]] \
++ $flags $DEFAULT_VECTCFLAGS
++ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/vect-*.\[cS\]]] \
++ $flags $DEFAULT_VECTCFLAGS
++ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/slp-*.\[cS\]]] \
++ $flags $DEFAULT_VECTCFLAGS
++ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/bb-slp*.\[cS\]]] \
++ $flags $VECT_SLP_CFLAGS
++}
+
+ #### Tests with special options
+ global SAVED_DEFAULT_VECTCFLAGS
+@@ -210,6 +215,12 @@
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/ggc-*.\[cS\]]] \
+ "" $DEFAULT_VECTCFLAGS
+
++# -ftree-loop-if-convert-stores
++set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS
++lappend DEFAULT_VECTCFLAGS "-ftree-loop-if-convert-stores"
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/if-cvt-stores-vect-*.\[cS\]]] \
++ "" $DEFAULT_VECTCFLAGS
++
+ # With -O3.
+ # Don't allow IPA cloning, because it throws our counts out of whack.
+ set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS
+@@ -234,6 +245,18 @@
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-tree-reassoc-bb-slp-*.\[cS\]]] \
+ "" $VECT_SLP_CFLAGS
+
++# -fno-tree-fre
++set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS
++lappend DEFAULT_VECTCFLAGS "-fno-tree-fre"
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-tree-fre-*.\[cS\]]] \
++ "" $DEFAULT_VECTCFLAGS
++
++# -fno-tree-fre -fno-tree-pre
++set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS
++lappend DEFAULT_VECTCFLAGS "-fno-tree-fre" "-fno-tree-pre"
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-fre-pre*.\[cS\]]] \
++ "" $DEFAULT_VECTCFLAGS
++
+ # Clean up.
+ set dg-do-what-default ${save-dg-do-what-default}
+
+--- a/src/gcc/testsuite/gcc.target/arm/cmp-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/cmp-1.c
+@@ -0,0 +1,37 @@
++/* { dg-do compile } */
++/* { dg-options "-O" } */
++/* { dg-final { scan-assembler-not "\tbl\t" } } */
++/* { dg-final { scan-assembler-not "__aeabi" } } */
++int x, y;
++
++#define TEST_EXPR(NAME, ARGS, EXPR) \
++ int NAME##1 ARGS { return (EXPR); } \
++ int NAME##2 ARGS { return !(EXPR); } \
++ int NAME##3 ARGS { return (EXPR) ? x : y; } \
++ void NAME##4 ARGS { if (EXPR) x++; } \
++ void NAME##5 ARGS { if (!(EXPR)) x++; }
++
++#define TEST(NAME, TYPE, OPERATOR) \
++ TEST_EXPR (NAME##_rr, (TYPE a1, TYPE a2), a1 OPERATOR a2) \
++ TEST_EXPR (NAME##_rm, (TYPE a1, TYPE *a2), a1 OPERATOR *a2) \
++ TEST_EXPR (NAME##_mr, (TYPE *a1, TYPE a2), *a1 OPERATOR a2) \
++ TEST_EXPR (NAME##_mm, (TYPE *a1, TYPE *a2), *a1 OPERATOR *a2) \
++ TEST_EXPR (NAME##_rc, (TYPE a1), a1 OPERATOR 100) \
++ TEST_EXPR (NAME##_cr, (TYPE a1), 100 OPERATOR a1)
++
++#define TEST_OP(NAME, OPERATOR) \
++ TEST (sc_##NAME, signed char, OPERATOR) \
++ TEST (uc_##NAME, unsigned char, OPERATOR) \
++ TEST (ss_##NAME, short, OPERATOR) \
++ TEST (us_##NAME, unsigned short, OPERATOR) \
++ TEST (si_##NAME, int, OPERATOR) \
++ TEST (ui_##NAME, unsigned int, OPERATOR) \
++ TEST (sll_##NAME, long long, OPERATOR) \
++ TEST (ull_##NAME, unsigned long long, OPERATOR)
++
++TEST_OP (eq, ==)
++TEST_OP (ne, !=)
++TEST_OP (lt, <)
++TEST_OP (gt, >)
++TEST_OP (le, <=)
++TEST_OP (ge, >=)
+--- a/src/gcc/testsuite/gcc.target/arm/cmp-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/cmp-2.c
+@@ -0,0 +1,49 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_vfp_ok } */
++/* { dg-skip-if "need fp instructions" { *-*-* } { "-mfloat-abi=soft" } { "" } } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=softfp" } */
++/* { dg-final { scan-assembler-not "\tbl\t" } } */
++/* { dg-final { scan-assembler-not "__aeabi" } } */
++int x, y;
++
++#define EQ(X, Y) ((X) == (Y))
++#define NE(X, Y) ((X) != (Y))
++#define LT(X, Y) ((X) < (Y))
++#define GT(X, Y) ((X) > (Y))
++#define LE(X, Y) ((X) <= (Y))
++#define GE(X, Y) ((X) >= (Y))
++
++#define TEST_EXPR(NAME, ARGS, EXPR) \
++ int NAME##1 ARGS { return (EXPR); } \
++ int NAME##2 ARGS { return !(EXPR); } \
++ int NAME##3 ARGS { return (EXPR) ? x : y; } \
++ void NAME##4 ARGS { if (EXPR) x++; } \
++ void NAME##5 ARGS { if (!(EXPR)) x++; }
++
++#define TEST(NAME, TYPE, OPERATOR) \
++ TEST_EXPR (NAME##_rr, (TYPE a1, TYPE a2), OPERATOR (a1, a2)) \
++ TEST_EXPR (NAME##_rm, (TYPE a1, TYPE *a2), OPERATOR (a1, *a2)) \
++ TEST_EXPR (NAME##_mr, (TYPE *a1, TYPE a2), OPERATOR (*a1, a2)) \
++ TEST_EXPR (NAME##_mm, (TYPE *a1, TYPE *a2), OPERATOR (*a1, *a2)) \
++ TEST_EXPR (NAME##_rc, (TYPE a1), OPERATOR (a1, 100)) \
++ TEST_EXPR (NAME##_cr, (TYPE a1), OPERATOR (100, a1))
++
++#define TEST_OP(NAME, OPERATOR) \
++ TEST (f_##NAME, float, OPERATOR) \
++ TEST (d_##NAME, double, OPERATOR) \
++ TEST (ld_##NAME, long double, OPERATOR)
++
++TEST_OP (eq, EQ)
++TEST_OP (ne, NE)
++TEST_OP (lt, LT)
++TEST_OP (gt, GT)
++TEST_OP (le, LE)
++TEST_OP (ge, GE)
++TEST_OP (blt, __builtin_isless)
++TEST_OP (bgt, __builtin_isgreater)
++TEST_OP (ble, __builtin_islessequal)
++TEST_OP (bge, __builtin_isgreaterequal)
++/* This one should be expanded into separate ordered and equality
++ comparisons. */
++TEST_OP (blg, __builtin_islessgreater)
++TEST_OP (bun, __builtin_isunordered)
+--- a/src/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withhelpers.c
++++ b/src/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withhelpers.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arch_v5_ok } */
++/* { dg-options "-std=gnu99" } */
++/* { dg-add-options arm_arch_v5 } */
++/* { dg-message "note: '__sync_fetch_and_nand' changed semantics in GCC 4.4" "" { target *-*-* } 0 } */
++/* { dg-message "note: '__sync_nand_and_fetch' changed semantics in GCC 4.4" "" { target *-*-* } 0 } */
++/* { dg-message "file included" "In file included" { target *-*-* } 0 } */
++
++#include "../../gcc.dg/di-longlong64-sync-1.c"
++
++/* On an old ARM we have no ldrexd or strexd so we have to use helpers. */
++/* { dg-final { scan-assembler-not "ldrexd" } } */
++/* { dg-final { scan-assembler-not "strexd" } } */
++/* { dg-final { scan-assembler "__sync_" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c
++++ b/src/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c
+@@ -0,0 +1,17 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_arm_ok } */
++/* { dg-options "-marm -std=gnu99" } */
++/* { dg-require-effective-target arm_arch_v6k_ok } */
++/* { dg-add-options arm_arch_v6k } */
++/* { dg-message "note: '__sync_fetch_and_nand' changed semantics in GCC 4.4" "" { target *-*-* } 0 } */
++/* { dg-message "note: '__sync_nand_and_fetch' changed semantics in GCC 4.4" "" { target *-*-* } 0 } */
++/* { dg-message "file included" "In file included" { target *-*-* } 0 } */
++
++#include "../../gcc.dg/di-longlong64-sync-1.c"
++
++/* We should be using ldrexd, strexd and no helpers or shorter ldrex. */
++/* { dg-final { scan-assembler-times "\tldrexd" 46 } } */
++/* { dg-final { scan-assembler-times "\tstrexd" 46 } } */
++/* { dg-final { scan-assembler-not "__sync_" } } */
++/* { dg-final { scan-assembler-not "ldrex\t" } } */
++/* { dg-final { scan-assembler-not "strex\t" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/mla-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/mla-2.c
+@@ -0,0 +1,9 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++long long foolong (long long x, short *a, short *b)
++{
++ return x + *a * *b;
++}
++
++/* { dg-final { scan-assembler "smlalbb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupf32.c
+@@ -15,5 +15,5 @@
+ out_float32x4_t = vld1q_dup_f32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp16.c
+@@ -15,5 +15,5 @@
+ out_poly16x8_t = vld1q_dup_p16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp8.c
+@@ -15,5 +15,5 @@
+ out_poly8x16_t = vld1q_dup_p8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups16.c
+@@ -15,5 +15,5 @@
+ out_int16x8_t = vld1q_dup_s16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups32.c
+@@ -15,5 +15,5 @@
+ out_int32x4_t = vld1q_dup_s32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups64.c
+@@ -15,5 +15,5 @@
+ out_int64x2_t = vld1q_dup_s64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups8.c
+@@ -15,5 +15,5 @@
+ out_int8x16_t = vld1q_dup_s8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu16.c
+@@ -15,5 +15,5 @@
+ out_uint16x8_t = vld1q_dup_u16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu32.c
+@@ -15,5 +15,5 @@
+ out_uint32x4_t = vld1q_dup_u32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu64.c
+@@ -15,5 +15,5 @@
+ out_uint64x2_t = vld1q_dup_u64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu8.c
+@@ -15,5 +15,5 @@
+ out_uint8x16_t = vld1q_dup_u8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanef32.c
+@@ -16,5 +16,5 @@
+ out_float32x4_t = vld1q_lane_f32 (0, arg1_float32x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep16.c
+@@ -16,5 +16,5 @@
+ out_poly16x8_t = vld1q_lane_p16 (0, arg1_poly16x8_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep8.c
+@@ -16,5 +16,5 @@
+ out_poly8x16_t = vld1q_lane_p8 (0, arg1_poly8x16_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes16.c
+@@ -16,5 +16,5 @@
+ out_int16x8_t = vld1q_lane_s16 (0, arg1_int16x8_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes32.c
+@@ -16,5 +16,5 @@
+ out_int32x4_t = vld1q_lane_s32 (0, arg1_int32x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes64.c
+@@ -16,5 +16,5 @@
+ out_int64x2_t = vld1q_lane_s64 (0, arg1_int64x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes8.c
+@@ -16,5 +16,5 @@
+ out_int8x16_t = vld1q_lane_s8 (0, arg1_int8x16_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu16.c
+@@ -16,5 +16,5 @@
+ out_uint16x8_t = vld1q_lane_u16 (0, arg1_uint16x8_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu32.c
+@@ -16,5 +16,5 @@
+ out_uint32x4_t = vld1q_lane_u32 (0, arg1_uint32x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu64.c
+@@ -16,5 +16,5 @@
+ out_uint64x2_t = vld1q_lane_u64 (0, arg1_uint64x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu8.c
+@@ -16,5 +16,5 @@
+ out_uint8x16_t = vld1q_lane_u8 (0, arg1_uint8x16_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qf32.c
+@@ -15,5 +15,5 @@
+ out_float32x4_t = vld1q_f32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qp16.c
+@@ -15,5 +15,5 @@
+ out_poly16x8_t = vld1q_p16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qp8.c
+@@ -15,5 +15,5 @@
+ out_poly8x16_t = vld1q_p8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs16.c
+@@ -15,5 +15,5 @@
+ out_int16x8_t = vld1q_s16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs32.c
+@@ -15,5 +15,5 @@
+ out_int32x4_t = vld1q_s32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs64.c
+@@ -15,5 +15,5 @@
+ out_int64x2_t = vld1q_s64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs8.c
+@@ -15,5 +15,5 @@
+ out_int8x16_t = vld1q_s8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu16.c
+@@ -15,5 +15,5 @@
+ out_uint16x8_t = vld1q_u16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu32.c
+@@ -15,5 +15,5 @@
+ out_uint32x4_t = vld1q_u32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu64.c
+@@ -15,5 +15,5 @@
+ out_uint64x2_t = vld1q_u64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu8.c
+@@ -15,5 +15,5 @@
+ out_uint8x16_t = vld1q_u8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupf32.c
+@@ -15,5 +15,5 @@
+ out_float32x2_t = vld1_dup_f32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupp16.c
+@@ -15,5 +15,5 @@
+ out_poly16x4_t = vld1_dup_p16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupp8.c
+@@ -15,5 +15,5 @@
+ out_poly8x8_t = vld1_dup_p8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups16.c
+@@ -15,5 +15,5 @@
+ out_int16x4_t = vld1_dup_s16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups32.c
+@@ -15,5 +15,5 @@
+ out_int32x2_t = vld1_dup_s32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups64.c
+@@ -15,5 +15,5 @@
+ out_int64x1_t = vld1_dup_s64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups8.c
+@@ -15,5 +15,5 @@
+ out_int8x8_t = vld1_dup_s8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu16.c
+@@ -15,5 +15,5 @@
+ out_uint16x4_t = vld1_dup_u16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu32.c
+@@ -15,5 +15,5 @@
+ out_uint32x2_t = vld1_dup_u32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu64.c
+@@ -15,5 +15,5 @@
+ out_uint64x1_t = vld1_dup_u64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu8.c
+@@ -15,5 +15,5 @@
+ out_uint8x8_t = vld1_dup_u8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\\\]\\\})|(\[dD\]\[0-9\]+\\\[\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanef32.c
+@@ -16,5 +16,5 @@
+ out_float32x2_t = vld1_lane_f32 (0, arg1_float32x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanep16.c
+@@ -16,5 +16,5 @@
+ out_poly16x4_t = vld1_lane_p16 (0, arg1_poly16x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanep8.c
+@@ -16,5 +16,5 @@
+ out_poly8x8_t = vld1_lane_p8 (0, arg1_poly8x8_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes16.c
+@@ -16,5 +16,5 @@
+ out_int16x4_t = vld1_lane_s16 (0, arg1_int16x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes32.c
+@@ -16,5 +16,5 @@
+ out_int32x2_t = vld1_lane_s32 (0, arg1_int32x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes64.c
+@@ -16,5 +16,5 @@
+ out_int64x1_t = vld1_lane_s64 (0, arg1_int64x1_t, 0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes8.c
+@@ -16,5 +16,5 @@
+ out_int8x8_t = vld1_lane_s8 (0, arg1_int8x8_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu16.c
+@@ -16,5 +16,5 @@
+ out_uint16x4_t = vld1_lane_u16 (0, arg1_uint16x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu32.c
+@@ -16,5 +16,5 @@
+ out_uint32x2_t = vld1_lane_u32 (0, arg1_uint32x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu64.c
+@@ -16,5 +16,5 @@
+ out_uint64x1_t = vld1_lane_u64 (0, arg1_uint64x1_t, 0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu8.c
+@@ -16,5 +16,5 @@
+ out_uint8x8_t = vld1_lane_u8 (0, arg1_uint8x8_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1f32.c
+@@ -15,5 +15,5 @@
+ out_float32x2_t = vld1_f32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1p16.c
+@@ -15,5 +15,5 @@
+ out_poly16x4_t = vld1_p16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1p8.c
+@@ -15,5 +15,5 @@
+ out_poly8x8_t = vld1_p8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1s16.c
+@@ -15,5 +15,5 @@
+ out_int16x4_t = vld1_s16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1s32.c
+@@ -15,5 +15,5 @@
+ out_int32x2_t = vld1_s32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1s64.c
+@@ -15,5 +15,5 @@
+ out_int64x1_t = vld1_s64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1s8.c
+@@ -15,5 +15,5 @@
+ out_int8x8_t = vld1_s8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1u16.c
+@@ -15,5 +15,5 @@
+ out_uint16x4_t = vld1_u16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1u32.c
+@@ -15,5 +15,5 @@
+ out_uint32x2_t = vld1_u32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1u64.c
+@@ -15,5 +15,5 @@
+ out_uint64x1_t = vld1_u64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1u8.c
+@@ -15,5 +15,5 @@
+ out_uint8x8_t = vld1_u8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanef32.c
+@@ -16,5 +16,5 @@
+ out_float32x4x2_t = vld2q_lane_f32 (0, arg1_float32x4x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanep16.c
+@@ -16,5 +16,5 @@
+ out_poly16x8x2_t = vld2q_lane_p16 (0, arg1_poly16x8x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes16.c
+@@ -16,5 +16,5 @@
+ out_int16x8x2_t = vld2q_lane_s16 (0, arg1_int16x8x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes32.c
+@@ -16,5 +16,5 @@
+ out_int32x4x2_t = vld2q_lane_s32 (0, arg1_int32x4x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu16.c
+@@ -16,5 +16,5 @@
+ out_uint16x8x2_t = vld2q_lane_u16 (0, arg1_uint16x8x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu32.c
+@@ -16,5 +16,5 @@
+ out_uint32x4x2_t = vld2q_lane_u32 (0, arg1_uint32x4x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qf32.c
+@@ -15,6 +15,6 @@
+ out_float32x4x2_t = vld2q_f32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qp16.c
+@@ -15,6 +15,6 @@
+ out_poly16x8x2_t = vld2q_p16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qp8.c
+@@ -15,6 +15,6 @@
+ out_poly8x16x2_t = vld2q_p8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs16.c
+@@ -15,6 +15,6 @@
+ out_int16x8x2_t = vld2q_s16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs32.c
+@@ -15,6 +15,6 @@
+ out_int32x4x2_t = vld2q_s32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs8.c
+@@ -15,6 +15,6 @@
+ out_int8x16x2_t = vld2q_s8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu16.c
+@@ -15,6 +15,6 @@
+ out_uint16x8x2_t = vld2q_u16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu32.c
+@@ -15,6 +15,6 @@
+ out_uint32x4x2_t = vld2q_u32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu8.c
+@@ -15,6 +15,6 @@
+ out_uint8x16x2_t = vld2q_u8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupf32.c
+@@ -15,5 +15,5 @@
+ out_float32x2x2_t = vld2_dup_f32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupp16.c
+@@ -15,5 +15,5 @@
+ out_poly16x4x2_t = vld2_dup_p16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupp8.c
+@@ -15,5 +15,5 @@
+ out_poly8x8x2_t = vld2_dup_p8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups16.c
+@@ -15,5 +15,5 @@
+ out_int16x4x2_t = vld2_dup_s16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups32.c
+@@ -15,5 +15,5 @@
+ out_int32x2x2_t = vld2_dup_s32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups64.c
+@@ -15,5 +15,5 @@
+ out_int64x1x2_t = vld2_dup_s64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups8.c
+@@ -15,5 +15,5 @@
+ out_int8x8x2_t = vld2_dup_s8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu16.c
+@@ -15,5 +15,5 @@
+ out_uint16x4x2_t = vld2_dup_u16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu32.c
+@@ -15,5 +15,5 @@
+ out_uint32x2x2_t = vld2_dup_u32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu64.c
+@@ -15,5 +15,5 @@
+ out_uint64x1x2_t = vld2_dup_u64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu8.c
+@@ -15,5 +15,5 @@
+ out_uint8x8x2_t = vld2_dup_u8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanef32.c
+@@ -16,5 +16,5 @@
+ out_float32x2x2_t = vld2_lane_f32 (0, arg1_float32x2x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanep16.c
+@@ -16,5 +16,5 @@
+ out_poly16x4x2_t = vld2_lane_p16 (0, arg1_poly16x4x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanep8.c
+@@ -16,5 +16,5 @@
+ out_poly8x8x2_t = vld2_lane_p8 (0, arg1_poly8x8x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes16.c
+@@ -16,5 +16,5 @@
+ out_int16x4x2_t = vld2_lane_s16 (0, arg1_int16x4x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes32.c
+@@ -16,5 +16,5 @@
+ out_int32x2x2_t = vld2_lane_s32 (0, arg1_int32x2x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes8.c
+@@ -16,5 +16,5 @@
+ out_int8x8x2_t = vld2_lane_s8 (0, arg1_int8x8x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu16.c
+@@ -16,5 +16,5 @@
+ out_uint16x4x2_t = vld2_lane_u16 (0, arg1_uint16x4x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu32.c
+@@ -16,5 +16,5 @@
+ out_uint32x2x2_t = vld2_lane_u32 (0, arg1_uint32x2x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu8.c
+@@ -16,5 +16,5 @@
+ out_uint8x8x2_t = vld2_lane_u8 (0, arg1_uint8x8x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2f32.c
+@@ -15,5 +15,5 @@
+ out_float32x2x2_t = vld2_f32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2p16.c
+@@ -15,5 +15,5 @@
+ out_poly16x4x2_t = vld2_p16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2p8.c
+@@ -15,5 +15,5 @@
+ out_poly8x8x2_t = vld2_p8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2s16.c
+@@ -15,5 +15,5 @@
+ out_int16x4x2_t = vld2_s16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2s32.c
+@@ -15,5 +15,5 @@
+ out_int32x2x2_t = vld2_s32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2s64.c
+@@ -15,5 +15,5 @@
+ out_int64x1x2_t = vld2_s64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2s8.c
+@@ -15,5 +15,5 @@
+ out_int8x8x2_t = vld2_s8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2u16.c
+@@ -15,5 +15,5 @@
+ out_uint16x4x2_t = vld2_u16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2u32.c
+@@ -15,5 +15,5 @@
+ out_uint32x2x2_t = vld2_u32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2u64.c
+@@ -15,5 +15,5 @@
+ out_uint64x1x2_t = vld2_u64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2u8.c
+@@ -15,5 +15,5 @@
+ out_uint8x8x2_t = vld2_u8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanef32.c
+@@ -16,5 +16,5 @@
+ out_float32x4x3_t = vld3q_lane_f32 (0, arg1_float32x4x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanep16.c
+@@ -16,5 +16,5 @@
+ out_poly16x8x3_t = vld3q_lane_p16 (0, arg1_poly16x8x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes16.c
+@@ -16,5 +16,5 @@
+ out_int16x8x3_t = vld3q_lane_s16 (0, arg1_int16x8x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes32.c
+@@ -16,5 +16,5 @@
+ out_int32x4x3_t = vld3q_lane_s32 (0, arg1_int32x4x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu16.c
+@@ -16,5 +16,5 @@
+ out_uint16x8x3_t = vld3q_lane_u16 (0, arg1_uint16x8x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu32.c
+@@ -16,5 +16,5 @@
+ out_uint32x4x3_t = vld3q_lane_u32 (0, arg1_uint32x4x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qf32.c
+@@ -15,6 +15,6 @@
+ out_float32x4x3_t = vld3q_f32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qp16.c
+@@ -15,6 +15,6 @@
+ out_poly16x8x3_t = vld3q_p16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qp8.c
+@@ -15,6 +15,6 @@
+ out_poly8x16x3_t = vld3q_p8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs16.c
+@@ -15,6 +15,6 @@
+ out_int16x8x3_t = vld3q_s16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs32.c
+@@ -15,6 +15,6 @@
+ out_int32x4x3_t = vld3q_s32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs8.c
+@@ -15,6 +15,6 @@
+ out_int8x16x3_t = vld3q_s8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu16.c
+@@ -15,6 +15,6 @@
+ out_uint16x8x3_t = vld3q_u16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu32.c
+@@ -15,6 +15,6 @@
+ out_uint32x4x3_t = vld3q_u32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu8.c
+@@ -15,6 +15,6 @@
+ out_uint8x16x3_t = vld3q_u8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupf32.c
+@@ -15,5 +15,5 @@
+ out_float32x2x3_t = vld3_dup_f32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupp16.c
+@@ -15,5 +15,5 @@
+ out_poly16x4x3_t = vld3_dup_p16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupp8.c
+@@ -15,5 +15,5 @@
+ out_poly8x8x3_t = vld3_dup_p8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups16.c
+@@ -15,5 +15,5 @@
+ out_int16x4x3_t = vld3_dup_s16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups32.c
+@@ -15,5 +15,5 @@
+ out_int32x2x3_t = vld3_dup_s32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups64.c
+@@ -15,5 +15,5 @@
+ out_int64x1x3_t = vld3_dup_s64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups8.c
+@@ -15,5 +15,5 @@
+ out_int8x8x3_t = vld3_dup_s8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu16.c
+@@ -15,5 +15,5 @@
+ out_uint16x4x3_t = vld3_dup_u16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu32.c
+@@ -15,5 +15,5 @@
+ out_uint32x2x3_t = vld3_dup_u32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu64.c
+@@ -15,5 +15,5 @@
+ out_uint64x1x3_t = vld3_dup_u64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu8.c
+@@ -15,5 +15,5 @@
+ out_uint8x8x3_t = vld3_dup_u8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanef32.c
+@@ -16,5 +16,5 @@
+ out_float32x2x3_t = vld3_lane_f32 (0, arg1_float32x2x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanep16.c
+@@ -16,5 +16,5 @@
+ out_poly16x4x3_t = vld3_lane_p16 (0, arg1_poly16x4x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanep8.c
+@@ -16,5 +16,5 @@
+ out_poly8x8x3_t = vld3_lane_p8 (0, arg1_poly8x8x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes16.c
+@@ -16,5 +16,5 @@
+ out_int16x4x3_t = vld3_lane_s16 (0, arg1_int16x4x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes32.c
+@@ -16,5 +16,5 @@
+ out_int32x2x3_t = vld3_lane_s32 (0, arg1_int32x2x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes8.c
+@@ -16,5 +16,5 @@
+ out_int8x8x3_t = vld3_lane_s8 (0, arg1_int8x8x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu16.c
+@@ -16,5 +16,5 @@
+ out_uint16x4x3_t = vld3_lane_u16 (0, arg1_uint16x4x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu32.c
+@@ -16,5 +16,5 @@
+ out_uint32x2x3_t = vld3_lane_u32 (0, arg1_uint32x2x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu8.c
+@@ -16,5 +16,5 @@
+ out_uint8x8x3_t = vld3_lane_u8 (0, arg1_uint8x8x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3f32.c
+@@ -15,5 +15,5 @@
+ out_float32x2x3_t = vld3_f32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3p16.c
+@@ -15,5 +15,5 @@
+ out_poly16x4x3_t = vld3_p16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3p8.c
+@@ -15,5 +15,5 @@
+ out_poly8x8x3_t = vld3_p8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3s16.c
+@@ -15,5 +15,5 @@
+ out_int16x4x3_t = vld3_s16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3s32.c
+@@ -15,5 +15,5 @@
+ out_int32x2x3_t = vld3_s32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3s64.c
+@@ -15,5 +15,5 @@
+ out_int64x1x3_t = vld3_s64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3s8.c
+@@ -15,5 +15,5 @@
+ out_int8x8x3_t = vld3_s8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3u16.c
+@@ -15,5 +15,5 @@
+ out_uint16x4x3_t = vld3_u16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3u32.c
+@@ -15,5 +15,5 @@
+ out_uint32x2x3_t = vld3_u32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3u64.c
+@@ -15,5 +15,5 @@
+ out_uint64x1x3_t = vld3_u64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3u8.c
+@@ -15,5 +15,5 @@
+ out_uint8x8x3_t = vld3_u8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanef32.c
+@@ -16,5 +16,5 @@
+ out_float32x4x4_t = vld4q_lane_f32 (0, arg1_float32x4x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanep16.c
+@@ -16,5 +16,5 @@
+ out_poly16x8x4_t = vld4q_lane_p16 (0, arg1_poly16x8x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes16.c
+@@ -16,5 +16,5 @@
+ out_int16x8x4_t = vld4q_lane_s16 (0, arg1_int16x8x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes32.c
+@@ -16,5 +16,5 @@
+ out_int32x4x4_t = vld4q_lane_s32 (0, arg1_int32x4x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu16.c
+@@ -16,5 +16,5 @@
+ out_uint16x8x4_t = vld4q_lane_u16 (0, arg1_uint16x8x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu32.c
+@@ -16,5 +16,5 @@
+ out_uint32x4x4_t = vld4q_lane_u32 (0, arg1_uint32x4x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qf32.c
+@@ -15,6 +15,6 @@
+ out_float32x4x4_t = vld4q_f32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qp16.c
+@@ -15,6 +15,6 @@
+ out_poly16x8x4_t = vld4q_p16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qp8.c
+@@ -15,6 +15,6 @@
+ out_poly8x16x4_t = vld4q_p8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs16.c
+@@ -15,6 +15,6 @@
+ out_int16x8x4_t = vld4q_s16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs32.c
+@@ -15,6 +15,6 @@
+ out_int32x4x4_t = vld4q_s32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs8.c
+@@ -15,6 +15,6 @@
+ out_int8x16x4_t = vld4q_s8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu16.c
+@@ -15,6 +15,6 @@
+ out_uint16x8x4_t = vld4q_u16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu32.c
+@@ -15,6 +15,6 @@
+ out_uint32x4x4_t = vld4q_u32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu8.c
+@@ -15,6 +15,6 @@
+ out_uint8x16x4_t = vld4q_u8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupf32.c
+@@ -15,5 +15,5 @@
+ out_float32x2x4_t = vld4_dup_f32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupp16.c
+@@ -15,5 +15,5 @@
+ out_poly16x4x4_t = vld4_dup_p16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupp8.c
+@@ -15,5 +15,5 @@
+ out_poly8x8x4_t = vld4_dup_p8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups16.c
+@@ -15,5 +15,5 @@
+ out_int16x4x4_t = vld4_dup_s16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups32.c
+@@ -15,5 +15,5 @@
+ out_int32x2x4_t = vld4_dup_s32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups64.c
+@@ -15,5 +15,5 @@
+ out_int64x1x4_t = vld4_dup_s64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups8.c
+@@ -15,5 +15,5 @@
+ out_int8x8x4_t = vld4_dup_s8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu16.c
+@@ -15,5 +15,5 @@
+ out_uint16x4x4_t = vld4_dup_u16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu32.c
+@@ -15,5 +15,5 @@
+ out_uint32x2x4_t = vld4_dup_u32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu64.c
+@@ -15,5 +15,5 @@
+ out_uint64x1x4_t = vld4_dup_u64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu8.c
+@@ -15,5 +15,5 @@
+ out_uint8x8x4_t = vld4_dup_u8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\\\]-\[dD\]\[0-9\]+\\\[\\\])|(\[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\], \[dD\]\[0-9\]+\\\[\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanef32.c
+@@ -16,5 +16,5 @@
+ out_float32x2x4_t = vld4_lane_f32 (0, arg1_float32x2x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanep16.c
+@@ -16,5 +16,5 @@
+ out_poly16x4x4_t = vld4_lane_p16 (0, arg1_poly16x4x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanep8.c
+@@ -16,5 +16,5 @@
+ out_poly8x8x4_t = vld4_lane_p8 (0, arg1_poly8x8x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes16.c
+@@ -16,5 +16,5 @@
+ out_int16x4x4_t = vld4_lane_s16 (0, arg1_int16x4x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes32.c
+@@ -16,5 +16,5 @@
+ out_int32x2x4_t = vld4_lane_s32 (0, arg1_int32x2x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes8.c
+@@ -16,5 +16,5 @@
+ out_int8x8x4_t = vld4_lane_s8 (0, arg1_int8x8x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu16.c
+@@ -16,5 +16,5 @@
+ out_uint16x4x4_t = vld4_lane_u16 (0, arg1_uint16x4x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu32.c
+@@ -16,5 +16,5 @@
+ out_uint32x2x4_t = vld4_lane_u32 (0, arg1_uint32x2x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu8.c
+@@ -16,5 +16,5 @@
+ out_uint8x8x4_t = vld4_lane_u8 (0, arg1_uint8x8x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4f32.c
+@@ -15,5 +15,5 @@
+ out_float32x2x4_t = vld4_f32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4p16.c
+@@ -15,5 +15,5 @@
+ out_poly16x4x4_t = vld4_p16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4p8.c
+@@ -15,5 +15,5 @@
+ out_poly8x8x4_t = vld4_p8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4s16.c
+@@ -15,5 +15,5 @@
+ out_int16x4x4_t = vld4_s16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4s32.c
+@@ -15,5 +15,5 @@
+ out_int32x2x4_t = vld4_s32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4s64.c
+@@ -15,5 +15,5 @@
+ out_int64x1x4_t = vld4_s64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4s8.c
+@@ -15,5 +15,5 @@
+ out_int8x8x4_t = vld4_s8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4u16.c
+@@ -15,5 +15,5 @@
+ out_uint16x4x4_t = vld4_u16 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4u32.c
+@@ -15,5 +15,5 @@
+ out_uint32x2x4_t = vld4_u32 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4u64.c
+@@ -15,5 +15,5 @@
+ out_uint64x1x4_t = vld4_u64 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4u8.c
+@@ -15,5 +15,5 @@
+ out_uint8x8x4_t = vld4_u8 (0);
+ }
+
+-/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vld4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanef32.c
+@@ -16,5 +16,5 @@
+ vst1q_lane_f32 (arg0_float32_t, arg1_float32x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep16.c
+@@ -16,5 +16,5 @@
+ vst1q_lane_p16 (arg0_poly16_t, arg1_poly16x8_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep8.c
+@@ -16,5 +16,5 @@
+ vst1q_lane_p8 (arg0_poly8_t, arg1_poly8x16_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes16.c
+@@ -16,5 +16,5 @@
+ vst1q_lane_s16 (arg0_int16_t, arg1_int16x8_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes32.c
+@@ -16,5 +16,5 @@
+ vst1q_lane_s32 (arg0_int32_t, arg1_int32x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes64.c
+@@ -16,5 +16,5 @@
+ vst1q_lane_s64 (arg0_int64_t, arg1_int64x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes8.c
+@@ -16,5 +16,5 @@
+ vst1q_lane_s8 (arg0_int8_t, arg1_int8x16_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu16.c
+@@ -16,5 +16,5 @@
+ vst1q_lane_u16 (arg0_uint16_t, arg1_uint16x8_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu32.c
+@@ -16,5 +16,5 @@
+ vst1q_lane_u32 (arg0_uint32_t, arg1_uint32x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64.c
+@@ -16,5 +16,5 @@
+ vst1q_lane_u64 (arg0_uint64_t, arg1_uint64x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu8.c
+@@ -16,5 +16,5 @@
+ vst1q_lane_u8 (arg0_uint8_t, arg1_uint8x16_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qf32.c
+@@ -16,5 +16,5 @@
+ vst1q_f32 (arg0_float32_t, arg1_float32x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qp16.c
+@@ -16,5 +16,5 @@
+ vst1q_p16 (arg0_poly16_t, arg1_poly16x8_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qp8.c
+@@ -16,5 +16,5 @@
+ vst1q_p8 (arg0_poly8_t, arg1_poly8x16_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs16.c
+@@ -16,5 +16,5 @@
+ vst1q_s16 (arg0_int16_t, arg1_int16x8_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs32.c
+@@ -16,5 +16,5 @@
+ vst1q_s32 (arg0_int32_t, arg1_int32x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs64.c
+@@ -16,5 +16,5 @@
+ vst1q_s64 (arg0_int64_t, arg1_int64x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs8.c
+@@ -16,5 +16,5 @@
+ vst1q_s8 (arg0_int8_t, arg1_int8x16_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu16.c
+@@ -16,5 +16,5 @@
+ vst1q_u16 (arg0_uint16_t, arg1_uint16x8_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu32.c
+@@ -16,5 +16,5 @@
+ vst1q_u32 (arg0_uint32_t, arg1_uint32x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu64.c
+@@ -16,5 +16,5 @@
+ vst1q_u64 (arg0_uint64_t, arg1_uint64x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu8.c
+@@ -16,5 +16,5 @@
+ vst1q_u8 (arg0_uint8_t, arg1_uint8x16_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanef32.c
+@@ -16,5 +16,5 @@
+ vst1_lane_f32 (arg0_float32_t, arg1_float32x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanep16.c
+@@ -16,5 +16,5 @@
+ vst1_lane_p16 (arg0_poly16_t, arg1_poly16x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanep8.c
+@@ -16,5 +16,5 @@
+ vst1_lane_p8 (arg0_poly8_t, arg1_poly8x8_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes16.c
+@@ -16,5 +16,5 @@
+ vst1_lane_s16 (arg0_int16_t, arg1_int16x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes32.c
+@@ -16,5 +16,5 @@
+ vst1_lane_s32 (arg0_int32_t, arg1_int32x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes64.c
+@@ -16,5 +16,5 @@
+ vst1_lane_s64 (arg0_int64_t, arg1_int64x1_t, 0);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes8.c
+@@ -16,5 +16,5 @@
+ vst1_lane_s8 (arg0_int8_t, arg1_int8x8_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu16.c
+@@ -16,5 +16,5 @@
+ vst1_lane_u16 (arg0_uint16_t, arg1_uint16x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu32.c
+@@ -16,5 +16,5 @@
+ vst1_lane_u32 (arg0_uint32_t, arg1_uint32x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu64.c
+@@ -16,5 +16,5 @@
+ vst1_lane_u64 (arg0_uint64_t, arg1_uint64x1_t, 0);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu8.c
+@@ -16,5 +16,5 @@
+ vst1_lane_u8 (arg0_uint8_t, arg1_uint8x8_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]\\\})|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1f32.c
+@@ -16,5 +16,5 @@
+ vst1_f32 (arg0_float32_t, arg1_float32x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1p16.c
+@@ -16,5 +16,5 @@
+ vst1_p16 (arg0_poly16_t, arg1_poly16x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1p8.c
+@@ -16,5 +16,5 @@
+ vst1_p8 (arg0_poly8_t, arg1_poly8x8_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1s16.c
+@@ -16,5 +16,5 @@
+ vst1_s16 (arg0_int16_t, arg1_int16x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1s32.c
+@@ -16,5 +16,5 @@
+ vst1_s32 (arg0_int32_t, arg1_int32x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1s64.c
+@@ -16,5 +16,5 @@
+ vst1_s64 (arg0_int64_t, arg1_int64x1_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1s8.c
+@@ -16,5 +16,5 @@
+ vst1_s8 (arg0_int8_t, arg1_int8x8_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1u16.c
+@@ -16,5 +16,5 @@
+ vst1_u16 (arg0_uint16_t, arg1_uint16x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.16\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1u32.c
+@@ -16,5 +16,5 @@
+ vst1_u32 (arg0_uint32_t, arg1_uint32x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.32\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1u64.c
+@@ -16,5 +16,5 @@
+ vst1_u64 (arg0_uint64_t, arg1_uint64x1_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.64\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1u8.c
+@@ -16,5 +16,5 @@
+ vst1_u8 (arg0_uint8_t, arg1_uint8x8_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.8\[ \]+((\\\{\[dD\]\[0-9\]+\\\})|(\[dD\]\[0-9\]+)), \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanef32.c
+@@ -16,5 +16,5 @@
+ vst2q_lane_f32 (arg0_float32_t, arg1_float32x4x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanep16.c
+@@ -16,5 +16,5 @@
+ vst2q_lane_p16 (arg0_poly16_t, arg1_poly16x8x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes16.c
+@@ -16,5 +16,5 @@
+ vst2q_lane_s16 (arg0_int16_t, arg1_int16x8x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes32.c
+@@ -16,5 +16,5 @@
+ vst2q_lane_s32 (arg0_int32_t, arg1_int32x4x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu16.c
+@@ -16,5 +16,5 @@
+ vst2q_lane_u16 (arg0_uint16_t, arg1_uint16x8x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu32.c
+@@ -16,5 +16,5 @@
+ vst2q_lane_u32 (arg0_uint32_t, arg1_uint32x4x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qf32.c
+@@ -16,6 +16,6 @@
+ vst2q_f32 (arg0_float32_t, arg1_float32x4x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qp16.c
+@@ -16,6 +16,6 @@
+ vst2q_p16 (arg0_poly16_t, arg1_poly16x8x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qp8.c
+@@ -16,6 +16,6 @@
+ vst2q_p8 (arg0_poly8_t, arg1_poly8x16x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs16.c
+@@ -16,6 +16,6 @@
+ vst2q_s16 (arg0_int16_t, arg1_int16x8x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs32.c
+@@ -16,6 +16,6 @@
+ vst2q_s32 (arg0_int32_t, arg1_int32x4x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs8.c
+@@ -16,6 +16,6 @@
+ vst2q_s8 (arg0_int8_t, arg1_int8x16x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu16.c
+@@ -16,6 +16,6 @@
+ vst2q_u16 (arg0_uint16_t, arg1_uint16x8x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu32.c
+@@ -16,6 +16,6 @@
+ vst2q_u32 (arg0_uint32_t, arg1_uint32x4x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu8.c
+@@ -16,6 +16,6 @@
+ vst2q_u8 (arg0_uint8_t, arg1_uint8x16x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanef32.c
+@@ -16,5 +16,5 @@
+ vst2_lane_f32 (arg0_float32_t, arg1_float32x2x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanep16.c
+@@ -16,5 +16,5 @@
+ vst2_lane_p16 (arg0_poly16_t, arg1_poly16x4x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanep8.c
+@@ -16,5 +16,5 @@
+ vst2_lane_p8 (arg0_poly8_t, arg1_poly8x8x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes16.c
+@@ -16,5 +16,5 @@
+ vst2_lane_s16 (arg0_int16_t, arg1_int16x4x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes32.c
+@@ -16,5 +16,5 @@
+ vst2_lane_s32 (arg0_int32_t, arg1_int32x2x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes8.c
+@@ -16,5 +16,5 @@
+ vst2_lane_s8 (arg0_int8_t, arg1_int8x8x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu16.c
+@@ -16,5 +16,5 @@
+ vst2_lane_u16 (arg0_uint16_t, arg1_uint16x4x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu32.c
+@@ -16,5 +16,5 @@
+ vst2_lane_u32 (arg0_uint32_t, arg1_uint32x2x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu8.c
+@@ -16,5 +16,5 @@
+ vst2_lane_u8 (arg0_uint8_t, arg1_uint8x8x2_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2f32.c
+@@ -16,5 +16,5 @@
+ vst2_f32 (arg0_float32_t, arg1_float32x2x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2p16.c
+@@ -16,5 +16,5 @@
+ vst2_p16 (arg0_poly16_t, arg1_poly16x4x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2p8.c
+@@ -16,5 +16,5 @@
+ vst2_p8 (arg0_poly8_t, arg1_poly8x8x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2s16.c
+@@ -16,5 +16,5 @@
+ vst2_s16 (arg0_int16_t, arg1_int16x4x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2s32.c
+@@ -16,5 +16,5 @@
+ vst2_s32 (arg0_int32_t, arg1_int32x2x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2s64.c
+@@ -16,5 +16,5 @@
+ vst2_s64 (arg0_int64_t, arg1_int64x1x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2s8.c
+@@ -16,5 +16,5 @@
+ vst2_s8 (arg0_int8_t, arg1_int8x8x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2u16.c
+@@ -16,5 +16,5 @@
+ vst2_u16 (arg0_uint16_t, arg1_uint16x4x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2u32.c
+@@ -16,5 +16,5 @@
+ vst2_u32 (arg0_uint32_t, arg1_uint32x2x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2u64.c
+@@ -16,5 +16,5 @@
+ vst2_u64 (arg0_uint64_t, arg1_uint64x1x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2u8.c
+@@ -16,5 +16,5 @@
+ vst2_u8 (arg0_uint8_t, arg1_uint8x8x2_t);
+ }
+
+-/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst2\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanef32.c
+@@ -16,5 +16,5 @@
+ vst3q_lane_f32 (arg0_float32_t, arg1_float32x4x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanep16.c
+@@ -16,5 +16,5 @@
+ vst3q_lane_p16 (arg0_poly16_t, arg1_poly16x8x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes16.c
+@@ -16,5 +16,5 @@
+ vst3q_lane_s16 (arg0_int16_t, arg1_int16x8x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes32.c
+@@ -16,5 +16,5 @@
+ vst3q_lane_s32 (arg0_int32_t, arg1_int32x4x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu16.c
+@@ -16,5 +16,5 @@
+ vst3q_lane_u16 (arg0_uint16_t, arg1_uint16x8x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu32.c
+@@ -16,5 +16,5 @@
+ vst3q_lane_u32 (arg0_uint32_t, arg1_uint32x4x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qf32.c
+@@ -16,6 +16,6 @@
+ vst3q_f32 (arg0_float32_t, arg1_float32x4x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qp16.c
+@@ -16,6 +16,6 @@
+ vst3q_p16 (arg0_poly16_t, arg1_poly16x8x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qp8.c
+@@ -16,6 +16,6 @@
+ vst3q_p8 (arg0_poly8_t, arg1_poly8x16x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs16.c
+@@ -16,6 +16,6 @@
+ vst3q_s16 (arg0_int16_t, arg1_int16x8x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs32.c
+@@ -16,6 +16,6 @@
+ vst3q_s32 (arg0_int32_t, arg1_int32x4x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs8.c
+@@ -16,6 +16,6 @@
+ vst3q_s8 (arg0_int8_t, arg1_int8x16x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu16.c
+@@ -16,6 +16,6 @@
+ vst3q_u16 (arg0_uint16_t, arg1_uint16x8x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu32.c
+@@ -16,6 +16,6 @@
+ vst3q_u32 (arg0_uint32_t, arg1_uint32x4x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu8.c
+@@ -16,6 +16,6 @@
+ vst3q_u8 (arg0_uint8_t, arg1_uint8x16x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanef32.c
+@@ -16,5 +16,5 @@
+ vst3_lane_f32 (arg0_float32_t, arg1_float32x2x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanep16.c
+@@ -16,5 +16,5 @@
+ vst3_lane_p16 (arg0_poly16_t, arg1_poly16x4x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanep8.c
+@@ -16,5 +16,5 @@
+ vst3_lane_p8 (arg0_poly8_t, arg1_poly8x8x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes16.c
+@@ -16,5 +16,5 @@
+ vst3_lane_s16 (arg0_int16_t, arg1_int16x4x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes32.c
+@@ -16,5 +16,5 @@
+ vst3_lane_s32 (arg0_int32_t, arg1_int32x2x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes8.c
+@@ -16,5 +16,5 @@
+ vst3_lane_s8 (arg0_int8_t, arg1_int8x8x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu16.c
+@@ -16,5 +16,5 @@
+ vst3_lane_u16 (arg0_uint16_t, arg1_uint16x4x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu32.c
+@@ -16,5 +16,5 @@
+ vst3_lane_u32 (arg0_uint32_t, arg1_uint32x2x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu8.c
+@@ -16,5 +16,5 @@
+ vst3_lane_u8 (arg0_uint8_t, arg1_uint8x8x3_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3f32.c
+@@ -16,5 +16,5 @@
+ vst3_f32 (arg0_float32_t, arg1_float32x2x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3p16.c
+@@ -16,5 +16,5 @@
+ vst3_p16 (arg0_poly16_t, arg1_poly16x4x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3p8.c
+@@ -16,5 +16,5 @@
+ vst3_p8 (arg0_poly8_t, arg1_poly8x8x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3s16.c
+@@ -16,5 +16,5 @@
+ vst3_s16 (arg0_int16_t, arg1_int16x4x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3s32.c
+@@ -16,5 +16,5 @@
+ vst3_s32 (arg0_int32_t, arg1_int32x2x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3s64.c
+@@ -16,5 +16,5 @@
+ vst3_s64 (arg0_int64_t, arg1_int64x1x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3s8.c
+@@ -16,5 +16,5 @@
+ vst3_s8 (arg0_int8_t, arg1_int8x8x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3u16.c
+@@ -16,5 +16,5 @@
+ vst3_u16 (arg0_uint16_t, arg1_uint16x4x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3u32.c
+@@ -16,5 +16,5 @@
+ vst3_u32 (arg0_uint32_t, arg1_uint32x2x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3u64.c
+@@ -16,5 +16,5 @@
+ vst3_u64 (arg0_uint64_t, arg1_uint64x1x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3u8.c
+@@ -16,5 +16,5 @@
+ vst3_u8 (arg0_uint8_t, arg1_uint8x8x3_t);
+ }
+
+-/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst3\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanef32.c
+@@ -16,5 +16,5 @@
+ vst4q_lane_f32 (arg0_float32_t, arg1_float32x4x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanep16.c
+@@ -16,5 +16,5 @@
+ vst4q_lane_p16 (arg0_poly16_t, arg1_poly16x8x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes16.c
+@@ -16,5 +16,5 @@
+ vst4q_lane_s16 (arg0_int16_t, arg1_int16x8x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes32.c
+@@ -16,5 +16,5 @@
+ vst4q_lane_s32 (arg0_int32_t, arg1_int32x4x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu16.c
+@@ -16,5 +16,5 @@
+ vst4q_lane_u16 (arg0_uint16_t, arg1_uint16x8x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu32.c
+@@ -16,5 +16,5 @@
+ vst4q_lane_u32 (arg0_uint32_t, arg1_uint32x4x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qf32.c
+@@ -16,6 +16,6 @@
+ vst4q_f32 (arg0_float32_t, arg1_float32x4x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qp16.c
+@@ -16,6 +16,6 @@
+ vst4q_p16 (arg0_poly16_t, arg1_poly16x8x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qp8.c
+@@ -16,6 +16,6 @@
+ vst4q_p8 (arg0_poly8_t, arg1_poly8x16x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs16.c
+@@ -16,6 +16,6 @@
+ vst4q_s16 (arg0_int16_t, arg1_int16x8x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs32.c
+@@ -16,6 +16,6 @@
+ vst4q_s32 (arg0_int32_t, arg1_int32x4x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs8.c
+@@ -16,6 +16,6 @@
+ vst4q_s8 (arg0_int8_t, arg1_int8x16x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu16.c
+@@ -16,6 +16,6 @@
+ vst4q_u16 (arg0_uint16_t, arg1_uint16x8x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu32.c
+@@ -16,6 +16,6 @@
+ vst4q_u32 (arg0_uint32_t, arg1_uint32x4x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu8.c
+@@ -16,6 +16,6 @@
+ vst4q_u8 (arg0_uint8_t, arg1_uint8x16x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanef32.c
+@@ -16,5 +16,5 @@
+ vst4_lane_f32 (arg0_float32_t, arg1_float32x2x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanep16.c
+@@ -16,5 +16,5 @@
+ vst4_lane_p16 (arg0_poly16_t, arg1_poly16x4x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanep8.c
+@@ -16,5 +16,5 @@
+ vst4_lane_p8 (arg0_poly8_t, arg1_poly8x8x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes16.c
+@@ -16,5 +16,5 @@
+ vst4_lane_s16 (arg0_int16_t, arg1_int16x4x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes32.c
+@@ -16,5 +16,5 @@
+ vst4_lane_s32 (arg0_int32_t, arg1_int32x2x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes8.c
+@@ -16,5 +16,5 @@
+ vst4_lane_s8 (arg0_int8_t, arg1_int8x8x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu16.c
+@@ -16,5 +16,5 @@
+ vst4_lane_u16 (arg0_uint16_t, arg1_uint16x4x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu32.c
+@@ -16,5 +16,5 @@
+ vst4_lane_u32 (arg0_uint32_t, arg1_uint32x2x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu8.c
+@@ -16,5 +16,5 @@
+ vst4_lane_u8 (arg0_uint8_t, arg1_uint8x8x4_t, 1);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+\\\[\[0-9\]+\\\]-\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])|(\[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\], \[dD\]\[0-9\]+\\\[\[0-9\]+\\\]))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4f32.c
+@@ -16,5 +16,5 @@
+ vst4_f32 (arg0_float32_t, arg1_float32x2x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4p16.c
+@@ -16,5 +16,5 @@
+ vst4_p16 (arg0_poly16_t, arg1_poly16x4x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4p8.c
+@@ -16,5 +16,5 @@
+ vst4_p8 (arg0_poly8_t, arg1_poly8x8x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4s16.c
+@@ -16,5 +16,5 @@
+ vst4_s16 (arg0_int16_t, arg1_int16x4x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4s32.c
+@@ -16,5 +16,5 @@
+ vst4_s32 (arg0_int32_t, arg1_int32x2x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4s64.c
+@@ -16,5 +16,5 @@
+ vst4_s64 (arg0_int64_t, arg1_int64x1x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4s8.c
+@@ -16,5 +16,5 @@
+ vst4_s8 (arg0_int8_t, arg1_int8x8x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4u16.c
+@@ -16,5 +16,5 @@
+ vst4_u16 (arg0_uint16_t, arg1_uint16x4x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.16\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4u32.c
+@@ -16,5 +16,5 @@
+ vst4_u32 (arg0_uint32_t, arg1_uint32x2x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.32\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4u64.c
+@@ -16,5 +16,5 @@
+ vst4_u64 (arg0_uint64_t, arg1_uint64x1x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst1\.64\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4u8.c
+@@ -16,5 +16,5 @@
+ vst4_u8 (arg0_uint8_t, arg1_uint8x8x4_t);
+ }
+
+-/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vst4\.8\[ \]+\\\{((\[dD\]\[0-9\]+-\[dD\]\[0-9\]+)|(\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+))\\\}, \\\[\[rR\]\[0-9\]+\(:\[0-9\]+\)?\\\]!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-combine-sub-abs-into-vabd.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-combine-sub-abs-into-vabd.c
+@@ -0,0 +1,50 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2 -funsafe-math-optimizations" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++float32x2_t f_sub_abs_to_vabd_32()
++{
++ float32x2_t val1 = vdup_n_f32 (10);
++ float32x2_t val2 = vdup_n_f32 (30);
++ float32x2_t sres = vsub_f32(val1, val2);
++ float32x2_t res = vabs_f32 (sres);
++
++ return res;
++}
++/* { dg-final { scan-assembler "vabd\.f32" } }*/
++
++#include <arm_neon.h>
++int8x8_t sub_abs_to_vabd_8()
++{
++ int8x8_t val1 = vdup_n_s8 (10);
++ int8x8_t val2 = vdup_n_s8 (30);
++ int8x8_t sres = vsub_s8(val1, val2);
++ int8x8_t res = vabs_s8 (sres);
++
++ return res;
++}
++/* { dg-final { scan-assembler "vabd\.s8" } }*/
++
++int16x4_t sub_abs_to_vabd_16()
++{
++ int16x4_t val1 = vdup_n_s16 (10);
++ int16x4_t val2 = vdup_n_s16 (30);
++ int16x4_t sres = vsub_s16(val1, val2);
++ int16x4_t res = vabs_s16 (sres);
++
++ return res;
++}
++/* { dg-final { scan-assembler "vabd\.s16" } }*/
++
++int32x2_t sub_abs_to_vabd_32()
++{
++ int32x2_t val1 = vdup_n_s32 (10);
++ int32x2_t val2 = vdup_n_s32 (30);
++ int32x2_t sres = vsub_s32(val1, val2);
++ int32x2_t res = vabs_s32 (sres);
++
++ return res;
++}
++/* { dg-final { scan-assembler "vabd\.s32" } }*/
+--- a/src/gcc/testsuite/gcc.target/arm/neon-modes-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-modes-2.c
+@@ -0,0 +1,24 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O1" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++
++#define SETUP(A) x##A = vld3_u32 (ptr + A * 0x20)
++#define MODIFY(A) x##A = vld3_lane_u32 (ptr + A * 0x20 + 0x10, x##A, 1)
++#define STORE(A) vst3_u32 (ptr + A * 0x20, x##A)
++
++#define MANY(A) A (0), A (1), A (2), A (3), A (4), A (5)
++
++void
++bar (uint32_t *ptr, int y)
++{
++ uint32x2x3_t MANY (SETUP);
++ int *x = __builtin_alloca (y);
++ int z[0x1000];
++ foo (x, z);
++ MANY (MODIFY);
++ foo (x, z);
++ MANY (STORE);
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-modes-3.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-modes-3.c
+@@ -0,0 +1,61 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++void f1 (volatile float32x4_t *dest, volatile float32x4x4_t *src, int n)
++{
++ float32x4x4_t a5, a6, a7, a8, a9;
++ int i;
++
++ a5 = *src;
++ a6 = *src;
++ a7 = *src;
++ a8 = *src;
++ a9 = *src;
++ while (n--)
++ {
++ for (i = 0; i < 8; i++)
++ {
++ float32x4x4_t a0, a1, a2, a3, a4;
++
++ a0 = *src;
++ a1 = *src;
++ a2 = *src;
++ a3 = *src;
++ a4 = *src;
++ *src = a0;
++ *dest = a0.val[0];
++ *dest = a0.val[3];
++ *src = a1;
++ *dest = a1.val[0];
++ *dest = a1.val[3];
++ *src = a2;
++ *dest = a2.val[0];
++ *dest = a2.val[3];
++ *src = a3;
++ *dest = a3.val[0];
++ *dest = a3.val[3];
++ *src = a4;
++ *dest = a4.val[0];
++ *dest = a4.val[3];
++ }
++ *src = a5;
++ *dest = a5.val[0];
++ *dest = a5.val[3];
++ *src = a6;
++ *dest = a6.val[0];
++ *dest = a6.val[3];
++ *src = a7;
++ *dest = a7.val[0];
++ *dest = a7.val[3];
++ *src = a8;
++ *dest = a8.val[0];
++ *dest = a8.val[3];
++ *src = a9;
++ *dest = a9.val[0];
++ *dest = a9.val[3];
++ }
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vld3-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vld3-1.c
+@@ -0,0 +1,27 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++
++uint32_t buffer[12];
++
++void __attribute__((noinline))
++foo (uint32_t *a)
++{
++ uint32x4x3_t x;
++
++ x = vld3q_u32 (a);
++ x.val[0] = vaddq_u32 (x.val[0], x.val[1]);
++ vst3q_u32 (a, x);
++}
++
++int
++main (void)
++{
++ buffer[0] = 1;
++ buffer[1] = 2;
++ foo (buffer);
++ return buffer[0] != 3;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vlshr-imm-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vlshr-imm-1.c
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2 -mfpu=neon -mfloat-abi=softfp -ftree-vectorize" } */
++/* { dg-final { scan-assembler "vshr\.u32.*#3" } } */
++
++/* Verify that VSHR immediate is used. */
++void f1(int n, unsigned int x[], unsigned int y[]) {
++ int i;
++ for (i = 0; i < n; ++i)
++ y[i] = x[i] >> 3;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vorn-vbic.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vorn-vbic.c
+@@ -0,0 +1,20 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2 -ftree-vectorize" } */
++/* { dg-add-options arm_neon } */
++
++void bor (int *__restrict__ c, int *__restrict__ a, int *__restrict__ b)
++{
++ int i;
++ for (i = 0; i < 9; i++)
++ c[i] = b[i] | (~a[i]);
++}
++void bic (int *__restrict__ c, int *__restrict__ a, int *__restrict__ b)
++{
++ int i;
++ for (i = 0; i < 9; i++)
++ c[i] = b[i] & (~a[i]);
++}
++
++/* { dg-final { scan-assembler "vorn\\t" } } */
++/* { dg-final { scan-assembler "vbic\\t" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vshl-imm-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vshl-imm-1.c
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2 -mfpu=neon -mfloat-abi=softfp -ftree-vectorize" } */
++/* { dg-final { scan-assembler "vshl\.i32.*#3" } } */
++
++/* Verify that VSHR immediate is used. */
++void f1(int n, int x[], int y[]) {
++ int i;
++ for (i = 0; i < n; ++i)
++ y[i] = x[i] << 3;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vshr-imm-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vshr-imm-1.c
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2 -mfpu=neon -mfloat-abi=softfp -ftree-vectorize" } */
++/* { dg-final { scan-assembler "vshr\.s32.*#3" } } */
++
++/* Verify that VSHR immediate is used. */
++void f1(int n, int x[], int y[]) {
++ int i;
++ for (i = 0; i < n; ++i)
++ y[i] = x[i] >> 3;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vst3-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vst3-1.c
+@@ -0,0 +1,25 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++
++uint32_t buffer[64];
++
++void __attribute__((noinline))
++foo (uint32_t *a)
++{
++ uint32x4x3_t x;
++
++ x = vld3q_u32 (a);
++ a[35] = 1;
++ vst3q_lane_u32 (a + 32, x, 1);
++}
++
++int
++main (void)
++{
++ foo (buffer);
++ return buffer[35] != 1;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/no-wmla-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/no-wmla-1.c
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++int
++foo (int a, short b, short c)
++{
++ int bc = b * c;
++ return a + (short)bc;
++}
++
++/* { dg-final { scan-assembler "mul" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/pr46329.c
++++ b/src/gcc/testsuite/gcc.target/arm/pr46329.c
+@@ -0,0 +1,9 @@
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++int __attribute__ ((vector_size (32))) x;
++void
++foo (void)
++{
++ x <<= x;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/pr48183.c
++++ b/src/gcc/testsuite/gcc.target/arm/pr48183.c
+@@ -0,0 +1,25 @@
++/* testsuite/gcc.target/arm/pr48183.c */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O -g" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++void move_16bit_to_32bit (int32_t *dst, const short *src, unsigned n)
++{
++ unsigned i;
++ int16x4x2_t input;
++ int32x4x2_t mid;
++ int32x4x2_t output;
++
++ for (i = 0; i < n/2; i += 8) {
++ input = vld2_s16(src + i);
++ mid.val[0] = vmovl_s16(input.val[0]);
++ mid.val[1] = vmovl_s16(input.val[1]);
++ output.val[0] = vshlq_n_s32(mid.val[0], 8);
++ output.val[1] = vshlq_n_s32(mid.val[1], 8);
++ vst2q_s32((int32_t *)dst + i, output);
++ }
++}
+--- a/src/gcc/testsuite/gcc.target/arm/pr49641.c
++++ b/src/gcc/testsuite/gcc.target/arm/pr49641.c
+@@ -0,0 +1,18 @@
++/* { dg-do compile } */
++/* { dg-options "-mthumb -O2" } */
++/* { dg-require-effective-target arm_thumb1_ok } */
++/* { dg-final { scan-assembler-not "stmia\[\\t \]*r3!\[^\\n]*r3" } } */
++typedef struct {
++ void *t1, *t2, *t3;
++} z;
++extern volatile int y;
++static inline void foo(z *x) {
++ x->t1 = &x->t2;
++ x->t2 = ((void *)0);
++ x->t3 = &x->t1;
++}
++extern z v;
++void bar (void) {
++ y = 0;
++ foo(&v);
++}
+--- a/src/gcc/testsuite/gcc.target/arm/pr50099.c
++++ b/src/gcc/testsuite/gcc.target/arm/pr50099.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++long long foo (signed char * arg)
++{
++ long long temp_1;
++
++ temp_1 = arg[256];
++ return temp_1;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/pr50318-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/pr50318-1.c
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-require-effective-target arm_dsp } */
++
++long long test (unsigned int sec, unsigned long long nsecs)
++{
++ return (long long)(long)sec * 1000000000L + (long long)(unsigned
++ long)nsecs;
++}
++
++/* { dg-final { scan-assembler "umlal" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/shiftable.c
++++ b/src/gcc/testsuite/gcc.target/arm/shiftable.c
+@@ -0,0 +1,63 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-require-effective-target arm32 } */
++
++/* ARM has shift-and-alu insns. Depending on the ALU op GCC represents some
++ of these as a left shift, others as a multiply. Check that we match the
++ right one. */
++
++int
++plus (int a, int b)
++{
++ return (a * 64) + b;
++}
++
++/* { dg-final { scan-assembler "add.*\[al]sl #6" } } */
++
++int
++minus (int a, int b)
++{
++ return a - (b * 64);
++}
++
++/* { dg-final { scan-assembler "sub.*\[al]sl #6" } } */
++
++int
++ior (int a, int b)
++{
++ return (a * 64) | b;
++}
++
++/* { dg-final { scan-assembler "orr.*\[al]sl #6" } } */
++
++int
++xor (int a, int b)
++{
++ return (a * 64) ^ b;
++}
++
++/* { dg-final { scan-assembler "eor.*\[al]sl #6" } } */
++
++int
++and (int a, int b)
++{
++ return (a * 64) & b;
++}
++
++/* { dg-final { scan-assembler "and.*\[al]sl #6" } } */
++
++int
++rsb (int a, int b)
++{
++ return (a * 64) - b;
++}
++
++/* { dg-final { scan-assembler "rsb.*\[al]sl #6" } } */
++
++int
++mvn (int a, int b)
++{
++ return ~(a * 64);
++}
++
++/* { dg-final { scan-assembler "mvn.*\[al]sl #6" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/smlaltb-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/smlaltb-1.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++long long int
++foo (long long x, int in)
++{
++ short a = in & 0xffff;
++ short b = (in & 0xffff0000) >> 16;
++
++ return x + b * a;
++}
++
++/* { dg-final { scan-assembler "smlaltb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/smlaltt-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/smlaltt-1.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++long long int
++foo (long long x, int in1, int in2)
++{
++ short a = (in1 & 0xffff0000) >> 16;
++ short b = (in2 & 0xffff0000) >> 16;
++
++ return x + b * a;
++}
++
++/* { dg-final { scan-assembler "smlaltt" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/smlatb-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/smlatb-1.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++int
++foo (int x, int in)
++{
++ short a = in & 0xffff;
++ short b = (in & 0xffff0000) >> 16;
++
++ return x + b * a;
++}
++
++/* { dg-final { scan-assembler "smlatb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/smlatt-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/smlatt-1.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++int
++foo (int x, int in1, int in2)
++{
++ short a = (in1 & 0xffff0000) >> 16;
++ short b = (in2 & 0xffff0000) >> 16;
++
++ return x + b * a;
++}
++
++/* { dg-final { scan-assembler "smlatt" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/thumb2-cond-cmp-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/thumb2-cond-cmp-1.c
+@@ -0,0 +1,13 @@
++/* Use conditional compare */
++/* { dg-options "-O2" } */
++/* { dg-skip-if "" { arm_thumb1_ok } } */
++/* { dg-final { scan-assembler "cmpne" } } */
++
++int f(int i, int j)
++{
++ if ( (i == '+') || (j == '-') ) {
++ return 1;
++ } else {
++ return 0;
++ }
++}
+--- a/src/gcc/testsuite/gcc.target/arm/thumb2-cond-cmp-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/thumb2-cond-cmp-2.c
+@@ -0,0 +1,13 @@
++/* Use conditional compare */
++/* { dg-options "-O2" } */
++/* { dg-skip-if "" { arm_thumb1_ok } } */
++/* { dg-final { scan-assembler "cmpeq" } } */
++
++int f(int i, int j)
++{
++ if ( (i == '+') && (j == '-') ) {
++ return 1;
++ } else {
++ return 0;
++ }
++}
+--- a/src/gcc/testsuite/gcc.target/arm/thumb2-cond-cmp-3.c
++++ b/src/gcc/testsuite/gcc.target/arm/thumb2-cond-cmp-3.c
+@@ -0,0 +1,12 @@
++/* Use conditional compare */
++/* { dg-options "-O2" } */
++/* { dg-skip-if "" { arm_thumb1_ok } } */
++/* { dg-final { scan-assembler "cmpgt" } } */
++
++int f(int i, int j)
++{
++ if ( (i >= '+') ? (j > '-') : 0)
++ return 1;
++ else
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/thumb2-cond-cmp-4.c
++++ b/src/gcc/testsuite/gcc.target/arm/thumb2-cond-cmp-4.c
+@@ -0,0 +1,12 @@
++/* Use conditional compare */
++/* { dg-options "-O2" } */
++/* { dg-skip-if "" { arm_thumb1_ok } } */
++/* { dg-final { scan-assembler "cmpgt" } } */
++
++int f(int i, int j)
++{
++ if ( (i >= '+') ? (j <= '-') : 1)
++ return 1;
++ else
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/thumb2-replicated-constant1.c
++++ b/src/gcc/testsuite/gcc.target/arm/thumb2-replicated-constant1.c
+@@ -0,0 +1,27 @@
++/* Ensure simple replicated constant immediates work. */
++/* { dg-options "-mthumb -O2" } */
++/* { dg-require-effective-target arm_thumb2_ok } */
++
++int
++foo1 (int a)
++{
++ return a + 0xfefefefe;
++}
++
++/* { dg-final { scan-assembler "add.*#-16843010" } } */
++
++int
++foo2 (int a)
++{
++ return a - 0xab00ab00;
++}
++
++/* { dg-final { scan-assembler "sub.*#-1426019584" } } */
++
++int
++foo3 (int a)
++{
++ return a & 0x00cd00cd;
++}
++
++/* { dg-final { scan-assembler "and.*#13435085" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/thumb2-replicated-constant2.c
++++ b/src/gcc/testsuite/gcc.target/arm/thumb2-replicated-constant2.c
+@@ -0,0 +1,75 @@
++/* Ensure split constants can use replicated patterns. */
++/* { dg-options "-mthumb -O2" } */
++/* { dg-require-effective-target arm_thumb2_ok } */
++
++int
++foo1 (int a)
++{
++ return a + 0xfe00fe01;
++}
++
++/* { dg-final { scan-assembler "add.*#-33489408" } } */
++/* { dg-final { scan-assembler "add.*#1" } } */
++
++int
++foo2 (int a)
++{
++ return a + 0xdd01dd00;
++}
++
++/* { dg-final { scan-assembler "add.*#-587145984" } } */
++/* { dg-final { scan-assembler "add.*#65536" } } */
++
++int
++foo3 (int a)
++{
++ return a + 0x00443344;
++}
++
++/* { dg-final { scan-assembler "add.*#4456516" } } */
++/* { dg-final { scan-assembler "add.*#13056" } } */
++
++int
++foo4 (int a)
++{
++ return a + 0x77330033;
++}
++
++/* { dg-final { scan-assembler "add.*#1996488704" } } */
++/* { dg-final { scan-assembler "add.*#3342387" } } */
++
++int
++foo5 (int a)
++{
++ return a + 0x11221122;
++}
++
++/* { dg-final { scan-assembler "add.*#285217024" } } */
++/* { dg-final { scan-assembler "add.*#2228258" } } */
++
++int
++foo6 (int a)
++{
++ return a + 0x66666677;
++}
++
++/* { dg-final { scan-assembler "add.*#1717986918" } } */
++/* { dg-final { scan-assembler "add.*#17" } } */
++
++int
++foo7 (int a)
++{
++ return a + 0x99888888;
++}
++
++/* { dg-final { scan-assembler "add.*#-2004318072" } } */
++/* { dg-final { scan-assembler "add.*#285212672" } } */
++
++int
++foo8 (int a)
++{
++ return a + 0xdddddfff;
++}
++
++/* { dg-final { scan-assembler "add.*#-572662307" } } */
++/* { dg-final { scan-assembler "addw.*#546" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/thumb2-replicated-constant3.c
++++ b/src/gcc/testsuite/gcc.target/arm/thumb2-replicated-constant3.c
+@@ -0,0 +1,28 @@
++/* Ensure negated/inverted replicated constant immediates work. */
++/* { dg-options "-mthumb -O2" } */
++/* { dg-require-effective-target arm_thumb2_ok } */
++
++int
++foo1 (int a)
++{
++ return a | 0xffffff00;
++}
++
++/* { dg-final { scan-assembler "orn.*#255" } } */
++
++int
++foo2 (int a)
++{
++ return a & 0xffeeffee;
++}
++
++/* { dg-final { scan-assembler "bic.*#1114129" } } */
++
++int
++foo3 (int a)
++{
++ return a & 0xaaaaaa00;
++}
++
++/* { dg-final { scan-assembler "and.*#-1431655766" } } */
++/* { dg-final { scan-assembler "bic.*#170" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/thumb2-replicated-constant4.c
++++ b/src/gcc/testsuite/gcc.target/arm/thumb2-replicated-constant4.c
+@@ -0,0 +1,22 @@
++/* Ensure replicated constants don't make things worse. */
++/* { dg-options "-mthumb -O2" } */
++/* { dg-require-effective-target arm_thumb2_ok } */
++
++int
++foo1 (int a)
++{
++ /* It might be tempting to use 0x01000100, but it wouldn't help. */
++ return a + 0x01f001e0;
++}
++
++/* { dg-final { scan-assembler "add.*#32505856" } } */
++/* { dg-final { scan-assembler "add.*#480" } } */
++
++int
++foo2 (int a)
++{
++ return a + 0x0f100e10;
++}
++
++/* { dg-final { scan-assembler "add.*#252706816" } } */
++/* { dg-final { scan-assembler "add.*#3600" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/unaligned-memcpy-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/unaligned-memcpy-1.c
+@@ -0,0 +1,19 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_unaligned } */
++/* { dg-options "-O2" } */
++
++#include <string.h>
++
++void unknown_alignment (char *dest, char *src)
++{
++ memcpy (dest, src, 15);
++}
++
++/* We should see three unaligned word loads and store pairs, one unaligned
++ ldrh/strh pair, and an ldrb/strb pair. Sanity check that. */
++
++/* { dg-final { scan-assembler-times "@ unaligned" 8 } } */
++/* { dg-final { scan-assembler-times "ldrh" 1 } } */
++/* { dg-final { scan-assembler-times "strh" 1 } } */
++/* { dg-final { scan-assembler-times "ldrb" 1 } } */
++/* { dg-final { scan-assembler-times "strb" 1 } } */
+--- a/src/gcc/testsuite/gcc.target/arm/unaligned-memcpy-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/unaligned-memcpy-2.c
+@@ -0,0 +1,21 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_unaligned } */
++/* { dg-options "-O2" } */
++
++#include <string.h>
++
++char dest[16];
++
++void aligned_dest (char *src)
++{
++ memcpy (dest, src, 15);
++}
++
++/* Expect a multi-word store for the main part of the copy, but subword
++ loads/stores for the remainder. */
++
++/* { dg-final { scan-assembler-times "stmia" 1 } } */
++/* { dg-final { scan-assembler-times "ldrh" 1 } } */
++/* { dg-final { scan-assembler-times "strh" 1 } } */
++/* { dg-final { scan-assembler-times "ldrb" 1 } } */
++/* { dg-final { scan-assembler-times "strb" 1 } } */
+--- a/src/gcc/testsuite/gcc.target/arm/unaligned-memcpy-3.c
++++ b/src/gcc/testsuite/gcc.target/arm/unaligned-memcpy-3.c
+@@ -0,0 +1,21 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_unaligned } */
++/* { dg-options "-O2" } */
++
++#include <string.h>
++
++char src[16];
++
++void aligned_src (char *dest)
++{
++ memcpy (dest, src, 15);
++}
++
++/* Expect a multi-word load for the main part of the copy, but subword
++ loads/stores for the remainder. */
++
++/* { dg-final { scan-assembler-times "ldmia" 1 } } */
++/* { dg-final { scan-assembler-times "ldrh" 1 } } */
++/* { dg-final { scan-assembler-times "strh" 1 } } */
++/* { dg-final { scan-assembler-times "ldrb" 1 } } */
++/* { dg-final { scan-assembler-times "strb" 1 } } */
+--- a/src/gcc/testsuite/gcc.target/arm/unaligned-memcpy-4.c
++++ b/src/gcc/testsuite/gcc.target/arm/unaligned-memcpy-4.c
+@@ -0,0 +1,18 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_unaligned } */
++/* { dg-options "-O2" } */
++
++#include <string.h>
++
++char src[16];
++char dest[16];
++
++void aligned_both (void)
++{
++ memcpy (dest, src, 15);
++}
++
++/* We know both src and dest to be aligned: expect multiword loads/stores. */
++
++/* { dg-final { scan-assembler-times "ldmia" 1 } } */
++/* { dg-final { scan-assembler-times "stmia" 1 } } */
+--- a/src/gcc/testsuite/gcc.target/arm/unsigned-extend-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/unsigned-extend-1.c
+@@ -0,0 +1,9 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv6" } */
++
++unsigned char foo (unsigned char c)
++{
++ return (c >= '0') && (c <= '9');
++}
++
++/* { dg-final { scan-assembler-not "uxtb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/vfp-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/vfp-1.c
+@@ -127,13 +127,13 @@
+
+ void test_ldst (float f[], double d[]) {
+ /* { dg-final { scan-assembler "flds.+ \\\[r0, #1020\\\]" } } */
+- /* { dg-final { scan-assembler "flds.+ \\\[r0, #-1020\\\]" } } */
++ /* { dg-final { scan-assembler "flds.+ \\\[r\[0-9\], #-1020\\\]" { target { arm32 && { ! arm_thumb2_ok } } } } } */
+ /* { dg-final { scan-assembler "add.+ r0, #1024" } } */
+- /* { dg-final { scan-assembler "fsts.+ \\\[r0, #0\\\]\n" } } */
++ /* { dg-final { scan-assembler "fsts.+ \\\[r\[0-9\], #0\\\]\n" } } */
+ f[256] = f[255] + f[-255];
+
+ /* { dg-final { scan-assembler "fldd.+ \\\[r1, #1016\\\]" } } */
+- /* { dg-final { scan-assembler "fldd.+ \\\[r1, #-1016\\\]" } } */
++ /* { dg-final { scan-assembler "fldd.+ \\\[r\[1-9\], #-1016\\\]" { target { arm32 && { ! arm_thumb2_ok } } } } } */
+ /* { dg-final { scan-assembler "fstd.+ \\\[r1, #256\\\]" } } */
+ d[32] = d[127] + d[-127];
+ }
+--- a/src/gcc/testsuite/gcc.target/arm/wmul-10.c
++++ b/src/gcc/testsuite/gcc.target/arm/wmul-10.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++unsigned long long
++foo (unsigned short a, unsigned short *b, unsigned short *c)
++{
++ return (unsigned)a + (unsigned long long)*b * (unsigned long long)*c;
++}
++
++/* { dg-final { scan-assembler "umlal" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/wmul-11.c
++++ b/src/gcc/testsuite/gcc.target/arm/wmul-11.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++long long
++foo (int *b)
++{
++ return 10 * (long long)*b;
++}
++
++/* { dg-final { scan-assembler "smull" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/wmul-12.c
++++ b/src/gcc/testsuite/gcc.target/arm/wmul-12.c
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++long long
++foo (int *b, int *c)
++{
++ long long tmp = (long long)*b * *c;
++ return 10 + tmp;
++}
++
++/* { dg-final { scan-assembler "smlal" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/wmul-13.c
++++ b/src/gcc/testsuite/gcc.target/arm/wmul-13.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++long long
++foo (int *a, int *b)
++{
++ return *a + (long long)*b * 10;
++}
++
++/* { dg-final { scan-assembler "smlal" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/wmul-5.c
++++ b/src/gcc/testsuite/gcc.target/arm/wmul-5.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++long long
++foo (long long a, char *b, char *c)
++{
++ return a + *b * *c;
++}
++
++/* { dg-final { scan-assembler "umlal" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/wmul-6.c
++++ b/src/gcc/testsuite/gcc.target/arm/wmul-6.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++long long
++foo (long long a, unsigned char *b, signed char *c)
++{
++ return a + (long long)*b * (long long)*c;
++}
++
++/* { dg-final { scan-assembler "smlal" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/wmul-7.c
++++ b/src/gcc/testsuite/gcc.target/arm/wmul-7.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++unsigned long long
++foo (unsigned long long a, unsigned char *b, unsigned short *c)
++{
++ return a + *b * *c;
++}
++
++/* { dg-final { scan-assembler "umlal" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/wmul-8.c
++++ b/src/gcc/testsuite/gcc.target/arm/wmul-8.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++long long
++foo (long long a, int *b, int *c)
++{
++ return a + (long long)*b * *c;
++}
++
++/* { dg-final { scan-assembler "smlal" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/wmul-9.c
++++ b/src/gcc/testsuite/gcc.target/arm/wmul-9.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++long long
++foo (long long a, short *b, char *c)
++{
++ return a + *b * *c;
++}
++
++/* { dg-final { scan-assembler "smlalbb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/wmul-bitfield-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/wmul-bitfield-1.c
+@@ -0,0 +1,17 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++struct bf
++{
++ int a : 3;
++ int b : 15;
++ int c : 3;
++};
++
++long long
++foo (long long a, struct bf b, struct bf c)
++{
++ return a + b.b * c.b;
++}
++
++/* { dg-final { scan-assembler "smlalbb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/wmul-bitfield-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/wmul-bitfield-2.c
+@@ -0,0 +1,17 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=armv7-a" } */
++
++struct bf
++{
++ int a : 3;
++ unsigned int b : 15;
++ int c : 3;
++};
++
++long long
++foo (long long a, struct bf b, struct bf c)
++{
++ return a + b.b * c.c;
++}
++
++/* { dg-final { scan-assembler "smlalbb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/xor-and.c
++++ b/src/gcc/testsuite/gcc.target/arm/xor-and.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-options "-O -march=armv6" } */
++
++unsigned short foo (unsigned short x)
++{
++ x ^= 0x4002;
++ x >>= 1;
++ x |= 0x8000;
++ return x;
++}
++
++/* { dg-final { scan-assembler "orr" } } */
++/* { dg-final { scan-assembler-not "mvn" } } */
++/* { dg-final { scan-assembler-not "uxth" } } */
+--- a/src/gcc/testsuite/gcc.target/sparc/ultrasp12.c
++++ b/src/gcc/testsuite/gcc.target/sparc/ultrasp12.c
+@@ -0,0 +1,64 @@
++/* PR rtl-optimization/48830 */
++/* Testcase by Hans-Peter Nilsson <hp@gcc.gnu.org> */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target lp64 } */
++/* { dg-options "-O2 -mcpu=ultrasparc -mvis" } */
++
++typedef unsigned char uint8_t;
++typedef unsigned int uint32_t;
++typedef unsigned long int uint64_t;
++typedef unsigned long int uintmax_t;
++typedef unsigned char rc_vec_t __attribute__((__vector_size__(8)));
++typedef short rc_svec_type_ __attribute__((__vector_size__(8)));
++typedef unsigned char rc_vec4_type_ __attribute__((__vector_size__(4)));
++
++void
++rc_stat_xsum_acc(const uint8_t *__restrict src1, int src1_dim,
++ const uint8_t *__restrict src2, int src2_dim,
++ int len, int height, uintmax_t sum[5])
++{
++ uint32_t s1 = 0;
++ uint32_t s2 = 0;
++ uintmax_t s11 = 0;
++ uintmax_t s22 = 0;
++ uintmax_t s12 = 0;
++ int full = len / ((1024) < (1024) ? (1024) : (1024));
++ int rem = len % ((1024) < (1024) ? (1024) : (1024));
++ int rem1 = rem / 1;
++ int y;
++ unsigned int rc_gsr_scale_ __attribute__ ((__unused__)) = 7; unsigned int rc_gsr_align_ __attribute__ ((__unused__)) = 4; unsigned int rc_gsr_set_ __attribute__ ((__unused__)) = 0; register unsigned int rc_gsr_fakedep_ __attribute__ ((__unused__)) = 0; unsigned int rc_gsr_ldinit_ __attribute__ ((__unused__)) = 0;
++ for (y = 0; y < height; y++) {
++ rc_vec_t a1, a2, a11, a22, a12;
++ int i1 = (y)*(src1_dim);
++ int i2 = (y)*(src2_dim);
++ int x;
++ ((a1) = ((rc_vec_t) {0}));
++ ((a2) = ((rc_vec_t) {0}));
++ ((a11) = ((rc_vec_t) {0}));
++ ((a22) = ((rc_vec_t) {0}));
++ ((a12) = ((rc_vec_t) {0}));
++ for (x = 0; x < full; x++) {
++ int k;
++ for (k = 0; k < ((1024) < (1024) ? (1024) : (1024)) /
++ 1; k++)
++ {
++ do { rc_vec_t v1, v2; ((v1) = *(const rc_vec_t*)(&(src1)[i1])); ((v2) = *(const rc_vec_t*)(&(src2)[i2])); ((a1) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(__builtin_vis_pdist (v1, ((rc_vec_t) {0}), (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a1)).i)))).v)); ((a2) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(__builtin_vis_pdist (v2, ((rc_vec_t) {0}), (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a2)).i)))).v)); do { rc_vec_t s1_ = (v1); rc_vec_t s2_ = (v1); rc_vec_t accvin_ = (a11); rc_vec_t s1lo7_, s1msb_, accvout_; uint32_t maclo_, machi_; rc_svec_type_ masklow_ = (rc_svec_type_){(255), (255), (255), (255)}; rc_svec_type_ s1msbhi_, s1msblo_, s1lo7hi_, s1lo7lo_; rc_svec_type_ s1msbdiv2hi_, s1msbdiv2lo_; rc_vec4_type_ s1lo7hi4_, s1lo7lo4_, s1msbhi4_, s1msblo4_; rc_vec4_type_ s1msbdiv2hi4_, s1msbdiv2lo4_, s2hi4_, s2lo4_; rc_vec4_type_ accvhi4_, accvlo4_; rc_svec_type_ mulhilo7_, mullolo7_, mulhimsbdiv2_, mullomsbdiv2_; rc_svec_type_ mulhi_, mullo_, mulhihi_, mullohi_; rc_svec_type_ mulhilo_, mullolo_; rc_vec4_type_ zero4_ = (((union { rc_vec4_type_ v; uint64_t i; })(uint64_t)(0)).v); rc_vec_t msb_ = (rc_vec_t){(0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80)}; ((s1msb_) = (s1_) & (msb_)); ((s1lo7_) = (s1_) & (~msb_)); do { if (rc_gsr_ldinit_) { extern void rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(void); rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(); } if (!__builtin_constant_p(rc_gsr_align_) || !__builtin_constant_p(2) || !rc_gsr_set_ || (unsigned) (rc_gsr_align_) != rc_gsr_align_ || (unsigned) (2) != rc_gsr_scale_) { rc_gsr_set_ = 1; rc_gsr_align_ = (rc_gsr_align_); rc_gsr_scale_ = (2); unsigned int val_ = (rc_gsr_scale_ << 3) | rc_gsr_align_; if (__builtin_constant_p (val_)) { __asm__("wr %%g0,%[gsrval],%%gsr\n" ";# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "i" (val_), "1" (rc_gsr_fakedep_)); } else { __asm__("wr %[gsrval],0,%%gsr" "\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "r" (val_), "1" (rc_gsr_fakedep_)); } } else { __asm__("\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_) : "0" (s1msb_), [fakegsr] "g" (rc_gsr_fakedep_)); } } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1msb_); (s1msbhi4_) = hl_.hilo_.hi_; (s1msblo4_) = hl_.hilo_.lo_; } while (0); s1msbhi_ = __builtin_vis_fexpand(s1msbhi4_); s1msblo_ = __builtin_vis_fexpand(s1msblo4_); s1msbdiv2hi4_ = __builtin_vis_fpack16(s1msbhi_); s1msbdiv2lo4_ = __builtin_vis_fpack16(s1msblo_); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s2_); (s2hi4_) = hl_.hilo_.hi_; (s2lo4_) = hl_.hilo_.lo_; } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1lo7_); (s1lo7hi4_) = hl_.hilo_.hi_; (s1lo7lo4_) = hl_.hilo_.lo_; } while (0); s1msbdiv2hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2hi4_, zero4_); s1msbdiv2lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2lo4_, zero4_); s1lo7hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7hi4_, zero4_); s1lo7lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7lo4_, zero4_); mulhilo7_ = __builtin_vis_fmul8x16(s2hi4_, s1lo7hi_); mullolo7_ = __builtin_vis_fmul8x16(s2lo4_, s1lo7lo_); mulhimsbdiv2_ = __builtin_vis_fmul8x16(s2hi4_, s1msbdiv2hi_); mullomsbdiv2_ = __builtin_vis_fmul8x16(s2lo4_, s1msbdiv2lo_); mulhi_ = mulhilo7_ + mulhimsbdiv2_ + mulhimsbdiv2_; mullo_ = mullolo7_ + mullomsbdiv2_ + mullomsbdiv2_; mulhihi_ = mulhi_ & ~masklow_; mulhilo_ = mulhi_ & masklow_; mullohi_ = mullo_ & ~masklow_; mullolo_ = mullo_ & masklow_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (accvin_); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); maclo_ = __builtin_vis_pdist ((rc_vec_t)mullolo_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i)); maclo_ = __builtin_vis_pdist ((rc_vec_t)mulhilo_, ((rc_vec_t) {0}), maclo_); machi_ = __builtin_vis_pdist ((rc_vec_t)mullohi_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i)); machi_ = __builtin_vis_pdist ((rc_vec_t)mulhihi_, ((rc_vec_t) {0}), machi_); do { typedef union { struct { rc_vec4_type_ hi_, lo_; } hilo_; rc_vec_t v_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) {{((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)machi_)).v)), ((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)maclo_)).v))}}; (accvout_) = hl_.v_; } while (0); __asm__("\n;# dep fake GSR %[fakegsr] on %[xdep]" : [fakegsr] "=brm" (rc_gsr_fakedep_) : [xdep] "brm" (accvout_), "0" (rc_gsr_fakedep_)); (a11) = accvout_; } while (0); do { rc_vec_t s1_ = (v2); rc_vec_t s2_ = (v2); rc_vec_t accvin_ = (a22); rc_vec_t s1lo7_, s1msb_, accvout_; uint32_t maclo_, machi_; rc_svec_type_ masklow_ = (rc_svec_type_){(255), (255), (255), (255)}; rc_svec_type_ s1msbhi_, s1msblo_, s1lo7hi_, s1lo7lo_; rc_svec_type_ s1msbdiv2hi_, s1msbdiv2lo_; rc_vec4_type_ s1lo7hi4_, s1lo7lo4_, s1msbhi4_, s1msblo4_; rc_vec4_type_ s1msbdiv2hi4_, s1msbdiv2lo4_, s2hi4_, s2lo4_; rc_vec4_type_ accvhi4_, accvlo4_; rc_svec_type_ mulhilo7_, mullolo7_, mulhimsbdiv2_, mullomsbdiv2_; rc_svec_type_ mulhi_, mullo_, mulhihi_, mullohi_; rc_svec_type_ mulhilo_, mullolo_; rc_vec4_type_ zero4_ = (((union { rc_vec4_type_ v; uint64_t i; })(uint64_t)(0)).v); rc_vec_t msb_ = (rc_vec_t){(0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80)}; ((s1msb_) = (s1_) & (msb_)); ((s1lo7_) = (s1_) & (~msb_)); do { if (rc_gsr_ldinit_) { extern void rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(void); rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(); } if (!__builtin_constant_p(rc_gsr_align_) || !__builtin_constant_p(2) || !rc_gsr_set_ || (unsigned) (rc_gsr_align_) != rc_gsr_align_ || (unsigned) (2) != rc_gsr_scale_) { rc_gsr_set_ = 1; rc_gsr_align_ = (rc_gsr_align_); rc_gsr_scale_ = (2); unsigned int val_ = (rc_gsr_scale_ << 3) | rc_gsr_align_; if (__builtin_constant_p (val_)) { __asm__("wr %%g0,%[gsrval],%%gsr\n" ";# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "i" (val_), "1" (rc_gsr_fakedep_)); } else { __asm__("wr %[gsrval],0,%%gsr" "\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "r" (val_), "1" (rc_gsr_fakedep_)); } } else { __asm__("\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_) : "0" (s1msb_), [fakegsr] "g" (rc_gsr_fakedep_)); } } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1msb_); (s1msbhi4_) = hl_.hilo_.hi_; (s1msblo4_) = hl_.hilo_.lo_; } while (0); s1msbhi_ = __builtin_vis_fexpand(s1msbhi4_); s1msblo_ = __builtin_vis_fexpand(s1msblo4_); s1msbdiv2hi4_ = __builtin_vis_fpack16(s1msbhi_); s1msbdiv2lo4_ = __builtin_vis_fpack16(s1msblo_); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s2_); (s2hi4_) = hl_.hilo_.hi_; (s2lo4_) = hl_.hilo_.lo_; } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1lo7_); (s1lo7hi4_) = hl_.hilo_.hi_; (s1lo7lo4_) = hl_.hilo_.lo_; } while (0); s1msbdiv2hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2hi4_, zero4_); s1msbdiv2lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2lo4_, zero4_); s1lo7hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7hi4_, zero4_); s1lo7lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7lo4_, zero4_); mulhilo7_ = __builtin_vis_fmul8x16(s2hi4_, s1lo7hi_); mullolo7_ = __builtin_vis_fmul8x16(s2lo4_, s1lo7lo_); mulhimsbdiv2_ = __builtin_vis_fmul8x16(s2hi4_, s1msbdiv2hi_); mullomsbdiv2_ = __builtin_vis_fmul8x16(s2lo4_, s1msbdiv2lo_); mulhi_ = mulhilo7_ + mulhimsbdiv2_ + mulhimsbdiv2_; mullo_ = mullolo7_ + mullomsbdiv2_ + mullomsbdiv2_; mulhihi_ = mulhi_ & ~masklow_; mulhilo_ = mulhi_ & masklow_; mullohi_ = mullo_ & ~masklow_; mullolo_ = mullo_ & masklow_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (accvin_); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); maclo_ = __builtin_vis_pdist ((rc_vec_t)mullolo_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i)); maclo_ = __builtin_vis_pdist ((rc_vec_t)mulhilo_, ((rc_vec_t) {0}), maclo_); machi_ = __builtin_vis_pdist ((rc_vec_t)mullohi_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i)); machi_ = __builtin_vis_pdist ((rc_vec_t)mulhihi_, ((rc_vec_t) {0}), machi_); do { typedef union { struct { rc_vec4_type_ hi_, lo_; } hilo_; rc_vec_t v_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) {{((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)machi_)).v)), ((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)maclo_)).v))}}; (accvout_) = hl_.v_; } while (0); __asm__("\n;# dep fake GSR %[fakegsr] on %[xdep]" : [fakegsr] "=brm" (rc_gsr_fakedep_) : [xdep] "brm" (accvout_), "0" (rc_gsr_fakedep_)); (a22) = accvout_; } while (0); do { rc_vec_t s1_ = (v1); rc_vec_t s2_ = (v2); rc_vec_t accvin_ = (a12); rc_vec_t s1lo7_, s1msb_, accvout_; uint32_t maclo_, machi_; rc_svec_type_ masklow_ = (rc_svec_type_){(255), (255), (255), (255)}; rc_svec_type_ s1msbhi_, s1msblo_, s1lo7hi_, s1lo7lo_; rc_svec_type_ s1msbdiv2hi_, s1msbdiv2lo_; rc_vec4_type_ s1lo7hi4_, s1lo7lo4_, s1msbhi4_, s1msblo4_; rc_vec4_type_ s1msbdiv2hi4_, s1msbdiv2lo4_, s2hi4_, s2lo4_; rc_vec4_type_ accvhi4_, accvlo4_; rc_svec_type_ mulhilo7_, mullolo7_, mulhimsbdiv2_, mullomsbdiv2_; rc_svec_type_ mulhi_, mullo_, mulhihi_, mullohi_; rc_svec_type_ mulhilo_, mullolo_; rc_vec4_type_ zero4_ = (((union { rc_vec4_type_ v; uint64_t i; })(uint64_t)(0)).v); rc_vec_t msb_ = (rc_vec_t){(0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80)}; ((s1msb_) = (s1_) & (msb_)); ((s1lo7_) = (s1_) & (~msb_)); do { if (rc_gsr_ldinit_) { extern void rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(void); rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(); } if (!__builtin_constant_p(rc_gsr_align_) || !__builtin_constant_p(2) || !rc_gsr_set_ || (unsigned) (rc_gsr_align_) != rc_gsr_align_ || (unsigned) (2) != rc_gsr_scale_) { rc_gsr_set_ = 1; rc_gsr_align_ = (rc_gsr_align_); rc_gsr_scale_ = (2); unsigned int val_ = (rc_gsr_scale_ << 3) | rc_gsr_align_; if (__builtin_constant_p (val_)) { __asm__("wr %%g0,%[gsrval],%%gsr\n" ";# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "i" (val_), "1" (rc_gsr_fakedep_)); } else { __asm__("wr %[gsrval],0,%%gsr" "\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "r" (val_), "1" (rc_gsr_fakedep_)); } } else { __asm__("\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_) : "0" (s1msb_), [fakegsr] "g" (rc_gsr_fakedep_)); } } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1msb_); (s1msbhi4_) = hl_.hilo_.hi_; (s1msblo4_) = hl_.hilo_.lo_; } while (0); s1msbhi_ = __builtin_vis_fexpand(s1msbhi4_); s1msblo_ = __builtin_vis_fexpand(s1msblo4_); s1msbdiv2hi4_ = __builtin_vis_fpack16(s1msbhi_); s1msbdiv2lo4_ = __builtin_vis_fpack16(s1msblo_); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s2_); (s2hi4_) = hl_.hilo_.hi_; (s2lo4_) = hl_.hilo_.lo_; } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1lo7_); (s1lo7hi4_) = hl_.hilo_.hi_; (s1lo7lo4_) = hl_.hilo_.lo_; } while (0); s1msbdiv2hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2hi4_, zero4_); s1msbdiv2lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2lo4_, zero4_); s1lo7hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7hi4_, zero4_); s1lo7lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7lo4_, zero4_); mulhilo7_ = __builtin_vis_fmul8x16(s2hi4_, s1lo7hi_); mullolo7_ = __builtin_vis_fmul8x16(s2lo4_, s1lo7lo_); mulhimsbdiv2_ = __builtin_vis_fmul8x16(s2hi4_, s1msbdiv2hi_); mullomsbdiv2_ = __builtin_vis_fmul8x16(s2lo4_, s1msbdiv2lo_); mulhi_ = mulhilo7_ + mulhimsbdiv2_ + mulhimsbdiv2_; mullo_ = mullolo7_ + mullomsbdiv2_ + mullomsbdiv2_; mulhihi_ = mulhi_ & ~masklow_; mulhilo_ = mulhi_ & masklow_; mullohi_ = mullo_ & ~masklow_; mullolo_ = mullo_ & masklow_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (accvin_); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); maclo_ = __builtin_vis_pdist ((rc_vec_t)mullolo_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i)); maclo_ = __builtin_vis_pdist ((rc_vec_t)mulhilo_, ((rc_vec_t) {0}), maclo_); machi_ = __builtin_vis_pdist ((rc_vec_t)mullohi_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i)); machi_ = __builtin_vis_pdist ((rc_vec_t)mulhihi_, ((rc_vec_t) {0}), machi_); do { typedef union { struct { rc_vec4_type_ hi_, lo_; } hilo_; rc_vec_t v_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) {{((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)machi_)).v)), ((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)maclo_)).v))}}; (accvout_) = hl_.v_; } while (0); __asm__("\n;# dep fake GSR %[fakegsr] on %[xdep]" : [fakegsr] "=brm" (rc_gsr_fakedep_) : [xdep] "brm" (accvout_), "0" (rc_gsr_fakedep_)); (a12) = accvout_; } while (0); (i1) += 8; (i2) += 8; } while (0);
++
++ }
++ do { uint32_t t1, t2, t11, t22, t12; ((t1) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a1)).i)); ((t2) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a2)).i)); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a11); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t11) = maclo_ + machi_ * 256; } while (0); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a22); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t22) = maclo_ + machi_ * 256; } while (0); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a12); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t12) = maclo_ + machi_ * 256; } while (0); ((a1) = ((rc_vec_t) {0})); ((a2) = ((rc_vec_t) {0})); ((a11) = ((rc_vec_t) {0})); ((a22) = ((rc_vec_t) {0})); ((a12) = ((rc_vec_t) {0})); (s1) += t1; (s2) += t2; (s11) += t11; (s22) += t22; (s12) += t12; } while (0);
++ }
++ for (x = 0; x < rem1; x++) {
++ do { rc_vec_t v1, v2; ((v1) = *(const rc_vec_t*)(&(src1)[i1])); ((v2) = *(const rc_vec_t*)(&(src2)[i2])); ((a1) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(__builtin_vis_pdist (v1, ((rc_vec_t) {0}), (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a1)).i)))).v)); ((a2) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(__builtin_vis_pdist (v2, ((rc_vec_t) {0}), (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a2)).i)))).v)); do { rc_vec_t s1_ = (v1); rc_vec_t s2_ = (v1); rc_vec_t accvin_ = (a11); rc_vec_t s1lo7_, s1msb_, accvout_; uint32_t maclo_, machi_; rc_svec_type_ masklow_ = (rc_svec_type_){(255), (255), (255), (255)}; rc_svec_type_ s1msbhi_, s1msblo_, s1lo7hi_, s1lo7lo_; rc_svec_type_ s1msbdiv2hi_, s1msbdiv2lo_; rc_vec4_type_ s1lo7hi4_, s1lo7lo4_, s1msbhi4_, s1msblo4_; rc_vec4_type_ s1msbdiv2hi4_, s1msbdiv2lo4_, s2hi4_, s2lo4_; rc_vec4_type_ accvhi4_, accvlo4_; rc_svec_type_ mulhilo7_, mullolo7_, mulhimsbdiv2_, mullomsbdiv2_; rc_svec_type_ mulhi_, mullo_, mulhihi_, mullohi_; rc_svec_type_ mulhilo_, mullolo_; rc_vec4_type_ zero4_ = (((union { rc_vec4_type_ v; uint64_t i; })(uint64_t)(0)).v); rc_vec_t msb_ = (rc_vec_t){(0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80)}; ((s1msb_) = (s1_) & (msb_)); ((s1lo7_) = (s1_) & (~msb_)); do { if (rc_gsr_ldinit_) { extern void rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(void); rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(); } if (!__builtin_constant_p(rc_gsr_align_) || !__builtin_constant_p(2) || !rc_gsr_set_ || (unsigned) (rc_gsr_align_) != rc_gsr_align_ || (unsigned) (2) != rc_gsr_scale_) { rc_gsr_set_ = 1; rc_gsr_align_ = (rc_gsr_align_); rc_gsr_scale_ = (2); unsigned int val_ = (rc_gsr_scale_ << 3) | rc_gsr_align_; if (__builtin_constant_p (val_)) { __asm__("wr %%g0,%[gsrval],%%gsr\n" ";# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "i" (val_), "1" (rc_gsr_fakedep_)); } else { __asm__("wr %[gsrval],0,%%gsr" "\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "r" (val_), "1" (rc_gsr_fakedep_)); } } else { __asm__("\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_) : "0" (s1msb_), [fakegsr] "g" (rc_gsr_fakedep_)); } } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1msb_); (s1msbhi4_) = hl_.hilo_.hi_; (s1msblo4_) = hl_.hilo_.lo_; } while (0); s1msbhi_ = __builtin_vis_fexpand(s1msbhi4_); s1msblo_ = __builtin_vis_fexpand(s1msblo4_); s1msbdiv2hi4_ = __builtin_vis_fpack16(s1msbhi_); s1msbdiv2lo4_ = __builtin_vis_fpack16(s1msblo_); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s2_); (s2hi4_) = hl_.hilo_.hi_; (s2lo4_) = hl_.hilo_.lo_; } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1lo7_); (s1lo7hi4_) = hl_.hilo_.hi_; (s1lo7lo4_) = hl_.hilo_.lo_; } while (0); s1msbdiv2hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2hi4_, zero4_); s1msbdiv2lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2lo4_, zero4_); s1lo7hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7hi4_, zero4_); s1lo7lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7lo4_, zero4_); mulhilo7_ = __builtin_vis_fmul8x16(s2hi4_, s1lo7hi_); mullolo7_ = __builtin_vis_fmul8x16(s2lo4_, s1lo7lo_); mulhimsbdiv2_ = __builtin_vis_fmul8x16(s2hi4_, s1msbdiv2hi_); mullomsbdiv2_ = __builtin_vis_fmul8x16(s2lo4_, s1msbdiv2lo_); mulhi_ = mulhilo7_ + mulhimsbdiv2_ + mulhimsbdiv2_; mullo_ = mullolo7_ + mullomsbdiv2_ + mullomsbdiv2_; mulhihi_ = mulhi_ & ~masklow_; mulhilo_ = mulhi_ & masklow_; mullohi_ = mullo_ & ~masklow_; mullolo_ = mullo_ & masklow_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (accvin_); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); maclo_ = __builtin_vis_pdist ((rc_vec_t)mullolo_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i)); maclo_ = __builtin_vis_pdist ((rc_vec_t)mulhilo_, ((rc_vec_t) {0}), maclo_); machi_ = __builtin_vis_pdist ((rc_vec_t)mullohi_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i)); machi_ = __builtin_vis_pdist ((rc_vec_t)mulhihi_, ((rc_vec_t) {0}), machi_); do { typedef union { struct { rc_vec4_type_ hi_, lo_; } hilo_; rc_vec_t v_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) {{((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)machi_)).v)), ((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)maclo_)).v))}}; (accvout_) = hl_.v_; } while (0); __asm__("\n;# dep fake GSR %[fakegsr] on %[xdep]" : [fakegsr] "=brm" (rc_gsr_fakedep_) : [xdep] "brm" (accvout_), "0" (rc_gsr_fakedep_)); (a11) = accvout_; } while (0); do { rc_vec_t s1_ = (v2); rc_vec_t s2_ = (v2); rc_vec_t accvin_ = (a22); rc_vec_t s1lo7_, s1msb_, accvout_; uint32_t maclo_, machi_; rc_svec_type_ masklow_ = (rc_svec_type_){(255), (255), (255), (255)}; rc_svec_type_ s1msbhi_, s1msblo_, s1lo7hi_, s1lo7lo_; rc_svec_type_ s1msbdiv2hi_, s1msbdiv2lo_; rc_vec4_type_ s1lo7hi4_, s1lo7lo4_, s1msbhi4_, s1msblo4_; rc_vec4_type_ s1msbdiv2hi4_, s1msbdiv2lo4_, s2hi4_, s2lo4_; rc_vec4_type_ accvhi4_, accvlo4_; rc_svec_type_ mulhilo7_, mullolo7_, mulhimsbdiv2_, mullomsbdiv2_; rc_svec_type_ mulhi_, mullo_, mulhihi_, mullohi_; rc_svec_type_ mulhilo_, mullolo_; rc_vec4_type_ zero4_ = (((union { rc_vec4_type_ v; uint64_t i; })(uint64_t)(0)).v); rc_vec_t msb_ = (rc_vec_t){(0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80)}; ((s1msb_) = (s1_) & (msb_)); ((s1lo7_) = (s1_) & (~msb_)); do { if (rc_gsr_ldinit_) { extern void rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(void); rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(); } if (!__builtin_constant_p(rc_gsr_align_) || !__builtin_constant_p(2) || !rc_gsr_set_ || (unsigned) (rc_gsr_align_) != rc_gsr_align_ || (unsigned) (2) != rc_gsr_scale_) { rc_gsr_set_ = 1; rc_gsr_align_ = (rc_gsr_align_); rc_gsr_scale_ = (2); unsigned int val_ = (rc_gsr_scale_ << 3) | rc_gsr_align_; if (__builtin_constant_p (val_)) { __asm__("wr %%g0,%[gsrval],%%gsr\n" ";# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "i" (val_), "1" (rc_gsr_fakedep_)); } else { __asm__("wr %[gsrval],0,%%gsr" "\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "r" (val_), "1" (rc_gsr_fakedep_)); } } else { __asm__("\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_) : "0" (s1msb_), [fakegsr] "g" (rc_gsr_fakedep_)); } } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1msb_); (s1msbhi4_) = hl_.hilo_.hi_; (s1msblo4_) = hl_.hilo_.lo_; } while (0); s1msbhi_ = __builtin_vis_fexpand(s1msbhi4_); s1msblo_ = __builtin_vis_fexpand(s1msblo4_); s1msbdiv2hi4_ = __builtin_vis_fpack16(s1msbhi_); s1msbdiv2lo4_ = __builtin_vis_fpack16(s1msblo_); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s2_); (s2hi4_) = hl_.hilo_.hi_; (s2lo4_) = hl_.hilo_.lo_; } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1lo7_); (s1lo7hi4_) = hl_.hilo_.hi_; (s1lo7lo4_) = hl_.hilo_.lo_; } while (0); s1msbdiv2hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2hi4_, zero4_); s1msbdiv2lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2lo4_, zero4_); s1lo7hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7hi4_, zero4_); s1lo7lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7lo4_, zero4_); mulhilo7_ = __builtin_vis_fmul8x16(s2hi4_, s1lo7hi_); mullolo7_ = __builtin_vis_fmul8x16(s2lo4_, s1lo7lo_); mulhimsbdiv2_ = __builtin_vis_fmul8x16(s2hi4_, s1msbdiv2hi_); mullomsbdiv2_ = __builtin_vis_fmul8x16(s2lo4_, s1msbdiv2lo_); mulhi_ = mulhilo7_ + mulhimsbdiv2_ + mulhimsbdiv2_; mullo_ = mullolo7_ + mullomsbdiv2_ + mullomsbdiv2_; mulhihi_ = mulhi_ & ~masklow_; mulhilo_ = mulhi_ & masklow_; mullohi_ = mullo_ & ~masklow_; mullolo_ = mullo_ & masklow_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (accvin_); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); maclo_ = __builtin_vis_pdist ((rc_vec_t)mullolo_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i)); maclo_ = __builtin_vis_pdist ((rc_vec_t)mulhilo_, ((rc_vec_t) {0}), maclo_); machi_ = __builtin_vis_pdist ((rc_vec_t)mullohi_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i)); machi_ = __builtin_vis_pdist ((rc_vec_t)mulhihi_, ((rc_vec_t) {0}), machi_); do { typedef union { struct { rc_vec4_type_ hi_, lo_; } hilo_; rc_vec_t v_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) {{((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)machi_)).v)), ((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)maclo_)).v))}}; (accvout_) = hl_.v_; } while (0); __asm__("\n;# dep fake GSR %[fakegsr] on %[xdep]" : [fakegsr] "=brm" (rc_gsr_fakedep_) : [xdep] "brm" (accvout_), "0" (rc_gsr_fakedep_)); (a22) = accvout_; } while (0); do { rc_vec_t s1_ = (v1); rc_vec_t s2_ = (v2); rc_vec_t accvin_ = (a12); rc_vec_t s1lo7_, s1msb_, accvout_; uint32_t maclo_, machi_; rc_svec_type_ masklow_ = (rc_svec_type_){(255), (255), (255), (255)}; rc_svec_type_ s1msbhi_, s1msblo_, s1lo7hi_, s1lo7lo_; rc_svec_type_ s1msbdiv2hi_, s1msbdiv2lo_; rc_vec4_type_ s1lo7hi4_, s1lo7lo4_, s1msbhi4_, s1msblo4_; rc_vec4_type_ s1msbdiv2hi4_, s1msbdiv2lo4_, s2hi4_, s2lo4_; rc_vec4_type_ accvhi4_, accvlo4_; rc_svec_type_ mulhilo7_, mullolo7_, mulhimsbdiv2_, mullomsbdiv2_; rc_svec_type_ mulhi_, mullo_, mulhihi_, mullohi_; rc_svec_type_ mulhilo_, mullolo_; rc_vec4_type_ zero4_ = (((union { rc_vec4_type_ v; uint64_t i; })(uint64_t)(0)).v); rc_vec_t msb_ = (rc_vec_t){(0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80)}; ((s1msb_) = (s1_) & (msb_)); ((s1lo7_) = (s1_) & (~msb_)); do { if (rc_gsr_ldinit_) { extern void rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(void); rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(); } if (!__builtin_constant_p(rc_gsr_align_) || !__builtin_constant_p(2) || !rc_gsr_set_ || (unsigned) (rc_gsr_align_) != rc_gsr_align_ || (unsigned) (2) != rc_gsr_scale_) { rc_gsr_set_ = 1; rc_gsr_align_ = (rc_gsr_align_); rc_gsr_scale_ = (2); unsigned int val_ = (rc_gsr_scale_ << 3) | rc_gsr_align_; if (__builtin_constant_p (val_)) { __asm__("wr %%g0,%[gsrval],%%gsr\n" ";# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "i" (val_), "1" (rc_gsr_fakedep_)); } else { __asm__("wr %[gsrval],0,%%gsr" "\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "r" (val_), "1" (rc_gsr_fakedep_)); } } else { __asm__("\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_) : "0" (s1msb_), [fakegsr] "g" (rc_gsr_fakedep_)); } } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1msb_); (s1msbhi4_) = hl_.hilo_.hi_; (s1msblo4_) = hl_.hilo_.lo_; } while (0); s1msbhi_ = __builtin_vis_fexpand(s1msbhi4_); s1msblo_ = __builtin_vis_fexpand(s1msblo4_); s1msbdiv2hi4_ = __builtin_vis_fpack16(s1msbhi_); s1msbdiv2lo4_ = __builtin_vis_fpack16(s1msblo_); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s2_); (s2hi4_) = hl_.hilo_.hi_; (s2lo4_) = hl_.hilo_.lo_; } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1lo7_); (s1lo7hi4_) = hl_.hilo_.hi_; (s1lo7lo4_) = hl_.hilo_.lo_; } while (0); s1msbdiv2hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2hi4_, zero4_); s1msbdiv2lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2lo4_, zero4_); s1lo7hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7hi4_, zero4_); s1lo7lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7lo4_, zero4_); mulhilo7_ = __builtin_vis_fmul8x16(s2hi4_, s1lo7hi_); mullolo7_ = __builtin_vis_fmul8x16(s2lo4_, s1lo7lo_); mulhimsbdiv2_ = __builtin_vis_fmul8x16(s2hi4_, s1msbdiv2hi_); mullomsbdiv2_ = __builtin_vis_fmul8x16(s2lo4_, s1msbdiv2lo_); mulhi_ = mulhilo7_ + mulhimsbdiv2_ + mulhimsbdiv2_; mullo_ = mullolo7_ + mullomsbdiv2_ + mullomsbdiv2_; mulhihi_ = mulhi_ & ~masklow_; mulhilo_ = mulhi_ & masklow_; mullohi_ = mullo_ & ~masklow_; mullolo_ = mullo_ & masklow_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (accvin_); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); maclo_ = __builtin_vis_pdist ((rc_vec_t)mullolo_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i)); maclo_ = __builtin_vis_pdist ((rc_vec_t)mulhilo_, ((rc_vec_t) {0}), maclo_); machi_ = __builtin_vis_pdist ((rc_vec_t)mullohi_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i)); machi_ = __builtin_vis_pdist ((rc_vec_t)mulhihi_, ((rc_vec_t) {0}), machi_); do { typedef union { struct { rc_vec4_type_ hi_, lo_; } hilo_; rc_vec_t v_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) {{((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)machi_)).v)), ((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)maclo_)).v))}}; (accvout_) = hl_.v_; } while (0); __asm__("\n;# dep fake GSR %[fakegsr] on %[xdep]" : [fakegsr] "=brm" (rc_gsr_fakedep_) : [xdep] "brm" (accvout_), "0" (rc_gsr_fakedep_)); (a12) = accvout_; } while (0); (i1) += 8; (i2) += 8; } while (0);
++ }
++ do { uint32_t t1, t2, t11, t22, t12; ((t1) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a1)).i)); ((t2) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a2)).i)); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a11); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t11) = maclo_ + machi_ * 256; } while (0); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a22); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t22) = maclo_ + machi_ * 256; } while (0); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a12); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t12) = maclo_ + machi_ * 256; } while (0); ((a1) = ((rc_vec_t) {0})); ((a2) = ((rc_vec_t) {0})); ((a11) = ((rc_vec_t) {0})); ((a22) = ((rc_vec_t) {0})); ((a12) = ((rc_vec_t) {0})); (s1) += t1; (s2) += t2; (s11) += t11; (s22) += t22; (s12) += t12; } while (0);
++
++ do { uint32_t t1, t2, t11, t22, t12; ((t1) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a1)).i)); ((t2) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a2)).i)); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a11); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t11) = maclo_ + machi_ * 256; } while (0); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a22); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t22) = maclo_ + machi_ * 256; } while (0); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a12); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t12) = maclo_ + machi_ * 256; } while (0); ((a1) = ((rc_vec_t) {0})); ((a2) = ((rc_vec_t) {0})); ((a11) = ((rc_vec_t) {0})); ((a22) = ((rc_vec_t) {0})); ((a12) = ((rc_vec_t) {0})); (s1) += t1; (s2) += t2; (s11) += t11; (s22) += t22; (s12) += t12; } while (0);
++ }
++ sum[0] = s1;
++ sum[1] = s2;
++ sum[2] = s11;
++ sum[3] = s22;
++ sum[4] = s12;
++ ;
++}
+--- a/src/gcc/testsuite/gfortran.dg/implicit_pure_1.f90
++++ b/src/gcc/testsuite/gfortran.dg/implicit_pure_1.f90
+@@ -0,0 +1,53 @@
++! { dg-do run }
++!
++! PR fortran/51218
++!
++! Contributed by Harald Anlauf
++!
++
++module a
++ implicit none
++ integer :: neval = 0
++contains
++ subroutine inc_eval
++ neval = neval + 1
++ end subroutine inc_eval
++end module a
++
++module b
++ use a
++ implicit none
++contains
++ function f(x) ! Should be implicit pure
++ real :: f
++ real, intent(in) :: x
++ f = x
++ end function f
++
++ function g(x) ! Should NOT be implicit pure
++ real :: g
++ real, intent(in) :: x
++ call inc_eval
++ g = x
++ end function g
++end module b
++
++program gfcbug114a
++ use a
++ use b
++ implicit none
++ real :: x = 1, y = 1, t, u, v, w
++ if (neval /= 0) call abort ()
++ t = f(x)*f(y)
++ if (neval /= 0) call abort ()
++ u = f(x)*f(y) + f(x)*f(y)
++ if (neval /= 0) call abort ()
++ v = g(x)*g(y)
++ if (neval /= 2) call abort ()
++ w = g(x)*g(y) + g(x)*g(y)
++ if (neval /= 6) call abort ()
++ if (t /= 1.0 .or. u /= 2.0 .or. v /= 1.0 .or. w /= 2) call abort ()
++end program gfcbug114a
++
++! { dg-final { scan-module "b" "IMPLICIT_PURE" } }
++! { dg-final { cleanup-modules "b" } }
+--- a/src/gcc/testsuite/gfortran.dg/pr50875.f90
++++ b/src/gcc/testsuite/gfortran.dg/pr50875.f90
+@@ -0,0 +1,39 @@
++! { dg-do compile { target { i?86-*-* x86_64-*-* } } }
++! { dg-options "-O3 -mavx" }
++!
++! PR fortran/50875.f90
++
++module test
++
++ implicit none
++
++ integer, parameter :: dp=kind(1.d0)
++
++ integer :: P = 2
++
++ real(kind=dp), allocatable :: real_array_A(:),real_array_B(:,:)
++ complex(kind=dp), allocatable :: cmplx_array_A(:)
++
++contains
++
++ subroutine routine_A
++
++ integer :: i
++
++ allocate(cmplx_array_A(P),real_array_B(P,P),real_array_A(P))
++
++ real_array_A = 1
++ real_array_B = 1
++
++ do i = 1, p
++ cmplx_array_A = cmplx(real_array_B(:,i),0.0_dp,dp)
++ cmplx_array_A = cmplx_array_A * exp(cmplx(0.0_dp,real_array_A+1))
++ end do
++
++ deallocate(cmplx_array_A,real_array_B,real_array_A)
++
++ end subroutine routine_A
++
++end module test
++
++! { dg-final { cleanup-modules "test" } }
+--- a/src/gcc/testsuite/gfortran.dg/vect/pr19049.f90
++++ b/src/gcc/testsuite/gfortran.dg/vect/pr19049.f90
+@@ -19,6 +19,7 @@
+ end
+
+ ! { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } }
+-! { dg-final { scan-tree-dump-times "complicated access pattern" 1 "vect" } }
++! { dg-final { scan-tree-dump-times "complicated access pattern" 1 "vect" { xfail vect_multiple_sizes } } }
++! { dg-final { scan-tree-dump-times "complicated access pattern" 2 "vect" { target vect_multiple_sizes } } }
+ ! { dg-final { cleanup-tree-dump "vect" } }
+
+--- a/src/gcc/testsuite/gfortran.dg/whole_file_35.f90
++++ b/src/gcc/testsuite/gfortran.dg/whole_file_35.f90
+@@ -0,0 +1,28 @@
++! { dg-do compile }
++!
++! PR fortran/50408
++!
++! Contributed by Vittorio Zecca
++!
++ module m
++ type int
++ integer :: val
++ end type int
++ interface ichar
++ module procedure uch
++ end interface
++ contains
++ function uch (c)
++ character (len=1), intent (in) :: c
++ type (int) :: uch
++ intrinsic ichar
++ uch%val = 127 - ichar (c)
++ end function uch
++ end module m
++
++ program p
++ use m
++ print *,ichar('~') ! must print "1"
++ end program p
++
++! { dg-final { cleanup-modules "m" } }
+--- a/src/gcc/testsuite/lib/target-supports.exp
++++ b/src/gcc/testsuite/lib/target-supports.exp
+@@ -1894,6 +1894,18 @@
+ }]
+ }
+
++# Return 1 if this is an ARM target that supports unaligned word/halfword
++# load/store instructions.
++
++proc check_effective_target_arm_unaligned { } {
++ return [check_no_compiler_messages arm_unaligned assembly {
++ #ifndef __ARM_FEATURE_UNALIGNED
++ #error no unaligned support
++ #endif
++ int i;
++ }]
++}
++
+ # Add the options needed for NEON. We need either -mfloat-abi=softfp
+ # or -mfloat-abi=hard, but if one is already specified by the
+ # multilib, use it. Similarly, if a -mfpu option already enables
+@@ -1988,6 +2000,47 @@
+ check_effective_target_arm_fp16_ok_nocache]
+ }
+
++# Creates a series of routines that return 1 if the given architecture
++# can be selected and a routine to give the flags to select that architecture
++# Note: Extra flags may be added to disable options from newer compilers
++# (Thumb in particular - but others may be added in the future)
++# Usage: /* { dg-require-effective-target arm_arch_v5_ok } */
++# /* { dg-add-options arm_arch_v5 } */
++foreach { armfunc armflag armdef } { v5 "-march=armv5 -marm" __ARM_ARCH_5__
++ v6 "-march=armv6" __ARM_ARCH_6__
++ v6k "-march=armv6k" __ARM_ARCH_6K__
++ v7a "-march=armv7-a" __ARM_ARCH_7A__ } {
++ eval [string map [list FUNC $armfunc FLAG $armflag DEF $armdef ] {
++ proc check_effective_target_arm_arch_FUNC_ok { } {
++ if { [ string match "*-marm*" "FLAG" ] &&
++ ![check_effective_target_arm_arm_ok] } {
++ return 0
++ }
++ return [check_no_compiler_messages arm_arch_FUNC_ok assembly {
++ #if !defined (DEF)
++ #error FOO
++ #endif
++ } "FLAG" ]
++ }
++
++ proc add_options_for_arm_arch_FUNC { flags } {
++ return "$flags FLAG"
++ }
++ }]
++}
++
++# Return 1 if this is an ARM target where -marm causes ARM to be
++# used (not Thumb)
++
++proc check_effective_target_arm_arm_ok { } {
++ return [check_no_compiler_messages arm_arm_ok assembly {
++ #if !defined (__arm__) || defined (__thumb__) || defined (__thumb2__)
++ #error FOO
++ #endif
++ } "-marm"]
++}
++
++
+ # Return 1 is this is an ARM target where -mthumb causes Thumb-1 to be
+ # used.
+
+@@ -2338,6 +2391,26 @@
+ }
+
+
++# Return 1 if the target supports hardware vector shift operation for char.
++
++proc check_effective_target_vect_shift_char { } {
++ global et_vect_shift_char_saved
++
++ if [info exists et_vect_shift_char_saved] {
++ verbose "check_effective_target_vect_shift_char: using cached result" 2
++ } else {
++ set et_vect_shift_char_saved 0
++ if { ([istarget powerpc*-*-*]
++ && ![istarget powerpc-*-linux*paired*])
++ || [check_effective_target_arm32] } {
++ set et_vect_shift_char_saved 1
++ }
++ }
++
++ verbose "check_effective_target_vect_shift_char: returning $et_vect_shift_char_saved" 2
++ return $et_vect_shift_char_saved
++}
++
+ # Return 1 if the target supports hardware vectors of long, 0 otherwise.
+ #
+ # This can change for different subtargets so do not cache the result.
+@@ -2673,7 +2746,8 @@
+ } else {
+ set et_vect_widen_mult_qi_to_hi_saved 0
+ }
+- if { [istarget powerpc*-*-*] } {
++ if { [istarget powerpc*-*-*]
++ || ([istarget arm*-*-*] && [check_effective_target_arm_neon]) } {
+ set et_vect_widen_mult_qi_to_hi_saved 1
+ }
+ }
+@@ -2706,7 +2780,8 @@
+ || [istarget spu-*-*]
+ || [istarget ia64-*-*]
+ || [istarget i?86-*-*]
+- || [istarget x86_64-*-*] } {
++ || [istarget x86_64-*-*]
++ || ([istarget arm*-*-*] && [check_effective_target_arm_neon]) } {
+ set et_vect_widen_mult_hi_to_si_saved 1
+ }
+ }
+@@ -2715,6 +2790,72 @@
+ }
+
+ # Return 1 if the target plus current options supports a vector
++# widening multiplication of *char* args into *short* result, 0 otherwise.
++#
++# This won't change for different subtargets so cache the result.
++
++proc check_effective_target_vect_widen_mult_qi_to_hi_pattern { } {
++ global et_vect_widen_mult_qi_to_hi_pattern
++
++ if [info exists et_vect_widen_mult_qi_to_hi_pattern_saved] {
++ verbose "check_effective_target_vect_widen_mult_qi_to_hi_pattern: using cached result" 2
++ } else {
++ set et_vect_widen_mult_qi_to_hi_pattern_saved 0
++ if { [istarget powerpc*-*-*]
++ || ([istarget arm*-*-*] && [check_effective_target_arm_neon]) } {
++ set et_vect_widen_mult_qi_to_hi_pattern_saved 1
++ }
++ }
++ verbose "check_effective_target_vect_widen_mult_qi_to_hi_pattern: returning $et_vect_widen_mult_qi_to_hi_pattern_saved" 2
++ return $et_vect_widen_mult_qi_to_hi_pattern_saved
++}
++
++# Return 1 if the target plus current options supports a vector
++# widening multiplication of *short* args into *int* result, 0 otherwise.
++#
++# This won't change for different subtargets so cache the result.
++
++proc check_effective_target_vect_widen_mult_hi_to_si_pattern { } {
++ global et_vect_widen_mult_hi_to_si_pattern
++
++ if [info exists et_vect_widen_mult_hi_to_si_pattern_saved] {
++ verbose "check_effective_target_vect_widen_mult_hi_to_si_pattern: using cached result" 2
++ } else {
++ set et_vect_widen_mult_hi_to_si_pattern_saved 0
++ if { [istarget powerpc*-*-*]
++ || [istarget spu-*-*]
++ || [istarget ia64-*-*]
++ || [istarget i?86-*-*]
++ || [istarget x86_64-*-*]
++ || ([istarget arm*-*-*] && [check_effective_target_arm_neon]) } {
++ set et_vect_widen_mult_hi_to_si_pattern_saved 1
++ }
++ }
++ verbose "check_effective_target_vect_widen_mult_hi_to_si_pattern: returning $et_vect_widen_mult_hi_to_si_pattern_saved" 2
++ return $et_vect_widen_mult_hi_to_si_pattern_saved
++}
++
++# Return 1 if the target plus current options supports a vector
++# widening shift, 0 otherwise.
++#
++# This won't change for different subtargets so cache the result.
++
++proc check_effective_target_vect_widen_shift { } {
++ global et_vect_widen_shift_saved
++
++ if [info exists et_vect_shift_saved] {
++ verbose "check_effective_target_vect_widen_shift: using cached result" 2
++ } else {
++ set et_vect_widen_shift_saved 0
++ if { ([istarget arm*-*-*] && [check_effective_target_arm_neon_ok]) } {
++ set et_vect_widen_shift_saved 1
++ }
++ }
++ verbose "check_effective_target_vect_widen_shift: returning $et_vect_widen_shift_saved" 2
++ return $et_vect_widen_shift_saved
++}
++
++# Return 1 if the target plus current options supports a vector
+ # dot-product of signed chars, 0 otherwise.
+ #
+ # This won't change for different subtargets so cache the result.
+@@ -3050,7 +3191,8 @@
+ || [istarget ia64-*-*]
+ || [istarget i?86-*-*]
+ || [istarget spu-*-*]
+- || [istarget x86_64-*-*] } {
++ || [istarget x86_64-*-*]
++ || ([istarget arm*-*-*] && [check_effective_target_arm_neon_ok]) } {
+ set et_vect_cond_saved 1
+ }
+ }
+@@ -3149,29 +3291,6 @@
+ return $et_vect_extract_even_odd_saved
+ }
+
+-# Return 1 if the target supports vector even/odd elements extraction of
+-# vectors with SImode elements or larger, 0 otherwise.
+-
+-proc check_effective_target_vect_extract_even_odd_wide { } {
+- global et_vect_extract_even_odd_wide_saved
+-
+- if [info exists et_vect_extract_even_odd_wide_saved] {
+- verbose "check_effective_target_vect_extract_even_odd_wide: using cached result" 2
+- } else {
+- set et_vect_extract_even_odd_wide_saved 0
+- if { [istarget powerpc*-*-*]
+- || [istarget i?86-*-*]
+- || [istarget x86_64-*-*]
+- || [istarget ia64-*-*]
+- || [istarget spu-*-*] } {
+- set et_vect_extract_even_odd_wide_saved 1
+- }
+- }
+-
+- verbose "check_effective_target_vect_extract_even_wide_odd: returning $et_vect_extract_even_odd_wide_saved" 2
+- return $et_vect_extract_even_odd_wide_saved
+-}
+-
+ # Return 1 if the target supports vector interleaving, 0 otherwise.
+
+ proc check_effective_target_vect_interleave { } {
+@@ -3194,41 +3313,66 @@
+ return $et_vect_interleave_saved
+ }
+
+-# Return 1 if the target supports vector interleaving and extract even/odd, 0 otherwise.
+-proc check_effective_target_vect_strided { } {
+- global et_vect_strided_saved
++foreach N {2 3 4 8} {
++ eval [string map [list N $N] {
++ # Return 1 if the target supports 2-vector interleaving
++ proc check_effective_target_vect_stridedN { } {
++ global et_vect_stridedN_saved
+
+- if [info exists et_vect_strided_saved] {
+- verbose "check_effective_target_vect_strided: using cached result" 2
++ if [info exists et_vect_stridedN_saved] {
++ verbose "check_effective_target_vect_stridedN: using cached result" 2
++ } else {
++ set et_vect_stridedN_saved 0
++ if { (N & -N) == N
++ && [check_effective_target_vect_interleave]
++ && [check_effective_target_vect_extract_even_odd] } {
++ set et_vect_stridedN_saved 1
++ }
++ if { [istarget arm*-*-*] && N >= 2 && N <= 4 } {
++ set et_vect_stridedN_saved 1
++ }
++ }
++
++ verbose "check_effective_target_vect_stridedN: returning $et_vect_stridedN_saved" 2
++ return $et_vect_stridedN_saved
++ }
++ }]
++}
++
++# Return 1 if the target supports multiple vector sizes
++
++proc check_effective_target_vect_multiple_sizes { } {
++ global et_vect_multiple_sizes_saved
++
++ if [info exists et_vect_multiple_sizes_saved] {
++ verbose "check_effective_target_vect_multiple_sizes: using cached result" 2
+ } else {
+- set et_vect_strided_saved 0
+- if { [check_effective_target_vect_interleave]
+- && [check_effective_target_vect_extract_even_odd] } {
+- set et_vect_strided_saved 1
++ set et_vect_multiple_sizes_saved 0
++ if { ([istarget arm*-*-*] && [check_effective_target_arm_neon_ok]) } {
++ set et_vect_multiple_sizes_saved 1
+ }
+ }
+
+- verbose "check_effective_target_vect_strided: returning $et_vect_strided_saved" 2
+- return $et_vect_strided_saved
++ verbose "check_effective_target_vect_multiple_sizes: returning $et_vect_multiple_sizes_saved" 2
++ return $et_vect_multiple_sizes_saved
+ }
+
+-# Return 1 if the target supports vector interleaving and extract even/odd
+-# for wide element types, 0 otherwise.
+-proc check_effective_target_vect_strided_wide { } {
+- global et_vect_strided_wide_saved
++# Return 1 if the target supports vectors of 64 bits.
+
+- if [info exists et_vect_strided_wide_saved] {
+- verbose "check_effective_target_vect_strided_wide: using cached result" 2
++proc check_effective_target_vect64 { } {
++ global et_vect64_saved
++
++ if [info exists et_vect64_saved] {
++ verbose "check_effective_target_vect64: using cached result" 2
+ } else {
+- set et_vect_strided_wide_saved 0
+- if { [check_effective_target_vect_interleave]
+- && [check_effective_target_vect_extract_even_odd_wide] } {
+- set et_vect_strided_wide_saved 1
++ set et_vect64_saved 0
++ if { ([istarget arm*-*-*] && [check_effective_target_arm_neon_ok]) } {
++ set et_vect64_saved 1
+ }
+ }
+
+- verbose "check_effective_target_vect_strided_wide: returning $et_vect_strided_wide_saved" 2
+- return $et_vect_strided_wide_saved
++ verbose "check_effective_target_vect64: returning $et_vect64_saved" 2
++ return $et_vect64_saved
+ }
+
+ # Return 1 if the target supports section-anchors
+@@ -3281,6 +3425,31 @@
+ return $et_sync_int_long_saved
+ }
+
++# Return 1 if the target supports atomic operations on "long long" and can
++# execute them
++# So far only put checks in for ARM, others may want to add their own
++proc check_effective_target_sync_longlong { } {
++ return [check_runtime sync_longlong_runtime {
++ #include <stdlib.h>
++ int main ()
++ {
++ long long l1;
++
++ if (sizeof (long long) != 8)
++ exit (1);
++
++ #ifdef __arm__
++ /* Just check for native; checking for kernel fallback is tricky. */
++ asm volatile ("ldrexd r0,r1, [%0]" : : "r" (&l1) : "r0", "r1");
++ #else
++ # error "Add other suitable archs here"
++ #endif
++
++ exit (0);
++ }
++ } "" ]
++}
++
+ # Return 1 if the target supports atomic operations on "char" and "short".
+
+ proc check_effective_target_sync_char_short { } {
+@@ -3614,11 +3783,11 @@
+ return $flags
+ }
+
+-# Add to FLAGS the flags needed to enable 128-bit vectors.
++# Add to FLAGS the flags needed to enable 64-bit vectors.
+
+-proc add_options_for_quad_vectors { flags } {
++proc add_options_for_double_vectors { flags } {
+ if [is-effective-target arm_neon_ok] {
+- return "$flags -mvectorize-with-neon-quad"
++ return "$flags -mvectorize-with-neon-double"
+ }
+
+ return $flags
+--- a/src/gcc/tree-cfg.c
++++ b/src/gcc/tree-cfg.c
+@@ -3046,7 +3046,26 @@
+ tree fntype;
+ unsigned i;
+
+- if (TREE_CODE (fn) != OBJ_TYPE_REF
++ if (gimple_call_internal_p (stmt))
++ {
++ if (fn)
++ {
++ error ("gimple call has two targets");
++ debug_generic_stmt (fn);
++ return true;
++ }
++ }
++ else
++ {
++ if (!fn)
++ {
++ error ("gimple call has no target");
++ return true;
++ }
++ }
++
++ if (fn
++ && TREE_CODE (fn) != OBJ_TYPE_REF
+ && !is_gimple_val (fn))
+ {
+ error ("invalid function in gimple call");
+@@ -3054,9 +3073,10 @@
+ return true;
+ }
+
+- if (!POINTER_TYPE_P (TREE_TYPE (fn))
+- || (TREE_CODE (TREE_TYPE (TREE_TYPE (fn))) != FUNCTION_TYPE
+- && TREE_CODE (TREE_TYPE (TREE_TYPE (fn))) != METHOD_TYPE))
++ if (fn
++ && (!POINTER_TYPE_P (TREE_TYPE (fn))
++ || (TREE_CODE (TREE_TYPE (TREE_TYPE (fn))) != FUNCTION_TYPE
++ && TREE_CODE (TREE_TYPE (TREE_TYPE (fn))) != METHOD_TYPE)))
+ {
+ error ("non-function in gimple call");
+ return true;
+@@ -3076,8 +3096,12 @@
+ return true;
+ }
+
+- fntype = TREE_TYPE (TREE_TYPE (fn));
+- if (gimple_call_lhs (stmt)
++ if (fn)
++ fntype = TREE_TYPE (TREE_TYPE (fn));
++ else
++ fntype = NULL_TREE;
++ if (fntype
++ && gimple_call_lhs (stmt)
+ && !useless_type_conversion_p (TREE_TYPE (gimple_call_lhs (stmt)),
+ TREE_TYPE (fntype))
+ /* ??? At least C++ misses conversions at assignments from
+@@ -3449,6 +3473,44 @@
+ return false;
+ }
+
++ case WIDEN_LSHIFT_EXPR:
++ {
++ if (!INTEGRAL_TYPE_P (lhs_type)
++ || !INTEGRAL_TYPE_P (rhs1_type)
++ || TREE_CODE (rhs2) != INTEGER_CST
++ || (2 * TYPE_PRECISION (rhs1_type) > TYPE_PRECISION (lhs_type)))
++ {
++ error ("type mismatch in widening vector shift expression");
++ debug_generic_expr (lhs_type);
++ debug_generic_expr (rhs1_type);
++ debug_generic_expr (rhs2_type);
++ return true;
++ }
++
++ return false;
++ }
++
++ case VEC_WIDEN_LSHIFT_HI_EXPR:
++ case VEC_WIDEN_LSHIFT_LO_EXPR:
++ {
++ if (TREE_CODE (rhs1_type) != VECTOR_TYPE
++ || TREE_CODE (lhs_type) != VECTOR_TYPE
++ || !INTEGRAL_TYPE_P (TREE_TYPE (rhs1_type))
++ || !INTEGRAL_TYPE_P (TREE_TYPE (lhs_type))
++ || TREE_CODE (rhs2) != INTEGER_CST
++ || (2 * TYPE_PRECISION (TREE_TYPE (rhs1_type))
++ > TYPE_PRECISION (TREE_TYPE (lhs_type))))
++ {
++ error ("type mismatch in widening vector shift expression");
++ debug_generic_expr (lhs_type);
++ debug_generic_expr (rhs1_type);
++ debug_generic_expr (rhs2_type);
++ return true;
++ }
++
++ return false;
++ }
++
+ case PLUS_EXPR:
+ case MINUS_EXPR:
+ {
+@@ -3550,7 +3612,7 @@
+ case WIDEN_MULT_EXPR:
+ if (TREE_CODE (lhs_type) != INTEGER_TYPE)
+ return true;
+- return ((2 * TYPE_PRECISION (rhs1_type) != TYPE_PRECISION (lhs_type))
++ return ((2 * TYPE_PRECISION (rhs1_type) > TYPE_PRECISION (lhs_type))
+ || (TYPE_PRECISION (rhs1_type) != TYPE_PRECISION (rhs2_type)));
+
+ case WIDEN_SUM_EXPR:
+@@ -3643,7 +3705,7 @@
+ && !FIXED_POINT_TYPE_P (rhs1_type))
+ || !useless_type_conversion_p (rhs1_type, rhs2_type)
+ || !useless_type_conversion_p (lhs_type, rhs3_type)
+- || 2 * TYPE_PRECISION (rhs1_type) != TYPE_PRECISION (lhs_type)
++ || 2 * TYPE_PRECISION (rhs1_type) > TYPE_PRECISION (lhs_type)
+ || TYPE_PRECISION (rhs1_type) != TYPE_PRECISION (rhs2_type))
+ {
+ error ("type mismatch in widening multiply-accumulate expression");
+@@ -4130,9 +4192,10 @@
+ didn't see a function declaration before the call. */
+ if (is_gimple_call (stmt))
+ {
+- tree decl;
++ tree fn, decl;
+
+- if (!is_gimple_call_addr (gimple_call_fn (stmt)))
++ fn = gimple_call_fn (stmt);
++ if (fn && !is_gimple_call_addr (fn))
+ {
+ error ("invalid function in call statement");
+ return true;
+@@ -7503,6 +7566,8 @@
+ case GIMPLE_CALL:
+ if (gimple_call_lhs (g))
+ break;
++ if (gimple_call_internal_p (g))
++ break;
+
+ /* This is a naked call, as opposed to a GIMPLE_CALL with an
+ LHS. All calls whose value is ignored should be
+--- a/src/gcc/tree-data-ref.c
++++ b/src/gcc/tree-data-ref.c
+@@ -721,11 +721,11 @@
+ }
+
+ /* Analyzes the behavior of the memory reference DR in the innermost loop or
+- basic block that contains it. Returns true if analysis succeed or false
++ basic block that contains it. Returns true if analysis succeed or false
+ otherwise. */
+
+ bool
+-dr_analyze_innermost (struct data_reference *dr)
++dr_analyze_innermost (struct data_reference *dr, struct loop *nest)
+ {
+ gimple stmt = DR_STMT (dr);
+ struct loop *loop = loop_containing_stmt (stmt);
+@@ -768,14 +768,25 @@
+ }
+ else
+ base = build_fold_addr_expr (base);
++
+ if (in_loop)
+ {
+ if (!simple_iv (loop, loop_containing_stmt (stmt), base, &base_iv,
+ false))
+ {
+- if (dump_file && (dump_flags & TDF_DETAILS))
+- fprintf (dump_file, "failed: evolution of base is not affine.\n");
+- return false;
++ if (nest)
++ {
++ if (dump_file && (dump_flags & TDF_DETAILS))
++ fprintf (dump_file, "failed: evolution of base is not"
++ " affine.\n");
++ return false;
++ }
++ else
++ {
++ base_iv.base = base;
++ base_iv.step = ssize_int (0);
++ base_iv.no_overflow = true;
++ }
+ }
+ }
+ else
+@@ -800,10 +811,18 @@
+ else if (!simple_iv (loop, loop_containing_stmt (stmt),
+ poffset, &offset_iv, false))
+ {
+- if (dump_file && (dump_flags & TDF_DETAILS))
+- fprintf (dump_file, "failed: evolution of offset is not"
+- " affine.\n");
+- return false;
++ if (nest)
++ {
++ if (dump_file && (dump_flags & TDF_DETAILS))
++ fprintf (dump_file, "failed: evolution of offset is not"
++ " affine.\n");
++ return false;
++ }
++ else
++ {
++ offset_iv.base = poffset;
++ offset_iv.step = ssize_int (0);
++ }
+ }
+ }
+
+@@ -967,7 +986,7 @@
+ DR_REF (dr) = memref;
+ DR_IS_READ (dr) = is_read;
+
+- dr_analyze_innermost (dr);
++ dr_analyze_innermost (dr, nest);
+ dr_analyze_indices (dr, nest, loop);
+ dr_analyze_alias (dr);
+
+@@ -991,6 +1010,48 @@
+ return dr;
+ }
+
++/* Check if OFFSET1 and OFFSET2 (DR_OFFSETs of some data-refs) are identical
++ expressions. */
++static bool
++dr_equal_offsets_p1 (tree offset1, tree offset2)
++{
++ bool res;
++
++ STRIP_NOPS (offset1);
++ STRIP_NOPS (offset2);
++
++ if (offset1 == offset2)
++ return true;
++
++ if (TREE_CODE (offset1) != TREE_CODE (offset2)
++ || (!BINARY_CLASS_P (offset1) && !UNARY_CLASS_P (offset1)))
++ return false;
++
++ res = dr_equal_offsets_p1 (TREE_OPERAND (offset1, 0),
++ TREE_OPERAND (offset2, 0));
++
++ if (!res || !BINARY_CLASS_P (offset1))
++ return res;
++
++ res = dr_equal_offsets_p1 (TREE_OPERAND (offset1, 1),
++ TREE_OPERAND (offset2, 1));
++
++ return res;
++}
++
++/* Check if DRA and DRB have equal offsets. */
++bool
++dr_equal_offsets_p (struct data_reference *dra,
++ struct data_reference *drb)
++{
++ tree offset1, offset2;
++
++ offset1 = DR_OFFSET (dra);
++ offset2 = DR_OFFSET (drb);
++
++ return dr_equal_offsets_p1 (offset1, offset2);
++}
++
+ /* Returns true if FNA == FNB. */
+
+ static bool
+@@ -4294,7 +4355,7 @@
+ DATAREFS. Returns chrec_dont_know when failing to analyze a
+ difficult case, returns NULL_TREE otherwise. */
+
+-static tree
++tree
+ find_data_references_in_bb (struct loop *loop, basic_block bb,
+ VEC (data_reference_p, heap) **datarefs)
+ {
+@@ -5143,7 +5204,7 @@
+ DR_STMT (dr) = stmt;
+ DR_REF (dr) = op0;
+
+- res = dr_analyze_innermost (dr)
++ res = dr_analyze_innermost (dr, loop_containing_stmt (stmt))
+ && stride_of_unit_type_p (DR_STEP (dr), TREE_TYPE (op0));
+
+ free_data_ref (dr);
+@@ -5183,7 +5244,7 @@
+
+ DR_STMT (dr) = stmt;
+ DR_REF (dr) = *ref->pos;
+- dr_analyze_innermost (dr);
++ dr_analyze_innermost (dr, loop_containing_stmt (stmt));
+ base_address = DR_BASE_ADDRESS (dr);
+
+ if (!base_address)
+--- a/src/gcc/tree-data-ref.h
++++ b/src/gcc/tree-data-ref.h
+@@ -386,7 +386,7 @@
+ DEF_VEC_ALLOC_O (data_ref_loc, heap);
+
+ bool get_references_in_stmt (gimple, VEC (data_ref_loc, heap) **);
+-bool dr_analyze_innermost (struct data_reference *);
++bool dr_analyze_innermost (struct data_reference *, struct loop *);
+ extern bool compute_data_dependences_for_loop (struct loop *, bool,
+ VEC (loop_p, heap) **,
+ VEC (data_reference_p, heap) **,
+@@ -426,10 +426,14 @@
+ extern void compute_all_dependences (VEC (data_reference_p, heap) *,
+ VEC (ddr_p, heap) **, VEC (loop_p, heap) *,
+ bool);
++extern tree find_data_references_in_bb (struct loop *, basic_block,
++ VEC (data_reference_p, heap) **);
+
+ extern void create_rdg_vertices (struct graph *, VEC (gimple, heap) *);
+ extern bool dr_may_alias_p (const struct data_reference *,
+ const struct data_reference *);
++extern bool dr_equal_offsets_p (struct data_reference *,
++ struct data_reference *);
+
+
+ /* Return true when the base objects of data references A and B are
+--- a/src/gcc/tree-eh.c
++++ b/src/gcc/tree-eh.c
+@@ -2752,7 +2752,7 @@
+ || gimple_call_lhs (twos)
+ || gimple_call_chain (ones)
+ || gimple_call_chain (twos)
+- || !operand_equal_p (gimple_call_fn (ones), gimple_call_fn (twos), 0)
++ || !gimple_call_same_target_p (ones, twos)
+ || gimple_call_num_args (ones) != gimple_call_num_args (twos))
+ return false;
+
+--- a/src/gcc/tree-if-conv.c
++++ b/src/gcc/tree-if-conv.c
+@@ -464,8 +464,8 @@
+ /* Returns true when the memory references of STMT are read or written
+ unconditionally. In other words, this function returns true when
+ for every data reference A in STMT there exist other accesses to
+- the same data reference with predicates that add up (OR-up) to the
+- true predicate: this ensures that the data reference A is touched
++ a data reference with the same base with predicates that add up (OR-up) to
++ the true predicate: this ensures that the data reference A is touched
+ (read or written) on every iteration of the if-converted loop. */
+
+ static bool
+@@ -489,21 +489,38 @@
+ continue;
+
+ for (j = 0; VEC_iterate (data_reference_p, drs, j, b); j++)
+- if (DR_STMT (b) != stmt
+- && same_data_refs (a, b))
+- {
+- tree cb = bb_predicate (gimple_bb (DR_STMT (b)));
+-
+- if (DR_RW_UNCONDITIONALLY (b) == 1
+- || is_true_predicate (cb)
+- || is_true_predicate (ca = fold_or_predicates (EXPR_LOCATION (cb),
+- ca, cb)))
+- {
+- DR_RW_UNCONDITIONALLY (a) = 1;
+- DR_RW_UNCONDITIONALLY (b) = 1;
+- found = true;
+- break;
+- }
++ {
++ tree ref_base_a = DR_REF (a);
++ tree ref_base_b = DR_REF (b);
++
++ if (DR_STMT (b) == stmt)
++ continue;
++
++ while (TREE_CODE (ref_base_a) == COMPONENT_REF
++ || TREE_CODE (ref_base_a) == IMAGPART_EXPR
++ || TREE_CODE (ref_base_a) == REALPART_EXPR)
++ ref_base_a = TREE_OPERAND (ref_base_a, 0);
++
++ while (TREE_CODE (ref_base_b) == COMPONENT_REF
++ || TREE_CODE (ref_base_b) == IMAGPART_EXPR
++ || TREE_CODE (ref_base_b) == REALPART_EXPR)
++ ref_base_b = TREE_OPERAND (ref_base_b, 0);
++
++ if (!operand_equal_p (ref_base_a, ref_base_b, 0))
++ {
++ tree cb = bb_predicate (gimple_bb (DR_STMT (b)));
++
++ if (DR_RW_UNCONDITIONALLY (b) == 1
++ || is_true_predicate (cb)
++ || is_true_predicate (ca
++ = fold_or_predicates (EXPR_LOCATION (cb), ca, cb)))
++ {
++ DR_RW_UNCONDITIONALLY (a) = 1;
++ DR_RW_UNCONDITIONALLY (b) = 1;
++ found = true;
++ break;
++ }
++ }
+ }
+
+ if (!found)
+--- a/src/gcc/tree-inline.c
++++ b/src/gcc/tree-inline.c
+@@ -3343,6 +3343,7 @@
+ case DOT_PROD_EXPR:
+ case WIDEN_MULT_PLUS_EXPR:
+ case WIDEN_MULT_MINUS_EXPR:
++ case WIDEN_LSHIFT_EXPR:
+
+ case VEC_WIDEN_MULT_HI_EXPR:
+ case VEC_WIDEN_MULT_LO_EXPR:
+@@ -3357,6 +3358,8 @@
+ case VEC_EXTRACT_ODD_EXPR:
+ case VEC_INTERLEAVE_HIGH_EXPR:
+ case VEC_INTERLEAVE_LOW_EXPR:
++ case VEC_WIDEN_LSHIFT_HI_EXPR:
++ case VEC_WIDEN_LSHIFT_LO_EXPR:
+
+ return 1;
+
+@@ -3474,10 +3477,13 @@
+ {
+ tree decl = gimple_call_fndecl (stmt);
+ tree addr = gimple_call_fn (stmt);
+- tree funtype = TREE_TYPE (addr);
++ tree funtype = NULL_TREE;
+ bool stdarg = false;
+
+- if (POINTER_TYPE_P (funtype))
++ if (addr)
++ funtype = TREE_TYPE (addr);
++
++ if (funtype && POINTER_TYPE_P (funtype))
+ funtype = TREE_TYPE (funtype);
+
+ /* Do not special case builtins where we see the body.
+@@ -3517,7 +3523,7 @@
+ if (decl)
+ funtype = TREE_TYPE (decl);
+
+- if (!VOID_TYPE_P (TREE_TYPE (funtype)))
++ if (funtype && !VOID_TYPE_P (TREE_TYPE (funtype)))
+ cost += estimate_move_cost (TREE_TYPE (funtype));
+
+ if (funtype)
+--- a/src/gcc/tree-loop-distribution.c
++++ b/src/gcc/tree-loop-distribution.c
+@@ -267,7 +267,7 @@
+
+ DR_STMT (dr) = stmt;
+ DR_REF (dr) = op0;
+- res = dr_analyze_innermost (dr);
++ res = dr_analyze_innermost (dr, loop_containing_stmt (stmt));
+ gcc_assert (res && stride_of_unit_type_p (DR_STEP (dr), TREE_TYPE (op0)));
+
+ nb_bytes = build_size_arg_loc (loc, nb_iter, op0, &stmt_list);
+--- a/src/gcc/tree-object-size.c
++++ b/src/gcc/tree-object-size.c
+@@ -175,7 +175,7 @@
+ unsigned HOST_WIDE_INT sz;
+
+ if (!osi || (object_size_type & 1) != 0
+- || TREE_CODE (pt_var) != SSA_NAME)
++ || TREE_CODE (TREE_OPERAND (pt_var, 0)) != SSA_NAME)
+ {
+ sz = compute_builtin_object_size (TREE_OPERAND (pt_var, 0),
+ object_size_type & ~1);
+--- a/src/gcc/tree-predcom.c
++++ b/src/gcc/tree-predcom.c
+@@ -1114,7 +1114,7 @@
+ memset (&init_dr, 0, sizeof (struct data_reference));
+ DR_REF (&init_dr) = init_ref;
+ DR_STMT (&init_dr) = phi;
+- if (!dr_analyze_innermost (&init_dr))
++ if (!dr_analyze_innermost (&init_dr, loop))
+ return NULL;
+
+ if (!valid_initializer_p (&init_dr, ref->distance + 1, root->ref))
+--- a/src/gcc/tree-pretty-print.c
++++ b/src/gcc/tree-pretty-print.c
+@@ -1539,6 +1539,7 @@
+ case RROTATE_EXPR:
+ case VEC_LSHIFT_EXPR:
+ case VEC_RSHIFT_EXPR:
++ case WIDEN_LSHIFT_EXPR:
+ case BIT_IOR_EXPR:
+ case BIT_XOR_EXPR:
+ case BIT_AND_EXPR:
+@@ -2209,6 +2210,22 @@
+ pp_string (buffer, " > ");
+ break;
+
++ case VEC_WIDEN_LSHIFT_HI_EXPR:
++ pp_string (buffer, " VEC_WIDEN_LSHIFT_HI_EXPR < ");
++ dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
++ pp_string (buffer, ", ");
++ dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false);
++ pp_string (buffer, " > ");
++ break;
++
++ case VEC_WIDEN_LSHIFT_LO_EXPR:
++ pp_string (buffer, " VEC_WIDEN_LSHIFT_HI_EXPR < ");
++ dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
++ pp_string (buffer, ", ");
++ dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false);
++ pp_string (buffer, " > ");
++ break;
++
+ case VEC_UNPACK_HI_EXPR:
+ pp_string (buffer, " VEC_UNPACK_HI_EXPR < ");
+ dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
+@@ -2531,6 +2548,9 @@
+ case RSHIFT_EXPR:
+ case LROTATE_EXPR:
+ case RROTATE_EXPR:
++ case VEC_WIDEN_LSHIFT_HI_EXPR:
++ case VEC_WIDEN_LSHIFT_LO_EXPR:
++ case WIDEN_LSHIFT_EXPR:
+ return 11;
+
+ case WIDEN_SUM_EXPR:
+@@ -2706,6 +2726,9 @@
+ case VEC_RSHIFT_EXPR:
+ return "v>>";
+
++ case WIDEN_LSHIFT_EXPR:
++ return "w<<";
++
+ case POINTER_PLUS_EXPR:
+ return "+";
+
+--- a/src/gcc/tree-ssa-ccp.c
++++ b/src/gcc/tree-ssa-ccp.c
+@@ -522,10 +522,6 @@
+ val = bit_value_binop (PLUS_EXPR, TREE_TYPE (expr),
+ TREE_OPERAND (base, 0), TREE_OPERAND (base, 1));
+ else if (base
+- /* ??? While function decls have DECL_ALIGN their addresses
+- may encode extra information in the lower bits on some
+- targets (PR47239). Simply punt for function decls for now. */
+- && TREE_CODE (base) != FUNCTION_DECL
+ && ((align = get_object_alignment (base, BIGGEST_ALIGNMENT))
+ > BITS_PER_UNIT))
+ {
+@@ -1279,7 +1275,10 @@
+
+ case GIMPLE_CALL:
+ {
+- tree fn = valueize_op (gimple_call_fn (stmt));
++ tree fn = gimple_call_fn (stmt);
++ if (!fn)
++ return NULL_TREE;
++ fn = valueize_op (fn);
+ if (TREE_CODE (fn) == ADDR_EXPR
+ && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
+ && DECL_BUILT_IN (TREE_OPERAND (fn, 0)))
+@@ -2317,6 +2316,11 @@
+ return true;
+ }
+
++ /* Internal calls provide no argument types, so the extra laxity
++ for normal calls does not apply. */
++ if (gimple_call_internal_p (stmt))
++ return false;
++
+ /* Propagate into the call arguments. Compared to replace_uses_in
+ this can use the argument slot types for type verification
+ instead of the current argument type. We also can safely
+--- a/src/gcc/tree-ssa-dom.c
++++ b/src/gcc/tree-ssa-dom.c
+@@ -64,7 +64,7 @@
+ struct { enum tree_code op; tree opnd; } unary;
+ struct { enum tree_code op; tree opnd0, opnd1; } binary;
+ struct { enum tree_code op; tree opnd0, opnd1, opnd2; } ternary;
+- struct { tree fn; bool pure; size_t nargs; tree *args; } call;
++ struct { gimple fn_from; bool pure; size_t nargs; tree *args; } call;
+ } ops;
+ };
+
+@@ -257,7 +257,7 @@
+
+ expr->type = TREE_TYPE (gimple_call_lhs (stmt));
+ expr->kind = EXPR_CALL;
+- expr->ops.call.fn = gimple_call_fn (stmt);
++ expr->ops.call.fn_from = stmt;
+
+ if (gimple_call_flags (stmt) & (ECF_CONST | ECF_PURE))
+ expr->ops.call.pure = true;
+@@ -421,8 +421,8 @@
+
+ /* If the calls are to different functions, then they
+ clearly cannot be equal. */
+- if (! operand_equal_p (expr0->ops.call.fn,
+- expr1->ops.call.fn, 0))
++ if (!gimple_call_same_target_p (expr0->ops.call.fn_from,
++ expr1->ops.call.fn_from))
+ return false;
+
+ if (! expr0->ops.call.pure)
+@@ -502,9 +502,15 @@
+ {
+ size_t i;
+ enum tree_code code = CALL_EXPR;
++ gimple fn_from;
+
+ val = iterative_hash_object (code, val);
+- val = iterative_hash_expr (expr->ops.call.fn, val);
++ fn_from = expr->ops.call.fn_from;
++ if (gimple_call_internal_p (fn_from))
++ val = iterative_hash_hashval_t
++ ((hashval_t) gimple_call_internal_fn (fn_from), val);
++ else
++ val = iterative_hash_expr (gimple_call_fn (fn_from), val);
+ for (i = 0; i < expr->ops.call.nargs; i++)
+ val = iterative_hash_expr (expr->ops.call.args[i], val);
+ }
+@@ -564,8 +570,14 @@
+ {
+ size_t i;
+ size_t nargs = element->expr.ops.call.nargs;
++ gimple fn_from;
+
+- print_generic_expr (stream, element->expr.ops.call.fn, 0);
++ fn_from = element->expr.ops.call.fn_from;
++ if (gimple_call_internal_p (fn_from))
++ fputs (internal_fn_name (gimple_call_internal_fn (fn_from)),
++ stream);
++ else
++ print_generic_expr (stream, gimple_call_fn (fn_from), 0);
+ fprintf (stream, " (");
+ for (i = 0; i < nargs; i++)
+ {
+--- a/src/gcc/tree-ssa-math-opts.c
++++ b/src/gcc/tree-ssa-math-opts.c
+@@ -1266,39 +1266,67 @@
+ }
+ };
+
+-/* Return true if RHS is a suitable operand for a widening multiplication.
++/* Build a gimple assignment to cast VAL to TARGET. Insert the statement
++ prior to GSI's current position, and return the fresh SSA name. */
++
++static tree
++build_and_insert_cast (gimple_stmt_iterator *gsi, location_t loc,
++ tree target, tree val)
++{
++ tree result = make_ssa_name (target, NULL);
++ gimple stmt = gimple_build_assign_with_ops (CONVERT_EXPR, result, val, NULL);
++ gimple_set_location (stmt, loc);
++ gsi_insert_before (gsi, stmt, GSI_SAME_STMT);
++ return result;
++}
++
++/* Return true if RHS is a suitable operand for a widening multiplication,
++ assuming a target type of TYPE.
+ There are two cases:
+
+- - RHS makes some value twice as wide. Store that value in *NEW_RHS_OUT
+- if so, and store its type in *TYPE_OUT.
++ - RHS makes some value at least twice as wide. Store that value
++ in *NEW_RHS_OUT if so, and store its type in *TYPE_OUT.
+
+ - RHS is an integer constant. Store that value in *NEW_RHS_OUT if so,
+ but leave *TYPE_OUT untouched. */
+
+ static bool
+-is_widening_mult_rhs_p (tree rhs, tree *type_out, tree *new_rhs_out)
++is_widening_mult_rhs_p (tree type, tree rhs, tree *type_out,
++ tree *new_rhs_out)
+ {
+ gimple stmt;
+- tree type, type1, rhs1;
++ tree type1, rhs1;
+ enum tree_code rhs_code;
+
+ if (TREE_CODE (rhs) == SSA_NAME)
+ {
+- type = TREE_TYPE (rhs);
+ stmt = SSA_NAME_DEF_STMT (rhs);
+- if (!is_gimple_assign (stmt))
+- return false;
++ if (is_gimple_assign (stmt))
++ {
++ rhs_code = gimple_assign_rhs_code (stmt);
++ if (TREE_CODE (type) == INTEGER_TYPE
++ ? !CONVERT_EXPR_CODE_P (rhs_code)
++ : rhs_code != FIXED_CONVERT_EXPR)
++ rhs1 = rhs;
++ else
++ {
++ rhs1 = gimple_assign_rhs1 (stmt);
+
+- rhs_code = gimple_assign_rhs_code (stmt);
+- if (TREE_CODE (type) == INTEGER_TYPE
+- ? !CONVERT_EXPR_CODE_P (rhs_code)
+- : rhs_code != FIXED_CONVERT_EXPR)
+- return false;
++ if (TREE_CODE (rhs1) == INTEGER_CST)
++ {
++ *new_rhs_out = rhs1;
++ *type_out = NULL;
++ return true;
++ }
++ }
++ }
++ else
++ rhs1 = rhs;
+
+- rhs1 = gimple_assign_rhs1 (stmt);
+ type1 = TREE_TYPE (rhs1);
++
+ if (TREE_CODE (type1) != TREE_CODE (type)
+- || TYPE_PRECISION (type1) * 2 != TYPE_PRECISION (type))
++ || TYPE_PRECISION (type1) * 2 > TYPE_PRECISION (type))
+ return false;
+
+ *new_rhs_out = rhs1;
+@@ -1316,28 +1344,29 @@
+ return false;
+ }
+
+-/* Return true if STMT performs a widening multiplication. If so,
+- store the unwidened types of the operands in *TYPE1_OUT and *TYPE2_OUT
+- respectively. Also fill *RHS1_OUT and *RHS2_OUT such that converting
+- those operands to types *TYPE1_OUT and *TYPE2_OUT would give the
+- operands of the multiplication. */
++/* Return true if STMT performs a widening multiplication, assuming the
++ output type is TYPE. If so, store the unwidened types of the operands
++ in *TYPE1_OUT and *TYPE2_OUT respectively. Also fill *RHS1_OUT and
++ *RHS2_OUT such that converting those operands to types *TYPE1_OUT
++ and *TYPE2_OUT would give the operands of the multiplication. */
+
+ static bool
+ is_widening_mult_p (gimple stmt,
+ tree *type1_out, tree *rhs1_out,
+ tree *type2_out, tree *rhs2_out)
+ {
+- tree type;
++ tree type = TREE_TYPE (gimple_assign_lhs (stmt));
+
+- type = TREE_TYPE (gimple_assign_lhs (stmt));
+ if (TREE_CODE (type) != INTEGER_TYPE
+ && TREE_CODE (type) != FIXED_POINT_TYPE)
+ return false;
+
+- if (!is_widening_mult_rhs_p (gimple_assign_rhs1 (stmt), type1_out, rhs1_out))
++ if (!is_widening_mult_rhs_p (type, gimple_assign_rhs1 (stmt), type1_out,
++ rhs1_out))
+ return false;
+
+- if (!is_widening_mult_rhs_p (gimple_assign_rhs2 (stmt), type2_out, rhs2_out))
++ if (!is_widening_mult_rhs_p (type, gimple_assign_rhs2 (stmt), type2_out,
++ rhs2_out))
+ return false;
+
+ if (*type1_out == NULL)
+@@ -1354,6 +1383,18 @@
+ *type2_out = *type1_out;
+ }
+
++ /* Ensure that the larger of the two operands comes first. */
++ if (TYPE_PRECISION (*type1_out) < TYPE_PRECISION (*type2_out))
++ {
++ tree tmp;
++ tmp = *type1_out;
++ *type1_out = *type2_out;
++ *type2_out = tmp;
++ tmp = *rhs1_out;
++ *rhs1_out = *rhs2_out;
++ *rhs2_out = tmp;
++ }
++
+ return true;
+ }
+
+@@ -1362,10 +1403,15 @@
+ value is true iff we converted the statement. */
+
+ static bool
+-convert_mult_to_widen (gimple stmt)
++convert_mult_to_widen (gimple stmt, gimple_stmt_iterator *gsi)
+ {
+- tree lhs, rhs1, rhs2, type, type1, type2;
++ tree lhs, rhs1, rhs2, type, type1, type2, tmp = NULL;
+ enum insn_code handler;
++ enum machine_mode to_mode, from_mode, actual_mode;
++ optab op;
++ int actual_precision;
++ location_t loc = gimple_location (stmt);
++ bool from_unsigned1, from_unsigned2;
+
+ lhs = gimple_assign_lhs (stmt);
+ type = TREE_TYPE (lhs);
+@@ -1375,18 +1421,82 @@
+ if (!is_widening_mult_p (stmt, &type1, &rhs1, &type2, &rhs2))
+ return false;
+
+- if (TYPE_UNSIGNED (type1) && TYPE_UNSIGNED (type2))
+- handler = optab_handler (umul_widen_optab, TYPE_MODE (type));
+- else if (!TYPE_UNSIGNED (type1) && !TYPE_UNSIGNED (type2))
+- handler = optab_handler (smul_widen_optab, TYPE_MODE (type));
++ to_mode = TYPE_MODE (type);
++ from_mode = TYPE_MODE (type1);
++ from_unsigned1 = TYPE_UNSIGNED (type1);
++ from_unsigned2 = TYPE_UNSIGNED (type2);
++
++ if (from_unsigned1 && from_unsigned2)
++ op = umul_widen_optab;
++ else if (!from_unsigned1 && !from_unsigned2)
++ op = smul_widen_optab;
+ else
+- handler = optab_handler (usmul_widen_optab, TYPE_MODE (type));
++ op = usmul_widen_optab;
++
++ handler = find_widening_optab_handler_and_mode (op, to_mode, from_mode,
++ 0, &actual_mode);
+
+ if (handler == CODE_FOR_nothing)
+- return false;
++ {
++ if (op != smul_widen_optab)
++ {
++ /* We can use a signed multiply with unsigned types as long as
++ there is a wider mode to use, or it is the smaller of the two
++ types that is unsigned. Note that type1 >= type2, always. */
++ if ((TYPE_UNSIGNED (type1)
++ && TYPE_PRECISION (type1) == GET_MODE_PRECISION (from_mode))
++ || (TYPE_UNSIGNED (type2)
++ && TYPE_PRECISION (type2) == GET_MODE_PRECISION (from_mode)))
++ {
++ from_mode = GET_MODE_WIDER_MODE (from_mode);
++ if (GET_MODE_SIZE (to_mode) <= GET_MODE_SIZE (from_mode))
++ return false;
++ }
++
++ op = smul_widen_optab;
++ handler = find_widening_optab_handler_and_mode (op, to_mode,
++ from_mode, 0,
++ &actual_mode);
++
++ if (handler == CODE_FOR_nothing)
++ return false;
+
+- gimple_assign_set_rhs1 (stmt, fold_convert (type1, rhs1));
+- gimple_assign_set_rhs2 (stmt, fold_convert (type2, rhs2));
++ from_unsigned1 = from_unsigned2 = false;
++ }
++ else
++ return false;
++ }
++
++ /* Ensure that the inputs to the handler are in the correct precison
++ for the opcode. This will be the full mode size. */
++ actual_precision = GET_MODE_PRECISION (actual_mode);
++ if (actual_precision != TYPE_PRECISION (type1)
++ || from_unsigned1 != TYPE_UNSIGNED (type1))
++ {
++ tmp = create_tmp_var (build_nonstandard_integer_type
++ (actual_precision, from_unsigned1),
++ NULL);
++ rhs1 = build_and_insert_cast (gsi, loc, tmp, rhs1);
++ }
++ if (actual_precision != TYPE_PRECISION (type2)
++ || from_unsigned2 != TYPE_UNSIGNED (type2))
++ {
++ /* Reuse the same type info, if possible. */
++ if (!tmp || from_unsigned1 != from_unsigned2)
++ tmp = create_tmp_var (build_nonstandard_integer_type
++ (actual_precision, from_unsigned2),
++ NULL);
++ rhs2 = build_and_insert_cast (gsi, loc, tmp, rhs2);
++ }
++
++ /* Handle constants. */
++ if (TREE_CODE (rhs1) == INTEGER_CST)
++ rhs1 = fold_convert (type1, rhs1);
++ if (TREE_CODE (rhs2) == INTEGER_CST)
++ rhs2 = fold_convert (type2, rhs2);
++
++ gimple_assign_set_rhs1 (stmt, rhs1);
++ gimple_assign_set_rhs2 (stmt, rhs2);
+ gimple_assign_set_rhs_code (stmt, WIDEN_MULT_EXPR);
+ update_stmt (stmt);
+ return true;
+@@ -1403,11 +1513,17 @@
+ enum tree_code code)
+ {
+ gimple rhs1_stmt = NULL, rhs2_stmt = NULL;
+- tree type, type1, type2;
++ gimple conv1_stmt = NULL, conv2_stmt = NULL, conv_stmt;
++ tree type, type1, type2, optype, tmp = NULL;
+ tree lhs, rhs1, rhs2, mult_rhs1, mult_rhs2, add_rhs;
+ enum tree_code rhs1_code = ERROR_MARK, rhs2_code = ERROR_MARK;
+ optab this_optab;
+ enum tree_code wmult_code;
++ enum insn_code handler;
++ enum machine_mode to_mode, from_mode, actual_mode;
++ location_t loc = gimple_location (stmt);
++ int actual_precision;
++ bool from_unsigned1, from_unsigned2;
+
+ lhs = gimple_assign_lhs (stmt);
+ type = TREE_TYPE (lhs);
+@@ -1429,8 +1545,6 @@
+ if (is_gimple_assign (rhs1_stmt))
+ rhs1_code = gimple_assign_rhs_code (rhs1_stmt);
+ }
+- else
+- return false;
+
+ if (TREE_CODE (rhs2) == SSA_NAME)
+ {
+@@ -1438,57 +1552,160 @@
+ if (is_gimple_assign (rhs2_stmt))
+ rhs2_code = gimple_assign_rhs_code (rhs2_stmt);
+ }
+- else
+- return false;
+
+- if (code == PLUS_EXPR && rhs1_code == MULT_EXPR)
++ /* Allow for one conversion statement between the multiply
++ and addition/subtraction statement. If there are more than
++ one conversions then we assume they would invalidate this
++ transformation. If that's not the case then they should have
++ been folded before now. */
++ if (CONVERT_EXPR_CODE_P (rhs1_code))
++ {
++ conv1_stmt = rhs1_stmt;
++ rhs1 = gimple_assign_rhs1 (rhs1_stmt);
++ if (TREE_CODE (rhs1) == SSA_NAME)
++ {
++ rhs1_stmt = SSA_NAME_DEF_STMT (rhs1);
++ if (is_gimple_assign (rhs1_stmt))
++ rhs1_code = gimple_assign_rhs_code (rhs1_stmt);
++ }
++ else
++ return false;
++ }
++ if (CONVERT_EXPR_CODE_P (rhs2_code))
++ {
++ conv2_stmt = rhs2_stmt;
++ rhs2 = gimple_assign_rhs1 (rhs2_stmt);
++ if (TREE_CODE (rhs2) == SSA_NAME)
++ {
++ rhs2_stmt = SSA_NAME_DEF_STMT (rhs2);
++ if (is_gimple_assign (rhs2_stmt))
++ rhs2_code = gimple_assign_rhs_code (rhs2_stmt);
++ }
++ else
++ return false;
++ }
++
++ /* If code is WIDEN_MULT_EXPR then it would seem unnecessary to call
++ is_widening_mult_p, but we still need the rhs returns.
++
++ It might also appear that it would be sufficient to use the existing
++ operands of the widening multiply, but that would limit the choice of
++ multiply-and-accumulate instructions. */
++ if (code == PLUS_EXPR
++ && (rhs1_code == MULT_EXPR || rhs1_code == WIDEN_MULT_EXPR))
+ {
+ if (!is_widening_mult_p (rhs1_stmt, &type1, &mult_rhs1,
+ &type2, &mult_rhs2))
+ return false;
+ add_rhs = rhs2;
++ conv_stmt = conv1_stmt;
+ }
+- else if (rhs2_code == MULT_EXPR)
++ else if (rhs2_code == MULT_EXPR || rhs2_code == WIDEN_MULT_EXPR)
+ {
+ if (!is_widening_mult_p (rhs2_stmt, &type1, &mult_rhs1,
+ &type2, &mult_rhs2))
+ return false;
+ add_rhs = rhs1;
+- }
+- else if (code == PLUS_EXPR && rhs1_code == WIDEN_MULT_EXPR)
+- {
+- mult_rhs1 = gimple_assign_rhs1 (rhs1_stmt);
+- mult_rhs2 = gimple_assign_rhs2 (rhs1_stmt);
+- type1 = TREE_TYPE (mult_rhs1);
+- type2 = TREE_TYPE (mult_rhs2);
+- add_rhs = rhs2;
+- }
+- else if (rhs2_code == WIDEN_MULT_EXPR)
+- {
+- mult_rhs1 = gimple_assign_rhs1 (rhs2_stmt);
+- mult_rhs2 = gimple_assign_rhs2 (rhs2_stmt);
+- type1 = TREE_TYPE (mult_rhs1);
+- type2 = TREE_TYPE (mult_rhs2);
+- add_rhs = rhs1;
++ conv_stmt = conv2_stmt;
+ }
+ else
+ return false;
+
+- if (TYPE_UNSIGNED (type1) != TYPE_UNSIGNED (type2))
+- return false;
++ to_mode = TYPE_MODE (type);
++ from_mode = TYPE_MODE (type1);
++ from_unsigned1 = TYPE_UNSIGNED (type1);
++ from_unsigned2 = TYPE_UNSIGNED (type2);
++
++ /* There's no such thing as a mixed sign madd yet, so use a wider mode. */
++ if (from_unsigned1 != from_unsigned2)
++ {
++ /* We can use a signed multiply with unsigned types as long as
++ there is a wider mode to use, or it is the smaller of the two
++ types that is unsigned. Note that type1 >= type2, always. */
++ if ((from_unsigned1
++ && TYPE_PRECISION (type1) == GET_MODE_PRECISION (from_mode))
++ || (from_unsigned2
++ && TYPE_PRECISION (type2) == GET_MODE_PRECISION (from_mode)))
++ {
++ from_mode = GET_MODE_WIDER_MODE (from_mode);
++ if (GET_MODE_SIZE (from_mode) >= GET_MODE_SIZE (to_mode))
++ return false;
++ }
++
++ from_unsigned1 = from_unsigned2 = false;
++ }
++
++ /* If there was a conversion between the multiply and addition
++ then we need to make sure it fits a multiply-and-accumulate.
++ The should be a single mode change which does not change the
++ value. */
++ if (conv_stmt)
++ {
++ /* We use the original, unmodified data types for this. */
++ tree from_type = TREE_TYPE (gimple_assign_rhs1 (conv_stmt));
++ tree to_type = TREE_TYPE (gimple_assign_lhs (conv_stmt));
++ int data_size = TYPE_PRECISION (type1) + TYPE_PRECISION (type2);
++ bool is_unsigned = TYPE_UNSIGNED (type1) && TYPE_UNSIGNED (type2);
++
++ if (TYPE_PRECISION (from_type) > TYPE_PRECISION (to_type))
++ {
++ /* Conversion is a truncate. */
++ if (TYPE_PRECISION (to_type) < data_size)
++ return false;
++ }
++ else if (TYPE_PRECISION (from_type) < TYPE_PRECISION (to_type))
++ {
++ /* Conversion is an extend. Check it's the right sort. */
++ if (TYPE_UNSIGNED (from_type) != is_unsigned
++ && !(is_unsigned && TYPE_PRECISION (from_type) > data_size))
++ return false;
++ }
++ /* else convert is a no-op for our purposes. */
++ }
+
+ /* Verify that the machine can perform a widening multiply
+ accumulate in this mode/signedness combination, otherwise
+ this transformation is likely to pessimize code. */
+- this_optab = optab_for_tree_code (wmult_code, type1, optab_default);
+- if (optab_handler (this_optab, TYPE_MODE (type)) == CODE_FOR_nothing)
++ optype = build_nonstandard_integer_type (from_mode, from_unsigned1);
++ this_optab = optab_for_tree_code (wmult_code, optype, optab_default);
++ handler = find_widening_optab_handler_and_mode (this_optab, to_mode,
++ from_mode, 0, &actual_mode);
++
++ if (handler == CODE_FOR_nothing)
+ return false;
+
+- /* ??? May need some type verification here? */
++ /* Ensure that the inputs to the handler are in the correct precison
++ for the opcode. This will be the full mode size. */
++ actual_precision = GET_MODE_PRECISION (actual_mode);
++ if (actual_precision != TYPE_PRECISION (type1)
++ || from_unsigned1 != TYPE_UNSIGNED (type1))
++ {
++ tmp = create_tmp_var (build_nonstandard_integer_type
++ (actual_precision, from_unsigned1),
++ NULL);
++ mult_rhs1 = build_and_insert_cast (gsi, loc, tmp, mult_rhs1);
++ }
++ if (actual_precision != TYPE_PRECISION (type2)
++ || from_unsigned2 != TYPE_UNSIGNED (type2))
++ {
++ if (!tmp || from_unsigned1 != from_unsigned2)
++ tmp = create_tmp_var (build_nonstandard_integer_type
++ (actual_precision, from_unsigned2),
++ NULL);
++ mult_rhs2 = build_and_insert_cast (gsi, loc, tmp, mult_rhs2);
++ }
++
++ if (!useless_type_conversion_p (type, TREE_TYPE (add_rhs)))
++ add_rhs = build_and_insert_cast (gsi, loc, create_tmp_var (type, NULL),
++ add_rhs);
++
++ /* Handle constants. */
++ if (TREE_CODE (mult_rhs1) == INTEGER_CST)
++ mult_rhs1 = fold_convert (type1, mult_rhs1);
++ if (TREE_CODE (mult_rhs2) == INTEGER_CST)
++ mult_rhs2 = fold_convert (type2, mult_rhs2);
+
+- gimple_assign_set_rhs_with_ops_1 (gsi, wmult_code,
+- fold_convert (type1, mult_rhs1),
+- fold_convert (type2, mult_rhs2),
++ gimple_assign_set_rhs_with_ops_1 (gsi, wmult_code, mult_rhs1, mult_rhs2,
+ add_rhs);
+ update_stmt (gsi_stmt (*gsi));
+ return true;
+@@ -1696,7 +1913,7 @@
+ switch (code)
+ {
+ case MULT_EXPR:
+- if (!convert_mult_to_widen (stmt)
++ if (!convert_mult_to_widen (stmt, &gsi)
+ && convert_mult_to_fma (stmt,
+ gimple_assign_rhs1 (stmt),
+ gimple_assign_rhs2 (stmt)))
+--- a/src/gcc/tree-ssa-phiopt.c
++++ b/src/gcc/tree-ssa-phiopt.c
+@@ -34,6 +34,8 @@
+ #include "langhooks.h"
+ #include "pointer-set.h"
+ #include "domwalk.h"
++#include "cfgloop.h"
++#include "tree-data-ref.h"
+
+ static unsigned int tree_ssa_phiopt (void);
+ static unsigned int tree_ssa_phiopt_worker (bool);
+@@ -1292,35 +1294,18 @@
+ return true;
+ }
+
+-/* Do the main work of conditional store replacement. We already know
+- that the recognized pattern looks like so:
+-
+- split:
+- if (cond) goto THEN_BB; else goto ELSE_BB (edge E1)
+- THEN_BB:
+- X = Y;
+- goto JOIN_BB;
+- ELSE_BB:
+- X = Z;
+- fallthrough (edge E0)
+- JOIN_BB:
+- some more
+-
+- We check that THEN_BB and ELSE_BB contain only one store
+- that the stores have a "simple" RHS. */
++/* Do the main work of conditional store replacement. */
+
+ static bool
+-cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb,
+- basic_block join_bb)
++cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb,
++ basic_block join_bb, gimple then_assign,
++ gimple else_assign)
+ {
+- gimple then_assign = last_and_only_stmt (then_bb);
+- gimple else_assign = last_and_only_stmt (else_bb);
+ tree lhs_base, lhs, then_rhs, else_rhs;
+ source_location then_locus, else_locus;
+ gimple_stmt_iterator gsi;
+ gimple newphi, new_stmt;
+
+- /* Check if then_bb and else_bb contain only one store each. */
+ if (then_assign == NULL
+ || !gimple_assign_single_p (then_assign)
+ || else_assign == NULL
+@@ -1385,6 +1370,190 @@
+ return true;
+ }
+
++/* Conditional store replacement. We already know
++ that the recognized pattern looks like so:
++
++ split:
++ if (cond) goto THEN_BB; else goto ELSE_BB (edge E1)
++ THEN_BB:
++ ...
++ X = Y;
++ ...
++ goto JOIN_BB;
++ ELSE_BB:
++ ...
++ X = Z;
++ ...
++ fallthrough (edge E0)
++ JOIN_BB:
++ some more
++
++ We check that it is safe to sink the store to JOIN_BB by verifying that
++ there are no read-after-write or write-after-write dependencies in
++ THEN_BB and ELSE_BB. */
++
++static bool
++cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb,
++ basic_block join_bb)
++{
++ gimple then_assign = last_and_only_stmt (then_bb);
++ gimple else_assign = last_and_only_stmt (else_bb);
++ VEC (data_reference_p, heap) *then_datarefs, *else_datarefs;
++ VEC (ddr_p, heap) *then_ddrs, *else_ddrs;
++ gimple then_store, else_store;
++ bool found, ok = false, res;
++ struct data_dependence_relation *ddr;
++ data_reference_p then_dr, else_dr;
++ int i, j;
++ tree then_lhs, else_lhs;
++ VEC (gimple, heap) *then_stores, *else_stores;
++ basic_block blocks[3];
++
++ if (MAX_STORES_TO_SINK == 0)
++ return false;
++
++ /* Handle the case with single statement in THEN_BB and ELSE_BB. */
++ if (then_assign && else_assign)
++ return cond_if_else_store_replacement_1 (then_bb, else_bb, join_bb,
++ then_assign, else_assign);
++
++ /* Find data references. */
++ then_datarefs = VEC_alloc (data_reference_p, heap, 1);
++ else_datarefs = VEC_alloc (data_reference_p, heap, 1);
++ if ((find_data_references_in_bb (NULL, then_bb, &then_datarefs)
++ == chrec_dont_know)
++ || !VEC_length (data_reference_p, then_datarefs)
++ || (find_data_references_in_bb (NULL, else_bb, &else_datarefs)
++ == chrec_dont_know)
++ || !VEC_length (data_reference_p, else_datarefs))
++ {
++ free_data_refs (then_datarefs);
++ free_data_refs (else_datarefs);
++ return false;
++ }
++
++ /* Find pairs of stores with equal LHS. */
++ then_stores = VEC_alloc (gimple, heap, 1);
++ else_stores = VEC_alloc (gimple, heap, 1);
++ FOR_EACH_VEC_ELT (data_reference_p, then_datarefs, i, then_dr)
++ {
++ if (DR_IS_READ (then_dr))
++ continue;
++
++ then_store = DR_STMT (then_dr);
++ then_lhs = gimple_assign_lhs (then_store);
++ found = false;
++
++ FOR_EACH_VEC_ELT (data_reference_p, else_datarefs, j, else_dr)
++ {
++ if (DR_IS_READ (else_dr))
++ continue;
++
++ else_store = DR_STMT (else_dr);
++ else_lhs = gimple_assign_lhs (else_store);
++
++ if (operand_equal_p (then_lhs, else_lhs, 0))
++ {
++ found = true;
++ break;
++ }
++ }
++
++ if (!found)
++ continue;
++
++ VEC_safe_push (gimple, heap, then_stores, then_store);
++ VEC_safe_push (gimple, heap, else_stores, else_store);
++ }
++
++ /* No pairs of stores found. */
++ if (!VEC_length (gimple, then_stores)
++ || VEC_length (gimple, then_stores) > (unsigned) MAX_STORES_TO_SINK)
++ {
++ free_data_refs (then_datarefs);
++ free_data_refs (else_datarefs);
++ VEC_free (gimple, heap, then_stores);
++ VEC_free (gimple, heap, else_stores);
++ return false;
++ }
++
++ /* Compute and check data dependencies in both basic blocks. */
++ then_ddrs = VEC_alloc (ddr_p, heap, 1);
++ else_ddrs = VEC_alloc (ddr_p, heap, 1);
++ compute_all_dependences (then_datarefs, &then_ddrs, NULL, false);
++ compute_all_dependences (else_datarefs, &else_ddrs, NULL, false);
++ blocks[0] = then_bb;
++ blocks[1] = else_bb;
++ blocks[2] = join_bb;
++ renumber_gimple_stmt_uids_in_blocks (blocks, 3);
++
++ /* Check that there are no read-after-write or write-after-write dependencies
++ in THEN_BB. */
++ FOR_EACH_VEC_ELT (ddr_p, then_ddrs, i, ddr)
++ {
++ struct data_reference *dra = DDR_A (ddr);
++ struct data_reference *drb = DDR_B (ddr);
++
++ if (DDR_ARE_DEPENDENT (ddr) != chrec_known
++ && ((DR_IS_READ (dra) && DR_IS_WRITE (drb)
++ && gimple_uid (DR_STMT (dra)) > gimple_uid (DR_STMT (drb)))
++ || (DR_IS_READ (drb) && DR_IS_WRITE (dra)
++ && gimple_uid (DR_STMT (drb)) > gimple_uid (DR_STMT (dra)))
++ || (DR_IS_WRITE (dra) && DR_IS_WRITE (drb))))
++ {
++ free_dependence_relations (then_ddrs);
++ free_dependence_relations (else_ddrs);
++ free_data_refs (then_datarefs);
++ free_data_refs (else_datarefs);
++ VEC_free (gimple, heap, then_stores);
++ VEC_free (gimple, heap, else_stores);
++ return false;
++ }
++ }
++
++ /* Check that there are no read-after-write or write-after-write dependencies
++ in ELSE_BB. */
++ FOR_EACH_VEC_ELT (ddr_p, else_ddrs, i, ddr)
++ {
++ struct data_reference *dra = DDR_A (ddr);
++ struct data_reference *drb = DDR_B (ddr);
++
++ if (DDR_ARE_DEPENDENT (ddr) != chrec_known
++ && ((DR_IS_READ (dra) && DR_IS_WRITE (drb)
++ && gimple_uid (DR_STMT (dra)) > gimple_uid (DR_STMT (drb)))
++ || (DR_IS_READ (drb) && DR_IS_WRITE (dra)
++ && gimple_uid (DR_STMT (drb)) > gimple_uid (DR_STMT (dra)))
++ || (DR_IS_WRITE (dra) && DR_IS_WRITE (drb))))
++ {
++ free_dependence_relations (then_ddrs);
++ free_dependence_relations (else_ddrs);
++ free_data_refs (then_datarefs);
++ free_data_refs (else_datarefs);
++ VEC_free (gimple, heap, then_stores);
++ VEC_free (gimple, heap, else_stores);
++ return false;
++ }
++ }
++
++ /* Sink stores with same LHS. */
++ FOR_EACH_VEC_ELT (gimple, then_stores, i, then_store)
++ {
++ else_store = VEC_index (gimple, else_stores, i);
++ res = cond_if_else_store_replacement_1 (then_bb, else_bb, join_bb,
++ then_store, else_store);
++ ok = ok || res;
++ }
++
++ free_dependence_relations (then_ddrs);
++ free_dependence_relations (else_ddrs);
++ free_data_refs (then_datarefs);
++ free_data_refs (else_datarefs);
++ VEC_free (gimple, heap, then_stores);
++ VEC_free (gimple, heap, else_stores);
++
++ return ok;
++}
++
+ /* Always do these optimizations if we have SSA
+ trees to work on. */
+ static bool
+--- a/src/gcc/tree-ssa-pre.c
++++ b/src/gcc/tree-ssa-pre.c
+@@ -2657,11 +2657,13 @@
+ }
+
+ /* Return true if we can value number the call in STMT. This is true
+- if we have a pure or constant call. */
++ if we have a pure or constant call to a real function. */
+
+ static bool
+ can_value_number_call (gimple stmt)
+ {
++ if (gimple_call_internal_p (stmt))
++ return false;
+ if (gimple_call_flags (stmt) & (ECF_PURE | ECF_CONST))
+ return true;
+ return false;
+@@ -4190,6 +4192,7 @@
+ gimple_stmt_iterator gsi;
+ gimple stmt;
+ unsigned i;
++ tree fn;
+
+ FOR_EACH_BB (b)
+ {
+@@ -4381,9 +4384,10 @@
+ /* Visit indirect calls and turn them into direct calls if
+ possible. */
+ if (is_gimple_call (stmt)
+- && TREE_CODE (gimple_call_fn (stmt)) == SSA_NAME)
++ && (fn = gimple_call_fn (stmt))
++ && TREE_CODE (fn) == SSA_NAME)
+ {
+- tree fn = VN_INFO (gimple_call_fn (stmt))->valnum;
++ fn = VN_INFO (fn)->valnum;
+ if (TREE_CODE (fn) == ADDR_EXPR
+ && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL)
+ {
+--- a/src/gcc/tree-ssa-sccvn.c
++++ b/src/gcc/tree-ssa-sccvn.c
+@@ -2982,7 +2982,8 @@
+ /* ??? We should handle stores from calls. */
+ else if (TREE_CODE (lhs) == SSA_NAME)
+ {
+- if (gimple_call_flags (stmt) & (ECF_PURE | ECF_CONST))
++ if (!gimple_call_internal_p (stmt)
++ && gimple_call_flags (stmt) & (ECF_PURE | ECF_CONST))
+ changed = visit_reference_op_call (lhs, stmt);
+ else
+ changed = defs_to_varying (stmt);
+--- a/src/gcc/tree-ssa-structalias.c
++++ b/src/gcc/tree-ssa-structalias.c
+@@ -4328,6 +4328,7 @@
+ /* Fallthru to general call handling. */;
+ }
+ if (!in_ipa_mode
++ || gimple_call_internal_p (t)
+ || (fndecl
+ && (!(fi = lookup_vi_for_tree (fndecl))
+ || !fi->is_fn_info)))
+--- a/src/gcc/tree-vect-data-refs.c
++++ b/src/gcc/tree-vect-data-refs.c
+@@ -43,6 +43,45 @@
+ #include "expr.h"
+ #include "optabs.h"
+
++/* Return true if load- or store-lanes optab OPTAB is implemented for
++ COUNT vectors of type VECTYPE. NAME is the name of OPTAB. */
++
++static bool
++vect_lanes_optab_supported_p (const char *name, convert_optab optab,
++ tree vectype, unsigned HOST_WIDE_INT count)
++{
++ enum machine_mode mode, array_mode;
++ bool limit_p;
++
++ mode = TYPE_MODE (vectype);
++ limit_p = !targetm.array_mode_supported_p (mode, count);
++ array_mode = mode_for_size (count * GET_MODE_BITSIZE (mode),
++ MODE_INT, limit_p);
++
++ if (array_mode == BLKmode)
++ {
++ if (vect_print_dump_info (REPORT_DETAILS))
++ fprintf (vect_dump, "no array mode for %s[" HOST_WIDE_INT_PRINT_DEC "]",
++ GET_MODE_NAME (mode), count);
++ return false;
++ }
++
++ if (convert_optab_handler (optab, array_mode, mode) == CODE_FOR_nothing)
++ {
++ if (vect_print_dump_info (REPORT_DETAILS))
++ fprintf (vect_dump, "cannot use %s<%s><%s>",
++ name, GET_MODE_NAME (array_mode), GET_MODE_NAME (mode));
++ return false;
++ }
++
++ if (vect_print_dump_info (REPORT_DETAILS))
++ fprintf (vect_dump, "can use %s<%s><%s>",
++ name, GET_MODE_NAME (array_mode), GET_MODE_NAME (mode));
++
++ return true;
++}
++
++
+ /* Return the smallest scalar part of STMT.
+ This is used to determine the vectype of the stmt. We generally set the
+ vectype according to the type of the result (lhs). For stmts whose
+@@ -289,39 +328,6 @@
+ }
+ }
+
+-
+-/* Function vect_equal_offsets.
+-
+- Check if OFFSET1 and OFFSET2 are identical expressions. */
+-
+-static bool
+-vect_equal_offsets (tree offset1, tree offset2)
+-{
+- bool res;
+-
+- STRIP_NOPS (offset1);
+- STRIP_NOPS (offset2);
+-
+- if (offset1 == offset2)
+- return true;
+-
+- if (TREE_CODE (offset1) != TREE_CODE (offset2)
+- || (!BINARY_CLASS_P (offset1) && !UNARY_CLASS_P (offset1)))
+- return false;
+-
+- res = vect_equal_offsets (TREE_OPERAND (offset1, 0),
+- TREE_OPERAND (offset2, 0));
+-
+- if (!res || !BINARY_CLASS_P (offset1))
+- return res;
+-
+- res = vect_equal_offsets (TREE_OPERAND (offset1, 1),
+- TREE_OPERAND (offset2, 1));
+-
+- return res;
+-}
+-
+-
+ /* Check dependence between DRA and DRB for basic block vectorization.
+ If the accesses share same bases and offsets, we can compare their initial
+ constant offsets to decide whether they differ or not. In case of a read-
+@@ -347,12 +353,8 @@
+
+ /* Check that the data-refs have same bases and offsets. If not, we can't
+ determine if they are dependent. */
+- if ((DR_BASE_ADDRESS (dra) != DR_BASE_ADDRESS (drb)
+- && (TREE_CODE (DR_BASE_ADDRESS (dra)) != ADDR_EXPR
+- || TREE_CODE (DR_BASE_ADDRESS (drb)) != ADDR_EXPR
+- || TREE_OPERAND (DR_BASE_ADDRESS (dra), 0)
+- != TREE_OPERAND (DR_BASE_ADDRESS (drb),0)))
+- || !vect_equal_offsets (DR_OFFSET (dra), DR_OFFSET (drb)))
++ if (!operand_equal_p (DR_BASE_ADDRESS (dra), DR_BASE_ADDRESS (drb), 0)
++ || !dr_equal_offsets_p (dra, drb))
+ return true;
+
+ /* Check the types. */
+@@ -397,12 +399,8 @@
+
+ /* Check that the data-refs have same first location (except init) and they
+ are both either store or load (not load and store). */
+- if ((DR_BASE_ADDRESS (dra) != DR_BASE_ADDRESS (drb)
+- && (TREE_CODE (DR_BASE_ADDRESS (dra)) != ADDR_EXPR
+- || TREE_CODE (DR_BASE_ADDRESS (drb)) != ADDR_EXPR
+- || TREE_OPERAND (DR_BASE_ADDRESS (dra), 0)
+- != TREE_OPERAND (DR_BASE_ADDRESS (drb),0)))
+- || !vect_equal_offsets (DR_OFFSET (dra), DR_OFFSET (drb))
++ if (!operand_equal_p (DR_BASE_ADDRESS (dra), DR_BASE_ADDRESS (drb), 0)
++ || !dr_equal_offsets_p (dra, drb)
+ || !tree_int_cst_compare (DR_INIT (dra), DR_INIT (drb))
+ || DR_IS_READ (dra) != DR_IS_READ (drb))
+ return false;
+@@ -609,6 +607,11 @@
+ if (vect_check_interleaving (dra, drb))
+ return false;
+
++ /* Read-read is OK (we need this check here, after checking for
++ interleaving). */
++ if (DR_IS_READ (dra) && DR_IS_READ (drb))
++ return false;
++
+ if (vect_print_dump_info (REPORT_DR_DETAILS))
+ {
+ fprintf (vect_dump, "can't determine dependence between ");
+@@ -1250,7 +1253,9 @@
+ vect_peel_info elem = (vect_peel_info) *slot;
+ vect_peel_extended_info max = (vect_peel_extended_info) data;
+
+- if (elem->count > max->peel_info.count)
++ if (elem->count > max->peel_info.count
++ || (elem->count == max->peel_info.count
++ && max->peel_info.npeel > elem->npeel))
+ {
+ max->peel_info.npeel = elem->npeel;
+ max->peel_info.count = elem->count;
+@@ -2256,19 +2261,6 @@
+ return false;
+ }
+
+- /* FORNOW: we handle only interleaving that is a power of 2.
+- We don't fail here if it may be still possible to vectorize the
+- group using SLP. If not, the size of the group will be checked in
+- vect_analyze_operations, and the vectorization will fail. */
+- if (exact_log2 (stride) == -1)
+- {
+- if (vect_print_dump_info (REPORT_DETAILS))
+- fprintf (vect_dump, "interleaving is not a power of 2");
+-
+- if (slp_impossible)
+- return false;
+- }
+-
+ if (stride == 0)
+ stride = count;
+
+@@ -2983,31 +2975,33 @@
+
+ /* Function vect_create_data_ref_ptr.
+
+- Create a new pointer to vector type (vp), that points to the first location
+- accessed in the loop by STMT, along with the def-use update chain to
+- appropriately advance the pointer through the loop iterations. Also set
+- aliasing information for the pointer. This vector pointer is used by the
+- callers to this function to create a memory reference expression for vector
+- load/store access.
++ Create a new pointer-to-AGGR_TYPE variable (ap), that points to the first
++ location accessed in the loop by STMT, along with the def-use update
++ chain to appropriately advance the pointer through the loop iterations.
++ Also set aliasing information for the pointer. This pointer is used by
++ the callers to this function to create a memory reference expression for
++ vector load/store access.
+
+ Input:
+ 1. STMT: a stmt that references memory. Expected to be of the form
+ GIMPLE_ASSIGN <name, data-ref> or
+ GIMPLE_ASSIGN <data-ref, name>.
+- 2. AT_LOOP: the loop where the vector memref is to be created.
+- 3. OFFSET (optional): an offset to be added to the initial address accessed
++ 2. AGGR_TYPE: the type of the reference, which should be either a vector
++ or an array.
++ 3. AT_LOOP: the loop where the vector memref is to be created.
++ 4. OFFSET (optional): an offset to be added to the initial address accessed
+ by the data-ref in STMT.
+- 4. ONLY_INIT: indicate if vp is to be updated in the loop, or remain
++ 5. ONLY_INIT: indicate if vp is to be updated in the loop, or remain
+ pointing to the initial address.
+- 5. TYPE: if not NULL indicates the required type of the data-ref.
++ 6. TYPE: if not NULL indicates the required type of the data-ref.
+
+ Output:
+ 1. Declare a new ptr to vector_type, and have it point to the base of the
+ data reference (initial addressed accessed by the data reference).
+ For example, for vector of type V8HI, the following code is generated:
+
+- v8hi *vp;
+- vp = (v8hi *)initial_address;
++ v8hi *ap;
++ ap = (v8hi *)initial_address;
+
+ if OFFSET is not supplied:
+ initial_address = &a[init];
+@@ -3027,7 +3021,7 @@
+ 4. Return the pointer. */
+
+ tree
+-vect_create_data_ref_ptr (gimple stmt, struct loop *at_loop,
++vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop,
+ tree offset, tree *initial_address, gimple *ptr_incr,
+ bool only_init, bool *inv_p)
+ {
+@@ -3037,17 +3031,16 @@
+ struct loop *loop = NULL;
+ bool nested_in_vect_loop = false;
+ struct loop *containing_loop = NULL;
+- tree vectype = STMT_VINFO_VECTYPE (stmt_info);
+- tree vect_ptr_type;
+- tree vect_ptr;
++ tree aggr_ptr_type;
++ tree aggr_ptr;
+ tree new_temp;
+ gimple vec_stmt;
+ gimple_seq new_stmt_list = NULL;
+ edge pe = NULL;
+ basic_block new_bb;
+- tree vect_ptr_init;
++ tree aggr_ptr_init;
+ struct data_reference *dr = STMT_VINFO_DATA_REF (stmt_info);
+- tree vptr;
++ tree aptr;
+ gimple_stmt_iterator incr_gsi;
+ bool insert_after;
+ bool negative;
+@@ -3058,6 +3051,9 @@
+ gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
+ tree base;
+
++ gcc_assert (TREE_CODE (aggr_type) == ARRAY_TYPE
++ || TREE_CODE (aggr_type) == VECTOR_TYPE);
++
+ if (loop_vinfo)
+ {
+ loop = LOOP_VINFO_LOOP (loop_vinfo);
+@@ -3092,8 +3088,9 @@
+ if (vect_print_dump_info (REPORT_DETAILS))
+ {
+ tree data_ref_base = base_name;
+- fprintf (vect_dump, "create vector-pointer variable to type: ");
+- print_generic_expr (vect_dump, vectype, TDF_SLIM);
++ fprintf (vect_dump, "create %s-pointer variable to type: ",
++ tree_code_name[(int) TREE_CODE (aggr_type)]);
++ print_generic_expr (vect_dump, aggr_type, TDF_SLIM);
+ if (TREE_CODE (data_ref_base) == VAR_DECL
+ || TREE_CODE (data_ref_base) == ARRAY_REF)
+ fprintf (vect_dump, " vectorizing an array ref: ");
+@@ -3104,27 +3101,28 @@
+ print_generic_expr (vect_dump, base_name, TDF_SLIM);
+ }
+
+- /* (1) Create the new vector-pointer variable. */
+- vect_ptr_type = build_pointer_type (vectype);
++ /* (1) Create the new aggregate-pointer variable. */
++ aggr_ptr_type = build_pointer_type (aggr_type);
+ base = get_base_address (DR_REF (dr));
+ if (base
+ && TREE_CODE (base) == MEM_REF)
+- vect_ptr_type
+- = build_qualified_type (vect_ptr_type,
++ aggr_ptr_type
++ = build_qualified_type (aggr_ptr_type,
+ TYPE_QUALS (TREE_TYPE (TREE_OPERAND (base, 0))));
+- vect_ptr = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var,
++ aggr_ptr = vect_get_new_vect_var (aggr_ptr_type, vect_pointer_var,
+ get_name (base_name));
+
+- /* Vector types inherit the alias set of their component type by default so
+- we need to use a ref-all pointer if the data reference does not conflict
+- with the created vector data reference because it is not addressable. */
+- if (!alias_sets_conflict_p (get_deref_alias_set (vect_ptr),
++ /* Vector and array types inherit the alias set of their component
++ type by default so we need to use a ref-all pointer if the data
++ reference does not conflict with the created aggregated data
++ reference because it is not addressable. */
++ if (!alias_sets_conflict_p (get_deref_alias_set (aggr_ptr),
+ get_alias_set (DR_REF (dr))))
+ {
+- vect_ptr_type
+- = build_pointer_type_for_mode (vectype,
+- TYPE_MODE (vect_ptr_type), true);
+- vect_ptr = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var,
++ aggr_ptr_type
++ = build_pointer_type_for_mode (aggr_type,
++ TYPE_MODE (aggr_ptr_type), true);
++ aggr_ptr = vect_get_new_vect_var (aggr_ptr_type, vect_pointer_var,
+ get_name (base_name));
+ }
+
+@@ -3135,14 +3133,14 @@
+ do
+ {
+ tree lhs = gimple_assign_lhs (orig_stmt);
+- if (!alias_sets_conflict_p (get_deref_alias_set (vect_ptr),
++ if (!alias_sets_conflict_p (get_deref_alias_set (aggr_ptr),
+ get_alias_set (lhs)))
+ {
+- vect_ptr_type
+- = build_pointer_type_for_mode (vectype,
+- TYPE_MODE (vect_ptr_type), true);
+- vect_ptr
+- = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var,
++ aggr_ptr_type
++ = build_pointer_type_for_mode (aggr_type,
++ TYPE_MODE (aggr_ptr_type), true);
++ aggr_ptr
++ = vect_get_new_vect_var (aggr_ptr_type, vect_pointer_var,
+ get_name (base_name));
+ break;
+ }
+@@ -3152,7 +3150,7 @@
+ while (orig_stmt);
+ }
+
+- add_referenced_var (vect_ptr);
++ add_referenced_var (aggr_ptr);
+
+ /* Note: If the dataref is in an inner-loop nested in LOOP, and we are
+ vectorizing LOOP (i.e., outer-loop vectorization), we need to create two
+@@ -3185,8 +3183,8 @@
+ vp2 = vp1 + step
+ if () goto LOOP */
+
+- /* (2) Calculate the initial address the vector-pointer, and set
+- the vector-pointer to point to it before the loop. */
++ /* (2) Calculate the initial address of the aggregate-pointer, and set
++ the aggregate-pointer to point to it before the loop. */
+
+ /* Create: (&(base[init_val+offset]) in the loop preheader. */
+
+@@ -3205,17 +3203,17 @@
+
+ *initial_address = new_temp;
+
+- /* Create: p = (vectype *) initial_base */
++ /* Create: p = (aggr_type *) initial_base */
+ if (TREE_CODE (new_temp) != SSA_NAME
+- || !useless_type_conversion_p (vect_ptr_type, TREE_TYPE (new_temp)))
++ || !useless_type_conversion_p (aggr_ptr_type, TREE_TYPE (new_temp)))
+ {
+- vec_stmt = gimple_build_assign (vect_ptr,
+- fold_convert (vect_ptr_type, new_temp));
+- vect_ptr_init = make_ssa_name (vect_ptr, vec_stmt);
++ vec_stmt = gimple_build_assign (aggr_ptr,
++ fold_convert (aggr_ptr_type, new_temp));
++ aggr_ptr_init = make_ssa_name (aggr_ptr, vec_stmt);
+ /* Copy the points-to information if it exists. */
+ if (DR_PTR_INFO (dr))
+- duplicate_ssa_name_ptr_info (vect_ptr_init, DR_PTR_INFO (dr));
+- gimple_assign_set_lhs (vec_stmt, vect_ptr_init);
++ duplicate_ssa_name_ptr_info (aggr_ptr_init, DR_PTR_INFO (dr));
++ gimple_assign_set_lhs (vec_stmt, aggr_ptr_init);
+ if (pe)
+ {
+ new_bb = gsi_insert_on_edge_immediate (pe, vec_stmt);
+@@ -3225,19 +3223,19 @@
+ gsi_insert_before (&gsi, vec_stmt, GSI_SAME_STMT);
+ }
+ else
+- vect_ptr_init = new_temp;
++ aggr_ptr_init = new_temp;
+
+- /* (3) Handle the updating of the vector-pointer inside the loop.
++ /* (3) Handle the updating of the aggregate-pointer inside the loop.
+ This is needed when ONLY_INIT is false, and also when AT_LOOP is the
+ inner-loop nested in LOOP (during outer-loop vectorization). */
+
+ /* No update in loop is required. */
+ if (only_init && (!loop_vinfo || at_loop == loop))
+- vptr = vect_ptr_init;
++ aptr = aggr_ptr_init;
+ else
+ {
+- /* The step of the vector pointer is the Vector Size. */
+- tree step = TYPE_SIZE_UNIT (vectype);
++ /* The step of the aggregate pointer is the type size. */
++ tree step = TYPE_SIZE_UNIT (aggr_type);
+ /* One exception to the above is when the scalar step of the load in
+ LOOP is zero. In this case the step here is also zero. */
+ if (*inv_p)
+@@ -3247,9 +3245,9 @@
+
+ standard_iv_increment_position (loop, &incr_gsi, &insert_after);
+
+- create_iv (vect_ptr_init,
+- fold_convert (vect_ptr_type, step),
+- vect_ptr, loop, &incr_gsi, insert_after,
++ create_iv (aggr_ptr_init,
++ fold_convert (aggr_ptr_type, step),
++ aggr_ptr, loop, &incr_gsi, insert_after,
+ &indx_before_incr, &indx_after_incr);
+ incr = gsi_stmt (incr_gsi);
+ set_vinfo_for_stmt (incr, new_stmt_vec_info (incr, loop_vinfo, NULL));
+@@ -3263,14 +3261,14 @@
+ if (ptr_incr)
+ *ptr_incr = incr;
+
+- vptr = indx_before_incr;
++ aptr = indx_before_incr;
+ }
+
+ if (!nested_in_vect_loop || only_init)
+- return vptr;
++ return aptr;
+
+
+- /* (4) Handle the updating of the vector-pointer inside the inner-loop
++ /* (4) Handle the updating of the aggregate-pointer inside the inner-loop
+ nested in LOOP, if exists. */
+
+ gcc_assert (nested_in_vect_loop);
+@@ -3278,7 +3276,7 @@
+ {
+ standard_iv_increment_position (containing_loop, &incr_gsi,
+ &insert_after);
+- create_iv (vptr, fold_convert (vect_ptr_type, DR_STEP (dr)), vect_ptr,
++ create_iv (aptr, fold_convert (aggr_ptr_type, DR_STEP (dr)), aggr_ptr,
+ containing_loop, &incr_gsi, insert_after, &indx_before_incr,
+ &indx_after_incr);
+ incr = gsi_stmt (incr_gsi);
+@@ -3415,13 +3413,22 @@
+ and FALSE otherwise. */
+
+ bool
+-vect_strided_store_supported (tree vectype)
++vect_strided_store_supported (tree vectype, unsigned HOST_WIDE_INT count)
+ {
+ optab interleave_high_optab, interleave_low_optab;
+ enum machine_mode mode;
+
+ mode = TYPE_MODE (vectype);
+
++ /* vect_permute_store_chain requires the group size to be a power of two. */
++ if (exact_log2 (count) == -1)
++ {
++ if (vect_print_dump_info (REPORT_DETAILS))
++ fprintf (vect_dump, "the size of the group of strided accesses"
++ " is not a power of 2");
++ return false;
++ }
++
+ /* Check that the operation is supported. */
+ interleave_high_optab = optab_for_tree_code (VEC_INTERLEAVE_HIGH_EXPR,
+ vectype, optab_default);
+@@ -3446,6 +3453,18 @@
+ }
+
+
++/* Return TRUE if vec_store_lanes is available for COUNT vectors of
++ type VECTYPE. */
++
++bool
++vect_store_lanes_supported (tree vectype, unsigned HOST_WIDE_INT count)
++{
++ return vect_lanes_optab_supported_p ("vec_store_lanes",
++ vec_store_lanes_optab,
++ vectype, count);
++}
++
++
+ /* Function vect_permute_store_chain.
+
+ Given a chain of interleaved stores in DR_CHAIN of LENGTH that must be
+@@ -3507,7 +3526,7 @@
+ I3: 4 12 20 28 5 13 21 30
+ I4: 6 14 22 30 7 15 23 31. */
+
+-bool
++void
+ vect_permute_store_chain (VEC(tree,heap) *dr_chain,
+ unsigned int length,
+ gimple stmt,
+@@ -3521,9 +3540,7 @@
+ unsigned int j;
+ enum tree_code high_code, low_code;
+
+- /* Check that the operation is supported. */
+- if (!vect_strided_store_supported (vectype))
+- return false;
++ gcc_assert (vect_strided_store_supported (vectype, length));
+
+ *result_chain = VEC_copy (tree, heap, dr_chain);
+
+@@ -3576,7 +3593,6 @@
+ }
+ dr_chain = VEC_copy (tree, heap, *result_chain);
+ }
+- return true;
+ }
+
+ /* Function vect_setup_realignment
+@@ -3746,8 +3762,9 @@
+
+ gcc_assert (!compute_in_loop);
+ vec_dest = vect_create_destination_var (scalar_dest, vectype);
+- ptr = vect_create_data_ref_ptr (stmt, loop_for_initial_load, NULL_TREE,
+- &init_addr, &inc, true, &inv_p);
++ ptr = vect_create_data_ref_ptr (stmt, vectype, loop_for_initial_load,
++ NULL_TREE, &init_addr, &inc,
++ true, &inv_p);
+ new_stmt = gimple_build_assign_with_ops
+ (BIT_AND_EXPR, NULL_TREE, ptr,
+ build_int_cst (TREE_TYPE (ptr),
+@@ -3852,13 +3869,22 @@
+ and FALSE otherwise. */
+
+ bool
+-vect_strided_load_supported (tree vectype)
++vect_strided_load_supported (tree vectype, unsigned HOST_WIDE_INT count)
+ {
+ optab perm_even_optab, perm_odd_optab;
+ enum machine_mode mode;
+
+ mode = TYPE_MODE (vectype);
+
++ /* vect_permute_load_chain requires the group size to be a power of two. */
++ if (exact_log2 (count) == -1)
++ {
++ if (vect_print_dump_info (REPORT_DETAILS))
++ fprintf (vect_dump, "the size of the group of strided accesses"
++ " is not a power of 2");
++ return false;
++ }
++
+ perm_even_optab = optab_for_tree_code (VEC_EXTRACT_EVEN_EXPR, vectype,
+ optab_default);
+ if (!perm_even_optab)
+@@ -3893,6 +3919,16 @@
+ return true;
+ }
+
++/* Return TRUE if vec_load_lanes is available for COUNT vectors of
++ type VECTYPE. */
++
++bool
++vect_load_lanes_supported (tree vectype, unsigned HOST_WIDE_INT count)
++{
++ return vect_lanes_optab_supported_p ("vec_load_lanes",
++ vec_load_lanes_optab,
++ vectype, count);
++}
+
+ /* Function vect_permute_load_chain.
+
+@@ -3970,7 +4006,7 @@
+ 3rd vec (E2): 2 6 10 14 18 22 26 30
+ 4th vec (E4): 3 7 11 15 19 23 27 31. */
+
+-bool
++static void
+ vect_permute_load_chain (VEC(tree,heap) *dr_chain,
+ unsigned int length,
+ gimple stmt,
+@@ -3983,9 +4019,7 @@
+ int i;
+ unsigned int j;
+
+- /* Check that the operation is supported. */
+- if (!vect_strided_load_supported (vectype))
+- return false;
++ gcc_assert (vect_strided_load_supported (vectype, length));
+
+ *result_chain = VEC_copy (tree, heap, dr_chain);
+ for (i = 0; i < exact_log2 (length); i++)
+@@ -4028,7 +4062,6 @@
+ }
+ dr_chain = VEC_copy (tree, heap, *result_chain);
+ }
+- return true;
+ }
+
+
+@@ -4039,24 +4072,32 @@
+ the scalar statements.
+ */
+
+-bool
++void
+ vect_transform_strided_load (gimple stmt, VEC(tree,heap) *dr_chain, int size,
+ gimple_stmt_iterator *gsi)
+ {
+- stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
+- gimple first_stmt = DR_GROUP_FIRST_DR (stmt_info);
+- gimple next_stmt, new_stmt;
+ VEC(tree,heap) *result_chain = NULL;
+- unsigned int i, gap_count;
+- tree tmp_data_ref;
+
+ /* DR_CHAIN contains input data-refs that are a part of the interleaving.
+ RESULT_CHAIN is the output of vect_permute_load_chain, it contains permuted
+ vectors, that are ready for vector computation. */
+ result_chain = VEC_alloc (tree, heap, size);
+- /* Permute. */
+- if (!vect_permute_load_chain (dr_chain, size, stmt, gsi, &result_chain))
+- return false;
++ vect_permute_load_chain (dr_chain, size, stmt, gsi, &result_chain);
++ vect_record_strided_load_vectors (stmt, result_chain);
++ VEC_free (tree, heap, result_chain);
++}
++
++/* RESULT_CHAIN contains the output of a group of strided loads that were
++ generated as part of the vectorization of STMT. Assign the statement
++ for each vector to the associated scalar statement. */
++
++void
++vect_record_strided_load_vectors (gimple stmt, VEC(tree,heap) *result_chain)
++{
++ gimple first_stmt = DR_GROUP_FIRST_DR (vinfo_for_stmt (stmt));
++ gimple next_stmt, new_stmt;
++ unsigned int i, gap_count;
++ tree tmp_data_ref;
+
+ /* Put a permuted data-ref in the VECTORIZED_STMT field.
+ Since we scan the chain starting from it's first node, their order
+@@ -4118,9 +4159,6 @@
+ break;
+ }
+ }
+-
+- VEC_free (tree, heap, result_chain);
+- return true;
+ }
+
+ /* Function vect_force_dr_alignment_p.
+--- a/src/gcc/tree-vect-generic.c
++++ b/src/gcc/tree-vect-generic.c
+@@ -552,7 +552,9 @@
+ || code == VEC_UNPACK_LO_EXPR
+ || code == VEC_PACK_TRUNC_EXPR
+ || code == VEC_PACK_SAT_EXPR
+- || code == VEC_PACK_FIX_TRUNC_EXPR)
++ || code == VEC_PACK_FIX_TRUNC_EXPR
++ || code == VEC_WIDEN_LSHIFT_HI_EXPR
++ || code == VEC_WIDEN_LSHIFT_LO_EXPR)
+ type = TREE_TYPE (rhs1);
+
+ /* Optabs will try converting a negation into a subtraction, so
+--- a/src/gcc/tree-vect-loop-manip.c
++++ b/src/gcc/tree-vect-loop-manip.c
+@@ -1105,35 +1105,6 @@
+ first_niters = PHI_RESULT (newphi);
+ }
+
+-
+-/* Remove dead assignments from loop NEW_LOOP. */
+-
+-static void
+-remove_dead_stmts_from_loop (struct loop *new_loop)
+-{
+- basic_block *bbs = get_loop_body (new_loop);
+- unsigned i;
+- for (i = 0; i < new_loop->num_nodes; ++i)
+- {
+- gimple_stmt_iterator gsi;
+- for (gsi = gsi_start_bb (bbs[i]); !gsi_end_p (gsi);)
+- {
+- gimple stmt = gsi_stmt (gsi);
+- if (is_gimple_assign (stmt)
+- && TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME
+- && has_zero_uses (gimple_assign_lhs (stmt)))
+- {
+- gsi_remove (&gsi, true);
+- release_defs (stmt);
+- }
+- else
+- gsi_next (&gsi);
+- }
+- }
+- free (bbs);
+-}
+-
+-
+ /* Function slpeel_tree_peel_loop_to_edge.
+
+ Peel the first (last) iterations of LOOP into a new prolog (epilog) loop
+@@ -1445,13 +1416,6 @@
+ BITMAP_FREE (definitions);
+ delete_update_ssa ();
+
+- /* Remove all pattern statements from the loop copy. They will confuse
+- the expander if DCE is disabled.
+- ??? The pattern recognizer should be split into an analysis and
+- a transformation phase that is then run only on the loop that is
+- going to be transformed. */
+- remove_dead_stmts_from_loop (new_loop);
+-
+ adjust_vec_debug_stmts ();
+
+ return new_loop;
+--- a/src/gcc/tree-vect-loop.c
++++ b/src/gcc/tree-vect-loop.c
+@@ -181,6 +181,8 @@
+ stmt_vec_info stmt_info;
+ int i;
+ HOST_WIDE_INT dummy;
++ gimple stmt, pattern_stmt = NULL, pattern_def_stmt = NULL;
++ bool analyze_pattern_stmt = false, pattern_def = false;
+
+ if (vect_print_dump_info (REPORT_DETAILS))
+ fprintf (vect_dump, "=== vect_determine_vectorization_factor ===");
+@@ -241,12 +243,20 @@
+ }
+ }
+
+- for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
++ for (si = gsi_start_bb (bb); !gsi_end_p (si) || analyze_pattern_stmt;)
+ {
+- tree vf_vectype;
+- gimple stmt = gsi_stmt (si);
+- stmt_info = vinfo_for_stmt (stmt);
++ tree vf_vectype;
+
++ if (analyze_pattern_stmt)
++ {
++ stmt = pattern_stmt;
++ analyze_pattern_stmt = false;
++ }
++ else
++ stmt = gsi_stmt (si);
++
++ stmt_info = vinfo_for_stmt (stmt);
++
+ if (vect_print_dump_info (REPORT_DETAILS))
+ {
+ fprintf (vect_dump, "==> examining statement: ");
+@@ -259,11 +269,57 @@
+ if (!STMT_VINFO_RELEVANT_P (stmt_info)
+ && !STMT_VINFO_LIVE_P (stmt_info))
+ {
+- if (vect_print_dump_info (REPORT_DETAILS))
+- fprintf (vect_dump, "skip.");
+- continue;
++ if (STMT_VINFO_IN_PATTERN_P (stmt_info)
++ && (pattern_stmt = STMT_VINFO_RELATED_STMT (stmt_info))
++ && (STMT_VINFO_RELEVANT_P (vinfo_for_stmt (pattern_stmt))
++ || STMT_VINFO_LIVE_P (vinfo_for_stmt (pattern_stmt))))
++ {
++ stmt = pattern_stmt;
++ stmt_info = vinfo_for_stmt (pattern_stmt);
++ if (vect_print_dump_info (REPORT_DETAILS))
++ {
++ fprintf (vect_dump, "==> examining pattern statement: ");
++ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
++ }
++ }
++ else
++ {
++ if (vect_print_dump_info (REPORT_DETAILS))
++ fprintf (vect_dump, "skip.");
++ gsi_next (&si);
++ continue;
++ }
+ }
+
++ else if (STMT_VINFO_IN_PATTERN_P (stmt_info)
++ && (pattern_stmt = STMT_VINFO_RELATED_STMT (stmt_info))
++ && (STMT_VINFO_RELEVANT_P (vinfo_for_stmt (pattern_stmt))
++ || STMT_VINFO_LIVE_P (vinfo_for_stmt (pattern_stmt))))
++ analyze_pattern_stmt = true;
++
++ /* If a pattern statement has a def stmt, analyze it too. */
++ if (is_pattern_stmt_p (stmt_info)
++ && (pattern_def_stmt = STMT_VINFO_PATTERN_DEF_STMT (stmt_info))
++ && (STMT_VINFO_RELEVANT_P (vinfo_for_stmt (pattern_def_stmt))
++ || STMT_VINFO_LIVE_P (vinfo_for_stmt (pattern_def_stmt))))
++ {
++ if (pattern_def)
++ pattern_def = false;
++ else
++ {
++ if (vect_print_dump_info (REPORT_DETAILS))
++ {
++ fprintf (vect_dump, "==> examining pattern def stmt: ");
++ print_gimple_stmt (vect_dump, pattern_def_stmt, 0,
++ TDF_SLIM);
++ }
++
++ pattern_def = true;
++ stmt = pattern_def_stmt;
++ stmt_info = vinfo_for_stmt (stmt);
++ }
++ }
++
+ if (gimple_get_lhs (stmt) == NULL_TREE)
+ {
+ if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
+@@ -295,9 +351,7 @@
+ }
+ else
+ {
+- gcc_assert (!STMT_VINFO_DATA_REF (stmt_info)
+- && !is_pattern_stmt_p (stmt_info));
+-
++ gcc_assert (!STMT_VINFO_DATA_REF (stmt_info));
+ scalar_type = TREE_TYPE (gimple_get_lhs (stmt));
+ if (vect_print_dump_info (REPORT_DETAILS))
+ {
+@@ -369,6 +423,9 @@
+ if (!vectorization_factor
+ || (nunits > vectorization_factor))
+ vectorization_factor = nunits;
++
++ if (!analyze_pattern_stmt && !pattern_def)
++ gsi_next (&si);
+ }
+ }
+
+@@ -817,25 +874,17 @@
+
+ if (stmt_info)
+ {
+- /* Check if this is a "pattern stmt" (introduced by the
+- vectorizer during the pattern recognition pass). */
+- bool remove_stmt_p = false;
+- gimple orig_stmt = STMT_VINFO_RELATED_STMT (stmt_info);
+- if (orig_stmt)
+- {
+- stmt_vec_info orig_stmt_info = vinfo_for_stmt (orig_stmt);
+- if (orig_stmt_info
+- && STMT_VINFO_IN_PATTERN_P (orig_stmt_info))
+- remove_stmt_p = true;
+- }
++ /* Check if this statement has a related "pattern stmt"
++ (introduced by the vectorizer during the pattern recognition
++ pass). Free pattern's stmt_vec_info. */
++ if (STMT_VINFO_IN_PATTERN_P (stmt_info)
++ && vinfo_for_stmt (STMT_VINFO_RELATED_STMT (stmt_info)))
++ free_stmt_vec_info (STMT_VINFO_RELATED_STMT (stmt_info));
+
+ /* Free stmt_vec_info. */
+ free_stmt_vec_info (stmt);
+-
+- /* Remove dead "pattern stmts". */
+- if (remove_stmt_p)
+- gsi_remove (&si, true);
+ }
++
+ gsi_next (&si);
+ }
+ }
+@@ -1409,7 +1458,7 @@
+
+ vect_analyze_scalar_cycles (loop_vinfo);
+
+- vect_pattern_recog (loop_vinfo);
++ vect_pattern_recog (loop_vinfo, NULL);
+
+ /* Data-flow analysis to detect stmts that do not need to be vectorized. */
+
+@@ -3233,8 +3282,8 @@
+
+ /* Get the loop-entry arguments. */
+ if (slp_node)
+- vect_get_slp_defs (reduction_op, NULL_TREE, slp_node, &vec_initial_defs,
+- NULL, reduc_index);
++ vect_get_vec_defs (reduction_op, NULL_TREE, stmt, &vec_initial_defs,
++ NULL, slp_node, reduc_index);
+ else
+ {
+ vec_initial_defs = VEC_alloc (tree, heap, 1);
+@@ -3959,7 +4008,7 @@
+ VEC (tree, heap) *vec_oprnds0 = NULL, *vec_oprnds1 = NULL, *vect_defs = NULL;
+ VEC (gimple, heap) *phis = NULL;
+ int vec_num;
+- tree def0, def1, tem;
++ tree def0, def1, tem, op0, op1 = NULL_TREE;
+
+ if (nested_in_vect_loop_p (loop, stmt))
+ {
+@@ -4038,6 +4087,9 @@
+ gcc_unreachable ();
+ }
+
++ if (code == COND_EXPR && slp_node)
++ return false;
++
+ scalar_dest = gimple_assign_lhs (stmt);
+ scalar_type = TREE_TYPE (scalar_dest);
+ if (!POINTER_TYPE_P (scalar_type) && !INTEGRAL_TYPE_P (scalar_type)
+@@ -4112,7 +4164,7 @@
+
+ if (code == COND_EXPR)
+ {
+- if (!vectorizable_condition (stmt, gsi, NULL, ops[reduc_index], 0))
++ if (!vectorizable_condition (stmt, gsi, NULL, ops[reduc_index], 0, NULL))
+ {
+ if (vect_print_dump_info (REPORT_DETAILS))
+ fprintf (vect_dump, "unsupported condition in reduction");
+@@ -4267,6 +4319,25 @@
+ return false;
+ }
+
++ /* In case of widenning multiplication by a constant, we update the type
++ of the constant to be the type of the other operand. We check that the
++ constant fits the type in the pattern recognition pass. */
++ if (code == DOT_PROD_EXPR
++ && !types_compatible_p (TREE_TYPE (ops[0]), TREE_TYPE (ops[1])))
++ {
++ if (TREE_CODE (ops[0]) == INTEGER_CST)
++ ops[0] = fold_convert (TREE_TYPE (ops[1]), ops[0]);
++ else if (TREE_CODE (ops[1]) == INTEGER_CST)
++ ops[1] = fold_convert (TREE_TYPE (ops[0]), ops[1]);
++ else
++ {
++ if (vect_print_dump_info (REPORT_DETAILS))
++ fprintf (vect_dump, "invalid types in dot-prod");
++
++ return false;
++ }
++ }
++
+ if (!vec_stmt) /* transformation not required. */
+ {
+ STMT_VINFO_TYPE (stmt_info) = reduc_vec_info_type;
+@@ -4365,7 +4436,7 @@
+ gcc_assert (!slp_node);
+ vectorizable_condition (stmt, gsi, vec_stmt,
+ PHI_RESULT (VEC_index (gimple, phis, 0)),
+- reduc_index);
++ reduc_index, NULL);
+ /* Multiple types are not supported for condition. */
+ break;
+ }
+@@ -4373,8 +4444,6 @@
+ /* Handle uses. */
+ if (j == 0)
+ {
+- tree op0, op1 = NULL_TREE;
+-
+ op0 = ops[!reduc_index];
+ if (op_type == ternary_op)
+ {
+@@ -4385,8 +4454,8 @@
+ }
+
+ if (slp_node)
+- vect_get_slp_defs (op0, op1, slp_node, &vec_oprnds0, &vec_oprnds1,
+- -1);
++ vect_get_vec_defs (op0, op1, stmt, &vec_oprnds0, &vec_oprnds1,
++ slp_node, -1);
+ else
+ {
+ loop_vec_def0 = vect_get_vec_def_for_operand (ops[!reduc_index],
+@@ -4404,11 +4473,19 @@
+ {
+ if (!slp_node)
+ {
+- enum vect_def_type dt = vect_unknown_def_type; /* Dummy */
+- loop_vec_def0 = vect_get_vec_def_for_stmt_copy (dt, loop_vec_def0);
++ enum vect_def_type dt;
++ gimple dummy_stmt;
++ tree dummy;
++
++ vect_is_simple_use (ops[!reduc_index], loop_vinfo, NULL,
++ &dummy_stmt, &dummy, &dt);
++ loop_vec_def0 = vect_get_vec_def_for_stmt_copy (dt,
++ loop_vec_def0);
+ VEC_replace (tree, vec_oprnds0, 0, loop_vec_def0);
+ if (op_type == ternary_op)
+ {
++ vect_is_simple_use (op1, loop_vinfo, NULL, &dummy_stmt,
++ &dummy, &dt);
+ loop_vec_def1 = vect_get_vec_def_for_stmt_copy (dt,
+ loop_vec_def1);
+ VEC_replace (tree, vec_oprnds1, 0, loop_vec_def1);
+@@ -4713,6 +4790,8 @@
+ tree cond_expr = NULL_TREE;
+ gimple_seq cond_expr_stmt_list = NULL;
+ bool do_peeling_for_loop_bound;
++ gimple stmt, pattern_stmt, pattern_def_stmt;
++ bool transform_pattern_stmt = false, pattern_def = false;
+
+ if (vect_print_dump_info (REPORT_DETAILS))
+ fprintf (vect_dump, "=== vec_transform_loop ===");
+@@ -4800,11 +4879,19 @@
+ }
+ }
+
+- for (si = gsi_start_bb (bb); !gsi_end_p (si);)
++ pattern_stmt = NULL;
++ for (si = gsi_start_bb (bb); !gsi_end_p (si) || transform_pattern_stmt;)
+ {
+- gimple stmt = gsi_stmt (si);
+ bool is_store;
+
++ if (transform_pattern_stmt)
++ {
++ stmt = pattern_stmt;
++ transform_pattern_stmt = false;
++ }
++ else
++ stmt = gsi_stmt (si);
++
+ if (vect_print_dump_info (REPORT_DETAILS))
+ {
+ fprintf (vect_dump, "------>vectorizing statement: ");
+@@ -4827,14 +4914,54 @@
+
+ if (!STMT_VINFO_RELEVANT_P (stmt_info)
+ && !STMT_VINFO_LIVE_P (stmt_info))
+- {
+- gsi_next (&si);
+- continue;
++ {
++ if (STMT_VINFO_IN_PATTERN_P (stmt_info)
++ && (pattern_stmt = STMT_VINFO_RELATED_STMT (stmt_info))
++ && (STMT_VINFO_RELEVANT_P (vinfo_for_stmt (pattern_stmt))
++ || STMT_VINFO_LIVE_P (vinfo_for_stmt (pattern_stmt))))
++ {
++ stmt = pattern_stmt;
++ stmt_info = vinfo_for_stmt (stmt);
++ }
++ else
++ {
++ gsi_next (&si);
++ continue;
++ }
+ }
++ else if (STMT_VINFO_IN_PATTERN_P (stmt_info)
++ && (pattern_stmt = STMT_VINFO_RELATED_STMT (stmt_info))
++ && (STMT_VINFO_RELEVANT_P (vinfo_for_stmt (pattern_stmt))
++ || STMT_VINFO_LIVE_P (vinfo_for_stmt (pattern_stmt))))
++ transform_pattern_stmt = true;
++
++ /* If pattern statement has a def stmt, vectorize it too. */
++ if (is_pattern_stmt_p (stmt_info)
++ && (pattern_def_stmt = STMT_VINFO_PATTERN_DEF_STMT (stmt_info))
++ && (STMT_VINFO_RELEVANT_P (vinfo_for_stmt (pattern_def_stmt))
++ || STMT_VINFO_LIVE_P (vinfo_for_stmt (pattern_def_stmt))))
++ {
++ if (pattern_def)
++ pattern_def = false;
++ else
++ {
++ if (vect_print_dump_info (REPORT_DETAILS))
++ {
++ fprintf (vect_dump, "==> vectorizing pattern def"
++ " stmt: ");
++ print_gimple_stmt (vect_dump, pattern_def_stmt, 0,
++ TDF_SLIM);
++ }
++
++ pattern_def = true;
++ stmt = pattern_def_stmt;
++ stmt_info = vinfo_for_stmt (stmt);
++ }
++ }
+
+ gcc_assert (STMT_VINFO_VECTYPE (stmt_info));
+- nunits =
+- (unsigned int) TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info));
++ nunits = (unsigned int) TYPE_VECTOR_SUBPARTS (
++ STMT_VINFO_VECTYPE (stmt_info));
+ if (!STMT_SLP_TYPE (stmt_info)
+ && nunits != (unsigned int) vectorization_factor
+ && vect_print_dump_info (REPORT_DETAILS))
+@@ -4859,8 +4986,9 @@
+ /* Hybrid SLP stmts must be vectorized in addition to SLP. */
+ if (!vinfo_for_stmt (stmt) || PURE_SLP_STMT (stmt_info))
+ {
+- gsi_next (&si);
+- continue;
++ if (!transform_pattern_stmt && !pattern_def)
++ gsi_next (&si);
++ continue;
+ }
+ }
+
+@@ -4879,7 +5007,7 @@
+ the chain. */
+ vect_remove_stores (DR_GROUP_FIRST_DR (stmt_info));
+ gsi_remove (&si, true);
+- continue;
++ continue;
+ }
+ else
+ {
+@@ -4889,7 +5017,9 @@
+ continue;
+ }
+ }
+- gsi_next (&si);
++
++ if (!transform_pattern_stmt && !pattern_def)
++ gsi_next (&si);
+ } /* stmts in BB */
+ } /* BBs in loop */
+
+--- a/src/gcc/tree-vect-patterns.c
++++ b/src/gcc/tree-vect-patterns.c
+@@ -38,33 +38,40 @@
+ #include "recog.h"
+ #include "diagnostic-core.h"
+
+-/* Function prototypes */
+-static void vect_pattern_recog_1
+- (gimple (* ) (gimple, tree *, tree *), gimple_stmt_iterator);
+-static bool widened_name_p (tree, gimple, tree *, gimple *);
+-
+ /* Pattern recognition functions */
+-static gimple vect_recog_widen_sum_pattern (gimple, tree *, tree *);
+-static gimple vect_recog_widen_mult_pattern (gimple, tree *, tree *);
+-static gimple vect_recog_dot_prod_pattern (gimple, tree *, tree *);
+-static gimple vect_recog_pow_pattern (gimple, tree *, tree *);
++static gimple vect_recog_widen_sum_pattern (VEC (gimple, heap) **, tree *,
++ tree *);
++static gimple vect_recog_widen_mult_pattern (VEC (gimple, heap) **, tree *,
++ tree *);
++static gimple vect_recog_dot_prod_pattern (VEC (gimple, heap) **, tree *,
++ tree *);
++static gimple vect_recog_pow_pattern (VEC (gimple, heap) **, tree *, tree *);
++static gimple vect_recog_over_widening_pattern (VEC (gimple, heap) **, tree *,
++ tree *);
++static gimple vect_recog_widen_shift_pattern (VEC (gimple, heap) **,
++ tree *, tree *);
++static gimple vect_recog_mixed_size_cond_pattern (VEC (gimple, heap) **,
++ tree *, tree *);
+ static vect_recog_func_ptr vect_vect_recog_func_ptrs[NUM_PATTERNS] = {
+ vect_recog_widen_mult_pattern,
+ vect_recog_widen_sum_pattern,
+ vect_recog_dot_prod_pattern,
+- vect_recog_pow_pattern};
+-
++ vect_recog_pow_pattern,
++ vect_recog_over_widening_pattern,
++ vect_recog_widen_shift_pattern,
++ vect_recog_mixed_size_cond_pattern};
+
+-/* Function widened_name_p
+
+- Check whether NAME, an ssa-name used in USE_STMT,
+- is a result of a type-promotion, such that:
+- DEF_STMT: NAME = NOP (name0)
+- where the type of name0 (HALF_TYPE) is smaller than the type of NAME.
+-*/
++/* Check whether NAME, an ssa-name used in USE_STMT,
++ is a result of a type promotion or demotion, such that:
++ DEF_STMT: NAME = NOP (name0)
++ where the type of name0 (ORIG_TYPE) is smaller/bigger than the type of NAME.
++ If CHECK_SIGN is TRUE, check that either both types are signed or both are
++ unsigned. */
+
+ static bool
+-widened_name_p (tree name, gimple use_stmt, tree *half_type, gimple *def_stmt)
++type_conversion_p (tree name, gimple use_stmt, bool check_sign,
++ tree *orig_type, gimple *def_stmt, bool *promotion)
+ {
+ tree dummy;
+ gimple dummy_gimple;
+@@ -74,35 +81,43 @@
+ tree oprnd0;
+ enum vect_def_type dt;
+ tree def;
++ bb_vec_info bb_vinfo;
+
+ stmt_vinfo = vinfo_for_stmt (use_stmt);
+ loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
++ bb_vinfo = STMT_VINFO_BB_VINFO (stmt_vinfo);
+
+- if (!vect_is_simple_use (name, loop_vinfo, NULL, def_stmt, &def, &dt))
++ if (!vect_is_simple_use (name, loop_vinfo, bb_vinfo, def_stmt, &def, &dt))
+ return false;
+
+ if (dt != vect_internal_def
+ && dt != vect_external_def && dt != vect_constant_def)
+ return false;
+
+- if (! *def_stmt)
++ if (!*def_stmt)
+ return false;
+
+ if (!is_gimple_assign (*def_stmt))
+ return false;
+
+- if (gimple_assign_rhs_code (*def_stmt) != NOP_EXPR)
++ if (!CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (*def_stmt)))
+ return false;
+
+ oprnd0 = gimple_assign_rhs1 (*def_stmt);
+
+- *half_type = TREE_TYPE (oprnd0);
+- if (!INTEGRAL_TYPE_P (type) || !INTEGRAL_TYPE_P (*half_type)
+- || (TYPE_UNSIGNED (type) != TYPE_UNSIGNED (*half_type))
+- || (TYPE_PRECISION (type) < (TYPE_PRECISION (*half_type) * 2)))
++ *orig_type = TREE_TYPE (oprnd0);
++ if (!INTEGRAL_TYPE_P (type) || !INTEGRAL_TYPE_P (*orig_type)
++ || ((TYPE_UNSIGNED (type) != TYPE_UNSIGNED (*orig_type)) && check_sign))
++ return false;
++
++ if (TYPE_PRECISION (type) >= (TYPE_PRECISION (*orig_type) * 2))
++ *promotion = true;
++ else if (TYPE_PRECISION (*orig_type) >= (TYPE_PRECISION (type) * 2))
++ *promotion = false;
++ else
+ return false;
+
+- if (!vect_is_simple_use (oprnd0, loop_vinfo, NULL, &dummy_gimple, &dummy,
++ if (!vect_is_simple_use (oprnd0, loop_vinfo, bb_vinfo, &dummy_gimple, &dummy,
+ &dt))
+ return false;
+
+@@ -145,9 +160,9 @@
+
+ Input:
+
+- * LAST_STMT: A stmt from which the pattern search begins. In the example,
+- when this function is called with S7, the pattern {S3,S4,S5,S6,S7} will be
+- detected.
++ * STMTS: Contains a stmt from which the pattern search begins. In the
++ example, when this function is called with S7, the pattern {S3,S4,S5,S6,S7}
++ will be detected.
+
+ Output:
+
+@@ -168,9 +183,10 @@
+ inner-loop nested in an outer-loop that us being vectorized). */
+
+ static gimple
+-vect_recog_dot_prod_pattern (gimple last_stmt, tree *type_in, tree *type_out)
++vect_recog_dot_prod_pattern (VEC (gimple, heap) **stmts, tree *type_in,
++ tree *type_out)
+ {
+- gimple stmt;
++ gimple stmt, last_stmt = VEC_index (gimple, *stmts, 0);
+ tree oprnd0, oprnd1;
+ tree oprnd00, oprnd01;
+ stmt_vec_info stmt_vinfo = vinfo_for_stmt (last_stmt);
+@@ -178,8 +194,14 @@
+ gimple pattern_stmt;
+ tree prod_type;
+ loop_vec_info loop_info = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
+- struct loop *loop = LOOP_VINFO_LOOP (loop_info);
++ struct loop *loop;
+ tree var, rhs;
++ bool promotion;
++
++ if (!loop_info)
++ return NULL;
++
++ loop = LOOP_VINFO_LOOP (loop_info);
+
+ if (!is_gimple_assign (last_stmt))
+ return NULL;
+@@ -238,7 +260,9 @@
+ return NULL;
+ stmt = last_stmt;
+
+- if (widened_name_p (oprnd0, stmt, &half_type, &def_stmt))
++ if (type_conversion_p (oprnd0, stmt, true, &half_type, &def_stmt,
++ &promotion)
++ && promotion)
+ {
+ stmt = def_stmt;
+ oprnd0 = gimple_assign_rhs1 (stmt);
+@@ -293,10 +317,14 @@
+ if (!types_compatible_p (TREE_TYPE (oprnd0), prod_type)
+ || !types_compatible_p (TREE_TYPE (oprnd1), prod_type))
+ return NULL;
+- if (!widened_name_p (oprnd0, stmt, &half_type0, &def_stmt))
++ if (!type_conversion_p (oprnd0, stmt, true, &half_type0, &def_stmt,
++ &promotion)
++ || !promotion)
+ return NULL;
+ oprnd00 = gimple_assign_rhs1 (def_stmt);
+- if (!widened_name_p (oprnd1, stmt, &half_type1, &def_stmt))
++ if (!type_conversion_p (oprnd0, stmt, true, &half_type1, &def_stmt,
++ &promotion)
++ || !promotion)
+ return NULL;
+ oprnd01 = gimple_assign_rhs1 (def_stmt);
+ if (!types_compatible_p (half_type0, half_type1))
+@@ -327,6 +355,100 @@
+ return pattern_stmt;
+ }
+
++
++/* Handle widening operation by a constant. At the moment we support MULT_EXPR
++ and LSHIFT_EXPR.
++
++ For MULT_EXPR we check that CONST_OPRND fits HALF_TYPE, and for LSHIFT_EXPR
++ we check that CONST_OPRND is less or equal to the size of HALF_TYPE.
++
++ Otherwise, if the type of the result (TYPE) is at least 4 times bigger than
++ HALF_TYPE, and there is an intermediate type (2 times smaller than TYPE)
++ that satisfies the above restrictions, we can perform a widening opeartion
++ from the intermediate type to TYPE and replace a_T = (TYPE) a_t;
++ with a_it = (interm_type) a_t; */
++
++static bool
++vect_handle_widen_op_by_const (gimple stmt, enum tree_code code,
++ tree const_oprnd, tree *oprnd,
++ VEC (gimple, heap) **stmts, tree type,
++ tree *half_type, gimple def_stmt)
++{
++ tree new_type, new_oprnd, tmp;
++ gimple new_stmt;
++ loop_vec_info loop_vinfo;
++ struct loop *loop = NULL;
++ bb_vec_info bb_vinfo;
++ stmt_vec_info stmt_vinfo;
++
++ stmt_vinfo = vinfo_for_stmt (stmt);
++ loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
++ bb_vinfo = STMT_VINFO_BB_VINFO (stmt_vinfo);
++ if (loop_vinfo)
++ loop = LOOP_VINFO_LOOP (loop_vinfo);
++
++ if (code != MULT_EXPR && code != LSHIFT_EXPR)
++ return false;
++
++ if (((code == MULT_EXPR && int_fits_type_p (const_oprnd, *half_type))
++ || (code == LSHIFT_EXPR
++ && compare_tree_int (const_oprnd, TYPE_PRECISION (*half_type))
++ != 1))
++ && TYPE_PRECISION (type) == (TYPE_PRECISION (*half_type) * 2))
++ {
++ /* CONST_OPRND is a constant of HALF_TYPE. */
++ *oprnd = gimple_assign_rhs1 (def_stmt);
++ return true;
++ }
++
++ if (TYPE_PRECISION (type) < (TYPE_PRECISION (*half_type) * 4)
++ || !gimple_bb (def_stmt)
++ || (loop && !flow_bb_inside_loop_p (loop, gimple_bb (def_stmt)))
++ || (!loop && gimple_bb (def_stmt) != BB_VINFO_BB (bb_vinfo)
++ && gimple_code (def_stmt) != GIMPLE_PHI)
++ || !vinfo_for_stmt (def_stmt))
++ return false;
++
++ /* TYPE is 4 times bigger than HALF_TYPE, try widening operation for
++ a type 2 times bigger than HALF_TYPE. */
++ new_type = build_nonstandard_integer_type (TYPE_PRECISION (type) / 2,
++ TYPE_UNSIGNED (type));
++ if ((code == MULT_EXPR && !int_fits_type_p (const_oprnd, new_type))
++ || (code == LSHIFT_EXPR
++ && compare_tree_int (const_oprnd, TYPE_PRECISION (new_type)) == 1))
++ return false;
++
++ /* Use NEW_TYPE for widening operation. */
++ if (STMT_VINFO_RELATED_STMT (vinfo_for_stmt (def_stmt)))
++ {
++ new_stmt = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (def_stmt));
++ /* Check if the already created pattern stmt is what we need. */
++ if (!is_gimple_assign (new_stmt)
++ || gimple_assign_rhs_code (new_stmt) != NOP_EXPR
++ || TREE_TYPE (gimple_assign_lhs (new_stmt)) != new_type)
++ return false;
++
++ VEC_safe_push (gimple, heap, *stmts, def_stmt);
++ *oprnd = gimple_assign_lhs (new_stmt);
++ }
++ else
++ {
++ /* Create a_T = (NEW_TYPE) a_t; */
++ *oprnd = gimple_assign_rhs1 (def_stmt);
++ tmp = create_tmp_var (new_type, NULL);
++ add_referenced_var (tmp);
++ new_oprnd = make_ssa_name (tmp, NULL);
++ new_stmt = gimple_build_assign_with_ops (NOP_EXPR, new_oprnd, *oprnd,
++ NULL_TREE);
++ STMT_VINFO_RELATED_STMT (vinfo_for_stmt (def_stmt)) = new_stmt;
++ VEC_safe_push (gimple, heap, *stmts, def_stmt);
++ *oprnd = new_oprnd;
++ }
++
++ *half_type = new_type;
++ return true;
++}
++
+ /* Function vect_recog_widen_mult_pattern
+
+ Try to find the following pattern:
+@@ -342,37 +464,80 @@
+
+ where type 'TYPE' is at least double the size of type 'type'.
+
+- Input:
++ Also detect unsgigned cases:
+
+- * LAST_STMT: A stmt from which the pattern search begins. In the example,
+- when this function is called with S5, the pattern {S3,S4,S5} is be detected.
++ unsigned type a_t, b_t;
++ unsigned TYPE u_prod_T;
++ TYPE a_T, b_T, prod_T;
++
++ S1 a_t = ;
++ S2 b_t = ;
++ S3 a_T = (TYPE) a_t;
++ S4 b_T = (TYPE) b_t;
++ S5 prod_T = a_T * b_T;
++ S6 u_prod_T = (unsigned TYPE) prod_T;
++
++ and multiplication by constants:
++
++ type a_t;
++ TYPE a_T, prod_T;
++
++ S1 a_t = ;
++ S3 a_T = (TYPE) a_t;
++ S5 prod_T = a_T * CONST;
++
++ A special case of multiplication by constants is when 'TYPE' is 4 times
++ bigger than 'type', but CONST fits an intermediate type 2 times smaller
++ than 'TYPE'. In that case we create an additional pattern stmt for S3
++ to create a variable of the intermediate type, and perform widen-mult
++ on the intermediate type as well:
++
++ type a_t;
++ interm_type a_it;
++ TYPE a_T, prod_T, prod_T';
++
++ S1 a_t = ;
++ S3 a_T = (TYPE) a_t;
++ '--> a_it = (interm_type) a_t;
++ S5 prod_T = a_T * CONST;
++ '--> prod_T' = a_it w* CONST;
++
++ Input/Output:
++
++ * STMTS: Contains a stmt from which the pattern search begins. In the
++ example, when this function is called with S5, the pattern {S3,S4,S5,(S6)}
++ is detected. In case of unsigned widen-mult, the original stmt (S5) is
++ replaced with S6 in STMTS. In case of multiplication by a constant
++ of an intermediate type (the last case above), STMTS also contains S3
++ (inserted before S5).
+
+ Output:
+
+ * TYPE_IN: The type of the input arguments to the pattern.
+
+- * TYPE_OUT: The type of the output of this pattern.
++ * TYPE_OUT: The type of the output of this pattern.
+
+ * Return value: A new stmt that will be used to replace the sequence of
+- stmts that constitute the pattern. In this case it will be:
++ stmts that constitute the pattern. In this case it will be:
+ WIDEN_MULT <a_t, b_t>
+ */
+
+ static gimple
+-vect_recog_widen_mult_pattern (gimple last_stmt,
+- tree *type_in,
+- tree *type_out)
++vect_recog_widen_mult_pattern (VEC (gimple, heap) **stmts,
++ tree *type_in, tree *type_out)
+ {
++ gimple last_stmt = VEC_pop (gimple, *stmts);
+ gimple def_stmt0, def_stmt1;
+ tree oprnd0, oprnd1;
+ tree type, half_type0, half_type1;
+ gimple pattern_stmt;
+- tree vectype, vectype_out;
++ tree vectype, vectype_out = NULL_TREE;
+ tree dummy;
+ tree var;
+ enum tree_code dummy_code;
+ int dummy_int;
+ VEC (tree, heap) *dummy_vec;
++ bool op1_ok, promotion;
+
+ if (!is_gimple_assign (last_stmt))
+ return NULL;
+@@ -391,15 +556,68 @@
+ || !types_compatible_p (TREE_TYPE (oprnd1), type))
+ return NULL;
+
+- /* Check argument 0 */
+- if (!widened_name_p (oprnd0, last_stmt, &half_type0, &def_stmt0))
++ /* Check argument 0. */
++ if (!type_conversion_p (oprnd0, last_stmt, false, &half_type0, &def_stmt0,
++ &promotion)
++ || !promotion)
+ return NULL;
+- oprnd0 = gimple_assign_rhs1 (def_stmt0);
++ /* Check argument 1. */
++ op1_ok = type_conversion_p (oprnd1, last_stmt, false, &half_type1,
++ &def_stmt1, &promotion);
++ if (op1_ok && promotion)
++ {
++ oprnd0 = gimple_assign_rhs1 (def_stmt0);
++ oprnd1 = gimple_assign_rhs1 (def_stmt1);
++ }
++ else
++ {
++ if (TREE_CODE (oprnd1) == INTEGER_CST
++ && TREE_CODE (half_type0) == INTEGER_TYPE
++ && vect_handle_widen_op_by_const (last_stmt, MULT_EXPR, oprnd1,
++ &oprnd0, stmts, type,
++ &half_type0, def_stmt0))
++ half_type1 = half_type0;
++ else
++ return NULL;
++ }
+
+- /* Check argument 1 */
+- if (!widened_name_p (oprnd1, last_stmt, &half_type1, &def_stmt1))
+- return NULL;
+- oprnd1 = gimple_assign_rhs1 (def_stmt1);
++ /* Handle unsigned case. Look for
++ S6 u_prod_T = (unsigned TYPE) prod_T;
++ Use unsigned TYPE as the type for WIDEN_MULT_EXPR. */
++ if (TYPE_UNSIGNED (type) != TYPE_UNSIGNED (half_type0))
++ {
++ tree lhs = gimple_assign_lhs (last_stmt), use_lhs;
++ imm_use_iterator imm_iter;
++ use_operand_p use_p;
++ int nuses = 0;
++ gimple use_stmt = NULL;
++ tree use_type;
++
++ if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (half_type1))
++ return NULL;
++
++ FOR_EACH_IMM_USE_FAST (use_p, imm_iter, lhs)
++ {
++ if (is_gimple_debug (USE_STMT (use_p)))
++ continue;
++ use_stmt = USE_STMT (use_p);
++ nuses++;
++ }
++
++ if (nuses != 1 || !is_gimple_assign (use_stmt)
++ || gimple_assign_rhs_code (use_stmt) != NOP_EXPR)
++ return NULL;
++
++ use_lhs = gimple_assign_lhs (use_stmt);
++ use_type = TREE_TYPE (use_lhs);
++ if (!INTEGRAL_TYPE_P (use_type)
++ || (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (use_type))
++ || (TYPE_PRECISION (type) != TYPE_PRECISION (use_type)))
++ return NULL;
++
++ type = use_type;
++ last_stmt = use_stmt;
++ }
+
+ if (!types_compatible_p (half_type0, half_type1))
+ return NULL;
+@@ -431,6 +649,7 @@
+ if (vect_print_dump_info (REPORT_DETAILS))
+ print_gimple_stmt (vect_dump, pattern_stmt, 0, TDF_SLIM);
+
++ VEC_safe_push (gimple, heap, *stmts, last_stmt);
+ return pattern_stmt;
+ }
+
+@@ -462,8 +681,9 @@
+ */
+
+ static gimple
+-vect_recog_pow_pattern (gimple last_stmt, tree *type_in, tree *type_out)
++vect_recog_pow_pattern (VEC (gimple, heap) **stmts, tree *type_in, tree *type_out)
+ {
++ gimple last_stmt = VEC_index (gimple, *stmts, 0);
+ tree fn, base, exp = NULL;
+ gimple stmt;
+ tree var;
+@@ -574,16 +794,24 @@
+ inner-loop nested in an outer-loop that us being vectorized). */
+
+ static gimple
+-vect_recog_widen_sum_pattern (gimple last_stmt, tree *type_in, tree *type_out)
++vect_recog_widen_sum_pattern (VEC (gimple, heap) **stmts, tree *type_in,
++ tree *type_out)
+ {
++ gimple last_stmt = VEC_index (gimple, *stmts, 0);
+ gimple stmt;
+ tree oprnd0, oprnd1;
+ stmt_vec_info stmt_vinfo = vinfo_for_stmt (last_stmt);
+ tree type, half_type;
+ gimple pattern_stmt;
+ loop_vec_info loop_info = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
+- struct loop *loop = LOOP_VINFO_LOOP (loop_info);
++ struct loop *loop;
+ tree var;
++ bool promotion;
++
++ if (!loop_info)
++ return NULL;
++
++ loop = LOOP_VINFO_LOOP (loop_info);
+
+ if (!is_gimple_assign (last_stmt))
+ return NULL;
+@@ -612,14 +840,16 @@
+ || !types_compatible_p (TREE_TYPE (oprnd1), type))
+ return NULL;
+
+- /* So far so good. Since last_stmt was detected as a (summation) reduction,
++ /* So far so good. Since last_stmt was detected as a (summation) reduction,
+ we know that oprnd1 is the reduction variable (defined by a loop-header
+ phi), and oprnd0 is an ssa-name defined by a stmt in the loop body.
+ Left to check that oprnd0 is defined by a cast from type 'type' to type
+ 'TYPE'. */
+
+- if (!widened_name_p (oprnd0, last_stmt, &half_type, &stmt))
+- return NULL;
++ if (!type_conversion_p (oprnd0, last_stmt, true, &half_type, &stmt,
++ &promotion)
++ || !promotion)
++ return NULL;
+
+ oprnd0 = gimple_assign_rhs1 (stmt);
+ *type_in = half_type;
+@@ -641,9 +871,813 @@
+ when doing outer-loop vectorization. */
+ gcc_assert (!nested_in_vect_loop_p (loop, last_stmt));
+
++ VEC_safe_push (gimple, heap, *stmts, last_stmt);
++ return pattern_stmt;
++}
++
++
++/* Return TRUE if the operation in STMT can be performed on a smaller type.
++
++ Input:
++ STMT - a statement to check.
++ DEF - we support operations with two operands, one of which is constant.
++ The other operand can be defined by a demotion operation, or by a
++ previous statement in a sequence of over-promoted operations. In the
++ later case DEF is used to replace that operand. (It is defined by a
++ pattern statement we created for the previous statement in the
++ sequence).
++
++ Input/output:
++ NEW_TYPE - Output: a smaller type that we are trying to use. Input: if not
++ NULL, it's the type of DEF.
++ STMTS - additional pattern statements. If a pattern statement (type
++ conversion) is created in this function, its original statement is
++ added to STMTS.
++
++ Output:
++ OP0, OP1 - if the operation fits a smaller type, OP0 and OP1 are the new
++ operands to use in the new pattern statement for STMT (will be created
++ in vect_recog_over_widening_pattern ()).
++ NEW_DEF_STMT - in case DEF has to be promoted, we create two pattern
++ statements for STMT: the first one is a type promotion and the second
++ one is the operation itself. We return the type promotion statement
++ in NEW_DEF_STMT and further store it in STMT_VINFO_PATTERN_DEF_STMT of
++ the second pattern statement. */
++
++static bool
++vect_operation_fits_smaller_type (gimple stmt, tree def, tree *new_type,
++ tree *op0, tree *op1, gimple *new_def_stmt,
++ VEC (gimple, heap) **stmts)
++{
++ enum tree_code code;
++ tree const_oprnd, oprnd;
++ tree interm_type = NULL_TREE, half_type, tmp, new_oprnd, type;
++ gimple def_stmt, new_stmt;
++ bool first = false;
++ loop_vec_info loop_info = STMT_VINFO_LOOP_VINFO (vinfo_for_stmt (stmt));
++ bool promotion;
++ bb_vec_info bb_info = STMT_VINFO_BB_VINFO (vinfo_for_stmt (stmt));
++ struct loop *loop = NULL;
++
++ if (loop_info)
++ loop = LOOP_VINFO_LOOP (loop_info);
++
++ *new_def_stmt = NULL;
++
++ if (!is_gimple_assign (stmt))
++ return false;
++
++ code = gimple_assign_rhs_code (stmt);
++ if (code != LSHIFT_EXPR && code != RSHIFT_EXPR
++ && code != BIT_IOR_EXPR && code != BIT_XOR_EXPR && code != BIT_AND_EXPR)
++ return false;
++
++ oprnd = gimple_assign_rhs1 (stmt);
++ const_oprnd = gimple_assign_rhs2 (stmt);
++ type = gimple_expr_type (stmt);
++
++ if (TREE_CODE (oprnd) != SSA_NAME
++ || TREE_CODE (const_oprnd) != INTEGER_CST)
++ return false;
++
++ /* If we are in the middle of a sequence, we use DEF from a previous
++ statement. Otherwise, OPRND has to be a result of type promotion. */
++ if (*new_type)
++ {
++ half_type = *new_type;
++ oprnd = def;
++ }
++ else
++ {
++ first = true;
++ if (!type_conversion_p (oprnd, stmt, false, &half_type, &def_stmt,
++ &promotion)
++ || !promotion
++ || !gimple_bb (def_stmt)
++ || (loop && !flow_bb_inside_loop_p (loop, gimple_bb (def_stmt)))
++ || (!loop && gimple_bb (def_stmt) != BB_VINFO_BB (bb_info)
++ && gimple_code (def_stmt) != GIMPLE_PHI)
++ || !vinfo_for_stmt (def_stmt))
++ return false;
++ }
++
++ /* Can we perform the operation on a smaller type? */
++ switch (code)
++ {
++ case BIT_IOR_EXPR:
++ case BIT_XOR_EXPR:
++ case BIT_AND_EXPR:
++ if (!int_fits_type_p (const_oprnd, half_type))
++ {
++ /* HALF_TYPE is not enough. Try a bigger type if possible. */
++ if (TYPE_PRECISION (type) < (TYPE_PRECISION (half_type) * 4))
++ return false;
++
++ interm_type = build_nonstandard_integer_type (
++ TYPE_PRECISION (half_type) * 2, TYPE_UNSIGNED (type));
++ if (!int_fits_type_p (const_oprnd, interm_type))
++ return false;
++ }
++
++ break;
++
++ case LSHIFT_EXPR:
++ /* Try intermediate type - HALF_TYPE is not enough for sure. */
++ if (TYPE_PRECISION (type) < (TYPE_PRECISION (half_type) * 4))
++ return false;
++
++ /* Check that HALF_TYPE size + shift amount <= INTERM_TYPE size.
++ (e.g., if the original value was char, the shift amount is at most 8
++ if we want to use short). */
++ if (compare_tree_int (const_oprnd, TYPE_PRECISION (half_type)) == 1)
++ return false;
++
++ interm_type = build_nonstandard_integer_type (
++ TYPE_PRECISION (half_type) * 2, TYPE_UNSIGNED (type));
++
++ if (!vect_supportable_shift (code, interm_type))
++ return false;
++
++ break;
++
++ case RSHIFT_EXPR:
++ if (vect_supportable_shift (code, half_type))
++ break;
++
++ /* Try intermediate type - HALF_TYPE is not supported. */
++ if (TYPE_PRECISION (type) < (TYPE_PRECISION (half_type) * 4))
++ return false;
++
++ interm_type = build_nonstandard_integer_type (
++ TYPE_PRECISION (half_type) * 2, TYPE_UNSIGNED (type));
++
++ if (!vect_supportable_shift (code, interm_type))
++ return false;
++
++ break;
++
++ default:
++ gcc_unreachable ();
++ }
++
++ /* There are four possible cases:
++ 1. OPRND is defined by a type promotion (in that case FIRST is TRUE, it's
++ the first statement in the sequence)
++ a. The original, HALF_TYPE, is not enough - we replace the promotion
++ from HALF_TYPE to TYPE with a promotion to INTERM_TYPE.
++ b. HALF_TYPE is sufficient, OPRND is set as the RHS of the original
++ promotion.
++ 2. OPRND is defined by a pattern statement we created.
++ a. Its type is not sufficient for the operation, we create a new stmt:
++ a type conversion for OPRND from HALF_TYPE to INTERM_TYPE. We store
++ this statement in NEW_DEF_STMT, and it is later put in
++ STMT_VINFO_PATTERN_DEF_STMT of the pattern statement for STMT.
++ b. OPRND is good to use in the new statement. */
++ if (first)
++ {
++ if (interm_type)
++ {
++ /* Replace the original type conversion HALF_TYPE->TYPE with
++ HALF_TYPE->INTERM_TYPE. */
++ if (STMT_VINFO_RELATED_STMT (vinfo_for_stmt (def_stmt)))
++ {
++ new_stmt = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (def_stmt));
++ /* Check if the already created pattern stmt is what we need. */
++ if (!is_gimple_assign (new_stmt)
++ || gimple_assign_rhs_code (new_stmt) != NOP_EXPR
++ || TREE_TYPE (gimple_assign_lhs (new_stmt)) != interm_type)
++ return false;
++
++ VEC_safe_push (gimple, heap, *stmts, def_stmt);
++ oprnd = gimple_assign_lhs (new_stmt);
++ }
++ else
++ {
++ /* Create NEW_OPRND = (INTERM_TYPE) OPRND. */
++ oprnd = gimple_assign_rhs1 (def_stmt);
++ tmp = create_tmp_reg (interm_type, NULL);
++ add_referenced_var (tmp);
++ new_oprnd = make_ssa_name (tmp, NULL);
++ new_stmt = gimple_build_assign_with_ops (NOP_EXPR, new_oprnd,
++ oprnd, NULL_TREE);
++ SSA_NAME_DEF_STMT (new_oprnd) = new_stmt;
++ STMT_VINFO_RELATED_STMT (vinfo_for_stmt (def_stmt)) = new_stmt;
++ VEC_safe_push (gimple, heap, *stmts, def_stmt);
++ oprnd = new_oprnd;
++ }
++ }
++ else
++ {
++ /* Retrieve the operand before the type promotion. */
++ oprnd = gimple_assign_rhs1 (def_stmt);
++ }
++ }
++ else
++ {
++ if (interm_type)
++ {
++ /* Create a type conversion HALF_TYPE->INTERM_TYPE. */
++ tmp = create_tmp_reg (interm_type, NULL);
++ add_referenced_var (tmp);
++ new_oprnd = make_ssa_name (tmp, NULL);
++ new_stmt = gimple_build_assign_with_ops (NOP_EXPR, new_oprnd,
++ oprnd, NULL_TREE);
++ SSA_NAME_DEF_STMT (new_oprnd) = new_stmt;
++ oprnd = new_oprnd;
++ *new_def_stmt = new_stmt;
++ }
++
++ /* Otherwise, OPRND is already set. */
++ }
++
++ if (interm_type)
++ *new_type = interm_type;
++ else
++ *new_type = half_type;
++
++ *op0 = oprnd;
++ *op1 = fold_convert (*new_type, const_oprnd);
++
++ return true;
++}
++
++
++/* Try to find a statement or a sequence of statements that can be performed
++ on a smaller type:
++
++ type x_t;
++ TYPE x_T, res0_T, res1_T;
++ loop:
++ S1 x_t = *p;
++ S2 x_T = (TYPE) x_t;
++ S3 res0_T = op (x_T, C0);
++ S4 res1_T = op (res0_T, C1);
++ S5 ... = () res1_T; - type demotion
++
++ where type 'TYPE' is at least double the size of type 'type', C0 and C1 are
++ constants.
++ Check if S3 and S4 can be done on a smaller type than 'TYPE', it can either
++ be 'type' or some intermediate type. For now, we expect S5 to be a type
++ demotion operation. We also check that S3 and S4 have only one use.
++.
++
++*/
++static gimple
++vect_recog_over_widening_pattern (VEC (gimple, heap) **stmts,
++ tree *type_in, tree *type_out)
++{
++ gimple stmt = VEC_pop (gimple, *stmts);
++ gimple pattern_stmt = NULL, new_def_stmt, prev_stmt = NULL, use_stmt = NULL;
++ tree op0, op1, vectype = NULL_TREE, lhs, use_lhs, use_type;
++ imm_use_iterator imm_iter;
++ use_operand_p use_p;
++ int nuses = 0;
++ tree var = NULL_TREE, new_type = NULL_TREE, tmp, new_oprnd;
++ bool first;
++ loop_vec_info loop_vinfo;
++ struct loop *loop = NULL;
++ bb_vec_info bb_vinfo;
++ stmt_vec_info stmt_vinfo;
++
++ stmt_vinfo = vinfo_for_stmt (stmt);
++ loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
++ bb_vinfo = STMT_VINFO_BB_VINFO (stmt_vinfo);
++ if (loop_vinfo)
++ loop = LOOP_VINFO_LOOP (loop_vinfo);
++
++ first = true;
++ while (1)
++ {
++ if (!vinfo_for_stmt (stmt)
++ || STMT_VINFO_IN_PATTERN_P (vinfo_for_stmt (stmt)))
++ return NULL;
++
++ new_def_stmt = NULL;
++ if (!vect_operation_fits_smaller_type (stmt, var, &new_type,
++ &op0, &op1, &new_def_stmt,
++ stmts))
++ {
++ if (first)
++ return NULL;
++ else
++ break;
++ }
++
++ /* STMT can be performed on a smaller type. Check its uses. */
++ lhs = gimple_assign_lhs (stmt);
++ nuses = 0;
++ FOR_EACH_IMM_USE_FAST (use_p, imm_iter, lhs)
++ {
++ if (is_gimple_debug (USE_STMT (use_p)))
++ continue;
++ use_stmt = USE_STMT (use_p);
++ nuses++;
++ }
++
++ if (nuses != 1 || !is_gimple_assign (use_stmt)
++ || !gimple_bb (use_stmt)
++ || (loop && !flow_bb_inside_loop_p (loop, gimple_bb (use_stmt)))
++ || (!loop && gimple_bb (use_stmt) != BB_VINFO_BB (bb_vinfo)))
++ return NULL;
++
++ /* Create pattern statement for STMT. */
++ vectype = get_vectype_for_scalar_type (new_type);
++ if (!vectype)
++ return NULL;
++
++ /* We want to collect all the statements for which we create pattern
++ statetments, except for the case when the last statement in the
++ sequence doesn't have a corresponding pattern statement. In such
++ case we associate the last pattern statement with the last statement
++ in the sequence. Therefore, we only add the original statement to
++ the list if we know that it is not the last. */
++ if (prev_stmt)
++ VEC_safe_push (gimple, heap, *stmts, prev_stmt);
++
++ var = vect_recog_temp_ssa_var (new_type, NULL);
++ pattern_stmt = gimple_build_assign_with_ops (
++ gimple_assign_rhs_code (stmt), var, op0, op1);
++ SSA_NAME_DEF_STMT (var) = pattern_stmt;
++ STMT_VINFO_RELATED_STMT (vinfo_for_stmt (stmt)) = pattern_stmt;
++ STMT_VINFO_PATTERN_DEF_STMT (vinfo_for_stmt (stmt)) = new_def_stmt;
++
++ if (vect_print_dump_info (REPORT_DETAILS))
++ {
++ fprintf (vect_dump, "created pattern stmt: ");
++ print_gimple_stmt (vect_dump, pattern_stmt, 0, TDF_SLIM);
++ }
++
++ prev_stmt = stmt;
++ stmt = use_stmt;
++
++ first = false;
++ }
++
++ /* We got a sequence. We expect it to end with a type demotion operation.
++ Otherwise, we quit (for now). There are three possible cases: the
++ conversion is to NEW_TYPE (we don't do anything), the conversion is to
++ a type bigger than NEW_TYPE and/or the signedness of USE_TYPE and
++ NEW_TYPE differs (we create a new conversion statement). */
++ if (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (use_stmt)))
++ {
++ use_lhs = gimple_assign_lhs (use_stmt);
++ use_type = TREE_TYPE (use_lhs);
++ /* Support only type promotion or signedess change. */
++ if (!INTEGRAL_TYPE_P (use_type)
++ || TYPE_PRECISION (new_type) > TYPE_PRECISION (use_type))
++ return NULL;
++
++ if (TYPE_UNSIGNED (new_type) != TYPE_UNSIGNED (use_type)
++ || TYPE_PRECISION (new_type) != TYPE_PRECISION (use_type))
++ {
++ /* Create NEW_TYPE->USE_TYPE conversion. */
++ tmp = create_tmp_reg (use_type, NULL);
++ add_referenced_var (tmp);
++ new_oprnd = make_ssa_name (tmp, NULL);
++ pattern_stmt = gimple_build_assign_with_ops (NOP_EXPR, new_oprnd,
++ var, NULL_TREE);
++ SSA_NAME_DEF_STMT (new_oprnd) = pattern_stmt;
++ STMT_VINFO_RELATED_STMT (vinfo_for_stmt (use_stmt)) = pattern_stmt;
++
++ *type_in = get_vectype_for_scalar_type (new_type);
++ *type_out = get_vectype_for_scalar_type (use_type);
++
++ /* We created a pattern statement for the last statement in the
++ sequence, so we don't need to associate it with the pattern
++ statement created for PREV_STMT. Therefore, we add PREV_STMT
++ to the list in order to mark it later in vect_pattern_recog_1. */
++ if (prev_stmt)
++ VEC_safe_push (gimple, heap, *stmts, prev_stmt);
++ }
++ else
++ {
++ if (prev_stmt)
++ STMT_VINFO_PATTERN_DEF_STMT (vinfo_for_stmt (use_stmt))
++ = STMT_VINFO_PATTERN_DEF_STMT (vinfo_for_stmt (prev_stmt));
++
++ *type_in = vectype;
++ *type_out = NULL_TREE;
++ }
++
++ VEC_safe_push (gimple, heap, *stmts, use_stmt);
++ }
++ else
++ /* TODO: support general case, create a conversion to the correct type. */
++ return NULL;
++
++ /* Pattern detected. */
++ if (vect_print_dump_info (REPORT_DETAILS))
++ {
++ fprintf (vect_dump, "vect_recog_over_widening_pattern: detected: ");
++ print_gimple_stmt (vect_dump, pattern_stmt, 0, TDF_SLIM);
++ }
++
++ return pattern_stmt;
++}
++
++
++/* Detect widening shift pattern:
++
++ type a_t;
++ TYPE a_T, res_T;
++
++ S1 a_t = ;
++ S2 a_T = (TYPE) a_t;
++ S3 res_T = a_T << CONST;
++
++ where type 'TYPE' is at least double the size of type 'type'.
++
++ Also detect unsigned cases:
++
++ unsigned type a_t;
++ unsigned TYPE u_res_T;
++ TYPE a_T, res_T;
++
++ S1 a_t = ;
++ S2 a_T = (TYPE) a_t;
++ S3 res_T = a_T << CONST;
++ S4 u_res_T = (unsigned TYPE) res_T;
++
++ And a case when 'TYPE' is 4 times bigger than 'type'. In that case we
++ create an additional pattern stmt for S2 to create a variable of an
++ intermediate type, and perform widen-shift on the intermediate type:
++
++ type a_t;
++ interm_type a_it;
++ TYPE a_T, res_T, res_T';
++
++ S1 a_t = ;
++ S2 a_T = (TYPE) a_t;
++ '--> a_it = (interm_type) a_t;
++ S3 res_T = a_T << CONST;
++ '--> res_T' = a_it <<* CONST;
++
++ Input/Output:
++
++ * STMTS: Contains a stmt from which the pattern search begins.
++ In case of unsigned widen-shift, the original stmt (S3) is replaced with S4
++ in STMTS. When an intermediate type is used and a pattern statement is
++ created for S2, we also put S2 here (before S3).
++
++ Output:
++
++ * TYPE_IN: The type of the input arguments to the pattern.
++
++ * TYPE_OUT: The type of the output of this pattern.
++
++ * Return value: A new stmt that will be used to replace the sequence of
++ stmts that constitute the pattern. In this case it will be:
++ WIDEN_LSHIFT_EXPR <a_t, CONST>. */
++
++static gimple
++vect_recog_widen_shift_pattern (VEC (gimple, heap) **stmts,
++ tree *type_in, tree *type_out)
++{
++ gimple last_stmt = VEC_pop (gimple, *stmts);
++ gimple def_stmt0;
++ tree oprnd0, oprnd1;
++ tree type, half_type0;
++ gimple pattern_stmt, orig_stmt = NULL;
++ tree vectype, vectype_out = NULL_TREE;
++ tree dummy;
++ tree var;
++ enum tree_code dummy_code;
++ int dummy_int;
++ VEC (tree, heap) * dummy_vec;
++ gimple use_stmt = NULL;
++ bool over_widen = false;
++ bool promotion;
++
++ if (!is_gimple_assign (last_stmt) || !vinfo_for_stmt (last_stmt))
++ return NULL;
++
++ orig_stmt = last_stmt;
++ if (STMT_VINFO_IN_PATTERN_P (vinfo_for_stmt (last_stmt)))
++ {
++ /* This statement was also detected as over-widening operation (it can't
++ be any other pattern, because only over-widening detects shifts).
++ LAST_STMT is the final type demotion statement, but its related
++ statement is shift. We analyze the related statement to catch cases:
++
++ orig code:
++ type a_t;
++ itype res;
++ TYPE a_T, res_T;
++
++ S1 a_T = (TYPE) a_t;
++ S2 res_T = a_T << CONST;
++ S3 res = (itype)res_T;
++
++ (size of type * 2 <= size of itype
++ and size of itype * 2 <= size of TYPE)
++
++ code after over-widening pattern detection:
++
++ S1 a_T = (TYPE) a_t;
++ --> a_it = (itype) a_t;
++ S2 res_T = a_T << CONST;
++ S3 res = (itype)res_T; <--- LAST_STMT
++ --> res = a_it << CONST;
++
++ after widen_shift:
++
++ S1 a_T = (TYPE) a_t;
++ --> a_it = (itype) a_t; - redundant
++ S2 res_T = a_T << CONST;
++ S3 res = (itype)res_T;
++ --> res = a_t w<< CONST;
++
++ i.e., we replace the three statements with res = a_t w<< CONST. */
++ last_stmt = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (last_stmt));
++ over_widen = true;
++ }
++
++ if (gimple_assign_rhs_code (last_stmt) != LSHIFT_EXPR)
++ return NULL;
++
++ oprnd0 = gimple_assign_rhs1 (last_stmt);
++ oprnd1 = gimple_assign_rhs2 (last_stmt);
++ if (TREE_CODE (oprnd0) != SSA_NAME || TREE_CODE (oprnd1) != INTEGER_CST)
++ return NULL;
++
++ /* Check operand 0: it has to be defined by a type promotion. */
++ if (!type_conversion_p (oprnd0, last_stmt, false, &half_type0, &def_stmt0,
++ &promotion)
++ || !promotion)
++ return NULL;
++
++ /* Check operand 1: has to be positive. We check that it fits the type
++ in vect_handle_widen_op_by_const (). */
++ if (tree_int_cst_compare (oprnd1, size_zero_node) <= 0)
++ return NULL;
++
++ oprnd0 = gimple_assign_rhs1 (def_stmt0);
++ type = gimple_expr_type (last_stmt);
++
++ /* Check if this a widening operation. */
++ if (!vect_handle_widen_op_by_const (last_stmt, LSHIFT_EXPR, oprnd1,
++ &oprnd0, stmts,
++ type, &half_type0, def_stmt0))
++ return NULL;
++
++ /* Handle unsigned case. Look for
++ S4 u_res_T = (unsigned TYPE) res_T;
++ Use unsigned TYPE as the type for WIDEN_LSHIFT_EXPR. */
++ if (TYPE_UNSIGNED (type) != TYPE_UNSIGNED (half_type0))
++ {
++ tree lhs = gimple_assign_lhs (last_stmt), use_lhs;
++ imm_use_iterator imm_iter;
++ use_operand_p use_p;
++ int nuses = 0;
++ tree use_type;
++
++ if (over_widen)
++ {
++ /* In case of over-widening pattern, S4 should be ORIG_STMT itself.
++ We check here that TYPE is the correct type for the operation,
++ i.e., it's the type of the original result. */
++ tree orig_type = gimple_expr_type (orig_stmt);
++ if ((TYPE_UNSIGNED (type) != TYPE_UNSIGNED (orig_type))
++ || (TYPE_PRECISION (type) != TYPE_PRECISION (orig_type)))
++ return NULL;
++ }
++ else
++ {
++ FOR_EACH_IMM_USE_FAST (use_p, imm_iter, lhs)
++ {
++ if (is_gimple_debug (USE_STMT (use_p)))
++ continue;
++ use_stmt = USE_STMT (use_p);
++ nuses++;
++ }
++
++ if (nuses != 1 || !is_gimple_assign (use_stmt)
++ || !CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (use_stmt)))
++ return NULL;
++
++ use_lhs = gimple_assign_lhs (use_stmt);
++ use_type = TREE_TYPE (use_lhs);
++
++ if (!INTEGRAL_TYPE_P (use_type)
++ || (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (use_type))
++ || (TYPE_PRECISION (type) != TYPE_PRECISION (use_type)))
++ return NULL;
++
++ type = use_type;
++ }
++ }
++
++ /* Pattern detected. */
++ if (vect_print_dump_info (REPORT_DETAILS))
++ fprintf (vect_dump, "vect_recog_widen_shift_pattern: detected: ");
++
++ /* Check target support. */
++ vectype = get_vectype_for_scalar_type (half_type0);
++ vectype_out = get_vectype_for_scalar_type (type);
++
++ if (!vectype
++ || !vectype_out
++ || !supportable_widening_operation (WIDEN_LSHIFT_EXPR, last_stmt,
++ vectype_out, vectype,
++ &dummy, &dummy, &dummy_code,
++ &dummy_code, &dummy_int,
++ &dummy_vec))
++ return NULL;
++
++ *type_in = vectype;
++ *type_out = vectype_out;
++
++ /* Pattern supported. Create a stmt to be used to replace the pattern. */
++ var = vect_recog_temp_ssa_var (type, NULL);
++ pattern_stmt =
++ gimple_build_assign_with_ops (WIDEN_LSHIFT_EXPR, var, oprnd0, oprnd1);
++
++ if (vect_print_dump_info (REPORT_DETAILS))
++ print_gimple_stmt (vect_dump, pattern_stmt, 0, TDF_SLIM);
++
++ if (use_stmt)
++ last_stmt = use_stmt;
++ else
++ last_stmt = orig_stmt;
++
++ VEC_safe_push (gimple, heap, *stmts, last_stmt);
+ return pattern_stmt;
+ }
+
++/* Function vect_recog_mixed_size_cond_pattern
++
++ Try to find the following pattern:
++
++ type x_t, y_t;
++ TYPE a_T, b_T, c_T;
++ loop:
++ S1 a_T = x_t CMP y_t ? b_T : c_T;
++
++ where type 'TYPE' is an integral type which has different size
++ from 'type'. b_T and c_T are either constants (and if 'TYPE' is wider
++ than 'type', the constants need to fit into an integer type
++ with the same width as 'type') or results of conversion from 'type'.
++
++ Input:
++
++ * LAST_STMT: A stmt from which the pattern search begins.
++
++ Output:
++
++ * TYPE_IN: The type of the input arguments to the pattern.
++
++ * TYPE_OUT: The type of the output of this pattern.
++
++ * Return value: A new stmt that will be used to replace the pattern.
++ Additionally a def_stmt is added.
++
++ a_it = x_t CMP y_t ? b_it : c_it;
++ a_T = (TYPE) a_it; */
++
++static gimple
++vect_recog_mixed_size_cond_pattern (VEC (gimple, heap) **stmts, tree *type_in,
++ tree *type_out)
++{
++ gimple last_stmt = VEC_index (gimple, *stmts, 0);
++ tree cond_expr, then_clause, else_clause;
++ stmt_vec_info stmt_vinfo = vinfo_for_stmt (last_stmt), def_stmt_info;
++ tree type, vectype, comp_vectype, comp_type, op, tmp;
++ enum machine_mode cmpmode;
++ gimple pattern_stmt, def_stmt;
++ loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
++ tree orig_type0 = NULL_TREE, orig_type1 = NULL_TREE;
++ gimple def_stmt0 = NULL, def_stmt1 = NULL;
++ bool promotion;
++ bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (stmt_vinfo);
++
++ if (!is_gimple_assign (last_stmt)
++ || gimple_assign_rhs_code (last_stmt) != COND_EXPR
++ || STMT_VINFO_DEF_TYPE (stmt_vinfo) != vect_internal_def)
++ return NULL;
++
++ op = gimple_assign_rhs1 (last_stmt);
++ cond_expr = TREE_OPERAND (op, 0);
++ then_clause = TREE_OPERAND (op, 1);
++ else_clause = TREE_OPERAND (op, 2);
++
++ if (!COMPARISON_CLASS_P (cond_expr))
++ return NULL;
++
++ type = gimple_expr_type (last_stmt);
++ comp_type = TREE_TYPE (TREE_OPERAND (cond_expr, 0));
++ comp_vectype = get_vectype_for_scalar_type (comp_type);
++ if (comp_vectype == NULL_TREE)
++ return NULL;
++
++ if (types_compatible_p (type, comp_type)
++ || !INTEGRAL_TYPE_P (comp_type)
++ || !INTEGRAL_TYPE_P (type))
++ return NULL;
++
++ if ((TREE_CODE (then_clause) != INTEGER_CST
++ && !type_conversion_p (then_clause, last_stmt, false, &orig_type0,
++ &def_stmt0, &promotion))
++ || (TREE_CODE (else_clause) != INTEGER_CST
++ && !type_conversion_p (else_clause, last_stmt, false, &orig_type1,
++ &def_stmt1, &promotion)))
++ return NULL;
++
++ if (orig_type0 && orig_type1
++ && (!types_compatible_p (orig_type0, orig_type1)
++ || !types_compatible_p (orig_type0, comp_type)))
++ return NULL;
++
++ if (orig_type0)
++ then_clause = gimple_assign_rhs1 (def_stmt0);
++
++ if (orig_type1)
++ else_clause = gimple_assign_rhs1 (def_stmt1);
++
++ cmpmode = GET_MODE_INNER (TYPE_MODE (comp_vectype));
++ if (GET_MODE_BITSIZE (TYPE_MODE (type)) == GET_MODE_BITSIZE (cmpmode))
++ return NULL;
++
++ vectype = get_vectype_for_scalar_type (type);
++ if (vectype == NULL_TREE)
++ return NULL;
++
++ if (!expand_vec_cond_expr_p (comp_vectype, TYPE_MODE (comp_vectype)))
++ return NULL;
++
++ if (GET_MODE_BITSIZE (TYPE_MODE (type)) > GET_MODE_BITSIZE (cmpmode)
++ && ((TREE_CODE (then_clause) == INTEGER_CST
++ && !int_fits_type_p (then_clause, comp_type))
++ || (TREE_CODE (else_clause) == INTEGER_CST
++ && !int_fits_type_p (else_clause, comp_type))))
++ return NULL;
++
++ tmp = build3 (COND_EXPR, comp_type, unshare_expr (cond_expr),
++ fold_convert (comp_type, then_clause),
++ fold_convert (comp_type, else_clause));
++ def_stmt = gimple_build_assign (vect_recog_temp_ssa_var (comp_type, NULL),
++ tmp);
++
++ pattern_stmt
++ = gimple_build_assign_with_ops (NOP_EXPR,
++ vect_recog_temp_ssa_var (type, NULL),
++ gimple_assign_lhs (def_stmt), NULL_TREE);
++
++ STMT_VINFO_PATTERN_DEF_STMT (stmt_vinfo) = def_stmt;
++ def_stmt_info = new_stmt_vec_info (def_stmt, loop_vinfo, bb_vinfo);
++ set_vinfo_for_stmt (def_stmt, def_stmt_info);
++ STMT_VINFO_VECTYPE (def_stmt_info) = comp_vectype;
++ *type_in = vectype;
++ *type_out = vectype;
++
++ if (vect_print_dump_info (REPORT_DETAILS))
++ fprintf (vect_dump, "vect_recog_mixed_size_cond_pattern: detected: ");
++
++ return pattern_stmt;
++}
++
++
++/* Mark statements that are involved in a pattern. */
++
++static inline void
++vect_mark_pattern_stmts (gimple orig_stmt, gimple pattern_stmt,
++ tree pattern_vectype)
++{
++ stmt_vec_info pattern_stmt_info, def_stmt_info;
++ stmt_vec_info orig_stmt_info = vinfo_for_stmt (orig_stmt);
++ loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (orig_stmt_info);
++ bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (orig_stmt_info);
++ gimple def_stmt;
++
++ set_vinfo_for_stmt (pattern_stmt,
++ new_stmt_vec_info (pattern_stmt, loop_vinfo, bb_vinfo));
++ gimple_set_bb (pattern_stmt, gimple_bb (orig_stmt));
++ pattern_stmt_info = vinfo_for_stmt (pattern_stmt);
++
++ STMT_VINFO_RELATED_STMT (pattern_stmt_info) = orig_stmt;
++ STMT_VINFO_DEF_TYPE (pattern_stmt_info)
++ = STMT_VINFO_DEF_TYPE (orig_stmt_info);
++ STMT_VINFO_VECTYPE (pattern_stmt_info) = pattern_vectype;
++ STMT_VINFO_IN_PATTERN_P (orig_stmt_info) = true;
++ STMT_VINFO_RELATED_STMT (orig_stmt_info) = pattern_stmt;
++ STMT_VINFO_PATTERN_DEF_STMT (pattern_stmt_info)
++ = STMT_VINFO_PATTERN_DEF_STMT (orig_stmt_info);
++ if (STMT_VINFO_PATTERN_DEF_STMT (pattern_stmt_info))
++ {
++ def_stmt = STMT_VINFO_PATTERN_DEF_STMT (pattern_stmt_info);
++ def_stmt_info = vinfo_for_stmt (def_stmt);
++ if (def_stmt_info == NULL)
++ {
++ def_stmt_info = new_stmt_vec_info (def_stmt, loop_vinfo, bb_vinfo);
++ set_vinfo_for_stmt (def_stmt, def_stmt_info);
++ }
++ gimple_set_bb (def_stmt, gimple_bb (orig_stmt));
++ STMT_VINFO_RELATED_STMT (def_stmt_info) = orig_stmt;
++ STMT_VINFO_DEF_TYPE (def_stmt_info)
++ = STMT_VINFO_DEF_TYPE (orig_stmt_info);
++ if (STMT_VINFO_VECTYPE (def_stmt_info) == NULL_TREE)
++ STMT_VINFO_VECTYPE (def_stmt_info) = pattern_vectype;
++ }
++}
+
+ /* Function vect_pattern_recog_1
+
+@@ -669,29 +1703,33 @@
+
+ static void
+ vect_pattern_recog_1 (
+- gimple (* vect_recog_func) (gimple, tree *, tree *),
+- gimple_stmt_iterator si)
++ gimple (* vect_recog_func) (VEC (gimple, heap) **, tree *, tree *),
++ gimple_stmt_iterator si,
++ VEC (gimple, heap) **stmts_to_replace)
+ {
+ gimple stmt = gsi_stmt (si), pattern_stmt;
+- stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
+- stmt_vec_info pattern_stmt_info;
+- loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info);
++ stmt_vec_info stmt_info;
++ loop_vec_info loop_vinfo;
+ tree pattern_vectype;
+ tree type_in, type_out;
+ enum tree_code code;
+ int i;
+ gimple next;
+
+- pattern_stmt = (* vect_recog_func) (stmt, &type_in, &type_out);
++ VEC_truncate (gimple, *stmts_to_replace, 0);
++ VEC_quick_push (gimple, *stmts_to_replace, stmt);
++ pattern_stmt = (* vect_recog_func) (stmts_to_replace, &type_in, &type_out);
+ if (!pattern_stmt)
+ return;
+
++ stmt = VEC_last (gimple, *stmts_to_replace);
++ stmt_info = vinfo_for_stmt (stmt);
++ loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info);
++
+ if (VECTOR_MODE_P (TYPE_MODE (type_in)))
+ {
+ /* No need to check target support (already checked by the pattern
+ recognition function). */
+- if (type_out)
+- gcc_assert (VECTOR_MODE_P (TYPE_MODE (type_out)));
+ pattern_vectype = type_out ? type_out : type_in;
+ }
+ else
+@@ -736,22 +1774,32 @@
+ }
+
+ /* Mark the stmts that are involved in the pattern. */
+- gsi_insert_before (&si, pattern_stmt, GSI_SAME_STMT);
+- set_vinfo_for_stmt (pattern_stmt,
+- new_stmt_vec_info (pattern_stmt, loop_vinfo, NULL));
+- pattern_stmt_info = vinfo_for_stmt (pattern_stmt);
+-
+- STMT_VINFO_RELATED_STMT (pattern_stmt_info) = stmt;
+- STMT_VINFO_DEF_TYPE (pattern_stmt_info) = STMT_VINFO_DEF_TYPE (stmt_info);
+- STMT_VINFO_VECTYPE (pattern_stmt_info) = pattern_vectype;
+- STMT_VINFO_IN_PATTERN_P (stmt_info) = true;
+- STMT_VINFO_RELATED_STMT (stmt_info) = pattern_stmt;
++ vect_mark_pattern_stmts (stmt, pattern_stmt, pattern_vectype);
+
+ /* Patterns cannot be vectorized using SLP, because they change the order of
+ computation. */
+- FOR_EACH_VEC_ELT (gimple, LOOP_VINFO_REDUCTIONS (loop_vinfo), i, next)
+- if (next == stmt)
+- VEC_ordered_remove (gimple, LOOP_VINFO_REDUCTIONS (loop_vinfo), i);
++ if (loop_vinfo)
++ FOR_EACH_VEC_ELT (gimple, LOOP_VINFO_REDUCTIONS (loop_vinfo), i, next)
++ if (next == stmt)
++ VEC_ordered_remove (gimple, LOOP_VINFO_REDUCTIONS (loop_vinfo), i);
++
++ /* It is possible that additional pattern stmts are created and inserted in
++ STMTS_TO_REPLACE. We create a stmt_info for each of them, and mark the
++ relevant statements. */
++ for (i = 0; VEC_iterate (gimple, *stmts_to_replace, i, stmt)
++ && (unsigned) i < (VEC_length (gimple, *stmts_to_replace) - 1);
++ i++)
++ {
++ stmt_info = vinfo_for_stmt (stmt);
++ pattern_stmt = STMT_VINFO_RELATED_STMT (stmt_info);
++ if (vect_print_dump_info (REPORT_DETAILS))
++ {
++ fprintf (vect_dump, "additional pattern stmt: ");
++ print_gimple_stmt (vect_dump, pattern_stmt, 0, TDF_SLIM);
++ }
++
++ vect_mark_pattern_stmts (stmt, pattern_stmt, NULL_TREE);
++ }
+ }
+
+
+@@ -761,8 +1809,8 @@
+ LOOP_VINFO - a struct_loop_info of a loop in which we want to look for
+ computation idioms.
+
+- Output - for each computation idiom that is detected we insert a new stmt
+- that provides the same functionality and that can be vectorized. We
++ Output - for each computation idiom that is detected we create a new stmt
++ that provides the same functionality and that can be vectorized. We
+ also record some information in the struct_stmt_info of the relevant
+ stmts, as explained below:
+
+@@ -777,79 +1825,113 @@
+ S5: ... = ..use(a_0).. - - -
+
+ Say the sequence {S1,S2,S3,S4} was detected as a pattern that can be
+- represented by a single stmt. We then:
+- - create a new stmt S6 that will replace the pattern.
+- - insert the new stmt S6 before the last stmt in the pattern
++ represented by a single stmt. We then:
++ - create a new stmt S6 equivalent to the pattern (the stmt is not
++ inserted into the code)
+ - fill in the STMT_VINFO fields as follows:
+
+ in_pattern_p related_stmt vec_stmt
+ S1: a_i = .... - - -
+ S2: a_2 = ..use(a_i).. - - -
+ S3: a_1 = ..use(a_2).. - - -
+- > S6: a_new = .... - S4 -
+ S4: a_0 = ..use(a_1).. true S6 -
++ '---> S6: a_new = .... - S4 -
+ S5: ... = ..use(a_0).. - - -
+
+ (the last stmt in the pattern (S4) and the new pattern stmt (S6) point
+- to each other through the RELATED_STMT field).
++ to each other through the RELATED_STMT field).
+
+ S6 will be marked as relevant in vect_mark_stmts_to_be_vectorized instead
+ of S4 because it will replace all its uses. Stmts {S1,S2,S3} will
+ remain irrelevant unless used by stmts other than S4.
+
+ If vectorization succeeds, vect_transform_stmt will skip over {S1,S2,S3}
+- (because they are marked as irrelevant). It will vectorize S6, and record
+- a pointer to the new vector stmt VS6 both from S6 (as usual), and also
+- from S4. We do that so that when we get to vectorizing stmts that use the
+- def of S4 (like S5 that uses a_0), we'll know where to take the relevant
+- vector-def from. S4 will be skipped, and S5 will be vectorized as usual:
++ (because they are marked as irrelevant). It will vectorize S6, and record
++ a pointer to the new vector stmt VS6 from S6 (as usual).
++ S4 will be skipped, and S5 will be vectorized as usual:
+
+ in_pattern_p related_stmt vec_stmt
+ S1: a_i = .... - - -
+ S2: a_2 = ..use(a_i).. - - -
+ S3: a_1 = ..use(a_2).. - - -
+ > VS6: va_new = .... - - -
+- S6: a_new = .... - S4 VS6
+ S4: a_0 = ..use(a_1).. true S6 VS6
++ '---> S6: a_new = .... - S4 VS6
+ > VS5: ... = ..vuse(va_new).. - - -
+ S5: ... = ..use(a_0).. - - -
+
+- DCE could then get rid of {S1,S2,S3,S4,S5,S6} (if their defs are not used
++ DCE could then get rid of {S1,S2,S3,S4,S5} (if their defs are not used
+ elsewhere), and we'll end up with:
+
+ VS6: va_new = ....
+- VS5: ... = ..vuse(va_new)..
++ VS5: ... = ..vuse(va_new)..
+
+- If vectorization does not succeed, DCE will clean S6 away (its def is
+- not used), and we'll end up with the original sequence.
+-*/
++ In case of more than one pattern statements, e.g., widen-mult with
++ intermediate type:
++
++ S1 a_t = ;
++ S2 a_T = (TYPE) a_t;
++ '--> S3: a_it = (interm_type) a_t;
++ S4 prod_T = a_T * CONST;
++ '--> S5: prod_T' = a_it w* CONST;
++
++ there may be other users of a_T outside the pattern. In that case S2 will
++ be marked as relevant (as well as S3), and both S2 and S3 will be analyzed
++ and vectorized. The vector stmt VS2 will be recorded in S2, and VS3 will
++ be recorded in S3. */
+
+ void
+-vect_pattern_recog (loop_vec_info loop_vinfo)
++vect_pattern_recog (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo)
+ {
+- struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
+- basic_block *bbs = LOOP_VINFO_BBS (loop_vinfo);
+- unsigned int nbbs = loop->num_nodes;
++ struct loop *loop;
++ basic_block *bbs, bb;
++ unsigned int nbbs;
+ gimple_stmt_iterator si;
+ unsigned int i, j;
+- gimple (* vect_recog_func_ptr) (gimple, tree *, tree *);
++ gimple (* vect_recog_func_ptr) (VEC (gimple, heap) **, tree *, tree *);
++ VEC (gimple, heap) *stmts_to_replace = VEC_alloc (gimple, heap, 1);
++ gimple stmt;
+
+ if (vect_print_dump_info (REPORT_DETAILS))
+ fprintf (vect_dump, "=== vect_pattern_recog ===");
+
+- /* Scan through the loop stmts, applying the pattern recognition
++ if (loop_vinfo)
++ {
++ loop = LOOP_VINFO_LOOP (loop_vinfo);
++ bbs = LOOP_VINFO_BBS (loop_vinfo);
++ nbbs = loop->num_nodes;
++ }
++ else
++ {
++ bb = BB_VINFO_BB (bb_vinfo);
++ nbbs = 1;
++ bbs = XNEW (basic_block);
++ bbs[0] = bb;
++ }
++
++ /* Scan through the stmts, applying the pattern recognition
+ functions starting at each stmt visited: */
+ for (i = 0; i < nbbs; i++)
+ {
+ basic_block bb = bbs[i];
+ for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
+ {
++ if (bb_vinfo && (stmt = gsi_stmt (si))
++ && vinfo_for_stmt (stmt)
++ && !STMT_VINFO_VECTORIZABLE (vinfo_for_stmt (stmt)))
++ continue;
++
+ /* Scan over all generic vect_recog_xxx_pattern functions. */
+ for (j = 0; j < NUM_PATTERNS; j++)
+ {
+ vect_recog_func_ptr = vect_vect_recog_func_ptrs[j];
+- vect_pattern_recog_1 (vect_recog_func_ptr, si);
++ vect_pattern_recog_1 (vect_recog_func_ptr, si,
++ &stmts_to_replace);
+ }
+ }
+ }
++
++ VEC_free (gimple, heap, stmts_to_replace);
++ if (bb_vinfo)
++ free (bbs);
+ }
+--- a/src/gcc/tree-vect-slp.c
++++ b/src/gcc/tree-vect-slp.c
+@@ -67,15 +67,16 @@
+ static void
+ vect_free_slp_tree (slp_tree node)
+ {
++ int i;
++ slp_void_p child;
++
+ if (!node)
+ return;
+
+- if (SLP_TREE_LEFT (node))
+- vect_free_slp_tree (SLP_TREE_LEFT (node));
+-
+- if (SLP_TREE_RIGHT (node))
+- vect_free_slp_tree (SLP_TREE_RIGHT (node));
++ FOR_EACH_VEC_ELT (slp_void_p, SLP_TREE_CHILDREN (node), i, child)
++ vect_free_slp_tree ((slp_tree) child);
+
++ VEC_free (slp_void_p, heap, SLP_TREE_CHILDREN (node));
+ VEC_free (gimple, heap, SLP_TREE_SCALAR_STMTS (node));
+
+ if (SLP_TREE_VEC_STMTS (node))
+@@ -96,46 +97,151 @@
+ }
+
+
+-/* Get the defs for the rhs of STMT (collect them in DEF_STMTS0/1), check that
+- they are of a legal type and that they match the defs of the first stmt of
+- the SLP group (stored in FIRST_STMT_...). */
++/* Create an SLP node for SCALAR_STMTS. */
++
++static slp_tree
++vect_create_new_slp_node (VEC (gimple, heap) *scalar_stmts)
++{
++ slp_tree node;
++ gimple stmt = VEC_index (gimple, scalar_stmts, 0);
++ unsigned int nops;
++
++ if (is_gimple_call (stmt))
++ nops = gimple_call_num_args (stmt);
++ else if (is_gimple_assign (stmt))
++ {
++ nops = gimple_num_ops (stmt) - 1;
++ if (gimple_assign_rhs_code (stmt) == COND_EXPR)
++ nops = 4;
++ }
++ else
++ return NULL;
++
++ node = XNEW (struct _slp_tree);
++ SLP_TREE_SCALAR_STMTS (node) = scalar_stmts;
++ SLP_TREE_VEC_STMTS (node) = NULL;
++ SLP_TREE_CHILDREN (node) = VEC_alloc (slp_void_p, heap, nops);
++ SLP_TREE_OUTSIDE_OF_LOOP_COST (node) = 0;
++ SLP_TREE_INSIDE_OF_LOOP_COST (node) = 0;
++
++ return node;
++}
++
++
++/* Allocate operands info for NOPS operands, and GROUP_SIZE def-stmts for each
++ operand. */
++static VEC (slp_oprnd_info, heap) *
++vect_create_oprnd_info (int nops, int group_size)
++{
++ int i;
++ slp_oprnd_info oprnd_info;
++ VEC (slp_oprnd_info, heap) *oprnds_info;
++
++ oprnds_info = VEC_alloc (slp_oprnd_info, heap, nops);
++ for (i = 0; i < nops; i++)
++ {
++ oprnd_info = XNEW (struct _slp_oprnd_info);
++ oprnd_info->def_stmts = VEC_alloc (gimple, heap, group_size);
++ oprnd_info->first_dt = vect_uninitialized_def;
++ oprnd_info->first_def_type = NULL_TREE;
++ oprnd_info->first_const_oprnd = NULL_TREE;
++ oprnd_info->first_pattern = false;
++ VEC_quick_push (slp_oprnd_info, oprnds_info, oprnd_info);
++ }
++
++ return oprnds_info;
++}
++
++
++/* Free operands info. */
++
++static void
++vect_free_oprnd_info (VEC (slp_oprnd_info, heap) **oprnds_info)
++{
++ int i;
++ slp_oprnd_info oprnd_info;
++
++ FOR_EACH_VEC_ELT (slp_oprnd_info, *oprnds_info, i, oprnd_info)
++ {
++ VEC_free (gimple, heap, oprnd_info->def_stmts);
++ XDELETE (oprnd_info);
++ }
++
++ VEC_free (slp_oprnd_info, heap, *oprnds_info);
++}
++
++
++/* Get the defs for the rhs of STMT (collect them in OPRNDS_INFO), check that
++ they are of a valid type and that they match the defs of the first stmt of
++ the SLP group (stored in OPRNDS_INFO). */
+
+ static bool
+ vect_get_and_check_slp_defs (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
+ slp_tree slp_node, gimple stmt,
+- VEC (gimple, heap) **def_stmts0,
+- VEC (gimple, heap) **def_stmts1,
+- enum vect_def_type *first_stmt_dt0,
+- enum vect_def_type *first_stmt_dt1,
+- tree *first_stmt_def0_type,
+- tree *first_stmt_def1_type,
+- tree *first_stmt_const_oprnd,
+- int ncopies_for_cost,
+- bool *pattern0, bool *pattern1)
++ int ncopies_for_cost, bool first,
++ VEC (slp_oprnd_info, heap) **oprnds_info)
+ {
+ tree oprnd;
+ unsigned int i, number_of_oprnds;
+- tree def;
++ tree def, def_op0 = NULL_TREE;
+ gimple def_stmt;
+- enum vect_def_type dt[2] = {vect_unknown_def_type, vect_unknown_def_type};
+- stmt_vec_info stmt_info =
+- vinfo_for_stmt (VEC_index (gimple, SLP_TREE_SCALAR_STMTS (slp_node), 0));
+- enum gimple_rhs_class rhs_class;
++ enum vect_def_type dt = vect_uninitialized_def;
++ enum vect_def_type dt_op0 = vect_uninitialized_def;
++ stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
++ tree lhs = gimple_get_lhs (stmt);
+ struct loop *loop = NULL;
++ enum tree_code rhs_code;
++ bool different_types = false;
++ bool pattern = false;
++ slp_oprnd_info oprnd_info, oprnd0_info, oprnd1_info;
++ int op_idx = 1;
++ tree compare_rhs = NULL_TREE, rhs = NULL_TREE;
++ int cond_idx = -1;
+
+ if (loop_vinfo)
+ loop = LOOP_VINFO_LOOP (loop_vinfo);
+
+- rhs_class = get_gimple_rhs_class (gimple_assign_rhs_code (stmt));
+- number_of_oprnds = gimple_num_ops (stmt) - 1; /* RHS only */
++ if (is_gimple_call (stmt))
++ number_of_oprnds = gimple_call_num_args (stmt);
++ else if (is_gimple_assign (stmt))
++ {
++ number_of_oprnds = gimple_num_ops (stmt) - 1;
++ if (gimple_assign_rhs_code (stmt) == COND_EXPR)
++ {
++ number_of_oprnds = 4;
++ cond_idx = 0;
++ rhs = gimple_assign_rhs1 (stmt);
++ }
++ }
++ else
++ return false;
+
+ for (i = 0; i < number_of_oprnds; i++)
+ {
+- oprnd = gimple_op (stmt, i + 1);
++ if (compare_rhs)
++ oprnd = compare_rhs;
++ else
++ oprnd = gimple_op (stmt, op_idx++);
++
++ oprnd_info = VEC_index (slp_oprnd_info, *oprnds_info, i);
++
++ if (-1 < cond_idx && cond_idx < 4)
++ {
++ if (compare_rhs)
++ compare_rhs = NULL_TREE;
++ else
++ oprnd = TREE_OPERAND (rhs, cond_idx++);
++ }
++
++ if (COMPARISON_CLASS_P (oprnd))
++ {
++ compare_rhs = TREE_OPERAND (oprnd, 1);
++ oprnd = TREE_OPERAND (oprnd, 0);
++ }
+
+ if (!vect_is_simple_use (oprnd, loop_vinfo, bb_vinfo, &def_stmt, &def,
+- &dt[i])
+- || (!def_stmt && dt[i] != vect_constant_def))
++ &dt)
++ || (!def_stmt && dt != vect_constant_def))
+ {
+ if (vect_print_dump_info (REPORT_SLP))
+ {
+@@ -149,34 +255,32 @@
+ /* Check if DEF_STMT is a part of a pattern in LOOP and get the def stmt
+ from the pattern. Check that all the stmts of the node are in the
+ pattern. */
+- if (loop && def_stmt && gimple_bb (def_stmt)
+- && flow_bb_inside_loop_p (loop, gimple_bb (def_stmt))
++ if (def_stmt && gimple_bb (def_stmt)
++ && ((loop && flow_bb_inside_loop_p (loop, gimple_bb (def_stmt)))
++ || (!loop && gimple_bb (def_stmt) == BB_VINFO_BB (bb_vinfo)
++ && gimple_code (def_stmt) != GIMPLE_PHI))
+ && vinfo_for_stmt (def_stmt)
+- && STMT_VINFO_IN_PATTERN_P (vinfo_for_stmt (def_stmt)))
++ && STMT_VINFO_IN_PATTERN_P (vinfo_for_stmt (def_stmt))
++ && !STMT_VINFO_RELEVANT (vinfo_for_stmt (def_stmt))
++ && !STMT_VINFO_LIVE_P (vinfo_for_stmt (def_stmt)))
+ {
+- if (!*first_stmt_dt0)
+- *pattern0 = true;
+- else
+- {
+- if (i == 1 && !*first_stmt_dt1)
+- *pattern1 = true;
+- else if ((i == 0 && !*pattern0) || (i == 1 && !*pattern1))
+- {
+- if (vect_print_dump_info (REPORT_DETAILS))
+- {
+- fprintf (vect_dump, "Build SLP failed: some of the stmts"
+- " are in a pattern, and others are not ");
+- print_generic_expr (vect_dump, oprnd, TDF_SLIM);
+- }
++ pattern = true;
++ if (!first && !oprnd_info->first_pattern)
++ {
++ if (vect_print_dump_info (REPORT_DETAILS))
++ {
++ fprintf (vect_dump, "Build SLP failed: some of the stmts"
++ " are in a pattern, and others are not ");
++ print_generic_expr (vect_dump, oprnd, TDF_SLIM);
++ }
+
+- return false;
+- }
++ return false;
+ }
+
+ def_stmt = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (def_stmt));
+- dt[i] = STMT_VINFO_DEF_TYPE (vinfo_for_stmt (def_stmt));
++ dt = STMT_VINFO_DEF_TYPE (vinfo_for_stmt (def_stmt));
+
+- if (*dt == vect_unknown_def_type)
++ if (dt == vect_unknown_def_type)
+ {
+ if (vect_print_dump_info (REPORT_DETAILS))
+ fprintf (vect_dump, "Unsupported pattern.");
+@@ -200,85 +304,125 @@
+ }
+ }
+
+- if (!*first_stmt_dt0)
++ if (first)
+ {
+- /* op0 of the first stmt of the group - store its info. */
+- *first_stmt_dt0 = dt[i];
+- if (def)
+- *first_stmt_def0_type = TREE_TYPE (def);
+- else
+- *first_stmt_const_oprnd = oprnd;
++ oprnd_info->first_dt = dt;
++ oprnd_info->first_pattern = pattern;
++ if (def)
++ {
++ oprnd_info->first_def_type = TREE_TYPE (def);
++ oprnd_info->first_const_oprnd = NULL_TREE;
++ }
++ else
++ {
++ oprnd_info->first_def_type = NULL_TREE;
++ oprnd_info->first_const_oprnd = oprnd;
++ }
+
+- /* Analyze costs (for the first stmt of the group only). */
+- if (rhs_class != GIMPLE_SINGLE_RHS)
+- /* Not memory operation (we don't call this functions for loads). */
+- vect_model_simple_cost (stmt_info, ncopies_for_cost, dt, slp_node);
+- else
+- /* Store. */
+- vect_model_store_cost (stmt_info, ncopies_for_cost, dt[0], slp_node);
++ if (i == 0)
++ {
++ def_op0 = def;
++ dt_op0 = dt;
++ /* Analyze costs (for the first stmt of the group only). */
++ if (REFERENCE_CLASS_P (lhs))
++ /* Store. */
++ vect_model_store_cost (stmt_info, ncopies_for_cost, false,
++ dt, slp_node);
++ else
++ /* Not memory operation (we don't call this function for
++ loads). */
++ vect_model_simple_cost (stmt_info, ncopies_for_cost, &dt,
++ slp_node);
++ }
+ }
+
+ else
+ {
+- if (!*first_stmt_dt1 && i == 1)
++ /* Not first stmt of the group, check that the def-stmt/s match
++ the def-stmt/s of the first stmt. Allow different definition
++ types for reduction chains: the first stmt must be a
++ vect_reduction_def (a phi node), and the rest
++ vect_internal_def. */
++ if (((oprnd_info->first_dt != dt
++ && !(oprnd_info->first_dt == vect_reduction_def
++ && dt == vect_internal_def))
++ || (oprnd_info->first_def_type != NULL_TREE
++ && def
++ && !types_compatible_p (oprnd_info->first_def_type,
++ TREE_TYPE (def))))
++ || (!def
++ && !types_compatible_p (TREE_TYPE (oprnd_info->first_const_oprnd),
++ TREE_TYPE (oprnd)))
++ || different_types)
+ {
+- /* op1 of the first stmt of the group - store its info. */
+- *first_stmt_dt1 = dt[i];
+- if (def)
+- *first_stmt_def1_type = TREE_TYPE (def);
+- else
++ if (number_of_oprnds != 2)
+ {
+- /* We assume that the stmt contains only one constant
+- operand. We fail otherwise, to be on the safe side. */
+- if (*first_stmt_const_oprnd)
+- {
+- if (vect_print_dump_info (REPORT_SLP))
+- fprintf (vect_dump, "Build SLP failed: two constant "
+- "oprnds in stmt");
+- return false;
+- }
+- *first_stmt_const_oprnd = oprnd;
+- }
+- }
+- else
+- {
+- /* Not first stmt of the group, check that the def-stmt/s match
+- the def-stmt/s of the first stmt. */
+- if ((i == 0
+- && (*first_stmt_dt0 != dt[i]
+- || (*first_stmt_def0_type && def
+- && !types_compatible_p (*first_stmt_def0_type,
+- TREE_TYPE (def)))))
+- || (i == 1
+- && (*first_stmt_dt1 != dt[i]
+- || (*first_stmt_def1_type && def
+- && !types_compatible_p (*first_stmt_def1_type,
+- TREE_TYPE (def)))))
+- || (!def
+- && !types_compatible_p (TREE_TYPE (*first_stmt_const_oprnd),
+- TREE_TYPE (oprnd))))
++ if (vect_print_dump_info (REPORT_SLP))
++ fprintf (vect_dump, "Build SLP failed: different types ");
++
++ return false;
++ }
++
++ /* Try to swap operands in case of binary operation. */
++ if (i == 0)
++ different_types = true;
++ else
+ {
+- if (vect_print_dump_info (REPORT_SLP))
+- fprintf (vect_dump, "Build SLP failed: different types ");
++ oprnd0_info = VEC_index (slp_oprnd_info, *oprnds_info, 0);
++ if (is_gimple_assign (stmt)
++ && (rhs_code = gimple_assign_rhs_code (stmt))
++ && TREE_CODE_CLASS (rhs_code) == tcc_binary
++ && commutative_tree_code (rhs_code)
++ && oprnd0_info->first_dt == dt
++ && oprnd_info->first_dt == dt_op0
++ && def_op0 && def
++ && !(oprnd0_info->first_def_type
++ && !types_compatible_p (oprnd0_info->first_def_type,
++ TREE_TYPE (def)))
++ && !(oprnd_info->first_def_type
++ && !types_compatible_p (oprnd_info->first_def_type,
++ TREE_TYPE (def_op0))))
++ {
++ if (vect_print_dump_info (REPORT_SLP))
++ {
++ fprintf (vect_dump, "Swapping operands of ");
++ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
++ }
+
+- return false;
++ swap_tree_operands (stmt, gimple_assign_rhs1_ptr (stmt),
++ gimple_assign_rhs2_ptr (stmt));
++ }
++ else
++ {
++ if (vect_print_dump_info (REPORT_SLP))
++ fprintf (vect_dump, "Build SLP failed: different types ");
++
++ return false;
++ }
+ }
+ }
+ }
+
+ /* Check the types of the definitions. */
+- switch (dt[i])
++ switch (dt)
+ {
+ case vect_constant_def:
+ case vect_external_def:
++ case vect_reduction_def:
+ break;
+
+ case vect_internal_def:
+- case vect_reduction_def:
+- if (i == 0)
+- VEC_safe_push (gimple, heap, *def_stmts0, def_stmt);
++ if (different_types)
++ {
++ oprnd0_info = VEC_index (slp_oprnd_info, *oprnds_info, 0);
++ oprnd1_info = VEC_index (slp_oprnd_info, *oprnds_info, 0);
++ if (i == 0)
++ VEC_quick_push (gimple, oprnd1_info->def_stmts, def_stmt);
++ else
++ VEC_quick_push (gimple, oprnd0_info->def_stmts, def_stmt);
++ }
+ else
+- VEC_safe_push (gimple, heap, *def_stmts1, def_stmt);
++ VEC_quick_push (gimple, oprnd_info->def_stmts, def_stmt);
+ break;
+
+ default:
+@@ -309,17 +453,13 @@
+ int ncopies_for_cost, unsigned int *max_nunits,
+ VEC (int, heap) **load_permutation,
+ VEC (slp_tree, heap) **loads,
+- unsigned int vectorization_factor)
++ unsigned int vectorization_factor, bool *loads_permuted)
+ {
+- VEC (gimple, heap) *def_stmts0 = VEC_alloc (gimple, heap, group_size);
+- VEC (gimple, heap) *def_stmts1 = VEC_alloc (gimple, heap, group_size);
+ unsigned int i;
+ VEC (gimple, heap) *stmts = SLP_TREE_SCALAR_STMTS (*node);
+ gimple stmt = VEC_index (gimple, stmts, 0);
+- enum vect_def_type first_stmt_dt0 = vect_uninitialized_def;
+- enum vect_def_type first_stmt_dt1 = vect_uninitialized_def;
+ enum tree_code first_stmt_code = ERROR_MARK, rhs_code = ERROR_MARK;
+- tree first_stmt_def1_type = NULL_TREE, first_stmt_def0_type = NULL_TREE;
++ enum tree_code first_cond_code = ERROR_MARK;
+ tree lhs;
+ bool stop_recursion = false, need_same_oprnds = false;
+ tree vectype, scalar_type, first_op1 = NULL_TREE;
+@@ -328,13 +468,28 @@
+ int icode;
+ enum machine_mode optab_op2_mode;
+ enum machine_mode vec_mode;
+- tree first_stmt_const_oprnd = NULL_TREE;
+ struct data_reference *first_dr;
+- bool pattern0 = false, pattern1 = false;
+ HOST_WIDE_INT dummy;
+ bool permutation = false;
+ unsigned int load_place;
+ gimple first_load, prev_first_load = NULL;
++ VEC (slp_oprnd_info, heap) *oprnds_info;
++ unsigned int nops;
++ slp_oprnd_info oprnd_info;
++ tree cond;
++
++ if (is_gimple_call (stmt))
++ nops = gimple_call_num_args (stmt);
++ else if (is_gimple_assign (stmt))
++ {
++ nops = gimple_num_ops (stmt) - 1;
++ if (gimple_assign_rhs_code (stmt) == COND_EXPR)
++ nops = 4;
++ }
++ else
++ return false;
++
++ oprnds_info = vect_create_oprnd_info (nops, group_size);
+
+ /* For every stmt in NODE find its def stmt/s. */
+ FOR_EACH_VEC_ELT (gimple, stmts, i, stmt)
+@@ -355,6 +510,7 @@
+ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
+ }
+
++ vect_free_oprnd_info (&oprnds_info);
+ return false;
+ }
+
+@@ -364,13 +520,30 @@
+ if (vect_print_dump_info (REPORT_SLP))
+ {
+ fprintf (vect_dump,
+- "Build SLP failed: not GIMPLE_ASSIGN nor GIMPLE_CALL");
++ "Build SLP failed: not GIMPLE_ASSIGN nor GIMPLE_CALL ");
+ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
+ }
+
++ vect_free_oprnd_info (&oprnds_info);
+ return false;
+ }
+
++ if (is_gimple_assign (stmt)
++ && gimple_assign_rhs_code (stmt) == COND_EXPR
++ && (cond = TREE_OPERAND (gimple_assign_rhs1 (stmt), 0))
++ && !COMPARISON_CLASS_P (cond))
++ {
++ if (vect_print_dump_info (REPORT_SLP))
++ {
++ fprintf (vect_dump,
++ "Build SLP failed: condition is not comparison ");
++ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
++ }
++
++ vect_free_oprnd_info (&oprnds_info);
++ return false;
++ }
++
+ scalar_type = vect_get_smallest_scalar_type (stmt, &dummy, &dummy);
+ vectype = get_vectype_for_scalar_type (scalar_type);
+ if (!vectype)
+@@ -380,23 +553,20 @@
+ fprintf (vect_dump, "Build SLP failed: unsupported data-type ");
+ print_generic_expr (vect_dump, scalar_type, TDF_SLIM);
+ }
++
++ vect_free_oprnd_info (&oprnds_info);
+ return false;
+ }
+
+- ncopies = vectorization_factor / TYPE_VECTOR_SUBPARTS (vectype);
+- if (ncopies != 1)
++ /* In case of multiple types we need to detect the smallest type. */
++ if (*max_nunits < TYPE_VECTOR_SUBPARTS (vectype))
+ {
+- if (vect_print_dump_info (REPORT_SLP))
+- fprintf (vect_dump, "SLP with multiple types ");
+-
+- /* FORNOW: multiple types are unsupported in BB SLP. */
+- if (bb_vinfo)
+- return false;
++ *max_nunits = TYPE_VECTOR_SUBPARTS (vectype);
++ if (bb_vinfo)
++ vectorization_factor = *max_nunits;
+ }
+
+- /* In case of multiple types we need to detect the smallest type. */
+- if (*max_nunits < TYPE_VECTOR_SUBPARTS (vectype))
+- *max_nunits = TYPE_VECTOR_SUBPARTS (vectype);
++ ncopies = vectorization_factor / TYPE_VECTOR_SUBPARTS (vectype);
+
+ if (is_gimple_call (stmt))
+ rhs_code = CALL_EXPR;
+@@ -431,6 +601,7 @@
+ {
+ if (vect_print_dump_info (REPORT_SLP))
+ fprintf (vect_dump, "Build SLP failed: no optab.");
++ vect_free_oprnd_info (&oprnds_info);
+ return false;
+ }
+ icode = (int) optab_handler (optab, vec_mode);
+@@ -439,6 +610,7 @@
+ if (vect_print_dump_info (REPORT_SLP))
+ fprintf (vect_dump, "Build SLP failed: "
+ "op not supported by target.");
++ vect_free_oprnd_info (&oprnds_info);
+ return false;
+ }
+ optab_op2_mode = insn_data[icode].operand[2].mode;
+@@ -449,6 +621,11 @@
+ }
+ }
+ }
++ else if (rhs_code == WIDEN_LSHIFT_EXPR)
++ {
++ need_same_oprnds = true;
++ first_op1 = gimple_assign_rhs2 (stmt);
++ }
+ }
+ else
+ {
+@@ -470,6 +647,7 @@
+ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
+ }
+
++ vect_free_oprnd_info (&oprnds_info);
+ return false;
+ }
+
+@@ -483,6 +661,7 @@
+ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
+ }
+
++ vect_free_oprnd_info (&oprnds_info);
+ return false;
+ }
+ }
+@@ -494,15 +673,12 @@
+ {
+ /* Store. */
+ if (!vect_get_and_check_slp_defs (loop_vinfo, bb_vinfo, *node,
+- stmt, &def_stmts0, &def_stmts1,
+- &first_stmt_dt0,
+- &first_stmt_dt1,
+- &first_stmt_def0_type,
+- &first_stmt_def1_type,
+- &first_stmt_const_oprnd,
+- ncopies_for_cost,
+- &pattern0, &pattern1))
+- return false;
++ stmt, ncopies_for_cost,
++ (i == 0), &oprnds_info))
++ {
++ vect_free_oprnd_info (&oprnds_info);
++ return false;
++ }
+ }
+ else
+ {
+@@ -520,12 +696,15 @@
+ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
+ }
+
++ vect_free_oprnd_info (&oprnds_info);
+ return false;
+ }
+
+ /* Check that the size of interleaved loads group is not
+ greater than the SLP group size. */
+- if (DR_GROUP_SIZE (vinfo_for_stmt (stmt)) > ncopies * group_size)
++ if (loop_vinfo
++ && DR_GROUP_SIZE (vinfo_for_stmt (stmt))
++ > ncopies * group_size)
+ {
+ if (vect_print_dump_info (REPORT_SLP))
+ {
+@@ -535,6 +714,7 @@
+ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
+ }
+
++ vect_free_oprnd_info (&oprnds_info);
+ return false;
+ }
+
+@@ -555,6 +735,7 @@
+ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
+ }
+
++ vect_free_oprnd_info (&oprnds_info);
+ return false;
+ }
+ }
+@@ -574,12 +755,13 @@
+ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
+ }
+
++ vect_free_oprnd_info (&oprnds_info);
+ return false;
+ }
+
+ /* Analyze costs (for the first stmt in the group). */
+ vect_model_load_cost (vinfo_for_stmt (stmt),
+- ncopies_for_cost, *node);
++ ncopies_for_cost, false, *node);
+ }
+
+ /* Store the place of this load in the interleaving chain. In
+@@ -601,7 +783,7 @@
+ {
+ if (TREE_CODE_CLASS (rhs_code) == tcc_reference)
+ {
+- /* Not strided load. */
++ /* Not strided load. */
+ if (vect_print_dump_info (REPORT_SLP))
+ {
+ fprintf (vect_dump, "Build SLP failed: not strided load ");
+@@ -609,12 +791,14 @@
+ }
+
+ /* FORNOW: Not strided loads are not supported. */
++ vect_free_oprnd_info (&oprnds_info);
+ return false;
+ }
+
+ /* Not memory operation. */
+ if (TREE_CODE_CLASS (rhs_code) != tcc_binary
+- && TREE_CODE_CLASS (rhs_code) != tcc_unary)
++ && TREE_CODE_CLASS (rhs_code) != tcc_unary
++ && rhs_code != COND_EXPR)
+ {
+ if (vect_print_dump_info (REPORT_SLP))
+ {
+@@ -623,19 +807,38 @@
+ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
+ }
+
++ vect_free_oprnd_info (&oprnds_info);
+ return false;
+ }
+
++ if (rhs_code == COND_EXPR)
++ {
++ tree cond_expr = TREE_OPERAND (gimple_assign_rhs1 (stmt), 0);
++
++ if (i == 0)
++ first_cond_code = TREE_CODE (cond_expr);
++ else if (first_cond_code != TREE_CODE (cond_expr))
++ {
++ if (vect_print_dump_info (REPORT_SLP))
++ {
++ fprintf (vect_dump, "Build SLP failed: different"
++ " operation");
++ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
++ }
++
++ vect_free_oprnd_info (&oprnds_info);
++ return false;
++ }
++ }
++
+ /* Find the def-stmts. */
+ if (!vect_get_and_check_slp_defs (loop_vinfo, bb_vinfo, *node, stmt,
+- &def_stmts0, &def_stmts1,
+- &first_stmt_dt0, &first_stmt_dt1,
+- &first_stmt_def0_type,
+- &first_stmt_def1_type,
+- &first_stmt_const_oprnd,
+- ncopies_for_cost,
+- &pattern0, &pattern1))
+- return false;
++ ncopies_for_cost, (i == 0),
++ &oprnds_info))
++ {
++ vect_free_oprnd_info (&oprnds_info);
++ return false;
++ }
+ }
+ }
+
+@@ -646,61 +849,55 @@
+ /* Strided loads were reached - stop the recursion. */
+ if (stop_recursion)
+ {
++ VEC_safe_push (slp_tree, heap, *loads, *node);
+ if (permutation)
+ {
+- VEC_safe_push (slp_tree, heap, *loads, *node);
++
++ *loads_permuted = true;
+ *inside_cost
+ += targetm.vectorize.builtin_vectorization_cost (vec_perm, NULL, 0)
+ * group_size;
+ }
+ else
+- {
+- /* We don't check here complex numbers chains, so we keep them in
+- LOADS for further check in vect_supported_load_permutation_p. */
++ {
++ /* We don't check here complex numbers chains, so we set
++ LOADS_PERMUTED for further check in
++ vect_supported_load_permutation_p. */
+ if (rhs_code == REALPART_EXPR || rhs_code == IMAGPART_EXPR)
+- VEC_safe_push (slp_tree, heap, *loads, *node);
++ *loads_permuted = true;
+ }
+
++ vect_free_oprnd_info (&oprnds_info);
+ return true;
+ }
+
+ /* Create SLP_TREE nodes for the definition node/s. */
+- if (first_stmt_dt0 == vect_internal_def)
++ FOR_EACH_VEC_ELT (slp_oprnd_info, oprnds_info, i, oprnd_info)
+ {
+- slp_tree left_node = XNEW (struct _slp_tree);
+- SLP_TREE_SCALAR_STMTS (left_node) = def_stmts0;
+- SLP_TREE_VEC_STMTS (left_node) = NULL;
+- SLP_TREE_LEFT (left_node) = NULL;
+- SLP_TREE_RIGHT (left_node) = NULL;
+- SLP_TREE_OUTSIDE_OF_LOOP_COST (left_node) = 0;
+- SLP_TREE_INSIDE_OF_LOOP_COST (left_node) = 0;
+- if (!vect_build_slp_tree (loop_vinfo, bb_vinfo, &left_node, group_size,
+- inside_cost, outside_cost, ncopies_for_cost,
+- max_nunits, load_permutation, loads,
+- vectorization_factor))
+- return false;
++ slp_tree child;
+
+- SLP_TREE_LEFT (*node) = left_node;
+- }
++ if (oprnd_info->first_dt != vect_internal_def)
++ continue;
+
+- if (first_stmt_dt1 == vect_internal_def)
+- {
+- slp_tree right_node = XNEW (struct _slp_tree);
+- SLP_TREE_SCALAR_STMTS (right_node) = def_stmts1;
+- SLP_TREE_VEC_STMTS (right_node) = NULL;
+- SLP_TREE_LEFT (right_node) = NULL;
+- SLP_TREE_RIGHT (right_node) = NULL;
+- SLP_TREE_OUTSIDE_OF_LOOP_COST (right_node) = 0;
+- SLP_TREE_INSIDE_OF_LOOP_COST (right_node) = 0;
+- if (!vect_build_slp_tree (loop_vinfo, bb_vinfo, &right_node, group_size,
++ child = vect_create_new_slp_node (oprnd_info->def_stmts);
++ if (!child
++ || !vect_build_slp_tree (loop_vinfo, bb_vinfo, &child, group_size,
+ inside_cost, outside_cost, ncopies_for_cost,
+ max_nunits, load_permutation, loads,
+- vectorization_factor))
+- return false;
++ vectorization_factor, loads_permuted))
++ {
++ if (child)
++ oprnd_info->def_stmts = NULL;
++ vect_free_slp_tree (child);
++ vect_free_oprnd_info (&oprnds_info);
++ return false;
++ }
+
+- SLP_TREE_RIGHT (*node) = right_node;
++ oprnd_info->def_stmts = NULL;
++ VEC_quick_push (slp_void_p, SLP_TREE_CHILDREN (*node), child);
+ }
+
++ vect_free_oprnd_info (&oprnds_info);
+ return true;
+ }
+
+@@ -710,6 +907,7 @@
+ {
+ int i;
+ gimple stmt;
++ slp_void_p child;
+
+ if (!node)
+ return;
+@@ -722,8 +920,8 @@
+ }
+ fprintf (vect_dump, "\n");
+
+- vect_print_slp_tree (SLP_TREE_LEFT (node));
+- vect_print_slp_tree (SLP_TREE_RIGHT (node));
++ FOR_EACH_VEC_ELT (slp_void_p, SLP_TREE_CHILDREN (node), i, child)
++ vect_print_slp_tree ((slp_tree) child);
+ }
+
+
+@@ -737,6 +935,7 @@
+ {
+ int i;
+ gimple stmt;
++ slp_void_p child;
+
+ if (!node)
+ return;
+@@ -745,8 +944,8 @@
+ if (j < 0 || i == j)
+ STMT_SLP_TYPE (vinfo_for_stmt (stmt)) = mark;
+
+- vect_mark_slp_stmts (SLP_TREE_LEFT (node), mark, j);
+- vect_mark_slp_stmts (SLP_TREE_RIGHT (node), mark, j);
++ FOR_EACH_VEC_ELT (slp_void_p, SLP_TREE_CHILDREN (node), i, child)
++ vect_mark_slp_stmts ((slp_tree) child, mark, j);
+ }
+
+
+@@ -758,6 +957,7 @@
+ int i;
+ gimple stmt;
+ stmt_vec_info stmt_info;
++ slp_void_p child;
+
+ if (!node)
+ return;
+@@ -770,8 +970,8 @@
+ STMT_VINFO_RELEVANT (stmt_info) = vect_used_in_scope;
+ }
+
+- vect_mark_slp_stmts_relevant (SLP_TREE_LEFT (node));
+- vect_mark_slp_stmts_relevant (SLP_TREE_RIGHT (node));
++ FOR_EACH_VEC_ELT (slp_void_p, SLP_TREE_CHILDREN (node), i, child)
++ vect_mark_slp_stmts_relevant ((slp_tree) child);
+ }
+
+
+@@ -844,12 +1044,13 @@
+ gimple stmt;
+ VEC (gimple, heap) *tmp_stmts;
+ unsigned int index, i;
++ slp_void_p child;
+
+ if (!node)
+ return;
+
+- vect_slp_rearrange_stmts (SLP_TREE_LEFT (node), group_size, permutation);
+- vect_slp_rearrange_stmts (SLP_TREE_RIGHT (node), group_size, permutation);
++ FOR_EACH_VEC_ELT (slp_void_p, SLP_TREE_CHILDREN (node), i, child)
++ vect_slp_rearrange_stmts ((slp_tree) child, group_size, permutation);
+
+ gcc_assert (group_size == VEC_length (gimple, SLP_TREE_SCALAR_STMTS (node)));
+ tmp_stmts = VEC_alloc (gimple, heap, group_size);
+@@ -881,8 +1082,10 @@
+ bool supported, bad_permutation = false;
+ sbitmap load_index;
+ slp_tree node, other_complex_node;
+- gimple stmt, first = NULL, other_node_first;
++ gimple stmt, first = NULL, other_node_first, load, next_load, first_load;
+ unsigned complex_numbers = 0;
++ struct data_reference *dr;
++ bb_vec_info bb_vinfo;
+
+ /* FORNOW: permutations are only supported in SLP. */
+ if (!slp_instn)
+@@ -1042,6 +1245,76 @@
+ }
+ }
+
++ /* In basic block vectorization we allow any subchain of an interleaving
++ chain.
++ FORNOW: not supported in loop SLP because of realignment compications. */
++ bb_vinfo = STMT_VINFO_BB_VINFO (vinfo_for_stmt (stmt));
++ bad_permutation = false;
++ /* Check that for every node in the instance teh loads form a subchain. */
++ if (bb_vinfo)
++ {
++ FOR_EACH_VEC_ELT (slp_tree, SLP_INSTANCE_LOADS (slp_instn), i, node)
++ {
++ next_load = NULL;
++ first_load = NULL;
++ FOR_EACH_VEC_ELT (gimple, SLP_TREE_SCALAR_STMTS (node), j, load)
++ {
++ if (!first_load)
++ first_load = DR_GROUP_FIRST_DR (vinfo_for_stmt (load));
++ else if (first_load
++ != DR_GROUP_FIRST_DR (vinfo_for_stmt (load)))
++ {
++ bad_permutation = true;
++ break;
++ }
++
++ if (j != 0 && next_load != load)
++ {
++ bad_permutation = true;
++ break;
++ }
++
++ next_load = DR_GROUP_NEXT_DR (vinfo_for_stmt (load));
++ }
++
++ if (bad_permutation)
++ break;
++ }
++
++ /* Check that the alignment of the first load in every subchain, i.e.,
++ the first statement in every load node, is supported. */
++ if (!bad_permutation)
++ {
++ FOR_EACH_VEC_ELT (slp_tree, SLP_INSTANCE_LOADS (slp_instn), i, node)
++ {
++ first_load = VEC_index (gimple, SLP_TREE_SCALAR_STMTS (node), 0);
++ if (first_load
++ != DR_GROUP_FIRST_DR (vinfo_for_stmt (first_load)))
++ {
++ dr = STMT_VINFO_DATA_REF (vinfo_for_stmt (first_load));
++ if (vect_supportable_dr_alignment (dr, false)
++ == dr_unaligned_unsupported)
++ {
++ if (vect_print_dump_info (REPORT_SLP))
++ {
++ fprintf (vect_dump, "unsupported unaligned load ");
++ print_gimple_stmt (vect_dump, first_load, 0,
++ TDF_SLIM);
++ }
++ bad_permutation = true;
++ break;
++ }
++ }
++ }
++
++ if (!bad_permutation)
++ {
++ VEC_free (int, heap, SLP_INSTANCE_LOAD_PERMUTATION (slp_instn));
++ return true;
++ }
++ }
++ }
++
+ /* FORNOW: the only supported permutation is 0..01..1.. of length equal to
+ GROUP_SIZE and where each sequence of same drs is of GROUP_SIZE length as
+ well (unless it's reduction). */
+@@ -1140,7 +1413,7 @@
+ gimple stmt)
+ {
+ slp_instance new_instance;
+- slp_tree node = XNEW (struct _slp_tree);
++ slp_tree node;
+ unsigned int group_size = DR_GROUP_SIZE (vinfo_for_stmt (stmt));
+ unsigned int unrolling_factor = 1, nunits;
+ tree vectype, scalar_type = NULL_TREE;
+@@ -1151,6 +1424,8 @@
+ VEC (int, heap) *load_permutation;
+ VEC (slp_tree, heap) *loads;
+ struct data_reference *dr = STMT_VINFO_DATA_REF (vinfo_for_stmt (stmt));
++ bool loads_permuted = false;
++ VEC (gimple, heap) *scalar_stmts;
+
+ if (dr)
+ {
+@@ -1180,7 +1455,6 @@
+ if (loop_vinfo)
+ vectorization_factor = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
+ else
+- /* No multitypes in BB SLP. */
+ vectorization_factor = nunits;
+
+ /* Calculate the unrolling factor. */
+@@ -1195,39 +1469,31 @@
+ }
+
+ /* Create a node (a root of the SLP tree) for the packed strided stores. */
+- SLP_TREE_SCALAR_STMTS (node) = VEC_alloc (gimple, heap, group_size);
++ scalar_stmts = VEC_alloc (gimple, heap, group_size);
+ next = stmt;
+ if (dr)
+ {
+ /* Collect the stores and store them in SLP_TREE_SCALAR_STMTS. */
+ while (next)
+ {
+- VEC_safe_push (gimple, heap, SLP_TREE_SCALAR_STMTS (node), next);
++ if (STMT_VINFO_IN_PATTERN_P (vinfo_for_stmt (next))
++ && STMT_VINFO_RELATED_STMT (vinfo_for_stmt (next)))
++ VEC_safe_push (gimple, heap, scalar_stmts,
++ STMT_VINFO_RELATED_STMT (vinfo_for_stmt (next)));
++ else
++ VEC_safe_push (gimple, heap, scalar_stmts, next);
+ next = DR_GROUP_NEXT_DR (vinfo_for_stmt (next));
+ }
+ }
+ else
+ {
+ /* Collect reduction statements. */
+- for (i = 0; VEC_iterate (gimple, LOOP_VINFO_REDUCTIONS (loop_vinfo), i,
+- next);
+- i++)
+- {
+- VEC_safe_push (gimple, heap, SLP_TREE_SCALAR_STMTS (node), next);
+- if (vect_print_dump_info (REPORT_DETAILS))
+- {
+- fprintf (vect_dump, "pushing reduction into node: ");
+- print_gimple_stmt (vect_dump, next, 0, TDF_SLIM);
+- }
+- }
++ VEC (gimple, heap) *reductions = LOOP_VINFO_REDUCTIONS (loop_vinfo);
++ for (i = 0; VEC_iterate (gimple, reductions, i, next); i++)
++ VEC_safe_push (gimple, heap, scalar_stmts, next);
+ }
+
+- SLP_TREE_VEC_STMTS (node) = NULL;
+- SLP_TREE_NUMBER_OF_VEC_STMTS (node) = 0;
+- SLP_TREE_LEFT (node) = NULL;
+- SLP_TREE_RIGHT (node) = NULL;
+- SLP_TREE_OUTSIDE_OF_LOOP_COST (node) = 0;
+- SLP_TREE_INSIDE_OF_LOOP_COST (node) = 0;
++ node = vect_create_new_slp_node (scalar_stmts);
+
+ /* Calculate the number of vector stmts to create based on the unrolling
+ factor (number of vectors is 1 if NUNITS >= GROUP_SIZE, and is
+@@ -1241,25 +1507,33 @@
+ if (vect_build_slp_tree (loop_vinfo, bb_vinfo, &node, group_size,
+ &inside_cost, &outside_cost, ncopies_for_cost,
+ &max_nunits, &load_permutation, &loads,
+- vectorization_factor))
++ vectorization_factor, &loads_permuted))
+ {
+- /* Create a new SLP instance. */
+- new_instance = XNEW (struct _slp_instance);
+- SLP_INSTANCE_TREE (new_instance) = node;
+- SLP_INSTANCE_GROUP_SIZE (new_instance) = group_size;
+- /* Calculate the unrolling factor based on the smallest type in the
+- loop. */
++ /* Calculate the unrolling factor based on the smallest type. */
+ if (max_nunits > nunits)
+ unrolling_factor = least_common_multiple (max_nunits, group_size)
+ / group_size;
+
++ if (unrolling_factor != 1 && !loop_vinfo)
++ {
++ if (vect_print_dump_info (REPORT_SLP))
++ fprintf (vect_dump, "Build SLP failed: unrolling required in basic"
++ " block SLP");
++ return false;
++ }
++
++ /* Create a new SLP instance. */
++ new_instance = XNEW (struct _slp_instance);
++ SLP_INSTANCE_TREE (new_instance) = node;
++ SLP_INSTANCE_GROUP_SIZE (new_instance) = group_size;
+ SLP_INSTANCE_UNROLLING_FACTOR (new_instance) = unrolling_factor;
+ SLP_INSTANCE_OUTSIDE_OF_LOOP_COST (new_instance) = outside_cost;
+ SLP_INSTANCE_INSIDE_OF_LOOP_COST (new_instance) = inside_cost;
+ SLP_INSTANCE_LOADS (new_instance) = loads;
+ SLP_INSTANCE_FIRST_LOAD_STMT (new_instance) = NULL;
+ SLP_INSTANCE_LOAD_PERMUTATION (new_instance) = load_permutation;
+- if (VEC_length (slp_tree, loads))
++
++ if (loads_permuted)
+ {
+ if (!vect_supported_load_permutation_p (new_instance, group_size,
+ load_permutation))
+@@ -1396,6 +1670,7 @@
+ imm_use_iterator imm_iter;
+ gimple use_stmt;
+ stmt_vec_info stmt_vinfo;
++ slp_void_p child;
+
+ if (!node)
+ return;
+@@ -1413,8 +1688,8 @@
+ == vect_reduction_def))
+ vect_mark_slp_stmts (node, hybrid, i);
+
+- vect_detect_hybrid_slp_stmts (SLP_TREE_LEFT (node));
+- vect_detect_hybrid_slp_stmts (SLP_TREE_RIGHT (node));
++ FOR_EACH_VEC_ELT (slp_void_p, SLP_TREE_CHILDREN (node), i, child)
++ vect_detect_hybrid_slp_stmts ((slp_tree) child);
+ }
+
+
+@@ -1504,13 +1779,14 @@
+ bool dummy;
+ int i;
+ gimple stmt;
++ slp_void_p child;
+
+ if (!node)
+ return true;
+
+- if (!vect_slp_analyze_node_operations (bb_vinfo, SLP_TREE_LEFT (node))
+- || !vect_slp_analyze_node_operations (bb_vinfo, SLP_TREE_RIGHT (node)))
+- return false;
++ FOR_EACH_VEC_ELT (slp_void_p, SLP_TREE_CHILDREN (node), i, child)
++ if (!vect_slp_analyze_node_operations (bb_vinfo, (slp_tree) child))
++ return false;
+
+ FOR_EACH_VEC_ELT (gimple, SLP_TREE_SCALAR_STMTS (node), i, stmt)
+ {
+@@ -1661,42 +1937,18 @@
+
+ /* Check if the basic block can be vectorized. */
+
+-bb_vec_info
+-vect_slp_analyze_bb (basic_block bb)
++static bb_vec_info
++vect_slp_analyze_bb_1 (basic_block bb)
+ {
+ bb_vec_info bb_vinfo;
+ VEC (ddr_p, heap) *ddrs;
+ VEC (slp_instance, heap) *slp_instances;
+ slp_instance instance;
+- int i, insns = 0;
+- gimple_stmt_iterator gsi;
++ int i;
+ int min_vf = 2;
+ int max_vf = MAX_VECTORIZATION_FACTOR;
+ bool data_dependence_in_bb = false;
+
+- current_vector_size = 0;
+-
+- if (vect_print_dump_info (REPORT_DETAILS))
+- fprintf (vect_dump, "===vect_slp_analyze_bb===\n");
+-
+- for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+- {
+- gimple stmt = gsi_stmt (gsi);
+- if (!is_gimple_debug (stmt)
+- && !gimple_nop_p (stmt)
+- && gimple_code (stmt) != GIMPLE_LABEL)
+- insns++;
+- }
+-
+- if (insns > PARAM_VALUE (PARAM_SLP_MAX_INSNS_IN_BB))
+- {
+- if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
+- fprintf (vect_dump, "not vectorized: too many instructions in basic "
+- "block.\n");
+-
+- return NULL;
+- }
+-
+ bb_vinfo = new_bb_vec_info (bb);
+ if (!bb_vinfo)
+ return NULL;
+@@ -1722,6 +1974,8 @@
+ return NULL;
+ }
+
++ vect_pattern_recog (NULL, bb_vinfo);
++
+ if (!vect_analyze_data_ref_dependences (NULL, bb_vinfo, &max_vf,
+ &data_dependence_in_bb)
+ || min_vf > max_vf
+@@ -1816,6 +2070,61 @@
+ }
+
+
++bb_vec_info
++vect_slp_analyze_bb (basic_block bb)
++{
++ bb_vec_info bb_vinfo;
++ int insns = 0;
++ gimple_stmt_iterator gsi;
++ unsigned int vector_sizes;
++
++ if (vect_print_dump_info (REPORT_DETAILS))
++ fprintf (vect_dump, "===vect_slp_analyze_bb===\n");
++
++ for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
++ {
++ gimple stmt = gsi_stmt (gsi);
++ if (!is_gimple_debug (stmt)
++ && !gimple_nop_p (stmt)
++ && gimple_code (stmt) != GIMPLE_LABEL)
++ insns++;
++ }
++
++ if (insns > PARAM_VALUE (PARAM_SLP_MAX_INSNS_IN_BB))
++ {
++ if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
++ fprintf (vect_dump, "not vectorized: too many instructions in basic "
++ "block.\n");
++
++ return NULL;
++ }
++
++ /* Autodetect first vector size we try. */
++ current_vector_size = 0;
++ vector_sizes = targetm.vectorize.autovectorize_vector_sizes ();
++
++ while (1)
++ {
++ bb_vinfo = vect_slp_analyze_bb_1 (bb);
++ if (bb_vinfo)
++ return bb_vinfo;
++
++ destroy_bb_vec_info (bb_vinfo);
++
++ vector_sizes &= ~current_vector_size;
++ if (vector_sizes == 0
++ || current_vector_size == 0)
++ return NULL;
++
++ /* Try the next biggest vector size. */
++ current_vector_size = 1 << floor_log2 (vector_sizes);
++ if (vect_print_dump_info (REPORT_DETAILS))
++ fprintf (vect_dump, "***** Re-trying analysis with "
++ "vector size %d\n", current_vector_size);
++ }
++}
++
++
+ /* SLP costs are calculated according to SLP instance unrolling factor (i.e.,
+ the number of created vector stmts depends on the unrolling factor).
+ However, the actual number of vector stmts for every SLP node depends on
+@@ -1939,15 +2248,15 @@
+
+ For example, we have two scalar operands, s1 and s2 (e.g., group of
+ strided accesses of size two), while NUNITS is four (i.e., four scalars
+- of this type can be packed in a vector). The output vector will contain
+- two copies of each scalar operand: {s1, s2, s1, s2}. (NUMBER_OF_COPIES
++ of this type can be packed in a vector). The output vector will contain
++ two copies of each scalar operand: {s1, s2, s1, s2}. (NUMBER_OF_COPIES
+ will be 2).
+
+ If GROUP_SIZE > NUNITS, the scalars will be split into several vectors
+ containing the operands.
+
+ For example, NUNITS is four as before, and the group size is 8
+- (s1, s2, ..., s8). We will create two vectors {s1, s2, s3, s4} and
++ (s1, s2, ..., s8). We will create two vectors {s1, s2, s3, s4} and
+ {s5, s6, s7, s8}. */
+
+ number_of_copies = least_common_multiple (nunits, group_size) / group_size;
+@@ -1959,8 +2268,18 @@
+ {
+ if (is_store)
+ op = gimple_assign_rhs1 (stmt);
+- else
++ else if (gimple_assign_rhs_code (stmt) != COND_EXPR)
+ op = gimple_op (stmt, op_num + 1);
++ else
++ {
++ if (op_num == 0 || op_num == 1)
++ {
++ tree cond = TREE_OPERAND (gimple_assign_rhs1 (stmt), 0);
++ op = TREE_OPERAND (cond, op_num);
++ }
++ else
++ op = TREE_OPERAND (gimple_assign_rhs1 (stmt), op_num - 1);
++ }
+
+ if (reduc_index != -1)
+ {
+@@ -2055,88 +2374,102 @@
+ If the scalar definitions are loop invariants or constants, collect them and
+ call vect_get_constant_vectors() to create vector stmts.
+ Otherwise, the def-stmts must be already vectorized and the vectorized stmts
+- must be stored in the LEFT/RIGHT node of SLP_NODE, and we call
+- vect_get_slp_vect_defs() to retrieve them.
+- If VEC_OPRNDS1 is NULL, don't get vector defs for the second operand (from
+- the right node. This is used when the second operand must remain scalar. */
++ must be stored in the corresponding child of SLP_NODE, and we call
++ vect_get_slp_vect_defs () to retrieve them. */
+
+ void
+-vect_get_slp_defs (tree op0, tree op1, slp_tree slp_node,
+- VEC (tree,heap) **vec_oprnds0,
+- VEC (tree,heap) **vec_oprnds1, int reduc_index)
+-{
+- gimple first_stmt;
+- enum tree_code code;
+- int number_of_vects;
++vect_get_slp_defs (VEC (tree, heap) *ops, slp_tree slp_node,
++ VEC (slp_void_p, heap) **vec_oprnds, int reduc_index)
++{
++ gimple first_stmt, first_def;
++ int number_of_vects = 0, i;
++ unsigned int child_index = 0;
+ HOST_WIDE_INT lhs_size_unit, rhs_size_unit;
++ slp_tree child = NULL;
++ VEC (tree, heap) *vec_defs;
++ tree oprnd, def_lhs;
++ bool vectorized_defs;
+
+ first_stmt = VEC_index (gimple, SLP_TREE_SCALAR_STMTS (slp_node), 0);
+- /* The number of vector defs is determined by the number of vector statements
+- in the node from which we get those statements. */
+- if (SLP_TREE_LEFT (slp_node))
+- number_of_vects = SLP_TREE_NUMBER_OF_VEC_STMTS (SLP_TREE_LEFT (slp_node));
+- else
+- {
+- number_of_vects = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
+- /* Number of vector stmts was calculated according to LHS in
+- vect_schedule_slp_instance(), fix it by replacing LHS with RHS, if
+- necessary. See vect_get_smallest_scalar_type () for details. */
+- vect_get_smallest_scalar_type (first_stmt, &lhs_size_unit,
+- &rhs_size_unit);
+- if (rhs_size_unit != lhs_size_unit)
+- {
+- number_of_vects *= rhs_size_unit;
+- number_of_vects /= lhs_size_unit;
+- }
+- }
++ FOR_EACH_VEC_ELT (tree, ops, i, oprnd)
++ {
++ /* For each operand we check if it has vectorized definitions in a child
++ node or we need to create them (for invariants and constants). We
++ check if the LHS of the first stmt of the next child matches OPRND.
++ If it does, we found the correct child. Otherwise, we call
++ vect_get_constant_vectors (), and not advance CHILD_INDEX in order
++ to check this child node for the next operand. */
++ vectorized_defs = false;
++ if (VEC_length (slp_void_p, SLP_TREE_CHILDREN (slp_node)) > child_index)
++ {
++ child = (slp_tree) VEC_index (slp_void_p,
++ SLP_TREE_CHILDREN (slp_node),
++ child_index);
++ first_def = VEC_index (gimple, SLP_TREE_SCALAR_STMTS (child), 0);
++
++ /* In the end of a pattern sequence we have a use of the original stmt,
++ so we need to compare OPRND with the original def. */
++ if (is_pattern_stmt_p (vinfo_for_stmt (first_def))
++ && !STMT_VINFO_IN_PATTERN_P (vinfo_for_stmt (first_stmt))
++ && !is_pattern_stmt_p (vinfo_for_stmt (first_stmt)))
++ first_def = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (first_def));
+
+- /* Allocate memory for vectorized defs. */
+- *vec_oprnds0 = VEC_alloc (tree, heap, number_of_vects);
+-
+- /* SLP_NODE corresponds either to a group of stores or to a group of
+- unary/binary operations. We don't call this function for loads.
+- For reduction defs we call vect_get_constant_vectors(), since we are
+- looking for initial loop invariant values. */
+- if (SLP_TREE_LEFT (slp_node) && reduc_index == -1)
+- /* The defs are already vectorized. */
+- vect_get_slp_vect_defs (SLP_TREE_LEFT (slp_node), vec_oprnds0);
+- else
+- /* Build vectors from scalar defs. */
+- vect_get_constant_vectors (op0, slp_node, vec_oprnds0, 0, number_of_vects,
+- reduc_index);
+-
+- if (STMT_VINFO_DATA_REF (vinfo_for_stmt (first_stmt)))
+- /* Since we don't call this function with loads, this is a group of
+- stores. */
+- return;
+-
+- /* For reductions, we only need initial values. */
+- if (reduc_index != -1)
+- return;
++ if (is_gimple_call (first_def))
++ def_lhs = gimple_call_lhs (first_def);
++ else
++ def_lhs = gimple_assign_lhs (first_def);
+
+- code = gimple_assign_rhs_code (first_stmt);
+- if (get_gimple_rhs_class (code) != GIMPLE_BINARY_RHS || !vec_oprnds1)
+- return;
++ if (operand_equal_p (oprnd, def_lhs, 0))
++ {
++ /* The number of vector defs is determined by the number of
++ vector statements in the node from which we get those
++ statements. */
++ number_of_vects = SLP_TREE_NUMBER_OF_VEC_STMTS (child);
++ vectorized_defs = true;
++ child_index++;
++ }
++ }
+
+- /* The number of vector defs is determined by the number of vector statements
+- in the node from which we get those statements. */
+- if (SLP_TREE_RIGHT (slp_node))
+- number_of_vects = SLP_TREE_NUMBER_OF_VEC_STMTS (SLP_TREE_RIGHT (slp_node));
+- else
+- number_of_vects = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
++ if (!vectorized_defs)
++ {
++ if (i == 0)
++ {
++ number_of_vects = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
++ /* Number of vector stmts was calculated according to LHS in
++ vect_schedule_slp_instance (), fix it by replacing LHS with
++ RHS, if necessary. See vect_get_smallest_scalar_type () for
++ details. */
++ vect_get_smallest_scalar_type (first_stmt, &lhs_size_unit,
++ &rhs_size_unit);
++ if (rhs_size_unit != lhs_size_unit)
++ {
++ number_of_vects *= rhs_size_unit;
++ number_of_vects /= lhs_size_unit;
++ }
++ }
++ }
+
+- *vec_oprnds1 = VEC_alloc (tree, heap, number_of_vects);
++ /* Allocate memory for vectorized defs. */
++ vec_defs = VEC_alloc (tree, heap, number_of_vects);
+
+- if (SLP_TREE_RIGHT (slp_node))
+- /* The defs are already vectorized. */
+- vect_get_slp_vect_defs (SLP_TREE_RIGHT (slp_node), vec_oprnds1);
+- else
+- /* Build vectors from scalar defs. */
+- vect_get_constant_vectors (op1, slp_node, vec_oprnds1, 1, number_of_vects,
+- -1);
++ /* For reduction defs we call vect_get_constant_vectors (), since we are
++ looking for initial loop invariant values. */
++ if (vectorized_defs && reduc_index == -1)
++ /* The defs are already vectorized. */
++ vect_get_slp_vect_defs (child, &vec_defs);
++ else
++ /* Build vectors from scalar defs. */
++ vect_get_constant_vectors (oprnd, slp_node, &vec_defs, i,
++ number_of_vects, reduc_index);
++
++ VEC_quick_push (slp_void_p, *vec_oprnds, (slp_void_p) vec_defs);
++
++ /* For reductions, we only need initial values. */
++ if (reduc_index != -1)
++ return;
++ }
+ }
+
+-
+ /* Create NCOPIES permutation statements using the mask MASK_BYTES (by
+ building a vector of type MASK_TYPE from it) and two input vectors placed in
+ DR_CHAIN at FIRST_VEC_INDX and SECOND_VEC_INDX for the first copy and
+@@ -2453,14 +2786,14 @@
+ tree vectype;
+ int i;
+ slp_tree loads_node;
++ slp_void_p child;
+
+ if (!node)
+ return false;
+
+- vect_schedule_slp_instance (SLP_TREE_LEFT (node), instance,
+- vectorization_factor);
+- vect_schedule_slp_instance (SLP_TREE_RIGHT (node), instance,
+- vectorization_factor);
++ FOR_EACH_VEC_ELT (slp_void_p, SLP_TREE_CHILDREN (node), i, child)
++ vect_schedule_slp_instance ((slp_tree) child, instance,
++ vectorization_factor);
+
+ stmt = VEC_index (gimple, SLP_TREE_SCALAR_STMTS (node), 0);
+ stmt_info = vinfo_for_stmt (stmt);
+@@ -2507,8 +2840,11 @@
+ /* Loads should be inserted before the first load. */
+ if (SLP_INSTANCE_FIRST_LOAD_STMT (instance)
+ && STMT_VINFO_STRIDED_ACCESS (stmt_info)
+- && !REFERENCE_CLASS_P (gimple_get_lhs (stmt)))
++ && !REFERENCE_CLASS_P (gimple_get_lhs (stmt))
++ && SLP_INSTANCE_LOAD_PERMUTATION (instance))
+ si = gsi_for_stmt (SLP_INSTANCE_FIRST_LOAD_STMT (instance));
++ else if (is_pattern_stmt_p (stmt_info))
++ si = gsi_for_stmt (STMT_VINFO_RELATED_STMT (stmt_info));
+ else
+ si = gsi_for_stmt (stmt);
+
+--- a/src/gcc/tree-vect-stmts.c
++++ b/src/gcc/tree-vect-stmts.c
+@@ -42,6 +42,82 @@
+ #include "langhooks.h"
+
+
++/* Return a variable of type ELEM_TYPE[NELEMS]. */
++
++static tree
++create_vector_array (tree elem_type, unsigned HOST_WIDE_INT nelems)
++{
++ return create_tmp_var (build_array_type_nelts (elem_type, nelems),
++ "vect_array");
++}
++
++/* ARRAY is an array of vectors created by create_vector_array.
++ Return an SSA_NAME for the vector in index N. The reference
++ is part of the vectorization of STMT and the vector is associated
++ with scalar destination SCALAR_DEST. */
++
++static tree
++read_vector_array (gimple stmt, gimple_stmt_iterator *gsi, tree scalar_dest,
++ tree array, unsigned HOST_WIDE_INT n)
++{
++ tree vect_type, vect, vect_name, array_ref;
++ gimple new_stmt;
++
++ gcc_assert (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE);
++ vect_type = TREE_TYPE (TREE_TYPE (array));
++ vect = vect_create_destination_var (scalar_dest, vect_type);
++ array_ref = build4 (ARRAY_REF, vect_type, array,
++ build_int_cst (size_type_node, n),
++ NULL_TREE, NULL_TREE);
++
++ new_stmt = gimple_build_assign (vect, array_ref);
++ vect_name = make_ssa_name (vect, new_stmt);
++ gimple_assign_set_lhs (new_stmt, vect_name);
++ vect_finish_stmt_generation (stmt, new_stmt, gsi);
++ mark_symbols_for_renaming (new_stmt);
++
++ return vect_name;
++}
++
++/* ARRAY is an array of vectors created by create_vector_array.
++ Emit code to store SSA_NAME VECT in index N of the array.
++ The store is part of the vectorization of STMT. */
++
++static void
++write_vector_array (gimple stmt, gimple_stmt_iterator *gsi, tree vect,
++ tree array, unsigned HOST_WIDE_INT n)
++{
++ tree array_ref;
++ gimple new_stmt;
++
++ array_ref = build4 (ARRAY_REF, TREE_TYPE (vect), array,
++ build_int_cst (size_type_node, n),
++ NULL_TREE, NULL_TREE);
++
++ new_stmt = gimple_build_assign (array_ref, vect);
++ vect_finish_stmt_generation (stmt, new_stmt, gsi);
++ mark_symbols_for_renaming (new_stmt);
++}
++
++/* PTR is a pointer to an array of type TYPE. Return a representation
++ of *PTR. The memory reference replaces those in FIRST_DR
++ (and its group). */
++
++static tree
++create_array_ref (tree type, tree ptr, struct data_reference *first_dr)
++{
++ struct ptr_info_def *pi;
++ tree mem_ref, alias_ptr_type;
++
++ alias_ptr_type = reference_alias_ptr_type (DR_REF (first_dr));
++ mem_ref = build2 (MEM_REF, type, ptr, build_int_cst (alias_ptr_type, 0));
++ /* Arrays have the same alignment as their type. */
++ pi = get_ptr_info (ptr);
++ pi->align = TYPE_ALIGN_UNIT (type);
++ pi->misalign = 0;
++ return mem_ref;
++}
++
+ /* Utility functions used by vect_mark_stmts_to_be_vectorized. */
+
+ /* Function vect_mark_relevant.
+@@ -50,33 +126,72 @@
+
+ static void
+ vect_mark_relevant (VEC(gimple,heap) **worklist, gimple stmt,
+- enum vect_relevant relevant, bool live_p)
++ enum vect_relevant relevant, bool live_p,
++ bool used_in_pattern)
+ {
+ stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
+ enum vect_relevant save_relevant = STMT_VINFO_RELEVANT (stmt_info);
+ bool save_live_p = STMT_VINFO_LIVE_P (stmt_info);
++ gimple pattern_stmt;
+
+ if (vect_print_dump_info (REPORT_DETAILS))
+ fprintf (vect_dump, "mark relevant %d, live %d.", relevant, live_p);
+
++ /* If this stmt is an original stmt in a pattern, we might need to mark its
++ related pattern stmt instead of the original stmt. However, such stmts
++ may have their own uses that are not in any pattern, in such cases the
++ stmt itself should be marked. */
+ if (STMT_VINFO_IN_PATTERN_P (stmt_info))
+ {
+- gimple pattern_stmt;
++ bool found = false;
++ if (!used_in_pattern)
++ {
++ imm_use_iterator imm_iter;
++ use_operand_p use_p;
++ gimple use_stmt;
++ tree lhs;
++
++ if (is_gimple_assign (stmt))
++ lhs = gimple_assign_lhs (stmt);
++ else
++ lhs = gimple_call_lhs (stmt);
++
++ /* This use is out of pattern use, if LHS has other uses that are
++ pattern uses, we should mark the stmt itself, and not the pattern
++ stmt. */
++ FOR_EACH_IMM_USE_FAST (use_p, imm_iter, lhs)
++ {
++ if (is_gimple_debug (USE_STMT (use_p)))
++ continue;
++ use_stmt = USE_STMT (use_p);
++
++ if (vinfo_for_stmt (use_stmt)
++ && STMT_VINFO_IN_PATTERN_P (vinfo_for_stmt (use_stmt)))
++ {
++ found = true;
++ break;
++ }
++ }
++ }
++
++ if (!found)
++ {
++ /* This is the last stmt in a sequence that was detected as a
++ pattern that can potentially be vectorized. Don't mark the stmt
++ as relevant/live because it's not going to be vectorized.
++ Instead mark the pattern-stmt that replaces it. */
++
++ pattern_stmt = STMT_VINFO_RELATED_STMT (stmt_info);
+
+- /* This is the last stmt in a sequence that was detected as a
+- pattern that can potentially be vectorized. Don't mark the stmt
+- as relevant/live because it's not going to be vectorized.
+- Instead mark the pattern-stmt that replaces it. */
+-
+- pattern_stmt = STMT_VINFO_RELATED_STMT (stmt_info);
+-
+- if (vect_print_dump_info (REPORT_DETAILS))
+- fprintf (vect_dump, "last stmt in pattern. don't mark relevant/live.");
+- stmt_info = vinfo_for_stmt (pattern_stmt);
+- gcc_assert (STMT_VINFO_RELATED_STMT (stmt_info) == stmt);
+- save_relevant = STMT_VINFO_RELEVANT (stmt_info);
+- save_live_p = STMT_VINFO_LIVE_P (stmt_info);
+- stmt = pattern_stmt;
++ if (vect_print_dump_info (REPORT_DETAILS))
++ fprintf (vect_dump, "last stmt in pattern. don't mark"
++ " relevant/live.");
++ stmt_info = vinfo_for_stmt (pattern_stmt);
++ gcc_assert (STMT_VINFO_RELATED_STMT (stmt_info) == stmt);
++ save_relevant = STMT_VINFO_RELEVANT (stmt_info);
++ save_live_p = STMT_VINFO_LIVE_P (stmt_info);
++ stmt = pattern_stmt;
++ }
+ }
+
+ STMT_VINFO_LIVE_P (stmt_info) |= live_p;
+@@ -361,7 +476,8 @@
+ }
+ }
+
+- vect_mark_relevant (worklist, def_stmt, relevant, live_p);
++ vect_mark_relevant (worklist, def_stmt, relevant, live_p,
++ is_pattern_stmt_p (stmt_vinfo));
+ return true;
+ }
+
+@@ -418,7 +534,7 @@
+ }
+
+ if (vect_stmt_relevant_p (phi, loop_vinfo, &relevant, &live_p))
+- vect_mark_relevant (&worklist, phi, relevant, live_p);
++ vect_mark_relevant (&worklist, phi, relevant, live_p, false);
+ }
+ for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
+ {
+@@ -430,7 +546,7 @@
+ }
+
+ if (vect_stmt_relevant_p (stmt, loop_vinfo, &relevant, &live_p))
+- vect_mark_relevant (&worklist, stmt, relevant, live_p);
++ vect_mark_relevant (&worklist, stmt, relevant, live_p, false);
+ }
+ }
+
+@@ -529,15 +645,109 @@
+ break;
+ }
+
+- FOR_EACH_PHI_OR_STMT_USE (use_p, stmt, iter, SSA_OP_USE)
+- {
+- tree op = USE_FROM_PTR (use_p);
+- if (!process_use (stmt, op, loop_vinfo, live_p, relevant, &worklist))
+- {
+- VEC_free (gimple, heap, worklist);
+- return false;
+- }
+- }
++ if (is_pattern_stmt_p (vinfo_for_stmt (stmt)))
++ {
++ /* Pattern statements are not inserted into the code, so
++ FOR_EACH_PHI_OR_STMT_USE optimizes their operands out, and we
++ have to scan the RHS or function arguments instead. */
++ if (is_gimple_assign (stmt))
++ {
++ tree rhs = gimple_assign_rhs1 (stmt);
++ unsigned int op_num;
++ tree op;
++ enum tree_code rhs_code;
++ switch (get_gimple_rhs_class (gimple_assign_rhs_code (stmt)))
++ {
++ case GIMPLE_SINGLE_RHS:
++ op = gimple_assign_rhs1 (stmt);
++ rhs_code = gimple_assign_rhs_code (stmt);
++ i = 0;
++ if (rhs_code == COND_EXPR
++ && COMPARISON_CLASS_P (TREE_OPERAND (op, 0)))
++ {
++ op = TREE_OPERAND (op, 0);
++ if (!process_use (stmt, TREE_OPERAND (op, 0),
++ loop_vinfo,
++ live_p, relevant, &worklist)
++ || !process_use (stmt, TREE_OPERAND (op, 1),
++ loop_vinfo,
++ live_p, relevant, &worklist))
++ {
++ VEC_free (gimple, heap, worklist);
++ return false;
++ }
++ i = 1;
++ }
++ op_num = TREE_OPERAND_LENGTH (gimple_assign_rhs1 (stmt));
++ for (i; i < op_num; i++)
++ {
++ op = TREE_OPERAND (rhs, i);
++ if (!process_use (stmt, op, loop_vinfo, live_p, relevant,
++ &worklist))
++ {
++ VEC_free (gimple, heap, worklist);
++ return false;
++ }
++ }
++ break;
++
++ case GIMPLE_BINARY_RHS:
++ op = gimple_assign_rhs1 (stmt);
++ if (!process_use (stmt, op, loop_vinfo, live_p, relevant,
++ &worklist))
++ {
++ VEC_free (gimple, heap, worklist);
++ return false;
++ }
++ op = gimple_assign_rhs2 (stmt);
++ if (!process_use (stmt, op, loop_vinfo, live_p, relevant,
++ &worklist))
++ {
++ VEC_free (gimple, heap, worklist);
++ return false;
++ }
++ break;
++
++ case GIMPLE_UNARY_RHS:
++ op = gimple_assign_rhs1 (stmt);
++ if (!process_use (stmt, op, loop_vinfo, live_p, relevant,
++ &worklist))
++ {
++ VEC_free (gimple, heap, worklist);
++ return false;
++ }
++
++ break;
++
++ default:
++ return false;
++ }
++ }
++ else if (is_gimple_call (stmt))
++ {
++ for (i = 0; i < gimple_call_num_args (stmt); i++)
++ {
++ tree arg = gimple_call_arg (stmt, i);
++ if (!process_use (stmt, arg, loop_vinfo, live_p, relevant,
++ &worklist))
++ {
++ VEC_free (gimple, heap, worklist);
++ return false;
++ }
++ }
++ }
++ }
++ else
++ FOR_EACH_PHI_OR_STMT_USE (use_p, stmt, iter, SSA_OP_USE)
++ {
++ tree op = USE_FROM_PTR (use_p);
++ if (!process_use (stmt, op, loop_vinfo, live_p, relevant,
++ &worklist))
++ {
++ VEC_free (gimple, heap, worklist);
++ return false;
++ }
++ }
+ } /* while worklist */
+
+ VEC_free (gimple, heap, worklist);
+@@ -648,7 +858,8 @@
+
+ void
+ vect_model_store_cost (stmt_vec_info stmt_info, int ncopies,
+- enum vect_def_type dt, slp_tree slp_node)
++ bool store_lanes_p, enum vect_def_type dt,
++ slp_tree slp_node)
+ {
+ int group_size;
+ unsigned int inside_cost = 0, outside_cost = 0;
+@@ -685,9 +896,11 @@
+ first_dr = STMT_VINFO_DATA_REF (stmt_info);
+ }
+
+- /* Is this an access in a group of stores, which provide strided access?
+- If so, add in the cost of the permutes. */
+- if (group_size > 1)
++ /* We assume that the cost of a single store-lanes instruction is
++ equivalent to the cost of GROUP_SIZE separate stores. If a strided
++ access is instead being provided by a permute-and-store operation,
++ include the cost of the permutes. */
++ if (!store_lanes_p && group_size > 1)
+ {
+ /* Uses a high and low interleave operation for each needed permute. */
+ inside_cost = ncopies * exact_log2(group_size) * group_size
+@@ -763,8 +976,8 @@
+ access scheme chosen. */
+
+ void
+-vect_model_load_cost (stmt_vec_info stmt_info, int ncopies, slp_tree slp_node)
+-
++vect_model_load_cost (stmt_vec_info stmt_info, int ncopies, bool load_lanes_p,
++ slp_tree slp_node)
+ {
+ int group_size;
+ gimple first_stmt;
+@@ -789,9 +1002,11 @@
+ first_dr = dr;
+ }
+
+- /* Is this an access in a group of loads providing strided access?
+- If so, add in the cost of the permutes. */
+- if (group_size > 1)
++ /* We assume that the cost of a single load-lanes instruction is
++ equivalent to the cost of GROUP_SIZE separate loads. If a strided
++ access is instead being provided by a load-and-permute operation,
++ include the cost of the permutes. */
++ if (!load_lanes_p && group_size > 1)
+ {
+ /* Uses an even and odd extract operations for each needed permute. */
+ inside_cost = ncopies * exact_log2(group_size) * group_size
+@@ -1068,7 +1283,14 @@
+
+ /* Get the def from the vectorized stmt. */
+ def_stmt_info = vinfo_for_stmt (def_stmt);
++
+ vec_stmt = STMT_VINFO_VEC_STMT (def_stmt_info);
++ /* Get vectorized pattern statement. */
++ if (!vec_stmt
++ && STMT_VINFO_IN_PATTERN_P (def_stmt_info)
++ && !STMT_VINFO_RELEVANT (def_stmt_info))
++ vec_stmt = STMT_VINFO_VEC_STMT (vinfo_for_stmt (
++ STMT_VINFO_RELATED_STMT (def_stmt_info)));
+ gcc_assert (vec_stmt);
+ if (gimple_code (vec_stmt) == GIMPLE_PHI)
+ vec_oprnd = PHI_RESULT (vec_stmt);
+@@ -1217,16 +1439,35 @@
+ }
+
+
+-/* Get vectorized definitions for OP0 and OP1, or SLP_NODE if it is not
+- NULL. */
++/* Get vectorized definitions for OP0 and OP1.
++ REDUC_INDEX is the index of reduction operand in case of reduction,
++ and -1 otherwise. */
+
+-static void
++void
+ vect_get_vec_defs (tree op0, tree op1, gimple stmt,
+- VEC(tree,heap) **vec_oprnds0, VEC(tree,heap) **vec_oprnds1,
+- slp_tree slp_node)
++ VEC (tree, heap) **vec_oprnds0,
++ VEC (tree, heap) **vec_oprnds1,
++ slp_tree slp_node, int reduc_index)
+ {
+ if (slp_node)
+- vect_get_slp_defs (op0, op1, slp_node, vec_oprnds0, vec_oprnds1, -1);
++ {
++ int nops = (op1 == NULL_TREE) ? 1 : 2;
++ VEC (tree, heap) *ops = VEC_alloc (tree, heap, nops);
++ VEC (slp_void_p, heap) *vec_defs = VEC_alloc (slp_void_p, heap, nops);
++
++ VEC_quick_push (tree, ops, op0);
++ if (op1)
++ VEC_quick_push (tree, ops, op1);
++
++ vect_get_slp_defs (ops, slp_node, &vec_defs, reduc_index);
++
++ *vec_oprnds0 = (VEC (tree, heap) *) VEC_index (slp_void_p, vec_defs, 0);
++ if (op1)
++ *vec_oprnds1 = (VEC (tree, heap) *) VEC_index (slp_void_p, vec_defs, 1);
++
++ VEC_free (tree, heap, ops);
++ VEC_free (slp_void_p, heap, vec_defs);
++ }
+ else
+ {
+ tree vec_oprnd;
+@@ -1324,6 +1565,7 @@
+ VEC(tree, heap) *vargs = NULL;
+ enum { NARROW, NONE, WIDEN } modifier;
+ size_t i, nargs;
++ tree lhs;
+
+ /* FORNOW: unsupported in basic block SLP. */
+ gcc_assert (loop_vinfo);
+@@ -1461,7 +1703,7 @@
+ /** Transform. **/
+
+ if (vect_print_dump_info (REPORT_DETAILS))
+- fprintf (vect_dump, "transform operation.");
++ fprintf (vect_dump, "transform call.");
+
+ /* Handle def. */
+ scalar_dest = gimple_call_lhs (stmt);
+@@ -1580,8 +1822,11 @@
+ rhs of the statement with something harmless. */
+
+ type = TREE_TYPE (scalar_dest);
+- new_stmt = gimple_build_assign (gimple_call_lhs (stmt),
+- build_zero_cst (type));
++ if (is_pattern_stmt_p (stmt_info))
++ lhs = gimple_call_lhs (STMT_VINFO_RELATED_STMT (stmt_info));
++ else
++ lhs = gimple_call_lhs (stmt);
++ new_stmt = gimple_build_assign (lhs, build_zero_cst (type));
+ set_vinfo_for_stmt (new_stmt, stmt_info);
+ /* For pattern statements make the related statement to point to
+ NEW_STMT in order to be able to retrieve the original statement
+@@ -1810,7 +2055,8 @@
+ for (j = 0; j < ncopies; j++)
+ {
+ if (j == 0)
+- vect_get_vec_defs (op0, NULL, stmt, &vec_oprnds0, NULL, slp_node);
++ vect_get_vec_defs (op0, NULL, stmt, &vec_oprnds0, NULL, slp_node,
++ -1);
+ else
+ vect_get_vec_defs_for_stmt_copy (dt, &vec_oprnds0, NULL);
+
+@@ -2015,7 +2261,7 @@
+ {
+ /* Handle uses. */
+ if (j == 0)
+- vect_get_vec_defs (op, NULL, stmt, &vec_oprnds, NULL, slp_node);
++ vect_get_vec_defs (op, NULL, stmt, &vec_oprnds, NULL, slp_node, -1);
+ else
+ vect_get_vec_defs_for_stmt_copy (dt, &vec_oprnds, NULL);
+
+@@ -2048,6 +2294,42 @@
+ }
+
+
++/* Return TRUE if CODE (a shift operation) is supported for SCALAR_TYPE
++ either as shift by a scalar or by a vector. */
++
++bool
++vect_supportable_shift (enum tree_code code, tree scalar_type)
++{
++
++ enum machine_mode vec_mode;
++ optab optab;
++ int icode;
++ tree vectype;
++
++ vectype = get_vectype_for_scalar_type (scalar_type);
++ if (!vectype)
++ return false;
++
++ optab = optab_for_tree_code (code, vectype, optab_scalar);
++ if (!optab
++ || optab_handler (optab, TYPE_MODE (vectype)) == CODE_FOR_nothing)
++ {
++ optab = optab_for_tree_code (code, vectype, optab_vector);
++ if (!optab
++ || (optab_handler (optab, TYPE_MODE (vectype))
++ == CODE_FOR_nothing))
++ return false;
++ }
++
++ vec_mode = TYPE_MODE (vectype);
++ icode = (int) optab_handler (optab, vec_mode);
++ if (icode == CODE_FOR_nothing)
++ return false;
++
++ return true;
++}
++
++
+ /* Function vectorizable_shift.
+
+ Check if STMT performs a shift operation that can be vectorized.
+@@ -2334,10 +2616,10 @@
+ operand 1 should be of a vector type (the usual case). */
+ if (vec_oprnd1)
+ vect_get_vec_defs (op0, NULL_TREE, stmt, &vec_oprnds0, NULL,
+- slp_node);
++ slp_node, -1);
+ else
+ vect_get_vec_defs (op0, op1, stmt, &vec_oprnds0, &vec_oprnds1,
+- slp_node);
++ slp_node, -1);
+ }
+ else
+ vect_get_vec_defs_for_stmt_copy (dt, &vec_oprnds0, &vec_oprnds1);
+@@ -2645,10 +2927,10 @@
+ {
+ if (op_type == binary_op || op_type == ternary_op)
+ vect_get_vec_defs (op0, op1, stmt, &vec_oprnds0, &vec_oprnds1,
+- slp_node);
++ slp_node, -1);
+ else
+ vect_get_vec_defs (op0, NULL_TREE, stmt, &vec_oprnds0, NULL,
+- slp_node);
++ slp_node, -1);
+ if (op_type == ternary_op)
+ {
+ vec_oprnds2 = VEC_alloc (tree, heap, 1);
+@@ -2839,11 +3121,9 @@
+ VEC (tree, heap) *vec_oprnds0 = NULL;
+ VEC (tree, heap) *vec_dsts = NULL, *interm_types = NULL, *tmp_vec_dsts = NULL;
+ tree last_oprnd, intermediate_type;
++ bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (stmt_info);
+
+- /* FORNOW: not supported by basic block SLP vectorization. */
+- gcc_assert (loop_vinfo);
+-
+- if (!STMT_VINFO_RELEVANT_P (stmt_info))
++ if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo)
+ return false;
+
+ if (STMT_VINFO_DEF_TYPE (stmt_info) != vect_internal_def)
+@@ -2871,7 +3151,7 @@
+ && SCALAR_FLOAT_TYPE_P (TREE_TYPE (op0))
+ && CONVERT_EXPR_CODE_P (code))))
+ return false;
+- if (!vect_is_simple_use_1 (op0, loop_vinfo, NULL,
++ if (!vect_is_simple_use_1 (op0, loop_vinfo, bb_vinfo,
+ &def_stmt, &def, &dt[0], &vectype_in))
+ {
+ if (vect_print_dump_info (REPORT_DETAILS))
+@@ -2962,7 +3242,8 @@
+ {
+ /* Handle uses. */
+ if (slp_node)
+- vect_get_slp_defs (op0, NULL_TREE, slp_node, &vec_oprnds0, NULL, -1);
++ vect_get_vec_defs (op0, NULL_TREE, stmt, &vec_oprnds0, NULL,
++ slp_node, -1);
+ else
+ {
+ VEC_free (tree, heap, vec_oprnds0);
+@@ -3118,11 +3399,10 @@
+ int multi_step_cvt = 0;
+ VEC (tree, heap) *vec_oprnds0 = NULL, *vec_oprnds1 = NULL;
+ VEC (tree, heap) *vec_dsts = NULL, *interm_types = NULL, *tmp_vec_dsts = NULL;
++ bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (stmt_info);
++ unsigned int k;
+
+- /* FORNOW: not supported by basic block SLP vectorization. */
+- gcc_assert (loop_vinfo);
+-
+- if (!STMT_VINFO_RELEVANT_P (stmt_info))
++ if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo)
+ return false;
+
+ if (STMT_VINFO_DEF_TYPE (stmt_info) != vect_internal_def)
+@@ -3137,7 +3417,8 @@
+
+ code = gimple_assign_rhs_code (stmt);
+ if (!CONVERT_EXPR_CODE_P (code)
+- && code != WIDEN_MULT_EXPR)
++ && code != WIDEN_MULT_EXPR
++ && code != WIDEN_LSHIFT_EXPR)
+ return false;
+
+ scalar_dest = gimple_assign_lhs (stmt);
+@@ -3151,13 +3432,40 @@
+ && SCALAR_FLOAT_TYPE_P (TREE_TYPE (op0))
+ && CONVERT_EXPR_CODE_P (code))))
+ return false;
+- if (!vect_is_simple_use_1 (op0, loop_vinfo, NULL,
++ if (!vect_is_simple_use_1 (op0, loop_vinfo, bb_vinfo,
+ &def_stmt, &def, &dt[0], &vectype_in))
+ {
+ if (vect_print_dump_info (REPORT_DETAILS))
+ fprintf (vect_dump, "use not simple.");
+ return false;
+ }
++
++ op_type = TREE_CODE_LENGTH (code);
++ if (op_type == binary_op)
++ {
++ bool ok;
++
++ op1 = gimple_assign_rhs2 (stmt);
++ if (code == WIDEN_MULT_EXPR || code == WIDEN_LSHIFT_EXPR)
++ {
++ /* For WIDEN_MULT_EXPR, if OP0 is a constant, use the type of
++ OP1. */
++ if (CONSTANT_CLASS_P (op0))
++ ok = vect_is_simple_use_1 (op1, loop_vinfo, bb_vinfo,
++ &def_stmt, &def, &dt[1], &vectype_in);
++ else
++ ok = vect_is_simple_use (op1, loop_vinfo, bb_vinfo, &def_stmt,
++ &def, &dt[1]);
++
++ if (!ok)
++ {
++ if (vect_print_dump_info (REPORT_DETAILS))
++ fprintf (vect_dump, "use not simple.");
++ return false;
++ }
++ }
++ }
++
+ /* If op0 is an external or constant def use a vector type with
+ the same size as the output vector type. */
+ if (!vectype_in)
+@@ -3190,18 +3498,6 @@
+
+ gcc_assert (ncopies >= 1);
+
+- op_type = TREE_CODE_LENGTH (code);
+- if (op_type == binary_op)
+- {
+- op1 = gimple_assign_rhs2 (stmt);
+- if (!vect_is_simple_use (op1, loop_vinfo, NULL, &def_stmt, &def, &dt[1]))
+- {
+- if (vect_print_dump_info (REPORT_DETAILS))
+- fprintf (vect_dump, "use not simple.");
+- return false;
+- }
+- }
+-
+ /* Supportable by target? */
+ if (!supportable_widening_operation (code, stmt, vectype_out, vectype_in,
+ &decl1, &decl2, &code1, &code2,
+@@ -3227,6 +3523,14 @@
+ fprintf (vect_dump, "transform type promotion operation. ncopies = %d.",
+ ncopies);
+
++ if (code == WIDEN_MULT_EXPR || code == WIDEN_LSHIFT_EXPR)
++ {
++ if (CONSTANT_CLASS_P (op0))
++ op0 = fold_convert (TREE_TYPE (op1), op0);
++ else if (CONSTANT_CLASS_P (op1))
++ op1 = fold_convert (TREE_TYPE (op0), op1);
++ }
++
+ /* Handle def. */
+ /* In case of multi-step promotion, we first generate promotion operations
+ to the intermediate types, and then from that types to the final one.
+@@ -3260,6 +3564,8 @@
+ if (op_type == binary_op)
+ vec_oprnds1 = VEC_alloc (tree, heap, 1);
+ }
++ else if (code == WIDEN_LSHIFT_EXPR)
++ vec_oprnds1 = VEC_alloc (tree, heap, slp_node->vec_stmts_size);
+
+ /* In case the vectorization factor (VF) is bigger than the number
+ of elements that we can fit in a vectype (nunits), we have to generate
+@@ -3273,15 +3579,33 @@
+ if (j == 0)
+ {
+ if (slp_node)
+- vect_get_slp_defs (op0, op1, slp_node, &vec_oprnds0,
+- &vec_oprnds1, -1);
+- else
++ {
++ if (code == WIDEN_LSHIFT_EXPR)
++ {
++ vec_oprnd1 = op1;
++ /* Store vec_oprnd1 for every vector stmt to be created
++ for SLP_NODE. We check during the analysis that all
++ the shift arguments are the same. */
++ for (k = 0; k < slp_node->vec_stmts_size - 1; k++)
++ VEC_quick_push (tree, vec_oprnds1, vec_oprnd1);
++
++ vect_get_vec_defs (op0, NULL_TREE, stmt, &vec_oprnds0, NULL,
++ slp_node, -1);
++ }
++ else
++ vect_get_vec_defs (op0, op1, stmt, &vec_oprnds0,
++ &vec_oprnds1, slp_node, -1);
++ }
++ else
+ {
+ vec_oprnd0 = vect_get_vec_def_for_operand (op0, stmt, NULL);
+ VEC_quick_push (tree, vec_oprnds0, vec_oprnd0);
+ if (op_type == binary_op)
+ {
+- vec_oprnd1 = vect_get_vec_def_for_operand (op1, stmt, NULL);
++ if (code == WIDEN_LSHIFT_EXPR)
++ vec_oprnd1 = op1;
++ else
++ vec_oprnd1 = vect_get_vec_def_for_operand (op1, stmt, NULL);
+ VEC_quick_push (tree, vec_oprnds1, vec_oprnd1);
+ }
+ }
+@@ -3292,7 +3616,10 @@
+ VEC_replace (tree, vec_oprnds0, 0, vec_oprnd0);
+ if (op_type == binary_op)
+ {
+- vec_oprnd1 = vect_get_vec_def_for_stmt_copy (dt[1], vec_oprnd1);
++ if (code == WIDEN_LSHIFT_EXPR)
++ vec_oprnd1 = op1;
++ else
++ vec_oprnd1 = vect_get_vec_def_for_stmt_copy (dt[1], vec_oprnd1);
+ VEC_replace (tree, vec_oprnds1, 0, vec_oprnd1);
+ }
+ }
+@@ -3337,6 +3664,7 @@
+ stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
+ struct data_reference *dr = STMT_VINFO_DATA_REF (stmt_info), *first_dr = NULL;
+ tree vectype = STMT_VINFO_VECTYPE (stmt_info);
++ tree elem_type;
+ loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info);
+ struct loop *loop = NULL;
+ enum machine_mode vec_mode;
+@@ -3352,6 +3680,7 @@
+ int j;
+ gimple next_stmt, first_stmt = NULL;
+ bool strided_store = false;
++ bool store_lanes_p = false;
+ unsigned int group_size, i;
+ VEC(tree,heap) *dr_chain = NULL, *oprnds = NULL, *result_chain = NULL;
+ bool inv_p;
+@@ -3359,6 +3688,7 @@
+ bool slp = (slp_node != NULL);
+ unsigned int vec_num;
+ bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (stmt_info);
++ tree aggr_type;
+
+ if (loop_vinfo)
+ loop = LOOP_VINFO_LOOP (loop_vinfo);
+@@ -3412,7 +3742,8 @@
+
+ /* The scalar rhs type needs to be trivially convertible to the vector
+ component type. This should always be the case. */
+- if (!useless_type_conversion_p (TREE_TYPE (vectype), TREE_TYPE (op)))
++ elem_type = TREE_TYPE (vectype);
++ if (!useless_type_conversion_p (elem_type, TREE_TYPE (op)))
+ {
+ if (vect_print_dump_info (REPORT_DETAILS))
+ fprintf (vect_dump, "??? operands of different types");
+@@ -3439,9 +3770,14 @@
+ {
+ strided_store = true;
+ first_stmt = DR_GROUP_FIRST_DR (stmt_info);
+- if (!vect_strided_store_supported (vectype)
+- && !PURE_SLP_STMT (stmt_info) && !slp)
+- return false;
++ if (!slp && !PURE_SLP_STMT (stmt_info))
++ {
++ group_size = DR_GROUP_SIZE (vinfo_for_stmt (first_stmt));
++ if (vect_store_lanes_supported (vectype, group_size))
++ store_lanes_p = true;
++ else if (!vect_strided_store_supported (vectype, group_size))
++ return false;
++ }
+
+ if (first_stmt == stmt)
+ {
+@@ -3467,7 +3803,7 @@
+ if (!vec_stmt) /* transformation not required. */
+ {
+ STMT_VINFO_TYPE (stmt_info) = store_vec_info_type;
+- vect_model_store_cost (stmt_info, ncopies, dt, NULL);
++ vect_model_store_cost (stmt_info, ncopies, store_lanes_p, dt, NULL);
+ return true;
+ }
+
+@@ -3501,6 +3837,7 @@
+ vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
+ first_stmt = VEC_index (gimple, SLP_TREE_SCALAR_STMTS (slp_node), 0);
+ first_dr = STMT_VINFO_DATA_REF (vinfo_for_stmt (first_stmt));
++ op = gimple_assign_rhs1 (first_stmt);
+ }
+ else
+ /* VEC_NUM is the number of vect stmts to be created for this
+@@ -3522,6 +3859,16 @@
+
+ alignment_support_scheme = vect_supportable_dr_alignment (first_dr, false);
+ gcc_assert (alignment_support_scheme);
++ /* Targets with store-lane instructions must not require explicit
++ realignment. */
++ gcc_assert (!store_lanes_p
++ || alignment_support_scheme == dr_aligned
++ || alignment_support_scheme == dr_unaligned_supported);
++
++ if (store_lanes_p)
++ aggr_type = build_array_type_nelts (elem_type, vec_num * nunits);
++ else
++ aggr_type = vectype;
+
+ /* In case the vectorization factor (VF) is bigger than the number
+ of elements that we can fit in a vectype (nunits), we have to generate
+@@ -3573,8 +3920,8 @@
+ if (slp)
+ {
+ /* Get vectorized arguments for SLP_NODE. */
+- vect_get_slp_defs (NULL_TREE, NULL_TREE, slp_node, &vec_oprnds,
+- NULL, -1);
++ vect_get_vec_defs (op, NULL_TREE, stmt, &vec_oprnds,
++ NULL, slp_node, -1);
+
+ vec_oprnd = VEC_index (tree, vec_oprnds, 0);
+ }
+@@ -3610,9 +3957,9 @@
+ /* We should have catched mismatched types earlier. */
+ gcc_assert (useless_type_conversion_p (vectype,
+ TREE_TYPE (vec_oprnd)));
+- dataref_ptr = vect_create_data_ref_ptr (first_stmt, NULL, NULL_TREE,
+- &dummy, &ptr_incr, false,
+- &inv_p);
++ dataref_ptr = vect_create_data_ref_ptr (first_stmt, aggr_type, NULL,
++ NULL_TREE, &dummy,
++ &ptr_incr, false, &inv_p);
+ gcc_assert (bb_vinfo || !inv_p);
+ }
+ else
+@@ -3633,76 +3980,101 @@
+ VEC_replace(tree, dr_chain, i, vec_oprnd);
+ VEC_replace(tree, oprnds, i, vec_oprnd);
+ }
+- dataref_ptr =
+- bump_vector_ptr (dataref_ptr, ptr_incr, gsi, stmt, NULL_TREE);
+- }
+-
+- if (strided_store)
+- {
+- result_chain = VEC_alloc (tree, heap, group_size);
+- /* Permute. */
+- if (!vect_permute_store_chain (dr_chain, group_size, stmt, gsi,
+- &result_chain))
+- return false;
++ dataref_ptr = bump_vector_ptr (dataref_ptr, ptr_incr, gsi, stmt,
++ TYPE_SIZE_UNIT (aggr_type));
+ }
+
+- next_stmt = first_stmt;
+- for (i = 0; i < vec_num; i++)
++ if (store_lanes_p)
+ {
+- struct ptr_info_def *pi;
++ tree vec_array;
+
+- if (i > 0)
+- /* Bump the vector pointer. */
+- dataref_ptr = bump_vector_ptr (dataref_ptr, ptr_incr, gsi, stmt,
+- NULL_TREE);
+-
+- if (slp)
+- vec_oprnd = VEC_index (tree, vec_oprnds, i);
+- else if (strided_store)
+- /* For strided stores vectorized defs are interleaved in
+- vect_permute_store_chain(). */
+- vec_oprnd = VEC_index (tree, result_chain, i);
+-
+- data_ref = build2 (MEM_REF, TREE_TYPE (vec_oprnd), dataref_ptr,
+- build_int_cst (reference_alias_ptr_type
+- (DR_REF (first_dr)), 0));
+- pi = get_ptr_info (dataref_ptr);
+- pi->align = TYPE_ALIGN_UNIT (vectype);
+- if (aligned_access_p (first_dr))
+- pi->misalign = 0;
+- else if (DR_MISALIGNMENT (first_dr) == -1)
++ /* Combine all the vectors into an array. */
++ vec_array = create_vector_array (vectype, vec_num);
++ for (i = 0; i < vec_num; i++)
+ {
+- TREE_TYPE (data_ref)
+- = build_aligned_type (TREE_TYPE (data_ref),
+- TYPE_ALIGN (TREE_TYPE (vectype)));
+- pi->align = TYPE_ALIGN_UNIT (TREE_TYPE (vectype));
+- pi->misalign = 0;
+- }
+- else
+- {
+- TREE_TYPE (data_ref)
+- = build_aligned_type (TREE_TYPE (data_ref),
+- TYPE_ALIGN (TREE_TYPE (vectype)));
+- pi->misalign = DR_MISALIGNMENT (first_dr);
++ vec_oprnd = VEC_index (tree, dr_chain, i);
++ write_vector_array (stmt, gsi, vec_oprnd, vec_array, i);
+ }
+
+- /* Arguments are ready. Create the new vector stmt. */
+- new_stmt = gimple_build_assign (data_ref, vec_oprnd);
++ /* Emit:
++ MEM_REF[...all elements...] = STORE_LANES (VEC_ARRAY). */
++ data_ref = create_array_ref (aggr_type, dataref_ptr, first_dr);
++ new_stmt = gimple_build_call_internal (IFN_STORE_LANES, 1, vec_array);
++ gimple_call_set_lhs (new_stmt, data_ref);
+ vect_finish_stmt_generation (stmt, new_stmt, gsi);
+ mark_symbols_for_renaming (new_stmt);
++ }
++ else
++ {
++ new_stmt = NULL;
++ if (strided_store)
++ {
++ result_chain = VEC_alloc (tree, heap, group_size);
++ /* Permute. */
++ vect_permute_store_chain (dr_chain, group_size, stmt, gsi,
++ &result_chain);
++ }
+
+- if (slp)
+- continue;
++ next_stmt = first_stmt;
++ for (i = 0; i < vec_num; i++)
++ {
++ struct ptr_info_def *pi;
++
++ if (i > 0)
++ /* Bump the vector pointer. */
++ dataref_ptr = bump_vector_ptr (dataref_ptr, ptr_incr, gsi,
++ stmt, NULL_TREE);
++
++ if (slp)
++ vec_oprnd = VEC_index (tree, vec_oprnds, i);
++ else if (strided_store)
++ /* For strided stores vectorized defs are interleaved in
++ vect_permute_store_chain(). */
++ vec_oprnd = VEC_index (tree, result_chain, i);
++
++ data_ref = build2 (MEM_REF, TREE_TYPE (vec_oprnd), dataref_ptr,
++ build_int_cst (reference_alias_ptr_type
++ (DR_REF (first_dr)), 0));
++ pi = get_ptr_info (dataref_ptr);
++ pi->align = TYPE_ALIGN_UNIT (vectype);
++ if (aligned_access_p (first_dr))
++ pi->misalign = 0;
++ else if (DR_MISALIGNMENT (first_dr) == -1)
++ {
++ TREE_TYPE (data_ref)
++ = build_aligned_type (TREE_TYPE (data_ref),
++ TYPE_ALIGN (elem_type));
++ pi->align = TYPE_ALIGN_UNIT (elem_type);
++ pi->misalign = 0;
++ }
++ else
++ {
++ TREE_TYPE (data_ref)
++ = build_aligned_type (TREE_TYPE (data_ref),
++ TYPE_ALIGN (elem_type));
++ pi->misalign = DR_MISALIGNMENT (first_dr);
++ }
++
++ /* Arguments are ready. Create the new vector stmt. */
++ new_stmt = gimple_build_assign (data_ref, vec_oprnd);
++ vect_finish_stmt_generation (stmt, new_stmt, gsi);
++ mark_symbols_for_renaming (new_stmt);
++
++ if (slp)
++ continue;
+
+- if (j == 0)
+- STMT_VINFO_VEC_STMT (stmt_info) = *vec_stmt = new_stmt;
++ next_stmt = DR_GROUP_NEXT_DR (vinfo_for_stmt (next_stmt));
++ if (!next_stmt)
++ break;
++ }
++ }
++ if (!slp)
++ {
++ if (j == 0)
++ STMT_VINFO_VEC_STMT (stmt_info) = *vec_stmt = new_stmt;
+ else
+ STMT_VINFO_RELATED_STMT (prev_stmt_info) = new_stmt;
+-
+ prev_stmt_info = vinfo_for_stmt (new_stmt);
+- next_stmt = DR_GROUP_NEXT_DR (vinfo_for_stmt (next_stmt));
+- if (!next_stmt)
+- break;
+ }
+ }
+
+@@ -3813,6 +4185,7 @@
+ bool nested_in_vect_loop = false;
+ struct data_reference *dr = STMT_VINFO_DATA_REF (stmt_info), *first_dr;
+ tree vectype = STMT_VINFO_VECTYPE (stmt_info);
++ tree elem_type;
+ tree new_temp;
+ enum machine_mode mode;
+ gimple new_stmt = NULL;
+@@ -3829,6 +4202,7 @@
+ gimple phi = NULL;
+ VEC(tree,heap) *dr_chain = NULL;
+ bool strided_load = false;
++ bool load_lanes_p = false;
+ gimple first_stmt;
+ tree scalar_type;
+ bool inv_p;
+@@ -3841,6 +4215,7 @@
+ enum tree_code code;
+ bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (stmt_info);
+ int vf;
++ tree aggr_type;
+
+ if (loop_vinfo)
+ {
+@@ -3917,7 +4292,8 @@
+
+ /* The vector component type needs to be trivially convertible to the
+ scalar lhs. This should always be the case. */
+- if (!useless_type_conversion_p (TREE_TYPE (scalar_dest), TREE_TYPE (vectype)))
++ elem_type = TREE_TYPE (vectype);
++ if (!useless_type_conversion_p (TREE_TYPE (scalar_dest), elem_type))
+ {
+ if (vect_print_dump_info (REPORT_DETAILS))
+ fprintf (vect_dump, "??? operands of different types");
+@@ -3931,10 +4307,15 @@
+ /* FORNOW */
+ gcc_assert (! nested_in_vect_loop);
+
+- /* Check if interleaving is supported. */
+- if (!vect_strided_load_supported (vectype)
+- && !PURE_SLP_STMT (stmt_info) && !slp)
+- return false;
++ first_stmt = DR_GROUP_FIRST_DR (stmt_info);
++ if (!slp && !PURE_SLP_STMT (stmt_info))
++ {
++ group_size = DR_GROUP_SIZE (vinfo_for_stmt (first_stmt));
++ if (vect_load_lanes_supported (vectype, group_size))
++ load_lanes_p = true;
++ else if (!vect_strided_load_supported (vectype, group_size))
++ return false;
++ }
+ }
+
+ if (negative)
+@@ -3959,18 +4340,23 @@
+ if (!vec_stmt) /* transformation not required. */
+ {
+ STMT_VINFO_TYPE (stmt_info) = load_vec_info_type;
+- vect_model_load_cost (stmt_info, ncopies, NULL);
++ vect_model_load_cost (stmt_info, ncopies, load_lanes_p, NULL);
+ return true;
+ }
+
+ if (vect_print_dump_info (REPORT_DETAILS))
+- fprintf (vect_dump, "transform load.");
++ fprintf (vect_dump, "transform load. ncopies = %d", ncopies);
+
+ /** Transform. **/
+
+ if (strided_load)
+ {
+ first_stmt = DR_GROUP_FIRST_DR (stmt_info);
++ if (slp
++ && !SLP_INSTANCE_LOAD_PERMUTATION (slp_node_instance)
++ && first_stmt != VEC_index (gimple, SLP_TREE_SCALAR_STMTS (slp_node), 0))
++ first_stmt = VEC_index (gimple, SLP_TREE_SCALAR_STMTS (slp_node), 0);
++
+ /* Check if the chain of loads is already vectorized. */
+ if (STMT_VINFO_VEC_STMT (vinfo_for_stmt (first_stmt)))
+ {
+@@ -3990,8 +4376,6 @@
+ }
+ else
+ vec_num = group_size;
+-
+- dr_chain = VEC_alloc (tree, heap, vec_num);
+ }
+ else
+ {
+@@ -4002,6 +4386,11 @@
+
+ alignment_support_scheme = vect_supportable_dr_alignment (first_dr, false);
+ gcc_assert (alignment_support_scheme);
++ /* Targets with load-lane instructions must not require explicit
++ realignment. */
++ gcc_assert (!load_lanes_p
++ || alignment_support_scheme == dr_aligned
++ || alignment_support_scheme == dr_unaligned_supported);
+
+ /* In case the vectorization factor (VF) is bigger than the number
+ of elements that we can fit in a vectype (nunits), we have to generate
+@@ -4133,208 +4522,252 @@
+ if (negative)
+ offset = size_int (-TYPE_VECTOR_SUBPARTS (vectype) + 1);
+
++ if (load_lanes_p)
++ aggr_type = build_array_type_nelts (elem_type, vec_num * nunits);
++ else
++ aggr_type = vectype;
++
+ prev_stmt_info = NULL;
+ for (j = 0; j < ncopies; j++)
+ {
+ /* 1. Create the vector pointer update chain. */
+ if (j == 0)
+- dataref_ptr = vect_create_data_ref_ptr (first_stmt,
++ dataref_ptr = vect_create_data_ref_ptr (first_stmt, aggr_type,
+ at_loop, offset,
+ &dummy, &ptr_incr, false,
+ &inv_p);
+ else
+- dataref_ptr =
+- bump_vector_ptr (dataref_ptr, ptr_incr, gsi, stmt, NULL_TREE);
++ dataref_ptr = bump_vector_ptr (dataref_ptr, ptr_incr, gsi, stmt,
++ TYPE_SIZE_UNIT (aggr_type));
++
++ if (strided_load || slp_perm)
++ dr_chain = VEC_alloc (tree, heap, vec_num);
+
+- for (i = 0; i < vec_num; i++)
++ if (load_lanes_p)
+ {
+- if (i > 0)
+- dataref_ptr = bump_vector_ptr (dataref_ptr, ptr_incr, gsi, stmt,
+- NULL_TREE);
++ tree vec_array;
+
+- /* 2. Create the vector-load in the loop. */
+- switch (alignment_support_scheme)
+- {
+- case dr_aligned:
+- case dr_unaligned_supported:
+- {
+- struct ptr_info_def *pi;
+- data_ref
+- = build2 (MEM_REF, vectype, dataref_ptr,
+- build_int_cst (reference_alias_ptr_type
+- (DR_REF (first_dr)), 0));
+- pi = get_ptr_info (dataref_ptr);
+- pi->align = TYPE_ALIGN_UNIT (vectype);
+- if (alignment_support_scheme == dr_aligned)
+- {
+- gcc_assert (aligned_access_p (first_dr));
+- pi->misalign = 0;
+- }
+- else if (DR_MISALIGNMENT (first_dr) == -1)
+- {
+- TREE_TYPE (data_ref)
+- = build_aligned_type (TREE_TYPE (data_ref),
+- TYPE_ALIGN (TREE_TYPE (vectype)));
+- pi->align = TYPE_ALIGN_UNIT (TREE_TYPE (vectype));
+- pi->misalign = 0;
+- }
+- else
+- {
+- TREE_TYPE (data_ref)
+- = build_aligned_type (TREE_TYPE (data_ref),
+- TYPE_ALIGN (TREE_TYPE (vectype)));
+- pi->misalign = DR_MISALIGNMENT (first_dr);
+- }
+- break;
+- }
+- case dr_explicit_realign:
+- {
+- tree ptr, bump;
+- tree vs_minus_1 = size_int (TYPE_VECTOR_SUBPARTS (vectype) - 1);
++ vec_array = create_vector_array (vectype, vec_num);
+
+- if (compute_in_loop)
+- msq = vect_setup_realignment (first_stmt, gsi,
+- &realignment_token,
+- dr_explicit_realign,
+- dataref_ptr, NULL);
+-
+- new_stmt = gimple_build_assign_with_ops
+- (BIT_AND_EXPR, NULL_TREE, dataref_ptr,
+- build_int_cst
+- (TREE_TYPE (dataref_ptr),
+- -(HOST_WIDE_INT)TYPE_ALIGN_UNIT (vectype)));
+- ptr = make_ssa_name (SSA_NAME_VAR (dataref_ptr), new_stmt);
+- gimple_assign_set_lhs (new_stmt, ptr);
+- vect_finish_stmt_generation (stmt, new_stmt, gsi);
+- data_ref
+- = build2 (MEM_REF, vectype, ptr,
+- build_int_cst (reference_alias_ptr_type
+- (DR_REF (first_dr)), 0));
+- vec_dest = vect_create_destination_var (scalar_dest, vectype);
+- new_stmt = gimple_build_assign (vec_dest, data_ref);
+- new_temp = make_ssa_name (vec_dest, new_stmt);
+- gimple_assign_set_lhs (new_stmt, new_temp);
+- gimple_set_vdef (new_stmt, gimple_vdef (stmt));
+- gimple_set_vuse (new_stmt, gimple_vuse (stmt));
+- vect_finish_stmt_generation (stmt, new_stmt, gsi);
+- msq = new_temp;
+-
+- bump = size_binop (MULT_EXPR, vs_minus_1,
+- TYPE_SIZE_UNIT (scalar_type));
+- ptr = bump_vector_ptr (dataref_ptr, NULL, gsi, stmt, bump);
+- new_stmt = gimple_build_assign_with_ops
+- (BIT_AND_EXPR, NULL_TREE, ptr,
+- build_int_cst
+- (TREE_TYPE (ptr),
+- -(HOST_WIDE_INT)TYPE_ALIGN_UNIT (vectype)));
+- ptr = make_ssa_name (SSA_NAME_VAR (dataref_ptr), new_stmt);
+- gimple_assign_set_lhs (new_stmt, ptr);
+- vect_finish_stmt_generation (stmt, new_stmt, gsi);
+- data_ref
+- = build2 (MEM_REF, vectype, ptr,
+- build_int_cst (reference_alias_ptr_type
+- (DR_REF (first_dr)), 0));
+- break;
+- }
+- case dr_explicit_realign_optimized:
+- new_stmt = gimple_build_assign_with_ops
+- (BIT_AND_EXPR, NULL_TREE, dataref_ptr,
+- build_int_cst
+- (TREE_TYPE (dataref_ptr),
+- -(HOST_WIDE_INT)TYPE_ALIGN_UNIT (vectype)));
+- new_temp = make_ssa_name (SSA_NAME_VAR (dataref_ptr), new_stmt);
+- gimple_assign_set_lhs (new_stmt, new_temp);
+- vect_finish_stmt_generation (stmt, new_stmt, gsi);
+- data_ref
+- = build2 (MEM_REF, vectype, new_temp,
+- build_int_cst (reference_alias_ptr_type
+- (DR_REF (first_dr)), 0));
+- break;
+- default:
+- gcc_unreachable ();
+- }
+- vec_dest = vect_create_destination_var (scalar_dest, vectype);
+- new_stmt = gimple_build_assign (vec_dest, data_ref);
+- new_temp = make_ssa_name (vec_dest, new_stmt);
+- gimple_assign_set_lhs (new_stmt, new_temp);
++ /* Emit:
++ VEC_ARRAY = LOAD_LANES (MEM_REF[...all elements...]). */
++ data_ref = create_array_ref (aggr_type, dataref_ptr, first_dr);
++ new_stmt = gimple_build_call_internal (IFN_LOAD_LANES, 1, data_ref);
++ gimple_call_set_lhs (new_stmt, vec_array);
+ vect_finish_stmt_generation (stmt, new_stmt, gsi);
+ mark_symbols_for_renaming (new_stmt);
+
+- /* 3. Handle explicit realignment if necessary/supported. Create in
+- loop: vec_dest = realign_load (msq, lsq, realignment_token) */
+- if (alignment_support_scheme == dr_explicit_realign_optimized
+- || alignment_support_scheme == dr_explicit_realign)
++ /* Extract each vector into an SSA_NAME. */
++ for (i = 0; i < vec_num; i++)
++ {
++ new_temp = read_vector_array (stmt, gsi, scalar_dest,
++ vec_array, i);
++ VEC_quick_push (tree, dr_chain, new_temp);
++ }
++
++ /* Record the mapping between SSA_NAMEs and statements. */
++ vect_record_strided_load_vectors (stmt, dr_chain);
++ }
++ else
++ {
++ for (i = 0; i < vec_num; i++)
+ {
+- tree tmp;
++ if (i > 0)
++ dataref_ptr = bump_vector_ptr (dataref_ptr, ptr_incr, gsi,
++ stmt, NULL_TREE);
+
+- lsq = gimple_assign_lhs (new_stmt);
+- if (!realignment_token)
+- realignment_token = dataref_ptr;
++ /* 2. Create the vector-load in the loop. */
++ switch (alignment_support_scheme)
++ {
++ case dr_aligned:
++ case dr_unaligned_supported:
++ {
++ struct ptr_info_def *pi;
++ data_ref
++ = build2 (MEM_REF, vectype, dataref_ptr,
++ build_int_cst (reference_alias_ptr_type
++ (DR_REF (first_dr)), 0));
++ pi = get_ptr_info (dataref_ptr);
++ pi->align = TYPE_ALIGN_UNIT (vectype);
++ if (alignment_support_scheme == dr_aligned)
++ {
++ gcc_assert (aligned_access_p (first_dr));
++ pi->misalign = 0;
++ }
++ else if (DR_MISALIGNMENT (first_dr) == -1)
++ {
++ TREE_TYPE (data_ref)
++ = build_aligned_type (TREE_TYPE (data_ref),
++ TYPE_ALIGN (elem_type));
++ pi->align = TYPE_ALIGN_UNIT (elem_type);
++ pi->misalign = 0;
++ }
++ else
++ {
++ TREE_TYPE (data_ref)
++ = build_aligned_type (TREE_TYPE (data_ref),
++ TYPE_ALIGN (elem_type));
++ pi->misalign = DR_MISALIGNMENT (first_dr);
++ }
++ break;
++ }
++ case dr_explicit_realign:
++ {
++ tree ptr, bump;
++ tree vs_minus_1
++ = size_int (TYPE_VECTOR_SUBPARTS (vectype) - 1);
++
++ if (compute_in_loop)
++ msq = vect_setup_realignment (first_stmt, gsi,
++ &realignment_token,
++ dr_explicit_realign,
++ dataref_ptr, NULL);
++
++ new_stmt = gimple_build_assign_with_ops
++ (BIT_AND_EXPR, NULL_TREE, dataref_ptr,
++ build_int_cst
++ (TREE_TYPE (dataref_ptr),
++ -(HOST_WIDE_INT)
++ TYPE_ALIGN_UNIT (vectype)));
++ ptr = make_ssa_name (SSA_NAME_VAR (dataref_ptr), new_stmt);
++ gimple_assign_set_lhs (new_stmt, ptr);
++ vect_finish_stmt_generation (stmt, new_stmt, gsi);
++ data_ref
++ = build2 (MEM_REF, vectype, ptr,
++ build_int_cst (reference_alias_ptr_type
++ (DR_REF (first_dr)), 0));
++ vec_dest = vect_create_destination_var (scalar_dest,
++ vectype);
++ new_stmt = gimple_build_assign (vec_dest, data_ref);
++ new_temp = make_ssa_name (vec_dest, new_stmt);
++ gimple_assign_set_lhs (new_stmt, new_temp);
++ gimple_set_vdef (new_stmt, gimple_vdef (stmt));
++ gimple_set_vuse (new_stmt, gimple_vuse (stmt));
++ vect_finish_stmt_generation (stmt, new_stmt, gsi);
++ msq = new_temp;
++
++ bump = size_binop (MULT_EXPR, vs_minus_1,
++ TYPE_SIZE_UNIT (scalar_type));
++ ptr = bump_vector_ptr (dataref_ptr, NULL, gsi, stmt, bump);
++ new_stmt = gimple_build_assign_with_ops
++ (BIT_AND_EXPR, NULL_TREE, ptr,
++ build_int_cst
++ (TREE_TYPE (ptr),
++ -(HOST_WIDE_INT)
++ TYPE_ALIGN_UNIT (vectype)));
++ ptr = make_ssa_name (SSA_NAME_VAR (dataref_ptr), new_stmt);
++ gimple_assign_set_lhs (new_stmt, ptr);
++ vect_finish_stmt_generation (stmt, new_stmt, gsi);
++ data_ref
++ = build2 (MEM_REF, vectype, ptr,
++ build_int_cst (reference_alias_ptr_type
++ (DR_REF (first_dr)), 0));
++ break;
++ }
++ case dr_explicit_realign_optimized:
++ new_stmt = gimple_build_assign_with_ops
++ (BIT_AND_EXPR, NULL_TREE, dataref_ptr,
++ build_int_cst
++ (TREE_TYPE (dataref_ptr),
++ -(HOST_WIDE_INT)TYPE_ALIGN_UNIT (vectype)));
++ new_temp = make_ssa_name (SSA_NAME_VAR (dataref_ptr),
++ new_stmt);
++ gimple_assign_set_lhs (new_stmt, new_temp);
++ vect_finish_stmt_generation (stmt, new_stmt, gsi);
++ data_ref
++ = build2 (MEM_REF, vectype, new_temp,
++ build_int_cst (reference_alias_ptr_type
++ (DR_REF (first_dr)), 0));
++ break;
++ default:
++ gcc_unreachable ();
++ }
+ vec_dest = vect_create_destination_var (scalar_dest, vectype);
+- tmp = build3 (REALIGN_LOAD_EXPR, vectype, msq, lsq,
+- realignment_token);
+- new_stmt = gimple_build_assign (vec_dest, tmp);
++ new_stmt = gimple_build_assign (vec_dest, data_ref);
+ new_temp = make_ssa_name (vec_dest, new_stmt);
+ gimple_assign_set_lhs (new_stmt, new_temp);
+ vect_finish_stmt_generation (stmt, new_stmt, gsi);
++ mark_symbols_for_renaming (new_stmt);
+
+- if (alignment_support_scheme == dr_explicit_realign_optimized)
++ /* 3. Handle explicit realignment if necessary/supported.
++ Create in loop:
++ vec_dest = realign_load (msq, lsq, realignment_token) */
++ if (alignment_support_scheme == dr_explicit_realign_optimized
++ || alignment_support_scheme == dr_explicit_realign)
+ {
+- gcc_assert (phi);
+- if (i == vec_num - 1 && j == ncopies - 1)
+- add_phi_arg (phi, lsq, loop_latch_edge (containing_loop),
+- UNKNOWN_LOCATION);
+- msq = lsq;
+- }
+- }
++ tree tmp;
+
+- /* 4. Handle invariant-load. */
+- if (inv_p && !bb_vinfo)
+- {
+- gcc_assert (!strided_load);
+- gcc_assert (nested_in_vect_loop_p (loop, stmt));
+- if (j == 0)
+- {
+- int k;
+- tree t = NULL_TREE;
+- tree vec_inv, bitpos, bitsize = TYPE_SIZE (scalar_type);
+-
+- /* CHECKME: bitpos depends on endianess? */
+- bitpos = bitsize_zero_node;
+- vec_inv = build3 (BIT_FIELD_REF, scalar_type, new_temp,
+- bitsize, bitpos);
+- vec_dest =
+- vect_create_destination_var (scalar_dest, NULL_TREE);
+- new_stmt = gimple_build_assign (vec_dest, vec_inv);
+- new_temp = make_ssa_name (vec_dest, new_stmt);
++ lsq = gimple_assign_lhs (new_stmt);
++ if (!realignment_token)
++ realignment_token = dataref_ptr;
++ vec_dest = vect_create_destination_var (scalar_dest, vectype);
++ tmp = build3 (REALIGN_LOAD_EXPR, vectype, msq, lsq,
++ realignment_token);
++ new_stmt = gimple_build_assign (vec_dest, tmp);
++ new_temp = make_ssa_name (vec_dest, new_stmt);
+ gimple_assign_set_lhs (new_stmt, new_temp);
+ vect_finish_stmt_generation (stmt, new_stmt, gsi);
+
+- for (k = nunits - 1; k >= 0; --k)
+- t = tree_cons (NULL_TREE, new_temp, t);
+- /* FIXME: use build_constructor directly. */
+- vec_inv = build_constructor_from_list (vectype, t);
+- new_temp = vect_init_vector (stmt, vec_inv, vectype, gsi);
+- new_stmt = SSA_NAME_DEF_STMT (new_temp);
++ if (alignment_support_scheme == dr_explicit_realign_optimized)
++ {
++ gcc_assert (phi);
++ if (i == vec_num - 1 && j == ncopies - 1)
++ add_phi_arg (phi, lsq,
++ loop_latch_edge (containing_loop),
++ UNKNOWN_LOCATION);
++ msq = lsq;
++ }
+ }
+- else
+- gcc_unreachable (); /* FORNOW. */
+- }
+
+- if (negative)
+- {
+- new_temp = reverse_vec_elements (new_temp, stmt, gsi);
+- new_stmt = SSA_NAME_DEF_STMT (new_temp);
+- }
++ /* 4. Handle invariant-load. */
++ if (inv_p && !bb_vinfo)
++ {
++ gcc_assert (!strided_load);
++ gcc_assert (nested_in_vect_loop_p (loop, stmt));
++ if (j == 0)
++ {
++ int k;
++ tree t = NULL_TREE;
++ tree vec_inv, bitpos, bitsize = TYPE_SIZE (scalar_type);
++
++ /* CHECKME: bitpos depends on endianess? */
++ bitpos = bitsize_zero_node;
++ vec_inv = build3 (BIT_FIELD_REF, scalar_type, new_temp,
++ bitsize, bitpos);
++ vec_dest = vect_create_destination_var (scalar_dest,
++ NULL_TREE);
++ new_stmt = gimple_build_assign (vec_dest, vec_inv);
++ new_temp = make_ssa_name (vec_dest, new_stmt);
++ gimple_assign_set_lhs (new_stmt, new_temp);
++ vect_finish_stmt_generation (stmt, new_stmt, gsi);
++
++ for (k = nunits - 1; k >= 0; --k)
++ t = tree_cons (NULL_TREE, new_temp, t);
++ /* FIXME: use build_constructor directly. */
++ vec_inv = build_constructor_from_list (vectype, t);
++ new_temp = vect_init_vector (stmt, vec_inv, vectype, gsi);
++ new_stmt = SSA_NAME_DEF_STMT (new_temp);
++ }
++ else
++ gcc_unreachable (); /* FORNOW. */
++ }
+
+- /* Collect vector loads and later create their permutation in
+- vect_transform_strided_load (). */
+- if (strided_load || slp_perm)
+- VEC_quick_push (tree, dr_chain, new_temp);
++ if (negative)
++ {
++ new_temp = reverse_vec_elements (new_temp, stmt, gsi);
++ new_stmt = SSA_NAME_DEF_STMT (new_temp);
++ }
+
+- /* Store vector loads in the corresponding SLP_NODE. */
+- if (slp && !slp_perm)
+- VEC_quick_push (gimple, SLP_TREE_VEC_STMTS (slp_node), new_stmt);
++ /* Collect vector loads and later create their permutation in
++ vect_transform_strided_load (). */
++ if (strided_load || slp_perm)
++ VEC_quick_push (tree, dr_chain, new_temp);
++
++ /* Store vector loads in the corresponding SLP_NODE. */
++ if (slp && !slp_perm)
++ VEC_quick_push (gimple, SLP_TREE_VEC_STMTS (slp_node),
++ new_stmt);
++ }
+ }
+
+ if (slp && !slp_perm)
+@@ -4353,12 +4786,9 @@
+ {
+ if (strided_load)
+ {
+- if (!vect_transform_strided_load (stmt, dr_chain, group_size, gsi))
+- return false;
+-
++ if (!load_lanes_p)
++ vect_transform_strided_load (stmt, dr_chain, group_size, gsi);
+ *vec_stmt = STMT_VINFO_VEC_STMT (stmt_info);
+- VEC_free (tree, heap, dr_chain);
+- dr_chain = VEC_alloc (tree, heap, group_size);
+ }
+ else
+ {
+@@ -4369,11 +4799,10 @@
+ prev_stmt_info = vinfo_for_stmt (new_stmt);
+ }
+ }
++ if (dr_chain)
++ VEC_free (tree, heap, dr_chain);
+ }
+
+- if (dr_chain)
+- VEC_free (tree, heap, dr_chain);
+-
+ return true;
+ }
+
+@@ -4387,7 +4816,7 @@
+ condition operands are supportable using vec_is_simple_use. */
+
+ static bool
+-vect_is_simple_cond (tree cond, loop_vec_info loop_vinfo)
++vect_is_simple_cond (tree cond, loop_vec_info loop_vinfo, bb_vec_info bb_vinfo)
+ {
+ tree lhs, rhs;
+ tree def;
+@@ -4402,7 +4831,7 @@
+ if (TREE_CODE (lhs) == SSA_NAME)
+ {
+ gimple lhs_def_stmt = SSA_NAME_DEF_STMT (lhs);
+- if (!vect_is_simple_use (lhs, loop_vinfo, NULL, &lhs_def_stmt, &def,
++ if (!vect_is_simple_use (lhs, loop_vinfo, bb_vinfo, &lhs_def_stmt, &def,
+ &dt))
+ return false;
+ }
+@@ -4413,7 +4842,7 @@
+ if (TREE_CODE (rhs) == SSA_NAME)
+ {
+ gimple rhs_def_stmt = SSA_NAME_DEF_STMT (rhs);
+- if (!vect_is_simple_use (rhs, loop_vinfo, NULL, &rhs_def_stmt, &def,
++ if (!vect_is_simple_use (rhs, loop_vinfo, bb_vinfo, &rhs_def_stmt, &def,
+ &dt))
+ return false;
+ }
+@@ -4439,7 +4868,8 @@
+
+ bool
+ vectorizable_condition (gimple stmt, gimple_stmt_iterator *gsi,
+- gimple *vec_stmt, tree reduc_def, int reduc_index)
++ gimple *vec_stmt, tree reduc_def, int reduc_index,
++ slp_tree slp_node)
+ {
+ tree scalar_dest = NULL_TREE;
+ tree vec_dest = NULL_TREE;
+@@ -4456,19 +4886,24 @@
+ tree def;
+ enum vect_def_type dt, dts[4];
+ int nunits = TYPE_VECTOR_SUBPARTS (vectype);
+- int ncopies = LOOP_VINFO_VECT_FACTOR (loop_vinfo) / nunits;
++ int ncopies;
+ enum tree_code code;
+ stmt_vec_info prev_stmt_info = NULL;
+- int j;
++ int i, j;
++ bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (stmt_info);
++ VEC (tree, heap) *vec_oprnds0 = NULL, *vec_oprnds1 = NULL;
++ VEC (tree, heap) *vec_oprnds2 = NULL, *vec_oprnds3 = NULL;
+
+- /* FORNOW: unsupported in basic block SLP. */
+- gcc_assert (loop_vinfo);
++ if (slp_node || PURE_SLP_STMT (stmt_info))
++ ncopies = 1;
++ else
++ ncopies = LOOP_VINFO_VECT_FACTOR (loop_vinfo) / nunits;
+
+ gcc_assert (ncopies >= 1);
+- if (reduc_index && ncopies > 1)
++ if (reduc_index && (ncopies > 1 || STMT_SLP_TYPE (stmt_info)))
+ return false; /* FORNOW */
+
+- if (!STMT_VINFO_RELEVANT_P (stmt_info))
++ if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo)
+ return false;
+
+ if (STMT_VINFO_DEF_TYPE (stmt_info) != vect_internal_def
+@@ -4476,10 +4911,6 @@
+ && reduc_def))
+ return false;
+
+- /* FORNOW: SLP not supported. */
+- if (STMT_SLP_TYPE (stmt_info))
+- return false;
+-
+ /* FORNOW: not yet supported. */
+ if (STMT_VINFO_LIVE_P (stmt_info))
+ {
+@@ -4503,7 +4934,7 @@
+ then_clause = TREE_OPERAND (op, 1);
+ else_clause = TREE_OPERAND (op, 2);
+
+- if (!vect_is_simple_cond (cond_expr, loop_vinfo))
++ if (!vect_is_simple_cond (cond_expr, loop_vinfo, bb_vinfo))
+ return false;
+
+ /* We do not handle two different vector types for the condition
+@@ -4515,7 +4946,7 @@
+ if (TREE_CODE (then_clause) == SSA_NAME)
+ {
+ gimple then_def_stmt = SSA_NAME_DEF_STMT (then_clause);
+- if (!vect_is_simple_use (then_clause, loop_vinfo, NULL,
++ if (!vect_is_simple_use (then_clause, loop_vinfo, bb_vinfo,
+ &then_def_stmt, &def, &dt))
+ return false;
+ }
+@@ -4527,7 +4958,7 @@
+ if (TREE_CODE (else_clause) == SSA_NAME)
+ {
+ gimple else_def_stmt = SSA_NAME_DEF_STMT (else_clause);
+- if (!vect_is_simple_use (else_clause, loop_vinfo, NULL,
++ if (!vect_is_simple_use (else_clause, loop_vinfo, bb_vinfo,
+ &else_def_stmt, &def, &dt))
+ return false;
+ }
+@@ -4545,7 +4976,15 @@
+ return expand_vec_cond_expr_p (TREE_TYPE (op), vec_mode);
+ }
+
+- /* Transform */
++ /* Transform. */
++
++ if (!slp_node)
++ {
++ vec_oprnds0 = VEC_alloc (tree, heap, 1);
++ vec_oprnds1 = VEC_alloc (tree, heap, 1);
++ vec_oprnds2 = VEC_alloc (tree, heap, 1);
++ vec_oprnds3 = VEC_alloc (tree, heap, 1);
++ }
+
+ /* Handle def. */
+ scalar_dest = gimple_assign_lhs (stmt);
+@@ -4554,67 +4993,118 @@
+ /* Handle cond expr. */
+ for (j = 0; j < ncopies; j++)
+ {
+- gimple new_stmt;
++ gimple new_stmt = NULL;
+ if (j == 0)
+ {
+- gimple gtemp;
+- vec_cond_lhs =
++ if (slp_node)
++ {
++ VEC (tree, heap) *ops = VEC_alloc (tree, heap, 4);
++ VEC (slp_void_p, heap) *vec_defs;
++
++ vec_defs = VEC_alloc (slp_void_p, heap, 4);
++ VEC_safe_push (tree, heap, ops, TREE_OPERAND (cond_expr, 0));
++ VEC_safe_push (tree, heap, ops, TREE_OPERAND (cond_expr, 1));
++ VEC_safe_push (tree, heap, ops, then_clause);
++ VEC_safe_push (tree, heap, ops, else_clause);
++ vect_get_slp_defs (ops, slp_node, &vec_defs, -1);
++ vec_oprnds3 = (VEC (tree, heap) *) VEC_pop (slp_void_p, vec_defs);
++ vec_oprnds2 = (VEC (tree, heap) *) VEC_pop (slp_void_p, vec_defs);
++ vec_oprnds1 = (VEC (tree, heap) *) VEC_pop (slp_void_p, vec_defs);
++ vec_oprnds0 = (VEC (tree, heap) *) VEC_pop (slp_void_p, vec_defs);
++
++ VEC_free (tree, heap, ops);
++ VEC_free (slp_void_p, heap, vec_defs);
++ }
++ else
++ {
++ gimple gtemp;
++ vec_cond_lhs =
+ vect_get_vec_def_for_operand (TREE_OPERAND (cond_expr, 0),
+ stmt, NULL);
+- vect_is_simple_use (TREE_OPERAND (cond_expr, 0), loop_vinfo,
++ vect_is_simple_use (TREE_OPERAND (cond_expr, 0), loop_vinfo,
+ NULL, &gtemp, &def, &dts[0]);
+- vec_cond_rhs =
+- vect_get_vec_def_for_operand (TREE_OPERAND (cond_expr, 1),
+- stmt, NULL);
+- vect_is_simple_use (TREE_OPERAND (cond_expr, 1), loop_vinfo,
+- NULL, &gtemp, &def, &dts[1]);
+- if (reduc_index == 1)
+- vec_then_clause = reduc_def;
+- else
+- {
+- vec_then_clause = vect_get_vec_def_for_operand (then_clause,
+- stmt, NULL);
+- vect_is_simple_use (then_clause, loop_vinfo,
+- NULL, &gtemp, &def, &dts[2]);
+- }
+- if (reduc_index == 2)
+- vec_else_clause = reduc_def;
+- else
+- {
+- vec_else_clause = vect_get_vec_def_for_operand (else_clause,
++
++ vec_cond_rhs =
++ vect_get_vec_def_for_operand (TREE_OPERAND (cond_expr, 1),
++ stmt, NULL);
++ vect_is_simple_use (TREE_OPERAND (cond_expr, 1), loop_vinfo,
++ NULL, &gtemp, &def, &dts[1]);
++ if (reduc_index == 1)
++ vec_then_clause = reduc_def;
++ else
++ {
++ vec_then_clause = vect_get_vec_def_for_operand (then_clause,
++ stmt, NULL);
++ vect_is_simple_use (then_clause, loop_vinfo,
++ NULL, &gtemp, &def, &dts[2]);
++ }
++ if (reduc_index == 2)
++ vec_else_clause = reduc_def;
++ else
++ {
++ vec_else_clause = vect_get_vec_def_for_operand (else_clause,
+ stmt, NULL);
+- vect_is_simple_use (else_clause, loop_vinfo,
++ vect_is_simple_use (else_clause, loop_vinfo,
+ NULL, &gtemp, &def, &dts[3]);
++ }
+ }
+ }
+ else
+ {
+- vec_cond_lhs = vect_get_vec_def_for_stmt_copy (dts[0], vec_cond_lhs);
+- vec_cond_rhs = vect_get_vec_def_for_stmt_copy (dts[1], vec_cond_rhs);
++ vec_cond_lhs = vect_get_vec_def_for_stmt_copy (dts[0],
++ VEC_pop (tree, vec_oprnds0));
++ vec_cond_rhs = vect_get_vec_def_for_stmt_copy (dts[1],
++ VEC_pop (tree, vec_oprnds1));
+ vec_then_clause = vect_get_vec_def_for_stmt_copy (dts[2],
+- vec_then_clause);
++ VEC_pop (tree, vec_oprnds2));
+ vec_else_clause = vect_get_vec_def_for_stmt_copy (dts[3],
+- vec_else_clause);
++ VEC_pop (tree, vec_oprnds3));
++ }
++
++ if (!slp_node)
++ {
++ VEC_quick_push (tree, vec_oprnds0, vec_cond_lhs);
++ VEC_quick_push (tree, vec_oprnds1, vec_cond_rhs);
++ VEC_quick_push (tree, vec_oprnds2, vec_then_clause);
++ VEC_quick_push (tree, vec_oprnds3, vec_else_clause);
+ }
+
+ /* Arguments are ready. Create the new vector stmt. */
+- vec_compare = build2 (TREE_CODE (cond_expr), vectype,
+- vec_cond_lhs, vec_cond_rhs);
+- vec_cond_expr = build3 (VEC_COND_EXPR, vectype,
+- vec_compare, vec_then_clause, vec_else_clause);
++ FOR_EACH_VEC_ELT (tree, vec_oprnds0, i, vec_cond_lhs)
++ {
++ vec_cond_rhs = VEC_index (tree, vec_oprnds1, i);
++ vec_then_clause = VEC_index (tree, vec_oprnds2, i);
++ vec_else_clause = VEC_index (tree, vec_oprnds3, i);
++
++ vec_compare = build2 (TREE_CODE (cond_expr), vectype,
++ vec_cond_lhs, vec_cond_rhs);
++ vec_cond_expr = build3 (VEC_COND_EXPR, vectype,
++ vec_compare, vec_then_clause, vec_else_clause);
+
+- new_stmt = gimple_build_assign (vec_dest, vec_cond_expr);
+- new_temp = make_ssa_name (vec_dest, new_stmt);
+- gimple_assign_set_lhs (new_stmt, new_temp);
+- vect_finish_stmt_generation (stmt, new_stmt, gsi);
+- if (j == 0)
+- STMT_VINFO_VEC_STMT (stmt_info) = *vec_stmt = new_stmt;
+- else
+- STMT_VINFO_RELATED_STMT (prev_stmt_info) = new_stmt;
++ new_stmt = gimple_build_assign (vec_dest, vec_cond_expr);
++ new_temp = make_ssa_name (vec_dest, new_stmt);
++ gimple_assign_set_lhs (new_stmt, new_temp);
++ vect_finish_stmt_generation (stmt, new_stmt, gsi);
++ if (slp_node)
++ VEC_quick_push (gimple, SLP_TREE_VEC_STMTS (slp_node), new_stmt);
++ }
+
+- prev_stmt_info = vinfo_for_stmt (new_stmt);
++ if (slp_node)
++ continue;
++
++ if (j == 0)
++ STMT_VINFO_VEC_STMT (stmt_info) = *vec_stmt = new_stmt;
++ else
++ STMT_VINFO_RELATED_STMT (prev_stmt_info) = new_stmt;
++
++ prev_stmt_info = vinfo_for_stmt (new_stmt);
+ }
+
++ VEC_free (tree, heap, vec_oprnds0);
++ VEC_free (tree, heap, vec_oprnds1);
++ VEC_free (tree, heap, vec_oprnds2);
++ VEC_free (tree, heap, vec_oprnds3);
++
+ return true;
+ }
+
+@@ -4629,6 +5119,7 @@
+ enum vect_relevant relevance = STMT_VINFO_RELEVANT (stmt_info);
+ bool ok;
+ tree scalar_type, vectype;
++ gimple pattern_stmt, pattern_def_stmt;
+
+ if (vect_print_dump_info (REPORT_DETAILS))
+ {
+@@ -4650,16 +5141,70 @@
+ - any LABEL_EXPRs in the loop
+ - computations that are used only for array indexing or loop control.
+ In basic blocks we only analyze statements that are a part of some SLP
+- instance, therefore, all the statements are relevant. */
++ instance, therefore, all the statements are relevant.
+
++ Pattern statement needs to be analyzed instead of the original statement
++ if the original statement is not relevant. Otherwise, we analyze both
++ statements. */
++
++ pattern_stmt = STMT_VINFO_RELATED_STMT (stmt_info);
+ if (!STMT_VINFO_RELEVANT_P (stmt_info)
+ && !STMT_VINFO_LIVE_P (stmt_info))
+ {
+- if (vect_print_dump_info (REPORT_DETAILS))
+- fprintf (vect_dump, "irrelevant.");
++ if (STMT_VINFO_IN_PATTERN_P (stmt_info)
++ && pattern_stmt
++ && (STMT_VINFO_RELEVANT_P (vinfo_for_stmt (pattern_stmt))
++ || STMT_VINFO_LIVE_P (vinfo_for_stmt (pattern_stmt))))
++ {
++ /* Analyze PATTERN_STMT instead of the original stmt. */
++ stmt = pattern_stmt;
++ stmt_info = vinfo_for_stmt (pattern_stmt);
++ if (vect_print_dump_info (REPORT_DETAILS))
++ {
++ fprintf (vect_dump, "==> examining pattern statement: ");
++ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
++ }
++ }
++ else
++ {
++ if (vect_print_dump_info (REPORT_DETAILS))
++ fprintf (vect_dump, "irrelevant.");
+
+- return true;
++ return true;
++ }
+ }
++ else if (STMT_VINFO_IN_PATTERN_P (stmt_info)
++ && pattern_stmt
++ && (STMT_VINFO_RELEVANT_P (vinfo_for_stmt (pattern_stmt))
++ || STMT_VINFO_LIVE_P (vinfo_for_stmt (pattern_stmt))))
++ {
++ /* Analyze PATTERN_STMT too. */
++ if (vect_print_dump_info (REPORT_DETAILS))
++ {
++ fprintf (vect_dump, "==> examining pattern statement: ");
++ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
++ }
++
++ if (!vect_analyze_stmt (pattern_stmt, need_to_vectorize, node))
++ return false;
++ }
++
++ if (is_pattern_stmt_p (stmt_info)
++ && (pattern_def_stmt = STMT_VINFO_PATTERN_DEF_STMT (stmt_info))
++ && (STMT_VINFO_RELEVANT_P (vinfo_for_stmt (pattern_def_stmt))
++ || STMT_VINFO_LIVE_P (vinfo_for_stmt (pattern_def_stmt))))
++ {
++ /* Analyze def stmt of STMT if it's a pattern stmt. */
++ if (vect_print_dump_info (REPORT_DETAILS))
++ {
++ fprintf (vect_dump, "==> examining pattern def statement: ");
++ print_gimple_stmt (vect_dump, pattern_def_stmt, 0, TDF_SLIM);
++ }
++
++ if (!vect_analyze_stmt (pattern_def_stmt, need_to_vectorize, node))
++ return false;
++ }
++
+
+ switch (STMT_VINFO_DEF_TYPE (stmt_info))
+ {
+@@ -4733,15 +5278,18 @@
+ || vectorizable_call (stmt, NULL, NULL)
+ || vectorizable_store (stmt, NULL, NULL, NULL)
+ || vectorizable_reduction (stmt, NULL, NULL, NULL)
+- || vectorizable_condition (stmt, NULL, NULL, NULL, 0));
++ || vectorizable_condition (stmt, NULL, NULL, NULL, 0, NULL));
+ else
+ {
+ if (bb_vinfo)
+- ok = (vectorizable_shift (stmt, NULL, NULL, node)
++ ok = (vectorizable_type_promotion (stmt, NULL, NULL, node)
++ || vectorizable_type_demotion (stmt, NULL, NULL, node)
++ || vectorizable_shift (stmt, NULL, NULL, node)
+ || vectorizable_operation (stmt, NULL, NULL, node)
+ || vectorizable_assignment (stmt, NULL, NULL, node)
+ || vectorizable_load (stmt, NULL, NULL, node, NULL)
+- || vectorizable_store (stmt, NULL, NULL, node));
++ || vectorizable_store (stmt, NULL, NULL, node)
++ || vectorizable_condition (stmt, NULL, NULL, NULL, 0, node));
+ }
+
+ if (!ok)
+@@ -4777,27 +5325,6 @@
+ return false;
+ }
+
+- if (!PURE_SLP_STMT (stmt_info))
+- {
+- /* Groups of strided accesses whose size is not a power of 2 are not
+- vectorizable yet using loop-vectorization. Therefore, if this stmt
+- feeds non-SLP-able stmts (i.e., this stmt has to be both SLPed and
+- loop-based vectorized), the loop cannot be vectorized. */
+- if (STMT_VINFO_STRIDED_ACCESS (stmt_info)
+- && exact_log2 (DR_GROUP_SIZE (vinfo_for_stmt (
+- DR_GROUP_FIRST_DR (stmt_info)))) == -1)
+- {
+- if (vect_print_dump_info (REPORT_DETAILS))
+- {
+- fprintf (vect_dump, "not vectorized: the size of group "
+- "of strided accesses is not a power of 2");
+- print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
+- }
+-
+- return false;
+- }
+- }
+-
+ return true;
+ }
+
+@@ -4814,7 +5341,6 @@
+ bool is_store = false;
+ gimple vec_stmt = NULL;
+ stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
+- gimple orig_stmt_in_pattern;
+ bool done;
+
+ switch (STMT_VINFO_TYPE (stmt_info))
+@@ -4879,8 +5405,7 @@
+ break;
+
+ case condition_vec_info_type:
+- gcc_assert (!slp_node);
+- done = vectorizable_condition (stmt, gsi, &vec_stmt, NULL, 0);
++ done = vectorizable_condition (stmt, gsi, &vec_stmt, NULL, 0, slp_node);
+ gcc_assert (done);
+ break;
+
+@@ -4953,21 +5478,7 @@
+ }
+
+ if (vec_stmt)
+- {
+- STMT_VINFO_VEC_STMT (stmt_info) = vec_stmt;
+- orig_stmt_in_pattern = STMT_VINFO_RELATED_STMT (stmt_info);
+- if (orig_stmt_in_pattern)
+- {
+- stmt_vec_info stmt_vinfo = vinfo_for_stmt (orig_stmt_in_pattern);
+- /* STMT was inserted by the vectorizer to replace a computation idiom.
+- ORIG_STMT_IN_PATTERN is a stmt in the original sequence that
+- computed this idiom. We need to record a pointer to VEC_STMT in
+- the stmt_info of ORIG_STMT_IN_PATTERN. See more details in the
+- documentation of vect_pattern_recog. */
+- if (STMT_VINFO_IN_PATTERN_P (stmt_vinfo))
+- STMT_VINFO_VEC_STMT (stmt_vinfo) = vec_stmt;
+- }
+- }
++ STMT_VINFO_VEC_STMT (stmt_info) = vec_stmt;
+
+ return is_store;
+ }
+@@ -5017,6 +5528,7 @@
+ STMT_VINFO_VECTORIZABLE (res) = true;
+ STMT_VINFO_IN_PATTERN_P (res) = false;
+ STMT_VINFO_RELATED_STMT (res) = NULL;
++ STMT_VINFO_PATTERN_DEF_STMT (res) = NULL;
+ STMT_VINFO_DATA_REF (res) = NULL;
+
+ STMT_VINFO_DR_BASE_ADDRESS (res) = NULL;
+@@ -5345,8 +5857,12 @@
+ || *dt == vect_nested_cycle)
+ {
+ stmt_vec_info stmt_info = vinfo_for_stmt (*def_stmt);
+- if (STMT_VINFO_IN_PATTERN_P (stmt_info))
++
++ if (STMT_VINFO_IN_PATTERN_P (stmt_info)
++ && !STMT_VINFO_RELEVANT (stmt_info)
++ && !STMT_VINFO_LIVE_P (stmt_info))
+ stmt_info = vinfo_for_stmt (STMT_VINFO_RELATED_STMT (stmt_info));
++
+ *vectype = STMT_VINFO_VECTYPE (stmt_info);
+ gcc_assert (*vectype != NULL_TREE);
+ }
+@@ -5395,7 +5911,7 @@
+ {
+ stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
+ loop_vec_info loop_info = STMT_VINFO_LOOP_VINFO (stmt_info);
+- struct loop *vect_loop = LOOP_VINFO_LOOP (loop_info);
++ struct loop *vect_loop = NULL;
+ bool ordered_p;
+ enum machine_mode vec_mode;
+ enum insn_code icode1, icode2;
+@@ -5404,6 +5920,9 @@
+ tree wide_vectype = vectype_out;
+ enum tree_code c1, c2;
+
++ if (loop_info)
++ vect_loop = LOOP_VINFO_LOOP (loop_info);
++
+ /* The result of a vectorized widening operation usually requires two vectors
+ (because the widened results do not fit int one vector). The generated
+ vector results would normally be expected to be generated in the same
+@@ -5424,7 +5943,8 @@
+ iterations in parallel). We therefore don't allow to change the order
+ of the computation in the inner-loop during outer-loop vectorization. */
+
+- if (STMT_VINFO_RELEVANT (stmt_info) == vect_used_by_reduction
++ if (vect_loop
++ && STMT_VINFO_RELEVANT (stmt_info) == vect_used_by_reduction
+ && !nested_in_vect_loop_p (vect_loop, stmt))
+ ordered_p = false;
+ else
+@@ -5461,6 +5981,19 @@
+ }
+ break;
+
++ case WIDEN_LSHIFT_EXPR:
++ if (BYTES_BIG_ENDIAN)
++ {
++ c1 = VEC_WIDEN_LSHIFT_HI_EXPR;
++ c2 = VEC_WIDEN_LSHIFT_LO_EXPR;
++ }
++ else
++ {
++ c2 = VEC_WIDEN_LSHIFT_HI_EXPR;
++ c1 = VEC_WIDEN_LSHIFT_LO_EXPR;
++ }
++ break;
++
+ CASE_CONVERT:
+ if (BYTES_BIG_ENDIAN)
+ {
+--- a/src/gcc/tree-vectorizer.h
++++ b/src/gcc/tree-vectorizer.h
+@@ -73,15 +73,15 @@
+ /************************************************************************
+ SLP
+ ************************************************************************/
++typedef void *slp_void_p;
++DEF_VEC_P (slp_void_p);
++DEF_VEC_ALLOC_P (slp_void_p, heap);
+
+-/* A computation tree of an SLP instance. Each node corresponds to a group of
++/* A computation tree of an SLP instance. Each node corresponds to a group of
+ stmts to be packed in a SIMD stmt. */
+ typedef struct _slp_tree {
+- /* Only binary and unary operations are supported. LEFT child corresponds to
+- the first operand and RIGHT child to the second if the operation is
+- binary. */
+- struct _slp_tree *left;
+- struct _slp_tree *right;
++ /* Nodes that contain def-stmts of this node statements operands. */
++ VEC (slp_void_p, heap) *children;
+ /* A group of scalar stmts to be vectorized together. */
+ VEC (gimple, heap) *stmts;
+ /* Vectorized stmt/s. */
+@@ -146,14 +146,32 @@
+ #define SLP_INSTANCE_LOADS(S) (S)->loads
+ #define SLP_INSTANCE_FIRST_LOAD_STMT(S) (S)->first_load
+
+-#define SLP_TREE_LEFT(S) (S)->left
+-#define SLP_TREE_RIGHT(S) (S)->right
++#define SLP_TREE_CHILDREN(S) (S)->children
+ #define SLP_TREE_SCALAR_STMTS(S) (S)->stmts
+ #define SLP_TREE_VEC_STMTS(S) (S)->vec_stmts
+ #define SLP_TREE_NUMBER_OF_VEC_STMTS(S) (S)->vec_stmts_size
+ #define SLP_TREE_OUTSIDE_OF_LOOP_COST(S) (S)->cost.outside_of_loop
+ #define SLP_TREE_INSIDE_OF_LOOP_COST(S) (S)->cost.inside_of_loop
+
++/* This structure is used in creation of an SLP tree. Each instance
++ corresponds to the same operand in a group of scalar stmts in an SLP
++ node. */
++typedef struct _slp_oprnd_info
++{
++ /* Def-stmts for the operands. */
++ VEC (gimple, heap) *def_stmts;
++ /* Information about the first statement, its vector def-type, type, the
++ operand itself in case it's constant, and an indication if it's a pattern
++ stmt. */
++ enum vect_def_type first_dt;
++ tree first_def_type;
++ tree first_const_oprnd;
++ bool first_pattern;
++} *slp_oprnd_info;
++
++DEF_VEC_P(slp_oprnd_info);
++DEF_VEC_ALLOC_P(slp_oprnd_info, heap);
++
+
+ typedef struct _vect_peel_info
+ {
+@@ -464,6 +482,9 @@
+ pattern). */
+ gimple related_stmt;
+
++ /* Used to keep a def stmt of a pattern stmt if such exists. */
++ gimple pattern_def_stmt;
++
+ /* List of datarefs that are known to have the same alignment as the dataref
+ of this stmt. */
+ VEC(dr_p,heap) *same_align_refs;
+@@ -531,6 +552,7 @@
+
+ #define STMT_VINFO_IN_PATTERN_P(S) (S)->in_pattern_p
+ #define STMT_VINFO_RELATED_STMT(S) (S)->related_stmt
++#define STMT_VINFO_PATTERN_DEF_STMT(S) (S)->pattern_def_stmt
+ #define STMT_VINFO_SAME_ALIGN_REFS(S) (S)->same_align_refs
+ #define STMT_VINFO_DEF_TYPE(S) (S)->def_type
+ #define STMT_VINFO_DR_GROUP_FIRST_DR(S) (S)->first_dr
+@@ -794,9 +816,9 @@
+ extern tree vectorizable_function (gimple, tree, tree);
+ extern void vect_model_simple_cost (stmt_vec_info, int, enum vect_def_type *,
+ slp_tree);
+-extern void vect_model_store_cost (stmt_vec_info, int, enum vect_def_type,
+- slp_tree);
+-extern void vect_model_load_cost (stmt_vec_info, int, slp_tree);
++extern void vect_model_store_cost (stmt_vec_info, int, bool,
++ enum vect_def_type, slp_tree);
++extern void vect_model_load_cost (stmt_vec_info, int, bool, slp_tree);
+ extern void vect_finish_stmt_generation (gimple, gimple,
+ gimple_stmt_iterator *);
+ extern bool vect_mark_stmts_to_be_vectorized (loop_vec_info);
+@@ -810,10 +832,13 @@
+ extern void vect_remove_stores (gimple);
+ extern bool vect_analyze_stmt (gimple, bool *, slp_tree);
+ extern bool vectorizable_condition (gimple, gimple_stmt_iterator *, gimple *,
+- tree, int);
++ tree, int, slp_tree);
+ extern void vect_get_load_cost (struct data_reference *, int, bool,
+ unsigned int *, unsigned int *);
+ extern void vect_get_store_cost (struct data_reference *, int, unsigned int *);
++extern bool vect_supportable_shift (enum tree_code, tree);
++extern void vect_get_vec_defs (tree, tree, gimple, VEC (tree, heap) **,
++ VEC (tree, heap) **, slp_tree, int);
+
+ /* In tree-vect-data-refs.c. */
+ extern bool vect_can_force_dr_alignment_p (const_tree, unsigned int);
+@@ -829,21 +854,22 @@
+ extern bool vect_analyze_data_ref_accesses (loop_vec_info, bb_vec_info);
+ extern bool vect_prune_runtime_alias_test_list (loop_vec_info);
+ extern bool vect_analyze_data_refs (loop_vec_info, bb_vec_info, int *);
+-extern tree vect_create_data_ref_ptr (gimple, struct loop *, tree, tree *,
+- gimple *, bool, bool *);
++extern tree vect_create_data_ref_ptr (gimple, tree, struct loop *, tree,
++ tree *, gimple *, bool, bool *);
+ extern tree bump_vector_ptr (tree, gimple, gimple_stmt_iterator *, gimple, tree);
+ extern tree vect_create_destination_var (tree, tree);
+-extern bool vect_strided_store_supported (tree);
+-extern bool vect_strided_load_supported (tree);
+-extern bool vect_permute_store_chain (VEC(tree,heap) *,unsigned int, gimple,
++extern bool vect_strided_store_supported (tree, unsigned HOST_WIDE_INT);
++extern bool vect_store_lanes_supported (tree, unsigned HOST_WIDE_INT);
++extern bool vect_strided_load_supported (tree, unsigned HOST_WIDE_INT);
++extern bool vect_load_lanes_supported (tree, unsigned HOST_WIDE_INT);
++extern void vect_permute_store_chain (VEC(tree,heap) *,unsigned int, gimple,
+ gimple_stmt_iterator *, VEC(tree,heap) **);
+ extern tree vect_setup_realignment (gimple, gimple_stmt_iterator *, tree *,
+ enum dr_alignment_support, tree,
+ struct loop **);
+-extern bool vect_permute_load_chain (VEC(tree,heap) *,unsigned int, gimple,
+- gimple_stmt_iterator *, VEC(tree,heap) **);
+-extern bool vect_transform_strided_load (gimple, VEC(tree,heap) *, int,
++extern void vect_transform_strided_load (gimple, VEC(tree,heap) *, int,
+ gimple_stmt_iterator *);
++extern void vect_record_strided_load_vectors (gimple, VEC(tree,heap) *);
+ extern int vect_get_place_in_interleaving_chain (gimple, gimple);
+ extern tree vect_get_new_vect_var (tree, enum vect_var_kind, const char *);
+ extern tree vect_create_addr_base_for_vector_ref (gimple, gimple_seq *,
+@@ -879,8 +905,9 @@
+ extern bool vect_analyze_slp (loop_vec_info, bb_vec_info);
+ extern void vect_make_slp_decision (loop_vec_info);
+ extern void vect_detect_hybrid_slp (loop_vec_info);
+-extern void vect_get_slp_defs (tree, tree, slp_tree, VEC (tree,heap) **,
+- VEC (tree,heap) **, int);
++extern void vect_get_slp_defs (VEC (tree, heap) *, slp_tree,
++ VEC (slp_void_p, heap) **, int);
++
+ extern LOC find_bb_location (basic_block);
+ extern bb_vec_info vect_slp_analyze_bb (basic_block);
+ extern void vect_slp_transform_bb (basic_block);
+@@ -889,9 +916,9 @@
+ /* Pattern recognition functions.
+ Additional pattern recognition functions can (and will) be added
+ in the future. */
+-typedef gimple (* vect_recog_func_ptr) (gimple, tree *, tree *);
+-#define NUM_PATTERNS 4
+-void vect_pattern_recog (loop_vec_info);
++typedef gimple (* vect_recog_func_ptr) (VEC (gimple, heap) **, tree *, tree *);
++#define NUM_PATTERNS 7
++void vect_pattern_recog (loop_vec_info, bb_vec_info);
+
+ /* In tree-vectorizer.c. */
+ unsigned vectorize_loops (void);
+--- a/src/gcc/tree.c
++++ b/src/gcc/tree.c
+@@ -7321,6 +7321,15 @@
+ return build_array_type_1 (elt_type, index_type, false);
+ }
+
++/* Return a representation of ELT_TYPE[NELTS], using indices of type
++ sizetype. */
++
++tree
++build_array_type_nelts (tree elt_type, unsigned HOST_WIDE_INT nelts)
++{
++ return build_array_type (elt_type, build_index_type (size_int (nelts - 1)));
++}
++
+ /* Recursively examines the array elements of TYPE, until a non-array
+ element type is found. */
+
+--- a/src/gcc/tree.def
++++ b/src/gcc/tree.def
+@@ -1092,6 +1092,19 @@
+ is subtracted from t3. */
+ DEFTREECODE (WIDEN_MULT_MINUS_EXPR, "widen_mult_minus_expr", tcc_expression, 3)
+
++/* Widening shift left.
++ The first operand is of type t1.
++ The second operand is the number of bits to shift by; it need not be the
++ same type as the first operand and result.
++ Note that the result is undefined if the second operand is larger
++ than or equal to the first operand's type size.
++ The type of the entire expression is t2, such that t2 is at least twice
++ the size of t1.
++ WIDEN_LSHIFT_EXPR is equivalent to first widening (promoting)
++ the first argument from type t1 to type t2, and then shifting it
++ by the second argument. */
++DEFTREECODE (WIDEN_LSHIFT_EXPR, "widen_lshift_expr", tcc_binary, 2)
++
+ /* Fused multiply-add.
+ All operands and the result are of the same type. No intermediate
+ rounding is performed after multiplying operand one with operand two
+@@ -1147,6 +1160,16 @@
+ DEFTREECODE (VEC_INTERLEAVE_HIGH_EXPR, "vec_interleavehigh_expr", tcc_binary, 2)
+ DEFTREECODE (VEC_INTERLEAVE_LOW_EXPR, "vec_interleavelow_expr", tcc_binary, 2)
+
++/* Widening vector shift left in bits.
++ Operand 0 is a vector to be shifted with N elements of size S.
++ Operand 1 is an integer shift amount in bits.
++ The result of the operation is N elements of size 2*S.
++ VEC_WIDEN_LSHIFT_HI_EXPR computes the N/2 high results.
++ VEC_WIDEN_LSHIFT_LO_EXPR computes the N/2 low results.
++ */
++DEFTREECODE (VEC_WIDEN_LSHIFT_HI_EXPR, "widen_lshift_hi_expr", tcc_binary, 2)
++DEFTREECODE (VEC_WIDEN_LSHIFT_LO_EXPR, "widen_lshift_lo_expr", tcc_binary, 2)
++
+ /* PREDICT_EXPR. Specify hint for branch prediction. The
+ PREDICT_EXPR_PREDICTOR specify predictor and PREDICT_EXPR_OUTCOME the
+ outcome (0 for not taken and 1 for taken). Once the profile is guessed
+--- a/src/gcc/tree.h
++++ b/src/gcc/tree.h
+@@ -4197,6 +4197,7 @@
+ extern tree build_index_type (tree);
+ extern tree build_array_type (tree, tree);
+ extern tree build_nonshared_array_type (tree, tree);
++extern tree build_array_type_nelts (tree, unsigned HOST_WIDE_INT);
+ extern tree build_function_type (tree, tree);
+ extern tree build_function_type_list (tree, ...);
+ extern tree build_function_type_skip_args (tree, bitmap);
+@@ -4626,21 +4627,10 @@
+
+ extern VEC(tree,gc) *ctor_to_vec (tree);
+
+-/* Examine CTOR to discover:
+- * how many scalar fields are set to nonzero values,
+- and place it in *P_NZ_ELTS;
+- * how many scalar fields in total are in CTOR,
+- and place it in *P_ELT_COUNT.
+- * if a type is a union, and the initializer from the constructor
+- is not the largest element in the union, then set *p_must_clear.
++extern bool categorize_ctor_elements (const_tree, HOST_WIDE_INT *,
++ HOST_WIDE_INT *, bool *);
+
+- Return whether or not CTOR is a valid static constant initializer, the same
+- as "initializer_constant_valid_p (CTOR, TREE_TYPE (CTOR)) != 0". */
+-
+-extern bool categorize_ctor_elements (const_tree, HOST_WIDE_INT *, HOST_WIDE_INT *,
+- bool *);
+-
+-extern HOST_WIDE_INT count_type_elements (const_tree, bool);
++extern bool complete_ctor_at_level_p (const_tree, HOST_WIDE_INT, const_tree);
+
+ /* integer_zerop (tree x) is nonzero if X is an integer constant of value 0. */
+
+--- a/src/gcc/value-prof.c
++++ b/src/gcc/value-prof.c
+@@ -1252,6 +1252,9 @@
+ if (TREE_CODE (callee) == FUNCTION_DECL)
+ return false;
+
++ if (gimple_call_internal_p (stmt))
++ return false;
++
+ histogram = gimple_histogram_value_of_type (cfun, stmt, HIST_TYPE_INDIR_CALL);
+ if (!histogram)
+ return false;
+@@ -1640,6 +1643,7 @@
+ tree callee;
+
+ if (gimple_code (stmt) != GIMPLE_CALL
++ || gimple_call_internal_p (stmt)
+ || gimple_call_fndecl (stmt) != NULL_TREE)
+ return;
+
+--- a/src/libada/ChangeLog
++++ b/src/libada/ChangeLog
+@@ -1,3 +1,9 @@
++2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
++
++ Backport from mainline r181319
++ Makefile.in: Change dependency on oscons to depend on the generator
++ tool.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/libada/Makefile.in
++++ b/src/libada/Makefile.in
+@@ -70,6 +70,7 @@
+ version := $(shell cat $(srcdir)/../gcc/BASE-VER)
+ libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR)
+ ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR))
++ADA_RTS_SUBDIR=./rts$(subst /,_,$(MULTISUBDIR))
+
+ # exeext should not be used because it's the *host* exeext. We're building
+ # a *target* library, aren't we?!? Likewise for CC. Still, provide bogus
+@@ -96,10 +97,10 @@
+ "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)"
+
+ # Rules to build gnatlib.
+-.PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared oscons
++.PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared osconstool
+ gnatlib: @default_gnatlib_target@
+
+-gnatlib-plain: oscons $(GCC_DIR)/ada/Makefile
++gnatlib-plain: osconstool $(GCC_DIR)/ada/Makefile
+ test -f stamp-libada || \
+ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) gnatlib \
+ && touch stamp-libada
+@@ -108,7 +109,7 @@
+ $(LN_S) $(ADA_RTS_DIR) adainclude
+ $(LN_S) $(ADA_RTS_DIR) adalib
+
+-gnatlib-sjlj gnatlib-zcx gnatlib-shared: oscons $(GCC_DIR)/ada/Makefile
++gnatlib-sjlj gnatlib-zcx gnatlib-shared: osconstool $(GCC_DIR)/ada/Makefile
+ test -f stamp-libada || \
+ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) $@ \
+ && touch stamp-libada
+@@ -117,8 +118,8 @@
+ $(LN_S) $(ADA_RTS_DIR) adainclude
+ $(LN_S) $(ADA_RTS_DIR) adalib
+
+-oscons:
+- $(MAKE) -C $(GCC_DIR) $(LIBADA_FLAGS_TO_PASS) ada/s-oscons.ads
++osconstool:
++ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) ./bldtools/oscons/xoscons
+
+ install-gnatlib: $(GCC_DIR)/ada/Makefile
+ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) install-gnatlib
+--- a/src/libffi/ChangeLog
++++ b/src/libffi/ChangeLog
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/libffi/configure
++++ b/src/libffi/configure
+@@ -9001,7 +9001,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -9914,7 +9914,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -9932,7 +9932,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+--- a/src/libgcc/ChangeLog
++++ b/src/libgcc/ChangeLog
+@@ -1,3 +1,8 @@
++2011-11-23 Gerald Pfeifer <gerald@pfeifer.com>
++
++ * config.host (*-*-freebsd[12], *-*-freebsd[12].*,
++ *-*-freebsd*aout*): Remove.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/libgcc/config.host
++++ b/src/libgcc/config.host
+@@ -145,15 +145,6 @@
+ asm_hidden_op=.private_extern
+ tmake_file="t-darwin ${cpu_type}/t-darwin t-slibgcc-darwin"
+ ;;
+-*-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*)
+- # This is the place-holder for the generic a.out configuration
+- # of FreeBSD. No actual configuration resides here since
+- # there was only ever a bare-bones ix86 configuration for
+- # a.out and it exists solely in the machine-specific section.
+- # This place-holder must exist to avoid dropping into
+- # the generic ELF configuration of FreeBSD (i.e. it must be
+- # ordered before that section).
+- ;;
+ *-*-freebsd*)
+ # This is the generic ELF configuration of FreeBSD. Later
+ # machine-specific sections may refine and add to this
+--- a/src/libgfortran/ChangeLog
++++ b/src/libgfortran/ChangeLog
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/libgfortran/configure
++++ b/src/libgfortran/configure
+@@ -10326,7 +10326,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -11242,7 +11242,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -11260,7 +11260,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -14162,7 +14162,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_FC=yes
+ hardcode_minus_L_FC=yes
+@@ -14870,7 +14870,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -14888,7 +14888,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+--- a/src/libgomp/ChangeLog
++++ b/src/libgomp/ChangeLog
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/libgomp/configure
++++ b/src/libgomp/configure
+@@ -9317,7 +9317,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -10230,7 +10230,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -10248,7 +10248,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -13164,7 +13164,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_FC=yes
+ hardcode_minus_L_FC=yes
+@@ -13869,7 +13869,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -13887,7 +13887,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+--- a/src/libiberty/ChangeLog
++++ b/src/libiberty/ChangeLog
+@@ -1,3 +1,17 @@
++2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
++
++ PR target/48108
++ Backport from mainline r180523
++ * simple-object-mach-o.c (GNU_WRAPPER_SECTS, GNU_WRAPPER_INDEX,
++ GNU_WRAPPER_NAMES): New macros.
++ (simple_object_mach_o_segment): Handle wrapper scheme.
++ (simple_object_mach_o_write_section_header): Allow the segment name
++ to be supplied.
++ (simple_object_mach_o_write_segment): Handle wrapper scheme. Ensure
++ that the top-level segment name in the load command is empty.
++ (simple_object_mach_o_write_to_file): Determine the number of
++ sections during segment output, use that in writing the header.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/libiberty/simple-object-mach-o.c
++++ b/src/libiberty/simple-object-mach-o.c
+@@ -1,5 +1,5 @@
+ /* simple-object-mach-o.c -- routines to manipulate Mach-O object files.
+- Copyright 2010 Free Software Foundation, Inc.
++ Copyright 2010, 2011 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+ This program is free software; you can redistribute it and/or modify it
+@@ -174,6 +174,15 @@
+
+ #define GNU_SECTION_NAMES "__section_names"
+
++/* A GNU-specific extension to wrap multiple sections using three
++ mach-o sections within a given segment. The section '__wrapper_sects'
++ is subdivided according to the index '__wrapper_index' and each sub
++ sect is named according to the names supplied in '__wrapper_names'. */
++
++#define GNU_WRAPPER_SECTS "__wrapper_sects"
++#define GNU_WRAPPER_INDEX "__wrapper_index"
++#define GNU_WRAPPER_NAMES "__wrapper_names"
++
+ /* Private data for an simple_object_read. */
+
+ struct simple_object_mach_o_read
+@@ -214,7 +223,18 @@
+ unsigned int reserved;
+ };
+
+-/* See if we have a Mach-O file. */
++/* See if we have a Mach-O MH_OBJECT file:
++
++ A standard MH_OBJECT (from as) will have three load commands:
++ 0 - LC_SEGMENT/LC_SEGMENT64
++ 1 - LC_SYMTAB
++ 2 - LC_DYSYMTAB
++
++ The LC_SEGMENT/LC_SEGMENT64 will introduce a single anonymous segment
++ containing all the sections.
++
++ Files written by simple-object will have only the segment command
++ (no symbol tables). */
+
+ static void *
+ simple_object_mach_o_match (
+@@ -356,8 +376,29 @@
+ }
+ }
+
+-/* Handle a segment in a Mach-O file. Return 1 if we should continue,
+- 0 if the caller should return. */
++/* Handle a segment in a Mach-O Object file.
++
++ This will callback to the function pfn for each "section found" the meaning
++ of which depends on gnu extensions to mach-o:
++
++ If we find mach-o sections (with the segment name as specified) which also
++ contain: a 'sects' wrapper, an index, and a name table, we expand this into
++ as many sections as are specified in the index. In this case, there will
++ be a callback for each of these.
++
++ We will also allow an extension that permits long names (more than 16
++ characters) to be used with mach-o. In this case, the section name has
++ a specific format embedding an index into a name table, and the file must
++ contain such name table.
++
++ Return 1 if we should continue, 0 if the caller should return. */
++
++#define SOMO_SECTS_PRESENT 0x01
++#define SOMO_INDEX_PRESENT 0x02
++#define SOMO_NAMES_PRESENT 0x04
++#define SOMO_LONGN_PRESENT 0x08
++#define SOMO_WRAPPING (SOMO_SECTS_PRESENT | SOMO_INDEX_PRESENT \
++ | SOMO_NAMES_PRESENT)
+
+ static int
+ simple_object_mach_o_segment (simple_object_read *sobj, off_t offset,
+@@ -378,9 +419,20 @@
+ unsigned int nsects;
+ unsigned char *secdata;
+ unsigned int i;
++ unsigned int gnu_sections_found;
+ unsigned int strtab_index;
++ unsigned int index_index;
++ unsigned int nametab_index;
++ unsigned int sections_index;
+ char *strtab;
++ char *nametab;
++ unsigned char *index;
+ size_t strtab_size;
++ size_t nametab_size;
++ size_t index_size;
++ unsigned int n_wrapped_sects;
++ size_t wrapper_sect_size;
++ off_t wrapper_sect_offset;
+
+ fetch_32 = (omr->is_big_endian
+ ? simple_object_fetch_big_32
+@@ -409,6 +461,8 @@
+ nsects));
+ }
+
++ /* Fetch the section headers from the segment command. */
++
+ secdata = XNEWVEC (unsigned char, nsects * sechdrsize);
+ if (!simple_object_internal_read (sobj->descriptor, offset + seghdrsize,
+ secdata, nsects * sechdrsize, errmsg, err))
+@@ -417,9 +471,13 @@
+ return 0;
+ }
+
+- /* Scan for a __section_names section. This is in effect a GNU
+- extension that permits section names longer than 16 chars. */
++ /* Scan for special sections that signal GNU extensions to the format. */
+
++ gnu_sections_found = 0;
++ index_index = nsects;
++ sections_index = nsects;
++ strtab_index = nsects;
++ nametab_index = nsects;
+ for (i = 0; i < nsects; ++i)
+ {
+ size_t nameoff;
+@@ -427,19 +485,104 @@
+ nameoff = i * sechdrsize + segname_offset;
+ if (strcmp ((char *) secdata + nameoff, omr->segment_name) != 0)
+ continue;
++
+ nameoff = i * sechdrsize + sectname_offset;
+- if (strcmp ((char *) secdata + nameoff, GNU_SECTION_NAMES) == 0)
+- break;
++ if (strcmp ((char *) secdata + nameoff, GNU_WRAPPER_NAMES) == 0)
++ {
++ nametab_index = i;
++ gnu_sections_found |= SOMO_NAMES_PRESENT;
++ }
++ else if (strcmp ((char *) secdata + nameoff, GNU_WRAPPER_INDEX) == 0)
++ {
++ index_index = i;
++ gnu_sections_found |= SOMO_INDEX_PRESENT;
++ }
++ else if (strcmp ((char *) secdata + nameoff, GNU_WRAPPER_SECTS) == 0)
++ {
++ sections_index = i;
++ gnu_sections_found |= SOMO_SECTS_PRESENT;
++ }
++ else if (strcmp ((char *) secdata + nameoff, GNU_SECTION_NAMES) == 0)
++ {
++ strtab_index = i;
++ gnu_sections_found |= SOMO_LONGN_PRESENT;
++ }
+ }
+
+- strtab_index = i;
+- if (strtab_index >= nsects)
++ /* If any of the special wrapper section components is present, then
++ they all should be. */
++
++ if ((gnu_sections_found & SOMO_WRAPPING) != 0)
+ {
+- strtab = NULL;
+- strtab_size = 0;
++ off_t nametab_offset;
++ off_t index_offset;
++
++ if ((gnu_sections_found & SOMO_WRAPPING) != SOMO_WRAPPING)
++ {
++ *errmsg = "GNU Mach-o section wrapper: required section missing";
++ *err = 0; /* No useful errno. */
++ XDELETEVEC (secdata);
++ return 0;
++ }
++
++ /* Fetch the name table. */
++
++ simple_object_mach_o_section_info (omr->is_big_endian, is_32,
++ secdata + nametab_index * sechdrsize,
++ &nametab_offset, &nametab_size);
++ nametab = XNEWVEC (char, nametab_size);
++ if (!simple_object_internal_read (sobj->descriptor,
++ sobj->offset + nametab_offset,
++ (unsigned char *) nametab, nametab_size,
++ errmsg, err))
++ {
++ XDELETEVEC (nametab);
++ XDELETEVEC (secdata);
++ return 0;
++ }
++
++ /* Fetch the index. */
++
++ simple_object_mach_o_section_info (omr->is_big_endian, is_32,
++ secdata + index_index * sechdrsize,
++ &index_offset, &index_size);
++ index = XNEWVEC (unsigned char, index_size);
++ if (!simple_object_internal_read (sobj->descriptor,
++ sobj->offset + index_offset,
++ index, index_size,
++ errmsg, err))
++ {
++ XDELETEVEC (index);
++ XDELETEVEC (nametab);
++ XDELETEVEC (secdata);
++ return 0;
++ }
++
++ /* The index contains 4 unsigned ints per sub-section:
++ sub-section offset/length, sub-section name/length.
++ We fix this for both 32 and 64 bit mach-o for now, since
++ other fields limit the maximum size of an object to 4G. */
++ n_wrapped_sects = index_size / 16;
++
++ /* Get the parameters for the wrapper too. */
++ simple_object_mach_o_section_info (omr->is_big_endian, is_32,
++ secdata + sections_index * sechdrsize,
++ &wrapper_sect_offset,
++ &wrapper_sect_size);
+ }
+ else
+ {
++ index = NULL;
++ index_size = 0;
++ nametab = NULL;
++ nametab_size = 0;
++ n_wrapped_sects = 0;
++ }
++
++ /* If we have a long names section, fetch it. */
++
++ if ((gnu_sections_found & SOMO_LONGN_PRESENT) != 0)
++ {
+ off_t strtab_offset;
+
+ simple_object_mach_o_section_info (omr->is_big_endian, is_32,
+@@ -452,52 +595,120 @@
+ errmsg, err))
+ {
+ XDELETEVEC (strtab);
++ XDELETEVEC (index);
++ XDELETEVEC (nametab);
+ XDELETEVEC (secdata);
+ return 0;
+ }
+ }
++ else
++ {
++ strtab = NULL;
++ strtab_size = 0;
++ strtab_index = nsects;
++ }
+
+ /* Process the sections. */
+
+ for (i = 0; i < nsects; ++i)
+ {
+ const unsigned char *sechdr;
+- char namebuf[MACH_O_NAME_LEN + 1];
++ char namebuf[MACH_O_NAME_LEN * 2 + 2];
+ char *name;
+ off_t secoffset;
+ size_t secsize;
++ int l;
++
++ sechdr = secdata + i * sechdrsize;
++
++ /* We've already processed the long section names. */
+
+- if (i == strtab_index)
++ if ((gnu_sections_found & SOMO_LONGN_PRESENT) != 0
++ && i == strtab_index)
+ continue;
+
+- sechdr = secdata + i * sechdrsize;
++ /* We only act on the segment named. */
+
+ if (strcmp ((char *) sechdr + segname_offset, omr->segment_name) != 0)
+ continue;
+
+- memcpy (namebuf, sechdr + sectname_offset, MACH_O_NAME_LEN);
+- namebuf[MACH_O_NAME_LEN] = '\0';
++ /* Process sections associated with the wrapper. */
+
+- name = &namebuf[0];
+- if (strtab != NULL && name[0] == '_' && name[1] == '_')
++ if ((gnu_sections_found & SOMO_WRAPPING) != 0)
+ {
+- unsigned long stringoffset;
++ if (i == nametab_index || i == index_index)
++ continue;
+
+- if (sscanf (name + 2, "%08lX", &stringoffset) == 1)
++ if (i == sections_index)
+ {
+- if (stringoffset >= strtab_size)
++ unsigned int j;
++ for (j = 0; j < n_wrapped_sects; ++j)
+ {
+- *errmsg = "section name offset out of range";
+- *err = 0;
+- XDELETEVEC (strtab);
+- XDELETEVEC (secdata);
+- return 0;
++ unsigned int subsect_offset, subsect_length, name_offset;
++ subsect_offset = (*fetch_32) (index + 16 * j);
++ subsect_length = (*fetch_32) (index + 16 * j + 4);
++ name_offset = (*fetch_32) (index + 16 * j + 8);
++ /* We don't need the name_length yet. */
++
++ secoffset = wrapper_sect_offset + subsect_offset;
++ secsize = subsect_length;
++ name = nametab + name_offset;
++
++ if (!(*pfn) (data, name, secoffset, secsize))
++ {
++ *errmsg = NULL;
++ *err = 0;
++ XDELETEVEC (index);
++ XDELETEVEC (nametab);
++ XDELETEVEC (strtab);
++ XDELETEVEC (secdata);
++ return 0;
++ }
+ }
+-
+- name = strtab + stringoffset;
++ continue;
+ }
+ }
+
++ if ((gnu_sections_found & SOMO_LONGN_PRESENT) != 0)
++ {
++ memcpy (namebuf, sechdr + sectname_offset, MACH_O_NAME_LEN);
++ namebuf[MACH_O_NAME_LEN] = '\0';
++
++ name = &namebuf[0];
++ if (strtab != NULL && name[0] == '_' && name[1] == '_')
++ {
++ unsigned long stringoffset;
++
++ if (sscanf (name + 2, "%08lX", &stringoffset) == 1)
++ {
++ if (stringoffset >= strtab_size)
++ {
++ *errmsg = "section name offset out of range";
++ *err = 0;
++ XDELETEVEC (index);
++ XDELETEVEC (nametab);
++ XDELETEVEC (strtab);
++ XDELETEVEC (secdata);
++ return 0;
++ }
++
++ name = strtab + stringoffset;
++ }
++ }
++ }
++ else
++ {
++ /* Otherwise, make a name like __segment,__section as per the
++ convention in mach-o asm. */
++ name = &namebuf[0];
++ memset (namebuf, 0, MACH_O_NAME_LEN * 2 + 2);
++ memcpy (namebuf, (char *) sechdr + segname_offset, MACH_O_NAME_LEN);
++ l = strlen (namebuf);
++ namebuf[l] = ',';
++ memcpy (namebuf + l + 1, (char *) sechdr + sectname_offset,
++ MACH_O_NAME_LEN);
++ }
++
+ simple_object_mach_o_section_info (omr->is_big_endian, is_32, sechdr,
+ &secoffset, &secsize);
+
+@@ -505,12 +716,16 @@
+ {
+ *errmsg = NULL;
+ *err = 0;
++ XDELETEVEC (index);
++ XDELETEVEC (nametab);
+ XDELETEVEC (strtab);
+ XDELETEVEC (secdata);
+ return 0;
+ }
+ }
+
++ XDELETEVEC (index);
++ XDELETEVEC (nametab);
+ XDELETEVEC (strtab);
+ XDELETEVEC (secdata);
+
+@@ -724,9 +939,9 @@
+ simple_object_mach_o_write_section_header (simple_object_write *sobj,
+ int descriptor,
+ size_t sechdr_offset,
+- const char *name, size_t secaddr,
+- size_t secsize, size_t offset,
+- unsigned int align,
++ const char *name, const char *segn,
++ size_t secaddr, size_t secsize,
++ size_t offset, unsigned int align,
+ const char **errmsg, int *err)
+ {
+ struct simple_object_mach_o_attributes *attrs =
+@@ -748,7 +963,7 @@
+ strncpy ((char *) hdr + offsetof (struct mach_o_section_32, sectname),
+ name, MACH_O_NAME_LEN);
+ strncpy ((char *) hdr + offsetof (struct mach_o_section_32, segname),
+- sobj->segment_name, MACH_O_NAME_LEN);
++ segn, MACH_O_NAME_LEN);
+ set_32 (hdr + offsetof (struct mach_o_section_32, addr), secaddr);
+ set_32 (hdr + offsetof (struct mach_o_section_32, size), secsize);
+ set_32 (hdr + offsetof (struct mach_o_section_32, offset), offset);
+@@ -773,7 +988,7 @@
+ strncpy ((char *) hdr + offsetof (struct mach_o_section_64, sectname),
+ name, MACH_O_NAME_LEN);
+ strncpy ((char *) hdr + offsetof (struct mach_o_section_64, segname),
+- sobj->segment_name, MACH_O_NAME_LEN);
++ segn, MACH_O_NAME_LEN);
+ set_64 (hdr + offsetof (struct mach_o_section_64, addr), secaddr);
+ set_64 (hdr + offsetof (struct mach_o_section_64, size), secsize);
+ set_32 (hdr + offsetof (struct mach_o_section_64, offset), offset);
+@@ -793,11 +1008,25 @@
+ sechdrsize, errmsg, err);
+ }
+
+-/* Write out the single segment and the sections of a Mach-O file. */
++/* Write out the single (anonymous) segment containing the sections of a Mach-O
++ Object file.
++
++ As a GNU extension to mach-o, when the caller specifies a segment name in
++ sobj->segment_name, all the sections passed will be output under a single
++ mach-o section header. The caller's sections are indexed within this
++ 'wrapper' section by a table stored in a second mach-o section. Finally,
++ arbitrary length section names are permitted by the extension and these are
++ stored in a table in a third mach-o section.
++
++ Note that this is only likely to make any sense for the __GNU_LTO segment
++ at present.
++
++ If the wrapper extension is not in force, we assume that the section name
++ is in the form __SEGMENT_NAME,__section_name as per Mach-O asm. */
+
+ static int
+ simple_object_mach_o_write_segment (simple_object_write *sobj, int descriptor,
+- size_t nsects, const char **errmsg,
++ size_t *nsects, const char **errmsg,
+ int *err)
+ {
+ struct simple_object_mach_o_attributes *attrs =
+@@ -814,6 +1043,10 @@
+ simple_object_write_section *section;
+ unsigned char hdrbuf[sizeof (struct mach_o_segment_command_64)];
+ unsigned char *hdr;
++ size_t nsects_in;
++ unsigned int *index;
++ char *snames;
++ unsigned int sect;
+
+ set_32 = (attrs->is_big_endian
+ ? simple_object_set_big_32
+@@ -834,19 +1067,62 @@
+ sechdrsize = sizeof (struct mach_o_section_64);
+ }
+
++ name_offset = 0;
++ *nsects = nsects_in = 0;
++
++ /* Count the number of sections we start with. */
++
++ for (section = sobj->sections; section != NULL; section = section->next)
++ nsects_in++;
++
++ if (sobj->segment_name != NULL)
++ {
++ /* We will only write 3 sections: wrapped data, index and names. */
++
++ *nsects = 3;
++
++ /* The index has four entries per wrapped section:
++ Section Offset, length, Name offset, length.
++ Where the offsets are based at the start of the wrapper and name
++ sections respectively.
++ The values are stored as 32 bit int for both 32 and 64 bit mach-o
++ since the size of a mach-o MH_OBJECT cannot exceed 4G owing to
++ other constraints. */
++
++ index = XNEWVEC (unsigned int, nsects_in * 4);
++
++ /* We now need to figure out the size of the names section. This just
++ stores the names as null-terminated c strings, packed without any
++ alignment padding. */
++
++ for (section = sobj->sections, sect = 0; section != NULL;
++ section = section->next, sect++)
++ {
++ index[sect*4+2] = name_offset;
++ index[sect*4+3] = strlen (section->name) + 1;
++ name_offset += strlen (section->name) + 1;
++ }
++ snames = XNEWVEC (char, name_offset);
++ }
++ else
++ {
++ *nsects = nsects_in;
++ index = NULL;
++ snames = NULL;
++ }
++
+ sechdr_offset = hdrsize + seghdrsize;
+- cmdsize = seghdrsize + nsects * sechdrsize;
++ cmdsize = seghdrsize + *nsects * sechdrsize;
+ offset = hdrsize + cmdsize;
+- name_offset = 0;
+ secaddr = 0;
+
+- for (section = sobj->sections; section != NULL; section = section->next)
++ for (section = sobj->sections, sect = 0;
++ section != NULL; section = section->next, sect++)
+ {
+ size_t mask;
+ size_t new_offset;
+ size_t secsize;
+ struct simple_object_write_section_buffer *buffer;
+- char namebuf[MACH_O_NAME_LEN + 1];
+
+ mask = (1U << section->align) - 1;
+ new_offset = offset + mask;
+@@ -877,39 +1153,126 @@
+ secsize += buffer->size;
+ }
+
+- snprintf (namebuf, sizeof namebuf, "__%08X", name_offset);
++ if (sobj->segment_name != NULL)
++ {
++ index[sect*4+0] = (unsigned int) offset;
++ index[sect*4+1] = secsize;
++ /* Stash the section name in our table. */
++ memcpy (snames + index[sect * 4 + 2], section->name,
++ index[sect * 4 + 3]);
++ }
++ else
++ {
++ char namebuf[MACH_O_NAME_LEN + 1];
++ char segnbuf[MACH_O_NAME_LEN + 1];
++ char *comma;
++
++ /* Try to extract segment,section from the input name. */
++
++ memset (namebuf, 0, sizeof namebuf);
++ memset (segnbuf, 0, sizeof segnbuf);
++ comma = strchr (section->name, ',');
++ if (comma != NULL)
++ {
++ int len = comma - section->name;
++ len = len > MACH_O_NAME_LEN ? MACH_O_NAME_LEN : len;
++ strncpy (namebuf, section->name, len);
++ strncpy (segnbuf, comma + 1, MACH_O_NAME_LEN);
++ }
++ else /* just try to copy the name, leave segment blank. */
++ strncpy (namebuf, section->name, MACH_O_NAME_LEN);
++
++ if (!simple_object_mach_o_write_section_header (sobj, descriptor,
++ sechdr_offset,
++ namebuf, segnbuf,
++ secaddr, secsize,
++ offset,
++ section->align,
++ errmsg, err))
++ return 0;
++ sechdr_offset += sechdrsize;
++ }
++
++ offset += secsize;
++ secaddr += secsize;
++ }
++
++ if (sobj->segment_name != NULL)
++ {
++ size_t secsize;
++ unsigned int i;
++
++ /* Write the section header for the wrapper. */
++ /* Account for any initial aligment - which becomes the alignment for this
++ created section. */
++
++ secsize = (offset - index[0]);
+ if (!simple_object_mach_o_write_section_header (sobj, descriptor,
+- sechdr_offset, namebuf,
+- secaddr, secsize, offset,
+- section->align,
++ sechdr_offset,
++ GNU_WRAPPER_SECTS,
++ sobj->segment_name,
++ 0 /*secaddr*/,
++ secsize, index[0],
++ sobj->sections->align,
+ errmsg, err))
+ return 0;
+
++ /* Subtract the wrapper section start from the begining of each sub
++ section. */
++
++ for (i = 1; i < nsects_in; ++i)
++ index[4 * i] -= index[0];
++ index[0] = 0;
++
+ sechdr_offset += sechdrsize;
+- offset += secsize;
+- name_offset += strlen (section->name) + 1;
+- secaddr += secsize;
+- }
+
+- /* Write out the section names. */
++ /* Write out the section names.
++ ... the header ...
++ name_offset contains the length of the section. It is not aligned. */
+
+- if (!simple_object_mach_o_write_section_header (sobj, descriptor,
+- sechdr_offset,
+- GNU_SECTION_NAMES, secaddr,
+- name_offset, offset, 0,
+- errmsg, err))
+- return 0;
++ if (!simple_object_mach_o_write_section_header (sobj, descriptor,
++ sechdr_offset,
++ GNU_WRAPPER_NAMES,
++ sobj->segment_name,
++ 0 /*secaddr*/,
++ name_offset,
++ offset,
++ 0, errmsg, err))
++ return 0;
+
+- for (section = sobj->sections; section != NULL; section = section->next)
+- {
+- size_t namelen;
++ /* ... and the content.. */
++ if (!simple_object_internal_write (descriptor, offset,
++ (const unsigned char *) snames,
++ name_offset, errmsg, err))
++ return 0;
++
++ sechdr_offset += sechdrsize;
++ secaddr += name_offset;
++ offset += name_offset;
++
++ /* Now do the index, we'll align this to 4 bytes although the read code
++ will handle unaligned. */
++
++ offset += 3;
++ offset &= ~0x03;
++ if (!simple_object_mach_o_write_section_header (sobj, descriptor,
++ sechdr_offset,
++ GNU_WRAPPER_INDEX,
++ sobj->segment_name,
++ 0 /*secaddr*/,
++ nsects_in * 16,
++ offset,
++ 2, errmsg, err))
++ return 0;
+
+- namelen = strlen (section->name) + 1;
++ /* ... and the content.. */
+ if (!simple_object_internal_write (descriptor, offset,
+- (const unsigned char *) section->name,
+- namelen, errmsg, err))
++ (const unsigned char *) index,
++ nsects_in*16, errmsg, err))
+ return 0;
+- offset += namelen;
++
++ XDELETEVEC (index);
++ XDELETEVEC (snames);
+ }
+
+ /* Write out the segment header. */
+@@ -923,9 +1286,8 @@
+ MACH_O_LC_SEGMENT);
+ set_32 (hdr + offsetof (struct mach_o_segment_command_32, cmdsize),
+ cmdsize);
+- strncpy (((char *) hdr
+- + offsetof (struct mach_o_segment_command_32, segname)),
+- sobj->segment_name, MACH_O_NAME_LEN);
++ /* MH_OBJECTS have a single, anonymous, segment - so the segment name
++ is left empty. */
+ /* vmaddr left as zero. */
+ /* vmsize left as zero. */
+ set_32 (hdr + offsetof (struct mach_o_segment_command_32, fileoff),
+@@ -935,7 +1297,7 @@
+ /* maxprot left as zero. */
+ /* initprot left as zero. */
+ set_32 (hdr + offsetof (struct mach_o_segment_command_32, nsects),
+- nsects);
++ *nsects);
+ /* flags left as zero. */
+ }
+ else
+@@ -951,9 +1313,8 @@
+ MACH_O_LC_SEGMENT);
+ set_32 (hdr + offsetof (struct mach_o_segment_command_64, cmdsize),
+ cmdsize);
+- strncpy (((char *) hdr
+- + offsetof (struct mach_o_segment_command_64, segname)),
+- sobj->segment_name, MACH_O_NAME_LEN);
++ /* MH_OBJECTS have a single, anonymous, segment - so the segment name
++ is left empty. */
+ /* vmaddr left as zero. */
+ /* vmsize left as zero. */
+ set_64 (hdr + offsetof (struct mach_o_segment_command_64, fileoff),
+@@ -963,7 +1324,7 @@
+ /* maxprot left as zero. */
+ /* initprot left as zero. */
+ set_32 (hdr + offsetof (struct mach_o_segment_command_64, nsects),
+- nsects);
++ *nsects);
+ /* flags left as zero. */
+ #endif
+ }
+@@ -978,23 +1339,17 @@
+ simple_object_mach_o_write_to_file (simple_object_write *sobj, int descriptor,
+ int *err)
+ {
+- size_t nsects;
+- simple_object_write_section *section;
++ size_t nsects = 0;
+ const char *errmsg;
+
+- /* Start at 1 for symbol_names section. */
+- nsects = 1;
+- for (section = sobj->sections; section != NULL; section = section->next)
+- ++nsects;
++ if (!simple_object_mach_o_write_segment (sobj, descriptor, &nsects,
++ &errmsg, err))
++ return errmsg;
+
+ if (!simple_object_mach_o_write_header (sobj, descriptor, nsects,
+ &errmsg, err))
+ return errmsg;
+
+- if (!simple_object_mach_o_write_segment (sobj, descriptor, nsects,
+- &errmsg, err))
+- return errmsg;
+-
+ return NULL;
+ }
+
+--- a/src/libjava/ChangeLog
++++ b/src/libjava/ChangeLog
+@@ -1,3 +1,16 @@
++2011-11-24 Jakub Jelinek <jakub@redhat.com>
++
++ PR bootstrap/50888
++ * prims.cc: Don't include ctype.h.
++ (c_isspace): Define.
++ (next_property_key, next_property_value): Use it instead
++ of isspace.
++
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure.ac: Fix FreeBSD 10 detection.
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/libjava/classpath/ChangeLog.gcj
++++ b/src/libjava/classpath/ChangeLog.gcj
+@@ -1,3 +1,9 @@
++2011-11-29 Andreas Tobler <andreast@fgznet.ch>
++
++ * config.rpath (ld_shlibs): Fix detection of FreeBSD-10 and up.
++ (libname_spec): Likewise.
++ * configure: Regenerate with autoconf -I ../../.
++
+ 2011-02-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * config.rpath, ltcf-c.sh, ltcf-gcj.sh, ltconfig: Remove
+--- a/src/libjava/classpath/config.rpath
++++ b/src/libjava/classpath/config.rpath
+@@ -361,7 +361,7 @@
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+- freebsd2*)
++ freebsd2.*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+@@ -533,7 +533,7 @@
+ ;;
+ freebsd* | dragonfly*)
+ case "$host_os" in
+- freebsd[123]*)
++ freebsd[23].*)
+ library_names_spec='$libname$shrext$versuffix' ;;
+ *)
+ library_names_spec='$libname$shrext' ;;
+--- a/src/libjava/classpath/configure
++++ b/src/libjava/classpath/configure
+@@ -10025,7 +10025,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -10941,7 +10941,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -10959,7 +10959,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -14225,7 +14225,7 @@
+ esac
+ ;;
+
+- freebsd[12]*)
++ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ ld_shlibs_CXX=no
+@@ -16000,7 +16000,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -16018,7 +16018,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+--- a/src/libjava/configure
++++ b/src/libjava/configure
+@@ -11560,7 +11560,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -12476,7 +12476,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -12494,7 +12494,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -14384,7 +14384,7 @@
+ esac
+ ;;
+
+- freebsd[12]*)
++ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ ld_shlibs_CXX=no
+@@ -16159,7 +16159,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -16177,7 +16177,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -18520,7 +18520,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_GCJ=yes
+ hardcode_minus_L_GCJ=yes
+@@ -20715,7 +20715,7 @@
+ *-*-cygwin*)
+ # Don't set THREADLIBS here. Cygwin doesn't have -lpthread.
+ ;;
+- *-*-freebsd[1234]*)
++ *-*-freebsd[34].*)
+ # Before FreeBSD 5, it didn't have -lpthread (or any library which
+ # merely adds pthread_* functions) but it does have a -pthread switch
+ # which is required at link-time to select -lc_r *instead* of -lc.
+--- a/src/libjava/configure.ac
++++ b/src/libjava/configure.ac
+@@ -1060,7 +1060,7 @@
+ *-*-cygwin*)
+ # Don't set THREADLIBS here. Cygwin doesn't have -lpthread.
+ ;;
+- *-*-freebsd[[1234]]*)
++ *-*-freebsd[[34]].*)
+ # Before FreeBSD 5, it didn't have -lpthread (or any library which
+ # merely adds pthread_* functions) but it does have a -pthread switch
+ # which is required at link-time to select -lc_r *instead* of -lc.
+--- a/src/libjava/libltdl/ChangeLog
++++ b/src/libjava/libltdl/ChangeLog
+@@ -1,3 +1,8 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * acinclude.m4: Additional FreeBSD 10 fixes.
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/libjava/libltdl/acinclude.m4
++++ b/src/libjava/libltdl/acinclude.m4
+@@ -1377,7 +1377,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+@@ -3035,7 +3035,7 @@
+ ;;
+ esac
+ ;;
+- freebsd[[12]]*)
++ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before switch to ELF
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+@@ -5669,7 +5669,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+--- a/src/libjava/libltdl/configure
++++ b/src/libjava/libltdl/configure
+@@ -7355,7 +7355,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -7968,7 +7968,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+--- a/src/libjava/prims.cc
++++ b/src/libjava/prims.cc
+@@ -38,7 +38,6 @@
+ #endif
+
+ #ifndef DISABLE_GETENV_PROPERTIES
+-#include <ctype.h>
+ #include <java-props.h>
+ #define PROCESS_GCJ_PROPERTIES process_gcj_properties()
+ #else
+@@ -985,6 +984,8 @@
+
+ #ifndef DISABLE_GETENV_PROPERTIES
+
++#define c_isspace(c) (memchr (" \t\n\r\v\f", c, 6) != NULL)
++
+ static char *
+ next_property_key (char *s, size_t *length)
+ {
+@@ -993,7 +994,7 @@
+ JvAssert (s);
+
+ // Skip over whitespace
+- while (isspace (*s))
++ while (c_isspace (*s))
+ s++;
+
+ // If we've reached the end, return NULL. Also return NULL if for
+@@ -1005,7 +1006,7 @@
+
+ // Determine the length of the property key.
+ while (s[l] != 0
+- && ! isspace (s[l])
++ && ! c_isspace (s[l])
+ && s[l] != ':'
+ && s[l] != '=')
+ {
+@@ -1027,19 +1028,19 @@
+
+ JvAssert (s);
+
+- while (isspace (*s))
++ while (c_isspace (*s))
+ s++;
+
+ if (*s == ':'
+ || *s == '=')
+ s++;
+
+- while (isspace (*s))
++ while (c_isspace (*s))
+ s++;
+
+ // Determine the length of the property value.
+ while (s[l] != 0
+- && ! isspace (s[l])
++ && ! c_isspace (s[l])
+ && s[l] != ':'
+ && s[l] != '=')
+ {
+--- a/src/libmudflap/ChangeLog
++++ b/src/libmudflap/ChangeLog
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/libmudflap/configure
++++ b/src/libmudflap/configure
+@@ -8818,7 +8818,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -9731,7 +9731,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -9749,7 +9749,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+--- a/src/libobjc/ChangeLog
++++ b/src/libobjc/ChangeLog
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/libobjc/configure
++++ b/src/libobjc/configure
+@@ -8797,7 +8797,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -9713,7 +9713,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -9731,7 +9731,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+--- a/src/libquadmath/ChangeLog
++++ b/src/libquadmath/ChangeLog
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/libquadmath/configure
++++ b/src/libquadmath/configure
+@@ -8727,7 +8727,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -9643,7 +9643,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -9661,7 +9661,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+--- a/src/libssp/ChangeLog
++++ b/src/libssp/ChangeLog
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/libssp/configure
++++ b/src/libssp/configure
+@@ -8864,7 +8864,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -9780,7 +9780,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -9798,7 +9798,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+--- a/src/libstdc++-v3/ChangeLog
++++ b/src/libstdc++-v3/ChangeLog
+@@ -1,3 +1,55 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
++2011-11-16 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR libstdc++/51142
++ * include/debug/unordered_map (unordered_map<>::erase(iterator),
++ unordered_multimap<>::erase(iterator)): Add, consistently with
++ LWG 2059.
++ * include/debug/unordered_set (unordered_set<>::erase(iterator),
++ unordered_multiset<>::erase(iterator)): Likewise.
++ * include/debug/map.h (map<>::erase(iterator)): Likewise.
++ * include/debug/multimap.h (multimap<>::erase(iterator)): Likewise.
++ * include/profile/map.h (map<>::erase(iterator)): Likewise.
++ * include/profile/multimap.h (multimap<>::erase(iterator)): Likewise.
++ * include/bits/hashtable.h (_Hashtable<>::erase(iterator)): Likewise.
++ * include/bits/stl_map.h (map<>::erase(iterator)): Likewise.
++ * include/bits/stl_multimap.h (multimap<>::erase(iterator)): Likewise.
++ * include/bits/stl_tree.h (_Rb_tree<>::erase(iterator)): Likewise.
++ * testsuite/23_containers/unordered_map/erase/51142.cc: New.
++ * testsuite/23_containers/multimap/modifiers/erase/51142.cc: Likewise.
++ * testsuite/23_containers/set/modifiers/erase/51142.cc: Likewise.
++ * testsuite/23_containers/unordered_multimap/erase/51142.cc: Likewise.
++ * testsuite/23_containers/unordered_set/erase/51142.cc: Likewise.
++ * testsuite/23_containers/multiset/modifiers/erase/51142.cc: Likewise.
++ * testsuite/23_containers/unordered_multiset/erase/51142.cc: Likewise.
++ * testsuite/23_containers/map/modifiers/erase/51142.cc: Likewise.
++
++2011-11-15 Jason Dick <dickphd@gmail.com>
++
++ PR libstdc++/51133
++ * include/tr1/poly_hermite.tcc (__poly_hermite_recursion): Fix
++ wrong sign in recursion relation.
++
++2011-11-02 Richard B. Kreckel <kreckel@ginac.de>
++ Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR libstdc++/50880
++ * include/std/complex (__complex_acosh): Fix in a better way,
++ use Kahan's formula.
++ * include/tr1/complex (__complex_acosh): Likewise.
++
++2011-11-02 Richard B. Kreckel <kreckel@ginac.de>
++ Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR libstdc++/50880
++ * include/std/complex (__complex_acosh): Fix for __z.real() < 0.
++ * include/tr1/complex (__complex_acosh): Likewise.
++ * testsuite/26_numerics/complex/50880.cc: New.
++ * testsuite/tr1/8_c_compatibility/complex/50880.cc: Likewise.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/libstdc++-v3/configure
++++ b/src/libstdc++-v3/configure
+@@ -9698,7 +9698,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -10614,7 +10614,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -10632,7 +10632,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -12522,7 +12522,7 @@
+ esac
+ ;;
+
+- freebsd[12]*)
++ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ ld_shlibs_CXX=no
+@@ -14297,7 +14297,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -14315,7 +14315,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+--- a/src/libstdc++-v3/include/bits/hashtable.h
++++ b/src/libstdc++-v3/include/bits/hashtable.h
+@@ -440,6 +440,11 @@
+ iterator
+ erase(const_iterator);
+
++ // LWG 2059.
++ iterator
++ erase(iterator __it)
++ { return erase(const_iterator(__it)); }
++
+ size_type
+ erase(const key_type&);
+
+--- a/src/libstdc++-v3/include/bits/stl_map.h
++++ b/src/libstdc++-v3/include/bits/stl_map.h
+@@ -612,6 +612,11 @@
+ iterator
+ erase(const_iterator __position)
+ { return _M_t.erase(__position); }
++
++ // LWG 2059.
++ iterator
++ erase(iterator __position)
++ { return _M_t.erase(__position); }
+ #else
+ /**
+ * @brief Erases an element from a %map.
+--- a/src/libstdc++-v3/include/bits/stl_multimap.h
++++ b/src/libstdc++-v3/include/bits/stl_multimap.h
+@@ -533,6 +533,11 @@
+ iterator
+ erase(const_iterator __position)
+ { return _M_t.erase(__position); }
++
++ // LWG 2059.
++ iterator
++ erase(iterator __position)
++ { return _M_t.erase(__position); }
+ #else
+ /**
+ * @brief Erases an element from a %multimap.
+--- a/src/libstdc++-v3/include/bits/stl_tree.h
++++ b/src/libstdc++-v3/include/bits/stl_tree.h
+@@ -760,6 +760,16 @@
+ _M_erase_aux(__position);
+ return __result._M_const_cast();
+ }
++
++ // LWG 2059.
++ iterator
++ erase(iterator __position)
++ {
++ iterator __result = __position;
++ ++__result;
++ _M_erase_aux(__position);
++ return __result;
++ }
+ #else
+ void
+ erase(iterator __position)
+--- a/src/libstdc++-v3/include/debug/map.h
++++ b/src/libstdc++-v3/include/debug/map.h
+@@ -273,6 +273,10 @@
+ this->_M_invalidate_if(_Equal(__position.base()));
+ return iterator(_Base::erase(__position.base()), this);
+ }
++
++ iterator
++ erase(iterator __position)
++ { return erase(const_iterator(__position)); }
+ #else
+ void
+ erase(iterator __position)
+--- a/src/libstdc++-v3/include/debug/multimap.h
++++ b/src/libstdc++-v3/include/debug/multimap.h
+@@ -254,6 +254,10 @@
+ this->_M_invalidate_if(_Equal(__position.base()));
+ return iterator(_Base::erase(__position.base()), this);
+ }
++
++ iterator
++ erase(iterator __position)
++ { return erase(const_iterator(__position)); }
+ #else
+ void
+ erase(iterator __position)
+--- a/src/libstdc++-v3/include/debug/unordered_map
++++ b/src/libstdc++-v3/include/debug/unordered_map
+@@ -276,6 +276,10 @@
+ }
+
+ iterator
++ erase(iterator __it)
++ { return erase(const_iterator(__it)); }
++
++ iterator
+ erase(const_iterator __first, const_iterator __last)
+ {
+ __glibcxx_check_erase_range(__first, __last);
+@@ -558,6 +562,10 @@
+ }
+
+ iterator
++ erase(iterator __it)
++ { return erase(const_iterator(__it)); }
++
++ iterator
+ erase(const_iterator __first, const_iterator __last)
+ {
+ __glibcxx_check_erase_range(__first, __last);
+--- a/src/libstdc++-v3/include/debug/unordered_set
++++ b/src/libstdc++-v3/include/debug/unordered_set
+@@ -269,6 +269,10 @@
+ }
+
+ iterator
++ erase(iterator __it)
++ { return erase(const_iterator(__it)); }
++
++ iterator
+ erase(const_iterator __first, const_iterator __last)
+ {
+ __glibcxx_check_erase_range(__first, __last);
+@@ -539,6 +543,10 @@
+ }
+
+ iterator
++ erase(iterator __it)
++ { return erase(const_iterator(__it)); }
++
++ iterator
+ erase(const_iterator __first, const_iterator __last)
+ {
+ __glibcxx_check_erase_range(__first, __last);
+--- a/src/libstdc++-v3/include/profile/map.h
++++ b/src/libstdc++-v3/include/profile/map.h
+@@ -326,6 +326,10 @@
+ __profcxx_map_to_unordered_map_erase(this, size(), 1);
+ return __i;
+ }
++
++ iterator
++ erase(iterator __position)
++ { return erase(const_iterator(__position)); }
+ #else
+ void
+ erase(iterator __position)
+--- a/src/libstdc++-v3/include/profile/multimap.h
++++ b/src/libstdc++-v3/include/profile/multimap.h
+@@ -225,6 +225,10 @@
+ iterator
+ erase(const_iterator __position)
+ { return iterator(_Base::erase(__position)); }
++
++ iterator
++ erase(iterator __position)
++ { return iterator(_Base::erase(__position)); }
+ #else
+ void
+ erase(iterator __position)
+--- a/src/libstdc++-v3/include/std/complex
++++ b/src/libstdc++-v3/include/std/complex
+@@ -1,7 +1,7 @@
+ // The template and inlines for the -*- C++ -*- complex number classes.
+
+ // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+-// 2006, 2007, 2008, 2009, 2010
++// 2006, 2007, 2008, 2009, 2010, 2011
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+@@ -1695,12 +1695,9 @@
+ std::complex<_Tp>
+ __complex_acosh(const std::complex<_Tp>& __z)
+ {
+- std::complex<_Tp> __t((__z.real() - __z.imag())
+- * (__z.real() + __z.imag()) - _Tp(1.0),
+- _Tp(2.0) * __z.real() * __z.imag());
+- __t = std::sqrt(__t);
+-
+- return std::log(__t + __z);
++ // Kahan's formula.
++ return _Tp(2.0) * std::log(std::sqrt(_Tp(0.5) * (__z + _Tp(1.0)))
++ + std::sqrt(_Tp(0.5) * (__z - _Tp(1.0))));
+ }
+
+ #if _GLIBCXX_USE_C99_COMPLEX_TR1
+--- a/src/libstdc++-v3/include/tr1/complex
++++ b/src/libstdc++-v3/include/tr1/complex
+@@ -185,12 +185,9 @@
+ std::complex<_Tp>
+ __complex_acosh(const std::complex<_Tp>& __z)
+ {
+- std::complex<_Tp> __t((__z.real() - __z.imag())
+- * (__z.real() + __z.imag()) - _Tp(1.0),
+- _Tp(2.0) * __z.real() * __z.imag());
+- __t = std::sqrt(__t);
+-
+- return std::log(__t + __z);
++ // Kahan's formula.
++ return _Tp(2.0) * std::log(std::sqrt(_Tp(0.5) * (__z + _Tp(1.0)))
++ + std::sqrt(_Tp(0.5) * (__z - _Tp(1.0))));
+ }
+
+ #if _GLIBCXX_USE_C99_COMPLEX_TR1
+--- a/src/libstdc++-v3/include/tr1/poly_hermite.tcc
++++ b/src/libstdc++-v3/include/tr1/poly_hermite.tcc
+@@ -1,6 +1,6 @@
+ // Special functions -*- C++ -*-
+
+-// Copyright (C) 2006, 2007, 2008, 2009, 2010
++// Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+@@ -84,7 +84,7 @@
+ unsigned int __i;
+ for (__H_nm2 = __H_0, __H_nm1 = __H_1, __i = 2; __i <= __n; ++__i)
+ {
+- __H_n = 2 * (__x * __H_nm1 + (__i - 1) * __H_nm2);
++ __H_n = 2 * (__x * __H_nm1 - (__i - 1) * __H_nm2);
+ __H_nm2 = __H_nm1;
+ __H_nm1 = __H_n;
+ }
+--- a/src/libstdc++-v3/libsupc++/eh_arm.cc
++++ b/src/libstdc++-v3/libsupc++/eh_arm.cc
+@@ -30,10 +30,11 @@
+ using namespace __cxxabiv1;
+
+
+-// Given the thrown type THROW_TYPE, pointer to a variable containing a
+-// pointer to the exception object THROWN_PTR_P and a type CATCH_TYPE to
+-// compare against, return whether or not there is a match and if so,
+-// update *THROWN_PTR_P.
++// Given the thrown type THROW_TYPE, exception object UE_HEADER and a
++// type CATCH_TYPE to compare against, return whether or not there is
++// a match and if so, update *THROWN_PTR_P to point to either the
++// type-matched object, or in the case of a pointer type, the object
++// pointed to by the pointer.
+
+ extern "C" __cxa_type_match_result
+ __cxa_type_match(_Unwind_Exception* ue_header,
+@@ -41,51 +42,51 @@
+ bool is_reference __attribute__((__unused__)),
+ void** thrown_ptr_p)
+ {
+- bool forced_unwind = __is_gxx_forced_unwind_class(ue_header->exception_class);
+- bool foreign_exception = !forced_unwind && !__is_gxx_exception_class(ue_header->exception_class);
+- bool dependent_exception =
+- __is_dependent_exception(ue_header->exception_class);
++ bool forced_unwind
++ = __is_gxx_forced_unwind_class(ue_header->exception_class);
++ bool foreign_exception
++ = !forced_unwind && !__is_gxx_exception_class(ue_header->exception_class);
++ bool dependent_exception
++ = __is_dependent_exception(ue_header->exception_class);
+ __cxa_exception* xh = __get_exception_header_from_ue(ue_header);
+ __cxa_dependent_exception *dx = __get_dependent_exception_from_ue(ue_header);
+ const std::type_info* throw_type;
++ void *thrown_ptr = 0;
+
+ if (forced_unwind)
+ throw_type = &typeid(abi::__forced_unwind);
+ else if (foreign_exception)
+ throw_type = &typeid(abi::__foreign_exception);
+- else if (dependent_exception)
+- throw_type = __get_exception_header_from_obj
+- (dx->primaryException)->exceptionType;
+ else
+- throw_type = xh->exceptionType;
+-
+- void* thrown_ptr = *thrown_ptr_p;
++ {
++ if (dependent_exception)
++ xh = __get_exception_header_from_obj (dx->primaryException);
++ throw_type = xh->exceptionType;
++ // We used to require the caller set the target of thrown_ptr_p,
++ // but that's incorrect -- the EHABI makes no such requirement
++ // -- and not all callers will set it. Fortunately callers that
++ // do initialize will always pass us the value we calculate
++ // here, so there's no backwards compatibility problem.
++ thrown_ptr = __get_object_from_ue (ue_header);
++ }
++
++ __cxa_type_match_result result = ctm_succeeded;
+
+ // Pointer types need to adjust the actual pointer, not
+ // the pointer to pointer that is the exception object.
+ // This also has the effect of passing pointer types
+ // "by value" through the __cxa_begin_catch return value.
+ if (throw_type->__is_pointer_p())
+- thrown_ptr = *(void**) thrown_ptr;
++ {
++ thrown_ptr = *(void**) thrown_ptr;
++ // We need to indicate the indirection to our caller.
++ result = ctm_succeeded_with_ptr_to_base;
++ }
+
+ if (catch_type->__do_catch(throw_type, &thrown_ptr, 1))
+ {
+ *thrown_ptr_p = thrown_ptr;
+-
+- if (typeid(*catch_type) == typeid (typeid(void*)))
+- {
+- const __pointer_type_info *catch_pointer_type =
+- static_cast<const __pointer_type_info *> (catch_type);
+- const __pointer_type_info *throw_pointer_type =
+- static_cast<const __pointer_type_info *> (throw_type);
+-
+- if (typeid (*catch_pointer_type->__pointee) != typeid (void)
+- && (*catch_pointer_type->__pointee !=
+- *throw_pointer_type->__pointee))
+- return ctm_succeeded_with_ptr_to_base;
+- }
+-
+- return ctm_succeeded;
++ return result;
+ }
+
+ return ctm_failed;
+--- a/src/libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc
++++ b/src/libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <map>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator<(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::map<X, int>& s, X x)
++{
++ std::map<X, int>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+--- a/src/libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc
++++ b/src/libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <map>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator<(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::multimap<X, int>& s, X x)
++{
++ std::multimap<X, int>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+--- a/src/libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc
++++ b/src/libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <set>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator<(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::multiset<X>& s, X x)
++{
++ std::multiset<X>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+--- a/src/libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc
++++ b/src/libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <set>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator<(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::set<X>& s, X x)
++{
++ std::set<X>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+--- a/src/libstdc++-v3/testsuite/23_containers/unordered_map/erase/51142.cc
++++ b/src/libstdc++-v3/testsuite/23_containers/unordered_map/erase/51142.cc
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <unordered_map>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator==(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::unordered_map<X, int>& s, X x)
++{
++ std::unordered_map<X, int>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+--- a/src/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51142.cc
++++ b/src/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51142.cc
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <unordered_map>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator==(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::unordered_multimap<X, int>& s, X x)
++{
++ std::unordered_multimap<X, int>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+--- a/src/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/51142.cc
++++ b/src/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/51142.cc
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <unordered_set>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator==(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::unordered_multiset<X>& s, X x)
++{
++ std::unordered_multiset<X>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+--- a/src/libstdc++-v3/testsuite/23_containers/unordered_set/erase/51142.cc
++++ b/src/libstdc++-v3/testsuite/23_containers/unordered_set/erase/51142.cc
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <unordered_set>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator==(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::unordered_set<X>& s, X x)
++{
++ std::unordered_set<X>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+--- a/src/libstdc++-v3/testsuite/26_numerics/complex/50880.cc
++++ b/src/libstdc++-v3/testsuite/26_numerics/complex/50880.cc
+@@ -0,0 +1,53 @@
++// { dg-options "-std=gnu++0x" }
++//
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <complex>
++#include <testsuite_hooks.h>
++
++template<typename T>
++ void test01_do()
++ {
++ bool test __attribute__((unused)) = true;
++
++ const std::complex<T> ca(T(-2), T(2));
++ const std::complex<T> cb(T(-2), T(0));
++ const std::complex<T> cc(T(-2), T(-2));
++
++ std::complex<T> cra = std::acosh(ca);
++ std::complex<T> crb = std::acosh(cb);
++ std::complex<T> crc = std::acosh(cc);
++
++ VERIFY( cra.real() > T(0) );
++ VERIFY( crb.real() > T(0) );
++ VERIFY( crc.real() > T(0) );
++ }
++
++// libstdc++/50880
++void test01()
++{
++ test01_do<float>();
++ test01_do<double>();
++ test01_do<long double>();
++}
++
++int main()
++{
++ test01();
++ return 0;
++}
+--- a/src/libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc
++++ b/src/libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc
+@@ -0,0 +1,51 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <tr1/complex>
++#include <testsuite_hooks.h>
++
++template<typename T>
++ void test01_do()
++ {
++ bool test __attribute__((unused)) = true;
++
++ const std::complex<T> ca(T(-2), T(2));
++ const std::complex<T> cb(T(-2), T(0));
++ const std::complex<T> cc(T(-2), T(-2));
++
++ std::complex<T> cra = std::tr1::acosh(ca);
++ std::complex<T> crb = std::tr1::acosh(cb);
++ std::complex<T> crc = std::tr1::acosh(cc);
++
++ VERIFY( cra.real() > T(0) );
++ VERIFY( crb.real() > T(0) );
++ VERIFY( crc.real() > T(0) );
++ }
++
++// libstdc++/50880
++void test01()
++{
++ test01_do<float>();
++ test01_do<double>();
++ test01_do<long double>();
++}
++
++int main()
++{
++ test01();
++ return 0;
++}
+--- a/src/libtool.m4
++++ b/src/libtool.m4
+@@ -2273,7 +2273,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[[123]]*) objformat=aout ;;
++ freebsd[[23]].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -2291,7 +2291,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+@@ -4804,7 +4804,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+@@ -5751,7 +5751,7 @@
+ esac
+ ;;
+
+- freebsd[[12]]*)
++ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ _LT_TAGVAR(ld_shlibs, $1)=no
+--- a/src/lto-plugin/ChangeLog
++++ b/src/lto-plugin/ChangeLog
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/lto-plugin/configure
++++ b/src/lto-plugin/configure
+@@ -8733,7 +8733,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -9646,7 +9646,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -9664,7 +9664,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+--- a/src/maintainer-scripts/ChangeLog
++++ b/src/maintainer-scripts/ChangeLog
+@@ -1,3 +1,8 @@
++2011-11-23 Gerald Pfeifer <gerald@pfeifer.com>
++
++ * update_web_docs_svn: Make $DOCSDIR group writable after
++ creating it.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/maintainer-scripts/update_web_docs_svn
++++ b/src/maintainer-scripts/update_web_docs_svn
+@@ -93,6 +93,7 @@
+
+ if [ ! -d $DOCSDIR ]; then
+ mkdir $DOCSDIR
++ chmod g+w $DOCSDIR
+ fi
+
+ if [ -z "$RELEASE" ]; then
+--- a/src/zlib/ChangeLog
++++ b/src/zlib/ChangeLog
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+--- a/src/zlib/configure
++++ b/src/zlib/configure
+@@ -8600,7 +8600,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -9516,7 +9516,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -9534,7 +9534,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
diff --git a/debian/patches/gcc-multiarch-doc.diff b/debian/patches/gcc-multiarch-doc.diff
new file mode 100644
index 0000000..b86378c
--- /dev/null
+++ b/debian/patches/gcc-multiarch-doc.diff
@@ -0,0 +1,16 @@
+# DP: Document -print-multiarch option
+
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -5937,6 +5937,11 @@
+ @file{../lib32}, or if OS libraries are present in @file{lib/@var{subdir}}
+ subdirectories it prints e.g.@: @file{amd64}, @file{sparcv9} or @file{ev6}.
+
++@item -print-multiarch
++@opindex print-multiarch
++Print the path to OS libraries for the selected multiarch,
++relative to some @file{lib} subdirectory.
++
+ @item -print-prog-name=@var{program}
+ @opindex print-prog-name
+ Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.
diff --git a/debian/patches/gcc-multiarch.diff b/debian/patches/gcc-multiarch.diff
new file mode 100644
index 0000000..d2a05ac
--- /dev/null
+++ b/debian/patches/gcc-multiarch.diff
@@ -0,0 +1,636 @@
+# DP: Add multiarch support to GCC.
+# DP:
+# DP: Convert the multilib option to a target triplet,
+# DP: add multiarch include directories and libraries path:
+# DP: /usr/local/include/<arch>-linux-gnu
+# DP: /usr/include/<arch>-linux-gnu
+# DP: /usr/lib/<arch>-linux-gnu
+# DP: to the system paths.
+
+2011-08-18 Matthias Klose <doko@ubuntu.com>
+
+ * doc/invoke.texi: Document -print-multiarch.
+ * Makefile.in (s-mlib): Pass MULTIARCH_DIRNAME to genmultilib.
+ * genmultilib: Add new option for the multiarch name.
+ * gcc.c (multiarch_dir): Define.
+ (for_each_path): Search for multiarch suffixes.
+ (driver_handle_option): Handle multiarch option.
+ (do_spec_1): Pass -imultiarch if defined.
+ (main): Print multiarch.
+ (set_multilib_dir): Separate multilib and multiarch names
+ from multilib_select.
+ (print_multilib_info): Ignore multiarch names in multilib_select.
+ * incpath.c (add_standard_paths): Search the multiarch include dirs.
+ * cppdeault.h (default_include): Document multiarch in multilib
+ member.
+ * cppdefault.c: [LOCAL_INCLUDE_DIR, STANDARD_INCLUDE_DIR] Add an
+ include directory for multiarch directories.
+ * common.opt: New options --print-multiarch and -imultilib.
+ * config/s390/t-linux64: Add multiarch names in MULTILIB_OSDIRNAMES.
+ * config/sparc/t-linux64: Likewise.
+ * config/powerpc/t-linux64: Likewise.
+ * config/i386/t-linux64: Likewise.
+ * config/mips/t-linux64: Likewise.
+ * config/alpha/t-linux: Define MULTIARCH_DIRNAME.
+ * config/arm/t-linux: Likewise.
+ * config/i386/t-linux: Likewise.
+ * config/pa/t-linux: Likewise.
+ * config/sparc/t-linux: Likewise.
+ * config/ia64/t-glibc: Define MULTIARCH_DIRNAME for linux target.
+
+
+Index: b/src/gcc/incpath.c
+===================================================================
+--- a/src/gcc/incpath.c
++++ b/src/gcc/incpath.c
+@@ -150,8 +150,14 @@
+ if (!strncmp (p->fname, cpp_GCC_INCLUDE_DIR, len))
+ {
+ char *str = concat (iprefix, p->fname + len, NULL);
+- if (p->multilib && imultilib)
++ if (p->multilib == 1 && imultilib)
+ str = concat (str, dir_separator_str, imultilib, NULL);
++ else if (p->multilib == 2)
++ {
++ if (!imultiarch)
++ continue;
++ str = concat (str, dir_separator_str, imultiarch, NULL);
++ }
+ add_path (str, SYSTEM, p->cxx_aware, false);
+ }
+ }
+@@ -195,8 +201,14 @@
+ else
+ str = update_path (p->fname, p->component);
+
+- if (p->multilib && imultilib)
++ if (p->multilib == 1 && imultilib)
+ str = concat (str, dir_separator_str, imultilib, NULL);
++ else if (p->multilib == 2)
++ {
++ if (!imultiarch)
++ continue;
++ str = concat (str, dir_separator_str, imultiarch, NULL);
++ }
+
+ add_path (str, SYSTEM, p->cxx_aware, false);
+ }
+Index: b/src/gcc/gcc.c
+===================================================================
+--- a/src/gcc/gcc.c
++++ b/src/gcc/gcc.c
+@@ -1135,6 +1135,11 @@
+ set_multilib_dir based on the compilation options. */
+
+ static const char *multilib_os_dir;
++
++/* Subdirectory to use for locating libraries in multiarch conventions. Set by
++ set_multilib_dir based on the compilation options. */
++
++static const char *multiarch_dir;
+
+ /* Structure to keep track of the specs that have been defined so far.
+ These are accessed using %(specname) or %[specname] in a compiler
+@@ -2048,6 +2053,7 @@
+ struct prefix_list *pl;
+ const char *multi_dir = NULL;
+ const char *multi_os_dir = NULL;
++ const char *multiarch_suffix = NULL;
+ const char *multi_suffix;
+ const char *just_multi_suffix;
+ char *path = NULL;
+@@ -2065,11 +2071,14 @@
+ }
+ if (do_multi && multilib_os_dir && strcmp (multilib_os_dir, ".") != 0)
+ multi_os_dir = concat (multilib_os_dir, dir_separator_str, NULL);
++ if (multiarch_dir)
++ multiarch_suffix = concat (multiarch_dir, dir_separator_str, NULL);
+
+ while (1)
+ {
+ size_t multi_dir_len = 0;
+ size_t multi_os_dir_len = 0;
++ size_t multiarch_len = 0;
+ size_t suffix_len;
+ size_t just_suffix_len;
+ size_t len;
+@@ -2102,16 +2111,15 @@
+ multi_dir_len = strlen (multi_dir);
+ if (multi_os_dir)
+ multi_os_dir_len = strlen (multi_os_dir);
++ if (multiarch_suffix)
++ multiarch_len = strlen (multiarch_suffix);
+ suffix_len = strlen (multi_suffix);
+ just_suffix_len = strlen (just_multi_suffix);
+
+ if (path == NULL)
+ {
+ len = paths->max_len + extra_space + 1;
+- if (suffix_len > multi_os_dir_len)
+- len += suffix_len;
+- else
+- len += multi_os_dir_len;
++ len += MAX (MAX (suffix_len, multi_os_dir_len), multiarch_len);
+ path = XNEWVEC (char, len);
+ }
+
+@@ -2116,6 +2127,16 @@
+ break;
+ }
+
++ /* Now try the multiarch path. */
++ if (!skip_multi_dir
++ && !pl->require_machine_suffix && multiarch_dir)
++ {
++ memcpy (path + len, multiarch_suffix, multiarch_len + 1);
++ ret = callback (path, callback_info);
++ if (ret)
++ break;
++ }
++
+ /* Now try the base path. */
+ if (!pl->require_machine_suffix
+ && !(pl->os_multilib ? skip_multi_os_dir : skip_multi_dir))
+@@ -3217,6 +3238,7 @@
+ case OPT_print_multi_directory:
+ case OPT_print_sysroot:
+ case OPT_print_multi_os_directory:
++ case OPT_print_multiarch:
+ case OPT_print_sysroot_headers_suffix:
+ case OPT_time:
+ case OPT_wrapper:
+@@ -4867,6 +4889,15 @@
+ do_spec_1 (" ", 0, NULL);
+ }
+
++ if (multiarch_dir)
++ {
++ do_spec_1 ("-imultiarch", 1, NULL);
++ /* Make this a separate argument. */
++ do_spec_1 (" ", 0, NULL);
++ do_spec_1 (multiarch_dir, 1, NULL);
++ do_spec_1 (" ", 0, NULL);
++ }
++
+ if (gcc_exec_prefix)
+ {
+ do_spec_1 ("-iprefix", 1, NULL);
+@@ -6812,6 +6843,15 @@
+ return (0);
+ }
+
++ if (print_multiarch)
++ {
++ if (multiarch_dir == NULL)
++ printf ("\n");
++ else
++ printf ("%s\n", multiarch_dir);
++ return (0);
++ }
++
+ if (print_sysroot)
+ {
+ if (target_system_root)
+@@ -7787,10 +7827,26 @@
+ q++;
+ if (q < end)
+ {
+- char *new_multilib_os_dir = XNEWVEC (char, end - q);
++ const char *q2 = q + 1;
++ char *new_multilib_os_dir;
++
++ while (q2 < end && *q2 != ':')
++ q2++;
++ if (*q2 == ':')
++ end = q2;
++ new_multilib_os_dir = XNEWVEC (char, end - q);
+ memcpy (new_multilib_os_dir, q + 1, end - q - 1);
+ new_multilib_os_dir[end - q - 1] = '\0';
+ multilib_os_dir = new_multilib_os_dir;
++
++ end = this_path + this_path_len;
++ if (q2 < end && *q2 == ':')
++ {
++ char *new_multiarch_dir = XNEWVEC (char, end - q2);
++ memcpy (new_multiarch_dir, q2 + 1, end - q2 - 1);
++ new_multiarch_dir[end - q2 - 1] = '\0';
++ multiarch_dir = new_multiarch_dir;
++ }
+ break;
+ }
+ }
+@@ -7852,7 +7908,7 @@
+ /* When --disable-multilib was used but target defines
+ MULTILIB_OSDIRNAMES, entries starting with .: are there just
+ to find multilib_os_dir, so skip them from output. */
+- if (this_path[0] == '.' && this_path[1] == ':')
++ if (this_path[0] == '.' && this_path[1] == ':' && this_path[2] != '.' && this_path[3] != ':')
+ skip = 1;
+
+ /* Check for matches with the multilib_exclusions. We don't bother
+Index: b/src/gcc/genmultilib
+===================================================================
+--- a/src/gcc/genmultilib
++++ b/src/gcc/genmultilib
+@@ -73,6 +73,8 @@
+ # the os directory names are used exclusively. Use the mapping when
+ # there is no one-to-one equivalence between GCC levels and the OS.
+
++# The optional eight argument is the multiarch name.
++
+ # The last option should be "yes" if multilibs are enabled. If it is not
+ # "yes", all GCC multilib dir names will be ".".
+
+@@ -121,7 +123,8 @@
+ extra=$5
+ exclusions=$6
+ osdirnames=$7
+-enable_multilib=$8
++multiarch=$8
++enable_multilib=$9
+
+ echo "static const char *const multilib_raw[] = {"
+
+@@ -222,6 +225,9 @@
+ # names.
+ toosdirnames=
+ defaultosdirname=
++if [ -n "${multiarch}" ]; then
++ defaultosdirname=:.:${multiarch}
++fi
+ if [ -n "${osdirnames}" ]; then
+ set x ${osdirnames}
+ shift
+@@ -229,6 +235,9 @@
+ case "$1" in
+ .=*)
+ defaultosdirname=`echo $1 | sed 's|^.=|:|'`
++ if [ -n "${multiarch}" ]; then
++ defaultosdirname=${defaultosdirname}:${multiarch}
++ fi
+ shift
+ ;;
+ *=*)
+@@ -314,13 +323,13 @@
+ dirout=`echo ${combo} | sed -e 's/=/-/g'`
+ fi
+ # Remove the leading and trailing slashes.
+- dirout=`echo ${dirout} | sed -e 's|^/||' -e 's|/$||g'`
++ dirout=`echo ${dirout} | sed -e 's|^/||' -e 's|/*:/*|:|' -e 's|/$||g'`
+
+ # Use the OS directory names rather than the option names.
+ if [ -n "${toosdirnames}" ]; then
+ osdirout=`echo ${combo} | sed ${toosdirnames}`
+ # Remove the leading and trailing slashes.
+- osdirout=`echo ${osdirout} | sed -e 's|^/||' -e 's|/$||g'`
++ osdirout=`echo ${osdirout} | sed -e 's|^/||' -e 's|/*:/*|:|' -e 's|/$||g'`
+ if [ "x${enable_multilib}" != xyes ]; then
+ dirout=".:${osdirout}"
+ disable_multilib=yes
+Index: b/src/gcc/cppdefault.c
+===================================================================
+--- a/src/gcc/cppdefault.c
++++ b/src/gcc/cppdefault.c
+@@ -64,6 +64,7 @@
+ #endif
+ #ifdef LOCAL_INCLUDE_DIR
+ /* /usr/local/include comes before the fixincluded header files. */
++ { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 },
+ { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },
+ #endif
+ #ifdef PREFIX_INCLUDE_DIR
+@@ -95,6 +96,7 @@
+ #endif
+ #ifdef STANDARD_INCLUDE_DIR
+ /* /usr/include comes dead last. */
++ { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1, 2 },
+ { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1, 0 },
+ #endif
+ { 0, 0, 0, 0, 0, 0 }
+Index: b/src/gcc/cppdefault.h
+===================================================================
+--- a/src/gcc/cppdefault.h
++++ b/src/gcc/cppdefault.h
+@@ -43,9 +43,11 @@
+ C++. */
+ const char add_sysroot; /* FNAME should be prefixed by
+ cpp_SYSROOT. */
+- const char multilib; /* FNAME should have the multilib path
+- specified with -imultilib
+- appended. */
++ const char multilib; /* FNAME should have appended
++ - the multilib path specified with -imultilib
++ when 1 is passed,
++ - the multiarch path specified with
++ -imultiarch, when 2 is passed. */
+ };
+
+ extern const struct default_include cpp_include_defaults[];
+Index: b/src/gcc/common.opt
+===================================================================
+--- a/src/gcc/common.opt
++++ b/src/gcc/common.opt
+@@ -334,6 +334,9 @@
+ -print-multi-os-directory
+ Driver Alias(print-multi-os-directory)
+
++-print-multiarch
++Driver Alias(print-multiarch)
++
+ -print-prog-name
+ Driver Separate Alias(print-prog-name=)
+
+@@ -2190,6 +2193,10 @@
+ Common Joined Var(plugindir_string) Init(0)
+ -iplugindir=<dir> Set <dir> to be the default plugin directory
+
++imultiarch
++Common Joined Separate RejectDriver Var(imultiarch) Init(0)
++-imultiarch <dir> Set <dir> to be the multiarch include subdirectory
++
+ l
+ Driver Joined Separate
+
+@@ -2247,6 +2254,9 @@
+
+ print-multi-os-directory
+ Driver Var(print_multi_os_directory)
++
++print-multiarch
++Driver Var(print_multiarch)
+
+ print-prog-name=
+ Driver JoinedOrMissing Var(print_prog_name)
+Index: b/src/gcc/Makefile.in
+===================================================================
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -338,6 +338,8 @@
+
+ enable_plugin = @enable_plugin@
+
++with_float = @with_float@
++
+ CPPLIB = ../libcpp/libcpp.a
+ CPPINC = -I$(srcdir)/../libcpp/include
+
+@@ -1943,10 +1945,11 @@
+ "$(MULTILIB_EXTRA_OPTS)" \
+ "$(MULTILIB_EXCLUSIONS)" \
+ "$(MULTILIB_OSDIRNAMES)" \
++ "$(MULTIARCH_DIRNAME)" \
+ "@enable_multilib@" \
+ > tmp-mlib.h; \
+ else \
+- $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' no \
++ $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' "$(MULTIARCH_DIRNAME)" no \
+ > tmp-mlib.h; \
+ fi
+ $(SHELL) $(srcdir)/../move-if-change tmp-mlib.h multilib.h
+Index: b/src/gcc/config/alpha/t-linux
+===================================================================
+--- a/src/gcc/config/alpha/t-linux
++++ b/src/gcc/config/alpha/t-linux
+@@ -1 +1,3 @@
+ SHLIB_MAPFILES += $(srcdir)/config/alpha/libgcc-alpha-ldbl.ver
++
++MULTIARCH_DIRNAME = alpha-linux-gnu
+Index: b/src/gcc/config/s390/t-linux64
+===================================================================
+--- a/src/gcc/config/s390/t-linux64
++++ b/src/gcc/config/s390/t-linux64
+@@ -7,4 +7,4 @@
+
+ MULTILIB_OPTIONS = m64/m31
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
++MULTILIB_OSDIRNAMES = ../lib64:s390x-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):s390-linux-gnu
+Index: b/src/gcc/config/sparc/t-linux64
+===================================================================
+--- a/src/gcc/config/sparc/t-linux64
++++ b/src/gcc/config/sparc/t-linux64
+@@ -26,7 +26,7 @@
+
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
++MULTILIB_OSDIRNAMES = ../lib64:sparc64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):sparc-linux-gnu
+
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+Index: b/src/gcc/config/sparc/t-linux
+===================================================================
+--- a/src/gcc/config/sparc/t-linux
++++ b/src/gcc/config/sparc/t-linux
+@@ -3,3 +3,5 @@
+ # Avoid the t-linux version file.
+ SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \
+ $(srcdir)/config/sparc/libgcc-sparc-glibc.ver
++
++MULTIARCH_DIRNAME = sparc-linux-gnu
+Index: b/src/gcc/config/i386/t-linux
+===================================================================
+--- a/src/gcc/config/i386/t-linux
++++ b/src/gcc/config/i386/t-linux
+@@ -3,3 +3,5 @@
+ # t-slibgcc-elf-ver and t-linux
+ SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \
+ $(srcdir)/config/i386/libgcc-glibc.ver
++
++MULTIARCH_DIRNAME = i386-linux-gnu
+Index: b/src/gcc/config/i386/t-linux64
+===================================================================
+--- a/src/gcc/config/i386/t-linux64
++++ b/src/gcc/config/i386/t-linux64
+@@ -25,7 +25,11 @@
+
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
++MULTILIB_OSDIRNAMES = ../lib64:x86_64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):i386-linux-gnu
++
++ifneq (,$(findstring kfreebsd, $(target)))
++ MULTILIB_OSDIRNAMES := $(subst linux,kfreebsd,$(MULTILIB_OSDIRNAMES))
++endif
+
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+Index: b/src/gcc/config/ia64/t-glibc
+===================================================================
+--- a/src/gcc/config/ia64/t-glibc
++++ b/src/gcc/config/ia64/t-glibc
+@@ -3,3 +3,7 @@
+ $(srcdir)/unwind-compat.c
+
+ SHLIB_MAPFILES += $(srcdir)/config/ia64/libgcc-glibc.ver
++
++ifneq (,$(findstring linux, $(target)))
++MULTIARCH_DIRNAME = ia64-linux-gnu
++endif
+Index: b/src/gcc/config/m68k/t-linux
+===================================================================
+--- a/src/gcc/config/m68k/t-linux
++++ b/src/gcc/config/m68k/t-linux
+@@ -21,6 +21,9 @@
+ # Only include multilibs for 680x0 CPUs with an MMU.
+ M68K_MLIB_CPU += && (CPU ~ "^m680") && (FLAGS ~ "FL_MMU")
+
++MULTILIB_OSDIRNAMES = m68k-linux-gnu:m68k-linux-gnu
++MULTIARCH_DIRNAME = m68k-linux-gnu
++
+ # This rule uses MULTILIB_MATCHES to generate a definition of
+ # SYSROOT_SUFFIX_SPEC.
+ sysroot-suffix.h: $(srcdir)/config/m68k/print-sysroot-suffix.sh
+Index: b/src/gcc/config/rs6000/t-linux64
+===================================================================
+--- a/src/gcc/config/rs6000/t-linux64
++++ b/src/gcc/config/rs6000/t-linux64
+@@ -36,7 +36,7 @@
+ MULTILIB_EXTRA_OPTS = fPIC mstrict-align
+ MULTILIB_EXCEPTIONS = m64/msoft-float
+ MULTILIB_EXCLUSIONS = m64/!m32/msoft-float
+-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib) nof
++MULTILIB_OSDIRNAMES = ../lib64:powerpc64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):powerpc-linux-gnu nof
+ MULTILIB_MATCHES = $(MULTILIB_MATCHES_FLOAT)
+
+ softfp_wrap_start := '\#ifndef __powerpc64__'
+Index: b/src/gcc/config/pa/t-linux
+===================================================================
+--- a/src/gcc/config/pa/t-linux
++++ b/src/gcc/config/pa/t-linux
+@@ -35,3 +35,5 @@
+
+ # Compile crtbeginS.o and crtendS.o as PIC.
+ CRTSTUFF_T_CFLAGS_S = -fPIC
++
++MULTIARCH_DIRNAME = hppa-linux-gnu
+Index: b/src/gcc/config/mips/t-linux64
+===================================================================
+--- a/src/gcc/config/mips/t-linux64
++++ b/src/gcc/config/mips/t-linux64
+@@ -18,7 +18,11 @@
+
+ MULTILIB_OPTIONS = mabi=n32/mabi=32/mabi=64
+ MULTILIB_DIRNAMES = n32 32 64
+-MULTILIB_OSDIRNAMES = ../lib32 ../lib ../lib64
++MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el)
++MULTILIB_OSDIRNAMES = \
++ ../lib32:mips64$(MIPS_EL)-linux-gnuabin32 \
++ ../lib:mips$(MIPS_EL)-linux-gnu \
++ ../lib64:mips64$(MIPS_EL)-linux-gnuabi64
+
+ EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
+
+Index: b/src/gcc/config.gcc
+===================================================================
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -2180,6 +2180,7 @@
+ ;;
+ *)
+ tm_file="${tm_file} rs6000/linux.h glibc-stdint.h"
++ tmake_file="$tmake_file rs6000/t-linux"
+ ;;
+ esac
+ tmake_file="${tmake_file} t-slibgcc-libgcc rs6000/t-fprules-softfp soft-fp/t-softfp"
+@@ -2311,6 +2312,8 @@
+ tm_file="s390/s390.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h s390/linux.h"
+ if test x$enable_targets = xall; then
+ tmake_file="${tmake_file} s390/t-linux64"
++ else
++ tmake_file="${tmake_file} s390/t-linux"
+ fi
+ ;;
+ s390x-*-linux*)
+@@ -3674,6 +3677,14 @@
+ i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu | \
+ i[34567]86-*-gnu*)
+ tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp i386/t-linux"
++ case ${target} in
++ i[34567]86-*-linux* | x86_64-*-linux*)
++ ;;
++ i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu)
++ tmake_file="${tmake_file} i386/t-kfreebsd";;
++ i[34567]86-*-gnu*)
++ tmake_file="${tmake_file} i386/t-gnu";;
++ esac
+ ;;
+ i[34567]86-*-solaris2*)
+ tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp"
+Index: b/src/gcc/config/i386/t-gnu
+===================================================================
+--- /dev/null
++++ b/src/gcc/config/i386/t-gnu
+@@ -0,0 +1 @@
++MULTIARCH_DIRNAME = i386-gnu
+Index: b/src/gcc/config/i386/t-kfreebsd
+===================================================================
+--- /dev/null
++++ b/src/gcc/config/i386/t-kfreebsd
+@@ -0,0 +1 @@
++MULTIARCH_DIRNAME = i386-kfreebsd-gnu
+Index: b/src/gcc/config/arm/t-linux-eabi
+===================================================================
+--- a/src/gcc/config/arm/t-linux-eabi
++++ b/src/gcc/config/arm/t-linux-eabi
+@@ -42,6 +42,8 @@
+ #MULTILIB_DIRNAMES += fa606te fa626te fmp626 fa726te
+ #MULTILIB_EXCEPTIONS += *mthumb/*mcpu=fa606te *mthumb/*mcpu=fa626te *mthumb/*mcpu=fmp626 *mthumb/*mcpu=fa726te*
+
++MULTIARCH_DIRNAME = arm-linux-gnueabi$(if $(filter hard,$(with_float)),hf)
++
+ # Use a version of div0 which raises SIGFPE, and a special __clear_cache.
+ LIB1ASMFUNCS := $(filter-out _dvmd_tls,$(LIB1ASMFUNCS)) _dvmd_lnx _clear_cache
+
+Index: b/src/gcc/config/sh/t-linux
+===================================================================
+--- a/src/gcc/config/sh/t-linux
++++ b/src/gcc/config/sh/t-linux
+@@ -6,3 +6,5 @@
+ MULTILIB_MATCHES =
+
+ EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
++
++MULTILIB_OSDIRNAMES = sh4-linux-gnu:sh4-linux-gnu sh4_nofpu-linux-gnu:sh4-linux-gnu
+Index: b/src/gcc/configure.ac
+===================================================================
+--- a/src/gcc/configure.ac
++++ b/src/gcc/configure.ac
+@@ -606,6 +606,9 @@
+ [], [enable_multilib=yes])
+ AC_SUBST(enable_multilib)
+
++# needed for ARM multiarch name
++AC_SUBST(with_float)
++
+ # Enable __cxa_atexit for C++.
+ AC_ARG_ENABLE(__cxa_atexit,
+ [ --enable-__cxa_atexit enable __cxa_atexit for C++],
+Index: b/src/gcc/config/rs6000/t-linux
+===================================================================
+--- /dev/null
++++ b/src/gcc/config/rs6000/t-linux
+@@ -0,0 +1 @@
++MULTIARCH_DIRNAME = powerpc-linux-gnu
+Index: b/src/gcc/config/s390/t-linux
+===================================================================
+--- /dev/null
++++ b/src/gcc/config/s390/t-linux
+@@ -0,0 +1 @@
++MULTIARCH_DIRNAME = s390-linux-gnu
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -2188,7 +2188,8 @@
+ powerpc*-*-linux*altivec*)
+ tm_file="${tm_file} rs6000/linuxaltivec.h" ;;
+ powerpc*-*-linux*spe*)
+- tm_file="${tm_file} rs6000/linuxspe.h rs6000/e500.h" ;;
++ tm_file="${tm_file} rs6000/linuxspe.h rs6000/e500.h"
++ tmake_file="${tmake_file} rs6000/t-linux-spe" ;;
+ powerpc*-*-linux*paired*)
+ tm_file="${tm_file} rs6000/750cl.h" ;;
+ esac
+--- a/src/gcc/config/rs6000/t-linux-spe
++++ b/src/gcc/config/rs6000/t-linux-spe
+@@ -0,0 +1 @@
++MULTIARCH_DIRNAME = powerpc-linux-gnuspe
diff --git a/debian/patches/gcc-multilib64-multiarch-trunk.diff b/debian/patches/gcc-multilib64-multiarch-trunk.diff
new file mode 100644
index 0000000..88d9ac0
--- /dev/null
+++ b/debian/patches/gcc-multilib64-multiarch-trunk.diff
@@ -0,0 +1,44 @@
+# DP: Use lib instead of lib64 as the 64bit system dir on biarch
+# DP: architectures defaulting to 64bit.
+
+--- a/src/gcc/config/s390/t-linux64
++++ b/src/gcc/config/s390/t-linux64
+@@ -7,5 +7,5 @@
+
+ MULTILIB_OPTIONS = m64/m31
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu)
++MULTILIB_OSDIRNAMES = ../lib$(call if_multiarch,:s390x-linux-gnu)
+ MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu)
+--- a/src/gcc/config/rs6000/t-linux64
++++ b/src/gcc/config/rs6000/t-linux64
+@@ -33,6 +33,6 @@
+ MULTILIB_EXTRA_OPTS = fPIC mstrict-align
+ MULTILIB_EXCEPTIONS =
+ MULTILIB_EXCLUSIONS =
+-MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:powerpc64-linux-gnu)
++MULTILIB_OSDIRNAMES = ../lib$(call if_multiarch,:powerpc64-linux-gnu)
+ MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)
+ MULTILIB_MATCHES =
+--- a/src/gcc/config/sparc/t-linux64
++++ b/src/gcc/config/sparc/t-linux64
+@@ -26,7 +26,7 @@
+
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:sparc64-linux-gnu)
++MULTILIB_OSDIRNAMES = ../lib$(call if_multiarch,:sparc64-linux-gnu)
+ MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:sparc-linux-gnu)
+
+ LIBGCC = stmp-multilib
+--- a/src/gcc/config/i386/t-linux64
++++ b/src/gcc/config/i386/t-linux64
+@@ -34,7 +34,7 @@
+ comma=,
+ MULTILIB_OPTIONS = $(subst $(comma),/,$(TM_MULTILIB_CONFIG))
+ MULTILIB_DIRNAMES = $(patsubst m%, %, $(subst /, ,$(MULTILIB_OPTIONS)))
+-MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu)
++MULTILIB_OSDIRNAMES = m64=../lib$(call if_multiarch,:x86_64-linux-gnu)
+ MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu)
+ MULTILIB_OSDIRNAMES+= mx32=../libx32
+
diff --git a/debian/patches/gcc-multilib64-multiarch.diff b/debian/patches/gcc-multilib64-multiarch.diff
new file mode 100644
index 0000000..dfe9f1a
--- /dev/null
+++ b/debian/patches/gcc-multilib64-multiarch.diff
@@ -0,0 +1,52 @@
+# DP: Use lib instead of lib64 as the 64bit system dir on biarch
+# DP: architectures defaulting to 64bit.
+
+Index: gcc-4.6-4.6.1/src/gcc/config/s390/t-linux64
+===================================================================
+--- gcc-4.6-4.6.1.orig/src/gcc/config/s390/t-linux64 2011-08-20 16:05:05.000000000 +0000
++++ gcc-4.6-4.6.1/src/gcc/config/s390/t-linux64 2011-08-20 16:08:42.440221785 +0000
+@@ -7,4 +7,4 @@
+
+ MULTILIB_OPTIONS = m64/m31
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64:s390x-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):s390-linux-gnu
++MULTILIB_OSDIRNAMES = ../lib:s390x-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):s390-linux-gnu
+Index: gcc-4.6-4.6.1/src/gcc/config/rs6000/t-linux64
+===================================================================
+--- gcc-4.6-4.6.1.orig/src/gcc/config/rs6000/t-linux64 2011-08-20 16:08:08.000000000 +0000
++++ gcc-4.6-4.6.1/src/gcc/config/rs6000/t-linux64 2011-08-20 16:09:43.770311733 +0000
+@@ -34,7 +34,7 @@
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32
+ MULTILIB_EXTRA_OPTS = fPIC mstrict-align
+-MULTILIB_OSDIRNAMES = ../lib64:powerpc64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):powerpc-linux-gnu
++MULTILIB_OSDIRNAMES = ../lib:powerpc64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):powerpc-linux-gnu
+
+ softfp_wrap_start := '\#ifndef __powerpc64__'
+ softfp_wrap_end := '\#endif'
+Index: gcc-4.6-4.6.1/src/gcc/config/sparc/t-linux64
+===================================================================
+--- gcc-4.6-4.6.1.orig/src/gcc/config/sparc/t-linux64 2011-08-20 16:05:05.000000000 +0000
++++ gcc-4.6-4.6.1/src/gcc/config/sparc/t-linux64 2011-08-20 16:08:42.440221785 +0000
+@@ -26,7 +26,7 @@
+
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64:sparc64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):sparc-linux-gnu
++MULTILIB_OSDIRNAMES = ../lib:sparc64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):sparc-linux-gnu
+
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+Index: gcc-4.6-4.6.1/src/gcc/config/i386/t-linux64
+===================================================================
+--- gcc-4.6-4.6.1.orig/src/gcc/config/i386/t-linux64 2011-08-20 16:06:59.000000000 +0000
++++ gcc-4.6-4.6.1/src/gcc/config/i386/t-linux64 2011-08-20 16:08:42.440221785 +0000
+@@ -25,7 +25,7 @@
+
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64:x86_64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):i386-linux-gnu
++MULTILIB_OSDIRNAMES = ../lib:x86_64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):i386-linux-gnu
+
+ ifneq (,$(findstring kfreebsd, $(target)))
+ MULTILIB_OSDIRNAMES := $(subst linux,kfreebsd,$(MULTILIB_OSDIRNAMES))
diff --git a/debian/patches/gcc-multilib64.diff b/debian/patches/gcc-multilib64.diff
new file mode 100644
index 0000000..4ad3f5a
--- /dev/null
+++ b/debian/patches/gcc-multilib64.diff
@@ -0,0 +1,44 @@
+# DP: Use lib instead of lib64 as the 64bit system dir on biarch
+# DP: architectures defaulting to 64bit.
+
+--- a/src/gcc/config/s390/t-linux64
++++ b/src/gcc/config/s390/t-linux64
+@@ -7,4 +7,4 @@
+
+ MULTILIB_OPTIONS = m64/m31
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
++MULTILIB_OSDIRNAMES = ../lib $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
+--- a/src/gcc/config/sparc/t-linux64
++++ b/src/gcc/config/sparc/t-linux64
+@@ -26,7 +26,7 @@
+
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
++MULTILIB_OSDIRNAMES = ../lib $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
+
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+--- a/src/gcc/config/i386/t-linux64
++++ b/src/gcc/config/i386/t-linux64
+@@ -25,7 +25,7 @@
+
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
++MULTILIB_OSDIRNAMES = ../lib $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
+
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+--- a/src/gcc/config/rs6000/t-linux64
++++ b/src/gcc/config/rs6000/t-linux64
+@@ -36,7 +36,7 @@
+ MULTILIB_EXTRA_OPTS = fPIC mstrict-align
+ MULTILIB_EXCEPTIONS =
+ MULTILIB_EXCLUSIONS =
+-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
++MULTILIB_OSDIRNAMES = ../lib $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
+ MULTILIB_MATCHES =
+
+ softfp_wrap_start := '\#ifndef __powerpc64__'
diff --git a/debian/patches/gcc-no-add-needed.diff b/debian/patches/gcc-no-add-needed.diff
new file mode 100644
index 0000000..1c846fe
--- /dev/null
+++ b/debian/patches/gcc-no-add-needed.diff
@@ -0,0 +1,56 @@
+# DP: On linux targets pass --no-add-needed to the linker.
+
+2010-02-08 Roland McGrath <roland@redhat.com>
+
+ * config/rs6000/sysv4.h (LINK_EH_SPEC): Pass --no-add-needed to the
+ linker.
+ * config/linux.h (LINK_EH_SPEC): Likewise.
+ * config/alpha/elf.h (LINK_EH_SPEC): Likewise.
+ * config/ia64/linux.h (LINK_EH_SPEC): Likewise.
+
+--- a/src/gcc/config/rs6000/sysv4.h
++++ b/src/gcc/config/rs6000/sysv4.h
+@@ -836,7 +836,7 @@
+
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # undef LINK_EH_SPEC
+-# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++# define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
+ #endif
+
+ #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \
+--- a/src/gcc/config/gnu-user.h
++++ b/src/gcc/config/gnu-user.h
+@@ -82,7 +82,9 @@
+ #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
+
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
++#else
++#define LINK_EH_SPEC "--no-add-needed "
+ #endif
+
+ #undef LINK_GCC_C_SEQUENCE_SPEC
+--- a/src/gcc/config/alpha/elf.h
++++ b/src/gcc/config/alpha/elf.h
+@@ -438,7 +438,7 @@
+ I imagine that other systems will catch up. In the meantime, it
+ doesn't harm to make sure that the data exists to be used later. */
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
+ #endif
+
+ /* A C statement (sans semicolon) to output to the stdio stream STREAM
+--- a/src/gcc/config/ia64/linux.h
++++ b/src/gcc/config/ia64/linux.h
+@@ -82,7 +82,7 @@
+ Signalize that because we have fde-glibc, we don't need all C shared libs
+ linked against -lgcc_s. */
+ #undef LINK_EH_SPEC
+-#define LINK_EH_SPEC ""
++#define LINK_EH_SPEC "--no-add-needed "
+
+ #define MD_UNWIND_SUPPORT "config/ia64/linux-unwind.h"
+
diff --git a/debian/patches/gcc-powerpc-nof-trunk.diff b/debian/patches/gcc-powerpc-nof-trunk.diff
new file mode 100644
index 0000000..3696085
--- /dev/null
+++ b/debian/patches/gcc-powerpc-nof-trunk.diff
@@ -0,0 +1,22 @@
+# DP: Don't build nof multlib on powerpc.
+
+--- a/src/gcc/config/rs6000/t-linux64
++++ b/src/gcc/config/rs6000/t-linux64
+@@ -28,12 +28,11 @@
+ # it doesn't tell anything about the 32bit libraries on those systems. Set
+ # MULTILIB_OSDIRNAMES according to what is found on the target.
+
+-MULTILIB_OPTIONS = m64/m32 msoft-float
+-MULTILIB_DIRNAMES = 64 32 nof
++MULTILIB_OPTIONS = m64/m32
++MULTILIB_DIRNAMES = 64 32
+ MULTILIB_EXTRA_OPTS = fPIC mstrict-align
+-MULTILIB_EXCEPTIONS = m64/msoft-float
+-MULTILIB_EXCLUSIONS = m64/!m32/msoft-float
++MULTILIB_EXCEPTIONS =
++MULTILIB_EXCLUSIONS =
+ MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:powerpc64-linux-gnu)
+ MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)
+-MULTILIB_OSDIRNAMES += nof
+-MULTILIB_MATCHES = $(MULTILIB_MATCHES_FLOAT)
++MULTILIB_MATCHES =
diff --git a/debian/patches/gcc-powerpc-nof.diff b/debian/patches/gcc-powerpc-nof.diff
new file mode 100644
index 0000000..437671b
--- /dev/null
+++ b/debian/patches/gcc-powerpc-nof.diff
@@ -0,0 +1,23 @@
+# DP: Don't build nof multlib on powerpc.
+
+Index: gcc-4.6-4.6.1/src/gcc/config/rs6000/t-linux64
+===================================================================
+--- gcc-4.6-4.6.1.orig/src/gcc/config/rs6000/t-linux64 2011-08-20 16:05:05.000000000 +0000
++++ gcc-4.6-4.6.1/src/gcc/config/rs6000/t-linux64 2011-08-20 16:08:08.900172593 +0000
+@@ -31,13 +31,10 @@
+ # it doesn't tell anything about the 32bit libraries on those systems. Set
+ # MULTILIB_OSDIRNAMES according to what is found on the target.
+
+-MULTILIB_OPTIONS = m64/m32 msoft-float
+-MULTILIB_DIRNAMES = 64 32 nof
++MULTILIB_OPTIONS = m64/m32
++MULTILIB_DIRNAMES = 64 32
+ MULTILIB_EXTRA_OPTS = fPIC mstrict-align
+-MULTILIB_EXCEPTIONS = m64/msoft-float
+-MULTILIB_EXCLUSIONS = m64/!m32/msoft-float
+-MULTILIB_OSDIRNAMES = ../lib64:powerpc64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):powerpc-linux-gnu nof
+-MULTILIB_MATCHES = $(MULTILIB_MATCHES_FLOAT)
++MULTILIB_OSDIRNAMES = ../lib64:powerpc64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):powerpc-linux-gnu
+
+ softfp_wrap_start := '\#ifndef __powerpc64__'
+ softfp_wrap_end := '\#endif'
diff --git a/debian/patches/gcc-powerpc-undef.diff b/debian/patches/gcc-powerpc-undef.diff
new file mode 100644
index 0000000..ce19d24
--- /dev/null
+++ b/debian/patches/gcc-powerpc-undef.diff
@@ -0,0 +1,13 @@
+# DP: Undefine LINK_EH_SPEC before redefining it
+# DP: http://gcc.gnu.org/ml/gcc-patches/2011-02/msg01082.html
+
+--- a/src/gcc/config/rs6000/sysv4.h
++++ b/src/gcc/config/rs6000/sysv4.h
+@@ -835,6 +835,7 @@
+ -dynamic-linker " LINUX_DYNAMIC_LINKER "}}"
+
+ #if defined(HAVE_LD_EH_FRAME_HDR)
++# undef LINK_EH_SPEC
+ # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+ #endif
+
diff --git a/debian/patches/gcc-ppc64-O3.diff b/debian/patches/gcc-ppc64-O3.diff
new file mode 100644
index 0000000..c73eafb
--- /dev/null
+++ b/debian/patches/gcc-ppc64-O3.diff
@@ -0,0 +1,59 @@
+# DP: Replace -O1 and -O2 with -O3, unless the env var DEB_GCC_NO_O3 is set
+
+--- a/src/gcc/gcc.c
++++ b/src/gcc/gcc.c
+@@ -413,6 +413,7 @@
+ static const char *find_file_spec_function (int, const char **);
+ static const char *find_plugindir_spec_function (int, const char **);
+ static const char *print_asm_header_spec_function (int, const char **);
++static const char *if_env_unset_spec_function (int, const char **);
+ static const char *compare_debug_dump_opt_spec_function (int, const char **);
+ static const char *compare_debug_self_opt_spec_function (int, const char **);
+ static const char *compare_debug_auxbase_opt_spec_function (int, const char **);
+@@ -895,6 +896,7 @@
+ static const char *cpp_options =
+ "%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\
+ %{f*} %{g*:%{!g0:%{g*} %{!fno-working-directory:-fworking-directory}}} %{O*}\
++ %{O1:%:if-env-unset(DEB_GCC_NO_O3 -O3)} %{O2:%:if-env-unset(DEB_GCC_NO_O3 -O3)}\
+ %{undef} %{save-temps*:-fpch-preprocess}";
+
+ /* This contains cpp options which are not passed when the preprocessor
+@@ -908,7 +910,8 @@
+ %1 %{!Q:-quiet} %{!dumpbase:-dumpbase %B} %{d*} %{m*} %{a*}\
+ %{fcompare-debug-second:%:compare-debug-auxbase-opt(%b)} \
+ %{!fcompare-debug-second:%{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}}%{!c:%{!S:-auxbase %b}} \
+- %{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs}\
++ %{g*} %{O*} %{O1:%:if-env-unset(DEB_GCC_NO_O3 -O3)} %{O2:%:if-env-unset(DEB_GCC_NO_O3 -O3)}\
++ %{W*&pedantic*} %{w} %{std*&ansi&trigraphs}\
+ %{v:-version} %{pg:-p} %{p} %{f*} %{undef}\
+ %{Qn:-fno-ident} %{--help:--help}\
+ %{--target-help:--target-help}\
+@@ -1736,6 +1739,7 @@
+ { "if-exists-else", if_exists_else_spec_function },
+ { "replace-outfile", replace_outfile_spec_function },
+ { "version-compare", version_compare_spec_function },
++ { "if-env-unset", if_env_unset_spec_function },
+ { "include", include_spec_function },
+ { "find-file", find_file_spec_function },
+ { "find-plugindir", find_plugindir_spec_function },
+@@ -9105,6 +9109,20 @@
+ }
+
+
++/* %:if-env-unset spec function. Add the second argument, if
++ if the environment variable (first argument) is not set. */
++static const char *
++if_env_unset_spec_function (int argc, const char**argv)
++{
++ if (argc != 2)
++ abort ();
++ if (getenv (argv[0]) != NULL)
++ return NULL;
++ else
++ return argv[1];
++}
++
++
+ /* %:print-asm-header spec function. Print a banner to say that the
+ following output is from the assembler. */
+
diff --git a/debian/patches/gcc-system-root.diff b/debian/patches/gcc-system-root.diff
new file mode 100644
index 0000000..c08f4f5
--- /dev/null
+++ b/debian/patches/gcc-system-root.diff
@@ -0,0 +1,17 @@
+# DP: Avoid include paths starting with a double slash
+
+--- a/src/gcc/configure.ac
++++ b/src/gcc/configure.ac
+@@ -733,8 +733,10 @@
+ yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_noncanonical}/sys-root' ;;
+ *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
+ esac
+-
+- TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
++
++ if test "x$TARGET_SYSTEM_ROOT" != x/; then
++ TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
++ fi
+ CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
+
+ if test "x$prefix" = xNONE; then
diff --git a/debian/patches/gcc-textdomain.diff b/debian/patches/gcc-textdomain.diff
new file mode 100644
index 0000000..f42d6fb
--- /dev/null
+++ b/debian/patches/gcc-textdomain.diff
@@ -0,0 +1,84 @@
+# DP: Set gettext's domain and textdomain to the versioned package name.
+
+--- a/src/gcc/intl.c
++++ b/src/gcc/intl.c
+@@ -56,8 +56,8 @@
+ setlocale (LC_ALL, "");
+ #endif
+
+- (void) bindtextdomain ("gcc", LOCALEDIR);
+- (void) textdomain ("gcc");
++ (void) bindtextdomain ("gcc-4.6", LOCALEDIR);
++ (void) textdomain ("gcc-4.6");
+
+ /* Opening quotation mark. */
+ open_quote = _("`");
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -5216,8 +5216,8 @@
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ echo $(mkinstalldirs) $(DESTDIR)$$dir; \
+ $(mkinstalldirs) $(DESTDIR)$$dir || exit 1; \
+- echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc.mo; \
+- $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc.mo; \
++ echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc-4.6.mo; \
++ $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc-4.6.mo; \
+ done
+
+ # Rule for regenerating the message template (gcc.pot).
+--- a/src/libcpp/init.c
++++ b/src/libcpp/init.c
+@@ -135,7 +135,7 @@
+ init_trigraph_map ();
+
+ #ifdef ENABLE_NLS
+- (void) bindtextdomain (PACKAGE, LOCALEDIR);
++ (void) bindtextdomain (PACKAGE PACKAGE_SUFFIX, LOCALEDIR);
+ #endif
+ }
+ }
+--- a/src/libcpp/system.h
++++ b/src/libcpp/system.h
+@@ -265,7 +265,7 @@
+ #endif
+
+ #ifndef _
+-# define _(msgid) dgettext (PACKAGE, msgid)
++# define _(msgid) dgettext (PACKAGE PACKAGE_SUFFIX, msgid)
+ #endif
+
+ #ifndef N_
+--- a/src/libcpp/Makefile.in
++++ b/src/libcpp/Makefile.in
+@@ -49,6 +49,7 @@
+ LIBICONV = @LIBICONV@
+ LIBINTL = @LIBINTL@
+ PACKAGE = @PACKAGE@
++PACKAGE_SUFFIX = -4.6
+ RANLIB = @RANLIB@
+ SHELL = @SHELL@
+ USED_CATALOGS = @USED_CATALOGS@
+@@ -70,9 +71,10 @@
+
+ INCLUDES = -I$(srcdir) -I. -I$(srcdir)/../include @INCINTL@ \
+ -I$(srcdir)/include
++DEBCPPFLAGS += -DPACKAGE_SUFFIX=\"$(strip $(PACKAGE_SUFFIX))\"
+
+-ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS)
+-ALL_CXXFLAGS = $(CXXFLAGS) $(WARN_CXXFLAGS) $(INCLUDES) $(CPPFLAGS)
++ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS) $(DEBCPPFLAGS)
++ALL_CXXFLAGS = $(CXXFLAGS) $(WARN_CXXFLAGS) $(INCLUDES) $(CPPFLAGS) $(DEBCPPFLAGS)
+
+ # The name of the compiler to use.
+ ENABLE_BUILD_WITH_CXX = @ENABLE_BUILD_WITH_CXX@
+@@ -168,8 +170,8 @@
+ else continue; \
+ fi; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+- echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
+- $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
++ echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE)$(PACKAGE_SUFFIX).mo; \
++ $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE)$(PACKAGE_SUFFIX).mo; \
+ done
+
+ mostlyclean:
diff --git a/debian/patches/gcc-volatile-bitfields.diff b/debian/patches/gcc-volatile-bitfields.diff
new file mode 100644
index 0000000..563a177
--- /dev/null
+++ b/debian/patches/gcc-volatile-bitfields.diff
@@ -0,0 +1,23 @@
+# DP: Volatile bitfields vs. inline asm memory constraints, taken from the trunk
+# DP: http://gcc.gnu.org/ml/gcc-patches/2011-03/msg01477.html
+
+ gcc/
+ * expr.c (expand_expr_real_1): Only use BLKmode for volatile
+ accesses which are not naturally aligned.
+
+--- a/src/gcc/expr.c
++++ b/src/gcc/expr.c
+@@ -9147,8 +9147,11 @@
+ && modifier != EXPAND_CONST_ADDRESS
+ && modifier != EXPAND_INITIALIZER)
+ /* If the field is volatile, we always want an aligned
+- access. */
+- || (volatilep && flag_strict_volatile_bitfields > 0)
++ access. Only do this if the access is not already naturally
++ aligned, otherwise "normal" (non-bitfield) volatile fields
++ become non-addressable. */
++ || (volatilep && flag_strict_volatile_bitfields > 0
++ && (bitpos % GET_MODE_ALIGNMENT (mode) != 0))
+ /* If the field isn't aligned enough to fetch as a memref,
+ fetch it as a bit field. */
+ || (mode1 != BLKmode
diff --git a/debian/patches/gccgo-version.diff b/debian/patches/gccgo-version.diff
new file mode 100644
index 0000000..0285cc6
--- /dev/null
+++ b/debian/patches/gccgo-version.diff
@@ -0,0 +1,61 @@
+# DP: Omit the subminor number from the go libdir
+
+--- a/src/gcc/go/Make-lang.in
++++ b/src/gcc/go/Make-lang.in
+@@ -223,13 +223,15 @@
+ go/go-backend.o: go/go-backend.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+ $(TM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(TARGET_H)
+
++short_version := $(shell echo $(version) | sed -r 's/([0-9]+\.[0-9]+).*/\1/')
++
+ go/go-lang.o: go/go-lang.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(OPTS_H) \
+ $(TREE_H) $(GIMPLE_H) $(GGC_H) $(TOPLEV_H) debug.h options.h \
+ $(FLAGS_H) convert.h $(DIAGNOSTIC_H) langhooks.h \
+ $(LANGHOOKS_DEF_H) $(EXCEPT_H) $(TARGET_H) $(GO_C_H) \
+ gt-go-go-lang.h gtype-go.h
+ $(COMPILER) $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) \
+- -DDEFAULT_TARGET_VERSION=\"$(version)\" \
++ -DDEFAULT_TARGET_VERSION=\"$(short_version)\" \
+ -DDEFAULT_TARGET_MACHINE=\"$(target_noncanonical)\" \
+ -c $< $(OUTPUT_OPTION)
+
+--- a/src/libgo/Makefile.in
++++ b/src/libgo/Makefile.in
+@@ -471,7 +471,7 @@
+ SUFFIXES = .c .go .gox .o .obj .lo .a
+ @LIBGO_IS_RTEMS_TRUE@subdirs = testsuite
+ SUBDIRS = ${subdirs}
+-gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
++short_version := $(shell sed -r 's/([0-9]+\.[0-9]+)\..*/\1/' $(top_srcdir)/../gcc/BASE-VER)
+ MAINT_CHARSET = latin1
+ mkinstalldirs = $(SHELL) $(toplevel_srcdir)/mkinstalldirs
+ PWD_COMMAND = $${PWDCMD-pwd}
+@@ -541,7 +541,7 @@
+ FLAGS_TO_PASS = $(AM_MAKEFLAGS)
+ toolexeclib_LTLIBRARIES = libgo.la
+ toolexeclib_LIBRARIES = libgobegin.a
+-toolexeclibgodir = $(toolexeclibdir)/go/$(gcc_version)/$(target_alias)
++toolexeclibgodir = $(toolexeclibdir)/go/$(short_version)
+ toolexeclibgo_DATA = \
+ asn1.gox \
+ big.gox \
+--- a/src/libgo/Makefile.am
++++ b/src/libgo/Makefile.am
+@@ -15,7 +15,7 @@
+
+ SUBDIRS = ${subdirs}
+
+-gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
++short_version := $(shell sed -r 's/([0-9]+\.[0-9]+)\..*/\1/' $(top_srcdir)/../gcc/BASE-VER)
+
+ MAINT_CHARSET = latin1
+
+@@ -97,7 +97,7 @@
+ toolexeclib_LTLIBRARIES = libgo.la
+ toolexeclib_LIBRARIES = libgobegin.a
+
+-toolexeclibgodir = $(toolexeclibdir)/go/$(gcc_version)/$(target_alias)
++toolexeclibgodir = $(toolexeclibdir)/go/$(short_version)
+
+ toolexeclibgo_DATA = \
+ asn1.gox \
diff --git a/debian/patches/gdc-4.6.diff b/debian/patches/gdc-4.6.diff
new file mode 100644
index 0000000..b0ff565
--- /dev/null
+++ b/debian/patches/gdc-4.6.diff
@@ -0,0 +1,349 @@
+# DP: Patches the GCC Directory for D.
+
+--- a/src/gcc/cgraph.c 2011-03-04 18:49:23.000000000 +0000
++++ b/src/gcc/cgraph.c 2011-07-09 20:25:16.517533109 +0100
+@@ -491,6 +491,7 @@ struct cgraph_node *
+ cgraph_node (tree decl)
+ {
+ struct cgraph_node key, *node, **slot;
++ tree context;
+
+ gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
+
+@@ -512,11 +513,15 @@ cgraph_node (tree decl)
+ node = cgraph_create_node ();
+ node->decl = decl;
+ *slot = node;
+- if (DECL_CONTEXT (decl) && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
++ if (DECL_STATIC_CHAIN (decl))
+ {
+- node->origin = cgraph_node (DECL_CONTEXT (decl));
+- node->next_nested = node->origin->nested;
+- node->origin->nested = node;
++ context = decl_function_context (decl);
++ if (context)
++ {
++ node->origin = cgraph_node (context);
++ node->next_nested = node->origin->nested;
++ node->origin->nested = node;
++ }
+ }
+ if (assembler_name_hash)
+ {
+--- a/src/gcc/config/i386/i386.c 2011-03-04 17:56:39.000000000 +0000
++++ b/src/gcc/config/i386/i386.c 2011-07-24 12:47:54.466177239 +0100
+@@ -5358,6 +5358,10 @@ ix86_handle_cconv_attribute (tree *node,
+ {
+ error ("fastcall and thiscall attributes are not compatible");
+ }
++ if (lookup_attribute ("optlink", TYPE_ATTRIBUTES (*node)))
++ {
++ error ("fastcall and optlink attributes are not compatible");
++ }
+ }
+
+ /* Can combine stdcall with fastcall (redundant), regparm and
+@@ -5376,6 +5380,10 @@ ix86_handle_cconv_attribute (tree *node,
+ {
+ error ("stdcall and thiscall attributes are not compatible");
+ }
++ if (lookup_attribute ("optlink", TYPE_ATTRIBUTES (*node)))
++ {
++ error ("stdcall and optlink attributes are not compatible");
++ }
+ }
+
+ /* Can combine cdecl with regparm and sseregparm. */
+@@ -5393,6 +5401,10 @@ ix86_handle_cconv_attribute (tree *node,
+ {
+ error ("cdecl and thiscall attributes are not compatible");
+ }
++ if (lookup_attribute ("optlink", TYPE_ATTRIBUTES (*node)))
++ {
++ error ("cdecl and optlink attributes are not compatible");
++ }
+ }
+ else if (is_attribute_p ("thiscall", name))
+ {
+@@ -5411,6 +5423,31 @@ ix86_handle_cconv_attribute (tree *node,
+ {
+ error ("cdecl and thiscall attributes are not compatible");
+ }
++ if (lookup_attribute ("optlink", TYPE_ATTRIBUTES (*node)))
++ {
++ error ("optlink and thiscall attributes are not compatible");
++ }
++ }
++
++ /* Can combine optlink with regparm and sseregparm. */
++ else if (is_attribute_p ("optlink", name))
++ {
++ if (lookup_attribute ("cdecl", TYPE_ATTRIBUTES (*node)))
++ {
++ error ("optlink and cdecl attributes are not compatible");
++ }
++ if (lookup_attribute ("fastcall", TYPE_ATTRIBUTES (*node)))
++ {
++ error ("optlink and fastcall attributes are not compatible");
++ }
++ if (lookup_attribute ("stdcall", TYPE_ATTRIBUTES (*node)))
++ {
++ error ("optlink and stdcall attributes are not compatible");
++ }
++ if (lookup_attribute ("thiscall", TYPE_ATTRIBUTES (*node)))
++ {
++ error ("optlink and thiscall attributes are not compatible");
++ }
+ }
+
+ /* Can combine sseregparm with all attributes. */
+@@ -5644,6 +5681,12 @@ ix86_return_pops_args (tree fundecl, tre
+ || lookup_attribute ("thiscall", TYPE_ATTRIBUTES (funtype)))
+ rtd = 1;
+
++ /* Optlink functions will pop the stack if floating-point return
++ and if not variable args. */
++ if (lookup_attribute ("optlink", TYPE_ATTRIBUTES (funtype))
++ && FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (funtype))))
++ rtd = 1;
++
+ if (rtd && ! stdarg_p (funtype))
+ return size;
+ }
+@@ -5991,6 +6034,11 @@ init_cumulative_args (CUMULATIVE_ARGS *c
+ }
+ else
+ cum->nregs = ix86_function_regparm (fntype, fndecl);
++
++ /* For optlink, last parameter is passed in eax rather than
++ being pushed on the stack. */
++ if (lookup_attribute ("optlink", TYPE_ATTRIBUTES (fntype)))
++ cum->optlink = 1;
+ }
+
+ /* Set up the number of SSE registers used for passing SFmode
+@@ -8721,6 +8769,10 @@ ix86_frame_pointer_required (void)
+ if (crtl->profile && !flag_fentry)
+ return true;
+
++ /* Optlink mandates the setting up of ebp, unless 'naked' is used. */
++ if (crtl->args.info.optlink && !cfun->naked)
++ return true;
++
+ return false;
+ }
+
+@@ -9366,6 +9418,10 @@ ix86_compute_frame_layout (struct ix86_f
+ frame->red_zone_size = 0;
+ frame->stack_pointer_offset -= frame->red_zone_size;
+
++ if (cfun->naked)
++ /* As above, skip return address. */
++ frame->stack_pointer_offset = UNITS_PER_WORD;
++
+ /* The SEH frame pointer location is near the bottom of the frame.
+ This is enforced by the fact that the difference between the
+ stack pointer and the frame pointer is limited to 240 bytes in
+@@ -29731,7 +29787,7 @@ x86_output_mi_thunk (FILE *file,
+ output_set_got (tmp, NULL_RTX);
+
+ xops[1] = tmp;
+- output_asm_insn ("mov{l}\t{%0@GOT(%1), %1|%1, %0@GOT[%1]}", xops);
++ output_asm_insn ("mov{l}\t{%a0@GOT(%1), %1|%1, %a0@GOT[%1]}", xops);
+ output_asm_insn ("jmp\t{*}%1", xops);
+ }
+ }
+@@ -32553,6 +32609,8 @@ static const struct attribute_spec ix86_
+ /* Sseregparm attribute says we are using x86_64 calling conventions
+ for FP arguments. */
+ { "sseregparm", 0, 0, false, true, true, ix86_handle_cconv_attribute },
++ /* Optlink attribute says we are using D calling convention */
++ { "optlink", 0, 0, false, true, true, ix86_handle_cconv_attribute },
+ /* force_align_arg_pointer says this function realigns the stack at entry. */
+ { (const char *)&ix86_force_align_arg_pointer_string, 0, 0,
+ false, true, true, ix86_handle_cconv_attribute },
+--- a/src/gcc/config/i386/i386.h 2011-01-14 21:03:22.000000000 +0000
++++ b/src/gcc/config/i386/i386.h 2011-07-09 20:25:16.661533818 +0100
+@@ -1498,6 +1498,7 @@ typedef struct ix86_args {
+ int regno; /* next available register number */
+ int fastcall; /* fastcall or thiscall calling convention
+ is used */
++ int optlink; /* optlink calling convention is used */
+ int sse_words; /* # sse words passed so far */
+ int sse_nregs; /* # sse registers available for passing */
+ int warn_avx; /* True when we want to warn about AVX ABI. */
+--- a/src/gcc/config/rs6000/rs6000.c 2011-03-15 12:57:37.000000000 +0000
++++ b/src/gcc/config/rs6000/rs6000.c 2011-07-09 20:25:16.721534120 +0100
+@@ -22039,6 +22039,7 @@ rs6000_output_function_epilogue (FILE *f
+ a number, so for now use 9. LTO isn't assigned a number either,
+ so for now use 0. */
+ if (! strcmp (language_string, "GNU C")
++ || ! strcmp (language_string, "GNU D")
+ || ! strcmp (language_string, "GNU GIMPLE")
+ || ! strcmp (language_string, "GNU Go"))
+ i = 0;
+--- a/src/gcc/dojump.c 2010-05-19 21:09:57.000000000 +0100
++++ b/src/gcc/dojump.c 2011-07-12 23:03:55.909624421 +0100
+@@ -80,7 +80,8 @@ void
+ clear_pending_stack_adjust (void)
+ {
+ if (optimize > 0
+- && (! flag_omit_frame_pointer || cfun->calls_alloca)
++ && ((! flag_omit_frame_pointer && ! cfun->naked)
++ || cfun->calls_alloca)
+ && EXIT_IGNORE_STACK)
+ discard_pending_stack_adjust ();
+ }
+--- a/src/gcc/dwarf2out.c 2011-03-18 16:22:01.000000000 +0000
++++ b/src/gcc/dwarf2out.c 2011-07-09 20:25:16.781534412 +0100
+@@ -20069,6 +20069,8 @@ gen_compile_unit_die (const char *filena
+ language = DW_LANG_C89;
+ if (strcmp (language_string, "GNU C++") == 0)
+ language = DW_LANG_C_plus_plus;
++ else if (strcmp (language_string, "GNU D") == 0)
++ language = DW_LANG_D;
+ else if (strcmp (language_string, "GNU F77") == 0)
+ language = DW_LANG_Fortran77;
+ else if (strcmp (language_string, "GNU Pascal") == 0)
+@@ -21464,7 +21466,7 @@ dwarf2out_decl (tree decl)
+
+ /* For local statics lookup proper context die. */
+ if (TREE_STATIC (decl) && decl_function_context (decl))
+- context_die = lookup_decl_die (DECL_CONTEXT (decl));
++ context_die = lookup_decl_die (decl_function_context (decl));
+
+ /* If we are in terse mode, don't generate any DIEs to represent any
+ variable declarations or definitions. */
+--- a/src/gcc/function.c 2011-03-09 20:49:00.000000000 +0000
++++ b/src/gcc/function.c 2011-07-10 18:54:33.562977424 +0100
+@@ -3409,7 +3409,8 @@ assign_parms (tree fndecl)
+ targetm.calls.function_arg_advance (&all.args_so_far, data.promoted_mode,
+ data.passed_type, data.named_arg);
+
+- assign_parm_adjust_stack_rtl (&data);
++ if (!cfun->naked)
++ assign_parm_adjust_stack_rtl (&data);
+
+ if (assign_parm_setup_block_p (&data))
+ assign_parm_setup_block (&all, parm, &data);
+@@ -3426,7 +3427,8 @@ assign_parms (tree fndecl)
+
+ /* Output all parameter conversion instructions (possibly including calls)
+ now that all parameters have been copied out of hard registers. */
+- emit_insn (all.first_conversion_insn);
++ if (!cfun->naked)
++ emit_insn (all.first_conversion_insn);
+
+ /* Estimate reload stack alignment from scalar return mode. */
+ if (SUPPORTS_STACK_ALIGNMENT)
+@@ -3590,6 +3592,9 @@ gimplify_parameters (void)
+ VEC(tree, heap) *fnargs;
+ unsigned i;
+
++ if (cfun->naked)
++ return NULL;
++
+ assign_parms_initialize_all (&all);
+ fnargs = assign_parms_augmented_arg_list (&all);
+
+@@ -5287,6 +5292,9 @@ thread_prologue_and_epilogue_insns (void
+ edge e;
+ edge_iterator ei;
+
++ if (cfun->naked)
++ return;
++
+ rtl_profile_for_bb (ENTRY_BLOCK_PTR);
+
+ inserted = false;
+--- a/src/gcc/function.h 2011-01-03 20:52:22.000000000 +0000
++++ b/src/gcc/function.h 2011-07-12 23:04:20.197744890 +0100
+@@ -636,6 +636,10 @@ struct GTY(()) function {
+ adjusts one of its arguments and forwards to another
+ function. */
+ unsigned int is_thunk : 1;
++
++ /* Nonzero if no code should be generated for prologues, copying
++ parameters, etc. */
++ unsigned int naked : 1;
+ };
+
+ /* Add the decl D to the local_decls list of FUN. */
+--- a/src/gcc/gcc.c 2011-02-23 02:04:43.000000000 +0000
++++ b/src/gcc/gcc.c 2011-07-12 21:55:05.805144355 +0100
+@@ -83,6 +83,9 @@ int is_cpp_driver;
+ /* Flag set to nonzero if an @file argument has been supplied to gcc. */
+ static bool at_file_supplied;
+
++/* Flag set by drivers needing Pthreads. */
++int need_pthreads;
++
+ /* Definition of string containing the arguments given to configure. */
+ #include "configargs.h"
+
+@@ -373,6 +376,7 @@ or with constant text in a single argume
+ assembler has done its job.
+ %D Dump out a -L option for each directory in startfile_prefixes.
+ If multilib_dir is set, extra entries are generated with it affixed.
++ %N Output the currently selected multilib directory name.
+ %l process LINK_SPEC as a spec.
+ %L process LIB_SPEC as a spec.
+ %G process LIBGCC_SPEC as a spec.
+@@ -3925,6 +3929,17 @@ process_command (unsigned int decoded_op
+ add_infile ("help-dummy", "c");
+ }
+
++ if (need_pthreads)
++ {
++ switches[n_switches].part1 = "pthread";
++ switches[n_switches].args = 0;
++ switches[n_switches].live_cond = 0;
++ /* Do not print an error if there is not expansion for -pthread. */
++ switches[n_switches].validated = 1;
++ switches[n_switches].ordering = 0;
++ n_switches++;
++ }
++
+ alloc_switch ();
+ switches[n_switches].part1 = 0;
+ alloc_infile ();
+@@ -5095,6 +5110,17 @@ do_spec_1 (const char *spec, int inswitc
+ return value;
+ break;
+
++ case 'N':
++ if (multilib_dir)
++ {
++ arg_going = 1;
++ obstack_grow (&obstack, "-fmultilib-dir=",
++ strlen ("-fmultilib-dir="));
++ obstack_grow (&obstack, multilib_dir,
++ strlen (multilib_dir));
++ }
++ break;
++
+ /* Here we define characters other than letters and digits. */
+
+ case '{':
+--- a/src/gcc/ira.c 2011-03-08 15:51:12.000000000 +0000
++++ b/src/gcc/ira.c 2011-07-12 23:04:12.433706377 +0100
+@@ -1341,7 +1341,7 @@ ira_setup_eliminable_regset (void)
+ case. At some point, we should improve this by emitting the
+ sp-adjusting insns for this case. */
+ int need_fp
+- = (! flag_omit_frame_pointer
++ = ((! flag_omit_frame_pointer && ! cfun->naked)
+ || (cfun->calls_alloca && EXIT_IGNORE_STACK)
+ /* We need the frame pointer to catch stack overflow exceptions
+ if the stack pointer is moving. */
+--- a/src/gcc/tree-sra.c 2011-02-17 16:18:24.000000000 +0000
++++ b/src/gcc/tree-sra.c 2011-07-09 20:25:16.941535211 +0100
+@@ -1533,6 +1533,8 @@ is_va_list_type (tree type)
+ /* The very first phase of intraprocedural SRA. It marks in candidate_bitmap
+ those with type which is suitable for scalarization. */
+
++/* FIXME: Should we do something here for GDC? */
++
+ static bool
+ find_var_candidates (void)
+ {
diff --git a/debian/patches/gdc-driver-nophobos.diff b/debian/patches/gdc-driver-nophobos.diff
new file mode 100644
index 0000000..a21f019
--- /dev/null
+++ b/debian/patches/gdc-driver-nophobos.diff
@@ -0,0 +1,49 @@
+# DP: Modify gdc driver to have no libphobos by default.
+
+--- a/src/gcc/d/d-lang.cc 2011-07-24 15:48:55.796035654 +0100
++++ b/src/gcc/d/d-lang.cc 2011-07-24 18:19:45.108908785 +0100
+@@ -184,7 +184,7 @@
+ d_init_options_struct (struct gcc_options *opts)
+ {
+ // GCC options
+- opts->x_flag_exceptions = 1;
++ opts->x_flag_exceptions = 0;
+
+ // Avoid range issues for complex multiply and divide.
+ opts->x_flag_complex_method = 2;
+--- a/src/gcc/d/dmain.d 1970-01-01 01:00:00.000000000 +0100
++++ b/src/gcc/d/dmain.d 2011-02-20 23:45:24.799761560 +0000
+@@ -0,0 +1,22 @@
++extern (C) size_t strlen(const char* s);
++extern (C) void* malloc(size_t s);
++
++int main(char[][] args); // U _Dmain
++
++extern (C) int main(int argc, char** argv) {
++ char[][] args;
++ char[] *am;
++ int i;
++
++ am = cast(char[] *) malloc(argc * (char[]).sizeof);
++
++ for(i = 0; i < argc; i++) {
++ am[i] = argv[i][0 .. strlen(argv[i])];
++ }
++
++ args = am[0 .. argc];
++
++ return main(args);
++}
++
++
+--- a/src/gcc/d/d-spec.c 2011-07-24 15:48:55.820035782 +0100
++++ b/src/gcc/d/d-spec.c 2011-07-24 18:20:43.841200023 +0100
+@@ -114,7 +114,7 @@
+
+ /* If nonzero, use the standard D runtime library when linking with
+ standard libraries. */
+- int phobos = 1;
++ int phobos = 0;
+
+ /* The number of arguments being added to what's in argv, other than
+ libraries. We use this to track the number of times we've inserted
diff --git a/debian/patches/gdc-driver-zlib.diff b/debian/patches/gdc-driver-zlib.diff
new file mode 100644
index 0000000..78fca67
--- /dev/null
+++ b/debian/patches/gdc-driver-zlib.diff
@@ -0,0 +1,60 @@
+# DP: Update the gdc driver to use the up-to-date system zlib
+
+--- a/src/gcc/d/d-spec.c 2011-07-24 15:48:55.820035782 +0100
++++ b/src/gcc/d/d-spec.c 2011-07-24 18:12:57.750888801 +0100
+@@ -119,7 +119,7 @@
+ /* The number of arguments being added to what's in argv, other than
+ libraries. We use this to track the number of times we've inserted
+ -xd/-xnone. */
+- int added = 0;
++ int added = 1; /* -lz */
+
+ /* The new argument list will be contained in this. */
+ struct cl_decoded_option *new_decoded_options;
+@@ -505,6 +505,11 @@
+ {
+ /* Handled in gcc.c */
+ need_pthreads = 1;
++ /* Use the up-to-date system zlib with libphobos */
++ generate_option (OPT_l, "z", 1, CL_DRIVER,
++ &new_decoded_options[j]);
++ added_libraries++;
++ j++;
+ }
+
+ if (saw_librt)
+--- a/src/gcc/d/phobos2/etc/c/zlib.d 2011-07-24 15:48:57.068041974 +0100
++++ b/src/gcc/d/phobos2/etc/c/zlib.d 2011-07-24 18:14:18.775290585 +0100
+@@ -35,8 +35,8 @@
+
+ extern (C):
+
+-const char[] ZLIB_VERSION = "1.2.3";
+-const ZLIB_VERNUM = 0x1230;
++const char[] ZLIB_VERSION = "1.2.3.4";
++const ZLIB_VERNUM = 0x1234;
+
+ /*
+ The 'zlib' compression library provides in-memory compression and
+--- a/src/gcc/d/phobos2/Makefile.am 2011-07-24 15:48:57.004041665 +0100
++++ b/src/gcc/d/phobos2/Makefile.am 2011-07-24 18:16:01.115798057 +0100
+@@ -288,7 +288,7 @@
+ std/stream.t.o: std/stream.d $(D_PREREQ_SRCS)
+ $(GDC) -o $@ $(ALL_DFLAGS) -fdeprecated -c $<
+
+-ALL_PHOBOS_OBJS = $(D_EXTRA_OBJS) $(MAIN_OBJS) $(ZLIB_OBJS)
++ALL_PHOBOS_OBJS = $(D_EXTRA_OBJS) $(MAIN_OBJS)
+
+
+ libgphobos2.a : libgdruntime.a $(ALL_PHOBOS_OBJS)
+--- a/src/gcc/d/phobos2/Makefile.in 2011-07-24 15:48:57.016041704 +0100
++++ b/src/gcc/d/phobos2/Makefile.in 2011-07-24 18:16:08.787836103 +0100
+@@ -379,7 +379,7 @@
+ std/windows/charset.o std/windows/iunknown.o std/windows/registry.o \
+ std/windows/syserror.o std/__fileinit.o
+
+-ALL_PHOBOS_OBJS = $(D_EXTRA_OBJS) $(MAIN_OBJS) $(ZLIB_OBJS)
++ALL_PHOBOS_OBJS = $(D_EXTRA_OBJS) $(MAIN_OBJS)
+
+ # Work around what appears to be a GNU make bug handling MAKEFLAGS
+ # values defined in terms of make variables, as is the case for CC and
diff --git a/debian/patches/gdc-libphobos-build.diff b/debian/patches/gdc-libphobos-build.diff
new file mode 100644
index 0000000..04e0a0b
--- /dev/null
+++ b/debian/patches/gdc-libphobos-build.diff
@@ -0,0 +1,679 @@
+# DP: Setup gcc build system for libphobos.
+
+--- a/src/configure 2011-03-16 18:27:36.000000000 +0000
++++ b/src/configure 2011-05-28 21:37:07.919690215 +0100
+@@ -2720,7 +2720,8 @@
+ ${libgcj} \
+ target-libobjc \
+ target-libada \
+- target-libgo"
++ target-libgo \
++ target-libphobos"
+
+ # these tools are built using the target libraries, and are intended to
+ # run only in the target environment
+--- a/src/configure.ac 2011-03-16 18:27:36.000000000 +0000
++++ b/src/configure.ac 2011-05-28 21:37:07.923690230 +0100
+@@ -201,7 +201,8 @@
+ ${libgcj} \
+ target-libobjc \
+ target-libada \
+- target-libgo"
++ target-libgo \
++ target-libphobos"
+
+ # these tools are built using the target libraries, and are intended to
+ # run only in the target environment
+--- a/src/Makefile.def 2011-02-12 12:02:24.000000000 +0000
++++ b/src/Makefile.def 2011-05-28 21:37:07.947690350 +0100
+@@ -160,6 +160,7 @@
+ target_modules = { module= libgfortran; };
+ target_modules = { module= libobjc; };
+ target_modules = { module= libgo; };
++target_modules = { module= libphobos; };
+ target_modules = { module= libtermcap; no_check=true;
+ missing=mostlyclean;
+ missing=clean;
+--- a/src/Makefile.in 2011-02-12 12:02:24.000000000 +0000
++++ b/src/Makefile.in 2011-05-28 21:37:08.047690846 +0100
+@@ -963,6 +963,7 @@
+ maybe-configure-target-libgfortran \
+ maybe-configure-target-libobjc \
+ maybe-configure-target-libgo \
++ maybe-configure-target-libphobos \
+ maybe-configure-target-libtermcap \
+ maybe-configure-target-winsup \
+ maybe-configure-target-libgloss \
+@@ -1147,6 +1148,7 @@
+ all-target: maybe-all-target-libgfortran
+ all-target: maybe-all-target-libobjc
+ all-target: maybe-all-target-libgo
++all-target: maybe-all-target-libphobos
+ all-target: maybe-all-target-libtermcap
+ all-target: maybe-all-target-winsup
+ all-target: maybe-all-target-libgloss
+@@ -1270,6 +1272,7 @@
+ info-target: maybe-info-target-libgfortran
+ info-target: maybe-info-target-libobjc
+ info-target: maybe-info-target-libgo
++info-target: maybe-info-target-libphobos
+ info-target: maybe-info-target-libtermcap
+ info-target: maybe-info-target-winsup
+ info-target: maybe-info-target-libgloss
+@@ -1386,6 +1389,7 @@
+ dvi-target: maybe-dvi-target-libgfortran
+ dvi-target: maybe-dvi-target-libobjc
+ dvi-target: maybe-dvi-target-libgo
++dvi-target: maybe-dvi-target-libphobos
+ dvi-target: maybe-dvi-target-libtermcap
+ dvi-target: maybe-dvi-target-winsup
+ dvi-target: maybe-dvi-target-libgloss
+@@ -1502,6 +1506,7 @@
+ pdf-target: maybe-pdf-target-libgfortran
+ pdf-target: maybe-pdf-target-libobjc
+ pdf-target: maybe-pdf-target-libgo
++pdf-target: maybe-pdf-target-libphobos
+ pdf-target: maybe-pdf-target-libtermcap
+ pdf-target: maybe-pdf-target-winsup
+ pdf-target: maybe-pdf-target-libgloss
+@@ -1618,6 +1623,7 @@
+ html-target: maybe-html-target-libgfortran
+ html-target: maybe-html-target-libobjc
+ html-target: maybe-html-target-libgo
++html-target: maybe-html-target-libphobos
+ html-target: maybe-html-target-libtermcap
+ html-target: maybe-html-target-winsup
+ html-target: maybe-html-target-libgloss
+@@ -1734,6 +1740,7 @@
+ TAGS-target: maybe-TAGS-target-libgfortran
+ TAGS-target: maybe-TAGS-target-libobjc
+ TAGS-target: maybe-TAGS-target-libgo
++TAGS-target: maybe-TAGS-target-libphobos
+ TAGS-target: maybe-TAGS-target-libtermcap
+ TAGS-target: maybe-TAGS-target-winsup
+ TAGS-target: maybe-TAGS-target-libgloss
+@@ -1850,6 +1857,7 @@
+ install-info-target: maybe-install-info-target-libgfortran
+ install-info-target: maybe-install-info-target-libobjc
+ install-info-target: maybe-install-info-target-libgo
++install-info-target: maybe-install-info-target-libphobos
+ install-info-target: maybe-install-info-target-libtermcap
+ install-info-target: maybe-install-info-target-winsup
+ install-info-target: maybe-install-info-target-libgloss
+@@ -1966,6 +1974,7 @@
+ install-pdf-target: maybe-install-pdf-target-libgfortran
+ install-pdf-target: maybe-install-pdf-target-libobjc
+ install-pdf-target: maybe-install-pdf-target-libgo
++install-pdf-target: maybe-install-pdf-target-libphobos
+ install-pdf-target: maybe-install-pdf-target-libtermcap
+ install-pdf-target: maybe-install-pdf-target-winsup
+ install-pdf-target: maybe-install-pdf-target-libgloss
+@@ -2082,6 +2091,7 @@
+ install-html-target: maybe-install-html-target-libgfortran
+ install-html-target: maybe-install-html-target-libobjc
+ install-html-target: maybe-install-html-target-libgo
++install-html-target: maybe-install-html-target-libphobos
+ install-html-target: maybe-install-html-target-libtermcap
+ install-html-target: maybe-install-html-target-winsup
+ install-html-target: maybe-install-html-target-libgloss
+@@ -2198,6 +2208,7 @@
+ installcheck-target: maybe-installcheck-target-libgfortran
+ installcheck-target: maybe-installcheck-target-libobjc
+ installcheck-target: maybe-installcheck-target-libgo
++installcheck-target: maybe-installcheck-target-libphobos
+ installcheck-target: maybe-installcheck-target-libtermcap
+ installcheck-target: maybe-installcheck-target-winsup
+ installcheck-target: maybe-installcheck-target-libgloss
+@@ -2314,6 +2325,7 @@
+ mostlyclean-target: maybe-mostlyclean-target-libgfortran
+ mostlyclean-target: maybe-mostlyclean-target-libobjc
+ mostlyclean-target: maybe-mostlyclean-target-libgo
++mostlyclean-target: maybe-mostlyclean-target-libphobos
+ mostlyclean-target: maybe-mostlyclean-target-libtermcap
+ mostlyclean-target: maybe-mostlyclean-target-winsup
+ mostlyclean-target: maybe-mostlyclean-target-libgloss
+@@ -2430,6 +2442,7 @@
+ clean-target: maybe-clean-target-libgfortran
+ clean-target: maybe-clean-target-libobjc
+ clean-target: maybe-clean-target-libgo
++clean-target: maybe-clean-target-libphobos
+ clean-target: maybe-clean-target-libtermcap
+ clean-target: maybe-clean-target-winsup
+ clean-target: maybe-clean-target-libgloss
+@@ -2546,6 +2559,7 @@
+ distclean-target: maybe-distclean-target-libgfortran
+ distclean-target: maybe-distclean-target-libobjc
+ distclean-target: maybe-distclean-target-libgo
++distclean-target: maybe-distclean-target-libphobos
+ distclean-target: maybe-distclean-target-libtermcap
+ distclean-target: maybe-distclean-target-winsup
+ distclean-target: maybe-distclean-target-libgloss
+@@ -2662,6 +2676,7 @@
+ maintainer-clean-target: maybe-maintainer-clean-target-libgfortran
+ maintainer-clean-target: maybe-maintainer-clean-target-libobjc
+ maintainer-clean-target: maybe-maintainer-clean-target-libgo
++maintainer-clean-target: maybe-maintainer-clean-target-libphobos
+ maintainer-clean-target: maybe-maintainer-clean-target-libtermcap
+ maintainer-clean-target: maybe-maintainer-clean-target-winsup
+ maintainer-clean-target: maybe-maintainer-clean-target-libgloss
+@@ -2833,6 +2848,7 @@
+ maybe-check-target-libgfortran \
+ maybe-check-target-libobjc \
+ maybe-check-target-libgo \
++ maybe-check-target-libphobos \
+ maybe-check-target-libtermcap \
+ maybe-check-target-winsup \
+ maybe-check-target-libgloss \
+@@ -3056,6 +3072,7 @@
+ maybe-install-target-libgfortran \
+ maybe-install-target-libobjc \
+ maybe-install-target-libgo \
++ maybe-install-target-libphobos \
+ maybe-install-target-libtermcap \
+ maybe-install-target-winsup \
+ maybe-install-target-libgloss \
+@@ -3191,6 +3208,7 @@
+ maybe-install-strip-target-libgfortran \
+ maybe-install-strip-target-libobjc \
+ maybe-install-strip-target-libgo \
++ maybe-install-strip-target-libphobos \
+ maybe-install-strip-target-libtermcap \
+ maybe-install-strip-target-winsup \
+ maybe-install-strip-target-libgloss \
+@@ -51278,6 +51296,463 @@
+
+
+
++.PHONY: configure-target-libphobos maybe-configure-target-libphobos
++maybe-configure-target-libphobos:
++@if gcc-bootstrap
++configure-target-libphobos: stage_current
++@endif gcc-bootstrap
++@if target-libphobos
++maybe-configure-target-libphobos: configure-target-libphobos
++configure-target-libphobos:
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ echo "Checking multilib configuration for libphobos..."; \
++ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos ; \
++ $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libphobos/multilib.tmp 2> /dev/null ; \
++ if test -r $(TARGET_SUBDIR)/libphobos/multilib.out; then \
++ if cmp -s $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; then \
++ rm -f $(TARGET_SUBDIR)/libphobos/multilib.tmp; \
++ else \
++ rm -f $(TARGET_SUBDIR)/libphobos/Makefile; \
++ mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
++ fi; \
++ else \
++ mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
++ fi; \
++ test ! -f $(TARGET_SUBDIR)/libphobos/Makefile || exit 0; \
++ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos ; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo Configuring in $(TARGET_SUBDIR)/libphobos; \
++ cd "$(TARGET_SUBDIR)/libphobos" || exit 1; \
++ case $(srcdir) in \
++ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
++ *) topdir=`echo $(TARGET_SUBDIR)/libphobos/ | \
++ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
++ esac; \
++ srcdiroption="--srcdir=$${topdir}/libphobos"; \
++ libsrcdir="$$s/libphobos"; \
++ rm -f no-such-file || : ; \
++ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
++ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
++ --target=${target_alias} $${srcdiroption} \
++ || exit 1
++@endif target-libphobos
++
++
++
++
++
++.PHONY: all-target-libphobos maybe-all-target-libphobos
++maybe-all-target-libphobos:
++@if gcc-bootstrap
++all-target-libphobos: stage_current
++@endif gcc-bootstrap
++@if target-libphobos
++TARGET-target-libphobos=all
++maybe-all-target-libphobos: all-target-libphobos
++all-target-libphobos: configure-target-libphobos
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \
++ $(TARGET-target-libphobos))
++@endif target-libphobos
++
++
++
++
++
++.PHONY: check-target-libphobos maybe-check-target-libphobos
++maybe-check-target-libphobos:
++@if target-libphobos
++maybe-check-target-libphobos: check-target-libphobos
++
++check-target-libphobos:
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
++
++@endif target-libphobos
++
++.PHONY: install-target-libphobos maybe-install-target-libphobos
++maybe-install-target-libphobos:
++@if target-libphobos
++maybe-install-target-libphobos: install-target-libphobos
++
++install-target-libphobos: installdirs
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
++
++@endif target-libphobos
++
++.PHONY: install-strip-target-libphobos maybe-install-strip-target-libphobos
++maybe-install-strip-target-libphobos:
++@if target-libphobos
++maybe-install-strip-target-libphobos: install-strip-target-libphobos
++
++install-strip-target-libphobos: installdirs
++ @: $(MAKE); $(unstage)
++ @r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(TARGET_FLAGS_TO_PASS) install-strip)
++
++@endif target-libphobos
++
++# Other targets (info, dvi, pdf, etc.)
++
++.PHONY: maybe-info-target-libphobos info-target-libphobos
++maybe-info-target-libphobos:
++@if target-libphobos
++maybe-info-target-libphobos: info-target-libphobos
++
++info-target-libphobos: \
++ configure-target-libphobos
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing info in $(TARGET_SUBDIR)/libphobos" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ info) \
++ || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-dvi-target-libphobos dvi-target-libphobos
++maybe-dvi-target-libphobos:
++@if target-libphobos
++maybe-dvi-target-libphobos: dvi-target-libphobos
++
++dvi-target-libphobos: \
++ configure-target-libphobos
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing dvi in $(TARGET_SUBDIR)/libphobos" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ dvi) \
++ || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-pdf-target-libphobos pdf-target-libphobos
++maybe-pdf-target-libphobos:
++@if target-libphobos
++maybe-pdf-target-libphobos: pdf-target-libphobos
++
++pdf-target-libphobos: \
++ configure-target-libphobos
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing pdf in $(TARGET_SUBDIR)/libphobos" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ pdf) \
++ || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-html-target-libphobos html-target-libphobos
++maybe-html-target-libphobos:
++@if target-libphobos
++maybe-html-target-libphobos: html-target-libphobos
++
++html-target-libphobos: \
++ configure-target-libphobos
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing html in $(TARGET_SUBDIR)/libphobos" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ html) \
++ || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-TAGS-target-libphobos TAGS-target-libphobos
++maybe-TAGS-target-libphobos:
++@if target-libphobos
++maybe-TAGS-target-libphobos: TAGS-target-libphobos
++
++TAGS-target-libphobos: \
++ configure-target-libphobos
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing TAGS in $(TARGET_SUBDIR)/libphobos" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ TAGS) \
++ || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-install-info-target-libphobos install-info-target-libphobos
++maybe-install-info-target-libphobos:
++@if target-libphobos
++maybe-install-info-target-libphobos: install-info-target-libphobos
++
++install-info-target-libphobos: \
++ configure-target-libphobos \
++ info-target-libphobos
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing install-info in $(TARGET_SUBDIR)/libphobos" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ install-info) \
++ || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-install-pdf-target-libphobos install-pdf-target-libphobos
++maybe-install-pdf-target-libphobos:
++@if target-libphobos
++maybe-install-pdf-target-libphobos: install-pdf-target-libphobos
++
++install-pdf-target-libphobos: \
++ configure-target-libphobos \
++ pdf-target-libphobos
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing install-pdf in $(TARGET_SUBDIR)/libphobos" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ install-pdf) \
++ || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-install-html-target-libphobos install-html-target-libphobos
++maybe-install-html-target-libphobos:
++@if target-libphobos
++maybe-install-html-target-libphobos: install-html-target-libphobos
++
++install-html-target-libphobos: \
++ configure-target-libphobos \
++ html-target-libphobos
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing install-html in $(TARGET_SUBDIR)/libphobos" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ install-html) \
++ || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-installcheck-target-libphobos installcheck-target-libphobos
++maybe-installcheck-target-libphobos:
++@if target-libphobos
++maybe-installcheck-target-libphobos: installcheck-target-libphobos
++
++installcheck-target-libphobos: \
++ configure-target-libphobos
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing installcheck in $(TARGET_SUBDIR)/libphobos" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ installcheck) \
++ || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-mostlyclean-target-libphobos mostlyclean-target-libphobos
++maybe-mostlyclean-target-libphobos:
++@if target-libphobos
++maybe-mostlyclean-target-libphobos: mostlyclean-target-libphobos
++
++mostlyclean-target-libphobos:
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing mostlyclean in $(TARGET_SUBDIR)/libphobos" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ mostlyclean) \
++ || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-clean-target-libphobos clean-target-libphobos
++maybe-clean-target-libphobos:
++@if target-libphobos
++maybe-clean-target-libphobos: clean-target-libphobos
++
++clean-target-libphobos:
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing clean in $(TARGET_SUBDIR)/libphobos" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ clean) \
++ || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-distclean-target-libphobos distclean-target-libphobos
++maybe-distclean-target-libphobos:
++@if target-libphobos
++maybe-distclean-target-libphobos: distclean-target-libphobos
++
++distclean-target-libphobos:
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing distclean in $(TARGET_SUBDIR)/libphobos" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ distclean) \
++ || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-maintainer-clean-target-libphobos maintainer-clean-target-libphobos
++maybe-maintainer-clean-target-libphobos:
++@if target-libphobos
++maybe-maintainer-clean-target-libphobos: maintainer-clean-target-libphobos
++
++maintainer-clean-target-libphobos:
++ @: $(MAKE); $(unstage)
++ @[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++ r=`${PWD_COMMAND}`; export r; \
++ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++ $(NORMAL_TARGET_EXPORTS) \
++ echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libphobos" ; \
++ for flag in $(EXTRA_TARGET_FLAGS); do \
++ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++ done; \
++ (cd $(TARGET_SUBDIR)/libphobos && \
++ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++ "RANLIB=$${RANLIB}" \
++ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++ maintainer-clean) \
++ || exit 1
++
++@endif target-libphobos
++
++
++
++
++
+ .PHONY: configure-target-libtermcap maybe-configure-target-libtermcap
+ maybe-configure-target-libtermcap:
+ @if gcc-bootstrap
+@@ -60184,6 +60659,7 @@
+ configure-target-libgfortran: stage_last
+ configure-target-libobjc: stage_last
+ configure-target-libgo: stage_last
++configure-target-libphobos: stage_last
+ configure-target-libtermcap: stage_last
+ configure-target-winsup: stage_last
+ configure-target-libgloss: stage_last
+@@ -60215,6 +60691,7 @@
+ configure-target-libgfortran: maybe-all-gcc
+ configure-target-libobjc: maybe-all-gcc
+ configure-target-libgo: maybe-all-gcc
++configure-target-libphobos: maybe-all-gcc
+ configure-target-libtermcap: maybe-all-gcc
+ configure-target-winsup: maybe-all-gcc
+ configure-target-libgloss: maybe-all-gcc
+@@ -61059,6 +61536,7 @@
+ configure-target-libgfortran: maybe-all-target-libgcc
+ configure-target-libobjc: maybe-all-target-libgcc
+ configure-target-libgo: maybe-all-target-libgcc
++configure-target-libphobos: maybe-all-target-libgcc
+ configure-target-libtermcap: maybe-all-target-libgcc
+ configure-target-winsup: maybe-all-target-libgcc
+ configure-target-libgloss: maybe-all-target-libgcc
+@@ -61092,6 +61570,8 @@
+
+ configure-target-libgo: maybe-all-target-newlib maybe-all-target-libgloss
+
++configure-target-libphobos: maybe-all-target-newlib maybe-all-target-libgloss
++
+ configure-target-libtermcap: maybe-all-target-newlib maybe-all-target-libgloss
+
+ configure-target-winsup: maybe-all-target-newlib maybe-all-target-libgloss
diff --git a/debian/patches/gdc-libphobos-math.diff b/debian/patches/gdc-libphobos-math.diff
new file mode 100644
index 0000000..5656924
--- /dev/null
+++ b/debian/patches/gdc-libphobos-math.diff
@@ -0,0 +1,28 @@
+# DP: Define fpclassify and signbit for systems that need it.
+
+--- a/src/gcc/d/phobos2/gcc/cbridge_math.c 2010-04-21 13:08:40.000000000 +0100
++++ b/src/gcc/d/phobos2/gcc/cbridge_math.c 2010-08-23 11:01:05.022792451 +0100
+@@ -21,6 +21,23 @@
+ #include <math.h>
+ #include "config.h"
+
++/* If undefined, define fpclassify and signbit here */
++#ifndef fpclassify
++# define fpclassify(x) \
++ (sizeof (x) == sizeof (float) \
++ ? __fpclassifyf (x) \
++ : sizeof (x) == sizeof (double) \
++ ? __fpclassify (x) : __fpclassifyl (x))
++#endif
++
++#ifndef signbit
++# define signbit(x) \
++ (sizeof (x) == sizeof (float) \
++ ? __signbitf (x) \
++ : sizeof (x) == sizeof (double) \
++ ? __signbit (x) : __signbitl (x))
++#endif
++
+ /*
+ #if HAVE_DISTINCT_LONG_DOUBLE
+ typedef long double my_long_double;
diff --git a/debian/patches/gold-and-ld.diff b/debian/patches/gold-and-ld.diff
new file mode 100644
index 0000000..1fb8f0e
--- /dev/null
+++ b/debian/patches/gold-and-ld.diff
@@ -0,0 +1,482 @@
+# DP: Enable both gold and ld in a single toolchain.
+# DP: New option -fuse-ld=ld.bfd, -fuse-ld=gold.
+
+--- a/src/gcc/doc/invoke.texi
++++ b/srcgcc/doc/invoke.texi
+@@ -399,7 +399,7 @@
+ -funit-at-a-time -funroll-all-loops -funroll-loops @gol
+ -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol
+ -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb @gol
+--fwhole-program -fwpa -fuse-linker-plugin @gol
++-fwhole-program -fwpa -fuse-ld -fuse-linker-plugin @gol
+ --param @var{name}=@var{value}
+ -O -O0 -O1 -O2 -O3 -Os -Ofast}
+
+@@ -7689,6 +7689,16 @@
+ Enabled by default when LTO support in GCC is enabled and GCC was compiled
+ with linker supporting plugins (GNU ld or @code{gold}).
+
++@item -fuse-ld=gold
++Use the @command{gold} linker instead of the default linker.
++This option is only necessary if GCC has been configured with
++@option{--enable-gold} and @option{--enable-ld=default}.
++
++@item -fuse-ld=bfd
++Use the @command{ld.bfd} linker instead of the default linker.
++This option is only necessary if GCC has been configured with
++@option{--enable-gold} and @option{--enable-ld}.
++
+ @item -fcprop-registers
+ @opindex fcprop-registers
+ After register allocation and post-register allocation instruction splitting,
+--- a/src/gcc/gcc.c
++++ b/srcgcc/gcc.c
+@@ -656,6 +656,9 @@
+ }"PLUGIN_COND_CLOSE" \
+ %{flto|flto=*:%<fcompare-debug*} \
+ %{flto} %{flto=*} %l " LINK_PIE_SPEC \
++ "%{fuse-ld=gold:%{fuse-ld=bfd:%e-fuse-ld=gold and -fuse-ld=bfd may not be used together}} \
++ %{fuse-ld=gold:-use-gold} \
++ %{fuse-ld=bfd:-use-ld}" \
+ "%X %{o*} %{e*} %{N} %{n} %{r}\
+ %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}}\
+ %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
+--- a/src/gcc/opts.c
++++ b/srcgcc/opts.c
+@@ -1691,8 +1691,9 @@
+ dc->max_errors = value;
+ break;
+
++ case OPT_fuse_ld_:
+ case OPT_fuse_linker_plugin:
+- /* No-op. Used by the driver and passed to us because it starts with f.*/
++ /* No-op. Used by the driver and passed to us because it starts with f. */
+ break;
+
+ default:
+--- a/src/gcc/configure.ac
++++ b/srcgcc/configure.ac
+@@ -1937,6 +1937,17 @@
+ AC_PATH_PROG(gcc_cv_ld, $LD_FOR_TARGET)
+ fi])
+
++gcc_cv_ld_gold_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gold
++
++AS_VAR_SET_IF(gcc_cv_gold,, [
++if test -f $gcc_cv_ld_gold_srcdir/configure.ac \
++ && test -f ../gold/Makefile \
++ && test x$build = x$host; then
++ gcc_cv_gold=../gold/ld-new$build_exeext
++else
++ gcc_cv_gold=''
++fi])
++
+ ORIGINAL_PLUGIN_LD_FOR_TARGET=$gcc_cv_ld
+ PLUGIN_LD=`basename $gcc_cv_ld`
+ AC_ARG_WITH(plugin-ld,
+@@ -1966,6 +1977,9 @@
+ *) AC_CONFIG_FILES(collect-ld:exec-tool.in, [chmod +x collect-ld]) ;;
+ esac
+
++ORIGINAL_GOLD_FOR_TARGET=$gcc_cv_gold
++AC_SUBST(ORIGINAL_GOLD_FOR_TARGET)
++
+ AC_MSG_CHECKING(what linker to use)
+ if test "$gcc_cv_ld" = ../ld/ld-new$build_exeext; then
+ # Single tree build which includes ld. We want to prefer it
+--- a/src/gcc/exec-tool.in
++++ b/srcgcc/exec-tool.in
+@@ -1,6 +1,6 @@
+ #! /bin/sh
+
+-# Copyright (C) 2007, 2008, 2010 Free Software Foundation, Inc.
++# Copyright (C) 2007, 2008, 2010, 2011 Free Software Foundation, Inc.
+ # This file is part of GCC.
+
+ # GCC is free software; you can redistribute it and/or modify
+@@ -21,11 +21,13 @@
+
+ ORIGINAL_AS_FOR_TARGET="@ORIGINAL_AS_FOR_TARGET@"
+ ORIGINAL_LD_FOR_TARGET="@ORIGINAL_LD_FOR_TARGET@"
++ORIGINAL_GOLD_FOR_TARGET="@ORIGINAL_GOLD_FOR_TARGET@"
+ ORIGINAL_PLUGIN_LD_FOR_TARGET="@ORIGINAL_PLUGIN_LD_FOR_TARGET@"
+ ORIGINAL_NM_FOR_TARGET="@ORIGINAL_NM_FOR_TARGET@"
+ exeext=@host_exeext@
+ fast_install=@enable_fast_install@
+ objdir=@objdir@
++version="1.1"
+
+ invoked=`basename "$0"`
+ id=$invoked
+@@ -36,15 +38,44 @@
+ dir=gas
+ ;;
+ collect-ld)
+- # when using a linker plugin, gcc will always pass '-plugin' as the
+- # first or second option to the linker.
+- if test x"$1" = "x-plugin" || test x"$2" = "x-plugin"; then
+- original=$ORIGINAL_PLUGIN_LD_FOR_TARGET
+- else
+- original=$ORIGINAL_LD_FOR_TARGET
++ prog=ld-new$exeext
++ # Look for the a command line option
++ # specifying the linker to be used.
++ case " $* " in
++ *\ -use-gold\ *)
++ original=$ORIGINAL_GOLD_FOR_TARGET
++ dir=gold
++ ;;
++ *\ -use-ld\ * | *\ -use-ld.bfd\ *)
++ original=$ORIGINAL_LD_FOR_TARGET
++ dir=ld
++ ;;
++ *\ -plugin\ *)
++ original=$ORIGINAL_PLUGIN_LD_FOR_TARGET
++ dir=ld
++ ;;
++ *)
++ original=$ORIGINAL_LD_FOR_TARGET
++ dir=ld
++ ;;
++ esac
++
++ # If the selected linker has not been configured then
++ # try using the others, in the order PLUGIN-LD, LD, GOLD.
++ if test x"$original" = x; then
++ if test x"$ORIGINAL_PLUGIN_LD_FOR_TARGET" != x; then
++ original=$ORIGINAL_PLUGIN_LD_FOR_TARGET
++ dir=ld
++ elif test x"$ORIGINAL_LD_FOR_TARGET" != x; then
++ original=$ORIGINAL_LD_FOR_TARGET
++ dir=ld
++ elif test x"$ORIGINAL_GOLD_FOR_TARGET" != x; then
++ original=$ORIGINAL_GOLD_FOR_TARGET
++ dir=gold
++ # Otherwise do nothing - the case statement below
++ # will issue an error message for us.
++ fi
+ fi
+- prog=ld-new$exeext
+- dir=ld
+ id=ld
+ ;;
+ nm)
+@@ -61,29 +92,58 @@
+ scriptdir=`cd "$tdir" && pwd`
+
+ if test -x $scriptdir/../$dir/$prog; then
+- test "$fast_install" = yes || exec $scriptdir/../$dir/$prog ${1+"$@"}
++ if test "$fast_install" = yes; then
++ # If libtool did everything it needs to do, there's a fast path.
++ lt_prog=$scriptdir/../$dir/$objdir/lt-$prog
+
+- # if libtool did everything it needs to do, there's a fast path
+- lt_prog=$scriptdir/../$dir/$objdir/lt-$prog
+- test -x $lt_prog && exec $lt_prog ${1+"$@"}
+-
+- # libtool has not relinked ld-new yet, but we cannot just use the
+- # previous stage (because then the relinking would just never happen!).
+- # So we take extra care to use prev-ld/ld-new *on recursive calls*.
+- eval LT_RCU="\${LT_RCU_$id}"
+- test x"$LT_RCU" = x"1" && exec $scriptdir/../prev-$dir/$prog ${1+"$@"}
+-
+- eval LT_RCU_$id=1
+- export LT_RCU_$id
+- $scriptdir/../$dir/$prog ${1+"$@"}
+- result=$?
+- exit $result
+-
++ if test -x $lt_prog; then
++ original=$lt_prog
++ else
++ # Libtool has not relinked ld-new yet, but we cannot just use the
++ # previous stage (because then the relinking would just never happen!).
++ # So we take extra care to use prev-ld/ld-new *on recursive calls*.
++ eval LT_RCU="\${LT_RCU_$id}"
++ if test x"$LT_RCU" = x"1"; then
++ original=$scriptdir/../prev-$dir/$prog
++ else
++ eval LT_RCU_$id=1
++ export LT_RCU_$id
++ case " $* " in
++ *\ -v\ *)
++ echo "$invoked $version"
++ echo $scriptdir/../$dir/$prog $*
++ ;;
++ esac
++ $scriptdir/../$dir/$prog ${1+"$@"}
++ result=$?
++ exit $result
++ fi
++ fi
++ else
++ original=$scriptdir/../$dir/$prog
++ fi
+ else
+- exec $scriptdir/../prev-$dir/$prog ${1+"$@"}
++ original=$scriptdir/../prev-$dir/$prog
+ fi
+ ;;
+- *)
+- exec $original ${1+"$@"}
++ "")
++ echo "$invoked: executable not configured"
++ exit 1
+ ;;
+ esac
++
++# If -v has been used then display our version number
++# and then echo the command we are about to invoke.
++case " $* " in
++ *\ -v\ *)
++ echo "$invoked $version"
++ echo $original $*
++ ;;
++esac
++
++if test -x $original; then
++ exec "$original" ${1+"$@"}
++else
++ echo "$invoked: unable to locate executable: $original"
++ exit 1
++fi
+--- a/src/gcc/common.opt
++++ b/srcgcc/common.opt
+@@ -1998,6 +1998,9 @@
+ Common Report Var(flag_unwind_tables) Optimization
+ Just generate unwind tables for exception handling
+
++fuse-ld=
++Common Joined Undocumented
++
+ fuse-linker-plugin
+ Common Undocumented
+
+--- a/src/gcc/collect2.c
++++ b/srcgcc/collect2.c
+@@ -1075,17 +1075,19 @@
+ int
+ main (int argc, char **argv)
+ {
+- static const char *const ld_suffix = "ld";
+- static const char *const plugin_ld_suffix = PLUGIN_LD;
+- static const char *const real_ld_suffix = "real-ld";
++ static const char *const ld_suffix = "ld";
++ static const char *const gold_suffix = "gold";
++ static const char *const bfd_ld_suffix = "ld.bfd";
++ static const char *const plugin_ld_suffix = PLUGIN_LD;
++ static const char *const real_ld_suffix = "real-ld";
+ static const char *const collect_ld_suffix = "collect-ld";
+- static const char *const nm_suffix = "nm";
+- static const char *const gnm_suffix = "gnm";
++ static const char *const nm_suffix = "nm";
++ static const char *const gnm_suffix = "gnm";
+ #ifdef LDD_SUFFIX
+- static const char *const ldd_suffix = LDD_SUFFIX;
++ static const char *const ldd_suffix = LDD_SUFFIX;
+ #endif
+- static const char *const strip_suffix = "strip";
+- static const char *const gstrip_suffix = "gstrip";
++ static const char *const strip_suffix = "strip";
++ static const char *const gstrip_suffix = "gstrip";
+
+ #ifdef CROSS_DIRECTORY_STRUCTURE
+ /* If we look for a program in the compiler directories, we just use
+@@ -1095,6 +1097,10 @@
+
+ const char *const full_ld_suffix =
+ concat(target_machine, "-", ld_suffix, NULL);
++ const char *const full_gold_suffix =
++ concat (target_machine, "-", gold_suffix, NULL);
++ const char *const full_bfd_ld_suffix =
++ concat (target_machine, "-", bfd_ld_suffix, NULL);
+ const char *const full_plugin_ld_suffix =
+ concat(target_machine, "-", plugin_ld_suffix, NULL);
+ const char *const full_nm_suffix =
+@@ -1110,15 +1116,17 @@
+ const char *const full_gstrip_suffix =
+ concat (target_machine, "-", gstrip_suffix, NULL);
+ #else
+- const char *const full_ld_suffix = ld_suffix;
++ const char *const full_ld_suffix = ld_suffix;
++ const char *const full_gold_suffix = gold_suffix;
++ const char *const full_bfd_ld_suffix = bfd_ld_suffix;
+ const char *const full_plugin_ld_suffix = plugin_ld_suffix;
+- const char *const full_nm_suffix = nm_suffix;
+- const char *const full_gnm_suffix = gnm_suffix;
++ const char *const full_nm_suffix = nm_suffix;
++ const char *const full_gnm_suffix = gnm_suffix;
+ #ifdef LDD_SUFFIX
+- const char *const full_ldd_suffix = ldd_suffix;
++ const char *const full_ldd_suffix = ldd_suffix;
+ #endif
+- const char *const full_strip_suffix = strip_suffix;
+- const char *const full_gstrip_suffix = gstrip_suffix;
++ const char *const full_strip_suffix = strip_suffix;
++ const char *const full_gstrip_suffix = gstrip_suffix;
+ #endif /* CROSS_DIRECTORY_STRUCTURE */
+
+ const char *arg;
+@@ -1132,7 +1140,13 @@
+ const char **c_ptr;
+ char **ld1_argv;
+ const char **ld1;
+- bool use_plugin = false;
++ enum linker_select
++ {
++ DFLT_LINKER,
++ PLUGIN_LINKER,
++ GOLD_LINKER,
++ BFD_LINKER
++ } selected_linker = DFLT_LINKER;
+
+ /* The kinds of symbols we will have to consider when scanning the
+ outcome of a first pass link. This is ALL to start with, then might
+@@ -1209,15 +1223,21 @@
+ else if (! strcmp (argv[i], "-flto-partition=none"))
+ no_partition = true;
+ else if ((! strncmp (argv[i], "-flto=", 6)
+- || ! strcmp (argv[i], "-flto")) && ! use_plugin)
++ || ! strcmp (argv[i], "-flto"))
++ && selected_linker != PLUGIN_LINKER)
+ lto_mode = LTO_MODE_WHOPR;
+ else if (!strncmp (argv[i], "-fno-lto", 8))
+ lto_mode = LTO_MODE_NONE;
+ else if (! strcmp (argv[i], "-plugin"))
+ {
+- use_plugin = true;
++ selected_linker = PLUGIN_LINKER;
+ lto_mode = LTO_MODE_NONE;
+ }
++ else if (! strcmp (argv[i], "-use-gold"))
++ selected_linker = GOLD_LINKER;
++ else if (! strcmp (argv[i], "-use-ld"))
++ selected_linker = BFD_LINKER;
++
+ #ifdef COLLECT_EXPORT_LIST
+ /* since -brtl, -bexport, -b64 are not position dependent
+ also check for them here */
+@@ -1299,36 +1319,109 @@
+ /* Try to discover a valid linker/nm/strip to use. */
+
+ /* Maybe we know the right file to use (if not cross). */
+- ld_file_name = 0;
++ ld_file_name = NULL;
+ #ifdef DEFAULT_LINKER
+ if (access (DEFAULT_LINKER, X_OK) == 0)
+ ld_file_name = DEFAULT_LINKER;
+- if (ld_file_name == 0)
++ if (ld_file_name == NULL)
+ #endif
+ #ifdef REAL_LD_FILE_NAME
+ ld_file_name = find_a_file (&path, REAL_LD_FILE_NAME);
+- if (ld_file_name == 0)
++ if (ld_file_name == NULL)
+ #endif
+ /* Search the (target-specific) compiler dirs for ld'. */
+ ld_file_name = find_a_file (&cpath, real_ld_suffix);
+ /* Likewise for `collect-ld'. */
+- if (ld_file_name == 0)
++ if (ld_file_name == NULL)
+ ld_file_name = find_a_file (&cpath, collect_ld_suffix);
+ /* Search the compiler directories for `ld'. We have protection against
+ recursive calls in find_a_file. */
+- if (ld_file_name == 0)
+- ld_file_name = find_a_file (&cpath,
+- use_plugin
+- ? plugin_ld_suffix
+- : ld_suffix);
++ if (ld_file_name == NULL)
++ switch (selected_linker)
++ {
++ default:
++ case DFLT_LINKER:
++ ld_file_name = find_a_file (&cpath, ld_suffix);
++ break;
++ case PLUGIN_LINKER:
++ ld_file_name = find_a_file (&cpath, plugin_ld_suffix);
++ break;
++ case GOLD_LINKER:
++ ld_file_name = find_a_file (&cpath, gold_suffix);
++ break;
++ case BFD_LINKER:
++ ld_file_name = find_a_file (&cpath, bfd_ld_suffix);
++ break;
++ }
+ /* Search the ordinary system bin directories
+ for `ld' (if native linking) or `TARGET-ld' (if cross). */
+- if (ld_file_name == 0)
+- ld_file_name = find_a_file (&path,
+- use_plugin
+- ? full_plugin_ld_suffix
+- : full_ld_suffix);
++ if (ld_file_name == NULL)
++ switch (selected_linker)
++ {
++ default:
++ case DFLT_LINKER:
++ ld_file_name = find_a_file (&path, full_ld_suffix);
++ break;
++ case PLUGIN_LINKER:
++ ld_file_name = find_a_file (&path, full_plugin_ld_suffix);
++ break;
++ case GOLD_LINKER:
++ ld_file_name = find_a_file (&path, full_gold_suffix);
++ break;
++ case BFD_LINKER:
++ ld_file_name = find_a_file (&path, full_bfd_ld_suffix);
++ break;
++ }
++ /* If we failed to find a plugin-capable linker, try the ordinary one. */
++ if (ld_file_name == NULL && selected_linker == PLUGIN_LINKER)
++ ld_file_name = find_a_file (&cpath, ld_suffix);
+
++ if ((vflag || debug) && ld_file_name == NULL)
++ {
++ struct prefix_list * p;
++ const char * s;
++
++ notice ("collect2: warning: unable to find linker.\n");
++
++#ifdef DEFAULT_LINKER
++ notice (" Searched for this absolute executable:\n");
++ notice (" %s\n", DEFAULT_LINKER);
++#endif
++
++ notice (" Searched in these paths:\n");
++ for (p = cpath.plist; p != NULL; p = p->next)
++ notice (" %s\n", p->prefix);
++ notice (" For these executables:\n");
++ notice (" %s\n", real_ld_suffix);
++ notice (" %s\n", collect_ld_suffix);
++ switch (selected_linker)
++ {
++ default:
++ case DFLT_LINKER: s = ld_suffix; break;
++ case PLUGIN_LINKER: s = plugin_ld_suffix; break;
++ case GOLD_LINKER: s = gold_suffix; break;
++ case BFD_LINKER: s = bfd_ld_suffix; break;
++ }
++ notice (" %s\n", s);
++
++ notice (" And searched in these paths:\n");
++ for (p = path.plist; p != NULL; p = p->next)
++ notice (" %s\n", p->prefix);
++ notice (" For these executables:\n");
++#ifdef REAL_LD_FILE_NAME
++ notice (" %s\n", REAL_LD_FILE_NAME);
++#endif
++ switch (selected_linker)
++ {
++ default:
++ case DFLT_LINKER: s = full_ld_suffix; break;
++ case PLUGIN_LINKER: s = full_plugin_ld_suffix; break;
++ case GOLD_LINKER: s = full_gold_suffix; break;
++ case BFD_LINKER: s = full_bfd_ld_suffix; break;
++ }
++ notice (" %s\n", s);
++ }
++
+ #ifdef REAL_NM_FILE_NAME
+ nm_file_name = find_a_file (&path, REAL_NM_FILE_NAME);
+ if (nm_file_name == 0)
diff --git a/debian/patches/hurd-changes.diff b/debian/patches/hurd-changes.diff
new file mode 100644
index 0000000..0f9eea4
--- /dev/null
+++ b/debian/patches/hurd-changes.diff
@@ -0,0 +1,28 @@
+# 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/gnu.h | 3 ++-
+ gcc/config/t-gnu | 2 +-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+--- a/src/gcc/config/gnu.h
++++ b/src/gcc/config/gnu.h
+@@ -30,7 +30,8 @@ along with GCC. If not, see <http://www.gnu.org/licenses/>.
+
+ /* Standard include directory. In GNU, "/usr" is a four-letter word. */
+ #undef STANDARD_INCLUDE_DIR
+-#define STANDARD_INCLUDE_DIR "/include"
++/* Overriden for Debian GNU/Hurd. */
++#define STANDARD_INCLUDE_DIR "/usr/include"
+
+ #undef LINUX_TARGET_OS_CPP_BUILTINS
+ #define LINUX_TARGET_OS_CPP_BUILTINS() \
+--- a/src/gcc/config/t-gnu
++++ b/src/gcc/config/t-gnu
+@@ -1,2 +1,2 @@
+ # In GNU, "/usr" is a four-letter word.
+-NATIVE_SYSTEM_HEADER_DIR = /include
++NATIVE_SYSTEM_HEADER_DIR = /usr/include
diff --git a/debian/patches/hurd-pthread.diff b/debian/patches/hurd-pthread.diff
new file mode 100644
index 0000000..5bdb3d9
--- /dev/null
+++ b/debian/patches/hurd-pthread.diff
@@ -0,0 +1,181 @@
+# Fix pthread support in a/src/boehm-gc
+
+--- a/src/boehm-gc/dyn_load.c
++++ b/src/boehm-gc/dyn_load.c
+@@ -26,7 +26,7 @@
+ * None of this is safe with dlclose and incremental collection.
+ * But then not much of anything is safe in the presence of dlclose.
+ */
+-#if (defined(__linux__) || defined(__GLIBC__)) && !defined(_GNU_SOURCE)
++#if (defined(__linux__) || defined(__GLIBC__) || defined(__GNU__)) && !defined(_GNU_SOURCE)
+ /* Can't test LINUX, since this must be define before other includes */
+ # define _GNU_SOURCE
+ #endif
+--- a/src/boehm-gc/pthread_support.c.orig 2009-02-07 22:27:11.828527000 +0000
++++ b/src/boehm-gc/pthread_support.c 2009-02-07 22:27:18.279505000 +0000
+@@ -885,7 +885,7 @@
+ GC_nprocs = pthread_num_processors_np();
+ # endif
+ # if defined(GC_OSF1_THREADS) || defined(GC_AIX_THREADS) \
+- || defined(GC_SOLARIS_PTHREADS)
++ || defined(GC_SOLARIS_PTHREADS) || defined(GC_GNU_THREADS)
+ GC_nprocs = sysconf(_SC_NPROCESSORS_ONLN);
+ if (GC_nprocs <= 0) GC_nprocs = 1;
+ # endif
+--- a/src/boehm-gc/include/gc_config_macros.h.orig 2009-02-07 22:25:08.240177000 +0000
++++ b/src/boehm-gc/include/gc_config_macros.h 2009-02-07 22:28:40.648347000 +0000
+@@ -6,7 +6,8 @@
+ || defined(GC_SOLARIS_PTHREADS) \
+ || defined(GC_HPUX_THREADS) \
+ || defined(GC_AIX_THREADS) \
+- || defined(GC_LINUX_THREADS))
++ || defined(GC_LINUX_THREADS) \
++ || defined(GC_GNU_THREADS))
+ # define _REENTRANT
+ /* Better late than never. This fails if system headers that */
+ /* depend on this were previously included. */
+@@ -21,7 +22,8 @@
+ defined(GC_HPUX_THREADS) || defined(GC_OSF1_THREADS) || \
+ defined(GC_DGUX386_THREADS) || defined(GC_DARWIN_THREADS) || \
+ defined(GC_AIX_THREADS) || \
+- (defined(GC_WIN32_THREADS) && defined(__CYGWIN32__))
++ (defined(GC_WIN32_THREADS) && defined(__CYGWIN32__)) || \
++ defined(GC_GNU_THREADS)
+ # define GC_PTHREADS
+ # endif
+
+--- a/src/boehm-gc/threadlibs.c.orig 2009-02-07 22:34:42.429201000 +0000
++++ b/src/boehm-gc/threadlibs.c 2009-02-07 22:34:49.530544000 +0000
+@@ -12,7 +12,8 @@
+ # endif
+ # if defined(GC_LINUX_THREADS) || defined(GC_IRIX_THREADS) \
+ || defined(GC_SOLARIS_PTHREADS) \
+- || defined(GC_DARWIN_THREADS) || defined(GC_AIX_THREADS)
++ || defined(GC_DARWIN_THREADS) || defined(GC_AIX_THREADS) \
++ || defined(GC_GNU_THREADS)
+ printf("-lpthread\n");
+ # endif
+ # if defined(GC_FREEBSD_THREADS)
+--- a/src/boehm-gc/configure.ac.orig 2009-02-07 22:30:12.000000000 +0000
++++ b/src/boehm-gc/configure.ac 2009-02-07 22:35:31.717091000 +0000
+@@ -180,6 +180,11 @@
+ AM_CPPFLAGS="$AM_CPPFLAGS -pthread"
+ THREADLIBS=-pthread
+ ;;
++ *-*-gnu*)
++ AC_DEFINE(GC_GNU_THREADS,1,[support GNU threads])
++ AC_DEFINE(_REENTRANT)
++ AC_DEFINE(THREAD_LOCAL_ALLOC)
++ ;;
+ *-*-solaris2.8*)
+ AC_DEFINE(GC_SOLARIS_PTHREADS,1,[support for Solaris pthreads])
+ # Need to use alternate thread library, otherwise gctest hangs
+--- a/src/boehm-gc/configure.orig 2009-02-07 22:32:34.000000000 +0000
++++ b/src/boehm-gc/configure 2009-02-07 22:35:28.065650000 +0000
+@@ -14893,6 +14893,20 @@
+ AM_CPPFLAGS="$AM_CPPFLAGS -pthread"
+ THREADLIBS=-pthread
+ ;;
++ *-*-gnu*)
++cat >>confdefs.h <<\_ACEOF
++#define GC_GNU_THREADS 1
++_ACEOF
++
++ cat >>confdefs.h <<\_ACEOF
++#define _REENTRANT 1
++_ACEOF
++
++cat >>confdefs.h <<\_ACEOF
++#define THREAD_LOCAL_ALLOC 1
++_ACEOF
++
++ ;;
+ *-*-solaris2.8*)
+
+ $as_echo "#define GC_SOLARIS_PTHREADS 1" >>confdefs.h
+--- a/src/boehm-gc/os_dep.c.orig 2009-02-07 22:37:20.000000000 +0000
++++ b/src/boehm-gc/os_dep.c 2009-02-07 22:37:40.000000000 +0000
+@@ -312,7 +312,7 @@
+ /* for recent Linux versions. This seems to be the easiest way to */
+ /* cover all versions. */
+
+-# ifdef LINUX
++# if defined(LINUX) || defined(HURD)
+ /* Some Linux distributions arrange to define __data_start. Some */
+ /* define data_start as a weak symbol. The latter is technically */
+ /* broken, since the user program may define data_start, in which */
+@@ -331,7 +331,7 @@
+ {
+ extern ptr_t GC_find_limit();
+
+-# ifdef LINUX
++# if defined(LINUX) || defined(HURD)
+ /* Try the easy approaches first: */
+ if ((ptr_t)__data_start != 0) {
+ GC_data_start = (ptr_t)(__data_start);
+--- a/src/boehm-gc/include/private/gcconfig.h.orig 2009-02-07 22:29:18.000000000 +0000
++++ b/src/boehm-gc/include/private/gcconfig.h 2009-02-07 22:41:24.598684000 +0000
+@@ -1316,8 +1316,9 @@
+ # define OS_TYPE "HURD"
+ # define STACK_GROWS_DOWN
+ # define HEURISTIC2
+- extern int __data_start[];
+-# define DATASTART ( (ptr_t) (__data_start))
++# define SIG_SUSPEND SIGUSR1
++# define SIG_THR_RESTART SIGUSR2
++# define SEARCH_FOR_DATA_START
+ extern int _end[];
+ # define DATAEND ( (ptr_t) (_end))
+ /* # define MPROTECT_VDB Not quite working yet? */
+@@ -2153,7 +2154,8 @@
+ # if defined(SVR4) || defined(LINUX) || defined(IRIX5) || defined(HPUX) \
+ || defined(OPENBSD) || defined(NETBSD) || defined(FREEBSD) \
+ || defined(DGUX) || defined(BSD) || defined(SUNOS4) \
+- || defined(_AIX) || defined(DARWIN) || defined(OSF1)
++ || defined(_AIX) || defined(DARWIN) || defined(OSF1) \
++ || defined(HURD)
+ # define UNIX_LIKE /* Basic Unix-like system calls work. */
+ # endif
+
+@@ -2209,7 +2211,7 @@
+ # define CACHE_LINE_SIZE 32 /* Wild guess */
+ # endif
+
+-# if defined(LINUX) || defined(__GLIBC__)
++# if defined(LINUX) || defined(HURD) || defined(__GLIBC__)
+ # define REGISTER_LIBRARIES_EARLY
+ /* We sometimes use dl_iterate_phdr, which may acquire an internal */
+ /* lock. This isn't safe after the world has stopped. So we must */
+@@ -2244,6 +2246,9 @@
+ # if defined(GC_AIX_THREADS) && !defined(_AIX)
+ --> inconsistent configuration
+ # endif
++# if defined(GC_GNU_THREADS) && !defined(HURD)
++ --> inconsistent configuration
++# endif
+ # if defined(GC_WIN32_THREADS) && !defined(MSWIN32) && !defined(CYGWIN32)
+ --> inconsistent configuration
+ # endif
+--- a/src/boehm-gc/include/gc_config.h.in.orig 2009-02-08 01:51:09.707191000 +0000
++++ b/src/boehm-gc/include/gc_config.h.in 2009-02-08 01:54:06.298757000 +0000
+@@ -33,6 +33,9 @@
+ /* include support for gcj */
+ #undef GC_GCJ_SUPPORT
+
++/* support GNU/Hurd threads */
++#undef GC_GNU_THREADS
++
+ /* enables support for HP/UX 11 pthreads */
+ #undef GC_HPUX_THREADS
+
+--- a/src/boehm-gc/specific.c.orig 2009-02-08 03:44:40.833287000 +0000
++++ b/src/boehm-gc/specific.c 2009-02-08 03:44:50.865199000 +0000
+@@ -13,7 +13,7 @@
+
+ #include "private/gc_priv.h" /* For GC_compare_and_exchange, GC_memory_barrier */
+
+-#if defined(GC_LINUX_THREADS)
++#if defined(GC_LINUX_THREADS) || defined(GC_GNU_THREADS)
+
+ #include "private/specific.h"
+
diff --git a/debian/patches/ibm-branch.diff b/debian/patches/ibm-branch.diff
new file mode 100644
index 0000000..34055ea
--- /dev/null
+++ b/debian/patches/ibm-branch.diff
@@ -0,0 +1,2525 @@
+# DP: updates from the ibm/4.6 branch upto 20110707 (r175989).
+
+svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@175885 svn://gcc.gnu.org/svn/gcc/branches/ibm/gcc-4_6-branch \
+ | sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
+ | awk '/^Index:.*\.(class|texi)/ {skip=1; next} /^Index:/ { skip=0 } skip==0'
+
+Index: gcc/testsuite/gcc.target/powerpc/pr48053-3.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/pr48053-3.c (.../gcc-4_6-branch)
++++ b/src/gcc/testsuite/gcc.target/powerpc/pr48053-3.c (.../ibm/gcc-4_6-branch)
+@@ -0,0 +1,41 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
++/* { dg-require-effective-target powerpc_vsx_ok } */
++/* { dg-options "-O3 -mcpu=power7" } */
++
++/* Cut down example from s_scalbnl that aborted on 32-bit when the fix for
++ 48053 went in to allow creating DImode 0's in VSX registers. */
++
++typedef union
++{
++ long double value;
++ struct
++ {
++ unsigned long long msw;
++ unsigned long long lsw;
++ } parts64;
++ struct
++ {
++ unsigned int w0, w1, w2, w3;
++ } parts32;
++} ieee854_long_double_shape_type;
++
++static const long double twolm54 = 5.55111512312578270212e-17;
++
++long double foo (long double x, int n)
++{
++ long long k, hx, lx;
++ ieee854_long_double_shape_type qw_u;
++
++ qw_u.value = x;
++ hx = qw_u.parts64.msw;
++ lx = qw_u.parts64.lsw;
++
++ k = ((hx >> 52) & 0x7ff) + n + 54;
++
++ qw_u.parts64.msw = ((hx & 0x800fffffffffffffULL) | (k << 52));
++ qw_u.parts64.lsw = lx;
++ x = qw_u.value;
++
++ return x*twolm54;
++}
+Index: gcc/testsuite/gcc.target/powerpc/no-r11-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/no-r11-1.c (.../gcc-4_6-branch)
++++ b/src/gcc/testsuite/gcc.target/powerpc/no-r11-1.c (.../ibm/gcc-4_6-branch)
+@@ -0,0 +1,11 @@
++/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
++/* { dg-skip-if "" { *-*-darwin* } { "*" } { "" } } */
++/* { dg-options "-O2 -mno-r11" } */
++
++int
++call_ptr (int (func) (void))
++{
++ return func () + 1;
++}
++
++/* { dg-final { scan-assembler-not "ld 11,16(3)" } } */
+Index: gcc/testsuite/gcc.target/powerpc/no-r11-2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/no-r11-2.c (.../gcc-4_6-branch)
++++ b/src/gcc/testsuite/gcc.target/powerpc/no-r11-2.c (.../ibm/gcc-4_6-branch)
+@@ -0,0 +1,11 @@
++/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
++/* { dg-skip-if "" { *-*-darwin* } { "*" } { "" } } */
++/* { dg-options "-O2 -mr11" } */
++
++int
++call_ptr (int (func) (void))
++{
++ return func () + 1;
++}
++
++/* { dg-final { scan-assembler "ld 11,16" } } */
+Index: gcc/testsuite/gcc.target/powerpc/no-r11-3.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/no-r11-3.c (.../gcc-4_6-branch)
++++ b/src/gcc/testsuite/gcc.target/powerpc/no-r11-3.c (.../ibm/gcc-4_6-branch)
+@@ -0,0 +1,20 @@
++/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
++/* { dg-skip-if "" { *-*-darwin* } { "*" } { "" } } */
++/* { dg-options "-O2 -mno-r11" } */
++
++extern void ext_call (int (func) (void));
++
++int
++outer_func (int init) /* { dg-error "-mno-r11 must not be used if you have trampolines" "" } */
++{
++ int value = init;
++
++ int inner (void)
++ {
++ return ++value;
++ }
++
++ ext_call (inner);
++ return value;
++}
++
+Index: gcc/testsuite/gcc.target/powerpc/ppc-switch-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/ppc-switch-1.c (.../gcc-4_6-branch)
++++ b/src/gcc/testsuite/gcc.target/powerpc/ppc-switch-1.c (.../ibm/gcc-4_6-branch)
+@@ -0,0 +1,26 @@
++/* { dg-do compile { target { powerpc*-*-* } } } */
++/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
++/* { dg-options "-O2 --param case-values-threshold=2" } */
++/* { dg-final { scan-assembler "mtctr" } } */
++/* { dg-final { scan-assembler "bctr" } } */
++
++/* Force using a dispatch table even though by default we would generate
++ ifs. */
++
++extern long call (long);
++
++long
++test_switch (long a, long b)
++{
++ long c;
++
++ switch (a)
++ {
++ case 0: c = -b; break;
++ case 1: c = ~b; break;
++ case 2: c = b+1; break;
++ default: c = b & 9; break;
++ }
++
++ return call (c) + 1;
++}
+Index: gcc/testsuite/gcc.target/powerpc/ppc-switch-2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/ppc-switch-2.c (.../gcc-4_6-branch)
++++ b/src/gcc/testsuite/gcc.target/powerpc/ppc-switch-2.c (.../ibm/gcc-4_6-branch)
+@@ -0,0 +1,32 @@
++/* { dg-do compile { target { powerpc*-*-* } } } */
++/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
++/* { dg-options "-O2 --param case-values-threshold=20" } */
++/* { dg-final { scan-assembler-not "mtctr" } } */
++/* { dg-final { scan-assembler-not "bctr" } } */
++
++/* Force using if tests, instead of a dispatch table. */
++
++extern long call (long);
++
++long
++test_switch (long a, long b)
++{
++ long c;
++
++ switch (a)
++ {
++ case 0: c = -b; break;
++ case 1: c = ~b; break;
++ case 2: c = b+1; break;
++ case 3: c = b-2; break;
++ case 4: c = b*3; break;
++ case 5: c = b/4; break;
++ case 6: c = b<<5; break;
++ case 7: c = b>>6; break;
++ case 8: c = b|7; break;
++ case 9: c = b^8; break;
++ default: c = b&9; break;
++ }
++
++ return call (c) + 1;
++}
+Index: gcc/testsuite/gcc.target/powerpc/pr48258-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/pr48258-1.c (.../gcc-4_6-branch)
++++ b/src/gcc/testsuite/gcc.target/powerpc/pr48258-1.c (.../ibm/gcc-4_6-branch)
+@@ -0,0 +1,57 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
++/* { dg-require-effective-target powerpc_vsx_ok } */
++/* { dg-options "-O3 -mcpu=power7 -mabi=altivec -ffast-math -fno-unroll-loops" } */
++/* { dg-final { scan-assembler-times "xvaddsp" 3 } } */
++/* { dg-final { scan-assembler-times "xvminsp" 3 } } */
++/* { dg-final { scan-assembler-times "xvmaxsp" 3 } } */
++/* { dg-final { scan-assembler-times "xxsldwi" 6 } } */
++/* { dg-final { scan-assembler-times "xscvspdp" 3 } } */
++/* { dg-final { scan-assembler-not "stvewx" } } */
++/* { dg-final { scan-assembler-not "stvx" } } */
++/* { dg-final { scan-assembler-not "stxvd2x" } } */
++/* { dg-final { scan-assembler-not "stxvw4x" } } */
++
++#include <stddef.h>
++
++#ifndef SIZE
++#define SIZE 1024
++#endif
++
++float values[SIZE] __attribute__((__aligned__(32)));
++
++float
++vector_sum (void)
++{
++ size_t i;
++ float sum = 0.0f;
++
++ for (i = 0; i < SIZE; i++)
++ sum += values[i];
++
++ return sum;
++}
++
++float
++vector_min (void)
++{
++ size_t i;
++ float min = values[0];
++
++ for (i = 0; i < SIZE; i++)
++ min = __builtin_fminf (min, values[i]);
++
++ return min;
++}
++
++float
++vector_max (void)
++{
++ size_t i;
++ float max = values[0];
++
++ for (i = 0; i < SIZE; i++)
++ max = __builtin_fmaxf (max, values[i]);
++
++ return max;
++}
+Index: gcc/testsuite/gcc.target/powerpc/pr48258-2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/pr48258-2.c (.../gcc-4_6-branch)
++++ b/src/gcc/testsuite/gcc.target/powerpc/pr48258-2.c (.../ibm/gcc-4_6-branch)
+@@ -0,0 +1,58 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
++/* { dg-require-effective-target powerpc_vsx_ok } */
++/* { dg-options "-O3 -mcpu=power7 -mabi=altivec -ffast-math -fno-unroll-loops" } */
++/* { dg-final { scan-assembler-times "xvadddp" 1 } } */
++/* { dg-final { scan-assembler-times "xvmindp" 1 } } */
++/* { dg-final { scan-assembler-times "xvmaxdp" 1 } } */
++/* { dg-final { scan-assembler-times "xsadddp" 1 } } */
++/* { dg-final { scan-assembler-times "xsmindp" 1 } } */
++/* { dg-final { scan-assembler-times "xsmaxdp" 1 } } */
++/* { dg-final { scan-assembler-not "xxsldwi" } } */
++/* { dg-final { scan-assembler-not "stvx" } } */
++/* { dg-final { scan-assembler-not "stxvd2x" } } */
++/* { dg-final { scan-assembler-not "stxvw4x" } } */
++
++#include <stddef.h>
++
++#ifndef SIZE
++#define SIZE 1024
++#endif
++
++double values[SIZE] __attribute__((__aligned__(32)));
++
++double
++vector_sum (void)
++{
++ size_t i;
++ double sum = 0.0;
++
++ for (i = 0; i < SIZE; i++)
++ sum += values[i];
++
++ return sum;
++}
++
++double
++vector_min (void)
++{
++ size_t i;
++ double min = values[0];
++
++ for (i = 0; i < SIZE; i++)
++ min = __builtin_fmin (min, values[i]);
++
++ return min;
++}
++
++double
++vector_max (void)
++{
++ size_t i;
++ double max = values[0];
++
++ for (i = 0; i < SIZE; i++)
++ max = __builtin_fmax (max, values[i]);
++
++ return max;
++}
+Index: gcc/testsuite/ChangeLog.ibm
+===================================================================
+--- a/src/gcc/testsuite/ChangeLog.ibm (.../gcc-4_6-branch)
++++ b/src/gcc/testsuite/ChangeLog.ibm (.../ibm/gcc-4_6-branch)
+@@ -0,0 +1,37 @@
++2011-07-06 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Backport from mainline
++ 2011-07-06 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ * gcc.target/powerpc/no-r11-1.c: New test for -mr11, -mno-r11.
++ * gcc.target/powerpc/no-r11-2.c: Ditto.
++ * gcc.target/powerpc/no-r11-3.c: Ditto.
++
++2011-07-05 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 175885.
++
++ Backport from mainline
++ 2011-07-05 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ * gcc.target/powerpc/ppc-switch-1.c: New test for
++ --param case-values-threshold.
++ * gcc.target/powerpc/ppc-switch-2.c: Ditto.
++
++2011-04-28 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 173137.
++
++2011-04-26 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Backport from mainline
++ 2011-03-23 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ PR target/48258
++ * gcc.target/powerpc/pr48258-1.c: New file.
++ * gcc.target/powerpc/pr48258-2.c: Ditto.
++
++2011-03-28 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Branch from gcc-4_6-branch, subversion id 171614.
++
+Index: gcc/ChangeLog.ibm
+===================================================================
+--- a/src/gcc/ChangeLog.ibm (.../gcc-4_6-branch)
++++ b/src/gcc/ChangeLog.ibm (.../ibm/gcc-4_6-branch)
+@@ -0,0 +1,248 @@
++2011-07-06 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Backport from mainline
++ 2011-07-06 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ * config/rs6000/rs6000-protos.h (rs6000_call_indirect_aix): New
++ declaration.
++ (rs6000_save_toc_in_prologue_p): Ditto.
++
++ * config/rs6000/rs6000.opt (-mr11): New switch to disable loading
++ up the static chain (r11) during indirect function calls.
++ (-msave-toc-indirect): New undocumented debug switch.
++
++ * config/rs6000/rs6000.c (struct machine_function): Add
++ save_toc_in_prologue field to note whether the prologue needs to
++ save the TOC value in the reserved stack location.
++ (rs6000_emit_prologue): Use TOC_REGNUM instead of 2. If we need
++ to save the TOC in the prologue, do so.
++ (rs6000_trampoline_init): Don't allow creating AIX style
++ trampolines if -mno-r11 is in effect.
++ (rs6000_call_indirect_aix): New function to create AIX style
++ indirect calls, adding support for -mno-r11 to suppress loading
++ the static chain, and saving the TOC in the prologue instead of
++ the call body.
++ (rs6000_save_toc_in_prologue_p): Return true if we are saving the
++ TOC in the prologue.
++
++ * config/rs6000/rs6000.md (STACK_POINTER_REGNUM): Add more fixed
++ register numbers.
++ (TOC_REGNUM): Ditto.
++ (STATIC_CHAIN_REGNUM): Ditto.
++ (ARG_POINTER_REGNUM): Ditto.
++ (SFP_REGNO): Delete, unused.
++ (TOC_SAVE_OFFSET_32BIT): Add constants for AIX TOC save and
++ function descriptor offsets.
++ (TOC_SAVE_OFFSET_64BIT): Ditto.
++ (AIX_FUNC_DESC_TOC_32BIT): Ditto.
++ (AIX_FUNC_DESC_TOC_64BIT): Ditto.
++ (AIX_FUNC_DESC_SC_32BIT): Ditto.
++ (AIX_FUNC_DESC_SC_64BIT): Ditto.
++ (ptrload): New mode attribute for the appropriate load of a
++ pointer.
++ (call_indirect_aix32): Delete, rewrite AIX indirect function
++ calls.
++ (call_indirect_aix64): Ditto.
++ (call_value_indirect_aix32): Ditto.
++ (call_value_indirect_aix64): Ditto.
++ (call_indirect_nonlocal_aix32_internal): Ditto.
++ (call_indirect_nonlocal_aix32): Ditto.
++ (call_indirect_nonlocal_aix64_internal): Ditto.
++ (call_indirect_nonlocal_aix64): Ditto.
++ (call): Rewrite AIX indirect function calls. Add support for
++ eliminating the static chain, and for moving the save of the TOC
++ to the function prologue.
++ (call_value): Ditto.
++ (call_indirect_aix<ptrsize>): Ditto.
++ (call_indirect_aix<ptrsize>_internal): Ditto.
++ (call_indirect_aix<ptrsize>_internal2): Ditto.
++ (call_indirect_aix<ptrsize>_nor11): Ditto.
++ (call_value_indirect_aix<ptrsize>): Ditto.
++ (call_value_indirect_aix<ptrsize>_internal): Ditto.
++ (call_value_indirect_aix<ptrsize>_internal2): Ditto.
++ (call_value_indirect_aix<ptrsize>_nor11): Ditto.
++ (call_nonlocal_aix32): Relocate in the rs6000.md file.
++ (call_nonlocal_aix64): Ditto.
++
++ * doc/invoke.texi (RS/6000 and PowerPC Options): Add -mr11 and
++ -mno-r11 documentation.
++
++2011-07-05 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 175885.
++ * REVISION: Update subversion id.
++
++ Backport from the mainline:
++ 2011-07-05 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ * params.def (PARAM_CASE_VALUES_THRESHOLD): New parameter to
++ override CASE_VALUES_THRESHOLD.
++
++ * stmt.c (toplevel): Include params.h.
++ (case_values_threshold): Use the --param case-values-threshold
++ value if non-zero, otherwise use machine dependent value.
++ (expand_case): Use case_values_threshold.
++
++ * Makefile.in (stmt.o): Add $(PARAMS_H) dependency.
++
++ * doc/invoke.texi (--param case-values-threshold): Document.
++
++2011-07-01 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 175762.
++ * REVISION: Update subversion id.
++
++2011-06-06 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 174573.
++ * REVISION: Update subversion id.
++
++2011-06-02 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 174572.
++ * REVISION: Update subversion id.
++
++2011-05-27 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 174363.
++ * REVISION: Update subversion id.
++
++2011-05-26 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 174299.
++ * REVISION: Update subversion id.
++
++2011-05-19 Peter Bergner <bergner@vnet.ibm.com>
++
++ * config/rs6000/t-linux64 (MULTILIB_OPTIONS): Remove soft-float support.
++ (MULTILIB_DIRNAMES): Likewise.
++ (MULTILIB_EXCEPTIONS): Likewise.
++ (MULTILIB_EXCLUSIONS): Likewise.
++ (MULTILIB_OSDIRNAMES): Likewise.
++ (MULTILIB_MATCHES): Likewise.
++
++2011-05-10 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 173634 (fix PR 48857).
++ * REVISION: Update subversion id.
++
++2011-04-28 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 173137.
++ * REVISION: Update subversion id.
++
++ Backport from mainline
++ 2011-03-26 Alan Modra <amodra@gmail.com>
++
++ * config/rs6000/predicates.md (word_offset_memref_op): Handle
++ cmodel medium addresses.
++ * config/rs6000/rs6000.c (rs6000_secondary_reload): Handle misaligned
++ 64-bit gpr loads and stores.
++ (rs6000_secondary_reload_ppc64): New function.
++ * config/rs6000/rs6000-protos.h: Declare it.
++ * config/rs6000/rs6000.md (reload_di_store, reload_di_load): New.
++
++2011-04-27 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 173048.
++ * REVISION: Update subversion id.
++
++2011-04-26 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Backport from mainline
++ 2011-04-26 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ PR target/48258
++ * config/rs6000/vector.md (UNSPEC_REDUC): New unspec for vector
++ reduction.
++ (VEC_reduc): New code iterator and splitters for vector reduction.
++ (VEC_reduc_name): Ditto.
++ (VEC_reduc_rtx): Ditto.
++ (reduc_<VEC_reduc_name>_v2df): Vector reduction expanders for VSX.
++ (reduc_<VEC_reduc_name>_v4sf): Ditto.
++
++ * config/rs6000/rs6000.c (rs6000_expand_vector_extract): Add
++ support for extracting SF on VSX.
++
++ * config/rs6000/vsx.md (vsx_xscvspdp_scalar2): New insn for
++ generating xscvspdp.
++ (vsx_extract_v4sf): New insn to extract SF from V4SF vector.
++ (vsx_reduc_<VEC_reduc_name>_v2df): New insns and splitters for
++ double add, minimum, maximum vector reduction.
++ (vsx_reduc_<VEC_reduc_name>_v4sf): Ditto.
++ (vsx_reduc_<VEC_reduc_name>_v2df2_scalar): New combiner insn to
++ optimize double vector reduction.
++ (vsx_reduc_<VEC_reduc_name>_v4sf_scalar): Ditto.
++
++2011-04-19 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 172725.
++ * REVISION: Update subversion id.
++
++2011-04-15 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 172515.
++ * REVISION: Update subversion id.
++
++2011-04-11 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 172266.
++ * REVISION: Update subversion id.
++
++2011-04-08 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 172195.
++ * REVISION: Update subversion id.
++
++2011-04-06 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 172055.
++ * REVISION: Update subversion id.
++
++2011-03-29 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 171704.
++ * REVISION: Update subersion id.
++
++2011-03-28 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Backport from mainline
++ 2011-03-21 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ * config/rs6000/rs6000.md (UNSPEC_*, UNSPECV_*): Redefine all
++ UNSPEC constants to be in the unspec enumeration, and redefine
++ all UNSPECV constants to be in the unspecv enumeration, so that
++ dumps print which unspec/unspec_volatile this is.
++ * config/rs6000/vector.md (UNSPEC_*): Ditto.
++ * config/rs6000/paired.md (UNSPEC_*): Ditto.
++ * config/rs6000/vsx.md (UNSPEC_*): Ditto.
++ * config/rs6000/altivec.md (UNSPEC_*, UNSPECV_*): Ditto.
++ * config/rs6000/dfp.md (UNSPEC_*): Ditto.
++
++ * config/rs6000/rs6000.md (UNSPECV_ISYNC, UNSPECV_LWSYNC): Rename
++ UNSPEC_ISYNC and UNSPEC_HWSYNC to UNSPECV_ISYNC and
++ UNSPECV_LWSYNC, since these are used as unspec_volatile.
++ * config/rs6000/sync.md (isync, lwsync): Ditto.
++
++ Backport from mainline
++ 2011-03-21 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ PR target/48226
++ * config/rs6000/rs6000-c.c (rs6000_macro_to_expand): If we see a
++ vector when peeking at the next token for vector, don't expand the
++ keywords.
++
++ Backport from mainline
++ 2011-03-16 Alan Modra <amodra@gmail.com>
++
++ PR target/45844
++ * config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Don't
++ create invalid offset address for vsx splat insn.
++ * config/rs6000/predicates.md (splat_input_operand): New.
++ * config/rs6000/vsx.md (vsx_splat_*): Use it.
++
++2011-03-28 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Branch from gcc-4_6-branch, subversion id 171614.
++ * REVISION: New file.
++
+Index: gcc/REVISION
+===================================================================
+--- a/src/gcc/REVISION (.../gcc-4_6-branch)
++++ b/src/gcc/REVISION (.../ibm/gcc-4_6-branch)
+@@ -0,0 +1 @@
++Advance Toolchain 5.xx [merged from gcc-4_6-branch, 175885]
+Index: gcc/Makefile.in
+===================================================================
+--- a/src/gcc/Makefile.in (.../gcc-4_6-branch)
++++ b/src/gcc/Makefile.in (.../ibm/gcc-4_6-branch)
+@@ -2876,7 +2876,7 @@
+ $(LIBFUNCS_H) $(EXCEPT_H) $(RECOG_H) $(DIAGNOSTIC_CORE_H) \
+ output.h $(GGC_H) $(TM_P_H) langhooks.h $(PREDICT_H) $(OPTABS_H) \
+ $(TARGET_H) $(GIMPLE_H) $(MACHMODE_H) $(REGS_H) alloc-pool.h \
+- $(PRETTY_PRINT_H) $(BITMAP_H)
++ $(PRETTY_PRINT_H) $(BITMAP_H) $(PARAMS_H)
+ except.o : except.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
+ $(TREE_H) $(FLAGS_H) $(EXCEPT_H) $(FUNCTION_H) $(EXPR_H) $(LIBFUNCS_H) \
+ langhooks.h insn-config.h hard-reg-set.h $(BASIC_BLOCK_H) output.h \
+Index: gcc/config/rs6000/vector.md
+===================================================================
+--- a/src/gcc/config/rs6000/vector.md (.../gcc-4_6-branch)
++++ b/src/gcc/config/rs6000/vector.md (.../ibm/gcc-4_6-branch)
+@@ -74,9 +74,20 @@
+ (V2DF "V2DI")])
+
+ ;; constants for unspec
+-(define_constants
+- [(UNSPEC_PREDICATE 400)])
++(define_c_enum "unspec" [UNSPEC_PREDICATE
++ UNSPEC_REDUC])
+
++;; Vector reduction code iterators
++(define_code_iterator VEC_reduc [plus smin smax])
++
++(define_code_attr VEC_reduc_name [(plus "splus")
++ (smin "smin")
++ (smax "smax")])
++
++(define_code_attr VEC_reduc_rtx [(plus "add")
++ (smin "smin")
++ (smax "smax")])
++
+
+ ;; Vector move instructions.
+ (define_expand "mov<mode>"
+@@ -992,6 +1003,41 @@
+ "TARGET_ALTIVEC"
+ "")
+
++;; Vector reduction expanders for VSX
++
++(define_expand "reduc_<VEC_reduc_name>_v2df"
++ [(parallel [(set (match_operand:V2DF 0 "vfloat_operand" "")
++ (VEC_reduc:V2DF
++ (vec_concat:V2DF
++ (vec_select:DF
++ (match_operand:V2DF 1 "vfloat_operand" "")
++ (parallel [(const_int 1)]))
++ (vec_select:DF
++ (match_dup 1)
++ (parallel [(const_int 0)])))
++ (match_dup 1)))
++ (clobber (match_scratch:V2DF 2 ""))])]
++ "VECTOR_UNIT_VSX_P (V2DFmode)"
++ "")
++
++; The (VEC_reduc:V4SF
++; (op1)
++; (unspec:V4SF [(const_int 0)] UNSPEC_REDUC))
++;
++; is to allow us to use a code iterator, but not completely list all of the
++; vector rotates, etc. to prevent canonicalization
++
++(define_expand "reduc_<VEC_reduc_name>_v4sf"
++ [(parallel [(set (match_operand:V4SF 0 "vfloat_operand" "")
++ (VEC_reduc:V4SF
++ (unspec:V4SF [(const_int 0)] UNSPEC_REDUC)
++ (match_operand:V4SF 1 "vfloat_operand" "")))
++ (clobber (match_scratch:V4SF 2 ""))
++ (clobber (match_scratch:V4SF 3 ""))])]
++ "VECTOR_UNIT_VSX_P (V4SFmode)"
++ "")
++
++
+ ;;; Expanders for vector insn patterns shared between the SPE and TARGET_PAIRED systems.
+
+ (define_expand "absv2sf2"
+Index: gcc/config/rs6000/predicates.md
+===================================================================
+--- a/src/gcc/config/rs6000/predicates.md (.../gcc-4_6-branch)
++++ b/src/gcc/config/rs6000/predicates.md (.../ibm/gcc-4_6-branch)
+@@ -1,5 +1,5 @@
+ ;; Predicate definitions for POWER and PowerPC.
+-;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
++;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
+ ;; Free Software Foundation, Inc.
+ ;;
+ ;; This file is part of GCC.
+@@ -435,9 +435,12 @@
+ op = XEXP (op, 0);
+ else if (GET_CODE (op) == PRE_MODIFY)
+ op = XEXP (op, 1);
++ else if (GET_CODE (op) == LO_SUM
++ && GET_CODE (XEXP (op, 0)) == REG
++ && GET_CODE (XEXP (op, 1)) == CONST)
++ op = XEXP (XEXP (op, 1), 0);
+
+ return (GET_CODE (op) != PLUS
+- || ! REG_P (XEXP (op, 0))
+ || GET_CODE (XEXP (op, 1)) != CONST_INT
+ || INTVAL (XEXP (op, 1)) % 4 == 0);
+ })
+@@ -871,6 +874,23 @@
+ return 0;
+ })
+
++;; Return 1 if this operand is a valid input for a vsx_splat insn.
++(define_predicate "splat_input_operand"
++ (match_code "label_ref,symbol_ref,const,high,reg,subreg,mem,
++ const_double,const_vector,const_int,plus")
++{
++ if (MEM_P (op))
++ {
++ if (mode == DFmode)
++ mode = V2DFmode;
++ else if (mode == DImode)
++ mode = V2DImode;
++ else
++ gcc_unreachable ();
++ }
++ return input_operand (op, mode);
++})
++
+ ;; Return true if OP is an invalid SUBREG operation on the e500.
+ (define_predicate "rs6000_nonimmediate_operand"
+ (match_code "reg,subreg,mem")
+Index: gcc/config/rs6000/paired.md
+===================================================================
+--- a/src/gcc/config/rs6000/paired.md (.../gcc-4_6-branch)
++++ b/src/gcc/config/rs6000/paired.md (.../ibm/gcc-4_6-branch)
+@@ -1,5 +1,5 @@
+ ;; PowerPC paired single and double hummer description
+-;; Copyright (C) 2007, 2009, 2010
++;; Copyright (C) 2007, 2009, 2010, 2011
+ ;; Free Software Foundation, Inc.
+ ;; Contributed by David Edelsohn <edelsohn@gnu.org> and Revital Eres
+ ;; <eres@il.ibm.com>
+@@ -20,12 +20,12 @@
+ ;; along with this program; see the file COPYING3. If not see
+ ;; <http://www.gnu.org/licenses/>.
+
+-(define_constants
+-[(UNSPEC_INTERHI_V2SF 330)
+- (UNSPEC_INTERLO_V2SF 331)
+- (UNSPEC_EXTEVEN_V2SF 332)
+- (UNSPEC_EXTODD_V2SF 333)
+-])
++(define_c_enum "unspec"
++ [UNSPEC_INTERHI_V2SF
++ UNSPEC_INTERLO_V2SF
++ UNSPEC_EXTEVEN_V2SF
++ UNSPEC_EXTODD_V2SF
++ ])
+
+ (define_insn "paired_negv2sf2"
+ [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
+Index: gcc/config/rs6000/rs6000-protos.h
+===================================================================
+--- a/src/gcc/config/rs6000/rs6000-protos.h (.../gcc-4_6-branch)
++++ b/src/gcc/config/rs6000/rs6000-protos.h (.../ibm/gcc-4_6-branch)
+@@ -79,6 +79,7 @@
+ enum machine_mode,
+ enum reg_class);
+ extern void rs6000_secondary_reload_inner (rtx, rtx, rtx, bool);
++extern void rs6000_secondary_reload_ppc64 (rtx, rtx, rtx, bool);
+ extern int paired_emit_vector_cond_expr (rtx, rtx, rtx,
+ rtx, rtx, rtx);
+ extern void paired_expand_vector_move (rtx operands[]);
+@@ -170,6 +171,8 @@
+ extern void rs6000_emit_epilogue (int);
+ extern void rs6000_emit_eh_reg_restore (rtx, rtx);
+ extern const char * output_isel (rtx *);
++extern void rs6000_call_indirect_aix (rtx, rtx, rtx);
++extern bool rs6000_save_toc_in_prologue_p (void);
+ extern bool rs6000_tls_referenced_p (rtx);
+
+ extern void rs6000_aix_asm_output_dwarf_table_ref (char *);
+Index: gcc/config/rs6000/rs6000.opt
+===================================================================
+--- a/src/gcc/config/rs6000/rs6000.opt (.../gcc-4_6-branch)
++++ b/src/gcc/config/rs6000/rs6000.opt (.../ibm/gcc-4_6-branch)
+@@ -461,4 +461,10 @@
+ Target Var(rs6000_xilinx_fpu) Save
+ Specify Xilinx FPU.
+
++mr11
++Target Report Var(TARGET_R11) Init(1) Save
++Use/do not use r11 to hold the static link in calls.
+
++msave-toc-indirect
++Target Undocumented Var(TARGET_SAVE_TOC_INDIRECT) Save Init(1)
++; Control whether we save the TOC in the prologue for indirect calls or generate the save inline
+Index: gcc/config/rs6000/rs6000.c
+===================================================================
+--- a/src/gcc/config/rs6000/rs6000.c (.../gcc-4_6-branch)
++++ b/src/gcc/config/rs6000/rs6000.c (.../ibm/gcc-4_6-branch)
+@@ -128,6 +128,9 @@
+ int ra_need_lr;
+ /* Cache lr_save_p after expansion of builtin_eh_return. */
+ int lr_save_state;
++ /* Whether we need to save the TOC to the reserved stack location in the
++ function prologue. */
++ bool save_toc_in_prologue;
+ /* Offset from virtual_stack_vars_rtx to the start of the ABI_V4
+ varargs save area. */
+ HOST_WIDE_INT varargs_save_offset;
+@@ -5488,12 +5491,22 @@
+ enum machine_mode inner_mode = GET_MODE_INNER (mode);
+ rtx mem;
+
+- if (VECTOR_MEM_VSX_P (mode) && (mode == V2DFmode || mode == V2DImode))
++ if (VECTOR_MEM_VSX_P (mode))
+ {
+- rtx (*extract_func) (rtx, rtx, rtx)
+- = ((mode == V2DFmode) ? gen_vsx_extract_v2df : gen_vsx_extract_v2di);
+- emit_insn (extract_func (target, vec, GEN_INT (elt)));
+- return;
++ switch (mode)
++ {
++ default:
++ break;
++ case V2DFmode:
++ emit_insn (gen_vsx_extract_v2df (target, vec, GEN_INT (elt)));
++ return;
++ case V2DImode:
++ emit_insn (gen_vsx_extract_v2di (target, vec, GEN_INT (elt)));
++ return;
++ case V4SFmode:
++ emit_insn (gen_vsx_extract_v4sf (target, vec, GEN_INT (elt)));
++ return;
++ }
+ }
+
+ /* Allocate mode-sized buffer. */
+@@ -6694,6 +6707,14 @@
+ {
+ bool reg_offset_p = reg_offset_addressing_ok_p (mode);
+
++ /* Nasty hack for vsx_splat_V2DF/V2DI load from mem, which takes a
++ DFmode/DImode MEM. */
++ if (reg_offset_p
++ && opnum == 1
++ && ((mode == DFmode && recog_data.operand_mode[0] == V2DFmode)
++ || (mode == DImode && recog_data.operand_mode[0] == V2DImode)))
++ reg_offset_p = false;
++
+ /* We must recognize output that we have already generated ourselves. */
+ if (GET_CODE (x) == PLUS
+ && GET_CODE (XEXP (x, 0)) == PLUS
+@@ -14811,8 +14832,11 @@
+ needed for the immediate register.
+
+ For VSX and Altivec, we may need a register to convert sp+offset into
+- reg+sp. */
++ reg+sp.
+
++ For misaligned 64-bit gpr loads and stores we need a register to
++ convert an offset address to indirect. */
++
+ static reg_class_t
+ rs6000_secondary_reload (bool in_p,
+ rtx x,
+@@ -14914,6 +14938,34 @@
+ else
+ default_p = true;
+ }
++ else if (TARGET_POWERPC64
++ && rs6000_reload_register_type (rclass) == GPR_REGISTER_TYPE
++ && MEM_P (x)
++ && GET_MODE_SIZE (GET_MODE (x)) >= UNITS_PER_WORD)
++ {
++ rtx addr = XEXP (x, 0);
++
++ if (GET_CODE (addr) == PRE_MODIFY)
++ addr = XEXP (addr, 1);
++ else if (GET_CODE (addr) == LO_SUM
++ && GET_CODE (XEXP (addr, 0)) == REG
++ && GET_CODE (XEXP (addr, 1)) == CONST)
++ addr = XEXP (XEXP (addr, 1), 0);
++
++ if (GET_CODE (addr) == PLUS
++ && GET_CODE (XEXP (addr, 1)) == CONST_INT
++ && (INTVAL (XEXP (addr, 1)) & 3) != 0)
++ {
++ if (in_p)
++ sri->icode = CODE_FOR_reload_di_load;
++ else
++ sri->icode = CODE_FOR_reload_di_store;
++ sri->extra_cost = 2;
++ ret = NO_REGS;
++ }
++ else
++ default_p = true;
++ }
+ else
+ default_p = true;
+
+@@ -15202,6 +15254,56 @@
+ return;
+ }
+
++/* Convert reloads involving 64-bit gprs and misaligned offset
++ addressing to use indirect addressing. */
++
++void
++rs6000_secondary_reload_ppc64 (rtx reg, rtx mem, rtx scratch, bool store_p)
++{
++ int regno = true_regnum (reg);
++ enum reg_class rclass;
++ rtx addr;
++ rtx scratch_or_premodify = scratch;
++
++ if (TARGET_DEBUG_ADDR)
++ {
++ fprintf (stderr, "\nrs6000_secondary_reload_ppc64, type = %s\n",
++ store_p ? "store" : "load");
++ fprintf (stderr, "reg:\n");
++ debug_rtx (reg);
++ fprintf (stderr, "mem:\n");
++ debug_rtx (mem);
++ fprintf (stderr, "scratch:\n");
++ debug_rtx (scratch);
++ }
++
++ gcc_assert (regno >= 0 && regno < FIRST_PSEUDO_REGISTER);
++ gcc_assert (GET_CODE (mem) == MEM);
++ rclass = REGNO_REG_CLASS (regno);
++ gcc_assert (rclass == GENERAL_REGS || rclass == BASE_REGS);
++ addr = XEXP (mem, 0);
++
++ if (GET_CODE (addr) == PRE_MODIFY)
++ {
++ scratch_or_premodify = XEXP (addr, 0);
++ gcc_assert (REG_P (scratch_or_premodify));
++ addr = XEXP (addr, 1);
++ }
++ gcc_assert (GET_CODE (addr) == PLUS || GET_CODE (addr) == LO_SUM);
++
++ rs6000_emit_move (scratch_or_premodify, addr, Pmode);
++
++ mem = replace_equiv_address_nv (mem, scratch_or_premodify);
++
++ /* Now create the move. */
++ if (store_p)
++ emit_insn (gen_rtx_SET (VOIDmode, mem, reg));
++ else
++ emit_insn (gen_rtx_SET (VOIDmode, reg, mem));
++
++ return;
++}
++
+ /* Target hook to return the cover classes for Integrated Register Allocator.
+ Cover classes is a set of non-intersected register classes covering all hard
+ registers used for register allocation purpose. Any move between two
+@@ -20859,7 +20961,7 @@
+ JUMP_LABEL (jump) = toc_save_done;
+ LABEL_NUSES (toc_save_done) += 1;
+
+- emit_frame_save (frame_reg_rtx, frame_ptr_rtx, reg_mode, 2,
++ emit_frame_save (frame_reg_rtx, frame_ptr_rtx, reg_mode, TOC_REGNUM,
+ sp_offset + 5 * reg_size, info->total_size);
+ emit_label (toc_save_done);
+ if (using_static_chain_p)
+@@ -21050,6 +21152,11 @@
+ emit_move_insn (lr, gen_rtx_REG (Pmode, 0));
+ }
+ #endif
++
++ /* If we need to, save the TOC register after doing the stack setup. */
++ if (rs6000_save_toc_in_prologue_p ())
++ emit_frame_save (sp_reg_rtx, sp_reg_rtx, reg_mode, TOC_REGNUM,
++ 5 * reg_size, info->total_size);
+ }
+
+ /* Write function prologue. */
+@@ -25002,10 +25109,15 @@
+ /* Under AIX, just build the 3 word function descriptor */
+ case ABI_AIX:
+ {
+- rtx fnmem = gen_const_mem (Pmode, force_reg (Pmode, fnaddr));
+- rtx fn_reg = gen_reg_rtx (Pmode);
+- rtx toc_reg = gen_reg_rtx (Pmode);
++ rtx fnmem, fn_reg, toc_reg;
+
++ if (!TARGET_R11)
++ error ("-mno-r11 must not be used if you have trampolines");
++
++ fnmem = gen_const_mem (Pmode, force_reg (Pmode, fnaddr));
++ fn_reg = gen_reg_rtx (Pmode);
++ toc_reg = gen_reg_rtx (Pmode);
++
+ /* Macro to shorten the code expansions below. */
+ # define MEM_PLUS(MEM, OFFSET) adjust_address (MEM, Pmode, OFFSET)
+
+@@ -28257,5 +28369,132 @@
+ return x;
+ }
+
++
++/* A function pointer under AIX is a pointer to a data area whose first word
++ contains the actual address of the function, whose second word contains a
++ pointer to its TOC, and whose third word contains a value to place in the
++ static chain register (r11). Note that if we load the static chain, our
++ "trampoline" need not have any executable code. */
+
++void
++rs6000_call_indirect_aix (rtx value, rtx func_desc, rtx flag)
++{
++ rtx func_addr;
++ rtx toc_reg;
++ rtx sc_reg;
++ rtx stack_ptr;
++ rtx stack_toc_offset;
++ rtx stack_toc_mem;
++ rtx func_toc_offset;
++ rtx func_toc_mem;
++ rtx func_sc_offset;
++ rtx func_sc_mem;
++ rtx insn;
++ rtx (*call_func) (rtx, rtx, rtx, rtx);
++ rtx (*call_value_func) (rtx, rtx, rtx, rtx, rtx);
++
++ stack_ptr = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM);
++ toc_reg = gen_rtx_REG (Pmode, TOC_REGNUM);
++
++ /* Load up address of the actual function. */
++ func_desc = force_reg (Pmode, func_desc);
++ func_addr = gen_reg_rtx (Pmode);
++ emit_move_insn (func_addr, gen_rtx_MEM (Pmode, func_desc));
++
++ if (TARGET_32BIT)
++ {
++
++ stack_toc_offset = GEN_INT (TOC_SAVE_OFFSET_32BIT);
++ func_toc_offset = GEN_INT (AIX_FUNC_DESC_TOC_32BIT);
++ func_sc_offset = GEN_INT (AIX_FUNC_DESC_SC_32BIT);
++ if (TARGET_R11)
++ {
++ call_func = gen_call_indirect_aix32bit;
++ call_value_func = gen_call_value_indirect_aix32bit;
++ }
++ else
++ {
++ call_func = gen_call_indirect_aix32bit_nor11;
++ call_value_func = gen_call_value_indirect_aix32bit_nor11;
++ }
++ }
++ else
++ {
++ stack_toc_offset = GEN_INT (TOC_SAVE_OFFSET_64BIT);
++ func_toc_offset = GEN_INT (AIX_FUNC_DESC_TOC_64BIT);
++ func_sc_offset = GEN_INT (AIX_FUNC_DESC_SC_64BIT);
++ if (TARGET_R11)
++ {
++ call_func = gen_call_indirect_aix64bit;
++ call_value_func = gen_call_value_indirect_aix64bit;
++ }
++ else
++ {
++ call_func = gen_call_indirect_aix64bit_nor11;
++ call_value_func = gen_call_value_indirect_aix64bit_nor11;
++ }
++ }
++
++ /* Reserved spot to store the TOC. */
++ stack_toc_mem = gen_frame_mem (Pmode,
++ gen_rtx_PLUS (Pmode,
++ stack_ptr,
++ stack_toc_offset));
++
++ gcc_assert (cfun);
++ gcc_assert (cfun->machine);
++
++ /* Can we optimize saving the TOC in the prologue or do we need to do it at
++ every call? */
++ if (TARGET_SAVE_TOC_INDIRECT && !cfun->calls_alloca
++ && !cfun->calls_setjmp && !cfun->has_nonlocal_label
++ && !cfun->can_throw_non_call_exceptions
++ && ((flags_from_decl_or_type (cfun->decl) & ECF_NOTHROW) == ECF_NOTHROW))
++ cfun->machine->save_toc_in_prologue = true;
++
++ else
++ {
++ MEM_VOLATILE_P (stack_toc_mem) = 1;
++ emit_move_insn (stack_toc_mem, toc_reg);
++ }
++
++ /* Calculate the address to load the TOC of the called function. We don't
++ actually load this until the split after reload. */
++ func_toc_mem = gen_rtx_MEM (Pmode,
++ gen_rtx_PLUS (Pmode,
++ func_desc,
++ func_toc_offset));
++
++ /* If we have a static chain, load it up. */
++ if (TARGET_R11)
++ {
++ func_sc_mem = gen_rtx_MEM (Pmode,
++ gen_rtx_PLUS (Pmode,
++ func_desc,
++ func_sc_offset));
++
++ sc_reg = gen_rtx_REG (Pmode, STATIC_CHAIN_REGNUM);
++ emit_move_insn (sc_reg, func_sc_mem);
++ }
++
++ /* Create the call. */
++ if (value)
++ insn = call_value_func (value, func_addr, flag, func_toc_mem,
++ stack_toc_mem);
++ else
++ insn = call_func (func_addr, flag, func_toc_mem, stack_toc_mem);
++
++ emit_call_insn (insn);
++ return;
++}
++
++/* Return whether we need to always update the saved TOC pointer when we update
++ the stack pointer. */
++
++bool
++rs6000_save_toc_in_prologue_p (void)
++{
++ return (cfun && cfun->machine && cfun->machine->save_toc_in_prologue);
++}
++
+ #include "gt-rs6000.h"
+
+Property changes on: gcc/config/rs6000/rs6000.c
+___________________________________________________________________
+Modified: svn:mergeinfo
+ Merged /branches/gcc-4_6-branch/gcc/config/rs6000/rs6000.c:r171610-175885
+
+Index: gcc/config/rs6000/vsx.md
+===================================================================
+--- a/src/gcc/config/rs6000/vsx.md (.../gcc-4_6-branch)
++++ b/src/gcc/config/rs6000/vsx.md (.../ibm/gcc-4_6-branch)
+@@ -183,25 +183,25 @@
+ (V16QI "QI")])
+
+ ;; Constants for creating unspecs
+-(define_constants
+- [(UNSPEC_VSX_CONCAT 500)
+- (UNSPEC_VSX_CVDPSXWS 501)
+- (UNSPEC_VSX_CVDPUXWS 502)
+- (UNSPEC_VSX_CVSPDP 503)
+- (UNSPEC_VSX_CVSXWDP 504)
+- (UNSPEC_VSX_CVUXWDP 505)
+- (UNSPEC_VSX_CVSXDSP 506)
+- (UNSPEC_VSX_CVUXDSP 507)
+- (UNSPEC_VSX_CVSPSXDS 508)
+- (UNSPEC_VSX_CVSPUXDS 509)
+- ;; 510-514 deleted
+- (UNSPEC_VSX_TDIV 515)
+- (UNSPEC_VSX_TSQRT 516)
+- (UNSPEC_VSX_XXPERMDI 517)
+- (UNSPEC_VSX_SET 518)
+- (UNSPEC_VSX_ROUND_I 519)
+- (UNSPEC_VSX_ROUND_IC 520)
+- (UNSPEC_VSX_SLDWI 521)])
++(define_c_enum "unspec"
++ [UNSPEC_VSX_CONCAT
++ UNSPEC_VSX_CVDPSXWS
++ UNSPEC_VSX_CVDPUXWS
++ UNSPEC_VSX_CVSPDP
++ UNSPEC_VSX_CVSXWDP
++ UNSPEC_VSX_CVUXWDP
++ UNSPEC_VSX_CVSXDSP
++ UNSPEC_VSX_CVUXDSP
++ UNSPEC_VSX_CVSPSXDS
++ UNSPEC_VSX_CVSPUXDS
++ UNSPEC_VSX_TDIV
++ UNSPEC_VSX_TSQRT
++ UNSPEC_VSX_XXPERMDI
++ UNSPEC_VSX_SET
++ UNSPEC_VSX_ROUND_I
++ UNSPEC_VSX_ROUND_IC
++ UNSPEC_VSX_SLDWI
++ ])
+
+ ;; VSX moves
+ (define_insn "*vsx_mov<mode>"
+@@ -829,6 +829,15 @@
+ "xscvdpsp %x0,%x1"
+ [(set_attr "type" "fp")])
+
++;; Same as vsx_xscvspdp, but use SF as the type
++(define_insn "vsx_xscvspdp_scalar2"
++ [(set (match_operand:SF 0 "vsx_register_operand" "=f")
++ (unspec:SF [(match_operand:V4SF 1 "vsx_register_operand" "wa")]
++ UNSPEC_VSX_CVSPDP))]
++ "VECTOR_UNIT_VSX_P (DFmode)"
++ "xscvspdp %x0,%x1"
++ [(set_attr "type" "fp")])
++
+ ;; Convert from 64-bit to 32-bit types
+ ;; Note, favor the Altivec registers since the usual use of these instructions
+ ;; is in vector converts and we need to use the Altivec vperm instruction.
+@@ -1039,6 +1048,43 @@
+ [(set_attr "type" "fpload")
+ (set_attr "length" "4")])
+
++;; Extract a SF element from V4SF
++(define_insn_and_split "vsx_extract_v4sf"
++ [(set (match_operand:SF 0 "vsx_register_operand" "=f,f")
++ (vec_select:SF
++ (match_operand:V4SF 1 "vsx_register_operand" "wa,wa")
++ (parallel [(match_operand:QI 2 "u5bit_cint_operand" "O,i")])))
++ (clobber (match_scratch:V4SF 3 "=X,0"))]
++ "VECTOR_UNIT_VSX_P (V4SFmode)"
++ "@
++ xscvspdp %x0,%x1
++ #"
++ ""
++ [(const_int 0)]
++ "
++{
++ rtx op0 = operands[0];
++ rtx op1 = operands[1];
++ rtx op2 = operands[2];
++ rtx op3 = operands[3];
++ rtx tmp;
++ HOST_WIDE_INT ele = INTVAL (op2);
++
++ if (ele == 0)
++ tmp = op1;
++ else
++ {
++ if (GET_CODE (op3) == SCRATCH)
++ op3 = gen_reg_rtx (V4SFmode);
++ emit_insn (gen_vsx_xxsldwi_v4sf (op3, op1, op1, op2));
++ tmp = op3;
++ }
++ emit_insn (gen_vsx_xscvspdp_scalar2 (op0, tmp));
++ DONE;
++}"
++ [(set_attr "length" "4,8")
++ (set_attr "type" "fp")])
++
+ ;; General double word oriented permute, allow the other vector types for
+ ;; optimizing the permute instruction.
+ (define_insn "vsx_xxpermdi_<mode>"
+@@ -1076,7 +1122,7 @@
+ (define_insn "vsx_splat_<mode>"
+ [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wd,wd,wd,?wa,?wa,?wa")
+ (vec_duplicate:VSX_D
+- (match_operand:<VS_scalar> 1 "input_operand" "ws,f,Z,wa,wa,Z")))]
++ (match_operand:<VS_scalar> 1 "splat_input_operand" "ws,f,Z,wa,wa,Z")))]
+ "VECTOR_MEM_VSX_P (<MODE>mode)"
+ "@
+ xxpermdi %x0,%x1,%x1,0
+@@ -1150,3 +1196,153 @@
+ "VECTOR_MEM_VSX_P (<MODE>mode)"
+ "xxsldwi %x0,%x1,%x2,%3"
+ [(set_attr "type" "vecperm")])
++
++
++;; Vector reduction insns and splitters
++
++(define_insn_and_split "*vsx_reduc_<VEC_reduc_name>_v2df"
++ [(set (match_operand:V2DF 0 "vfloat_operand" "=&wd,&?wa,wd,?wa")
++ (VEC_reduc:V2DF
++ (vec_concat:V2DF
++ (vec_select:DF
++ (match_operand:V2DF 1 "vfloat_operand" "wd,wa,wd,wa")
++ (parallel [(const_int 1)]))
++ (vec_select:DF
++ (match_dup 1)
++ (parallel [(const_int 0)])))
++ (match_dup 1)))
++ (clobber (match_scratch:V2DF 2 "=0,0,&wd,&wa"))]
++ "VECTOR_UNIT_VSX_P (V2DFmode)"
++ "#"
++ ""
++ [(const_int 0)]
++ "
++{
++ rtx tmp = (GET_CODE (operands[2]) == SCRATCH)
++ ? gen_reg_rtx (V2DFmode)
++ : operands[2];
++ emit_insn (gen_vsx_xxsldwi_v2df (tmp, operands[1], operands[1], const2_rtx));
++ emit_insn (gen_<VEC_reduc_rtx>v2df3 (operands[0], tmp, operands[1]));
++ DONE;
++}"
++ [(set_attr "length" "8")
++ (set_attr "type" "veccomplex")])
++
++(define_insn_and_split "*vsx_reduc_<VEC_reduc_name>_v4sf"
++ [(set (match_operand:V4SF 0 "vfloat_operand" "=wf,?wa")
++ (VEC_reduc:V4SF
++ (unspec:V4SF [(const_int 0)] UNSPEC_REDUC)
++ (match_operand:V4SF 1 "vfloat_operand" "wf,wa")))
++ (clobber (match_scratch:V4SF 2 "=&wf,&wa"))
++ (clobber (match_scratch:V4SF 3 "=&wf,&wa"))]
++ "VECTOR_UNIT_VSX_P (V4SFmode)"
++ "#"
++ ""
++ [(const_int 0)]
++ "
++{
++ rtx op0 = operands[0];
++ rtx op1 = operands[1];
++ rtx tmp2, tmp3, tmp4;
++
++ if (can_create_pseudo_p ())
++ {
++ tmp2 = gen_reg_rtx (V4SFmode);
++ tmp3 = gen_reg_rtx (V4SFmode);
++ tmp4 = gen_reg_rtx (V4SFmode);
++ }
++ else
++ {
++ tmp2 = operands[2];
++ tmp3 = operands[3];
++ tmp4 = tmp2;
++ }
++
++ emit_insn (gen_vsx_xxsldwi_v4sf (tmp2, op1, op1, const2_rtx));
++ emit_insn (gen_<VEC_reduc_rtx>v4sf3 (tmp3, tmp2, op1));
++ emit_insn (gen_vsx_xxsldwi_v4sf (tmp4, tmp3, tmp3, GEN_INT (3)));
++ emit_insn (gen_<VEC_reduc_rtx>v4sf3 (op0, tmp4, tmp3));
++ DONE;
++}"
++ [(set_attr "length" "16")
++ (set_attr "type" "veccomplex")])
++
++;; Combiner patterns with the vector reduction patterns that knows we can get
++;; to the top element of the V2DF array without doing an extract.
++
++(define_insn_and_split "*vsx_reduc_<VEC_reduc_name>_v2df_scalar"
++ [(set (match_operand:DF 0 "vfloat_operand" "=&ws,&?wa,ws,?wa")
++ (vec_select:DF
++ (VEC_reduc:V2DF
++ (vec_concat:V2DF
++ (vec_select:DF
++ (match_operand:V2DF 1 "vfloat_operand" "wd,wa,wd,wa")
++ (parallel [(const_int 1)]))
++ (vec_select:DF
++ (match_dup 1)
++ (parallel [(const_int 0)])))
++ (match_dup 1))
++ (parallel [(const_int 1)])))
++ (clobber (match_scratch:DF 2 "=0,0,&wd,&wa"))]
++ "VECTOR_UNIT_VSX_P (V2DFmode)"
++ "#"
++ ""
++ [(const_int 0)]
++ "
++{
++ rtx hi = gen_highpart (DFmode, operands[1]);
++ rtx lo = (GET_CODE (operands[2]) == SCRATCH)
++ ? gen_reg_rtx (DFmode)
++ : operands[2];
++
++ emit_insn (gen_vsx_extract_v2df (lo, operands[1], const1_rtx));
++ emit_insn (gen_<VEC_reduc_rtx>df3 (operands[0], hi, lo));
++ DONE;
++}"
++ [(set_attr "length" "8")
++ (set_attr "type" "veccomplex")])
++
++(define_insn_and_split "*vsx_reduc_<VEC_reduc_name>_v4sf_scalar"
++ [(set (match_operand:SF 0 "vfloat_operand" "=f,?f")
++ (vec_select:SF
++ (VEC_reduc:V4SF
++ (unspec:V4SF [(const_int 0)] UNSPEC_REDUC)
++ (match_operand:V4SF 1 "vfloat_operand" "wf,wa"))
++ (parallel [(const_int 3)])))
++ (clobber (match_scratch:V4SF 2 "=&wf,&wa"))
++ (clobber (match_scratch:V4SF 3 "=&wf,&wa"))
++ (clobber (match_scratch:V4SF 4 "=0,0"))]
++ "VECTOR_UNIT_VSX_P (V4SFmode)"
++ "#"
++ ""
++ [(const_int 0)]
++ "
++{
++ rtx op0 = operands[0];
++ rtx op1 = operands[1];
++ rtx tmp2, tmp3, tmp4, tmp5;
++
++ if (can_create_pseudo_p ())
++ {
++ tmp2 = gen_reg_rtx (V4SFmode);
++ tmp3 = gen_reg_rtx (V4SFmode);
++ tmp4 = gen_reg_rtx (V4SFmode);
++ tmp5 = gen_reg_rtx (V4SFmode);
++ }
++ else
++ {
++ tmp2 = operands[2];
++ tmp3 = operands[3];
++ tmp4 = tmp2;
++ tmp5 = operands[4];
++ }
++
++ emit_insn (gen_vsx_xxsldwi_v4sf (tmp2, op1, op1, const2_rtx));
++ emit_insn (gen_<VEC_reduc_rtx>v4sf3 (tmp3, tmp2, op1));
++ emit_insn (gen_vsx_xxsldwi_v4sf (tmp4, tmp3, tmp3, GEN_INT (3)));
++ emit_insn (gen_<VEC_reduc_rtx>v4sf3 (tmp5, tmp4, tmp3));
++ emit_insn (gen_vsx_xscvspdp_scalar2 (op0, tmp5));
++ DONE;
++}"
++ [(set_attr "length" "20")
++ (set_attr "type" "veccomplex")])
+
+Property changes on: gcc/config/rs6000/rs6000.h
+___________________________________________________________________
+Modified: svn:mergeinfo
+ Merged /branches/gcc-4_6-branch/gcc/config/rs6000/rs6000.h:r171610-175885
+
+Index: gcc/config/rs6000/altivec.md
+===================================================================
+--- a/src/gcc/config/rs6000/altivec.md (.../gcc-4_6-branch)
++++ b/src/gcc/config/rs6000/altivec.md (.../ibm/gcc-4_6-branch)
+@@ -19,138 +19,130 @@
+ ;; along with GCC; see the file COPYING3. If not see
+ ;; <http://www.gnu.org/licenses/>.
+
+-(define_constants
+- ;; 51-62 deleted
+- [(UNSPEC_VCMPBFP 64)
+- (UNSPEC_VMSUMU 65)
+- (UNSPEC_VMSUMM 66)
+- (UNSPEC_VMSUMSHM 68)
+- (UNSPEC_VMSUMUHS 69)
+- (UNSPEC_VMSUMSHS 70)
+- (UNSPEC_VMHADDSHS 71)
+- (UNSPEC_VMHRADDSHS 72)
+- (UNSPEC_VMLADDUHM 73)
+- (UNSPEC_VADDCUW 75)
+- (UNSPEC_VADDU 76)
+- (UNSPEC_VADDS 77)
+- (UNSPEC_VAVGU 80)
+- (UNSPEC_VAVGS 81)
+- (UNSPEC_VMULEUB 83)
+- (UNSPEC_VMULESB 84)
+- (UNSPEC_VMULEUH 85)
+- (UNSPEC_VMULESH 86)
+- (UNSPEC_VMULOUB 87)
+- (UNSPEC_VMULOSB 88)
+- (UNSPEC_VMULOUH 89)
+- (UNSPEC_VMULOSH 90)
+- (UNSPEC_VPKUHUM 93)
+- (UNSPEC_VPKUWUM 94)
+- (UNSPEC_VPKPX 95)
+- (UNSPEC_VPKSHSS 97)
+- (UNSPEC_VPKSWSS 99)
+- (UNSPEC_VPKUHUS 100)
+- (UNSPEC_VPKSHUS 101)
+- (UNSPEC_VPKUWUS 102)
+- (UNSPEC_VPKSWUS 103)
+- ;; 104 deleted
+- (UNSPEC_VSLV4SI 110)
+- (UNSPEC_VSLO 111)
+- (UNSPEC_VSR 118)
+- (UNSPEC_VSRO 119)
+- (UNSPEC_VSUBCUW 124)
+- (UNSPEC_VSUBU 125)
+- (UNSPEC_VSUBS 126)
+- (UNSPEC_VSUM4UBS 131)
+- (UNSPEC_VSUM4S 132)
+- (UNSPEC_VSUM2SWS 134)
+- (UNSPEC_VSUMSWS 135)
+- (UNSPEC_VPERM 144)
+- (UNSPEC_VPERM_UNS 145)
+- ;; 148 deleted
+- (UNSPEC_VRFIN 149)
+- ;; 150 deleted
+- (UNSPEC_VCFUX 151)
+- (UNSPEC_VCFSX 152)
+- (UNSPEC_VCTUXS 153)
+- (UNSPEC_VCTSXS 154)
+- (UNSPEC_VLOGEFP 155)
+- (UNSPEC_VEXPTEFP 156)
+- ;; 157-162 deleted
+- (UNSPEC_VLSDOI 163)
+- (UNSPEC_VUPKHSB 167)
+- (UNSPEC_VUPKHPX 168)
+- (UNSPEC_VUPKHSH 169)
+- (UNSPEC_VUPKLSB 170)
+- (UNSPEC_VUPKLPX 171)
+- (UNSPEC_VUPKLSH 172)
+- ;; 173 deleted
+- (UNSPEC_DST 190)
+- (UNSPEC_DSTT 191)
+- (UNSPEC_DSTST 192)
+- (UNSPEC_DSTSTT 193)
+- (UNSPEC_LVSL 194)
+- (UNSPEC_LVSR 195)
+- (UNSPEC_LVE 196)
+- (UNSPEC_STVX 201)
+- (UNSPEC_STVXL 202)
+- (UNSPEC_STVE 203)
+- (UNSPEC_SET_VSCR 213)
+- (UNSPEC_GET_VRSAVE 214)
+- (UNSPEC_LVX 215)
+- (UNSPEC_REDUC_PLUS 217)
+- (UNSPEC_VECSH 219)
+- (UNSPEC_EXTEVEN_V4SI 220)
+- (UNSPEC_EXTEVEN_V8HI 221)
+- (UNSPEC_EXTEVEN_V16QI 222)
+- (UNSPEC_EXTEVEN_V4SF 223)
+- (UNSPEC_EXTODD_V4SI 224)
+- (UNSPEC_EXTODD_V8HI 225)
+- (UNSPEC_EXTODD_V16QI 226)
+- (UNSPEC_EXTODD_V4SF 227)
+- (UNSPEC_INTERHI_V4SI 228)
+- (UNSPEC_INTERHI_V8HI 229)
+- (UNSPEC_INTERHI_V16QI 230)
+- ;; delete 231
+- (UNSPEC_INTERLO_V4SI 232)
+- (UNSPEC_INTERLO_V8HI 233)
+- (UNSPEC_INTERLO_V16QI 234)
+- ;; delete 235
+- (UNSPEC_LVLX 236)
+- (UNSPEC_LVLXL 237)
+- (UNSPEC_LVRX 238)
+- (UNSPEC_LVRXL 239)
+- (UNSPEC_STVLX 240)
+- (UNSPEC_STVLXL 241)
+- (UNSPEC_STVRX 242)
+- (UNSPEC_STVRXL 243)
+- (UNSPEC_VMULWHUB 308)
+- (UNSPEC_VMULWLUB 309)
+- (UNSPEC_VMULWHSB 310)
+- (UNSPEC_VMULWLSB 311)
+- (UNSPEC_VMULWHUH 312)
+- (UNSPEC_VMULWLUH 313)
+- (UNSPEC_VMULWHSH 314)
+- (UNSPEC_VMULWLSH 315)
+- (UNSPEC_VUPKHUB 316)
+- (UNSPEC_VUPKHUH 317)
+- (UNSPEC_VUPKLUB 318)
+- (UNSPEC_VUPKLUH 319)
+- (UNSPEC_VPERMSI 320)
+- (UNSPEC_VPERMHI 321)
+- (UNSPEC_INTERHI 322)
+- (UNSPEC_INTERLO 323)
+- (UNSPEC_VUPKHS_V4SF 324)
+- (UNSPEC_VUPKLS_V4SF 325)
+- (UNSPEC_VUPKHU_V4SF 326)
+- (UNSPEC_VUPKLU_V4SF 327)
++(define_c_enum "unspec"
++ [UNSPEC_VCMPBFP
++ UNSPEC_VMSUMU
++ UNSPEC_VMSUMM
++ UNSPEC_VMSUMSHM
++ UNSPEC_VMSUMUHS
++ UNSPEC_VMSUMSHS
++ UNSPEC_VMHADDSHS
++ UNSPEC_VMHRADDSHS
++ UNSPEC_VMLADDUHM
++ UNSPEC_VADDCUW
++ UNSPEC_VADDU
++ UNSPEC_VADDS
++ UNSPEC_VAVGU
++ UNSPEC_VAVGS
++ UNSPEC_VMULEUB
++ UNSPEC_VMULESB
++ UNSPEC_VMULEUH
++ UNSPEC_VMULESH
++ UNSPEC_VMULOUB
++ UNSPEC_VMULOSB
++ UNSPEC_VMULOUH
++ UNSPEC_VMULOSH
++ UNSPEC_VPKUHUM
++ UNSPEC_VPKUWUM
++ UNSPEC_VPKPX
++ UNSPEC_VPKSHSS
++ UNSPEC_VPKSWSS
++ UNSPEC_VPKUHUS
++ UNSPEC_VPKSHUS
++ UNSPEC_VPKUWUS
++ UNSPEC_VPKSWUS
++ UNSPEC_VSLV4SI
++ UNSPEC_VSLO
++ UNSPEC_VSR
++ UNSPEC_VSRO
++ UNSPEC_VSUBCUW
++ UNSPEC_VSUBU
++ UNSPEC_VSUBS
++ UNSPEC_VSUM4UBS
++ UNSPEC_VSUM4S
++ UNSPEC_VSUM2SWS
++ UNSPEC_VSUMSWS
++ UNSPEC_VPERM
++ UNSPEC_VPERM_UNS
++ UNSPEC_VRFIN
++ UNSPEC_VCFUX
++ UNSPEC_VCFSX
++ UNSPEC_VCTUXS
++ UNSPEC_VCTSXS
++ UNSPEC_VLOGEFP
++ UNSPEC_VEXPTEFP
++ UNSPEC_VLSDOI
++ UNSPEC_VUPKHSB
++ UNSPEC_VUPKHPX
++ UNSPEC_VUPKHSH
++ UNSPEC_VUPKLSB
++ UNSPEC_VUPKLPX
++ UNSPEC_VUPKLSH
++ UNSPEC_DST
++ UNSPEC_DSTT
++ UNSPEC_DSTST
++ UNSPEC_DSTSTT
++ UNSPEC_LVSL
++ UNSPEC_LVSR
++ UNSPEC_LVE
++ UNSPEC_STVX
++ UNSPEC_STVXL
++ UNSPEC_STVE
++ UNSPEC_SET_VSCR
++ UNSPEC_GET_VRSAVE
++ UNSPEC_LVX
++ UNSPEC_REDUC_PLUS
++ UNSPEC_VECSH
++ UNSPEC_EXTEVEN_V4SI
++ UNSPEC_EXTEVEN_V8HI
++ UNSPEC_EXTEVEN_V16QI
++ UNSPEC_EXTEVEN_V4SF
++ UNSPEC_EXTODD_V4SI
++ UNSPEC_EXTODD_V8HI
++ UNSPEC_EXTODD_V16QI
++ UNSPEC_EXTODD_V4SF
++ UNSPEC_INTERHI_V4SI
++ UNSPEC_INTERHI_V8HI
++ UNSPEC_INTERHI_V16QI
++ UNSPEC_INTERLO_V4SI
++ UNSPEC_INTERLO_V8HI
++ UNSPEC_INTERLO_V16QI
++ UNSPEC_LVLX
++ UNSPEC_LVLXL
++ UNSPEC_LVRX
++ UNSPEC_LVRXL
++ UNSPEC_STVLX
++ UNSPEC_STVLXL
++ UNSPEC_STVRX
++ UNSPEC_STVRXL
++ UNSPEC_VMULWHUB
++ UNSPEC_VMULWLUB
++ UNSPEC_VMULWHSB
++ UNSPEC_VMULWLSB
++ UNSPEC_VMULWHUH
++ UNSPEC_VMULWLUH
++ UNSPEC_VMULWHSH
++ UNSPEC_VMULWLSH
++ UNSPEC_VUPKHUB
++ UNSPEC_VUPKHUH
++ UNSPEC_VUPKLUB
++ UNSPEC_VUPKLUH
++ UNSPEC_VPERMSI
++ UNSPEC_VPERMHI
++ UNSPEC_INTERHI
++ UNSPEC_INTERLO
++ UNSPEC_VUPKHS_V4SF
++ UNSPEC_VUPKLS_V4SF
++ UNSPEC_VUPKHU_V4SF
++ UNSPEC_VUPKLU_V4SF
+ ])
+
+-(define_constants
+- [(UNSPECV_SET_VRSAVE 30)
+- (UNSPECV_MTVSCR 186)
+- (UNSPECV_MFVSCR 187)
+- (UNSPECV_DSSALL 188)
+- (UNSPECV_DSS 189)
++(define_c_enum "unspecv"
++ [UNSPECV_SET_VRSAVE
++ UNSPECV_MTVSCR
++ UNSPECV_MFVSCR
++ UNSPECV_DSSALL
++ UNSPECV_DSS
+ ])
+
+ ;; Vec int modes
+Index: gcc/config/rs6000/dfp.md
+===================================================================
+--- a/src/gcc/config/rs6000/dfp.md (.../gcc-4_6-branch)
++++ b/src/gcc/config/rs6000/dfp.md (.../ibm/gcc-4_6-branch)
+@@ -1,5 +1,5 @@
+ ;; Decimal Floating Point (DFP) patterns.
+-;; Copyright (C) 2007, 2008, 2010
++;; Copyright (C) 2007, 2008, 2010, 2011
+ ;; Free Software Foundation, Inc.
+ ;; Contributed by Ben Elliston (bje@au.ibm.com) and Peter Bergner
+ ;; (bergner@vnet.ibm.com).
+@@ -24,9 +24,9 @@
+ ;; UNSPEC usage
+ ;;
+
+-(define_constants
+- [(UNSPEC_MOVSD_LOAD 400)
+- (UNSPEC_MOVSD_STORE 401)
++(define_c_enum "unspec"
++ [UNSPEC_MOVSD_LOAD
++ UNSPEC_MOVSD_STORE
+ ])
+
+
+Index: gcc/config/rs6000/sync.md
+===================================================================
+--- a/src/gcc/config/rs6000/sync.md (.../gcc-4_6-branch)
++++ b/src/gcc/config/rs6000/sync.md (.../ibm/gcc-4_6-branch)
+@@ -1,5 +1,6 @@
+ ;; Machine description for PowerPC synchronization instructions.
+-;; Copyright (C) 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
++;; Copyright (C) 2005, 2007, 2008, 2009, 2011
++;; Free Software Foundation, Inc.
+ ;; Contributed by Geoffrey Keating.
+
+ ;; This file is part of GCC.
+@@ -591,7 +592,7 @@
+
+ (define_insn "isync"
+ [(set (mem:BLK (match_scratch 0 "X"))
+- (unspec_volatile:BLK [(mem:BLK (match_scratch 1 "X"))] UNSPEC_ISYNC))]
++ (unspec_volatile:BLK [(mem:BLK (match_scratch 1 "X"))] UNSPECV_ISYNC))]
+ ""
+ "{ics|isync}"
+ [(set_attr "type" "isync")])
+@@ -610,7 +611,7 @@
+ ; Some AIX assemblers don't accept lwsync, so we use a .long.
+ (define_insn "lwsync"
+ [(set (mem:BLK (match_scratch 0 "X"))
+- (unspec_volatile:BLK [(mem:BLK (match_scratch 1 "X"))] UNSPEC_LWSYNC))]
++ (unspec_volatile:BLK [(mem:BLK (match_scratch 1 "X"))] UNSPECV_LWSYNC))]
+ ""
+ {
+ if (TARGET_NO_LWSYNC)
+Index: gcc/config/rs6000/rs6000.md
+===================================================================
+--- a/src/gcc/config/rs6000/rs6000.md (.../gcc-4_6-branch)
++++ b/src/gcc/config/rs6000/rs6000.md (.../ibm/gcc-4_6-branch)
+@@ -1,6 +1,6 @@
+ ;; Machine description for IBM RISC System 6000 (POWER) for GNU C compiler
+ ;; Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+-;; 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
++;; 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+ ;; Free Software Foundation, Inc.
+ ;; Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+@@ -27,9 +27,14 @@
+ ;;
+
+ (define_constants
+- [(MQ_REGNO 64)
++ [(STACK_POINTER_REGNUM 1)
++ (TOC_REGNUM 2)
++ (STATIC_CHAIN_REGNUM 11)
++ (HARD_FRAME_POINTER_REGNUM 31)
++ (MQ_REGNO 64)
+ (LR_REGNO 65)
+ (CTR_REGNO 66)
++ (ARG_POINTER_REGNUM 67)
+ (CR0_REGNO 68)
+ (CR1_REGNO 69)
+ (CR2_REGNO 70)
+@@ -46,83 +51,96 @@
+ (VSCR_REGNO 110)
+ (SPE_ACC_REGNO 111)
+ (SPEFSCR_REGNO 112)
+- (SFP_REGNO 113)
++ (FRAME_POINTER_REGNUM 113)
++
++ ; ABI defined stack offsets for storing the TOC pointer with AIX calls.
++ (TOC_SAVE_OFFSET_32BIT 20)
++ (TOC_SAVE_OFFSET_64BIT 40)
++
++ ; Function TOC offset in the AIX function descriptor.
++ (AIX_FUNC_DESC_TOC_32BIT 4)
++ (AIX_FUNC_DESC_TOC_64BIT 8)
++
++ ; Static chain offset in the AIX function descriptor.
++ (AIX_FUNC_DESC_SC_32BIT 8)
++ (AIX_FUNC_DESC_SC_64BIT 16)
+ ])
+
+ ;;
+ ;; UNSPEC usage
+ ;;
+
+-(define_constants
+- [(UNSPEC_FRSP 0) ; frsp for POWER machines
+- (UNSPEC_PROBE_STACK 4) ; probe stack memory reference
+- (UNSPEC_TIE 5) ; tie stack contents and stack pointer
+- (UNSPEC_TOCPTR 6) ; address of a word pointing to the TOC
+- (UNSPEC_TOC 7) ; address of the TOC (more-or-less)
+- (UNSPEC_MOVSI_GOT 8)
+- (UNSPEC_MV_CR_OV 9) ; move_from_CR_ov_bit
+- (UNSPEC_FCTIWZ 10)
+- (UNSPEC_FRIM 11)
+- (UNSPEC_FRIN 12)
+- (UNSPEC_FRIP 13)
+- (UNSPEC_FRIZ 14)
+- (UNSPEC_LD_MPIC 15) ; load_macho_picbase
+- (UNSPEC_MPIC_CORRECT 16) ; macho_correct_pic
+- (UNSPEC_TLSGD 17)
+- (UNSPEC_TLSLD 18)
+- (UNSPEC_MOVESI_FROM_CR 19)
+- (UNSPEC_MOVESI_TO_CR 20)
+- (UNSPEC_TLSDTPREL 21)
+- (UNSPEC_TLSDTPRELHA 22)
+- (UNSPEC_TLSDTPRELLO 23)
+- (UNSPEC_TLSGOTDTPREL 24)
+- (UNSPEC_TLSTPREL 25)
+- (UNSPEC_TLSTPRELHA 26)
+- (UNSPEC_TLSTPRELLO 27)
+- (UNSPEC_TLSGOTTPREL 28)
+- (UNSPEC_TLSTLS 29)
+- (UNSPEC_FIX_TRUNC_TF 30) ; fadd, rounding towards zero
+- (UNSPEC_MV_CR_GT 31) ; move_from_CR_gt_bit
+- (UNSPEC_STFIWX 32)
+- (UNSPEC_POPCNTB 33)
+- (UNSPEC_FRES 34)
+- (UNSPEC_SP_SET 35)
+- (UNSPEC_SP_TEST 36)
+- (UNSPEC_SYNC 37)
+- (UNSPEC_LWSYNC 38)
+- (UNSPEC_ISYNC 39)
+- (UNSPEC_SYNC_OP 40)
+- (UNSPEC_ATOMIC 41)
+- (UNSPEC_CMPXCHG 42)
+- (UNSPEC_XCHG 43)
+- (UNSPEC_AND 44)
+- (UNSPEC_DLMZB 45)
+- (UNSPEC_DLMZB_CR 46)
+- (UNSPEC_DLMZB_STRLEN 47)
+- (UNSPEC_RSQRT 48)
+- (UNSPEC_TOCREL 49)
+- (UNSPEC_MACHOPIC_OFFSET 50)
+- (UNSPEC_BPERM 51)
+- (UNSPEC_COPYSIGN 52)
+- (UNSPEC_PARITY 53)
+- (UNSPEC_FCTIW 54)
+- (UNSPEC_FCTID 55)
+- (UNSPEC_LFIWAX 56)
+- (UNSPEC_LFIWZX 57)
+- (UNSPEC_FCTIWUZ 58)
++(define_c_enum "unspec"
++ [UNSPEC_FRSP ; frsp for POWER machines
++ UNSPEC_PROBE_STACK ; probe stack memory reference
++ UNSPEC_TIE ; tie stack contents and stack pointer
++ UNSPEC_TOCPTR ; address of a word pointing to the TOC
++ UNSPEC_TOC ; address of the TOC (more-or-less)
++ UNSPEC_MOVSI_GOT
++ UNSPEC_MV_CR_OV ; move_from_CR_ov_bit
++ UNSPEC_FCTIWZ
++ UNSPEC_FRIM
++ UNSPEC_FRIN
++ UNSPEC_FRIP
++ UNSPEC_FRIZ
++ UNSPEC_LD_MPIC ; load_macho_picbase
++ UNSPEC_MPIC_CORRECT ; macho_correct_pic
++ UNSPEC_TLSGD
++ UNSPEC_TLSLD
++ UNSPEC_MOVESI_FROM_CR
++ UNSPEC_MOVESI_TO_CR
++ UNSPEC_TLSDTPREL
++ UNSPEC_TLSDTPRELHA
++ UNSPEC_TLSDTPRELLO
++ UNSPEC_TLSGOTDTPREL
++ UNSPEC_TLSTPREL
++ UNSPEC_TLSTPRELHA
++ UNSPEC_TLSTPRELLO
++ UNSPEC_TLSGOTTPREL
++ UNSPEC_TLSTLS
++ UNSPEC_FIX_TRUNC_TF ; fadd, rounding towards zero
++ UNSPEC_MV_CR_GT ; move_from_CR_gt_bit
++ UNSPEC_STFIWX
++ UNSPEC_POPCNTB
++ UNSPEC_FRES
++ UNSPEC_SP_SET
++ UNSPEC_SP_TEST
++ UNSPEC_SYNC
++ UNSPEC_SYNC_OP
++ UNSPEC_ATOMIC
++ UNSPEC_CMPXCHG
++ UNSPEC_XCHG
++ UNSPEC_AND
++ UNSPEC_DLMZB
++ UNSPEC_DLMZB_CR
++ UNSPEC_DLMZB_STRLEN
++ UNSPEC_RSQRT
++ UNSPEC_TOCREL
++ UNSPEC_MACHOPIC_OFFSET
++ UNSPEC_BPERM
++ UNSPEC_COPYSIGN
++ UNSPEC_PARITY
++ UNSPEC_FCTIW
++ UNSPEC_FCTID
++ UNSPEC_LFIWAX
++ UNSPEC_LFIWZX
++ UNSPEC_FCTIWUZ
+ ])
+
+ ;;
+ ;; UNSPEC_VOLATILE usage
+ ;;
+
+-(define_constants
+- [(UNSPECV_BLOCK 0)
+- (UNSPECV_LL 1) ; load-locked
+- (UNSPECV_SC 2) ; store-conditional
+- (UNSPECV_PROBE_STACK_RANGE 3) ; probe range of stack addresses
+- (UNSPECV_EH_RR 9) ; eh_reg_restore
++(define_c_enum "unspecv"
++ [UNSPECV_BLOCK
++ UNSPECV_LL ; load-locked
++ UNSPECV_SC ; store-conditional
++ UNSPECV_PROBE_STACK_RANGE ; probe range of stack addresses
++ UNSPECV_EH_RR ; eh_reg_restore
++ UNSPECV_ISYNC ; isync instruction
++ UNSPECV_LWSYNC ; lwsync
+ ])
++
+
+ ;; Define an insn type attribute. This is used in function unit delay
+ ;; computations.
+@@ -266,6 +284,9 @@
+ (define_mode_attr mptrsize [(SI "si")
+ (DI "di")])
+
++(define_mode_attr ptrload [(SI "{l|lwz}")
++ (DI "ld")])
++
+ (define_mode_attr rreg [(SF "f")
+ (DF "ws")
+ (V4SF "wf")
+@@ -9644,6 +9665,27 @@
+ [(set_attr "type" "two,load,store,*,*,*")
+ (set_attr "length" "8,8,8,8,12,16")])
+
++;; Reload patterns to support gpr load/store with misaligned mem.
++(define_expand "reload_di_store"
++ [(parallel [(match_operand 0 "memory_operand" "=m")
++ (match_operand 1 "gpc_reg_operand" "r")
++ (match_operand:DI 2 "register_operand" "=&b")])]
++ "TARGET_POWERPC64"
++{
++ rs6000_secondary_reload_ppc64 (operands[1], operands[0], operands[2], true);
++ DONE;
++})
++
++(define_expand "reload_di_load"
++ [(parallel [(match_operand 0 "gpc_reg_operand" "=r")
++ (match_operand 1 "memory_operand" "m")
++ (match_operand:DI 2 "register_operand" "=b")])]
++ "TARGET_POWERPC64"
++{
++ rs6000_secondary_reload_ppc64 (operands[0], operands[1], operands[2], false);
++ DONE;
++})
++
+ ; ld/std require word-aligned displacements -> 'Y' constraint.
+ ; List Y->r and r->Y before r->r for reload.
+ (define_insn "*movdf_hardfloat64_mfpgpr"
+@@ -12156,87 +12198,7 @@
+ "TARGET_ELF && TARGET_CMODEL != CMODEL_SMALL"
+ "{cal %0,%2@l(%1)|addi %0,%1,%2@l}")
+
+-;; A function pointer under AIX is a pointer to a data area whose first word
+-;; contains the actual address of the function, whose second word contains a
+-;; pointer to its TOC, and whose third word contains a value to place in the
+-;; static chain register (r11). Note that if we load the static chain, our
+-;; "trampoline" need not have any executable code.
+-
+-(define_expand "call_indirect_aix32"
+- [(set (match_dup 2)
+- (mem:SI (match_operand:SI 0 "gpc_reg_operand" "")))
+- (set (mem:SI (plus:SI (reg:SI 1) (const_int 20)))
+- (reg:SI 2))
+- (set (reg:SI 11)
+- (mem:SI (plus:SI (match_dup 0)
+- (const_int 8))))
+- (parallel [(call (mem:SI (match_dup 2))
+- (match_operand 1 "" ""))
+- (use (mem:SI (plus:SI (match_dup 0) (const_int 4))))
+- (use (reg:SI 11))
+- (use (mem:SI (plus:SI (reg:SI 1) (const_int 20))))
+- (clobber (reg:SI LR_REGNO))])]
+- "TARGET_32BIT"
+- "
+-{ operands[2] = gen_reg_rtx (SImode); }")
+-
+-(define_expand "call_indirect_aix64"
+- [(set (match_dup 2)
+- (mem:DI (match_operand:DI 0 "gpc_reg_operand" "")))
+- (set (mem:DI (plus:DI (reg:DI 1) (const_int 40)))
+- (reg:DI 2))
+- (set (reg:DI 11)
+- (mem:DI (plus:DI (match_dup 0)
+- (const_int 16))))
+- (parallel [(call (mem:SI (match_dup 2))
+- (match_operand 1 "" ""))
+- (use (mem:DI (plus:DI (match_dup 0) (const_int 8))))
+- (use (reg:DI 11))
+- (use (mem:DI (plus:DI (reg:DI 1) (const_int 40))))
+- (clobber (reg:SI LR_REGNO))])]
+- "TARGET_64BIT"
+- "
+-{ operands[2] = gen_reg_rtx (DImode); }")
+-
+-(define_expand "call_value_indirect_aix32"
+- [(set (match_dup 3)
+- (mem:SI (match_operand:SI 1 "gpc_reg_operand" "")))
+- (set (mem:SI (plus:SI (reg:SI 1) (const_int 20)))
+- (reg:SI 2))
+- (set (reg:SI 11)
+- (mem:SI (plus:SI (match_dup 1)
+- (const_int 8))))
+- (parallel [(set (match_operand 0 "" "")
+- (call (mem:SI (match_dup 3))
+- (match_operand 2 "" "")))
+- (use (mem:SI (plus:SI (match_dup 1) (const_int 4))))
+- (use (reg:SI 11))
+- (use (mem:SI (plus:SI (reg:SI 1) (const_int 20))))
+- (clobber (reg:SI LR_REGNO))])]
+- "TARGET_32BIT"
+- "
+-{ operands[3] = gen_reg_rtx (SImode); }")
+-
+-(define_expand "call_value_indirect_aix64"
+- [(set (match_dup 3)
+- (mem:DI (match_operand:DI 1 "gpc_reg_operand" "")))
+- (set (mem:DI (plus:DI (reg:DI 1) (const_int 40)))
+- (reg:DI 2))
+- (set (reg:DI 11)
+- (mem:DI (plus:DI (match_dup 1)
+- (const_int 16))))
+- (parallel [(set (match_operand 0 "" "")
+- (call (mem:SI (match_dup 3))
+- (match_operand 2 "" "")))
+- (use (mem:DI (plus:DI (match_dup 1) (const_int 8))))
+- (use (reg:DI 11))
+- (use (mem:DI (plus:DI (reg:DI 1) (const_int 40))))
+- (clobber (reg:SI LR_REGNO))])]
+- "TARGET_64BIT"
+- "
+-{ operands[3] = gen_reg_rtx (DImode); }")
+-
+-;; Now the definitions for the call and call_value insns
++;; Call and call_value insns
+ (define_expand "call"
+ [(parallel [(call (mem:SI (match_operand 0 "address_operand" ""))
+ (match_operand 1 "" ""))
+@@ -12272,13 +12234,7 @@
+ case ABI_AIX:
+ /* AIX function pointers are really pointers to a three word
+ area. */
+- emit_call_insn (TARGET_32BIT
+- ? gen_call_indirect_aix32 (force_reg (SImode,
+- operands[0]),
+- operands[1])
+- : gen_call_indirect_aix64 (force_reg (DImode,
+- operands[0]),
+- operands[1]));
++ rs6000_call_indirect_aix (NULL_RTX, operands[0], operands[1]);
+ DONE;
+
+ default:
+@@ -12323,15 +12279,7 @@
+ case ABI_AIX:
+ /* AIX function pointers are really pointers to a three word
+ area. */
+- emit_call_insn (TARGET_32BIT
+- ? gen_call_value_indirect_aix32 (operands[0],
+- force_reg (SImode,
+- operands[1]),
+- operands[2])
+- : gen_call_value_indirect_aix64 (operands[0],
+- force_reg (DImode,
+- operands[1]),
+- operands[2]));
++ rs6000_call_indirect_aix (operands[0], operands[1], operands[2]);
+ DONE;
+
+ default:
+@@ -12425,149 +12373,202 @@
+ [(set_attr "type" "branch")
+ (set_attr "length" "4,8")])
+
+-;; Call to function which may be in another module. Restore the TOC
+-;; pointer (r2) after the call unless this is System V.
+-;; Operand2 is nonzero if we are using the V.4 calling sequence and
+-;; either the function was not prototyped, or it was prototyped as a
+-;; variable argument function. It is > 0 if FP registers were passed
+-;; and < 0 if they were not.
++;; Call to indirect functions with the AIX abi using a 3 word descriptor.
++;; Operand0 is the addresss of the function to call
++;; Operand1 is the flag for System V.4 for unprototyped or FP registers
++;; Operand2 is the location in the function descriptor to load r2 from
++;; Operand3 is the stack location to hold the current TOC pointer
+
+-(define_insn_and_split "*call_indirect_nonlocal_aix32_internal"
+- [(call (mem:SI (match_operand:SI 0 "register_operand" "c,*l"))
+- (match_operand 1 "" "g,g"))
+- (use (mem:SI (plus:SI (match_operand:SI 2 "register_operand" "b,b") (const_int 4))))
+- (use (reg:SI 11))
+- (use (mem:SI (plus:SI (reg:SI 1) (const_int 20))))
+- (clobber (reg:SI LR_REGNO))]
+- "TARGET_32BIT && DEFAULT_ABI == ABI_AIX"
++(define_insn_and_split "call_indirect_aix<ptrsize>"
++ [(call (mem:SI (match_operand:P 0 "register_operand" "c,*l"))
++ (match_operand 1 "" "g,g"))
++ (use (match_operand:P 2 "memory_operand" "m,m"))
++ (use (match_operand:P 3 "memory_operand" "m,m"))
++ (use (reg:P STATIC_CHAIN_REGNUM))
++ (clobber (reg:P LR_REGNO))]
++ "DEFAULT_ABI == ABI_AIX && TARGET_R11"
+ "#"
+ "&& reload_completed"
+- [(set (reg:SI 2)
+- (mem:SI (plus:SI (match_dup 2) (const_int 4))))
++ [(set (reg:P TOC_REGNUM) (match_dup 2))
+ (parallel [(call (mem:SI (match_dup 0))
+ (match_dup 1))
+- (use (reg:SI 2))
+- (use (reg:SI 11))
+- (set (reg:SI 2)
+- (mem:SI (plus:SI (reg:SI 1) (const_int 20))))
+- (clobber (reg:SI LR_REGNO))])]
++ (use (reg:P TOC_REGNUM))
++ (use (reg:P STATIC_CHAIN_REGNUM))
++ (use (match_dup 3))
++ (set (reg:P TOC_REGNUM) (match_dup 3))
++ (clobber (reg:P LR_REGNO))])]
+ ""
+ [(set_attr "type" "jmpreg")
+ (set_attr "length" "12")])
+
+-(define_insn "*call_indirect_nonlocal_aix32"
+- [(call (mem:SI (match_operand:SI 0 "register_operand" "c,*l"))
++(define_insn "*call_indirect_aix<ptrsize>_internal"
++ [(call (mem:SI (match_operand:P 0 "register_operand" "c,*l"))
+ (match_operand 1 "" "g,g"))
+- (use (reg:SI 2))
+- (use (reg:SI 11))
+- (set (reg:SI 2)
+- (mem:SI (plus:SI (reg:SI 1) (const_int 20))))
+- (clobber (reg:SI LR_REGNO))]
+- "TARGET_32BIT && DEFAULT_ABI == ABI_AIX && reload_completed"
+- "b%T0l\;{l|lwz} 2,20(1)"
++ (use (reg:P TOC_REGNUM))
++ (use (reg:P STATIC_CHAIN_REGNUM))
++ (use (match_operand:P 2 "memory_operand" "m,m"))
++ (set (reg:P TOC_REGNUM) (match_dup 2))
++ (clobber (reg:P LR_REGNO))]
++ "DEFAULT_ABI == ABI_AIX && reload_completed && TARGET_R11"
++ "b%T0l\;<ptrload> 2,%2"
+ [(set_attr "type" "jmpreg")
+ (set_attr "length" "8")])
+
+-(define_insn "*call_nonlocal_aix32"
+- [(call (mem:SI (match_operand:SI 0 "symbol_ref_operand" "s"))
+- (match_operand 1 "" "g"))
+- (use (match_operand:SI 2 "immediate_operand" "O"))
+- (clobber (reg:SI LR_REGNO))]
+- "TARGET_32BIT
+- && DEFAULT_ABI == ABI_AIX
+- && (INTVAL (operands[2]) & CALL_LONG) == 0"
+- "bl %z0\;%."
+- [(set_attr "type" "branch")
+- (set_attr "length" "8")])
+-
+-(define_insn_and_split "*call_indirect_nonlocal_aix64_internal"
+- [(call (mem:SI (match_operand:DI 0 "register_operand" "c,*l"))
+- (match_operand 1 "" "g,g"))
+- (use (mem:DI (plus:DI (match_operand:DI 2 "register_operand" "b,b")
+- (const_int 8))))
+- (use (reg:DI 11))
+- (use (mem:DI (plus:DI (reg:DI 1) (const_int 40))))
+- (clobber (reg:SI LR_REGNO))]
+- "TARGET_64BIT && DEFAULT_ABI == ABI_AIX"
++;; Like call_indirect_aix<ptrsize>, except don't load the static chain
++;; Operand0 is the addresss of the function to call
++;; Operand1 is the flag for System V.4 for unprototyped or FP registers
++;; Operand2 is the location in the function descriptor to load r2 from
++;; Operand3 is the stack location to hold the current TOC pointer
++
++(define_insn_and_split "call_indirect_aix<ptrsize>_nor11"
++ [(call (mem:SI (match_operand:P 0 "register_operand" "c,*l"))
++ (match_operand 1 "" "g,g"))
++ (use (match_operand:P 2 "memory_operand" "m,m"))
++ (use (match_operand:P 3 "memory_operand" "m,m"))
++ (clobber (reg:P LR_REGNO))]
++ "DEFAULT_ABI == ABI_AIX && !TARGET_R11"
+ "#"
+ "&& reload_completed"
+- [(set (reg:DI 2)
+- (mem:DI (plus:DI (match_dup 2) (const_int 8))))
++ [(set (reg:P TOC_REGNUM) (match_dup 2))
+ (parallel [(call (mem:SI (match_dup 0))
+ (match_dup 1))
+- (use (reg:DI 2))
+- (use (reg:DI 11))
+- (set (reg:DI 2)
+- (mem:DI (plus:DI (reg:DI 1) (const_int 40))))
+- (clobber (reg:SI LR_REGNO))])]
++ (use (reg:P TOC_REGNUM))
++ (use (match_dup 3))
++ (set (reg:P TOC_REGNUM) (match_dup 3))
++ (clobber (reg:P LR_REGNO))])]
+ ""
+ [(set_attr "type" "jmpreg")
+ (set_attr "length" "12")])
+
+-(define_insn "*call_indirect_nonlocal_aix64"
+- [(call (mem:SI (match_operand:DI 0 "register_operand" "c,*l"))
++(define_insn "*call_indirect_aix<ptrsize>_internal2"
++ [(call (mem:SI (match_operand:P 0 "register_operand" "c,*l"))
+ (match_operand 1 "" "g,g"))
+- (use (reg:DI 2))
+- (use (reg:DI 11))
+- (set (reg:DI 2)
+- (mem:DI (plus:DI (reg:DI 1) (const_int 40))))
+- (clobber (reg:SI LR_REGNO))]
+- "TARGET_64BIT && DEFAULT_ABI == ABI_AIX && reload_completed"
+- "b%T0l\;ld 2,40(1)"
++ (use (reg:P TOC_REGNUM))
++ (use (match_operand:P 2 "memory_operand" "m,m"))
++ (set (reg:P TOC_REGNUM) (match_dup 2))
++ (clobber (reg:P LR_REGNO))]
++ "DEFAULT_ABI == ABI_AIX && reload_completed && !TARGET_R11"
++ "b%T0l\;<ptrload> 2,%2"
+ [(set_attr "type" "jmpreg")
+ (set_attr "length" "8")])
+
+-(define_insn "*call_nonlocal_aix64"
+- [(call (mem:SI (match_operand:DI 0 "symbol_ref_operand" "s"))
+- (match_operand 1 "" "g"))
+- (use (match_operand:SI 2 "immediate_operand" "O"))
+- (clobber (reg:SI LR_REGNO))]
+- "TARGET_64BIT
+- && DEFAULT_ABI == ABI_AIX
+- && (INTVAL (operands[2]) & CALL_LONG) == 0"
+- "bl %z0\;%."
+- [(set_attr "type" "branch")
++;; Operand0 is the return result of the function
++;; Operand1 is the addresss of the function to call
++;; Operand2 is the flag for System V.4 for unprototyped or FP registers
++;; Operand3 is the location in the function descriptor to load r2 from
++;; Operand4 is the stack location to hold the current TOC pointer
++
++(define_insn_and_split "call_value_indirect_aix<ptrsize>"
++ [(set (match_operand 0 "" "")
++ (call (mem:SI (match_operand:P 1 "register_operand" "c,*l"))
++ (match_operand 2 "" "g,g")))
++ (use (match_operand:P 3 "memory_operand" "m,m"))
++ (use (match_operand:P 4 "memory_operand" "m,m"))
++ (use (reg:P STATIC_CHAIN_REGNUM))
++ (clobber (reg:P LR_REGNO))]
++ "DEFAULT_ABI == ABI_AIX && TARGET_R11"
++ "#"
++ "&& reload_completed"
++ [(set (reg:P TOC_REGNUM) (match_dup 3))
++ (parallel [(set (match_dup 0)
++ (call (mem:SI (match_dup 1))
++ (match_dup 2)))
++ (use (reg:P TOC_REGNUM))
++ (use (reg:P STATIC_CHAIN_REGNUM))
++ (use (match_dup 4))
++ (set (reg:P TOC_REGNUM) (match_dup 4))
++ (clobber (reg:P LR_REGNO))])]
++ ""
++ [(set_attr "type" "jmpreg")
++ (set_attr "length" "12")])
++
++(define_insn "*call_value_indirect_aix<ptrsize>_internal"
++ [(set (match_operand 0 "" "")
++ (call (mem:SI (match_operand:P 1 "register_operand" "c,*l"))
++ (match_operand 2 "" "g,g")))
++ (use (reg:P TOC_REGNUM))
++ (use (reg:P STATIC_CHAIN_REGNUM))
++ (use (match_operand:P 3 "memory_operand" "m,m"))
++ (set (reg:P TOC_REGNUM) (match_dup 3))
++ (clobber (reg:P LR_REGNO))]
++ "DEFAULT_ABI == ABI_AIX && reload_completed && TARGET_R11"
++ "b%T1l\;<ptrload> 2,%3"
++ [(set_attr "type" "jmpreg")
+ (set_attr "length" "8")])
+
+-(define_insn_and_split "*call_value_indirect_nonlocal_aix32_internal"
++;; Like call_value_indirect_aix<ptrsize>, but don't load the static chain
++;; Operand0 is the return result of the function
++;; Operand1 is the addresss of the function to call
++;; Operand2 is the flag for System V.4 for unprototyped or FP registers
++;; Operand3 is the location in the function descriptor to load r2 from
++;; Operand4 is the stack location to hold the current TOC pointer
++
++(define_insn_and_split "call_value_indirect_aix<ptrsize>_nor11"
+ [(set (match_operand 0 "" "")
+- (call (mem:SI (match_operand:SI 1 "register_operand" "c,*l"))
+- (match_operand 2 "" "g,g")))
+- (use (mem:SI (plus:SI (match_operand:SI 3 "register_operand" "b,b")
+- (const_int 4))))
+- (use (reg:SI 11))
+- (use (mem:SI (plus:SI (reg:SI 1) (const_int 20))))
+- (clobber (reg:SI LR_REGNO))]
+- "TARGET_32BIT && DEFAULT_ABI == ABI_AIX"
++ (call (mem:SI (match_operand:P 1 "register_operand" "c,*l"))
++ (match_operand 2 "" "g,g")))
++ (use (match_operand:P 3 "memory_operand" "m,m"))
++ (use (match_operand:P 4 "memory_operand" "m,m"))
++ (clobber (reg:P LR_REGNO))]
++ "DEFAULT_ABI == ABI_AIX && !TARGET_R11"
+ "#"
+ "&& reload_completed"
+- [(set (reg:SI 2)
+- (mem:SI (plus:SI (match_dup 3) (const_int 4))))
+- (parallel [(set (match_dup 0) (call (mem:SI (match_dup 1))
+- (match_dup 2)))
+- (use (reg:SI 2))
+- (use (reg:SI 11))
+- (set (reg:SI 2)
+- (mem:SI (plus:SI (reg:SI 1) (const_int 20))))
+- (clobber (reg:SI LR_REGNO))])]
++ [(set (reg:P TOC_REGNUM) (match_dup 3))
++ (parallel [(set (match_dup 0)
++ (call (mem:SI (match_dup 1))
++ (match_dup 2)))
++ (use (reg:P TOC_REGNUM))
++ (use (match_dup 4))
++ (set (reg:P TOC_REGNUM) (match_dup 4))
++ (clobber (reg:P LR_REGNO))])]
+ ""
+ [(set_attr "type" "jmpreg")
+ (set_attr "length" "12")])
+
+-(define_insn "*call_value_indirect_nonlocal_aix32"
++(define_insn "*call_value_indirect_aix<ptrsize>_internal2"
+ [(set (match_operand 0 "" "")
+- (call (mem:SI (match_operand:SI 1 "register_operand" "c,*l"))
++ (call (mem:SI (match_operand:P 1 "register_operand" "c,*l"))
+ (match_operand 2 "" "g,g")))
+- (use (reg:SI 2))
+- (use (reg:SI 11))
+- (set (reg:SI 2)
+- (mem:SI (plus:SI (reg:SI 1) (const_int 20))))
+- (clobber (reg:SI LR_REGNO))]
+- "TARGET_32BIT && DEFAULT_ABI == ABI_AIX && reload_completed"
+- "b%T1l\;{l|lwz} 2,20(1)"
++ (use (reg:P TOC_REGNUM))
++ (use (match_operand:P 3 "memory_operand" "m,m"))
++ (set (reg:P TOC_REGNUM) (match_dup 3))
++ (clobber (reg:P LR_REGNO))]
++ "DEFAULT_ABI == ABI_AIX && reload_completed && !TARGET_R11"
++ "b%T1l\;<ptrload> 2,%3"
+ [(set_attr "type" "jmpreg")
+ (set_attr "length" "8")])
+
++;; Call to function which may be in another module. Restore the TOC
++;; pointer (r2) after the call unless this is System V.
++;; Operand2 is nonzero if we are using the V.4 calling sequence and
++;; either the function was not prototyped, or it was prototyped as a
++;; variable argument function. It is > 0 if FP registers were passed
++;; and < 0 if they were not.
++
++(define_insn "*call_nonlocal_aix32"
++ [(call (mem:SI (match_operand:SI 0 "symbol_ref_operand" "s"))
++ (match_operand 1 "" "g"))
++ (use (match_operand:SI 2 "immediate_operand" "O"))
++ (clobber (reg:SI LR_REGNO))]
++ "TARGET_32BIT
++ && DEFAULT_ABI == ABI_AIX
++ && (INTVAL (operands[2]) & CALL_LONG) == 0"
++ "bl %z0\;%."
++ [(set_attr "type" "branch")
++ (set_attr "length" "8")])
++
++(define_insn "*call_nonlocal_aix64"
++ [(call (mem:SI (match_operand:DI 0 "symbol_ref_operand" "s"))
++ (match_operand 1 "" "g"))
++ (use (match_operand:SI 2 "immediate_operand" "O"))
++ (clobber (reg:SI LR_REGNO))]
++ "TARGET_64BIT
++ && DEFAULT_ABI == ABI_AIX
++ && (INTVAL (operands[2]) & CALL_LONG) == 0"
++ "bl %z0\;%."
++ [(set_attr "type" "branch")
++ (set_attr "length" "8")])
++
+ (define_insn "*call_value_nonlocal_aix32"
+ [(set (match_operand 0 "" "")
+ (call (mem:SI (match_operand:SI 1 "symbol_ref_operand" "s"))
+@@ -12581,45 +12582,6 @@
+ [(set_attr "type" "branch")
+ (set_attr "length" "8")])
+
+-(define_insn_and_split "*call_value_indirect_nonlocal_aix64_internal"
+- [(set (match_operand 0 "" "")
+- (call (mem:SI (match_operand:DI 1 "register_operand" "c,*l"))
+- (match_operand 2 "" "g,g")))
+- (use (mem:DI (plus:DI (match_operand:DI 3 "register_operand" "b,b")
+- (const_int 8))))
+- (use (reg:DI 11))
+- (use (mem:DI (plus:DI (reg:DI 1) (const_int 40))))
+- (clobber (reg:SI LR_REGNO))]
+- "TARGET_64BIT && DEFAULT_ABI == ABI_AIX"
+- "#"
+- "&& reload_completed"
+- [(set (reg:DI 2)
+- (mem:DI (plus:DI (match_dup 3) (const_int 8))))
+- (parallel [(set (match_dup 0) (call (mem:SI (match_dup 1))
+- (match_dup 2)))
+- (use (reg:DI 2))
+- (use (reg:DI 11))
+- (set (reg:DI 2)
+- (mem:DI (plus:DI (reg:DI 1) (const_int 40))))
+- (clobber (reg:SI LR_REGNO))])]
+- ""
+- [(set_attr "type" "jmpreg")
+- (set_attr "length" "12")])
+-
+-(define_insn "*call_value_indirect_nonlocal_aix64"
+- [(set (match_operand 0 "" "")
+- (call (mem:SI (match_operand:DI 1 "register_operand" "c,*l"))
+- (match_operand 2 "" "g,g")))
+- (use (reg:DI 2))
+- (use (reg:DI 11))
+- (set (reg:DI 2)
+- (mem:DI (plus:DI (reg:DI 1) (const_int 40))))
+- (clobber (reg:SI LR_REGNO))]
+- "TARGET_64BIT && DEFAULT_ABI == ABI_AIX && reload_completed"
+- "b%T1l\;ld 2,40(1)"
+- [(set_attr "type" "jmpreg")
+- (set_attr "length" "8")])
+-
+ (define_insn "*call_value_nonlocal_aix64"
+ [(set (match_operand 0 "" "")
+ (call (mem:SI (match_operand:DI 1 "symbol_ref_operand" "s"))
+Index: gcc/stmt.c
+===================================================================
+--- a/src/gcc/stmt.c (.../gcc-4_6-branch)
++++ b/src/gcc/stmt.c (.../ibm/gcc-4_6-branch)
+@@ -53,6 +53,7 @@
+ #include "alloc-pool.h"
+ #include "pretty-print.h"
+ #include "bitmap.h"
++#include "params.h"
+
+
+ /* Functions and data structures for expanding case statements. */
+@@ -2270,6 +2271,20 @@
+ || (uniq == 3 && count >= 6)));
+ }
+
++/* Return the smallest number of different values for which it is best to use a
++ jump-table instead of a tree of conditional branches. */
++
++static unsigned int
++case_values_threshold (void)
++{
++ unsigned int threshold = PARAM_VALUE (PARAM_CASE_VALUES_THRESHOLD);
++
++ if (threshold == 0)
++ threshold = targetm.case_values_threshold ();
++
++ return threshold;
++}
++
+ /* Terminate a case (Pascal/Ada) or switch (C) statement
+ in which ORIG_INDEX is the expression to be tested.
+ If ORIG_TYPE is not NULL, it is the original ORIG_INDEX
+@@ -2424,7 +2439,7 @@
+ If the switch-index is a constant, do it this way
+ because we can optimize it. */
+
+- else if (count < targetm.case_values_threshold ()
++ else if (count < case_values_threshold ()
+ || compare_tree_int (range,
+ (optimize_insn_for_size_p () ? 3 : 10) * count) > 0
+ /* RANGE may be signed, and really large ranges will show up
+Index: gcc/params.def
+===================================================================
+--- a/src/gcc/params.def (.../gcc-4_6-branch)
++++ b/src/gcc/params.def (.../ibm/gcc-4_6-branch)
+@@ -883,6 +883,16 @@
+ "name lookup fails",
+ 1000, 0, 0)
+
++/* Override CASE_VALUES_THRESHOLD of when to switch from doing switch
++ statements via if statements to using a table jump operation. If the value
++ is 0, the default CASE_VALUES_THRESHOLD will be used. */
++DEFPARAM (PARAM_CASE_VALUES_THRESHOLD,
++ "case-values-threshold",
++ "The smallest number of different values for which it is best to "
++ "use a jump-table instead of a tree of conditional branches, "
++ "if 0, use the default for the machine",
++ 0, 0, 0)
++
+ /*
+ Local variables:
+ mode:c
+Index: libcpp/ChangeLog.ibm
+===================================================================
+--- a/src/libcpp/ChangeLog.ibm (.../gcc-4_6-branch)
++++ b/src/libcpp/ChangeLog.ibm (.../ibm/gcc-4_6-branch)
+@@ -0,0 +1,10 @@
++2011-04-28 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Merge up to 173137.
++
++2011-03-28 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Branch from gcc-4_6-branch, subversion id 171614.
++
++
++
+
+Property changes on: .
+___________________________________________________________________
+Modified: svn:mergeinfo
+ Merged /branches/gcc-4_6-branch:r171610-175885
+Added: svnmerge-integrated
+ + /branches/gcc-4_6-branch:1-175885
+
diff --git a/debian/patches/ignore-comp-fail.diff b/debian/patches/ignore-comp-fail.diff
new file mode 100644
index 0000000..0339810
--- /dev/null
+++ b/debian/patches/ignore-comp-fail.diff
@@ -0,0 +1,19 @@
+# DP: Ignore the bootstrap comparision failure
+
+---
+ Makefile.in | 4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -53636,7 +53636,9 @@ compare:
+ if [ -f .bad_compare ]; then \
+ echo "Bootstrap comparison failure!"; \
+ cat .bad_compare; \
+- exit 1; \
++ echo ""; \
++ echo "Ignore the comparision failure!"; \
++ true; \
+ else \
+ echo Comparison successful.; \
+ fi ; \
diff --git a/debian/patches/kbsd-gnu.diff b/debian/patches/kbsd-gnu.diff
new file mode 100644
index 0000000..6461f98
--- /dev/null
+++ b/debian/patches/kbsd-gnu.diff
@@ -0,0 +1,76 @@
+# DP: GNU/k*BSD support
+# Author: Robert Millan <rmh@aybabtu.com>
+# Status: Not yet submitted
+
+---
+ gcc/config.gcc | 2 +-
+ gcc/config/i386/kfreebsd-gnu.h | 22 ++++++++++++++++++++++
+ gcc/config/i386/linux64.h | 5 ++++-
+ 3 files changed, 27 insertions(+), 2 deletions(-)
+
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -1307,7 +1307,7 @@
+ default_gnu_indirect_function=yes
+ ;;
+ x86_64-*-kfreebsd*-gnu)
+- tm_file="${tm_file} kfreebsd-gnu.h"
++ tm_file="${tm_file} kfreebsd-gnu.h i386/kfreebsd-gnu.h"
+ ;;
+ x86_64-*-knetbsd*-gnu)
+ tm_file="${tm_file} knetbsd-gnu.h"
+--- a/src/gcc/config/i386/kfreebsd-gnu.h
++++ b/src/gcc/config/i386/kfreebsd-gnu.h
+@@ -19,7 +19,29 @@
+ along with GCC; see the file COPYING3. If not see
+ <http://www.gnu.org/licenses/>. */
+
++#ifdef GLIBC_DYNAMIC_LINKER32
++#undef GLIBC_DYNAMIC_LINKER32
++#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
++#endif
++
++#ifdef GLIBC_DYNAMIC_LINKER64
++#undef GLIBC_DYNAMIC_LINKER64
++#define GLIBC_DYNAMIC_LINKER64 "/lib/ld-kfreebsd-x86-64.so.1"
++#endif
++
+ #undef LINK_EMULATION
+ #define LINK_EMULATION "elf_i386_fbsd"
++
++#ifdef LINK_EMULATION32
++#undef LINK_EMULATION32
++#define LINK_EMULATION32 LINK_EMULATION
++#endif
++
++#ifdef LINK_EMULATION64
++#undef LINK_EMULATION64
++#define LINK_EMULATION64 "elf_x86_64_fbsd"
++#endif
++
+ #undef REG_NAME
+ #define REG_NAME(reg) sc_ ## reg
++
+--- a/src/gcc/config/i386/linux64.h
++++ b/src/gcc/config/i386/linux64.h
+@@ -59,8 +59,11 @@
+ When the -shared link option is used a final link is not being
+ done. */
+
++/* These macros may be overridden in k*bsd-gnu.h and i386/k*bsd-gnu.h. */
+ #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
+ #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
++#define LINK_EMULATION32 "elf_i386"
++#define LINK_EMULATION64 "elf_x86_64"
+
+ #if TARGET_64BIT_DEFAULT
+ #define SPEC_32 "m32"
+@@ -75,7 +78,7 @@
+ %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}"
+
+ #undef LINK_SPEC
+-#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} --hash-style=both \
++#define LINK_SPEC "%{" SPEC_64 ":-m " LINK_EMULATION64 "} %{" SPEC_32 ":-m " LINK_EMULATION32 "} --hash-style=both \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
diff --git a/debian/patches/libffi-kfreebsd.diff b/debian/patches/libffi-kfreebsd.diff
new file mode 100644
index 0000000..abde425
--- /dev/null
+++ b/debian/patches/libffi-kfreebsd.diff
@@ -0,0 +1,13 @@
+# DP: libffi: Define FFI_MMAP_EXEC_WRIT on kfreebsd-*.
+
+--- a/src/libffi/configure.ac
++++ b/src/libffi/configure.ac
+@@ -313,7 +313,7 @@
+ fi
+
+ case "$target" in
+- *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
++ *-apple-darwin10* | *-*-freebsd* | *-*-kfreebsd* | *-*-openbsd* | *-pc-solaris*)
+ AC_DEFINE(FFI_MMAP_EXEC_WRIT, 1,
+ [Cannot use malloc on this target, so, we revert to
+ alternative means])
diff --git a/debian/patches/libffi-powerpc-sf.diff b/debian/patches/libffi-powerpc-sf.diff
new file mode 100644
index 0000000..8199861
--- /dev/null
+++ b/debian/patches/libffi-powerpc-sf.diff
@@ -0,0 +1,982 @@
+>From 95d80e11f6d14da32c9e117321658c27155e313a Mon Sep 17 00:00:00 2001
+From: Kyle Moffett <Kyle.D.Moffett@boeing.com>
+Date: Tue, 16 Aug 2011 14:46:50 -0400
+Subject: [PATCH] PowerPC: Debug and fix soft-floating-point support
+
+There were a wide range of bugs in this code, including long-double
+register alignment issues, assignments to global constants (which were
+actually stored as non-constant integers).
+
+This passes the testsuite on soft-floating-point PowerPC, and it builds
+and passes the testsuite on PowerPC e500 systems which cannot even
+assemble the regular floating-point instruction set.
+
+Signed-off-by: Kyle Moffett <Kyle.D.Moffett@boeing.com>
+---
+ src/powerpc/ffi.c | 533 ++++++++++++++++++++++++---------------------
+ src/powerpc/ffitarget.h | 14 +-
+ src/powerpc/ppc_closure.S | 19 ++
+ src/powerpc/sysv.S | 6 +
+ 4 files changed, 310 insertions(+), 262 deletions(-)
+
+diff --git a/src/powerpc/ffi.c b/src/powerpc/ffi.c
+index fb2a39f..e5ec1c5 100644
+--- a/src/libffi/src/powerpc/ffi.c
++++ b/src/libffi/src/powerpc/ffi.c
+@@ -39,7 +39,9 @@
+ /* The assembly depends on these exact flags. */
+ FLAG_RETURNS_SMST = 1 << (31-31), /* Used for FFI_SYSV small structs. */
+ FLAG_RETURNS_NOTHING = 1 << (31-30), /* These go in cr7 */
++#ifndef __NO_FPRS__
+ FLAG_RETURNS_FP = 1 << (31-29),
++#endif
+ FLAG_RETURNS_64BITS = 1 << (31-28),
+
+ FLAG_RETURNS_128BITS = 1 << (31-27), /* cr6 */
+@@ -50,21 +52,20 @@
+ /* Bits (31-24) through (31-19) store shift value for SMST */
+
+ FLAG_ARG_NEEDS_COPY = 1 << (31- 7),
++#ifndef __NO_FPRS__
+ FLAG_FP_ARGUMENTS = 1 << (31- 6), /* cr1.eq; specified by ABI */
++#endif
+ FLAG_4_GPR_ARGUMENTS = 1 << (31- 5),
+ FLAG_RETVAL_REFERENCE = 1 << (31- 4)
+ };
+
+ /* About the SYSV ABI. */
+-unsigned int NUM_GPR_ARG_REGISTERS = 8;
++#define ASM_NEEDS_REGISTERS 4
++#define NUM_GPR_ARG_REGISTERS 8
+ #ifndef __NO_FPRS__
+-unsigned int NUM_FPR_ARG_REGISTERS = 8;
+-#else
+-unsigned int NUM_FPR_ARG_REGISTERS = 0;
++# define NUM_FPR_ARG_REGISTERS 8
+ #endif
+
+-enum { ASM_NEEDS_REGISTERS = 4 };
+-
+ /* ffi_prep_args_SYSV is called by the assembly routine once stack space
+ has been allocated for the function's arguments.
+
+@@ -113,10 +114,12 @@
+ valp gpr_base;
+ int intarg_count;
+
++#ifndef __NO_FPRS__
+ /* 'fpr_base' points at the space for fpr1, and grows upwards as
+ we use FPR registers. */
+ valp fpr_base;
+ int fparg_count;
++#endif
+
+ /* 'copy_space' grows down as we put structures in it. It should
+ stay 16-byte aligned. */
+@@ -125,9 +128,8 @@
+ /* 'next_arg' grows up as we put parameters in it. */
+ valp next_arg;
+
+- int i, ii MAYBE_UNUSED;
++ int i;
+ ffi_type **ptr;
+- double double_tmp;
+ union {
+ void **v;
+ char **c;
+@@ -143,15 +145,16 @@
+ size_t struct_copy_size;
+ unsigned gprvalue;
+
+- if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT)
+- NUM_FPR_ARG_REGISTERS = 0;
+-
+ stacktop.c = (char *) stack + bytes;
+ gpr_base.u = stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS;
+ intarg_count = 0;
++#ifndef __NO_FPRS__
+ fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS;
+ fparg_count = 0;
+ copy_space.c = ((flags & FLAG_FP_ARGUMENTS) ? fpr_base.c : gpr_base.c);
++#else
++ copy_space.c = gpr_base.c;
++#endif
+ next_arg.u = stack + 2;
+
+ /* Check that everything starts aligned properly. */
+@@ -174,12 +177,29 @@
+ i > 0;
+ i--, ptr++, p_argv.v++)
+ {
+- switch ((*ptr)->type)
+- {
++ unsigned short typenum = (*ptr)->type;
++
++ /* We may need to handle some values depending on ABI */
++ if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT) {
++ if (typenum == FFI_TYPE_FLOAT)
++ typenum = FFI_TYPE_UINT32;
++ if (typenum == FFI_TYPE_DOUBLE)
++ typenum = FFI_TYPE_UINT64;
++ if (typenum == FFI_TYPE_LONGDOUBLE)
++ typenum = FFI_TYPE_UINT128;
++ } else if (ecif->cif->abi != FFI_LINUX) {
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++ if (typenum == FFI_TYPE_LONGDOUBLE)
++ typenum = FFI_TYPE_STRUCT;
++#endif
++ }
++
++ /* Now test the translated value */
++ switch (typenum) {
++ double double_tmp;
++#ifndef __NO_FPRS__
+ case FFI_TYPE_FLOAT:
+ /* With FFI_LINUX_SOFT_FLOAT floats are handled like UINT32. */
+- if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT)
+- goto soft_float_prep;
+ double_tmp = **p_argv.f;
+ if (fparg_count >= NUM_FPR_ARG_REGISTERS)
+ {
+@@ -195,8 +215,6 @@
+
+ case FFI_TYPE_DOUBLE:
+ /* With FFI_LINUX_SOFT_FLOAT doubles are handled like UINT64. */
+- if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT)
+- goto soft_double_prep;
+ double_tmp = **p_argv.d;
+
+ if (fparg_count >= NUM_FPR_ARG_REGISTERS)
+@@ -218,43 +236,6 @@
+
+ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ case FFI_TYPE_LONGDOUBLE:
+- if ((ecif->cif->abi != FFI_LINUX)
+- && (ecif->cif->abi != FFI_LINUX_SOFT_FLOAT))
+- goto do_struct;
+- /* The soft float ABI for long doubles works like this,
+- a long double is passed in four consecutive gprs if available.
+- A maximum of 2 long doubles can be passed in gprs.
+- If we do not have 4 gprs left, the long double is passed on the
+- stack, 4-byte aligned. */
+- if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT)
+- {
+- unsigned int int_tmp = (*p_argv.ui)[0];
+- if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3)
+- {
+- if (intarg_count < NUM_GPR_ARG_REGISTERS)
+- intarg_count += NUM_GPR_ARG_REGISTERS - intarg_count;
+- *next_arg.u = int_tmp;
+- next_arg.u++;
+- for (ii = 1; ii < 4; ii++)
+- {
+- int_tmp = (*p_argv.ui)[ii];
+- *next_arg.u = int_tmp;
+- next_arg.u++;
+- }
+- }
+- else
+- {
+- *gpr_base.u++ = int_tmp;
+- for (ii = 1; ii < 4; ii++)
+- {
+- int_tmp = (*p_argv.ui)[ii];
+- *gpr_base.u++ = int_tmp;
+- }
+- }
+- intarg_count +=4;
+- }
+- else
+- {
+ double_tmp = (*p_argv.d)[0];
+
+ if (fparg_count >= NUM_FPR_ARG_REGISTERS - 1)
+@@ -280,13 +261,40 @@
+
+ fparg_count += 2;
+ FFI_ASSERT (flags & FLAG_FP_ARGUMENTS);
+- }
+ break;
+ #endif
++#endif /* have FPRs */
++
++ /*
++ * The soft float ABI for long doubles works like this, a long double
++ * is passed in four consecutive GPRs if available. A maximum of 2
++ * long doubles can be passed in gprs. If we do not have 4 GPRs
++ * left, the long double is passed on the stack, 4-byte aligned.
++ */
++ case FFI_TYPE_UINT128: {
++ unsigned int int_tmp = (*p_argv.ui)[0];
++ unsigned int ii;
++ if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3) {
++ if (intarg_count < NUM_GPR_ARG_REGISTERS)
++ intarg_count += NUM_GPR_ARG_REGISTERS - intarg_count;
++ *(next_arg.u++) = int_tmp;
++ for (ii = 1; ii < 4; ii++) {
++ int_tmp = (*p_argv.ui)[ii];
++ *(next_arg.u++) = int_tmp;
++ }
++ } else {
++ *(gpr_base.u++) = int_tmp;
++ for (ii = 1; ii < 4; ii++) {
++ int_tmp = (*p_argv.ui)[ii];
++ *(gpr_base.u++) = int_tmp;
++ }
++ }
++ intarg_count += 4;
++ break;
++ }
+
+ case FFI_TYPE_UINT64:
+ case FFI_TYPE_SINT64:
+- soft_double_prep:
+ if (intarg_count == NUM_GPR_ARG_REGISTERS-1)
+ intarg_count++;
+ if (intarg_count >= NUM_GPR_ARG_REGISTERS)
+@@ -319,9 +327,6 @@
+ break;
+
+ case FFI_TYPE_STRUCT:
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+- do_struct:
+-#endif
+ struct_copy_size = ((*ptr)->size + 15) & ~0xF;
+ copy_space.c -= struct_copy_size;
+ memcpy (copy_space.c, *p_argv.c, (*ptr)->size);
+@@ -349,7 +354,6 @@
+ case FFI_TYPE_UINT32:
+ case FFI_TYPE_SINT32:
+ case FFI_TYPE_POINTER:
+- soft_float_prep:
+
+ gprvalue = **p_argv.ui;
+
+@@ -366,8 +370,10 @@
+ /* Check that we didn't overrun the stack... */
+ FFI_ASSERT (copy_space.c >= next_arg.c);
+ FFI_ASSERT (gpr_base.u <= stacktop.u - ASM_NEEDS_REGISTERS);
++#ifndef __NO_FPRS__
+ FFI_ASSERT (fpr_base.u
+ <= stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS);
++#endif
+ FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4);
+ }
+
+@@ -604,9 +610,6 @@
+ unsigned type = cif->rtype->type;
+ unsigned size = cif->rtype->size;
+
+- if (cif->abi == FFI_LINUX_SOFT_FLOAT)
+- NUM_FPR_ARG_REGISTERS = 0;
+-
+ if (cif->abi != FFI_LINUX64)
+ {
+ /* All the machine-independent calculation of cif->bytes will be wrong.
+@@ -646,25 +649,38 @@
+ - Single/double FP values in fpr1, long double in fpr1,fpr2.
+ - soft-float float/doubles are treated as UINT32/UINT64 respectivley.
+ - soft-float long doubles are returned in gpr3-gpr6. */
++ /* First translate for softfloat/nonlinux */
++ if (cif->abi == FFI_LINUX_SOFT_FLOAT) {
++ if (type == FFI_TYPE_FLOAT)
++ type = FFI_TYPE_UINT32;
++ if (type == FFI_TYPE_DOUBLE)
++ type = FFI_TYPE_UINT64;
++ if (type == FFI_TYPE_LONGDOUBLE)
++ type = FFI_TYPE_UINT128;
++ } else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) {
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++ if (type == FFI_TYPE_LONGDOUBLE)
++ type = FFI_TYPE_STRUCT;
++#endif
++ }
++
+ switch (type)
+ {
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++#ifndef __NO_FPRS__
+ case FFI_TYPE_LONGDOUBLE:
+- if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64
+- && cif->abi != FFI_LINUX_SOFT_FLOAT)
+- goto byref;
+ flags |= FLAG_RETURNS_128BITS;
+ /* Fall through. */
+-#endif
+ case FFI_TYPE_DOUBLE:
+ flags |= FLAG_RETURNS_64BITS;
+ /* Fall through. */
+ case FFI_TYPE_FLOAT:
+- /* With FFI_LINUX_SOFT_FLOAT no fp registers are used. */
+- if (cif->abi != FFI_LINUX_SOFT_FLOAT)
+- flags |= FLAG_RETURNS_FP;
++ flags |= FLAG_RETURNS_FP;
+ break;
++#endif
+
++ case FFI_TYPE_UINT128:
++ flags |= FLAG_RETURNS_128BITS;
++ /* Fall through. */
+ case FFI_TYPE_UINT64:
+ case FFI_TYPE_SINT64:
+ flags |= FLAG_RETURNS_64BITS;
+@@ -699,9 +715,6 @@
+ }
+ }
+ }
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+- byref:
+-#endif
+ intarg_count++;
+ flags |= FLAG_RETVAL_REFERENCE;
+ /* Fall through. */
+@@ -722,39 +735,36 @@
+ Stuff on the stack needs to keep proper alignment. */
+ for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++)
+ {
+- switch ((*ptr)->type)
+- {
++ unsigned short typenum = (*ptr)->type;
++
++ /* We may need to handle some values depending on ABI */
++ if (cif->abi == FFI_LINUX_SOFT_FLOAT) {
++ if (typenum == FFI_TYPE_FLOAT)
++ typenum = FFI_TYPE_UINT32;
++ if (typenum == FFI_TYPE_DOUBLE)
++ typenum = FFI_TYPE_UINT64;
++ if (typenum == FFI_TYPE_LONGDOUBLE)
++ typenum = FFI_TYPE_UINT128;
++ } else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) {
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++ if (typenum == FFI_TYPE_LONGDOUBLE)
++ typenum = FFI_TYPE_STRUCT;
++#endif
++ }
++
++ switch (typenum) {
++#ifndef __NO_FPRS__
+ case FFI_TYPE_FLOAT:
+- /* With FFI_LINUX_SOFT_FLOAT floats are handled like UINT32. */
+- if (cif->abi == FFI_LINUX_SOFT_FLOAT)
+- goto soft_float_cif;
+ fparg_count++;
+ /* floating singles are not 8-aligned on stack */
+ break;
+
+ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ case FFI_TYPE_LONGDOUBLE:
+- if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT)
+- goto do_struct;
+- if (cif->abi == FFI_LINUX_SOFT_FLOAT)
+- {
+- if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3
+- || intarg_count < NUM_GPR_ARG_REGISTERS)
+- /* A long double in FFI_LINUX_SOFT_FLOAT can use only
+- a set of four consecutive gprs. If we have not enough,
+- we have to adjust the intarg_count value. */
+- intarg_count += NUM_GPR_ARG_REGISTERS - intarg_count;
+- intarg_count += 4;
+- break;
+- }
+- else
+- fparg_count++;
++ fparg_count++;
+ /* Fall thru */
+ #endif
+ case FFI_TYPE_DOUBLE:
+- /* With FFI_LINUX_SOFT_FLOAT doubles are handled like UINT64. */
+- if (cif->abi == FFI_LINUX_SOFT_FLOAT)
+- goto soft_double_cif;
+ fparg_count++;
+ /* If this FP arg is going on the stack, it must be
+ 8-byte-aligned. */
+@@ -763,10 +773,21 @@
+ && intarg_count % 2 != 0)
+ intarg_count++;
+ break;
++#endif
++ case FFI_TYPE_UINT128:
++ /*
++ * A long double in FFI_LINUX_SOFT_FLOAT can use only a set
++ * of four consecutive gprs. If we do not have enough, we
++ * have to adjust the intarg_count value.
++ */
++ if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3
++ && intarg_count < NUM_GPR_ARG_REGISTERS)
++ intarg_count = NUM_GPR_ARG_REGISTERS;
++ intarg_count += 4;
++ break;
+
+ case FFI_TYPE_UINT64:
+ case FFI_TYPE_SINT64:
+- soft_double_cif:
+ /* 'long long' arguments are passed as two words, but
+ either both words must fit in registers or both go
+ on the stack. If they go on the stack, they must
+@@ -783,9 +804,6 @@
+ break;
+
+ case FFI_TYPE_STRUCT:
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+- do_struct:
+-#endif
+ /* We must allocate space for a copy of these to enforce
+ pass-by-value. Pad the space up to a multiple of 16
+ bytes (the maximum alignment required for anything under
+@@ -793,12 +811,20 @@
+ struct_copy_size += ((*ptr)->size + 15) & ~0xF;
+ /* Fall through (allocate space for the pointer). */
+
+- default:
+- soft_float_cif:
++ case FFI_TYPE_POINTER:
++ case FFI_TYPE_INT:
++ case FFI_TYPE_UINT32:
++ case FFI_TYPE_SINT32:
++ case FFI_TYPE_UINT16:
++ case FFI_TYPE_SINT16:
++ case FFI_TYPE_UINT8:
++ case FFI_TYPE_SINT8:
+ /* Everything else is passed as a 4-byte word in a GPR, either
+ the object itself or a pointer to it. */
+ intarg_count++;
+ break;
++ default:
++ FFI_ASSERT (0);
+ }
+ }
+ else
+@@ -827,16 +853,29 @@
+ intarg_count += ((*ptr)->size + 7) / 8;
+ break;
+
+- default:
++ case FFI_TYPE_POINTER:
++ case FFI_TYPE_UINT64:
++ case FFI_TYPE_SINT64:
++ case FFI_TYPE_INT:
++ case FFI_TYPE_UINT32:
++ case FFI_TYPE_SINT32:
++ case FFI_TYPE_UINT16:
++ case FFI_TYPE_SINT16:
++ case FFI_TYPE_UINT8:
++ case FFI_TYPE_SINT8:
+ /* Everything else is passed as a 8-byte word in a GPR, either
+ the object itself or a pointer to it. */
+ intarg_count++;
+ break;
++ default:
++ FFI_ASSERT (0);
+ }
+ }
+
++#ifndef __NO_FPRS__
+ if (fparg_count != 0)
+ flags |= FLAG_FP_ARGUMENTS;
++#endif
+ if (intarg_count > 4)
+ flags |= FLAG_4_GPR_ARGUMENTS;
+ if (struct_copy_size != 0)
+@@ -844,21 +883,27 @@
+
+ if (cif->abi != FFI_LINUX64)
+ {
++#ifndef __NO_FPRS__
+ /* Space for the FPR registers, if needed. */
+ if (fparg_count != 0)
+ bytes += NUM_FPR_ARG_REGISTERS * sizeof (double);
++#endif
+
+ /* Stack space. */
+ if (intarg_count > NUM_GPR_ARG_REGISTERS)
+ bytes += (intarg_count - NUM_GPR_ARG_REGISTERS) * sizeof (int);
++#ifndef __NO_FPRS__
+ if (fparg_count > NUM_FPR_ARG_REGISTERS)
+ bytes += (fparg_count - NUM_FPR_ARG_REGISTERS) * sizeof (double);
++#endif
+ }
+ else
+ {
++#ifndef __NO_FPRS__
+ /* Space for the FPR registers, if needed. */
+ if (fparg_count != 0)
+ bytes += NUM_FPR_ARG_REGISTERS64 * sizeof (double);
++#endif
+
+ /* Stack space. */
+ if (intarg_count > NUM_GPR_ARG_REGISTERS64)
+@@ -905,9 +950,11 @@
+ switch (cif->abi)
+ {
+ #ifndef POWERPC64
++# ifndef __NO_FPRS__
+ case FFI_SYSV:
+ case FFI_GCC_SYSV:
+ case FFI_LINUX:
++# endif
+ case FFI_LINUX_SOFT_FLOAT:
+ ffi_call_SYSV (&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn);
+ break;
+@@ -1011,32 +1058,38 @@
+ void ** avalue;
+ ffi_type ** arg_types;
+ long i, avn;
+- long nf; /* number of floating registers already used */
+- long ng; /* number of general registers already used */
+- ffi_cif * cif;
+- double temp;
+- unsigned size;
++#ifndef __NO_FPRS__
++ long nf = 0; /* number of floating registers already used */
++#endif
++ long ng = 0; /* number of general registers already used */
++
++ ffi_cif *cif = closure->cif;
++ unsigned size = cif->rtype->size;
++ unsigned short rtypenum = cif->rtype->type;
+
+- cif = closure->cif;
+ avalue = alloca (cif->nargs * sizeof (void *));
+- size = cif->rtype->size;
+
+- nf = 0;
+- ng = 0;
++ /* First translate for softfloat/nonlinux */
++ if (cif->abi == FFI_LINUX_SOFT_FLOAT) {
++ if (rtypenum == FFI_TYPE_FLOAT)
++ rtypenum = FFI_TYPE_UINT32;
++ if (rtypenum == FFI_TYPE_DOUBLE)
++ rtypenum = FFI_TYPE_UINT64;
++ if (rtypenum == FFI_TYPE_LONGDOUBLE)
++ rtypenum = FFI_TYPE_UINT128;
++ } else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) {
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++ if (rtypenum == FFI_TYPE_LONGDOUBLE)
++ rtypenum = FFI_TYPE_STRUCT;
++#endif
++ }
++
+
+ /* Copy the caller's structure return value address so that the closure
+ returns the data directly to the caller.
+ For FFI_SYSV the result is passed in r3/r4 if the struct size is less
+ or equal 8 bytes. */
+-
+- if ((cif->rtype->type == FFI_TYPE_STRUCT
+- && !((cif->abi == FFI_SYSV) && (size <= 8)))
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+- || (cif->rtype->type == FFI_TYPE_LONGDOUBLE
+- && cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT)
+-#endif
+- )
+- {
++ if (rtypenum == FFI_TYPE_STRUCT && ((cif->abi != FFI_SYSV) || (size > 8))) {
+ rvalue = (void *) *pgr;
+ ng++;
+ pgr++;
+@@ -1047,10 +1100,109 @@
+ arg_types = cif->arg_types;
+
+ /* Grab the addresses of the arguments from the stack frame. */
+- while (i < avn)
+- {
+- switch (arg_types[i]->type)
+- {
++ while (i < avn) {
++ unsigned short typenum = arg_types[i]->type;
++
++ /* We may need to handle some values depending on ABI */
++ if (cif->abi == FFI_LINUX_SOFT_FLOAT) {
++ if (typenum == FFI_TYPE_FLOAT)
++ typenum = FFI_TYPE_UINT32;
++ if (typenum == FFI_TYPE_DOUBLE)
++ typenum = FFI_TYPE_UINT64;
++ if (typenum == FFI_TYPE_LONGDOUBLE)
++ typenum = FFI_TYPE_UINT128;
++ } else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) {
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++ if (typenum == FFI_TYPE_LONGDOUBLE)
++ typenum = FFI_TYPE_STRUCT;
++#endif
++ }
++
++ switch (typenum) {
++#ifndef __NO_FPRS__
++ case FFI_TYPE_FLOAT:
++ /* unfortunately float values are stored as doubles
++ * in the ffi_closure_SYSV code (since we don't check
++ * the type in that routine).
++ */
++
++ /* there are 8 64bit floating point registers */
++
++ if (nf < 8)
++ {
++ double temp = pfr->d;
++ pfr->f = (float) temp;
++ avalue[i] = pfr;
++ nf++;
++ pfr++;
++ }
++ else
++ {
++ /* FIXME? here we are really changing the values
++ * stored in the original calling routines outgoing
++ * parameter stack. This is probably a really
++ * naughty thing to do but...
++ */
++ avalue[i] = pst;
++ pst += 1;
++ }
++ break;
++
++ case FFI_TYPE_DOUBLE:
++ /* On the outgoing stack all values are aligned to 8 */
++ /* there are 8 64bit floating point registers */
++
++ if (nf < 8)
++ {
++ avalue[i] = pfr;
++ nf++;
++ pfr++;
++ }
++ else
++ {
++ if (((long) pst) & 4)
++ pst++;
++ avalue[i] = pst;
++ pst += 2;
++ }
++ break;
++
++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
++ case FFI_TYPE_LONGDOUBLE:
++ if (nf < 7)
++ {
++ avalue[i] = pfr;
++ pfr += 2;
++ nf += 2;
++ }
++ else
++ {
++ if (((long) pst) & 4)
++ pst++;
++ avalue[i] = pst;
++ pst += 4;
++ nf = 8;
++ }
++ break;
++#endif
++#endif /* have FPRS */
++
++ case FFI_TYPE_UINT128:
++ /*
++ * Test if for the whole long double, 4 gprs are available.
++ * otherwise the stuff ends up on the stack.
++ */
++ if (ng < 5) {
++ avalue[i] = pgr;
++ pgr += 4;
++ ng += 4;
++ } else {
++ avalue[i] = pst;
++ pst += 4;
++ ng = 8+4;
++ }
++ break;
++
+ case FFI_TYPE_SINT8:
+ case FFI_TYPE_UINT8:
+ /* there are 8 gpr registers used to pass values */
+@@ -1086,7 +1238,6 @@
+ case FFI_TYPE_SINT32:
+ case FFI_TYPE_UINT32:
+ case FFI_TYPE_POINTER:
+- soft_float_closure:
+ /* there are 8 gpr registers used to pass values */
+ if (ng < 8)
+ {
+@@ -1102,9 +1253,6 @@
+ break;
+
+ case FFI_TYPE_STRUCT:
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+- do_struct:
+-#endif
+ /* Structs are passed by reference. The address will appear in a
+ gpr if it is one of the first 8 arguments. */
+ if (ng < 8)
+@@ -1122,7 +1270,6 @@
+
+ case FFI_TYPE_SINT64:
+ case FFI_TYPE_UINT64:
+- soft_double_closure:
+ /* passing long long ints are complex, they must
+ * be passed in suitable register pairs such as
+ * (r3,r4) or (r5,r6) or (r6,r7), or (r7,r8) or (r9,r10)
+@@ -1154,99 +1301,8 @@
+ }
+ break;
+
+- case FFI_TYPE_FLOAT:
+- /* With FFI_LINUX_SOFT_FLOAT floats are handled like UINT32. */
+- if (cif->abi == FFI_LINUX_SOFT_FLOAT)
+- goto soft_float_closure;
+- /* unfortunately float values are stored as doubles
+- * in the ffi_closure_SYSV code (since we don't check
+- * the type in that routine).
+- */
+-
+- /* there are 8 64bit floating point registers */
+-
+- if (nf < 8)
+- {
+- temp = pfr->d;
+- pfr->f = (float) temp;
+- avalue[i] = pfr;
+- nf++;
+- pfr++;
+- }
+- else
+- {
+- /* FIXME? here we are really changing the values
+- * stored in the original calling routines outgoing
+- * parameter stack. This is probably a really
+- * naughty thing to do but...
+- */
+- avalue[i] = pst;
+- pst += 1;
+- }
+- break;
+-
+- case FFI_TYPE_DOUBLE:
+- /* With FFI_LINUX_SOFT_FLOAT doubles are handled like UINT64. */
+- if (cif->abi == FFI_LINUX_SOFT_FLOAT)
+- goto soft_double_closure;
+- /* On the outgoing stack all values are aligned to 8 */
+- /* there are 8 64bit floating point registers */
+-
+- if (nf < 8)
+- {
+- avalue[i] = pfr;
+- nf++;
+- pfr++;
+- }
+- else
+- {
+- if (((long) pst) & 4)
+- pst++;
+- avalue[i] = pst;
+- pst += 2;
+- }
+- break;
+-
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+- case FFI_TYPE_LONGDOUBLE:
+- if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT)
+- goto do_struct;
+- if (cif->abi == FFI_LINUX_SOFT_FLOAT)
+- { /* Test if for the whole long double, 4 gprs are available.
+- otherwise the stuff ends up on the stack. */
+- if (ng < 5)
+- {
+- avalue[i] = pgr;
+- pgr += 4;
+- ng += 4;
+- }
+- else
+- {
+- avalue[i] = pst;
+- pst += 4;
+- ng = 8;
+- }
+- break;
+- }
+- if (nf < 7)
+- {
+- avalue[i] = pfr;
+- pfr += 2;
+- nf += 2;
+- }
+- else
+- {
+- if (((long) pst) & 4)
+- pst++;
+- avalue[i] = pst;
+- pst += 4;
+- nf = 8;
+- }
+- break;
+-#endif
+-
+ default:
+- FFI_ASSERT (0);
++ FFI_ASSERT (0);
+ }
+
+ i++;
+@@ -1263,39 +1319,9 @@
+ already used and we never have a struct with size zero. That is the reason
+ for the subtraction of 1. See the comment in ffitarget.h about ordering.
+ */
+- if (cif->abi == FFI_SYSV && cif->rtype->type == FFI_TYPE_STRUCT
+- && size <= 8)
++ if (cif->abi == FFI_SYSV && rtypenum == FFI_TYPE_STRUCT && size <= 8)
+ return (FFI_SYSV_TYPE_SMALL_STRUCT - 1) + size;
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+- else if (cif->rtype->type == FFI_TYPE_LONGDOUBLE
+- && cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT)
+- return FFI_TYPE_STRUCT;
+-#endif
+- /* With FFI_LINUX_SOFT_FLOAT floats and doubles are handled like UINT32
+- respectivley UINT64. */
+- if (cif->abi == FFI_LINUX_SOFT_FLOAT)
+- {
+- switch (cif->rtype->type)
+- {
+- case FFI_TYPE_FLOAT:
+- return FFI_TYPE_UINT32;
+- break;
+- case FFI_TYPE_DOUBLE:
+- return FFI_TYPE_UINT64;
+- break;
+-#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+- case FFI_TYPE_LONGDOUBLE:
+- return FFI_TYPE_UINT128;
+- break;
+-#endif
+- default:
+- return cif->rtype->type;
+- }
+- }
+- else
+- {
+- return cif->rtype->type;
+- }
++ return rtypenum;
+ }
+
+ int FFI_HIDDEN ffi_closure_helper_LINUX64 (ffi_closure *, void *,
+diff --git a/src/powerpc/ffitarget.h b/src/powerpc/ffitarget.h
+index d17f731..820c482 100644
+--- a/src/libffi/src/powerpc/ffitarget.h
++++ b/src/libffi/src/powerpc/ffitarget.h
+@@ -60,18 +60,14 @@ typedef enum ffi_abi {
+ FFI_LINUX64,
+ FFI_LINUX,
+ FFI_LINUX_SOFT_FLOAT,
+-# ifdef POWERPC64
++# if defined(POWERPC64)
+ FFI_DEFAULT_ABI = FFI_LINUX64,
+-# else
+-# if (!defined(__NO_FPRS__) && (__LDBL_MANT_DIG__ == 106))
+- FFI_DEFAULT_ABI = FFI_LINUX,
+-# else
+-# ifdef __NO_FPRS__
++# elif defined(__NO_FPRS__)
+ FFI_DEFAULT_ABI = FFI_LINUX_SOFT_FLOAT,
+-# else
++# elif (__LDBL_MANT_DIG__ == 106)
++ FFI_DEFAULT_ABI = FFI_LINUX,
++# else
+ FFI_DEFAULT_ABI = FFI_GCC_SYSV,
+-# endif
+-# endif
+ # endif
+ #endif
+
+diff --git a/src/powerpc/ppc_closure.S b/src/powerpc/ppc_closure.S
+index 56f7d1a..41fb885 100644
+--- a/src/libffi/src/powerpc/ppc_closure.S
++++ b/src/libffi/src/powerpc/ppc_closure.S
+@@ -122,22 +122,41 @@ ENTRY(ffi_closure_SYSV)
+ blr
+
+ # case FFI_TYPE_FLOAT
++#ifndef __NO_FPRS__
+ lfs %f1,112+0(%r1)
+ mtlr %r0
+ addi %r1,%r1,144
++#else
++ nop
++ nop
++ nop
++#endif
+ blr
+
+ # case FFI_TYPE_DOUBLE
++#ifndef __NO_FPRS__
+ lfd %f1,112+0(%r1)
+ mtlr %r0
+ addi %r1,%r1,144
++#else
++ nop
++ nop
++ nop
++#endif
+ blr
+
+ # case FFI_TYPE_LONGDOUBLE
++#ifndef __NO_FPRS__
+ lfd %f1,112+0(%r1)
+ lfd %f2,112+8(%r1)
+ mtlr %r0
+ b .Lfinish
++#else
++ nop
++ nop
++ nop
++ blr
++#endif
+
+ # case FFI_TYPE_UINT8
+ lbz %r3,112+3(%r1)
+diff --git a/src/powerpc/sysv.S b/src/powerpc/sysv.S
+index 96ea22b..5ee3a19 100644
+--- a/src/libffi/src/powerpc/sysv.S
++++ b/src/libffi/src/powerpc/sysv.S
+@@ -83,6 +83,7 @@ ENTRY(ffi_call_SYSV)
+ nop
+ 1:
+
++#ifndef __NO_FPRS__
+ /* Load all the FP registers. */
+ bf- 6,2f
+ lfd %f1,-16-(8*4)-(8*8)(%r28)
+@@ -94,6 +95,7 @@ ENTRY(ffi_call_SYSV)
+ lfd %f6,-16-(8*4)-(3*8)(%r28)
+ lfd %f7,-16-(8*4)-(2*8)(%r28)
+ lfd %f8,-16-(8*4)-(1*8)(%r28)
++#endif
+ 2:
+
+ /* Make the call. */
+@@ -103,7 +105,9 @@ ENTRY(ffi_call_SYSV)
+ mtcrf 0x01,%r31 /* cr7 */
+ bt- 31,L(small_struct_return_value)
+ bt- 30,L(done_return_value)
++#ifndef __NO_FPRS__
+ bt- 29,L(fp_return_value)
++#endif
+ stw %r3,0(%r30)
+ bf+ 28,L(done_return_value)
+ stw %r4,4(%r30)
+@@ -124,6 +128,7 @@ L(done_return_value):
+ lwz %r1,0(%r1)
+ blr
+
++#ifndef __NO_FPRS__
+ L(fp_return_value):
+ bf 28,L(float_return_value)
+ stfd %f1,0(%r30)
+@@ -134,6 +139,7 @@ L(fp_return_value):
+ L(float_return_value):
+ stfs %f1,0(%r30)
+ b L(done_return_value)
++#endif
+
+ L(small_struct_return_value):
+ extrwi %r6,%r31,2,19 /* number of bytes padding = shift/8 */
+--
+1.7.2.5
+
diff --git a/debian/patches/libffi-powerpc-sysv-without-string-ops.diff b/debian/patches/libffi-powerpc-sysv-without-string-ops.diff
new file mode 100644
index 0000000..49982db
--- /dev/null
+++ b/debian/patches/libffi-powerpc-sysv-without-string-ops.diff
@@ -0,0 +1,149 @@
+--- a/src/libffi/src/powerpc/ffi.c
++++ b/src/libffi/src/powerpc/ffi.c
+@@ -46,11 +46,6 @@
+ FLAG_RETURNS_64BITS = 1 << (31-28),
+
+ FLAG_RETURNS_128BITS = 1 << (31-27), /* cr6 */
+- FLAG_SYSV_SMST_R4 = 1 << (31-26), /* use r4 for FFI_SYSV 8 byte
+- structs. */
+- FLAG_SYSV_SMST_R3 = 1 << (31-25), /* use r3 for FFI_SYSV 4 byte
+- structs. */
+- /* Bits (31-24) through (31-19) store shift value for SMST */
+
+ FLAG_ARG_NEEDS_COPY = 1 << (31- 7),
+ #ifndef __NO_FPRS__
+@@ -688,37 +683,22 @@
+ break;
+
+ case FFI_TYPE_STRUCT:
+- if (cif->abi == FFI_SYSV)
+- {
+- /* The final SYSV ABI says that structures smaller or equal 8 bytes
+- are returned in r3/r4. The FFI_GCC_SYSV ABI instead returns them
+- in memory. */
++ /*
++ * The final SYSV ABI says that structures smaller or equal 8 bytes
++ * are returned in r3/r4. The FFI_GCC_SYSV ABI instead returns them
++ * in memory.
++ *
++ * NOTE: The assembly code can safely assume that it just needs to
++ * store both r3 and r4 into a 8-byte word-aligned buffer, as
++ * we allocate a temporary buffer in ffi_call() if this flag is
++ * set.
++ */
++ if (cif->abi == FFI_SYSV && size <= 8)
++ flags |= FLAG_RETURNS_SMST;
+
+- /* Treat structs with size <= 8 bytes. */
+- if (size <= 8)
+- {
+- flags |= FLAG_RETURNS_SMST;
+- /* These structs are returned in r3. We pack the type and the
+- precalculated shift value (needed in the sysv.S) into flags.
+- The same applies for the structs returned in r3/r4. */
+- if (size <= 4)
+- {
+- flags |= FLAG_SYSV_SMST_R3;
+- flags |= 8 * (4 - size) << 8;
+- break;
+- }
+- /* These structs are returned in r3 and r4. See above. */
+- if (size <= 8)
+- {
+- flags |= FLAG_SYSV_SMST_R3 | FLAG_SYSV_SMST_R4;
+- flags |= 8 * (8 - size) << 8;
+- break;
+- }
+- }
+- }
+- intarg_count++;
+- flags |= FLAG_RETVAL_REFERENCE;
+- /* Fall through. */
++ intarg_count++;
++ flags |= FLAG_RETVAL_REFERENCE;
++ /* Fall through. */
+ case FFI_TYPE_VOID:
+ flags |= FLAG_RETURNS_NOTHING;
+ break;
+@@ -932,21 +912,30 @@
+ void
+ ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
+ {
++ /*
++ * The final SYSV ABI says that structures smaller or equal 8 bytes
++ * are returned in r3/r4. The FFI_GCC_SYSV ABI instead returns them
++ * in memory.
++ *
++ * Just to keep things simple for the assembly code, we will always
++ * bounce-buffer struct return values less than or equal to 8 bytes.
++ * This allows the ASM to handle SYSV small structures by directly
++ * writing r3 and r4 to memory without worrying about struct size.
++ */
++ unsigned int smst_buffer[2];
+ 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))
+- {
+- ecif.rvalue = alloca(cif->rtype->size);
+- }
+- else
+- ecif.rvalue = rvalue;
+-
++ /* Ensure that we have a valid struct return value */
++ ecif.rvalue = rvalue;
++ if (cif->rtype->type == FFI_TYPE_STRUCT) {
++ if (cif->rtype->size <= 8)
++ ecif.rvalue = smst_buffer;
++ else if (!rvalue)
++ ecif.rvalue = alloca(cif->rtype->size);
++ }
+
+ switch (cif->abi)
+ {
+@@ -968,6 +957,10 @@
+ FFI_ASSERT (0);
+ break;
+ }
++
++ /* Check for a bounce-buffered return value */
++ if (rvalue && ecif.rvalue == smst_buffer)
++ memcpy(rvalue, smst_buffer, cif->rtype->size);
+ }
+
+
+--- a/src/libffi/src/powerpc/sysv.S
++++ b/src/libffi/src/powerpc/sysv.S
+@@ -142,19 +142,14 @@
+ #endif
+
+ L(small_struct_return_value):
+- extrwi %r6,%r31,2,19 /* number of bytes padding = shift/8 */
+- mtcrf 0x02,%r31 /* copy flags to cr[24:27] (cr6) */
+- extrwi %r5,%r31,5,19 /* r5 <- number of bits of padding */
+- subfic %r6,%r6,4 /* r6 <- number of useful bytes in r3 */
+- bf- 25,L(done_return_value) /* struct in r3 ? if not, done. */
+-/* smst_one_register: */
+- slw %r3,%r3,%r5 /* Left-justify value in r3 */
+- mtxer %r6 /* move byte count to XER ... */
+- stswx %r3,0,%r30 /* ... and store that many bytes */
+- bf+ 26,L(done_return_value) /* struct in r3:r4 ? */
+- add %r6,%r6,%r30 /* adjust pointer */
+- stswi %r4,%r6,4 /* store last four bytes */
+- b L(done_return_value)
++ /*
++ * The C code always allocates a properly-aligned 8-byte bounce
++ * buffer to make this assembly code very simple. Just write out
++ * r3 and r4 to the buffer to allow the C code to handle the rest.
++ */
++ stw %r3, 0(%r30)
++ stw %r4, 4(%r30)
++ b L(done_return_value)
+
+ .LFE1:
+ END(ffi_call_SYSV)
diff --git a/debian/patches/libffi-ro-eh_frame_sect.diff b/debian/patches/libffi-ro-eh_frame_sect.diff
new file mode 100644
index 0000000..d606685
--- /dev/null
+++ b/debian/patches/libffi-ro-eh_frame_sect.diff
@@ -0,0 +1,13 @@
+# DP: PR libffi/47248, force a read only eh frame section.
+
+--- a/src/libffi/configure.ac
++++ b/src/libffi/configure.ac
+@@ -347,6 +347,8 @@
+ libffi_cv_ro_eh_frame=yes
+ fi
+ fi
++ # FIXME: see PR libffi/47248
++ libffi_cv_ro_eh_frame=yes
+ rm -f conftest.*
+ ])
+ if test "x$libffi_cv_ro_eh_frame" = xyes; then
diff --git a/debian/patches/libgomp-kfreebsd-testsuite.diff b/debian/patches/libgomp-kfreebsd-testsuite.diff
new file mode 100644
index 0000000..3300b8c
--- /dev/null
+++ b/debian/patches/libgomp-kfreebsd-testsuite.diff
@@ -0,0 +1,15 @@
+# DP: Disable lock-2.c test on kfreebsd-*
+
+--- a/src/libgomp/testsuite/libgomp.c/lock-2.c
++++ b/src/libgomp/testsuite/libgomp.c/lock-2.c
+@@ -4,6 +4,9 @@
+ int
+ main (void)
+ {
++#ifdef __FreeBSD_kernel__
++ return 1;
++#endif
+ int l = 0;
+ omp_nest_lock_t lock;
+ omp_init_nest_lock (&lock);
+
diff --git a/debian/patches/libgomp-omp_h-multilib.diff b/debian/patches/libgomp-omp_h-multilib.diff
new file mode 100644
index 0000000..cebac43
--- /dev/null
+++ b/debian/patches/libgomp-omp_h-multilib.diff
@@ -0,0 +1,19 @@
+# DP: Fix up omp.h for multilibs.
+
+2008-06-09 Jakub Jelinek <jakub@redhat.com>
+
+ * omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs.
+
+--- a/src/libgomp/omp.h.in
++++ b/src/libgomp/omp.h.in
+@@ -39,8 +39,8 @@
+
+ typedef struct
+ {
+- unsigned char _x[@OMP_NEST_LOCK_SIZE@]
+- __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@)));
++ unsigned char _x[8 + sizeof (void *)]
++ __attribute__((__aligned__(sizeof (void *))));
+ } omp_nest_lock_t;
+ #endif
+
diff --git a/debian/patches/libjava-armel-unwind.diff b/debian/patches/libjava-armel-unwind.diff
new file mode 100644
index 0000000..12c78b3
--- /dev/null
+++ b/debian/patches/libjava-armel-unwind.diff
@@ -0,0 +1,19 @@
+# DP: On armel, apply kludge to fix unwinder infinitely looping 'til it runs out
+# DP: of memory (http://gcc.gnu.org/ml/java/2008-06/msg00010.html).
+
+---
+ libjava/stacktrace.cc | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+--- a/src/libjava/stacktrace.cc
++++ b/src/libjava/stacktrace.cc
+@@ -115,6 +115,9 @@ _Jv_StackTrace::UnwindTraceFn (struct _Unwind_Context *context, void *state_ptr)
+ // Check if the trace buffer needs to be extended.
+ if (pos == state->length)
+ {
++ // http://gcc.gnu.org/ml/java/2008-06/msg00010.html
++ return _URC_END_OF_STACK;
++
+ int newLength = state->length * 2;
+ void *newFrames = _Jv_AllocBytes (newLength * sizeof(_Jv_StackFrame));
+ memcpy (newFrames, state->frames, state->length * sizeof(_Jv_StackFrame));
diff --git a/debian/patches/libjava-disable-plugin.diff b/debian/patches/libjava-disable-plugin.diff
new file mode 100644
index 0000000..7dbcaa6
--- /dev/null
+++ b/debian/patches/libjava-disable-plugin.diff
@@ -0,0 +1,13 @@
+# DP: Don't build the gcjwebplugin, even when configured with --enable-plugin
+
+--- a/src/libjava/configure.ac
++++ b/src/libjava/configure.ac
+@@ -65,6 +65,8 @@
+ esac],
+ [browser_plugin_enabled=no]
+ )
++# FIXME: don't build the plugin, this option collides with GCC plugin support
++plugin_enabled=no
+
+ AC_ARG_ENABLE(gconf-peer,
+ AS_HELP_STRING([--enable-gconf-peer],
diff --git a/debian/patches/libjava-disable-static.diff b/debian/patches/libjava-disable-static.diff
new file mode 100644
index 0000000..325cb87
--- /dev/null
+++ b/debian/patches/libjava-disable-static.diff
@@ -0,0 +1,26 @@
+# DP: Disable building the static libjava.
+
+---
+ Makefile.in | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -54431,7 +54431,7 @@
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+- --target=${target_alias} $${srcdiroption} \
++ --target=${target_alias} --disable-static $${srcdiroption} \
+ || exit 1
+ @endif target-libjava
+
+@@ -55345,7 +55345,7 @@
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+- --target=${target_alias} $${srcdiroption} \
++ --target=${target_alias} --disable-static $${srcdiroption} \
+ || exit 1
+ @endif target-boehm-gc
+
diff --git a/debian/patches/libjava-fixed-symlinks.diff b/debian/patches/libjava-fixed-symlinks.diff
new file mode 100644
index 0000000..f463729
--- /dev/null
+++ b/debian/patches/libjava-fixed-symlinks.diff
@@ -0,0 +1,24 @@
+# DP: Remove unneed '..' elements from symlinks in JAVA_HOME
+
+--- a/src/libjava/Makefile.am
++++ b/src/libjava/Makefile.am
+@@ -831,7 +831,7 @@
+ $(mkinstalldirs) $(DESTDIR)$(SDK_INCLUDE_DIR)/$(OS)
+ relative() { \
+ $(PERL) -e 'use File::Spec; \
+- print File::Spec->abs2rel($$ARGV[0], $$ARGV[1])' $$1 $$2; \
++ print File::Spec->abs2rel($$ARGV[0], $$ARGV[1])' $$1 $$2 | sed -r 's,(bin|lib)[^/]*/\.\./,,'; \
+ }; \
+ RELATIVE=$$(relative $(DESTDIR)$(bindir) $(DESTDIR)$(SDK_BIN_DIR)); \
+ ln -sf $$RELATIVE/`echo gij | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
+--- a/src/libjava/Makefile.in
++++ b/src/libjava/Makefile.in
+@@ -12460,7 +12460,7 @@
+ @CREATE_JAVA_HOME_TRUE@ $(mkinstalldirs) $(DESTDIR)$(SDK_INCLUDE_DIR)/$(OS)
+ @CREATE_JAVA_HOME_TRUE@ relative() { \
+ @CREATE_JAVA_HOME_TRUE@ $(PERL) -e 'use File::Spec; \
+-@CREATE_JAVA_HOME_TRUE@ print File::Spec->abs2rel($$ARGV[0], $$ARGV[1])' $$1 $$2; \
++@CREATE_JAVA_HOME_TRUE@ print File::Spec->abs2rel($$ARGV[0], $$ARGV[1])' $$1 $$2 | sed -r 's,(bin|lib)[^/]*/\.\./,,'; \
+ @CREATE_JAVA_HOME_TRUE@ }; \
+ @CREATE_JAVA_HOME_TRUE@ RELATIVE=$$(relative $(DESTDIR)$(bindir) $(DESTDIR)$(SDK_BIN_DIR)); \
+ @CREATE_JAVA_HOME_TRUE@ ln -sf $$RELATIVE/`echo gij | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
diff --git a/debian/patches/libjava-jnipath.diff b/debian/patches/libjava-jnipath.diff
new file mode 100644
index 0000000..96018cf
--- /dev/null
+++ b/debian/patches/libjava-jnipath.diff
@@ -0,0 +1,121 @@
+# DP: - Add /usr/lib/jni and /usr/lib/<multiarch>/jni to java.library.path.
+# DP: - When running the i386 binaries on amd64, look in
+# DP: - /usr/lib32/gcj-x.y and /usr/lib32/jni instead.
+
+--- a/src/libjava/configure.ac
++++ b/src/libjava/configure.ac
+@@ -1488,6 +1488,9 @@
+
+ AC_C_BIGENDIAN
+
++MULTIARCH_DIR=$(dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null || true)
++AC_SUBST(MULTIARCH_DIR)
++
+ ZLIBS=
+ SYS_ZLIBS=
+ ZINCS=
+--- a/src/libjava/Makefile.am
++++ a/src/libjava/Makefile.am
+@@ -324,6 +324,7 @@
+ $(WARNINGS) \
+ -D_GNU_SOURCE \
+ -DPREFIX="\"$(prefix)\"" \
++ -DMULTIARCH_DIR="\"$(MULTIARCH_DIR)\"" \
+ -DTOOLEXECLIBDIR="\"$(toolexeclibdir)\"" \
+ -DJAVA_HOME="\"$(JAVA_HOME_DIR)\"" \
+ -DBOOT_CLASS_PATH="\"$(BOOT_CLASS_PATH_DIR)\"" \
+--- a/src/libjava/Makefile.in
++++ b/src/libjava/Makefile.in
+@@ -744,6 +744,7 @@
+ MAKE = @MAKE@
+ MAKEINFO = @MAKEINFO@
+ MKDIR_P = @MKDIR_P@
++MULTIARCH_DIR = @MULTIARCH_DIR@
+ NM = nm
+ NMEDIT = @NMEDIT@
+ OBJDUMP = @OBJDUMP@
+@@ -1094,6 +1095,7 @@
+ $(WARNINGS) \
+ -D_GNU_SOURCE \
+ -DPREFIX="\"$(prefix)\"" \
++ -DMULTIARCH_DIR="\"$(MULTIARCH_DIR)\"" \
+ -DTOOLEXECLIBDIR="\"$(toolexeclibdir)\"" \
+ -DJAVA_HOME="\"$(JAVA_HOME_DIR)\"" \
+ -DBOOT_CLASS_PATH="\"$(BOOT_CLASS_PATH_DIR)\"" \
+--- a/src/libjava/gnu/classpath/natSystemProperties.cc
++++ b/src/libjava/gnu/classpath/natSystemProperties.cc
+@@ -141,6 +141,44 @@
+ return retval;
+ }
+
++static char*
++AppendJniLibdir (char *path, struct utsname *u)
++{
++ char* retval;
++ const char* jnilibdir = "/usr/lib/jni";
++#ifdef MULTIARCH_DIR
++ const char* jnilibdir2 = "/usr/lib/" MULTIARCH_DIR "/jni";
++ jsize len2 = strlen (jnilibdir2) + 2;
++#else
++ jsize len2 = 0;
++#endif
++
++#if defined(__linux__) && defined (__i386__)
++ if (! strcmp ("x86_64", u->machine))
++ jnilibdir = "/usr/lib32/jni";
++#endif
++
++ if (path)
++ {
++ jsize total = strlen (path)
++ + (sizeof (PATH_SEPARATOR) - 1) + strlen (jnilibdir) +len2 + 1;
++ retval = (char*) _Jv_Malloc (total);
++ strcpy (retval, path);
++ strcat (retval, PATH_SEPARATOR);
++ strcat (retval, jnilibdir);
++ }
++ else
++ {
++ retval = (char*) _Jv_Malloc (strlen (jnilibdir) + len2 + 1);
++ strcpy (retval, jnilibdir);
++ }
++#ifdef MULTIARCH_DIR
++ strcat (retval, PATH_SEPARATOR);
++ strcat (retval, jnilibdir2);
++#endif
++ return retval;
++}
++
+ void
+ gnu::classpath::SystemProperties::insertSystemProperties (::java::util::Properties *newprops)
+ {
+@@ -373,8 +411,13 @@
+ // Prepend GCJ_VERSIONED_LIBDIR to the module load path so that
+ // libgcj will find its own JNI libraries, like libgtkpeer.so.
+ char* val = PrependVersionedLibdir (path);
+- _Jv_SetDLLSearchPath (val);
++
++ // Append jnilibdir
++ char* val2 = AppendJniLibdir (val, &u);
++
++ _Jv_SetDLLSearchPath (val2);
+ _Jv_Free (val);
++ _Jv_Free (val2);
+ }
+ else
+ {
+@@ -382,9 +425,12 @@
+ #ifdef USE_LTDL
+ char *libpath = getenv (LTDL_SHLIBPATH_VAR);
+ char* val = _Jv_PrependVersionedLibdir (libpath);
+- SET ("java.library.path", val);
+- _Jv_SetDLLSearchPath (val);
++ // Append jnilibdir
++ char* val2 = AppendJniLibdir (val, &u);
++ SET ("java.library.path", val2);
++ _Jv_SetDLLSearchPath (val2);
+ _Jv_Free (val);
++ _Jv_Free (val2);
+ #else
+ SET ("java.library.path", "");
+ #endif
diff --git a/debian/patches/libjava-multiarch.diff b/debian/patches/libjava-multiarch.diff
new file mode 100644
index 0000000..9719e00
--- /dev/null
+++ b/debian/patches/libjava-multiarch.diff
@@ -0,0 +1,72 @@
+# DP: Install libjava libraries to multiarch location
+
+--- a/src/libjava/configure.ac
++++ b/src/libjava/configure.ac
+@@ -1592,6 +1592,10 @@
+ ../lib*) toolexeclibdir='$(subst /lib/../lib,/lib,'$toolexecmainlibdir/$multi_os_directory')' ;;
+ *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
+ esac
++ multiarch=`$CC -print-multiarch`
++ if test -n "$multiarch"; then
++ toolexeclibdir=$toolexecmainlibdir/$multiarch
++ fi
+ ;;
+ esac
+ AC_SUBST(toolexecdir)
+@@ -1618,6 +1622,10 @@
+ dbexecdir='$(libdir)/'$multi_os_directory/$gcjsubdir
+ ;;
+ esac
++multiarch=`$CC -print-multiarch`
++if test -n "$multiarch"; then
++ dbexecdir='$(libdir)/'$multiarch/$gcjsubdir
++fi
+ AC_SUBST(dbexecdir)
+ AC_SUBST(gcjsubdir)
+
+--- a/src/libjava/Makefile.am
++++ b/src/libjava/Makefile.am
+@@ -372,7 +372,7 @@
+ -DGCJ_VERSIONED_LIBDIR="\"$(dbexecdir)\"" \
+ -DPATH_SEPARATOR="\"$(CLASSPATH_SEPARATOR)\"" \
+ -DECJ_JAR_FILE="\"$(ECJ_JAR)\"" \
+- -DLIBGCJ_DEFAULT_DATABASE="\"$(dbexecdir)/$(db_name)\"" \
++ -DLIBGCJ_DEFAULT_DATABASE="\"/var/lib/$(MULTIARCH_DIR)/gcj-4.6/$(db_name)\"" \
+ -DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\""
+
+ AM_GCJFLAGS = \
+--- a/src/libjava/Makefile.in
++++ b/src/libjava/Makefile.in
+@@ -1019,7 +1019,7 @@
+ -DGCJ_VERSIONED_LIBDIR="\"$(dbexecdir)\"" \
+ -DPATH_SEPARATOR="\"$(CLASSPATH_SEPARATOR)\"" \
+ -DECJ_JAR_FILE="\"$(ECJ_JAR)\"" \
+- -DLIBGCJ_DEFAULT_DATABASE="\"$(dbexecdir)/$(db_name)\"" \
++ -DLIBGCJ_DEFAULT_DATABASE="\"/var/lib/$(MULTIARCH_DIR)/gcj-4.6/$(db_name)\"" \
+ -DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\""
+
+ AM_GCJFLAGS = \
+--- a/src/libjava/classpath/m4/acinclude.m4
++++ b/src/libjava/classpath/m4/acinclude.m4
+@@ -252,6 +252,10 @@
+ .) toolexeclibdir=${libdir} ;; # Avoid trailing /.
+ *) toolexeclibdir=${libdir}/${multi_os_directory} ;;
+ esac
++ multiarch=`$CC -print-multiarch`
++ if test -n "$multiarch"; then
++ toolexeclibdir=${libdir}/${multiarch}
++ fi
+ AC_SUBST(toolexeclibdir)
+ ])
+
+--- a/src/libjava/classpath/configure.ac
++++ b/src/libjava/classpath/configure.ac
+@@ -16,6 +16,8 @@
+
+ AC_CANONICAL_TARGET
+
++dnl dummy change to run autoconf
++
+ dnl GCJ LOCAL
+ AC_ARG_ENABLE(java-maintainer-mode,
+ AS_HELP_STRING([--enable-java-maintainer-mode],
diff --git a/debian/patches/libjava-nobiarch-check.diff b/debian/patches/libjava-nobiarch-check.diff
new file mode 100644
index 0000000..b7a5199
--- /dev/null
+++ b/debian/patches/libjava-nobiarch-check.diff
@@ -0,0 +1,25 @@
+# DP: For biarch builds, disable the testsuite for the non-default architecture
+# DP: for runtime libraries, which are not built by default (libjava).
+
+---
+ libjava/testsuite/Makefile.in | 4 +++-
+ 2 files changed, 25 insertions(+), 1 deletions(-)
+
+--- a/src/libjava/testsuite/Makefile.in
++++ b/src/libjava/testsuite/Makefile.in
+@@ -381,12 +381,14 @@
+
+
+ check-DEJAGNU: site.exp
++ runtestflags="`echo '$(RUNTESTFLAGS)' | sed 's/,-m[36][24]//;s/,-mabi=n32//;s/,-mabi=64//'`"; \
++ case "$$runtestflags" in *\\{\\}) runtestflags=; esac; \
+ srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
+ EXPECT=$(EXPECT); export EXPECT; \
+ runtest=$(RUNTEST); \
+ if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
+ exit_status=0; l='$(DEJATOOL)'; for tool in $$l; do \
+- if $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \
++ if $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $$runtestflags; \
+ then :; else exit_status=1; fi; \
+ done; \
+ else echo "WARNING: could not find \`runtest'" 1>&2; :;\
diff --git a/debian/patches/libjava-rpath.diff b/debian/patches/libjava-rpath.diff
new file mode 100644
index 0000000..b664e9c
--- /dev/null
+++ b/debian/patches/libjava-rpath.diff
@@ -0,0 +1,29 @@
+# DP: - Link ecjx with -rpath $(dbexecdir)
+
+---
+ libjava/Makefile.am | 2 +-
+ libjava/Makefile.in | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/src/libjava/Makefile.am
++++ b/src/libjava/Makefile.am
+@@ -888,7 +888,7 @@ else !ENABLE_SHARED
+ ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR) -fbootclasspath=$(BOOTCLASSPATH)
+ endif !ENABLE_SHARED
+
+-ecjx_LDADD = -L$(here)/.libs $(extra_ldflags)
++ecjx_LDADD = -L$(here)/.libs $(extra_ldflags) -rpath $(dbexecdir)
+ ecjx_DEPENDENCIES = libgcj.la libgcj.spec
+ if USE_LIBGCJ_BC
+ ecjx_DEPENDENCIES += libgcj_bc.la
+--- a/src/libjava/Makefile.in
++++ b/src/libjava/Makefile.in
+@@ -8360,7 +8360,7 @@ ECJX_BASE_FLAGS = -findirect-dispatch \
+ @NATIVE_FALSE@ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR)
+ @NATIVE_FALSE@ecjx_LDADD =
+ @NATIVE_TRUE@ecjx_LDADD = -L$(here)/.libs $(extra_ldflags) \
+-@NATIVE_TRUE@ $(am__append_21)
++@NATIVE_TRUE@ $(am__append_21) -rpath $(dbexecdir)
+ @NATIVE_FALSE@ecjx_DEPENDENCIES =
+ @NATIVE_TRUE@ecjx_DEPENDENCIES = libgcj.la libgcj.spec \
+ @NATIVE_TRUE@ $(am__append_20)
diff --git a/debian/patches/libjava-sjlj.diff b/debian/patches/libjava-sjlj.diff
new file mode 100644
index 0000000..31d4c79
--- /dev/null
+++ b/debian/patches/libjava-sjlj.diff
@@ -0,0 +1,38 @@
+# DP: Don't try to use _Unwind_Backtrace on SJLJ targets.
+# DP: See bug #387875, #388505, GCC PR 29206.
+
+---
+ libjava/sysdep/generic/backtrace.h | 17 +++++++++++++++++
+ 1 files changed, 17 insertions(+), 0 deletions(-)
+
+--- a/src/libjava/sysdep/generic/backtrace.h
++++ b/src/libjava/sysdep/generic/backtrace.h
+@@ -13,6 +13,20 @@
+
+ #include <java-stack.h>
+
++#ifdef SJLJ_EXCEPTIONS
++
++#undef _Unwind_GetIPInfo
++#define _Unwind_GetIPInfo(ctx,ip_before_insn) \
++ (abort (), (void) (ctx), *ip_before_insn = 1, 0)
++
++#undef _Unwind_GetRegionStart
++#define _Unwind_GetRegionStart(ctx) \
++ (abort (), (void) (ctx), 0)
++
++#undef _Unwind_Backtrace
++#define _Unwind_Backtrace(trace_fn,state_ptr) \
++ (fallback_backtrace (trace_fn, state_ptr))
++
+ /* Unwind through the call stack calling TRACE_FN with STATE for every stack
+ frame. Returns the reason why the unwinding was stopped. */
+ _Unwind_Reason_Code
+@@ -20,4 +34,7 @@
+ {
+ return _URC_NO_REASON;
+ }
++
++#endif /* SJLJ_EXCEPTIONS */
++
+ #endif
diff --git a/debian/patches/libjava-stacktrace.diff b/debian/patches/libjava-stacktrace.diff
new file mode 100644
index 0000000..b1e6ab9
--- /dev/null
+++ b/debian/patches/libjava-stacktrace.diff
@@ -0,0 +1,50 @@
+# DP: libgcj: Lookup source file name and line number in separated
+# DP: debug files found in /usr/lib/debug
+
+---
+ libjava/stacktrace.cc | 27 +++++++++++++++++++++++++++
+ 1 files changed, 27 insertions(+), 0 deletions(-)
+
+--- a/src/libjava/stacktrace.cc
++++ b/src/libjava/stacktrace.cc
+@@ -17,6 +17,11 @@
+ #include <java-stack.h>
+
+ #include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#ifdef HAVE_UNISTD_H
++#include <unistd.h>
++#endif
+
+ #include <java/lang/Boolean.h>
+ #include <java/lang/Class.h>
+@@ -260,6 +265,28 @@
+ finder->lookup (binaryName, (jlong) offset);
+ *sourceFileName = finder->getSourceFile();
+ *lineNum = finder->getLineNum();
++ if (*lineNum == -1 && info.file_name[0] == '/')
++ {
++ const char *debugPrefix = "/usr/lib/debug";
++ char *debugPath = (char *) malloc (strlen(debugPrefix)
++ + strlen(info.file_name)
++ + 2);
++
++ if (debugPath)
++ {
++ strcpy (debugPath, debugPrefix);
++ strcat (debugPath, info.file_name);
++ //printf ("%s: 0x%x\n", debugPath, offset);
++ if (!access (debugPath, R_OK))
++ {
++ binaryName = JvNewStringUTF (debugPath);
++ finder->lookup (binaryName, (jlong) offset);
++ *sourceFileName = finder->getSourceFile();
++ *lineNum = finder->getLineNum();
++ }
++ free (debugPath);
++ }
++ }
+ if (*lineNum == -1 && NameFinder::showRaw())
+ {
+ gnu::gcj::runtime::StringBuffer *t =
diff --git a/debian/patches/libstdc++-arm-wno-abi.diff b/debian/patches/libstdc++-arm-wno-abi.diff
new file mode 100644
index 0000000..a67bf85
--- /dev/null
+++ b/debian/patches/libstdc++-arm-wno-abi.diff
@@ -0,0 +1,16 @@
+# DP: Temporary work around:
+# DP: On arm-linux-gnueabi run the libstdc++v3 testsuite with -Wno-abi
+
+--- a/src/libstdc++-v3/testsuite/lib/libstdc++.exp
++++ b/src/libstdc++-v3/testsuite/lib/libstdc++.exp
+@@ -289,6 +289,10 @@
+ }
+ append cxxflags " "
+ append cxxflags [getenv CXXFLAGS]
++ # ARM C++ emits an ABI warning for varargs.
++ if [istarget "arm*"] {
++ append cxxflags " -Wno-abi"
++ }
+ v3track cxxflags 2
+
+ # Always use MO files built by this test harness.
diff --git a/debian/patches/libstdc++-doclink.diff b/debian/patches/libstdc++-doclink.diff
new file mode 100644
index 0000000..8d532c8
--- /dev/null
+++ b/debian/patches/libstdc++-doclink.diff
@@ -0,0 +1,57 @@
+# DP: adjust hrefs to point to the local documentation
+
+---
+ libstdc++-v3/doc/doxygen/mainpage.html | 10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+--- a/src/libstdc++-v3/doc/doxygen/mainpage.html
++++ b/src/libstdc++-v3/doc/doxygen/mainpage.html
+@@ -29,8 +29,8 @@
+ <p>There are two types of documentation for libstdc++. One is the
+ distribution documentation, which can be read online
+ <a href="http://gcc.gnu.org/onlinedocs/libstdc++/index.html">here</a>
+- or offline from the file doc/html/index.html in the library source
+- directory.
++ or offline in the documentation directory
++ <a href="manual/spine.html">here</a>.
+ </p>
+
+ <p>The other type is the source documentation, of which this is the first page.
+@@ -81,9 +81,9 @@
+ This style guide can also be viewed on the <a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01apas04.html">web</a>.
+
+ <h2>License, Copyright, and Other Lawyerly Verbosity</h2>
+-<p>The libstdc++ documentation is released under
+- <a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch01s02.html">
+- these terms</a>.
++<p>The libstdc++ documentation is released under these terms
++ (<a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/license.html">read online</a>, or
++ <a href="manual/license.html">read offline</a>).
+ </p>
+ <p>Part of the generated documentation involved comments and notes from
+ SGI, who says we gotta say this:
+--- a/src/libstdc++-v3/doc/html/api.html
++++ b/src/libstdc++-v3/doc/html/api.html
+@@ -19,6 +19,8 @@
+ member functions for the library classes, finding out what is in a
+ particular include file, looking at inheritance diagrams, etc.
+ </p><p>
++<a class="ulink" href="index.html"The API documentation, rendered into HTML, can be viewed offline.</a>
++</p><p>
+ The API documentation, rendered into HTML, can be viewed online:
+ </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html" target="">for the 3.4 release
+--- a/src/libstdc++-v3/doc/xml/api.xml
++++ b/src/libstdc++-v3/doc/xml/api.xml
+@@ -36,6 +36,11 @@
+ particular include file, looking at inheritance diagrams, etc.
+ </para>
+
++ <para>
++ <ulink url="index.html">The source-level documentation for this release can be viewed offline.
++ </ulink>
++</para>
++
+ <para>
+ The API documentation, rendered into HTML, can be viewed online:
+ </para>
diff --git a/debian/patches/libstdc++-man-3cxx.diff b/debian/patches/libstdc++-man-3cxx.diff
new file mode 100644
index 0000000..56ba16e
--- /dev/null
+++ b/debian/patches/libstdc++-man-3cxx.diff
@@ -0,0 +1,61 @@
+# DP: Install libstdc++ man pages with suffix .3cxx instead of .3
+
+--- a/src/libstdc++-v3/doc/doxygen/user.cfg.in
++++ b/src/libstdc++-v3/doc/doxygen/user.cfg.in
+@@ -1388,7 +1388,7 @@
+ # The MAN_EXTENSION tag determines the extension that is added to
+ # the generated man pages (default is the subroutine's section .3)
+
+-MAN_EXTENSION = .3
++MAN_EXTENSION = .3cxx
+
+ # If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+ # then it will generate one additional man file for each entity
+--- a/src/libstdc++-v3/scripts/run_doxygen
++++ b/src/libstdc++-v3/scripts/run_doxygen
+@@ -235,6 +235,7 @@
+ if $do_man; then
+ echo ::
+ echo :: Fixing up the man pages...
++mv $outdir/man/man3cxx/* $outdir/man/man3/
+ cd $outdir/man/man3
+
+ # File names with embedded spaces (EVIL!) need to be....? renamed or removed?
+@@ -256,7 +257,7 @@
+ # and I'm off getting coffee then anyhow, so I didn't care enough to make
+ # this super-fast.
+ g++ ${srcdir}/doc/doxygen/stdheader.cc -o ./stdheader
+-problematic=`egrep -l '#include <.*_.*>' [a-z]*.3`
++problematic=`egrep -l '#include <.*_.*>' [a-z]*.3 [a-z]*.3cxx`
+ for f in $problematic; do
+ # this is also slow, but safe and easy to debug
+ oldh=`sed -n '/fC#include </s/.*<\(.*\)>.*/\1/p' $f`
+@@ -269,7 +270,7 @@
+ # Some of the pages for generated modules have text that confuses certain
+ # implementations of man(1), e.g., Linux's. We need to have another top-level
+ # *roff tag to /stop/ the .SH NAME entry.
+-problematic=`egrep --files-without-match '^\.SH SYNOPSIS' [A-Z]*.3`
++problematic=`egrep --files-without-match '^\.SH SYNOPSIS' [A-Z]*.3 [A-Z]*.3cxx`
+ #problematic='Containers.3 Sequences.3 Assoc_containers.3 Iterator_types.3'
+
+ for f in $problematic; do
+@@ -283,7 +284,7 @@
+ done
+
+ # Also, break this (generated) line up. It's ugly as sin.
+-problematic=`grep -l '[^^]Definition at line' *.3`
++problematic=`grep -l '[^^]Definition at line' *.3 *.3cxx`
+ for f in $problematic; do
+ sed 's/Definition at line/\
+ .PP\
+@@ -388,8 +389,8 @@
+ istringstream ostringstream stringstream filebuf ifstream \
+ ofstream fstream string;
+ do
+- echo ".so man3/std::basic_${f}.3" > std::${f}.3
+- echo ".so man3/std::basic_${f}.3" > std::w${f}.3
++ echo ".so man3/std::basic_${f}.3cxx" > std::${f}.3cxx
++ echo ".so man3/std::basic_${f}.3cxx" > std::w${f}.3cxx
+ done
+
+ echo ::
diff --git a/debian/patches/libstdc++-no-testsuite.diff b/debian/patches/libstdc++-no-testsuite.diff
new file mode 100644
index 0000000..572a03b
--- /dev/null
+++ b/debian/patches/libstdc++-no-testsuite.diff
@@ -0,0 +1,13 @@
+## DP: Don't run the libstdc++ testsuite on arm and ia64 (timeouts on the buildds)
+# DP: Don't run the libstdc++ testsuite on hppa and mipsel (timeouts on the buildds)
+
+--- a/src/libstdc++-v3/testsuite/Makefile.in~ 2010-02-23 02:43:51.522335339 +0100
++++ b/src/libstdc++-v3/testsuite/Makefile.in 2010-02-23 08:34:41.691086441 +0100
+@@ -560,6 +560,7 @@
+
+ # Run the testsuite in normal mode.
+ check-DEJAGNU $(check_DEJAGNU_normal_targets): check-DEJAGNU%: site.exp
++ case "$(target)" in arm*|hppa*|mipsel*) exit 0;; esac; \
+ AR="$(AR)"; export AR; \
+ RANLIB="$(RANLIB)"; export RANLIB; \
+ if [ -z "$*$(filter-out --target_board=%, $(RUNTESTFLAGS))" ] \
diff --git a/debian/patches/libstdc++-nothumb-check.diff b/debian/patches/libstdc++-nothumb-check.diff
new file mode 100644
index 0000000..6c665a2
--- /dev/null
+++ b/debian/patches/libstdc++-nothumb-check.diff
@@ -0,0 +1,38 @@
+# DP: Don't run the libstdc++-v3 testsuite in thumb mode on armel
+
+Index: testsuite/Makefile.in
+===================================================================
+--- a/src/libstdc++-v3/testsuite/Makefile.in (revision 156820)
++++ b/src/libstdc++-v3/testsuite/Makefile.in (working copy)
+@@ -583,6 +583,8 @@
+ srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
+ EXPECT=$(EXPECT); export EXPECT; \
+ runtest=$(RUNTEST); \
++ runtestflags="`echo '$(RUNTESTFLAGS)' | sed 's/,-marm/-marm/'`"; \
++ case "$$runtestflags" in *\\{\\}) runtestflags=; esac; \
+ if [ -z "$$runtest" ]; then runtest=runtest; fi; \
+ tool=libstdc++; \
+ dirs=; \
+@@ -590,7 +592,7 @@
+ normal0) \
+ if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
+ $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
+- $(RUNTESTFLAGS) abi.exp; \
++ $$runtestflags abi.exp; \
+ else echo "WARNING: could not find \`runtest'" 1>&2; :;\
+ fi; \
+ dirs="`cd $$srcdir; echo [013-9][0-9]_*/* [abep]*/*`";; \
+@@ -605,11 +607,11 @@
+ if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
+ if [ -n "$$dirs" ]; then \
+ $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
+- $(RUNTESTFLAGS) \
++ $$runtestflags \
+ "conformance.exp=`echo $$dirs | sed 's/ /* /g;s/$$/*/'`"; \
+ else \
+ $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
+- $(RUNTESTFLAGS); \
++ $$runtestflags; \
+ fi; \
+ else echo "WARNING: could not find \`runtest'" 1>&2; :;\
+ fi
diff --git a/debian/patches/libstdc++-pic.diff b/debian/patches/libstdc++-pic.diff
new file mode 100644
index 0000000..8d5f3a3
--- /dev/null
+++ b/debian/patches/libstdc++-pic.diff
@@ -0,0 +1,53 @@
+# DP: Build and install libstdc++_pic.a library.
+
+---
+ libstdc++-v3/src/Makefile.am | 4 ++++
+ libstdc++-v3/src/Makefile.in | 8 +++++++-
+ 2 files changed, 11 insertions(+), 1 deletions(-)
+
+--- a/src/libstdc++-v3/src/Makefile.am
++++ b/src/libstdc++-v3/src/Makefile.am
+@@ -422,6 +422,11 @@
+ $(CXX) $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
+
+
++install-exec-local:
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o || touch libstdc++_pic.a
++ $(MKDIR_P) $(DESTDIR)$(toolexeclibdir)
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Added bits to build debug library.
+ if GLIBCXX_BUILD_DEBUG
+ all-local: build_debug
+--- a/src/libstdc++-v3/src/Makefile.in
++++ b/src/libstdc++-v3/src/Makefile.in
+@@ -710,7 +710,7 @@
+
+ install-dvi-am:
+
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-exec-local install-toolexeclibLTLIBRARIES
+
+ install-html: install-html-am
+
+@@ -759,7 +759,7 @@
+ distclean-libtool distclean-tags dvi dvi-am html html-am info \
+ info-am install install-am install-data install-data-am \
+ install-data-local install-dvi install-dvi-am install-exec \
+- install-exec-am install-html install-html-am install-info \
++ install-exec-am install-exec-local install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip \
+ install-toolexeclibLTLIBRARIES installcheck installcheck-am \
+@@ -964,6 +964,11 @@
+ @GLIBCXX_LDBL_COMPAT_TRUE@compatibility-ldbl.o: compatibility-ldbl.cc
+ @GLIBCXX_LDBL_COMPAT_TRUE@ $(CXXCOMPILE) -mlong-double-64 -c $<
+
++install-exec-local:
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o || touch libstdc++_pic.a
++ $(MKDIR_P) $(DESTDIR)$(toolexeclibdir)
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Added bits to build debug library.
+ @GLIBCXX_BUILD_DEBUG_TRUE@all-local: build_debug
+ @GLIBCXX_BUILD_DEBUG_TRUE@install-data-local: install_debug
diff --git a/debian/patches/libstdc++-test-installed.diff b/debian/patches/libstdc++-test-installed.diff
new file mode 100644
index 0000000..b671fce
--- /dev/null
+++ b/debian/patches/libstdc++-test-installed.diff
@@ -0,0 +1,76 @@
+# DP: Add support to run the libstdc++-v3 testsuite using the
+# DP: installed shared libraries.
+
+--- a/src/libstdc++-v3/testsuite/lib/libstdc++.exp
++++ b/src/libstdc++-v3/testsuite/lib/libstdc++.exp
+@@ -38,6 +38,12 @@
+ # the last thing before testing begins. This can be defined in, e.g.,
+ # ~/.dejagnurc or $DEJAGNU.
+
++set test_installed 0
++if [info exists env(TEST_INSTALLED)] {
++ verbose -log "test installed libstdc++-v3"
++ set test_installed 1
++}
++
+ proc load_gcc_lib { filename } {
+ global srcdir
+ load_file $srcdir/../../gcc/testsuite/lib/$filename
+@@ -94,6 +100,7 @@
+ global tool_timeout
+ global DEFAULT_CXXFLAGS
+ global STATIC_LIBCXXFLAGS
++ global test_installed
+
+ # We set LC_ALL and LANG to C so that we get the same error
+ # messages as expected.
+@@ -109,6 +116,9 @@
+
+ set blddir [lookfor_file [get_multilibs] libstdc++-v3]
+ set flags_file "${blddir}/scripts/testsuite_flags"
++ if {$test_installed} {
++ set flags_file "${blddir}/scripts/testsuite_flags.installed"
++ }
+ set shlib_ext [get_shlib_extension]
+ v3track flags_file 2
+
+@@ -140,7 +150,11 @@
+
+ # Locate libgcc.a so we don't need to account for different values of
+ # SHLIB_EXT on different platforms
+- set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
++ if {$test_installed} {
++ set gccdir ""
++ } else {
++ set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
++ }
+ if {$gccdir != ""} {
+ set gccdir [file dirname $gccdir]
+ append ld_library_path_tmp ":${gccdir}"
+@@ -149,7 +163,11 @@
+
+ # Locate libgomp. This is only required for parallel mode.
+ set v3-libgomp 0
+- set libgompdir [lookfor_file $blddir/../libgomp .libs/libgomp.$shlib_ext]
++ if {$test_installed} {
++ set libgompdir ""
++ } else {
++ set libgompdir [lookfor_file $blddir/../libgomp .libs/libgomp.$shlib_ext]
++ }
+ if {$libgompdir != ""} {
+ set v3-libgomp 1
+ set libgompdir [file dirname $libgompdir]
+@@ -160,7 +178,12 @@
+
+ # Locate libstdc++ shared library. (ie libstdc++.so.)
+ set v3-sharedlib 0
+- set sharedlibdir [lookfor_file $blddir src/.libs/libstdc++.$shlib_ext]
++ if {$test_installed} {
++ set sharedlibdir ""
++ set v3-sharedlib 1
++ } else {
++ set sharedlibdir [lookfor_file $blddir src/.libs/libstdc++.$shlib_ext]
++ }
+ if {$sharedlibdir != ""} {
+ if { [string match "*-*-linux*" $target_triplet] && [isnative] } {
+ set v3-sharedlib 1
diff --git a/debian/patches/link-libs.diff b/debian/patches/link-libs.diff
new file mode 100644
index 0000000..6d9899c
--- /dev/null
+++ b/debian/patches/link-libs.diff
@@ -0,0 +1,170 @@
+#DP: Link libraries with -01.
+
+---
+ gcc/config/t-slibgcc-elf-ver | 1 +
+ libffi/Makefile.am | 2 +-
+ libffi/Makefile.in | 2 +-
+ libgfortran/Makefile.am | 2 +-
+ libgfortran/Makefile.in | 2 +-
+ libjava/Makefile.am | 2 +-
+ libjava/Makefile.in | 2 +-
+ libmudflap/Makefile.am | 4 ++--
+ libmudflap/Makefile.in | 4 ++--
+ libobjc/Makefile.in | 2 ++
+ libstdc++-v3/src/Makefile.am | 1 +
+ libstdc++-v3/src/Makefile.in | 1 +
+ 12 files changed, 15 insertions(+), 10 deletions(-)
+
+--- a/src/gcc/config/t-slibgcc-elf-ver.orig 2009-09-10
++++ b/src/gcc/config/t-slibgcc-elf-ver 2009-12-22
+@@ -35,6 +35,7 @@
+ SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
+ -Wl,--soname=$(SHLIB_SONAME) \
+ -Wl,--version-script=$(SHLIB_MAP) \
++ -Wl,-O1 \
+ -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \
+ $(SHLIB_OBJS) $(SHLIB_LC) && \
+ rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
+--- a/src/libffi/Makefile.am.orig 2009-08-23
++++ b/src/libffi/Makefile.am 2009-12-22
+@@ -164,7 +164,7 @@
+
+ LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
+
+-libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS)
++libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -Wl,-O1
+
+ AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
+ AM_CCASFLAGS = $(AM_CPPFLAGS)
+--- a/src/libffi/Makefile.in.orig 2009-12-07
++++ b/src/libffi/Makefile.in 2009-12-22
+@@ -468,7 +468,7 @@
+ nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
+ AM_CFLAGS = -Wall -g -fexceptions
+ LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
+-libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS)
++libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -Wl,-O1
+ AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
+ AM_CCASFLAGS = $(AM_CPPFLAGS)
+ all: fficonfig.h
+--- a/src/libgfortran/Makefile.am.orig 2009-12-01
++++ b/src/libgfortran/Makefile.am 2009-12-22
+@@ -18,7 +18,7 @@
+
+ toolexeclib_LTLIBRARIES = libgfortran.la
+ libgfortran_la_LINK = $(LINK) $(libgfortran_la_LDFLAGS)
+-libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -lm $(extra_ldflags_libgfortran) $(version_arg)
++libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -lm $(extra_ldflags_libgfortran) $(version_arg) -Wl,-O1
+
+ myexeclib_LTLIBRARIES = libgfortranbegin.la
+ myexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)
+--- a/src/libgfortran/Makefile.in.orig 2009-12-07
++++ b/src/libgfortran/Makefile.in 2009-12-22
+@@ -976,7 +976,7 @@
+
+ toolexeclib_LTLIBRARIES = libgfortran.la
+ libgfortran_la_LINK = $(LINK) $(libgfortran_la_LDFLAGS)
+-libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -lm $(extra_ldflags_libgfortran) $(version_arg)
++libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -lm $(extra_ldflags_libgfortran) $(version_arg) -Wl,-O1
+ myexeclib_LTLIBRARIES = libgfortranbegin.la
+ myexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)
+ libgfortranbegin_la_SOURCES = fmain.c
+--- a/src/libjava/Makefile.am.orig 2009-12-21
++++ b/src/libjava/Makefile.am 2009-12-22
+@@ -299,7 +299,7 @@
+ GCJ_FOR_ECJX = @GCJ_FOR_ECJX@
+ GCJ_FOR_ECJX_LINK = $(GCJ_FOR_ECJX) -o $@
+ LIBLINK = $(LIBTOOL) --tag=CXX $(LIBTOOLFLAGS) --mode=link $(CXX) -L$(here) \
+- $(JC1FLAGS) $(LTLDFLAGS) $(extra_ldflags_libjava) $(extra_ldflags) -o $@
++ $(JC1FLAGS) $(LTLDFLAGS) $(extra_ldflags_libjava) $(extra_ldflags) -Wl,-O1 -o $@
+ CXXLINK = $(LIBTOOL) --tag=CXX $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+ $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LTLDFLAGS) -o $@
+
+--- a/src/libjava/Makefile.in.orig 2009-12-21
++++ b/src/libjava/Makefile.in 2009-12-22
+@@ -1073,7 +1073,7 @@
+
+ GCJ_FOR_ECJX_LINK = $(GCJ_FOR_ECJX) -o $@
+ LIBLINK = $(LIBTOOL) --tag=CXX $(LIBTOOLFLAGS) --mode=link $(CXX) -L$(here) \
+- $(JC1FLAGS) $(LTLDFLAGS) $(extra_ldflags_libjava) $(extra_ldflags) -o $@
++ $(JC1FLAGS) $(LTLDFLAGS) $(extra_ldflags_libjava) $(extra_ldflags) -Wl,-O1 -o $@
+
+ CXXLINK = $(LIBTOOL) --tag=CXX $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+ $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LTLDFLAGS) -o $@
+--- a/src/libmudflap/Makefile.am.orig 2009-08-23
++++ b/src/libmudflap/Makefile.am 2009-12-22
+@@ -34,7 +34,7 @@
+ mf-hooks2.c
+ libmudflap_la_LIBADD =
+ libmudflap_la_DEPENDENCIES = $(libmudflap_la_LIBADD)
+-libmudflap_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
++libmudflap_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -Wl,-O1
+
+
+ libmudflapth_la_SOURCES = \
+@@ -46,7 +46,7 @@
+ libmudflapth_la_CFLAGS = -DLIBMUDFLAPTH
+ libmudflapth_la_LIBADD =
+ libmudflapth_la_DEPENDENCIES = $(libmudflapth_la_LIBADD)
+-libmudflapth_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
++libmudflapth_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -Wl,-O1
+
+
+ # XXX hack alert
+--- a/src/libmudflap/Makefile.in.orig 2009-12-07
++++ b/src/libmudflap/Makefile.in 2009-12-22
+@@ -320,7 +320,7 @@
+
+ libmudflap_la_LIBADD =
+ libmudflap_la_DEPENDENCIES = $(libmudflap_la_LIBADD)
+-libmudflap_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
++libmudflap_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -Wl,-O1
+ libmudflapth_la_SOURCES = \
+ mf-runtime.c \
+ mf-heuristics.c \
+@@ -331,7 +331,7 @@
+ libmudflapth_la_CFLAGS = -DLIBMUDFLAPTH
+ libmudflapth_la_LIBADD =
+ libmudflapth_la_DEPENDENCIES = $(libmudflapth_la_LIBADD)
+-libmudflapth_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
++libmudflapth_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -Wl,-O1
+
+ # XXX hack alert
+ # From libffi/Makefile.am
+--- a/src/libobjc/Makefile.in.orig 2009-08-23
++++ b/src/libobjc/Makefile.in 2009-12-22
+@@ -282,12 +282,14 @@
+ libobjc$(libsuffix).la: $(OBJS)
+ $(LIBTOOL_LINK) $(CC) -o $@ $(OBJS) \
+ -rpath $(toolexeclibdir) \
++ -Wl,-O1 \
+ -version-info $(LIBOBJC_VERSION) $(extra_ldflags_libobjc) \
+ $(LTLDFLAGS)
+
+ libobjc_gc$(libsuffix).la: $(OBJS_GC)
+ $(LIBTOOL_LINK) $(CC) -o $@ $(OBJS_GC) $(OBJC_BOEHM_GC_LIBS) \
+ -rpath $(toolexeclibdir) \
++ -Wl,-O1 \
+ -version-info $(LIBOBJC_GC_VERSION) $(extra_ldflags_libobjc) \
+ $(LTLDFLAGS)
+
+--- a/src/libstdc++-v3/src/Makefile.am.orig 2009-12-21
++++ b/src/libstdc++-v3/src/Makefile.am 2009-12-22
+@@ -207,6 +207,7 @@
+ $(top_builddir)/libsupc++/libsupc++convenience.la
+
+ libstdc___la_LDFLAGS = \
++ -Wl,-O1 \
+ -version-info $(libtool_VERSION) ${version_arg} -lm
+
+ libstdc___la_LINK = $(CXXLINK) $(libstdc___la_LDFLAGS)
+--- a/src/libstdc++-v3/src/Makefile.in.orig 2009-12-21
++++ b/src/libstdc++-v3/src/Makefile.in 2009-12-22
+@@ -444,6 +444,7 @@
+ $(top_builddir)/libsupc++/libsupc++convenience.la
+
+ libstdc___la_LDFLAGS = \
++ -Wl,-O1 \
+ -version-info $(libtool_VERSION) ${version_arg} -lm
+
+ libstdc___la_LINK = $(CXXLINK) $(libstdc___la_LDFLAGS)
diff --git a/debian/patches/mips-fix-loongson2f-nop.diff b/debian/patches/mips-fix-loongson2f-nop.diff
new file mode 100644
index 0000000..b73d7c5
--- /dev/null
+++ b/debian/patches/mips-fix-loongson2f-nop.diff
@@ -0,0 +1,13 @@
+# DP: On mips, pass -mfix-loongson2f-nop to as, if -mno-fix-loongson2f-nop
+# DP: is not passed.
+
+--- a/src/gcc/config/mips/mips.h
++++ b/src/gcc/config/mips/mips.h
+@@ -1142,6 +1142,7 @@
+ %{mshared} %{mno-shared} \
+ %{msym32} %{mno-sym32} \
+ %{mtune=*} \
++%{!mno-fix-loongson2f-nop:-mfix-loongson2f-nop} \
+ %(subtarget_asm_spec)"
+
+ /* Extra switches sometimes passed to the linker. */
diff --git a/debian/patches/mips-triarch.diff b/debian/patches/mips-triarch.diff
new file mode 100644
index 0000000..bc60c4d
--- /dev/null
+++ b/debian/patches/mips-triarch.diff
@@ -0,0 +1,44 @@
+# DP: Build a tri-arch compiler on mips-linux-gnu.
+# DP: http://gcc.gnu.org/ml/gcc-patches/2009-03/msg01047.html
+
+2009-06-13 Matthias Klose <doko@debian.org>
+ Arthur Loiret <aloiret@debian.org>
+
+ * config.gcc (mips*-*-linux*): If 'enabled_targets' is 'all', build
+ a tri-arch compiler defaulting to 32-bit (ABI o32). In this case:
+ (tm_file): Add mips/linux64.h.
+ (tmake_file): Add mips/t-linux64.
+ (tm_defines): Add MIPS_ABI_DEFAULT=ABI_32.
+ * config/mips/linux64.h (DRIVER_SELF_SPECS): Use MULTILIB_ABI_DEFAULT
+ instead of hardcoded mabi=n32.
+ * config/mips/t-linux64 (MULTILIB_DIRNAMES): Set to 'n32 . 64' if
+ tm_defines contains MIPS_ABI_DEFAULT ABI_32, to follow the glibc
+ convention.
+ * doc/install.texi: Add mips-linux to the list of targets supporting
+ --enable-targets=all. Document the effect on mips.
+
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -1883,6 +1883,11 @@
+ mips*-*-linux*) # Linux MIPS, either endian.
+ tm_file="dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} mips/linux.h"
+ tmake_file="${tmake_file} mips/t-libgcc-mips16"
++ if test x$enable_targets = xall; then
++ tm_file="${tm_file} mips/linux64.h"
++ tmake_file="${tmake_file} mips/t-linux64"
++ tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_32"
++ fi
+ case ${target} in
+ mipsisa32r2*)
+ tm_defines="${tm_defines} MIPS_ISA_DEFAULT=33"
+--- a/src/gcc/config/mips/linux64.h
++++ b/src/gcc/config/mips/linux64.h
+@@ -26,7 +26,7 @@
+ BASE_DRIVER_SELF_SPECS, \
+ LINUX_DRIVER_SELF_SPECS \
+ " %{!EB:%{!EL:%(endian_spec)}}" \
+- " %{!mabi=*: -mabi=n32}"
++ " %{!mabi=*: -" MULTILIB_ABI_DEFAULT "}"
+
+ #undef LIB_SPEC
+ #define LIB_SPEC "\
diff --git a/debian/patches/mudflap-nocheck.diff b/debian/patches/mudflap-nocheck.diff
new file mode 100644
index 0000000..4e8fe56
--- /dev/null
+++ b/debian/patches/mudflap-nocheck.diff
@@ -0,0 +1,17 @@
+# DP: Disable running the libmudflap testsuite. Getting killed on alpha.
+
+---
+ libmudflap/testsuite/Makefile.in | 2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+--- a/src/libmudflap/testsuite/Makefile.in
++++ b/src/libmudflap/testsuite/Makefile.in
+@@ -246,6 +246,8 @@ CTAGS:
+
+
+ check-DEJAGNU: site.exp
++ @echo target $@ disabled for Debian build.
++check-DEJAGNU-disabled: site.exp
+ srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
+ EXPECT=$(EXPECT); export EXPECT; \
+ runtest=$(RUNTEST); \
diff --git a/debian/patches/mudflap-varargs.diff b/debian/patches/mudflap-varargs.diff
new file mode 100644
index 0000000..ef6386e
--- /dev/null
+++ b/debian/patches/mudflap-varargs.diff
@@ -0,0 +1,21 @@
+# DP: Add mudflap support for varargs
+
+From: Michael Matz <matz@suse.de>
+Subject: Fix pass49-frag (mudflap support for varargs)
+
+ * builtins.c (build_va_arg_indirect_ref): Use
+ build_simple_mem_ref_loc.
+
+Index: builtins.c
+===================================================================
+--- a/src/gcc/builtins.c (revision 171675)
++++ b/src/gcc/builtins.c (working copy)
+@@ -4748,7 +4748,7 @@ std_gimplify_va_arg_expr (tree valist, t
+ tree
+ build_va_arg_indirect_ref (tree addr)
+ {
+- addr = build_fold_indirect_ref_loc (EXPR_LOCATION (addr), addr);
++ addr = build_simple_mem_ref_loc (EXPR_LOCATION (addr), addr);
+
+ if (flag_mudflap) /* Don't instrument va_arg INDIRECT_REF. */
+ mf_mark (addr);
diff --git a/debian/patches/no_fpr_in_libgcc.diff b/debian/patches/no_fpr_in_libgcc.diff
new file mode 100644
index 0000000..f88cdb9
--- /dev/null
+++ b/debian/patches/no_fpr_in_libgcc.diff
@@ -0,0 +1,49 @@
+# DP: It does not really harm by including them since nobody should use them
+# DP: but gas does not wont to assmebly hard float since they are not
+# DP: available on this cpu. Upstream did not respond.
+
+--- a/src/gcc/config/rs6000/crtresfpr.asm
++++ b/src/gcc/config/rs6000/crtresfpr.asm
+@@ -33,6 +33,7 @@
+
+ /* On PowerPC64 Linux, these functions are provided by the linker. */
+ #ifndef __powerpc64__
++#ifndef __NO_FPRS__
+
+ /* Routines for restoring floating point registers, called by the compiler. */
+ /* Called with r11 pointing to the stack header word of the caller of the */
+@@ -79,3 +80,4 @@
+ CFI_ENDPROC
+
+ #endif
++#endif
+--- a/src/gcc/config/rs6000/crtresxfpr.asm
++++ b/src/gcc/config/rs6000/crtresxfpr.asm
+@@ -33,6 +33,7 @@
+
+ /* On PowerPC64 Linux, these functions are provided by the linker. */
+ #ifndef __powerpc64__
++#ifndef __NO_FPRS__
+
+ /* Routines for restoring floating point registers, called by the compiler. */
+ /* Called with r11 pointing to the stack header word of the caller of the */
+@@ -124,3 +125,4 @@
+ CFI_ENDPROC
+
+ #endif
++#endif
+--- a/src/gcc/config/rs6000/crtsavfpr.asm
++++ b/src/gcc/config/rs6000/crtsavfpr.asm
+@@ -33,6 +33,7 @@
+
+ /* On PowerPC64 Linux, these functions are provided by the linker. */
+ #ifndef __powerpc64__
++#ifndef __NO_FPRS__
+
+ /* Routines for saving floating point registers, called by the compiler. */
+ /* Called with r11 pointing to the stack header word of the caller of the */
+@@ -79,3 +80,4 @@
+ CFI_ENDPROC
+
+ #endif
++#endif
diff --git a/debian/patches/note-gnu-stack.diff b/debian/patches/note-gnu-stack.diff
new file mode 100644
index 0000000..4b87f46
--- /dev/null
+++ b/debian/patches/note-gnu-stack.diff
@@ -0,0 +1,170 @@
+# DP: Add .note.GNU-stack sections for gcc's crt files, libffi and boehm-gc
+# DP: Taken from FC.
+
+gcc/
+
+2004-09-20 Jakub Jelinek <jakub@redhat.com>
+
+ * config/rs6000/ppc-asm.h: Add .note.GNU-stack section also
+ on ppc64-linux.
+
+ * config/ia64/lib1funcs.asm: Add .note.GNU-stack section on
+ ia64-linux.
+ * config/ia64/crtbegin.asm: Likewise.
+ * config/ia64/crtend.asm: Likewise.
+ * config/ia64/crti.asm: Likewise.
+ * config/ia64/crtn.asm: Likewise.
+
+2004-05-14 Jakub Jelinek <jakub@redhat.com>
+
+ * config/ia64/linux.h (TARGET_ASM_FILE_END): Define.
+
+boehm-gc/
+
+2005-02-08 Jakub Jelinek <jakub@redhat.com>
+
+ * ia64_save_regs_in_stack.s: Moved to...
+ * ia64_save_regs_in_stack.S: ... this. Add .note.GNU-stack
+ on Linux.
+
+libffi/
+
+2007-05-11 Daniel Jacobowitz <dan@debian.org>
+
+ * src/arm/sysv.S: Fix ARM comment marker.
+
+2005-02-08 Jakub Jelinek <jakub@redhat.com>
+
+ * src/alpha/osf.S: Add .note.GNU-stack on Linux.
+ * src/s390/sysv.S: Likewise.
+ * src/powerpc/linux64.S: Likewise.
+ * src/powerpc/linux64_closure.S: Likewise.
+ * src/powerpc/ppc_closure.S: Likewise.
+ * src/powerpc/sysv.S: Likewise.
+ * src/x86/unix64.S: Likewise.
+ * src/x86/sysv.S: Likewise.
+ * src/sparc/v8.S: Likewise.
+ * src/sparc/v9.S: Likewise.
+ * src/m68k/sysv.S: Likewise.
+ * src/ia64/unix.S: Likewise.
+ * src/arm/sysv.S: Likewise.
+
+---
+ boehm-gc/ia64_save_regs_in_stack.s | 12 ------------
+ gcc/config/ia64/crtbegin.asm | 4 ++++
+ gcc/config/ia64/crtend.asm | 4 ++++
+ gcc/config/ia64/crti.asm | 4 ++++
+ gcc/config/ia64/crtn.asm | 4 ++++
+ gcc/config/ia64/lib1funcs.asm | 4 ++++
+ gcc/config/ia64/linux.h | 2 ++
+ gcc/config/rs6000/ppc-asm.h | 2 +-
+ libffi/src/ia64/unix.S | 4 ++++
+ libffi/src/powerpc/linux64.S | 4 ++++
+ libffi/src/powerpc/linux64_closure.S | 4 ++++
+ 11 files changed, 35 insertions(+), 13 deletions(-)
+
+--- a/src/boehm-gc/ia64_save_regs_in_stack.s
++++ /dev/null
+@@ -1,12 +0,0 @@
+- .text
+- .align 16
+- .global GC_save_regs_in_stack
+- .proc GC_save_regs_in_stack
+-GC_save_regs_in_stack:
+- .body
+- flushrs
+- ;;
+- mov r8=ar.bsp
+- br.ret.sptk.few rp
+- .endp GC_save_regs_in_stack
+-
+--- /dev/null
++++ b/src/boehm-gc/ia64_save_regs_in_stack.S
+@@ -0,0 +1,15 @@
++ .text
++ .align 16
++ .global GC_save_regs_in_stack
++ .proc GC_save_regs_in_stack
++GC_save_regs_in_stack:
++ .body
++ flushrs
++ ;;
++ mov r8=ar.bsp
++ br.ret.sptk.few rp
++ .endp GC_save_regs_in_stack
++
++#ifdef __linux__
++ .section .note.GNU-stack,"",@progbits
++#endif
+--- a/src/gcc/config/ia64/crtbegin.asm
++++ b/src/gcc/config/ia64/crtbegin.asm
+@@ -252,3 +252,7 @@
+ .weak __cxa_finalize
+ #endif
+ .weak _Jv_RegisterClasses
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/gcc/config/ia64/crtend.asm
++++ b/src/gcc/config/ia64/crtend.asm
+@@ -119,3 +119,7 @@
+
+ br.ret.sptk.many rp
+ .endp __do_global_ctors_aux
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/gcc/config/ia64/crti.asm
++++ b/src/gcc/config/ia64/crti.asm
+@@ -51,3 +51,7 @@
+ .body
+
+ # end of crti.asm
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/gcc/config/ia64/crtn.asm
++++ b/src/gcc/config/ia64/crtn.asm
+@@ -41,3 +41,7 @@
+ br.ret.sptk.many b0
+
+ # end of crtn.asm
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/gcc/config/ia64/lib1funcs.asm
++++ b/src/gcc/config/ia64/lib1funcs.asm
+@@ -793,3 +793,7 @@
+ .endp __floattitf
+ #endif
+ #endif
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/gcc/config/ia64/linux.h
++++ b/src/gcc/config/ia64/linux.h
+@@ -29,6 +29,8 @@
+
+ #define TARGET_VERSION fprintf (stderr, " (IA-64) Linux");
+
++#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
++
+ /* This is for -profile to use -lc_p instead of -lc. */
+ #undef CC1_SPEC
+ #define CC1_SPEC "%{profile:-p} %{G*}"
+--- a/src/gcc/config/rs6000/ppc-asm.h
++++ b/src/gcc/config/rs6000/ppc-asm.h
+@@ -352,7 +352,7 @@
+ #endif
+ #endif
+
+-#if defined __linux__ && !defined __powerpc64__
++#if defined __linux__
+ .section .note.GNU-stack
+ .previous
+ #endif
diff --git a/debian/patches/powerpc_remove_many.diff b/debian/patches/powerpc_remove_many.diff
new file mode 100644
index 0000000..388f2d8
--- /dev/null
+++ b/debian/patches/powerpc_remove_many.diff
@@ -0,0 +1,31 @@
+# DP: Subject: [PATCH] remove -many on __SPE__ target
+# DP: this helps to to detect opcodes which are not part of the current
+# DP: CPU because without -many gas won't touch them. This currently could
+# DP: break the kernel build as the 603 on steroids cpus use performance
+# DP: counter opcodes which are not available on the steroid less 603 core.
+
+--- a/src/gcc/config/rs6000/rs6000.h
++++ b/src/gcc/config/rs6000/rs6000.h
+@@ -98,6 +98,12 @@
+ #define ASM_CPU_476_SPEC "-mpower4"
+ #endif
+
++#ifndef __SPE__
++#define ASM_CPU_SPU_MANY_NOT_SPE "-many"
++#else
++#define ASM_CPU_SPU_MANY_NOT_SPE
++#endif
++
+ /* Common ASM definitions used by ASM_SPEC among the various targets for
+ handling -mcpu=xxx switches. There is a parallel list in driver-rs6000.c to
+ provide the default assembler options if the user uses -mcpu=native, so if
+@@ -170,7 +176,8 @@
+ %{mcpu=e500mc64: -me500mc64} \
+ %{maltivec: -maltivec} \
+ %{mvsx: -mvsx %{!maltivec: -maltivec} %{!mcpu*: %(asm_cpu_power7)}} \
+--many"
++" \
++ASM_CPU_SPU_MANY_NOT_SPE
+
+ #define CPP_DEFAULT_SPEC ""
+
diff --git a/debian/patches/pr24619.diff b/debian/patches/pr24619.diff
new file mode 100644
index 0000000..2f20205
--- /dev/null
+++ b/debian/patches/pr24619.diff
@@ -0,0 +1,17 @@
+# DP: Proposed patch for PR mudflap/24619 (instrumentation of dlopen)
+
+--- a/src/libmudflap/mf-hooks2.c
++++ b/src/libmudflap/mf-hooks2.c
+@@ -1674,8 +1674,10 @@
+ size_t n;
+ TRACE ("%s\n", __PRETTY_FUNCTION__);
+ n = strlen (path);
+- MF_VALIDATE_EXTENT (path, CLAMPADD(n, 1), __MF_CHECK_READ, "dlopen path");
+- p = dlopen (path, flags);
++ if (NULL != path) {
++ MF_VALIDATE_EXTENT (path, CLAMPADD(n, 1), __MF_CHECK_READ, "dlopen path");
++ p = dlopen (path, flags);
++ }
+ if (NULL != p) {
+ #ifdef MF_REGISTER_dlopen
+ __mf_register (p, 0, MF_REGISTER_dlopen, "dlopen result");
diff --git a/debian/patches/pr39491.diff b/debian/patches/pr39491.diff
new file mode 100644
index 0000000..4c51820
--- /dev/null
+++ b/debian/patches/pr39491.diff
@@ -0,0 +1,132 @@
+# DP: Proposed patch for PR libstdc++/39491.
+
+2009-04-16 Benjamin Kosnik <bkoz@redhat.com>
+
+ * src/math_stubs_long_double.cc (__signbitl): Add for hppa linux only.
+
+Index: a/src/libstdc++-v3/src/math_stubs_long_double.cc
+===================================================================
+--- a/src/libstdc++-v3/src/math_stubs_long_double.cc (revision 146216)
++++ b/src/libstdc++-v3/src/math_stubs_long_double.cc (working copy)
+@@ -213,4 +221,111 @@
+ return tanh((double) x);
+ }
+ #endif
++
++ // From libmath/signbitl.c
++ // XXX ABI mistakenly exported
++#if defined (__hppa__) && defined (__linux__)
++# include <endian.h>
++# include <float.h>
++
++typedef unsigned int U_int32_t __attribute ((mode (SI)));
++typedef int Int32_t __attribute ((mode (SI)));
++typedef unsigned int U_int64_t __attribute ((mode (DI)));
++typedef int Int64_t __attribute ((mode (DI)));
++
++#if BYTE_ORDER == BIG_ENDIAN
++typedef union
++{
++ long double value;
++ struct
++ {
++ unsigned int sign_exponent:16;
++ unsigned int empty:16;
++ U_int32_t msw;
++ U_int32_t lsw;
++ } parts;
++} ieee_long_double_shape_type;
++#endif
++#if BYTE_ORDER == LITTLE_ENDIAN
++typedef union
++{
++ long double value;
++ struct
++ {
++ U_int32_t lsw;
++ U_int32_t msw;
++ unsigned int sign_exponent:16;
++ unsigned int empty:16;
++ } parts;
++} ieee_long_double_shape_type;
++#endif
++
++/* Get int from the exponent of a long double. */
++#define GET_LDOUBLE_EXP(exp,d) \
++do { \
++ ieee_long_double_shape_type ge_u; \
++ ge_u.value = (d); \
++ (exp) = ge_u.parts.sign_exponent; \
++} while (0)
++
++#if BYTE_ORDER == BIG_ENDIAN
++typedef union
++{
++ long double value;
++ struct
++ {
++ U_int64_t msw;
++ U_int64_t lsw;
++ } parts64;
++ struct
++ {
++ U_int32_t w0, w1, w2, w3;
++ } parts32;
++} ieee_quad_double_shape_type;
++#endif
++
++#if BYTE_ORDER == LITTLE_ENDIAN
++typedef union
++{
++ long double value;
++ struct
++ {
++ U_int64_t lsw;
++ U_int64_t msw;
++ } parts64;
++ struct
++ {
++ U_int32_t w3, w2, w1, w0;
++ } parts32;
++} ieee_quad_double_shape_type;
++#endif
++
++/* Get most significant 64 bit int from a quad long double. */
++#define GET_LDOUBLE_MSW64(msw,d) \
++do { \
++ ieee_quad_double_shape_type qw_u; \
++ qw_u.value = (d); \
++ (msw) = qw_u.parts64.msw; \
++} while (0)
++
++int
++__signbitl (long double x)
++{
++#if LDBL_MANT_DIG == 113
++ Int64_t msw;
++
++ GET_LDOUBLE_MSW64 (msw, x);
++ return msw < 0;
++#else
++ Int32_t e;
++
++ GET_LDOUBLE_EXP (e, x);
++ return e & 0x8000;
++#endif
++}
++#endif
++
++#ifndef _GLIBCXX_HAVE___SIGNBITL
++
++#endif
+ } // extern "C"
+--- a/src/libstdc++-v3/config/abi/pre/gnu.ver~ 2009-04-10 01:23:07.000000000 +0200
++++ b/src/libstdc++-v3/config/abi/pre/gnu.ver 2009-04-21 16:24:24.000000000 +0200
+@@ -635,6 +635,7 @@
+ sqrtf;
+ sqrtl;
+ copysignf;
++ __signbitl;
+
+ # GLIBCXX_ABI compatibility only.
+ # std::string
diff --git a/debian/patches/pr43804.diff b/debian/patches/pr43804.diff
new file mode 100644
index 0000000..8cf514c
--- /dev/null
+++ b/debian/patches/pr43804.diff
@@ -0,0 +1,22 @@
+# DP: Fix for PR target/43804 backported from SVN
+
+2011-04-24 Richard Sandiford <richard.sandiford@linaro.org>
+
+ PR target/43804
+ * config/m68k/constraints.md (T): Allow PIC operands that satisfy
+ LEGITIMATE_PIC_OPERAND_P.
+
+Index: gcc/config/m68k/constraints.md
+===================================================================
+--- a/src/gcc/config/m68k/constraints.md (revision 172919)
++++ b/src/gcc/config/m68k/constraints.md (revision 172920)
+@@ -94,7 +94,8 @@
+ (define_constraint "T"
+ "Used for operands that satisfy 's' when -mpcrel is not in effect."
+ (and (match_code "symbol_ref,label_ref,const")
+- (match_test "!flag_pic")))
++ (match_test "!TARGET_PCREL")
++ (match_test "!flag_pic || LEGITIMATE_PIC_OPERAND_P (op)")))
+
+ (define_memory_constraint "Q"
+ "Means address register indirect addressing mode."
diff --git a/debian/patches/pr45078.diff b/debian/patches/pr45078.diff
new file mode 100644
index 0000000..752494f
--- /dev/null
+++ b/debian/patches/pr45078.diff
@@ -0,0 +1,41 @@
+# DP: Proposed patch for PR plugin/45078
+
+2011-06-24 Matthias Klose <doko@ubuntu.com>
+
+ PR plugin/45078
+ * Makefile.in (PLUGIN_HEADERS): Add config/arm/arm-cores.def.
+ (install-plugin): Install c-family headers into a c-family subdir.
+ * config.gcc: Add vxworks-dummy.h to tm_file for arm, mips, sh and
+ sparc targets.
+
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -4503,6 +4503,7 @@
+ $(EXCEPT_H) tree-ssa-sccvn.h real.h output.h $(IPA_UTILS_H) \
+ $(C_PRAGMA_H) $(CPPLIB_H) $(FUNCTION_H) \
+ cppdefault.h flags.h $(MD5_H) params.def params.h prefix.h tree-inline.h \
++ config/arm/arm-cores.def \
+ $(IPA_PROP_H) $(RTL_H) $(TM_P_H) $(CFGLOOP_H) $(EMIT_RTL_H) version.h
+
+ # generate the 'build fragment' b-header-vars
+@@ -4527,7 +4528,7 @@
+ else continue; \
+ fi; \
+ case $$path in \
+- "$(srcdir)"/config/* | "$(srcdir)"/*.def ) \
++ "$(srcdir)"/config/* | "$(srcdir)"/c-family/* | "$(srcdir)"/*.def ) \
+ base=`echo "$$path" | sed -e "s|$$srcdirstrip/||"`;; \
+ *) base=`basename $$path` ;; \
+ esac; \
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -467,6 +467,9 @@
+ fi
+ tm_file="vxworks-dummy.h ${tm_file}"
+ ;;
++arm*-*-*|mips*-*-*|sh*-*-*|sparc*-*-*)
++ tm_file="vxworks-dummy.h ${tm_file}"
++ ;;
+ esac
+
+ # On a.out targets, we need to use collect2.
diff --git a/debian/patches/pr45979.diff b/debian/patches/pr45979.diff
new file mode 100644
index 0000000..93f28c8
--- /dev/null
+++ b/debian/patches/pr45979.diff
@@ -0,0 +1,11 @@
+--- a/src/gcc/config/host-linux.c
++++ b/src/gcc/config/host-linux.c
+@@ -84,6 +84,8 @@
+ # define TRY_EMPTY_VM_SPACE 0x60000000
+ #elif defined(__mc68000__)
+ # define TRY_EMPTY_VM_SPACE 0x40000000
++#elif defined(__ARM_EABI__)
++# define TRY_EMPTY_VM_SPACE 0x60000000
+ #else
+ # define TRY_EMPTY_VM_SPACE 0
+ #endif
diff --git a/debian/patches/pr47487.diff b/debian/patches/pr47487.diff
new file mode 100644
index 0000000..03b4c5a
--- /dev/null
+++ b/debian/patches/pr47487.diff
@@ -0,0 +1,27 @@
+# DP: Fix PR target/47487 powerpc64 ICE building libgo
+
+
+ PR target/47487
+ * config/rs6000/rs6000.c (rs6000_output_function_epilogue): Support
+ GNU Go in traceback table.
+
+Index: gcc/config/rs6000/rs6000.c
+===================================================================
+--- a/src/gcc/config/rs6000/rs6000.c (revision 171446)
++++ b/src/gcc/config/rs6000/rs6000.c (working copy)
+@@ -22061,10 +22150,11 @@ rs6000_output_function_epilogue (FILE *f
+ use language_string.
+ C is 0. Fortran is 1. Pascal is 2. Ada is 3. C++ is 9.
+ Java is 13. Objective-C is 14. Objective-C++ isn't assigned
+- a number, so for now use 9. LTO isn't assigned a number either,
+- so for now use 0. */
++ a number, so for now use 9. LTO and Go aren't assigned numbers
++ either, so for now use 0. */
+ if (! strcmp (language_string, "GNU C")
+- || ! strcmp (language_string, "GNU GIMPLE"))
++ || ! strcmp (language_string, "GNU GIMPLE")
++ || ! strcmp (language_string, "GNU Go"))
+ i = 0;
+ else if (! strcmp (language_string, "GNU F77")
+ || ! strcmp (language_string, "GNU Fortran"))
+
diff --git a/debian/patches/pr47818.diff b/debian/patches/pr47818.diff
new file mode 100644
index 0000000..04cfbf4
--- /dev/null
+++ b/debian/patches/pr47818.diff
@@ -0,0 +1,24 @@
+# DP: Fix PR ada/47818: Pragma Assert is rejected with No_Implementation_Pragmas restriction.
+
+diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
+index fd509c4..b5bae50 100644
+--- a/src/gcc/ada/sem_prag.adb
++++ b/src/gcc/ada/sem_prag.adb
+@@ -6477,7 +6477,16 @@ package body Sem_Prag is
+ -- Set True if category of assertions referenced by Name enabled
+
+ begin
+- GNAT_Pragma;
++ -- This could be a rewritten pragma Assert. If it is the case
++ -- then don't check restrictions, because they are different for
++ -- pragma Assert and were already checked.
++
++ if Nkind (Original_Node (N)) /= N_Pragma
++ or else Pragma_Name (Original_Node (N)) /= Name_Assert
++ then
++ GNAT_Pragma;
++ end if;
++
+ Check_At_Least_N_Arguments (2);
+ Check_At_Most_N_Arguments (3);
+ Check_Optional_Identifier (Arg1, Name_Name);
diff --git a/debian/patches/pr48226.diff b/debian/patches/pr48226.diff
new file mode 100644
index 0000000..139e0b8
--- /dev/null
+++ b/debian/patches/pr48226.diff
@@ -0,0 +1,33 @@
+# DP: Fix PR target/48226, Allow Iterator::vector vector on powerpc with VSX.
+
+--- a/src/gcc/testsuite/gcc.target/powerpc/pr48226.c (revision 0)
++++ b/src/gcc/testsuite/gcc.target/powerpc/pr48226.c (revision 0)
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
++/* { dg-require-effective-target powerpc_vsx_ok } */
++/* { dg-options "-O3 -mcpu=power7" } */
++
++/* The bug shows up if you compile with -maltivec or -mcpu=power7, due to one
++ of the vector's being eliminated due to rs6000_macro_to_expand being called
++ recursively. */
++
++struct vector {
++ float v[4];
++};
++
++struct vector vector = { 1.0, 2.0, 3.0, 4.0 };
+--- a/src/gcc/config/rs6000/rs6000-c.c (revision 171246)
++++ b/src/gcc/config/rs6000/rs6000-c.c (working copy)
+@@ -182,7 +182,10 @@ rs6000_macro_to_expand (cpp_reader *pfil
+ expand_this = C_CPP_HASHNODE (__vector_keyword);
+ expand_bool_pixel = __bool_keyword;
+ }
+- else if (ident)
++ /* The boost libraries have code with Iterator::vector vector in it. If
++ we allow the normal handling, this module will be called recursively,
++ and the vector will be skipped.; */
++ else if (ident && (ident != C_CPP_HASHNODE (__vector_keyword)))
+ {
+ enum rid rid_code = (enum rid)(ident->rid_code);
+ if (ident->type == NT_MACRO)
diff --git a/debian/patches/pr48830.diff b/debian/patches/pr48830.diff
new file mode 100644
index 0000000..bc47ecd
--- /dev/null
+++ b/debian/patches/pr48830.diff
@@ -0,0 +1,226 @@
+# DP: Fix for PR rtl-optimization/{48830,48808,48792}, taken from the trunk.
+
+ChangeLog.linaro
+
+2011-07-13 Michael Hope <michael.hope@linaro.org>
+
+ Backport from mainline r174540
+ LP: #807573
+
+ gcc/
+ 2011-06-01 Richard Sandiford <rdsandiford@googlemail.com>
+
+ PR rtl-optimization/48830
+ PR rtl-optimization/48808
+ PR rtl-optimization/48792
+ * reload.c (push_reload): Check contains_reg_of_mode.
+ * reload1.c (strip_paradoxical_subreg): New function.
+ (gen_reload_chain_without_interm_reg_p): Use it to handle
+ paradoxical subregs.
+ (emit_output_reload_insns, gen_reload): Likewise.
+
+ gcc/testsuite/
+ 2011-06-01 Eric Botcazou <ebotcazou@adacore.com>
+ Hans-Peter Nilsson <hp@axis.com>
+
+ PR rtl-optimization/48830
+ * gcc.target/sparc/ultrasp12.c: New test.
+
+--- a/src/gcc/reload.c
++++ b/src/gcc/reload.c
+@@ -1017,6 +1017,7 @@
+ #ifdef CANNOT_CHANGE_MODE_CLASS
+ && !CANNOT_CHANGE_MODE_CLASS (GET_MODE (SUBREG_REG (in)), inmode, rclass)
+ #endif
++ && contains_reg_of_mode[(int) rclass][(int) GET_MODE (SUBREG_REG (in))]
+ && (CONSTANT_P (SUBREG_REG (in))
+ || GET_CODE (SUBREG_REG (in)) == PLUS
+ || strict_low
+@@ -1123,6 +1124,7 @@
+ #ifdef CANNOT_CHANGE_MODE_CLASS
+ && !CANNOT_CHANGE_MODE_CLASS (GET_MODE (SUBREG_REG (out)), outmode, rclass)
+ #endif
++ && contains_reg_of_mode[(int) rclass][(int) GET_MODE (SUBREG_REG (out))]
+ && (CONSTANT_P (SUBREG_REG (out))
+ || strict_low
+ || (((REG_P (SUBREG_REG (out))
+
+--- a/src/gcc/reload1.c
++++ b/src/gcc/reload1.c
+@@ -4476,6 +4476,43 @@
+ }
+ }
+ }
++
++/* *OP_PTR and *OTHER_PTR are two operands to a conceptual reload.
++ If *OP_PTR is a paradoxical subreg, try to remove that subreg
++ and apply the corresponding narrowing subreg to *OTHER_PTR.
++ Return true if the operands were changed, false otherwise. */
++
++static bool
++strip_paradoxical_subreg (rtx *op_ptr, rtx *other_ptr)
++{
++ rtx op, inner, other, tem;
++
++ op = *op_ptr;
++ if (GET_CODE (op) != SUBREG)
++ return false;
++
++ inner = SUBREG_REG (op);
++ if (GET_MODE_SIZE (GET_MODE (op)) <= GET_MODE_SIZE (GET_MODE (inner)))
++ return false;
++
++ other = *other_ptr;
++ tem = gen_lowpart_common (GET_MODE (inner), other);
++ if (!tem)
++ return false;
++
++ /* If the lowpart operation turned a hard register into a subreg,
++ rather than simplifying it to another hard register, then the
++ mode change cannot be properly represented. For example, OTHER
++ might be valid in its current mode, but not in the new one. */
++ if (GET_CODE (tem) == SUBREG
++ && REG_P (other)
++ && HARD_REGISTER_P (other))
++ return false;
++
++ *op_ptr = inner;
++ *other_ptr = tem;
++ return true;
++}
+
+ /* A subroutine of reload_as_needed. If INSN has a REG_EH_REGION note,
+ examine all of the reload insns between PREV and NEXT exclusive, and
+@@ -5556,7 +5593,7 @@
+ chain reloads or do need an intermediate hard registers. */
+ bool result = true;
+ int regno, n, code;
+- rtx out, in, tem, insn;
++ rtx out, in, insn;
+ rtx last = get_last_insn ();
+
+ /* Make r2 a component of r1. */
+@@ -5575,11 +5612,7 @@
+
+ /* If IN is a paradoxical SUBREG, remove it and try to put the
+ opposite SUBREG on OUT. Likewise for a paradoxical SUBREG on OUT. */
+- if (GET_CODE (in) == SUBREG
+- && (GET_MODE_SIZE (GET_MODE (in))
+- > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
+- && (tem = gen_lowpart_common (GET_MODE (SUBREG_REG (in)), out)) != 0)
+- in = SUBREG_REG (in), out = tem;
++ strip_paradoxical_subreg (&in, &out);
+
+ if (GET_CODE (in) == PLUS
+ && (REG_P (XEXP (in, 0))
+@@ -7581,7 +7614,6 @@
+ if (tertiary_icode != CODE_FOR_nothing)
+ {
+ rtx third_reloadreg = rld[tertiary_reload].reg_rtx;
+- rtx tem;
+
+ /* Copy primary reload reg to secondary reload reg.
+ (Note that these have been swapped above, then
+@@ -7590,13 +7622,7 @@
+ /* If REAL_OLD is a paradoxical SUBREG, remove it
+ and try to put the opposite SUBREG on
+ RELOADREG. */
+- if (GET_CODE (real_old) == SUBREG
+- && (GET_MODE_SIZE (GET_MODE (real_old))
+- > GET_MODE_SIZE (GET_MODE (SUBREG_REG (real_old))))
+- && 0 != (tem = gen_lowpart_common
+- (GET_MODE (SUBREG_REG (real_old)),
+- reloadreg)))
+- real_old = SUBREG_REG (real_old), reloadreg = tem;
++ strip_paradoxical_subreg (&real_old, &reloadreg);
+
+ gen_reload (reloadreg, second_reloadreg,
+ rl->opnum, rl->when_needed);
+@@ -8412,16 +8438,8 @@
+
+ /* If IN is a paradoxical SUBREG, remove it and try to put the
+ opposite SUBREG on OUT. Likewise for a paradoxical SUBREG on OUT. */
+- if (GET_CODE (in) == SUBREG
+- && (GET_MODE_SIZE (GET_MODE (in))
+- > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
+- && (tem = gen_lowpart_common (GET_MODE (SUBREG_REG (in)), out)) != 0)
+- in = SUBREG_REG (in), out = tem;
+- else if (GET_CODE (out) == SUBREG
+- && (GET_MODE_SIZE (GET_MODE (out))
+- > GET_MODE_SIZE (GET_MODE (SUBREG_REG (out))))
+- && (tem = gen_lowpart_common (GET_MODE (SUBREG_REG (out)), in)) != 0)
+- out = SUBREG_REG (out), in = tem;
++ if (!strip_paradoxical_subreg (&in, &out))
++ strip_paradoxical_subreg (&out, &in);
+
+ /* How to do this reload can get quite tricky. Normally, we are being
+ asked to reload a simple operand, such as a MEM, a constant, or a pseudo
+
+--- a/src/gcc/testsuite/gcc.target/sparc/ultrasp12.c
++++ b/src/gcc/testsuite/gcc.target/sparc/ultrasp12.c
+@@ -0,0 +1,64 @@
++/* PR rtl-optimization/48830 */
++/* Testcase by Hans-Peter Nilsson <hp@gcc.gnu.org> */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target lp64 } */
++/* { dg-options "-O2 -mcpu=ultrasparc -mvis" } */
++
++typedef unsigned char uint8_t;
++typedef unsigned int uint32_t;
++typedef unsigned long int uint64_t;
++typedef unsigned long int uintmax_t;
++typedef unsigned char rc_vec_t __attribute__((__vector_size__(8)));
++typedef short rc_svec_type_ __attribute__((__vector_size__(8)));
++typedef unsigned char rc_vec4_type_ __attribute__((__vector_size__(4)));
++
++void
++rc_stat_xsum_acc(const uint8_t *__restrict src1, int src1_dim,
++ const uint8_t *__restrict src2, int src2_dim,
++ int len, int height, uintmax_t sum[5])
++{
++ uint32_t s1 = 0;
++ uint32_t s2 = 0;
++ uintmax_t s11 = 0;
++ uintmax_t s22 = 0;
++ uintmax_t s12 = 0;
++ int full = len / ((1024) < (1024) ? (1024) : (1024));
++ int rem = len % ((1024) < (1024) ? (1024) : (1024));
++ int rem1 = rem / 1;
++ int y;
++ unsigned int rc_gsr_scale_ __attribute__ ((__unused__)) = 7; unsigned int rc_gsr_align_ __attribute__ ((__unused__)) = 4; unsigned int rc_gsr_set_ __attribute__ ((__unused__)) = 0; register unsigned int rc_gsr_fakedep_ __attribute__ ((__unused__)) = 0; unsigned int rc_gsr_ldinit_ __attribute__ ((__unused__)) = 0;
++ for (y = 0; y < height; y++) {
++ rc_vec_t a1, a2, a11, a22, a12;
++ int i1 = (y)*(src1_dim);
++ int i2 = (y)*(src2_dim);
++ int x;
++ ((a1) = ((rc_vec_t) {0}));
++ ((a2) = ((rc_vec_t) {0}));
++ ((a11) = ((rc_vec_t) {0}));
++ ((a22) = ((rc_vec_t) {0}));
++ ((a12) = ((rc_vec_t) {0}));
++ for (x = 0; x < full; x++) {
++ int k;
++ for (k = 0; k < ((1024) < (1024) ? (1024) : (1024)) /
++ 1; k++)
++ {
++ do { rc_vec_t v1, v2; ((v1) = *(const rc_vec_t*)(&(src1)[i1])); ((v2) = *(const rc_vec_t*)(&(src2)[i2])); ((a1) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(__builtin_vis_pdist (v1, ((rc_vec_t) {0}), (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a1)).i)))).v)); ((a2) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(__builtin_vis_pdist (v2, ((rc_vec_t) {0}), (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a2)).i)))).v)); do { rc_vec_t s1_ = (v1); rc_vec_t s2_ = (v1); rc_vec_t accvin_ = (a11); rc_vec_t s1lo7_, s1msb_, accvout_; uint32_t maclo_, machi_; rc_svec_type_ masklow_ = (rc_svec_type_){(255), (255), (255), (255)}; rc_svec_type_ s1msbhi_, s1msblo_, s1lo7hi_, s1lo7lo_; rc_svec_type_ s1msbdiv2hi_, s1msbdiv2lo_; rc_vec4_type_ s1lo7hi4_, s1lo7lo4_, s1msbhi4_, s1msblo4_; rc_vec4_type_ s1msbdiv2hi4_, s1msbdiv2lo4_, s2hi4_, s2lo4_; rc_vec4_type_ accvhi4_, accvlo4_; rc_svec_type_ mulhilo7_, mullolo7_, mulhimsbdiv2_, mullomsbdiv2_; rc_svec_type_ mulhi_, mullo_, mulhihi_, mullohi_; rc_svec_type_ mulhilo_, mullolo_; rc_vec4_type_ zero4_ = (((union { rc_vec4_type_ v; uint64_t i; })(uint64_t)(0)).v); rc_vec_t msb_ = (rc_vec_t){(0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80)}; ((s1msb_) = (s1_) & (msb_)); ((s1lo7_) = (s1_) & (~msb_)); do { if (rc_gsr_ldinit_) { extern void rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(void); rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(); } if (!__builtin_constant_p(rc_gsr_align_) || !__builtin_constant_p(2) || !rc_gsr_set_ || (unsigned) (rc_gsr_align_) != rc_gsr_align_ || (unsigned) (2) != rc_gsr_scale_) { rc_gsr_set_ = 1; rc_gsr_align_ = (rc_gsr_align_); rc_gsr_scale_ = (2); unsigned int val_ = (rc_gsr_scale_ << 3) | rc_gsr_align_; if (__builtin_constant_p (val_)) { __asm__("wr %%g0,%[gsrval],%%gsr\n" ";# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "i" (val_), "1" (rc_gsr_fakedep_)); } else { __asm__("wr %[gsrval],0,%%gsr" "\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "r" (val_), "1" (rc_gsr_fakedep_)); } } else { __asm__("\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_) : "0" (s1msb_), [fakegsr] "g" (rc_gsr_fakedep_)); } } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1msb_); (s1msbhi4_) = hl_.hilo_.hi_; (s1msblo4_) = hl_.hilo_.lo_; } while (0); s1msbhi_ = __builtin_vis_fexpand(s1msbhi4_); s1msblo_ = __builtin_vis_fexpand(s1msblo4_); s1msbdiv2hi4_ = __builtin_vis_fpack16(s1msbhi_); s1msbdiv2lo4_ = __builtin_vis_fpack16(s1msblo_); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s2_); (s2hi4_) = hl_.hilo_.hi_; (s2lo4_) = hl_.hilo_.lo_; } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1lo7_); (s1lo7hi4_) = hl_.hilo_.hi_; (s1lo7lo4_) = hl_.hilo_.lo_; } while (0); s1msbdiv2hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2hi4_, zero4_); s1msbdiv2lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2lo4_, zero4_); s1lo7hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7hi4_, zero4_); s1lo7lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7lo4_, zero4_); mulhilo7_ = __builtin_vis_fmul8x16(s2hi4_, s1lo7hi_); mullolo7_ = __builtin_vis_fmul8x16(s2lo4_, s1lo7lo_); mulhimsbdiv2_ = __builtin_vis_fmul8x16(s2hi4_, s1msbdiv2hi_); mullomsbdiv2_ = __builtin_vis_fmul8x16(s2lo4_, s1msbdiv2lo_); mulhi_ = mulhilo7_ + mulhimsbdiv2_ + mulhimsbdiv2_; mullo_ = mullolo7_ + mullomsbdiv2_ + mullomsbdiv2_; mulhihi_ = mulhi_ & ~masklow_; mulhilo_ = mulhi_ & masklow_; mullohi_ = mullo_ & ~masklow_; mullolo_ = mullo_ & masklow_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (accvin_); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); maclo_ = __builtin_vis_pdist ((rc_vec_t)mullolo_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i)); maclo_ = __builtin_vis_pdist ((rc_vec_t)mulhilo_, ((rc_vec_t) {0}), maclo_); machi_ = __builtin_vis_pdist ((rc_vec_t)mullohi_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i)); machi_ = __builtin_vis_pdist ((rc_vec_t)mulhihi_, ((rc_vec_t) {0}), machi_); do { typedef union { struct { rc_vec4_type_ hi_, lo_; } hilo_; rc_vec_t v_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) {{((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)machi_)).v)), ((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)maclo_)).v))}}; (accvout_) = hl_.v_; } while (0); __asm__("\n;# dep fake GSR %[fakegsr] on %[xdep]" : [fakegsr] "=brm" (rc_gsr_fakedep_) : [xdep] "brm" (accvout_), "0" (rc_gsr_fakedep_)); (a11) = accvout_; } while (0); do { rc_vec_t s1_ = (v2); rc_vec_t s2_ = (v2); rc_vec_t accvin_ = (a22); rc_vec_t s1lo7_, s1msb_, accvout_; uint32_t maclo_, machi_; rc_svec_type_ masklow_ = (rc_svec_type_){(255), (255), (255), (255)}; rc_svec_type_ s1msbhi_, s1msblo_, s1lo7hi_, s1lo7lo_; rc_svec_type_ s1msbdiv2hi_, s1msbdiv2lo_; rc_vec4_type_ s1lo7hi4_, s1lo7lo4_, s1msbhi4_, s1msblo4_; rc_vec4_type_ s1msbdiv2hi4_, s1msbdiv2lo4_, s2hi4_, s2lo4_; rc_vec4_type_ accvhi4_, accvlo4_; rc_svec_type_ mulhilo7_, mullolo7_, mulhimsbdiv2_, mullomsbdiv2_; rc_svec_type_ mulhi_, mullo_, mulhihi_, mullohi_; rc_svec_type_ mulhilo_, mullolo_; rc_vec4_type_ zero4_ = (((union { rc_vec4_type_ v; uint64_t i; })(uint64_t)(0)).v); rc_vec_t msb_ = (rc_vec_t){(0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80)}; ((s1msb_) = (s1_) & (msb_)); ((s1lo7_) = (s1_) & (~msb_)); do { if (rc_gsr_ldinit_) { extern void rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(void); rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(); } if (!__builtin_constant_p(rc_gsr_align_) || !__builtin_constant_p(2) || !rc_gsr_set_ || (unsigned) (rc_gsr_align_) != rc_gsr_align_ || (unsigned) (2) != rc_gsr_scale_) { rc_gsr_set_ = 1; rc_gsr_align_ = (rc_gsr_align_); rc_gsr_scale_ = (2); unsigned int val_ = (rc_gsr_scale_ << 3) | rc_gsr_align_; if (__builtin_constant_p (val_)) { __asm__("wr %%g0,%[gsrval],%%gsr\n" ";# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "i" (val_), "1" (rc_gsr_fakedep_)); } else { __asm__("wr %[gsrval],0,%%gsr" "\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "r" (val_), "1" (rc_gsr_fakedep_)); } } else { __asm__("\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_) : "0" (s1msb_), [fakegsr] "g" (rc_gsr_fakedep_)); } } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1msb_); (s1msbhi4_) = hl_.hilo_.hi_; (s1msblo4_) = hl_.hilo_.lo_; } while (0); s1msbhi_ = __builtin_vis_fexpand(s1msbhi4_); s1msblo_ = __builtin_vis_fexpand(s1msblo4_); s1msbdiv2hi4_ = __builtin_vis_fpack16(s1msbhi_); s1msbdiv2lo4_ = __builtin_vis_fpack16(s1msblo_); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s2_); (s2hi4_) = hl_.hilo_.hi_; (s2lo4_) = hl_.hilo_.lo_; } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1lo7_); (s1lo7hi4_) = hl_.hilo_.hi_; (s1lo7lo4_) = hl_.hilo_.lo_; } while (0); s1msbdiv2hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2hi4_, zero4_); s1msbdiv2lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2lo4_, zero4_); s1lo7hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7hi4_, zero4_); s1lo7lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7lo4_, zero4_); mulhilo7_ = __builtin_vis_fmul8x16(s2hi4_, s1lo7hi_); mullolo7_ = __builtin_vis_fmul8x16(s2lo4_, s1lo7lo_); mulhimsbdiv2_ = __builtin_vis_fmul8x16(s2hi4_, s1msbdiv2hi_); mullomsbdiv2_ = __builtin_vis_fmul8x16(s2lo4_, s1msbdiv2lo_); mulhi_ = mulhilo7_ + mulhimsbdiv2_ + mulhimsbdiv2_; mullo_ = mullolo7_ + mullomsbdiv2_ + mullomsbdiv2_; mulhihi_ = mulhi_ & ~masklow_; mulhilo_ = mulhi_ & masklow_; mullohi_ = mullo_ & ~masklow_; mullolo_ = mullo_ & masklow_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (accvin_); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); maclo_ = __builtin_vis_pdist ((rc_vec_t)mullolo_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i)); maclo_ = __builtin_vis_pdist ((rc_vec_t)mulhilo_, ((rc_vec_t) {0}), maclo_); machi_ = __builtin_vis_pdist ((rc_vec_t)mullohi_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i)); machi_ = __builtin_vis_pdist ((rc_vec_t)mulhihi_, ((rc_vec_t) {0}), machi_); do { typedef union { struct { rc_vec4_type_ hi_, lo_; } hilo_; rc_vec_t v_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) {{((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)machi_)).v)), ((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)maclo_)).v))}}; (accvout_) = hl_.v_; } while (0); __asm__("\n;# dep fake GSR %[fakegsr] on %[xdep]" : [fakegsr] "=brm" (rc_gsr_fakedep_) : [xdep] "brm" (accvout_), "0" (rc_gsr_fakedep_)); (a22) = accvout_; } while (0); do { rc_vec_t s1_ = (v1); rc_vec_t s2_ = (v2); rc_vec_t accvin_ = (a12); rc_vec_t s1lo7_, s1msb_, accvout_; uint32_t maclo_, machi_; rc_svec_type_ masklow_ = (rc_svec_type_){(255), (255), (255), (255)}; rc_svec_type_ s1msbhi_, s1msblo_, s1lo7hi_, s1lo7lo_; rc_svec_type_ s1msbdiv2hi_, s1msbdiv2lo_; rc_vec4_type_ s1lo7hi4_, s1lo7lo4_, s1msbhi4_, s1msblo4_; rc_vec4_type_ s1msbdiv2hi4_, s1msbdiv2lo4_, s2hi4_, s2lo4_; rc_vec4_type_ accvhi4_, accvlo4_; rc_svec_type_ mulhilo7_, mullolo7_, mulhimsbdiv2_, mullomsbdiv2_; rc_svec_type_ mulhi_, mullo_, mulhihi_, mullohi_; rc_svec_type_ mulhilo_, mullolo_; rc_vec4_type_ zero4_ = (((union { rc_vec4_type_ v; uint64_t i; })(uint64_t)(0)).v); rc_vec_t msb_ = (rc_vec_t){(0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80)}; ((s1msb_) = (s1_) & (msb_)); ((s1lo7_) = (s1_) & (~msb_)); do { if (rc_gsr_ldinit_) { extern void rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(void); rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(); } if (!__builtin_constant_p(rc_gsr_align_) || !__builtin_constant_p(2) || !rc_gsr_set_ || (unsigned) (rc_gsr_align_) != rc_gsr_align_ || (unsigned) (2) != rc_gsr_scale_) { rc_gsr_set_ = 1; rc_gsr_align_ = (rc_gsr_align_); rc_gsr_scale_ = (2); unsigned int val_ = (rc_gsr_scale_ << 3) | rc_gsr_align_; if (__builtin_constant_p (val_)) { __asm__("wr %%g0,%[gsrval],%%gsr\n" ";# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "i" (val_), "1" (rc_gsr_fakedep_)); } else { __asm__("wr %[gsrval],0,%%gsr" "\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "r" (val_), "1" (rc_gsr_fakedep_)); } } else { __asm__("\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_) : "0" (s1msb_), [fakegsr] "g" (rc_gsr_fakedep_)); } } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1msb_); (s1msbhi4_) = hl_.hilo_.hi_; (s1msblo4_) = hl_.hilo_.lo_; } while (0); s1msbhi_ = __builtin_vis_fexpand(s1msbhi4_); s1msblo_ = __builtin_vis_fexpand(s1msblo4_); s1msbdiv2hi4_ = __builtin_vis_fpack16(s1msbhi_); s1msbdiv2lo4_ = __builtin_vis_fpack16(s1msblo_); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s2_); (s2hi4_) = hl_.hilo_.hi_; (s2lo4_) = hl_.hilo_.lo_; } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1lo7_); (s1lo7hi4_) = hl_.hilo_.hi_; (s1lo7lo4_) = hl_.hilo_.lo_; } while (0); s1msbdiv2hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2hi4_, zero4_); s1msbdiv2lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2lo4_, zero4_); s1lo7hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7hi4_, zero4_); s1lo7lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7lo4_, zero4_); mulhilo7_ = __builtin_vis_fmul8x16(s2hi4_, s1lo7hi_); mullolo7_ = __builtin_vis_fmul8x16(s2lo4_, s1lo7lo_); mulhimsbdiv2_ = __builtin_vis_fmul8x16(s2hi4_, s1msbdiv2hi_); mullomsbdiv2_ = __builtin_vis_fmul8x16(s2lo4_, s1msbdiv2lo_); mulhi_ = mulhilo7_ + mulhimsbdiv2_ + mulhimsbdiv2_; mullo_ = mullolo7_ + mullomsbdiv2_ + mullomsbdiv2_; mulhihi_ = mulhi_ & ~masklow_; mulhilo_ = mulhi_ & masklow_; mullohi_ = mullo_ & ~masklow_; mullolo_ = mullo_ & masklow_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (accvin_); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); maclo_ = __builtin_vis_pdist ((rc_vec_t)mullolo_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i)); maclo_ = __builtin_vis_pdist ((rc_vec_t)mulhilo_, ((rc_vec_t) {0}), maclo_); machi_ = __builtin_vis_pdist ((rc_vec_t)mullohi_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i)); machi_ = __builtin_vis_pdist ((rc_vec_t)mulhihi_, ((rc_vec_t) {0}), machi_); do { typedef union { struct { rc_vec4_type_ hi_, lo_; } hilo_; rc_vec_t v_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) {{((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)machi_)).v)), ((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)maclo_)).v))}}; (accvout_) = hl_.v_; } while (0); __asm__("\n;# dep fake GSR %[fakegsr] on %[xdep]" : [fakegsr] "=brm" (rc_gsr_fakedep_) : [xdep] "brm" (accvout_), "0" (rc_gsr_fakedep_)); (a12) = accvout_; } while (0); (i1) += 8; (i2) += 8; } while (0);
++
++ }
++ do { uint32_t t1, t2, t11, t22, t12; ((t1) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a1)).i)); ((t2) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a2)).i)); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a11); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t11) = maclo_ + machi_ * 256; } while (0); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a22); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t22) = maclo_ + machi_ * 256; } while (0); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a12); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t12) = maclo_ + machi_ * 256; } while (0); ((a1) = ((rc_vec_t) {0})); ((a2) = ((rc_vec_t) {0})); ((a11) = ((rc_vec_t) {0})); ((a22) = ((rc_vec_t) {0})); ((a12) = ((rc_vec_t) {0})); (s1) += t1; (s2) += t2; (s11) += t11; (s22) += t22; (s12) += t12; } while (0);
++ }
++ for (x = 0; x < rem1; x++) {
++ do { rc_vec_t v1, v2; ((v1) = *(const rc_vec_t*)(&(src1)[i1])); ((v2) = *(const rc_vec_t*)(&(src2)[i2])); ((a1) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(__builtin_vis_pdist (v1, ((rc_vec_t) {0}), (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a1)).i)))).v)); ((a2) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(__builtin_vis_pdist (v2, ((rc_vec_t) {0}), (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a2)).i)))).v)); do { rc_vec_t s1_ = (v1); rc_vec_t s2_ = (v1); rc_vec_t accvin_ = (a11); rc_vec_t s1lo7_, s1msb_, accvout_; uint32_t maclo_, machi_; rc_svec_type_ masklow_ = (rc_svec_type_){(255), (255), (255), (255)}; rc_svec_type_ s1msbhi_, s1msblo_, s1lo7hi_, s1lo7lo_; rc_svec_type_ s1msbdiv2hi_, s1msbdiv2lo_; rc_vec4_type_ s1lo7hi4_, s1lo7lo4_, s1msbhi4_, s1msblo4_; rc_vec4_type_ s1msbdiv2hi4_, s1msbdiv2lo4_, s2hi4_, s2lo4_; rc_vec4_type_ accvhi4_, accvlo4_; rc_svec_type_ mulhilo7_, mullolo7_, mulhimsbdiv2_, mullomsbdiv2_; rc_svec_type_ mulhi_, mullo_, mulhihi_, mullohi_; rc_svec_type_ mulhilo_, mullolo_; rc_vec4_type_ zero4_ = (((union { rc_vec4_type_ v; uint64_t i; })(uint64_t)(0)).v); rc_vec_t msb_ = (rc_vec_t){(0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80)}; ((s1msb_) = (s1_) & (msb_)); ((s1lo7_) = (s1_) & (~msb_)); do { if (rc_gsr_ldinit_) { extern void rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(void); rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(); } if (!__builtin_constant_p(rc_gsr_align_) || !__builtin_constant_p(2) || !rc_gsr_set_ || (unsigned) (rc_gsr_align_) != rc_gsr_align_ || (unsigned) (2) != rc_gsr_scale_) { rc_gsr_set_ = 1; rc_gsr_align_ = (rc_gsr_align_); rc_gsr_scale_ = (2); unsigned int val_ = (rc_gsr_scale_ << 3) | rc_gsr_align_; if (__builtin_constant_p (val_)) { __asm__("wr %%g0,%[gsrval],%%gsr\n" ";# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "i" (val_), "1" (rc_gsr_fakedep_)); } else { __asm__("wr %[gsrval],0,%%gsr" "\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "r" (val_), "1" (rc_gsr_fakedep_)); } } else { __asm__("\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_) : "0" (s1msb_), [fakegsr] "g" (rc_gsr_fakedep_)); } } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1msb_); (s1msbhi4_) = hl_.hilo_.hi_; (s1msblo4_) = hl_.hilo_.lo_; } while (0); s1msbhi_ = __builtin_vis_fexpand(s1msbhi4_); s1msblo_ = __builtin_vis_fexpand(s1msblo4_); s1msbdiv2hi4_ = __builtin_vis_fpack16(s1msbhi_); s1msbdiv2lo4_ = __builtin_vis_fpack16(s1msblo_); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s2_); (s2hi4_) = hl_.hilo_.hi_; (s2lo4_) = hl_.hilo_.lo_; } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1lo7_); (s1lo7hi4_) = hl_.hilo_.hi_; (s1lo7lo4_) = hl_.hilo_.lo_; } while (0); s1msbdiv2hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2hi4_, zero4_); s1msbdiv2lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2lo4_, zero4_); s1lo7hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7hi4_, zero4_); s1lo7lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7lo4_, zero4_); mulhilo7_ = __builtin_vis_fmul8x16(s2hi4_, s1lo7hi_); mullolo7_ = __builtin_vis_fmul8x16(s2lo4_, s1lo7lo_); mulhimsbdiv2_ = __builtin_vis_fmul8x16(s2hi4_, s1msbdiv2hi_); mullomsbdiv2_ = __builtin_vis_fmul8x16(s2lo4_, s1msbdiv2lo_); mulhi_ = mulhilo7_ + mulhimsbdiv2_ + mulhimsbdiv2_; mullo_ = mullolo7_ + mullomsbdiv2_ + mullomsbdiv2_; mulhihi_ = mulhi_ & ~masklow_; mulhilo_ = mulhi_ & masklow_; mullohi_ = mullo_ & ~masklow_; mullolo_ = mullo_ & masklow_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (accvin_); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); maclo_ = __builtin_vis_pdist ((rc_vec_t)mullolo_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i)); maclo_ = __builtin_vis_pdist ((rc_vec_t)mulhilo_, ((rc_vec_t) {0}), maclo_); machi_ = __builtin_vis_pdist ((rc_vec_t)mullohi_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i)); machi_ = __builtin_vis_pdist ((rc_vec_t)mulhihi_, ((rc_vec_t) {0}), machi_); do { typedef union { struct { rc_vec4_type_ hi_, lo_; } hilo_; rc_vec_t v_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) {{((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)machi_)).v)), ((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)maclo_)).v))}}; (accvout_) = hl_.v_; } while (0); __asm__("\n;# dep fake GSR %[fakegsr] on %[xdep]" : [fakegsr] "=brm" (rc_gsr_fakedep_) : [xdep] "brm" (accvout_), "0" (rc_gsr_fakedep_)); (a11) = accvout_; } while (0); do { rc_vec_t s1_ = (v2); rc_vec_t s2_ = (v2); rc_vec_t accvin_ = (a22); rc_vec_t s1lo7_, s1msb_, accvout_; uint32_t maclo_, machi_; rc_svec_type_ masklow_ = (rc_svec_type_){(255), (255), (255), (255)}; rc_svec_type_ s1msbhi_, s1msblo_, s1lo7hi_, s1lo7lo_; rc_svec_type_ s1msbdiv2hi_, s1msbdiv2lo_; rc_vec4_type_ s1lo7hi4_, s1lo7lo4_, s1msbhi4_, s1msblo4_; rc_vec4_type_ s1msbdiv2hi4_, s1msbdiv2lo4_, s2hi4_, s2lo4_; rc_vec4_type_ accvhi4_, accvlo4_; rc_svec_type_ mulhilo7_, mullolo7_, mulhimsbdiv2_, mullomsbdiv2_; rc_svec_type_ mulhi_, mullo_, mulhihi_, mullohi_; rc_svec_type_ mulhilo_, mullolo_; rc_vec4_type_ zero4_ = (((union { rc_vec4_type_ v; uint64_t i; })(uint64_t)(0)).v); rc_vec_t msb_ = (rc_vec_t){(0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80)}; ((s1msb_) = (s1_) & (msb_)); ((s1lo7_) = (s1_) & (~msb_)); do { if (rc_gsr_ldinit_) { extern void rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(void); rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(); } if (!__builtin_constant_p(rc_gsr_align_) || !__builtin_constant_p(2) || !rc_gsr_set_ || (unsigned) (rc_gsr_align_) != rc_gsr_align_ || (unsigned) (2) != rc_gsr_scale_) { rc_gsr_set_ = 1; rc_gsr_align_ = (rc_gsr_align_); rc_gsr_scale_ = (2); unsigned int val_ = (rc_gsr_scale_ << 3) | rc_gsr_align_; if (__builtin_constant_p (val_)) { __asm__("wr %%g0,%[gsrval],%%gsr\n" ";# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "i" (val_), "1" (rc_gsr_fakedep_)); } else { __asm__("wr %[gsrval],0,%%gsr" "\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "r" (val_), "1" (rc_gsr_fakedep_)); } } else { __asm__("\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_) : "0" (s1msb_), [fakegsr] "g" (rc_gsr_fakedep_)); } } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1msb_); (s1msbhi4_) = hl_.hilo_.hi_; (s1msblo4_) = hl_.hilo_.lo_; } while (0); s1msbhi_ = __builtin_vis_fexpand(s1msbhi4_); s1msblo_ = __builtin_vis_fexpand(s1msblo4_); s1msbdiv2hi4_ = __builtin_vis_fpack16(s1msbhi_); s1msbdiv2lo4_ = __builtin_vis_fpack16(s1msblo_); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s2_); (s2hi4_) = hl_.hilo_.hi_; (s2lo4_) = hl_.hilo_.lo_; } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1lo7_); (s1lo7hi4_) = hl_.hilo_.hi_; (s1lo7lo4_) = hl_.hilo_.lo_; } while (0); s1msbdiv2hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2hi4_, zero4_); s1msbdiv2lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2lo4_, zero4_); s1lo7hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7hi4_, zero4_); s1lo7lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7lo4_, zero4_); mulhilo7_ = __builtin_vis_fmul8x16(s2hi4_, s1lo7hi_); mullolo7_ = __builtin_vis_fmul8x16(s2lo4_, s1lo7lo_); mulhimsbdiv2_ = __builtin_vis_fmul8x16(s2hi4_, s1msbdiv2hi_); mullomsbdiv2_ = __builtin_vis_fmul8x16(s2lo4_, s1msbdiv2lo_); mulhi_ = mulhilo7_ + mulhimsbdiv2_ + mulhimsbdiv2_; mullo_ = mullolo7_ + mullomsbdiv2_ + mullomsbdiv2_; mulhihi_ = mulhi_ & ~masklow_; mulhilo_ = mulhi_ & masklow_; mullohi_ = mullo_ & ~masklow_; mullolo_ = mullo_ & masklow_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (accvin_); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); maclo_ = __builtin_vis_pdist ((rc_vec_t)mullolo_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i)); maclo_ = __builtin_vis_pdist ((rc_vec_t)mulhilo_, ((rc_vec_t) {0}), maclo_); machi_ = __builtin_vis_pdist ((rc_vec_t)mullohi_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i)); machi_ = __builtin_vis_pdist ((rc_vec_t)mulhihi_, ((rc_vec_t) {0}), machi_); do { typedef union { struct { rc_vec4_type_ hi_, lo_; } hilo_; rc_vec_t v_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) {{((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)machi_)).v)), ((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)maclo_)).v))}}; (accvout_) = hl_.v_; } while (0); __asm__("\n;# dep fake GSR %[fakegsr] on %[xdep]" : [fakegsr] "=brm" (rc_gsr_fakedep_) : [xdep] "brm" (accvout_), "0" (rc_gsr_fakedep_)); (a22) = accvout_; } while (0); do { rc_vec_t s1_ = (v1); rc_vec_t s2_ = (v2); rc_vec_t accvin_ = (a12); rc_vec_t s1lo7_, s1msb_, accvout_; uint32_t maclo_, machi_; rc_svec_type_ masklow_ = (rc_svec_type_){(255), (255), (255), (255)}; rc_svec_type_ s1msbhi_, s1msblo_, s1lo7hi_, s1lo7lo_; rc_svec_type_ s1msbdiv2hi_, s1msbdiv2lo_; rc_vec4_type_ s1lo7hi4_, s1lo7lo4_, s1msbhi4_, s1msblo4_; rc_vec4_type_ s1msbdiv2hi4_, s1msbdiv2lo4_, s2hi4_, s2lo4_; rc_vec4_type_ accvhi4_, accvlo4_; rc_svec_type_ mulhilo7_, mullolo7_, mulhimsbdiv2_, mullomsbdiv2_; rc_svec_type_ mulhi_, mullo_, mulhihi_, mullohi_; rc_svec_type_ mulhilo_, mullolo_; rc_vec4_type_ zero4_ = (((union { rc_vec4_type_ v; uint64_t i; })(uint64_t)(0)).v); rc_vec_t msb_ = (rc_vec_t){(0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80), (0x80)}; ((s1msb_) = (s1_) & (msb_)); ((s1lo7_) = (s1_) & (~msb_)); do { if (rc_gsr_ldinit_) { extern void rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(void); rc_mixing_GSR_setting_with_RC_VEC_LDINIT_(); } if (!__builtin_constant_p(rc_gsr_align_) || !__builtin_constant_p(2) || !rc_gsr_set_ || (unsigned) (rc_gsr_align_) != rc_gsr_align_ || (unsigned) (2) != rc_gsr_scale_) { rc_gsr_set_ = 1; rc_gsr_align_ = (rc_gsr_align_); rc_gsr_scale_ = (2); unsigned int val_ = (rc_gsr_scale_ << 3) | rc_gsr_align_; if (__builtin_constant_p (val_)) { __asm__("wr %%g0,%[gsrval],%%gsr\n" ";# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "i" (val_), "1" (rc_gsr_fakedep_)); } else { __asm__("wr %[gsrval],0,%%gsr" "\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_), [fakegsr] "=rm" (rc_gsr_fakedep_) : "0" (s1msb_), [gsrval] "r" (val_), "1" (rc_gsr_fakedep_)); } } else { __asm__("\n;# dep %[depvec] on fake GSR %[fakegsr]" : [depvec] "=brm" (s1msb_) : "0" (s1msb_), [fakegsr] "g" (rc_gsr_fakedep_)); } } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1msb_); (s1msbhi4_) = hl_.hilo_.hi_; (s1msblo4_) = hl_.hilo_.lo_; } while (0); s1msbhi_ = __builtin_vis_fexpand(s1msbhi4_); s1msblo_ = __builtin_vis_fexpand(s1msblo4_); s1msbdiv2hi4_ = __builtin_vis_fpack16(s1msbhi_); s1msbdiv2lo4_ = __builtin_vis_fpack16(s1msblo_); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s2_); (s2hi4_) = hl_.hilo_.hi_; (s2lo4_) = hl_.hilo_.lo_; } while (0); do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (s1lo7_); (s1lo7hi4_) = hl_.hilo_.hi_; (s1lo7lo4_) = hl_.hilo_.lo_; } while (0); s1msbdiv2hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2hi4_, zero4_); s1msbdiv2lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1msbdiv2lo4_, zero4_); s1lo7hi_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7hi4_, zero4_); s1lo7lo_ = (rc_svec_type_)__builtin_vis_fpmerge(s1lo7lo4_, zero4_); mulhilo7_ = __builtin_vis_fmul8x16(s2hi4_, s1lo7hi_); mullolo7_ = __builtin_vis_fmul8x16(s2lo4_, s1lo7lo_); mulhimsbdiv2_ = __builtin_vis_fmul8x16(s2hi4_, s1msbdiv2hi_); mullomsbdiv2_ = __builtin_vis_fmul8x16(s2lo4_, s1msbdiv2lo_); mulhi_ = mulhilo7_ + mulhimsbdiv2_ + mulhimsbdiv2_; mullo_ = mullolo7_ + mullomsbdiv2_ + mullomsbdiv2_; mulhihi_ = mulhi_ & ~masklow_; mulhilo_ = mulhi_ & masklow_; mullohi_ = mullo_ & ~masklow_; mullolo_ = mullo_ & masklow_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (accvin_); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); maclo_ = __builtin_vis_pdist ((rc_vec_t)mullolo_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i)); maclo_ = __builtin_vis_pdist ((rc_vec_t)mulhilo_, ((rc_vec_t) {0}), maclo_); machi_ = __builtin_vis_pdist ((rc_vec_t)mullohi_, ((rc_vec_t) {0}), (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i)); machi_ = __builtin_vis_pdist ((rc_vec_t)mulhihi_, ((rc_vec_t) {0}), machi_); do { typedef union { struct { rc_vec4_type_ hi_, lo_; } hilo_; rc_vec_t v_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) {{((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)machi_)).v)), ((((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)((uint32_t)maclo_)).v))}}; (accvout_) = hl_.v_; } while (0); __asm__("\n;# dep fake GSR %[fakegsr] on %[xdep]" : [fakegsr] "=brm" (rc_gsr_fakedep_) : [xdep] "brm" (accvout_), "0" (rc_gsr_fakedep_)); (a12) = accvout_; } while (0); (i1) += 8; (i2) += 8; } while (0);
++ }
++ do { uint32_t t1, t2, t11, t22, t12; ((t1) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a1)).i)); ((t2) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a2)).i)); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a11); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t11) = maclo_ + machi_ * 256; } while (0); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a22); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t22) = maclo_ + machi_ * 256; } while (0); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a12); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t12) = maclo_ + machi_ * 256; } while (0); ((a1) = ((rc_vec_t) {0})); ((a2) = ((rc_vec_t) {0})); ((a11) = ((rc_vec_t) {0})); ((a22) = ((rc_vec_t) {0})); ((a12) = ((rc_vec_t) {0})); (s1) += t1; (s2) += t2; (s11) += t11; (s22) += t22; (s12) += t12; } while (0);
++
++ do { uint32_t t1, t2, t11, t22, t12; ((t1) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a1)).i)); ((t2) = (((union { rc_vec_t v; uint64_t i; })(uint64_t)(a2)).i)); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a11); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t11) = maclo_ + machi_ * 256; } while (0); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a22); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t22) = maclo_ + machi_ * 256; } while (0); do { rc_vec4_type_ accvhi4_, accvlo4_; uint64_t machi_, maclo_; do { typedef union { rc_vec_t v_; struct { rc_vec4_type_ hi_, lo_; } hilo_; } RC_hl_type_; RC_hl_type_ hl_ = (RC_hl_type_) (a12); (accvhi4_) = hl_.hilo_.hi_; (accvlo4_) = hl_.hilo_.lo_; } while (0); machi_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvhi4_)).i); maclo_ = (((union { rc_vec4_type_ v; uint32_t i; })(uint32_t)(accvlo4_)).i); (t12) = maclo_ + machi_ * 256; } while (0); ((a1) = ((rc_vec_t) {0})); ((a2) = ((rc_vec_t) {0})); ((a11) = ((rc_vec_t) {0})); ((a22) = ((rc_vec_t) {0})); ((a12) = ((rc_vec_t) {0})); (s1) += t1; (s2) += t2; (s11) += t11; (s22) += t22; (s12) += t12; } while (0);
++ }
++ sum[0] = s1;
++ sum[1] = s2;
++ sum[2] = s11;
++ sum[3] = s22;
++ sum[4] = s12;
++ ;
++}
+
diff --git a/debian/patches/pr49030.diff b/debian/patches/pr49030.diff
new file mode 100644
index 0000000..d8ad45a
--- /dev/null
+++ b/debian/patches/pr49030.diff
@@ -0,0 +1,438 @@
+# DP: Fix PR target/49030 (ARM), taken from Linaro
+
+2011-10-03 Richard Sandiford <richard.sandiford@linaro.org>
+
+ gcc/
+ Backport from mainline:
+
+ 2011-09-22 Richard Sandiford <richard.sandiford@linaro.org>
+
+ * config/arm/predicates.md (expandable_comparison_operator): New
+ predicate, extracted from...
+ (arm_comparison_operator): ...here.
+ * config/arm/arm.md (cbranchsi4, cbranchsf4, cbranchdf4, cbranchdi4)
+ (cstoresi4, cstoresf4, cstoredf4, cstoredi4, movsicc, movsfcc)
+ (movdfcc): Use expandable_comparison_operator.
+
+ gcc/testsuite/
+ Backport from mainline:
+
+ 2011-09-22 Richard Sandiford <richard.sandiford@linaro.org>
+
+ * gcc.target/arm/cmp-1.c: New test.
+ * gcc.target/arm/cmp-2.c: Likewise.
+
+2011-10-03 Richard Sandiford <richard.sandiford@linaro.org>
+
+ gcc/
+ Backport from mainline:
+
+ 2011-09-07 Richard Sandiford <richard.sandiford@linaro.org>
+
+ PR target/49030
+ * config/arm/arm-protos.h (maybe_get_arm_condition_code): Declare.
+ * config/arm/arm.c (maybe_get_arm_condition_code): New function,
+ reusing the old code from get_arm_condition_code. Return ARM_NV
+ for invalid comparison codes.
+ (get_arm_condition_code): Redefine in terms of
+ maybe_get_arm_condition_code.
+ * config/arm/predicates.md (arm_comparison_operator): Use
+ maybe_get_arm_condition_code.
+
+ gcc/testsuite/
+ Backport from mainline:
+
+ 2011-09-07 Richard Sandiford <richard.sandiford@linaro.org>
+
+ PR target/49030
+ * gcc.dg/torture/pr49030.c: New test.
+
+=== modified file 'gcc/config/arm/arm-protos.h'
+--- a/src/gcc/config/arm/arm-protos.h 2011-09-15 09:45:31 +0000
++++ b/src/gcc/config/arm/arm-protos.h 2011-10-03 09:46:40 +0000
+@@ -180,6 +180,7 @@
+ #endif
+ extern int thumb_shiftable_const (unsigned HOST_WIDE_INT);
+ #ifdef RTX_CODE
++extern enum arm_cond_code maybe_get_arm_condition_code (rtx);
+ extern void thumb1_final_prescan_insn (rtx);
+ extern void thumb2_final_prescan_insn (rtx);
+ extern const char *thumb_load_double_from_address (rtx *);
+
+=== modified file 'gcc/config/arm/arm.c'
+--- a/src/gcc/config/arm/arm.c 2011-09-19 07:44:24 +0000
++++ b/src/gcc/config/arm/arm.c 2011-10-03 09:46:40 +0000
+@@ -17494,10 +17494,10 @@
+ decremented/zeroed by arm_asm_output_opcode as the insns are output. */
+
+ /* Returns the index of the ARM condition code string in
+- `arm_condition_codes'. COMPARISON should be an rtx like
+- `(eq (...) (...))'. */
+-static enum arm_cond_code
+-get_arm_condition_code (rtx comparison)
++ `arm_condition_codes', or ARM_NV if the comparison is invalid.
++ COMPARISON should be an rtx like `(eq (...) (...))'. */
++enum arm_cond_code
++maybe_get_arm_condition_code (rtx comparison)
+ {
+ enum machine_mode mode = GET_MODE (XEXP (comparison, 0));
+ enum arm_cond_code code;
+@@ -17521,11 +17521,11 @@
+ case CC_DLTUmode: code = ARM_CC;
+
+ dominance:
+- gcc_assert (comp_code == EQ || comp_code == NE);
+-
+ if (comp_code == EQ)
+ return ARM_INVERSE_CONDITION_CODE (code);
+- return code;
++ if (comp_code == NE)
++ return code;
++ return ARM_NV;
+
+ case CC_NOOVmode:
+ switch (comp_code)
+@@ -17534,7 +17534,7 @@
+ case EQ: return ARM_EQ;
+ case GE: return ARM_PL;
+ case LT: return ARM_MI;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CC_Zmode:
+@@ -17542,7 +17542,7 @@
+ {
+ case NE: return ARM_NE;
+ case EQ: return ARM_EQ;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CC_Nmode:
+@@ -17550,7 +17550,7 @@
+ {
+ case NE: return ARM_MI;
+ case EQ: return ARM_PL;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CCFPEmode:
+@@ -17575,7 +17575,7 @@
+ /* UNEQ and LTGT do not have a representation. */
+ case UNEQ: /* Fall through. */
+ case LTGT: /* Fall through. */
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CC_SWPmode:
+@@ -17591,7 +17591,7 @@
+ case GTU: return ARM_CC;
+ case LEU: return ARM_CS;
+ case LTU: return ARM_HI;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CC_Cmode:
+@@ -17599,7 +17599,7 @@
+ {
+ case LTU: return ARM_CS;
+ case GEU: return ARM_CC;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CC_CZmode:
+@@ -17611,7 +17611,7 @@
+ case GTU: return ARM_HI;
+ case LEU: return ARM_LS;
+ case LTU: return ARM_CC;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CC_NCVmode:
+@@ -17621,7 +17621,7 @@
+ case LT: return ARM_LT;
+ case GEU: return ARM_CS;
+ case LTU: return ARM_CC;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ case CCmode:
+@@ -17637,13 +17637,22 @@
+ case GTU: return ARM_HI;
+ case LEU: return ARM_LS;
+ case LTU: return ARM_CC;
+- default: gcc_unreachable ();
++ default: return ARM_NV;
+ }
+
+ default: gcc_unreachable ();
+ }
+ }
+
++/* Like maybe_get_arm_condition_code, but never return ARM_NV. */
++static enum arm_cond_code
++get_arm_condition_code (rtx comparison)
++{
++ enum arm_cond_code code = maybe_get_arm_condition_code (comparison);
++ gcc_assert (code != ARM_NV);
++ return code;
++}
++
+ /* Tell arm_asm_output_opcode to output IT blocks for conditionally executed
+ instructions. */
+ void
+
+=== modified file 'gcc/config/arm/arm.md'
+--- a/src/gcc/config/arm/arm.md 2011-09-12 14:14:00 +0000
++++ b/src/gcc/config/arm/arm.md 2011-10-03 09:47:33 +0000
+@@ -6543,7 +6543,7 @@
+
+ (define_expand "cbranchsi4"
+ [(set (pc) (if_then_else
+- (match_operator 0 "arm_comparison_operator"
++ (match_operator 0 "expandable_comparison_operator"
+ [(match_operand:SI 1 "s_register_operand" "")
+ (match_operand:SI 2 "nonmemory_operand" "")])
+ (label_ref (match_operand 3 "" ""))
+@@ -6594,7 +6594,7 @@
+
+ (define_expand "cbranchsf4"
+ [(set (pc) (if_then_else
+- (match_operator 0 "arm_comparison_operator"
++ (match_operator 0 "expandable_comparison_operator"
+ [(match_operand:SF 1 "s_register_operand" "")
+ (match_operand:SF 2 "arm_float_compare_operand" "")])
+ (label_ref (match_operand 3 "" ""))
+@@ -6606,7 +6606,7 @@
+
+ (define_expand "cbranchdf4"
+ [(set (pc) (if_then_else
+- (match_operator 0 "arm_comparison_operator"
++ (match_operator 0 "expandable_comparison_operator"
+ [(match_operand:DF 1 "s_register_operand" "")
+ (match_operand:DF 2 "arm_float_compare_operand" "")])
+ (label_ref (match_operand 3 "" ""))
+@@ -6618,7 +6618,7 @@
+
+ (define_expand "cbranchdi4"
+ [(set (pc) (if_then_else
+- (match_operator 0 "arm_comparison_operator"
++ (match_operator 0 "expandable_comparison_operator"
+ [(match_operand:DI 1 "cmpdi_operand" "")
+ (match_operand:DI 2 "cmpdi_operand" "")])
+ (label_ref (match_operand 3 "" ""))
+@@ -7473,7 +7473,7 @@
+
+ (define_expand "cstoresi4"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+- (match_operator:SI 1 "arm_comparison_operator"
++ (match_operator:SI 1 "expandable_comparison_operator"
+ [(match_operand:SI 2 "s_register_operand" "")
+ (match_operand:SI 3 "reg_or_int_operand" "")]))]
+ "TARGET_32BIT || TARGET_THUMB1"
+@@ -7609,7 +7609,7 @@
+
+ (define_expand "cstoresf4"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+- (match_operator:SI 1 "arm_comparison_operator"
++ (match_operator:SI 1 "expandable_comparison_operator"
+ [(match_operand:SF 2 "s_register_operand" "")
+ (match_operand:SF 3 "arm_float_compare_operand" "")]))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT"
+@@ -7619,7 +7619,7 @@
+
+ (define_expand "cstoredf4"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+- (match_operator:SI 1 "arm_comparison_operator"
++ (match_operator:SI 1 "expandable_comparison_operator"
+ [(match_operand:DF 2 "s_register_operand" "")
+ (match_operand:DF 3 "arm_float_compare_operand" "")]))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_VFP_SINGLE"
+@@ -7629,7 +7629,7 @@
+
+ (define_expand "cstoredi4"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+- (match_operator:SI 1 "arm_comparison_operator"
++ (match_operator:SI 1 "expandable_comparison_operator"
+ [(match_operand:DI 2 "cmpdi_operand" "")
+ (match_operand:DI 3 "cmpdi_operand" "")]))]
+ "TARGET_32BIT"
+@@ -7749,7 +7749,7 @@
+
+ (define_expand "movsicc"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+- (if_then_else:SI (match_operand 1 "arm_comparison_operator" "")
++ (if_then_else:SI (match_operand 1 "expandable_comparison_operator" "")
+ (match_operand:SI 2 "arm_not_operand" "")
+ (match_operand:SI 3 "arm_not_operand" "")))]
+ "TARGET_32BIT"
+@@ -7769,7 +7769,7 @@
+
+ (define_expand "movsfcc"
+ [(set (match_operand:SF 0 "s_register_operand" "")
+- (if_then_else:SF (match_operand 1 "arm_comparison_operator" "")
++ (if_then_else:SF (match_operand 1 "expandable_comparison_operator" "")
+ (match_operand:SF 2 "s_register_operand" "")
+ (match_operand:SF 3 "nonmemory_operand" "")))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT"
+@@ -7795,7 +7795,7 @@
+
+ (define_expand "movdfcc"
+ [(set (match_operand:DF 0 "s_register_operand" "")
+- (if_then_else:DF (match_operand 1 "arm_comparison_operator" "")
++ (if_then_else:DF (match_operand 1 "expandable_comparison_operator" "")
+ (match_operand:DF 2 "s_register_operand" "")
+ (match_operand:DF 3 "arm_float_add_operand" "")))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP_DOUBLE)"
+
+=== modified file 'gcc/config/arm/predicates.md'
+--- a/src/gcc/config/arm/predicates.md 2011-09-15 09:45:31 +0000
++++ b/src/gcc/config/arm/predicates.md 2011-10-03 09:47:33 +0000
+@@ -242,11 +242,15 @@
+
+ ;; True for integer comparisons and, if FP is active, for comparisons
+ ;; other than LTGT or UNEQ.
++(define_special_predicate "expandable_comparison_operator"
++ (match_code "eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu,
++ unordered,ordered,unlt,unle,unge,ungt"))
++
++;; Likewise, but only accept comparisons that are directly supported
++;; by ARM condition codes.
+ (define_special_predicate "arm_comparison_operator"
+- (ior (match_code "eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu")
+- (and (match_test "TARGET_32BIT && TARGET_HARD_FLOAT
+- && (TARGET_FPA || TARGET_VFP)")
+- (match_code "unordered,ordered,unlt,unle,unge,ungt"))))
++ (and (match_operand 0 "expandable_comparison_operator")
++ (match_test "maybe_get_arm_condition_code (op) != ARM_NV")))
+
+ (define_special_predicate "lt_ge_comparison_operator"
+ (match_code "lt,ge"))
+
+=== added file 'gcc/testsuite/gcc.dg/torture/pr49030.c'
+--- a/src/gcc/testsuite/gcc.dg/torture/pr49030.c 1970-01-01 00:00:00 +0000
++++ b/src/gcc/testsuite/gcc.dg/torture/pr49030.c 2011-10-03 09:46:40 +0000
+@@ -0,0 +1,19 @@
++void
++sample_move_d32u24_sS (char *dst, float *src, unsigned long nsamples,
++ unsigned long dst_skip)
++{
++ long long y;
++ while (nsamples--)
++ {
++ y = (long long) (*src * 8388608.0f) << 8;
++ if (y > 2147483647) {
++ *(int *) dst = 2147483647;
++ } else if (y < -2147483647 - 1) {
++ *(int *) dst = -2147483647 - 1;
++ } else {
++ *(int *) dst = (int) y;
++ }
++ dst += dst_skip;
++ src++;
++ }
++}
+
+=== added file 'gcc/testsuite/gcc.target/arm/cmp-1.c'
+--- a/src/gcc/testsuite/gcc.target/arm/cmp-1.c 1970-01-01 00:00:00 +0000
++++ b/src/gcc/testsuite/gcc.target/arm/cmp-1.c 2011-10-03 09:47:33 +0000
+@@ -0,0 +1,37 @@
++/* { dg-do compile } */
++/* { dg-options "-O" } */
++/* { dg-final { scan-assembler-not "\tbl\t" } } */
++/* { dg-final { scan-assembler-not "__aeabi" } } */
++int x, y;
++
++#define TEST_EXPR(NAME, ARGS, EXPR) \
++ int NAME##1 ARGS { return (EXPR); } \
++ int NAME##2 ARGS { return !(EXPR); } \
++ int NAME##3 ARGS { return (EXPR) ? x : y; } \
++ void NAME##4 ARGS { if (EXPR) x++; } \
++ void NAME##5 ARGS { if (!(EXPR)) x++; }
++
++#define TEST(NAME, TYPE, OPERATOR) \
++ TEST_EXPR (NAME##_rr, (TYPE a1, TYPE a2), a1 OPERATOR a2) \
++ TEST_EXPR (NAME##_rm, (TYPE a1, TYPE *a2), a1 OPERATOR *a2) \
++ TEST_EXPR (NAME##_mr, (TYPE *a1, TYPE a2), *a1 OPERATOR a2) \
++ TEST_EXPR (NAME##_mm, (TYPE *a1, TYPE *a2), *a1 OPERATOR *a2) \
++ TEST_EXPR (NAME##_rc, (TYPE a1), a1 OPERATOR 100) \
++ TEST_EXPR (NAME##_cr, (TYPE a1), 100 OPERATOR a1)
++
++#define TEST_OP(NAME, OPERATOR) \
++ TEST (sc_##NAME, signed char, OPERATOR) \
++ TEST (uc_##NAME, unsigned char, OPERATOR) \
++ TEST (ss_##NAME, short, OPERATOR) \
++ TEST (us_##NAME, unsigned short, OPERATOR) \
++ TEST (si_##NAME, int, OPERATOR) \
++ TEST (ui_##NAME, unsigned int, OPERATOR) \
++ TEST (sll_##NAME, long long, OPERATOR) \
++ TEST (ull_##NAME, unsigned long long, OPERATOR)
++
++TEST_OP (eq, ==)
++TEST_OP (ne, !=)
++TEST_OP (lt, <)
++TEST_OP (gt, >)
++TEST_OP (le, <=)
++TEST_OP (ge, >=)
+
+=== added file 'gcc/testsuite/gcc.target/arm/cmp-2.c'
+--- a/src/gcc/testsuite/gcc.target/arm/cmp-2.c 1970-01-01 00:00:00 +0000
++++ b/src/gcc/testsuite/gcc.target/arm/cmp-2.c 2011-10-03 09:47:33 +0000
+@@ -0,0 +1,49 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_vfp_ok } */
++/* { dg-skip-if "need fp instructions" { *-*-* } { "-mfloat-abi=soft" } { "" } } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=softfp" } */
++/* { dg-final { scan-assembler-not "\tbl\t" } } */
++/* { dg-final { scan-assembler-not "__aeabi" } } */
++int x, y;
++
++#define EQ(X, Y) ((X) == (Y))
++#define NE(X, Y) ((X) != (Y))
++#define LT(X, Y) ((X) < (Y))
++#define GT(X, Y) ((X) > (Y))
++#define LE(X, Y) ((X) <= (Y))
++#define GE(X, Y) ((X) >= (Y))
++
++#define TEST_EXPR(NAME, ARGS, EXPR) \
++ int NAME##1 ARGS { return (EXPR); } \
++ int NAME##2 ARGS { return !(EXPR); } \
++ int NAME##3 ARGS { return (EXPR) ? x : y; } \
++ void NAME##4 ARGS { if (EXPR) x++; } \
++ void NAME##5 ARGS { if (!(EXPR)) x++; }
++
++#define TEST(NAME, TYPE, OPERATOR) \
++ TEST_EXPR (NAME##_rr, (TYPE a1, TYPE a2), OPERATOR (a1, a2)) \
++ TEST_EXPR (NAME##_rm, (TYPE a1, TYPE *a2), OPERATOR (a1, *a2)) \
++ TEST_EXPR (NAME##_mr, (TYPE *a1, TYPE a2), OPERATOR (*a1, a2)) \
++ TEST_EXPR (NAME##_mm, (TYPE *a1, TYPE *a2), OPERATOR (*a1, *a2)) \
++ TEST_EXPR (NAME##_rc, (TYPE a1), OPERATOR (a1, 100)) \
++ TEST_EXPR (NAME##_cr, (TYPE a1), OPERATOR (100, a1))
++
++#define TEST_OP(NAME, OPERATOR) \
++ TEST (f_##NAME, float, OPERATOR) \
++ TEST (d_##NAME, double, OPERATOR) \
++ TEST (ld_##NAME, long double, OPERATOR)
++
++TEST_OP (eq, EQ)
++TEST_OP (ne, NE)
++TEST_OP (lt, LT)
++TEST_OP (gt, GT)
++TEST_OP (le, LE)
++TEST_OP (ge, GE)
++TEST_OP (blt, __builtin_isless)
++TEST_OP (bgt, __builtin_isgreater)
++TEST_OP (ble, __builtin_islessequal)
++TEST_OP (bge, __builtin_isgreaterequal)
++/* This one should be expanded into separate ordered and equality
++ comparisons. */
++TEST_OP (blg, __builtin_islessgreater)
++TEST_OP (bun, __builtin_isunordered)
+
diff --git a/debian/patches/pr49169.diff b/debian/patches/pr49169.diff
new file mode 100644
index 0000000..0f808dc
--- /dev/null
+++ b/debian/patches/pr49169.diff
@@ -0,0 +1,186 @@
+# DP: * Fix PR tree-optimization/49169, optimisations strip the Thumb/ARM mode bit
+# DP: off function pointers (Richard Sandiford).
+
+2011-07-07 Richard Sandiford <richard.sandiford@linaro.org>
+
+ gcc/
+ * builtins.c (get_object_alignment): Fix comment.
+ * fold-const.c (get_pointer_modulus_and_residue): Remove
+ allow_func_align. Use get_object_alignment.
+ (fold_binary_loc): Update caller.
+
+2011-07-07 Richard Sandiford <richard.sandiford@linaro.org>
+
+ gcc/
+ Backport from mainline:
+
+ 2011-06-29 Richard Sandiford <richard.sandiford@linaro.org>
+
+ PR tree-optimization/49545
+ * builtins.c (get_object_alignment_1): Update function comment.
+ Do not use DECL_ALIGN for functions, but test
+ TARGET_PTRMEMFUNC_VBIT_LOCATION instead.
+ * fold-const.c (get_pointer_modulus_and_residue): Don't check
+ for functions here.
+ * tree-ssa-ccp.c (get_value_from_alignment): Likewise.
+
+ gcc/testsuite/
+ Backport from mainline:
+
+ 2011-06-29 Richard Sandiford <richard.sandiford@linaro.org>
+
+ * gcc.dg/torture/pr49169.c: Restrict to ARM and MIPS targets.
+
+2011-07-07 Richard Sandiford <richard.sandiford@linaro.org>
+
+ gcc/
+ Backport from mainline:
+
+ 2011-07-27 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/49169
+ * fold-const.c (get_pointer_modulus_and_residue): Don't rely on
+ the alignment of function decls.
+
+ gcc/testsuite/
+ Backport from mainline:
+
+ 2011-07-27 Michael Hope <michael.hope@linaro.org>
+ Richard Sandiford <richard.sandiford@linaro.org>
+
+ PR tree-optimization/49169
+ * gcc.dg/torture/pr49169.c: New test.
+
+
+=== modified file 'gcc/builtins.c'
+--- a/src/gcc/builtins.c 2011-03-03 21:56:58 +0000
++++ b/src/gcc/builtins.c 2011-07-04 09:52:27 +0000
+@@ -264,7 +264,14 @@
+ }
+
+ /* Return the alignment in bits of EXP, an object.
+- Don't return more than MAX_ALIGN no matter what. */
++ Don't return more than MAX_ALIGN no matter what.
++
++ Note that the address (and thus the alignment) computed here is based
++ on the address to which a symbol resolves, whereas DECL_ALIGN is based
++ on the address at which an object is actually located. These two
++ addresses are not always the same. For example, on ARM targets,
++ the address &foo of a Thumb function foo() has the lowest bit set,
++ whereas foo() itself starts on an even address. */
+
+ unsigned int
+ get_object_alignment (tree exp, unsigned int max_align)
+@@ -286,7 +293,21 @@
+ exp = DECL_INITIAL (exp);
+ if (DECL_P (exp)
+ && TREE_CODE (exp) != LABEL_DECL)
+- align = DECL_ALIGN (exp);
++ {
++ if (TREE_CODE (exp) == FUNCTION_DECL)
++ {
++ /* Function addresses can encode extra information besides their
++ alignment. However, if TARGET_PTRMEMFUNC_VBIT_LOCATION
++ allows the low bit to be used as a virtual bit, we know
++ that the address itself must be 2-byte aligned. */
++ if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn)
++ align = 2 * BITS_PER_UNIT;
++ else
++ align = BITS_PER_UNIT;
++ }
++ else
++ align = DECL_ALIGN (exp);
++ }
+ else if (CONSTANT_CLASS_P (exp))
+ {
+ align = TYPE_ALIGN (TREE_TYPE (exp));
+
+=== modified file 'gcc/fold-const.c'
+--- a/src/gcc/fold-const.c 2011-05-23 20:37:18 +0000
++++ b/src/gcc/fold-const.c 2011-07-04 09:52:27 +0000
+@@ -9232,15 +9232,10 @@
+ 0 <= N < M as is common. In general, the precise value of P is unknown.
+ M is chosen as large as possible such that constant N can be determined.
+
+- Returns M and sets *RESIDUE to N.
+-
+- If ALLOW_FUNC_ALIGN is true, do take functions' DECL_ALIGN_UNIT into
+- account. This is not always possible due to PR 35705.
+- */
++ Returns M and sets *RESIDUE to N. */
+
+ static unsigned HOST_WIDE_INT
+-get_pointer_modulus_and_residue (tree expr, unsigned HOST_WIDE_INT *residue,
+- bool allow_func_align)
++get_pointer_modulus_and_residue (tree expr, unsigned HOST_WIDE_INT *residue)
+ {
+ enum tree_code code;
+
+@@ -9270,9 +9265,8 @@
+ }
+ }
+
+- if (DECL_P (expr)
+- && (allow_func_align || TREE_CODE (expr) != FUNCTION_DECL))
+- return DECL_ALIGN_UNIT (expr);
++ if (DECL_P (expr))
++ return get_object_alignment (expr, ~0U) / BITS_PER_UNIT;
+ }
+ else if (code == POINTER_PLUS_EXPR)
+ {
+@@ -9282,8 +9276,7 @@
+
+ op0 = TREE_OPERAND (expr, 0);
+ STRIP_NOPS (op0);
+- modulus = get_pointer_modulus_and_residue (op0, residue,
+- allow_func_align);
++ modulus = get_pointer_modulus_and_residue (op0, residue);
+
+ op1 = TREE_OPERAND (expr, 1);
+ STRIP_NOPS (op1);
+@@ -11163,8 +11156,7 @@
+ unsigned HOST_WIDE_INT modulus, residue;
+ unsigned HOST_WIDE_INT low = TREE_INT_CST_LOW (arg1);
+
+- modulus = get_pointer_modulus_and_residue (arg0, &residue,
+- integer_onep (arg1));
++ modulus = get_pointer_modulus_and_residue (arg0, &residue);
+
+ /* This works because modulus is a power of 2. If this weren't the
+ case, we'd have to replace it by its greatest power-of-2
+
+=== added file 'gcc/testsuite/gcc.dg/torture/pr49169.c'
+--- a/src/gcc/testsuite/gcc.dg/torture/pr49169.c 1970-01-01 00:00:00 +0000
++++ b/src/gcc/testsuite/gcc.dg/torture/pr49169.c 2011-06-29 09:46:06 +0000
+@@ -0,0 +1,15 @@
++/* { dg-do compile { target { arm*-*-* || mips*-*-* } } } */
++
++#include <stdlib.h>
++#include <stdint.h>
++
++int
++main (void)
++{
++ void *p = main;
++ if ((intptr_t) p & 1)
++ abort ();
++ return 0;
++}
++
++/* { dg-final { scan-assembler "abort" } } */
+
+=== modified file 'gcc/tree-ssa-ccp.c'
+--- a/src/gcc/tree-ssa-ccp.c 2011-05-05 15:42:22 +0000
++++ b/src/gcc/tree-ssa-ccp.c 2011-06-29 09:46:06 +0000
+@@ -522,10 +522,6 @@
+ val = bit_value_binop (PLUS_EXPR, TREE_TYPE (expr),
+ TREE_OPERAND (base, 0), TREE_OPERAND (base, 1));
+ else if (base
+- /* ??? While function decls have DECL_ALIGN their addresses
+- may encode extra information in the lower bits on some
+- targets (PR47239). Simply punt for function decls for now. */
+- && TREE_CODE (base) != FUNCTION_DECL
+ && ((align = get_object_alignment (base, BIGGEST_ALIGNMENT))
+ > BITS_PER_UNIT))
+ {
+
diff --git a/debian/patches/pr49696.diff b/debian/patches/pr49696.diff
new file mode 100644
index 0000000..8a9b57b
--- /dev/null
+++ b/debian/patches/pr49696.diff
@@ -0,0 +1,74 @@
+2011-10-02 Richard Sandiford <rdsandiford@googlemail.com>
+
+ PR target/49696
+ * config/mips/sync.md (sync_<optab>_12): Allow zero operands.
+ (sync_old_<optab>_12, sync_new_<optab>_12, sync_nand_12): Likewise.
+ (sync_old_nand_12, sync_new_nand_12, test_and_set_12): Likewise.
+
+Index: gcc/config/mips/sync.md
+===================================================================
+--- a/src/gcc/config/mips/sync.md (revision 179430)
++++ b/src/gcc/config/mips/sync.md (revision 179431)
+@@ -136,7 +136,7 @@
+ [(match_operand:SI 1 "register_operand" "d")
+ (match_operand:SI 2 "register_operand" "d")
+ (atomic_hiqi_op:SI (match_dup 0)
+- (match_operand:SI 3 "register_operand" "dJ"))]
++ (match_operand:SI 3 "reg_or_0_operand" "dJ"))]
+ UNSPEC_SYNC_OLD_OP_12))
+ (clobber (match_scratch:SI 4 "=&d"))]
+ "GENERATE_LL_SC"
+@@ -177,7 +177,7 @@
+ [(match_operand:SI 2 "register_operand" "d")
+ (match_operand:SI 3 "register_operand" "d")
+ (atomic_hiqi_op:SI (match_dup 0)
+- (match_operand:SI 4 "register_operand" "dJ"))]
++ (match_operand:SI 4 "reg_or_0_operand" "dJ"))]
+ UNSPEC_SYNC_OLD_OP_12))
+ (clobber (match_scratch:SI 5 "=&d"))]
+ "GENERATE_LL_SC"
+@@ -218,7 +218,7 @@
+ (match_operand:SI 2 "register_operand" "d")
+ (match_operand:SI 3 "register_operand" "d")
+ (atomic_hiqi_op:SI (match_dup 0)
+- (match_operand:SI 4 "register_operand" "dJ"))]
++ (match_operand:SI 4 "reg_or_0_operand" "dJ"))]
+ UNSPEC_SYNC_NEW_OP_12))
+ (set (match_dup 1)
+ (unspec_volatile:SI
+@@ -259,7 +259,7 @@
+ [(match_operand:SI 1 "register_operand" "d")
+ (match_operand:SI 2 "register_operand" "d")
+ (match_dup 0)
+- (match_operand:SI 3 "register_operand" "dJ")]
++ (match_operand:SI 3 "reg_or_0_operand" "dJ")]
+ UNSPEC_SYNC_OLD_OP_12))
+ (clobber (match_scratch:SI 4 "=&d"))]
+ "GENERATE_LL_SC"
+@@ -298,7 +298,7 @@
+ (unspec_volatile:SI
+ [(match_operand:SI 2 "register_operand" "d")
+ (match_operand:SI 3 "register_operand" "d")
+- (match_operand:SI 4 "register_operand" "dJ")]
++ (match_operand:SI 4 "reg_or_0_operand" "dJ")]
+ UNSPEC_SYNC_OLD_OP_12))
+ (clobber (match_scratch:SI 5 "=&d"))]
+ "GENERATE_LL_SC"
+@@ -337,7 +337,7 @@
+ [(match_operand:SI 1 "memory_operand" "+R")
+ (match_operand:SI 2 "register_operand" "d")
+ (match_operand:SI 3 "register_operand" "d")
+- (match_operand:SI 4 "register_operand" "dJ")]
++ (match_operand:SI 4 "reg_or_0_operand" "dJ")]
+ UNSPEC_SYNC_NEW_OP_12))
+ (set (match_dup 1)
+ (unspec_volatile:SI
+@@ -546,7 +546,7 @@
+ (set (match_dup 1)
+ (unspec_volatile:SI [(match_operand:SI 2 "register_operand" "d")
+ (match_operand:SI 3 "register_operand" "d")
+- (match_operand:SI 4 "arith_operand" "dJ")]
++ (match_operand:SI 4 "reg_or_0_operand" "dJ")]
+ UNSPEC_SYNC_EXCHANGE_12))]
+ "GENERATE_LL_SC"
+ { return mips_output_sync_loop (insn, operands); }
diff --git a/debian/patches/pr49756.diff b/debian/patches/pr49756.diff
new file mode 100644
index 0000000..67d892b
--- /dev/null
+++ b/debian/patches/pr49756.diff
@@ -0,0 +1,261 @@
+# DP: Fix PR c++/49756, backport from trunk
+
+gcc/
+
+2011-07-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/49756
+ * gcc.c (main): Call stack_limit_increase (64MB).
+ * toplev.c (toplev_main): Likewise.
+
+include/
+
+2011-07-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/49756
+ * libiberty.h (stack_limit_increase): New prototype.
+
+libiberty/
+
+2011-07-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/49756
+ * stack-limit.c: New file.
+ * Makefile.in: Regenerate deps.
+ (CFILES): Add stack-limit.c.
+ (REQUIRED_OFILES): Add ./stack-limit.$(objext).
+ * configure.ac (checkfuncs): Add getrlimit and setrlimit.
+ (AC_CHECK_FUNCS): Likewise.
+ * configure: Regenerated.
+ * config.in: Regenerated.
+
+Index: gcc/gcc.c
+===================================================================
+--- a/src/gcc/gcc.c (revision 176616)
++++ b/src/gcc/gcc.c (revision 176617)
+@@ -6156,6 +6156,10 @@
+ signal (SIGCHLD, SIG_DFL);
+ #endif
+
++ /* Parsing and gimplification sometimes need quite large stack.
++ Increase stack size limits if possible. */
++ stack_limit_increase (64 * 1024 * 1024);
++
+ /* Allocate the argument vector. */
+ alloc_args ();
+
+Index: gcc/toplev.c
+===================================================================
+--- a/src/gcc/toplev.c (revision 176616)
++++ b/src/gcc/toplev.c (revision 176617)
+@@ -1911,6 +1911,10 @@
+ int
+ toplev_main (int argc, char **argv)
+ {
++ /* Parsing and gimplification sometimes need quite large stack.
++ Increase stack size limits if possible. */
++ stack_limit_increase (64 * 1024 * 1024);
++
+ expandargv (&argc, &argv);
+
+ /* Initialization of GCC's environment, and diagnostics. */
+Index: include/libiberty.h
+===================================================================
+--- a/src/include/libiberty.h (revision 176616)
++++ b/src/include/libiberty.h (revision 176617)
+@@ -1,7 +1,7 @@
+ /* Function declarations for libiberty.
+
+ Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+- 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
++ 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+
+ Note - certain prototypes declared in this header file are for
+ functions whoes implementation copyright does not belong to the
+@@ -637,6 +637,9 @@
+ /* Set the title of a process */
+ extern void setproctitle (const char *name, ...);
+
++/* Increase stack limit if possible. */
++extern void stack_limit_increase (unsigned long);
++
+ #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
+
+ /* Drastically simplified alloca configurator. If we're using GCC,
+Index: libiberty/configure.ac
+===================================================================
+--- a/src/libiberty/configure.ac (revision 176616)
++++ b/src/libiberty/configure.ac (revision 176617)
+@@ -358,10 +358,10 @@
+
+ vars="sys_errlist sys_nerr sys_siglist"
+
+-checkfuncs="__fsetlocking canonicalize_file_name dup3 getrusage getsysinfo \
+- gettimeofday on_exit psignal pstat_getdynamic pstat_getstatic realpath \
+- sbrk spawnve spawnvpe strerror strsignal sysconf sysctl sysmp table \
+- times wait3 wait4"
++checkfuncs="__fsetlocking canonicalize_file_name dup3 getrlimit getrusage \
++ getsysinfo gettimeofday on_exit psignal pstat_getdynamic pstat_getstatic \
++ realpath setrlimit sbrk spawnve spawnvpe strerror strsignal sysconf sysctl \
++ sysmp table times wait3 wait4"
+
+ # These are neither executed nor required, but they help keep
+ # autoheader happy without adding a bunch of text to acconfig.h.
+@@ -371,13 +371,13 @@
+ calloc canonicalize_file_name clock \
+ dup3 \
+ ffs __fsetlocking \
+- getcwd getpagesize getrusage getsysinfo gettimeofday \
++ getcwd getpagesize getrlimit getrusage getsysinfo gettimeofday \
+ index insque \
+ memchr memcmp memcpy memmem memmove memset mkstemps \
+ on_exit \
+ psignal pstat_getdynamic pstat_getstatic putenv \
+ random realpath rename rindex \
+- sbrk setenv setproctitle sigsetmask snprintf spawnve spawnvpe \
++ sbrk setenv setproctitle setrlimit sigsetmask snprintf spawnve spawnvpe \
+ stpcpy stpncpy strcasecmp strchr strdup \
+ strerror strncasecmp strndup strrchr strsignal strstr strtod strtol \
+ strtoul strverscmp sysconf sysctl sysmp \
+Index: libiberty/Makefile.in
+===================================================================
+--- a/src/libiberty/Makefile.in (revision 176616)
++++ b/src/libiberty/Makefile.in (revision 176617)
+@@ -2,7 +2,7 @@
+ # Originally written by K. Richard Pixley <rich@cygnus.com>.
+ #
+ # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+-# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
++# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+ # Free Software Foundation
+ #
+ # This file is part of the libiberty library.
+@@ -148,10 +148,10 @@
+ simple-object.c simple-object-coff.c simple-object-elf.c \
+ simple-object-mach-o.c \
+ snprintf.c sort.c \
+- spaces.c splay-tree.c stpcpy.c stpncpy.c strcasecmp.c \
+- strchr.c strdup.c strerror.c strncasecmp.c strncmp.c \
+- strrchr.c strsignal.c strstr.c strtod.c strtol.c strtoul.c \
+- strndup.c strverscmp.c \
++ spaces.c splay-tree.c stack-limit.c stpcpy.c stpncpy.c \
++ strcasecmp.c strchr.c strdup.c strerror.c strncasecmp.c \
++ strncmp.c strrchr.c strsignal.c strstr.c strtod.c strtol.c \
++ strtoul.c strndup.c strverscmp.c \
+ tmpnam.c \
+ unlink-if-ordinary.c \
+ vasprintf.c vfork.c vfprintf.c vprintf.c vsnprintf.c vsprintf.c \
+@@ -183,7 +183,8 @@
+ ./simple-object.$(objext) ./simple-object-coff.$(objext) \
+ ./simple-object-elf.$(objext) ./simple-object-mach-o.$(objext) \
+ ./sort.$(objext) ./spaces.$(objext) \
+- ./splay-tree.$(objext) ./strerror.$(objext) \
++ ./splay-tree.$(objext) ./stack-limit.$(objext) \
++ ./strerror.$(objext) \
+ ./strsignal.$(objext) ./unlink-if-ordinary.$(objext) \
+ ./xatexit.$(objext) ./xexit.$(objext) ./xmalloc.$(objext) \
+ ./xmemdup.$(objext) ./xstrdup.$(objext) ./xstrerror.$(objext) \
+@@ -1033,6 +1034,12 @@
+ else true; fi
+ $(COMPILE.c) $(srcdir)/splay-tree.c $(OUTPUT_OPTION)
+
++./stack-limit.$(objext): $(srcdir)/stack-limit.c config.h
++ if [ x"$(PICFLAG)" != x ]; then \
++ $(COMPILE.c) $(PICFLAG) $(srcdir)/stack-limit.c -o pic/$@; \
++ else true; fi
++ $(COMPILE.c) $(srcdir)/stack-limit.c $(OUTPUT_OPTION)
++
+ ./stpcpy.$(objext): $(srcdir)/stpcpy.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/stpcpy.c -o pic/$@; \
+Index: libiberty/config.in
+===================================================================
+--- a/src/libiberty/config.in (revision 176616)
++++ a/src/libiberty/config.in (revision 176617)
+@@ -109,6 +109,9 @@
+ /* Define to 1 if you have the `getpagesize' function. */
+ #undef HAVE_GETPAGESIZE
+
++/* Define to 1 if you have the `getrlimit' function. */
++#undef HAVE_GETRLIMIT
++
+ /* Define to 1 if you have the `getrusage' function. */
+ #undef HAVE_GETRUSAGE
+
+@@ -205,6 +208,9 @@
+ /* Define to 1 if you have the `setproctitle' function. */
+ #undef HAVE_SETPROCTITLE
+
++/* Define to 1 if you have the `setrlimit' function. */
++#undef HAVE_SETRLIMIT
++
+ /* Define to 1 if you have the `sigsetmask' function. */
+ #undef HAVE_SIGSETMASK
+
+Index: libiberty/stack-limit.c
+===================================================================
+--- a/src/libiberty/stack-limit.c (revision 0)
++++ b/src/libiberty/stack-limit.c (revision 176622)
+@@ -0,0 +1,62 @@
++/* Increase stack size limit if possible.
++ Copyright (C) 2011 Free Software Foundation, Inc.
++
++This file is part of the libiberty library. This library is free
++software; you can redistribute it and/or modify it under the
++terms of the GNU General Public License as published by the
++Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++This library is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU CC; see the file COPYING. If not, write to
++the Free Software Foundation, 51 Franklin Street - Fifth Floor,
++Boston, MA 02110-1301, USA.
++
++As a special exception, if you link this library with files
++compiled with a GNU compiler to produce an executable, this does not cause
++the resulting executable to be covered by the GNU General Public License.
++This exception does not however invalidate any other reasons why
++the executable file might be covered by the GNU General Public License. */
++
++/*
++
++@deftypefn Extension void stack_limit_increase (unsigned long @var{pref})
++
++Attempt to increase stack size limit to @var{pref} bytes if possible.
++
++@end deftypefn
++
++*/
++
++#include "config.h"
++
++#ifdef HAVE_STDINT_H
++#include <stdint.h>
++#endif
++#ifdef HAVE_SYS_RESOURCE_H
++#include <sys/resource.h>
++#endif
++
++void
++stack_limit_increase (unsigned long pref)
++{
++#if defined(HAVE_SETRLIMIT) && defined(HAVE_GETRLIMIT) \
++ && defined(RLIMIT_STACK) && defined(RLIM_INFINITY)
++ struct rlimit rlim;
++ if (getrlimit (RLIMIT_STACK, &rlim) == 0
++ && rlim.rlim_cur != RLIM_INFINITY
++ && rlim.rlim_cur < pref
++ && (rlim.rlim_max == RLIM_INFINITY || rlim.rlim_cur < rlim.rlim_max))
++ {
++ rlim.rlim_cur = pref;
++ if (rlim.rlim_max != RLIM_INFINITY && rlim.rlim_cur > rlim.rlim_max)
++ rlim.rlim_cur = rlim.rlim_max;
++ setrlimit (RLIMIT_STACK, &rlim);
++ }
++#endif
++}
diff --git a/debian/patches/pr49940.diff b/debian/patches/pr49940.diff
new file mode 100644
index 0000000..497009c
--- /dev/null
+++ b/debian/patches/pr49940.diff
@@ -0,0 +1,26 @@
+# DP: Apply proposed patch for PR ada/49940.
+
+# This patch consists in copying the declaration (and import) of lwp_self from
+# s-osint-freebsd.ads to s-osint-kfreebsd-gnu.ads.
+
+Index: b/src/gcc/ada/s-osinte-kfreebsd-gnu.ads
+===================================================================
+--- a/src/gcc/ada/s-osinte-kfreebsd-gnu.ads
++++ b/src/gcc/ada/s-osinte-kfreebsd-gnu.ads
+@@ -238,6 +254,16 @@
+ function getpid return pid_t;
+ pragma Import (C, getpid, "getpid");
+
++ ---------
++ -- LWP --
++ ---------
++
++ function lwp_self return System.Address;
++ -- lwp_self does not exist on this thread library, revert to pthread_self
++ -- which is the closest approximation (with getpid). This function is
++ -- needed to share 7staprop.adb across POSIX-like targets.
++ pragma Import (C, lwp_self, "pthread_self");
++
+ -------------
+ -- Threads --
+ -------------
diff --git a/debian/patches/pr49944.diff b/debian/patches/pr49944.diff
new file mode 100644
index 0000000..e0475f9
--- /dev/null
+++ b/debian/patches/pr49944.diff
@@ -0,0 +1,250 @@
+# DP: apply proposed patch for PR ada/49444.
+# Status: submitted upstream
+
+2011-08-05 Ludovic Brenta <ludovic@ludovic-brenta.org>
+
+ PR ada/49944
+ * s-osinte-freebsd.ads: Update copyright years. Minor reformatting.
+ (Stack_Base_Available): Correct comments.
+ * s-osinte-kfreebsd-gnu.ads (Time_Slice_Supported, nanosleep,
+ clock_id_t, clock_gettime, Stack_Base_Available, Get_Page_Size,
+ mprotect, pthread_mutexattr_setprotocol, pthread_mutexattr_getprotocol,
+ pthread_mutexattr_setprioceiling, pthread_mutexattr_getprioceiling,
+ pthread_attr_setscope, pthread_attr_getscope,
+ pthread_attr_setinheritsched, pthread_attr_getinheritsched,
+ Time_Slice_Supported): Copy from s-osinte-freebsd.ads.
+
+Index: b/src/gcc/ada/s-osinte-kfreebsd-gnu.ads
+===================================================================
+--- a/src/gcc/ada/s-osinte-kfreebsd-gnu.ads
++++ b/src/gcc/ada/s-osinte-kfreebsd-gnu.ads
+@@ -7,7 +7,7 @@
+ -- S p e c --
+ -- --
+ -- Copyright (C) 1991-1994, Florida State University --
+--- Copyright (C) 1995-2005,2008 Free Software Foundation, Inc. --
++-- Copyright (C) 1995-2011, 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- --
+@@ -32,7 +32,7 @@
+ -- --
+ ------------------------------------------------------------------------------
+
+--- This is the GNU/kFreeBSD (GNU/LinuxThreads) version of this package
++-- This is the GNU/kFreeBSD (POSIX Threads) version of this package
+
+ -- This package encapsulates all direct interfaces to OS services
+ -- that are needed by children of System.
+@@ -200,8 +200,24 @@
+ -- Time --
+ ----------
+
++ Time_Slice_Supported : constant Boolean := True;
++ -- Indicates whether time slicing is supported (i.e SCHED_RR is supported)
++
+ type timespec is private;
+
++ function nanosleep (rqtp, rmtp : access timespec) return int;
++ pragma Import (C, nanosleep, "nanosleep");
++
++ type clockid_t is private;
++
++ CLOCK_REALTIME : constant clockid_t;
++
++ function clock_gettime
++ (clock_id : clockid_t;
++ tp : access timespec)
++ return int;
++ pragma Import (C, clock_gettime, "clock_gettime");
++
+ function To_Duration (TS : timespec) return Duration;
+ pragma Inline (To_Duration);
+
+@@ -273,6 +289,10 @@
+ type pthread_key_t is private;
+
+ PTHREAD_CREATE_DETACHED : constant := 1;
++ PTHREAD_CREATE_JOINABLE : constant := 0;
++
++ PTHREAD_SCOPE_PROCESS : constant := 0;
++ PTHREAD_SCOPE_SYSTEM : constant := 2;
+
+ -----------
+ -- Stack --
+@@ -296,9 +316,29 @@
+ Alternate_Stack_Size : constant := 0;
+ -- No alternate signal stack is used on this platform
+
++ Stack_Base_Available : constant Boolean := False;
++ -- Indicates whether the stack base is available on this target
++
+ function Get_Stack_Base (thread : pthread_t) return Address;
+ pragma Inline (Get_Stack_Base);
+- -- This is a dummy procedure to share some GNULLI files
++ -- returns the stack base of the specified thread. Only call this function
++ -- when Stack_Base_Available is True.
++
++ function Get_Page_Size return size_t;
++ function Get_Page_Size return Address;
++ pragma Import (C, Get_Page_Size, "getpagesize");
++ -- Returns the size of a page
++
++ PROT_NONE : constant := 0;
++ PROT_READ : constant := 1;
++ PROT_WRITE : constant := 2;
++ PROT_EXEC : constant := 4;
++ PROT_ALL : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
++ PROT_ON : constant := PROT_NONE;
++ PROT_OFF : constant := PROT_ALL;
++
++ function mprotect (addr : Address; len : size_t; prot : int) return int;
++ pragma Import (C, mprotect);
+
+ ---------------------------------------
+ -- Nonstandard Thread Initialization --
+@@ -387,6 +427,36 @@
+ -- POSIX.1c Section 13 --
+ --------------------------
+
++ PTHREAD_PRIO_NONE : constant := 0;
++ PTHREAD_PRIO_PROTECT : constant := 2;
++ PTHREAD_PRIO_INHERIT : constant := 1;
++
++ function pthread_mutexattr_setprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : int) return int;
++ pragma Import
++ (C, pthread_mutexattr_setprotocol, "pthread_mutexattr_setprotocol");
++
++ function pthread_mutexattr_getprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : access int) return int;
++ pragma Import
++ (C, pthread_mutexattr_getprotocol, "pthread_mutexattr_getprotocol");
++
++ function pthread_mutexattr_setprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : int) return int;
++ pragma Import
++ (C, pthread_mutexattr_setprioceiling,
++ "pthread_mutexattr_setprioceiling");
++
++ function pthread_mutexattr_getprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : access int) return int;
++ pragma Import
++ (C, pthread_mutexattr_getprioceiling,
++ "pthread_mutexattr_getprioceiling");
++
+ type struct_sched_param is record
+ sched_priority : int; -- scheduling priority
+ end record;
+@@ -398,6 +468,28 @@
+ param : access struct_sched_param) return int;
+ pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
+
++ function pthread_attr_setscope
++ (attr : access pthread_attr_t;
++ contentionscope : int) return int;
++ pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
++
++ function pthread_attr_getscope
++ (attr : access pthread_attr_t;
++ contentionscope : access int) return int;
++ pragma Import (C, pthread_attr_getscope, "pthread_attr_getscope");
++
++ function pthread_attr_setinheritsched
++ (attr : access pthread_attr_t;
++ inheritsched : int) return int;
++ pragma Import
++ (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
++
++ function pthread_attr_getinheritsched
++ (attr : access pthread_attr_t;
++ inheritsched : access int) return int;
++ pragma Import
++ (C, pthread_attr_getinheritsched, "pthread_attr_getinheritsched");
++
+ function pthread_attr_setschedpolicy
+ (attr : access pthread_attr_t;
+ policy : int) return int;
+@@ -508,6 +600,9 @@
+ end record;
+ pragma Convention (C, timespec);
+
++ type clockid_t is new int;
++ CLOCK_REALTIME : constant clockid_t := 0;
++
+ type pthread_attr_t is record
+ detachstate : int;
+ schedpolicy : int;
+Index: b/src/gcc/ada/gcc-interface/Makefile.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -1125,9 +1125,7 @@
+ s-osinte.adb<s-osinte-posix.adb \
+ s-osinte.ads<s-osinte-kfreebsd-gnu.ads \
+ s-osprim.adb<s-osprim-posix.adb \
+- s-taprop.adb<s-taprop-linux.adb \
+- s-tasinf.ads<s-tasinf-linux.ads \
+- s-tasinf.adb<s-tasinf-linux.adb \
++ s-taprop.adb<s-taprop-posix.adb \
+ s-taspri.ads<s-taspri-posix.ads \
+ s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
+ system.ads<system-freebsd-x86.ads
+@@ -1153,9 +1151,7 @@
+ s-osinte.adb<s-osinte-posix.adb \
+ s-osinte.ads<s-osinte-kfreebsd-gnu.ads \
+ s-osprim.adb<s-osprim-posix.adb \
+- s-taprop.adb<s-taprop-linux.adb \
+- s-tasinf.ads<s-tasinf-linux.ads \
+- s-tasinf.adb<s-tasinf-linux.adb \
++ s-taprop.adb<s-taprop-posix.adb \
+ s-taspri.ads<s-taspri-posix.ads \
+ s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
+ system.ads<system-freebsd-x86_64.ads
+Index: b/src/gcc/ada/s-osinte-freebsd.ads
+===================================================================
+--- a/src/gcc/ada/s-osinte-freebsd.ads
++++ b/src/gcc/ada/s-osinte-freebsd.ads
+@@ -7,7 +7,7 @@
+ -- S p e c --
+ -- --
+ -- Copyright (C) 1991-1994, Florida State University --
+--- Copyright (C) 1995-2009, Free Software Foundation, Inc. --
++-- Copyright (C) 1995-2011, 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- --
+@@ -33,7 +33,7 @@
+ -- --
+ ------------------------------------------------------------------------------
+
+--- This is the FreeBSD PTHREADS version of this package
++-- This is the FreeBSD (POSIX Threads) version of this package
+
+ -- This package encapsulates all direct interfaces to OS services
+ -- that are needed by the tasking run-time (libgnarl).
+@@ -199,7 +199,7 @@
+
+ type timespec is private;
+
+- function nanosleep (rqtp, rmtp : access timespec) return int;
++ function nanosleep (rqtp, rmtp : access timespec) return int;
+ pragma Import (C, nanosleep, "nanosleep");
+
+ type clockid_t is private;
+@@ -313,10 +313,7 @@
+ -- No alternate signal stack is used on this platform
+
+ Stack_Base_Available : constant Boolean := False;
+- -- Indicates whether the stack base is available on this target. This
+- -- allows us to share s-osinte.adb between all the FSU run time. Note that
+- -- this value can only be true if pthread_t has a complete definition that
+- -- corresponds exactly to the C header files.
++ -- Indicates whether the stack base is available on this target
+
+ function Get_Stack_Base (thread : pthread_t) return Address;
+ pragma Inline (Get_Stack_Base);
diff --git a/debian/patches/pr50114.diff b/debian/patches/pr50114.diff
new file mode 100644
index 0000000..18db684
--- /dev/null
+++ b/debian/patches/pr50114.diff
@@ -0,0 +1,59 @@
+# DP: Fix PR c++/50114, backport from trunk.
+
+gcc/testsuite/
+
+2011-08-30 Jason Merrill <jason@redhat.com>
+
+ PR c++/50114
+ * g++.dg/cpp0x/lambda/lambda-for.C: New.
+
+cp/
+
+2011-08-30 Jason Merrill <jason@redhat.com>
+
+ PR c++/50114
+ * decl.c (poplevel): Disable for scope compatibility hack
+ in C++11 mode.
+
+Index: gcc/testsuite/g++.dg/ext/forscope2.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/ext/forscope2.C (revision 178337)
++++ b/src/gcc/testsuite/g++.dg/ext/forscope2.C (revision 178338)
+@@ -1,5 +1,5 @@
+ // { dg-do compile }
+-// { dg-options -fpermissive }
++// { dg-options "-fpermissive -std=c++98" }
+
+ // Copyright (C) 2001 Free Software Foundation, Inc.
+ // Contributed by Nathan Sidwell 4 Sept 2001 <nathan@codesourcery.com>
+Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C (revision 0)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C (revision 178338)
+@@ -0,0 +1,12 @@
++// PR c++/50114
++// { dg-options "-std=c++0x -w" }
++
++int open()
++{
++ int *x2feed_i = 0;
++ auto insert_feed = [&](unsigned char venue, int* newfeed)
++ {
++ for(int x2feed_i = 1; 0; ) ;
++ x2feed_i = newfeed;
++ };
++}
+Index: gcc/cp/decl.c
+===================================================================
+--- a/src/gcc/cp/decl.c (revision 178337)
++++ b/src/gcc/cp/decl.c (revision 178338)
+@@ -643,6 +643,9 @@
+ for (link = decls; link; link = TREE_CHAIN (link))
+ {
+ if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
++ /* It's hard to make this ARM compatibility hack play nicely with
++ lambdas, and it really isn't necessary in C++11 mode. */
++ && cxx_dialect < cxx0x
+ && DECL_NAME (link))
+ {
+ tree name = DECL_NAME (link);
diff --git a/debian/patches/pr50193.diff b/debian/patches/pr50193.diff
new file mode 100644
index 0000000..aefa529
--- /dev/null
+++ b/debian/patches/pr50193.diff
@@ -0,0 +1,112 @@
+# DP: Fix PR target/50193 (ARM), taken from Linaro.
+
+2011-10-13 Andrew Stubbs <ams@codesourcery.com>
+
+ Backport from mainline:
+
+ 2011-10-07 Andrew Stubbs <ams@codesourcery.com>
+
+ gcc/
+ * config/arm/predicates.md (shift_amount_operand): Remove constant
+ range check.
+ (shift_operator): Check range of constants for all shift operators.
+
+ gcc/testsuite/
+ * gcc.dg/pr50193-1.c: New file.
+ * gcc.target/arm/shiftable.c: New file.
+
+
+=== modified file 'gcc/config/arm/predicates.md'
+--- a/src/gcc/config/arm/predicates.md 2011-10-03 09:47:33 +0000
++++ b/src/gcc/config/arm/predicates.md 2011-10-10 11:43:28 +0000
+@@ -219,13 +220,20 @@
+ (match_test "mode == GET_MODE (op)")))
+
+ ;; True for shift operators.
++;; Notes:
++;; * mult is only permitted with a constant shift amount
++;; * patterns that permit register shift amounts only in ARM mode use
++;; shift_amount_operand, patterns that always allow registers do not,
++;; so we don't have to worry about that sort of thing here.
+ (define_special_predicate "shift_operator"
+ (and (ior (ior (and (match_code "mult")
+ (match_test "power_of_two_operand (XEXP (op, 1), mode)"))
+ (and (match_code "rotate")
+ (match_test "GET_CODE (XEXP (op, 1)) == CONST_INT
+ && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1))) < 32")))
+- (match_code "ashift,ashiftrt,lshiftrt,rotatert"))
++ (and (match_code "ashift,ashiftrt,lshiftrt,rotatert")
++ (match_test "GET_CODE (XEXP (op, 1)) != CONST_INT
++ || ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1))) < 32")))
+ (match_test "mode == GET_MODE (op)")))
+
+ ;; True for MULT, to identify which variant of shift_operator is in use.
+
+=== added file 'gcc/testsuite/gcc.target/arm/shiftable.c'
+--- a/src/gcc/testsuite/gcc.target/arm/shiftable.c 1970-01-01 00:00:00 +0000
++++ b/src/gcc/testsuite/gcc.target/arm/shiftable.c 2011-10-10 11:43:28 +0000
+@@ -0,0 +1,63 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-require-effective-target arm32 } */
++
++/* ARM has shift-and-alu insns. Depending on the ALU op GCC represents some
++ of these as a left shift, others as a multiply. Check that we match the
++ right one. */
++
++int
++plus (int a, int b)
++{
++ return (a * 64) + b;
++}
++
++/* { dg-final { scan-assembler "add.*\[al]sl #6" } } */
++
++int
++minus (int a, int b)
++{
++ return a - (b * 64);
++}
++
++/* { dg-final { scan-assembler "sub.*\[al]sl #6" } } */
++
++int
++ior (int a, int b)
++{
++ return (a * 64) | b;
++}
++
++/* { dg-final { scan-assembler "orr.*\[al]sl #6" } } */
++
++int
++xor (int a, int b)
++{
++ return (a * 64) ^ b;
++}
++
++/* { dg-final { scan-assembler "eor.*\[al]sl #6" } } */
++
++int
++and (int a, int b)
++{
++ return (a * 64) & b;
++}
++
++/* { dg-final { scan-assembler "and.*\[al]sl #6" } } */
++
++int
++rsb (int a, int b)
++{
++ return (a * 64) - b;
++}
++
++/* { dg-final { scan-assembler "rsb.*\[al]sl #6" } } */
++
++int
++mvn (int a, int b)
++{
++ return ~(a * 64);
++}
++
++/* { dg-final { scan-assembler "mvn.*\[al]sl #6" } } */
+
diff --git a/debian/patches/rename-info-files.diff b/debian/patches/rename-info-files.diff
new file mode 100644
index 0000000..c8f8252
--- /dev/null
+++ b/debian/patches/rename-info-files.diff
@@ -0,0 +1,546 @@
+# DP: Allow transformations on info file names. Reference the
+# DP: transformed info file names in the texinfo files.
+
+
+2004-02-17 Matthias Klose <doko@debian.org>
+
+gcc/ChangeLog:
+ * Makefile.in: Allow transformations on info file names.
+ Define MAKEINFODEFS, macros to pass transformated info file
+ names to makeinfo.
+ * doc/cpp.texi: Use macros defined in MAKEINFODEFS for references.
+ * doc/cppinternals.texi: Likewise.
+ * doc/extend.texi: Likewise.
+ * doc/gcc.texi: Likewise.
+ * doc/gccint.texi: Likewise.
+ * doc/invoke.texi: Likewise.
+ * doc/libgcc.texi: Likewise.
+ * doc/makefile.texi: Likewise.
+ * doc/passes.texi: Likewise.
+ * doc/sourcebuild.texi: Likewise.
+ * doc/standards.texi: Likewise.
+ * doc/trouble.texi: Likewise.
+
+gcc/fortran/ChangeLog:
+ * Make-lang.in: Allow transformations on info file names.
+ Pass macros of transformated info file defined in MAKEINFODEFS
+ names to makeinfo.
+ * gfortran.texi: Use macros defined in MAKEINFODEFS for references.
+
+gcc/java/ChangeLog:
+ * Make-lang.in: Allow transformations on info file names.
+ Pass macros of transformated info file defined in MAKEINFODEFS
+
+--- a/src/gcc/fortran/gfortran.texi
++++ b/src/gcc/fortran/gfortran.texi
+@@ -101,7 +101,7 @@
+ @ifinfo
+ @dircategory Software development
+ @direntry
+-* gfortran: (gfortran). The GNU Fortran Compiler.
++* @value{fngfortran}: (@value{fngfortran}). The GNU Fortran Compiler.
+ @end direntry
+ This file documents the use and the internals of
+ the GNU Fortran compiler, (@command{gfortran}).
+--- a/src/gcc/fortran/Make-lang.in
++++ b/src/gcc/fortran/Make-lang.in
+@@ -116,7 +116,8 @@
+ cd $(srcdir)/fortran; etags -o TAGS.sub *.c *.h; \
+ etags --include TAGS.sub --include ../TAGS.sub
+
+-fortran.info: doc/gfortran.info doc/gfc-internals.info
++INFO_FORTRAN_NAME = $(shell echo gfortran|sed '$(program_transform_name)')
++fortran.info: doc/$(INFO_FORTRAN_NAME).info
+ fortran.dvi: doc/gfortran.dvi doc/gfc-internals.dvi
+
+ F95_HTMLFILES = $(build_htmldir)/gfortran
+@@ -185,10 +186,10 @@
+ $(srcdir)/doc/include/gcc-common.texi \
+ gcc-vers.texi
+
+-doc/gfortran.info: $(GFORTRAN_TEXI)
++doc/$(INFO_FORTRAN_NAME).info: $(GFORTRAN_TEXI)
+ if [ x$(BUILD_INFO) = xinfo ]; then \
+ rm -f doc/gfortran.info-*; \
+- $(MAKEINFO) -I $(srcdir)/doc/include -I $(srcdir)/fortran \
++ $(MAKEINFO) $(MAKEINFODEFS) -I $(srcdir)/doc/include -I $(srcdir)/fortran \
+ -o $@ $<; \
+ else true; fi
+
+@@ -256,7 +257,7 @@
+
+ fortran.install-plugin:
+
+-fortran.install-info: $(DESTDIR)$(infodir)/gfortran.info
++fortran.install-info: $(DESTDIR)$(infodir)/$(INFO_FORTRAN_NAME).info
+
+ fortran.install-man: $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext)
+
+@@ -274,7 +275,7 @@
+ rm -rf $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext); \
+ rm -rf $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext); \
+ rm -rf $(DESTDIR)$(bindir)/$(GFORTRAN_TARGET_INSTALL_NAME)$(exeext); \
+- rm -rf $(DESTDIR)$(infodir)/gfortran.info*
++ rm -rf $(DESTDIR)$(infodir)/$(INFO_FORTRAN_NAME).info*
+
+ #
+ # Clean hooks:
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -4184,8 +4184,27 @@
+
+ doc: $(BUILD_INFO) $(GENERATED_MANPAGES)
+
+-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_GXX_NAME = $(shell echo g++|sed '$(program_transform_name)')
++INFO_GCCINT_NAME = $(shell echo gccint|sed '$(program_transform_name)')
++INFO_GCCINSTALL_NAME = $(shell echo gccinstall|sed '$(program_transform_name)')
++INFO_CPPINT_NAME = $(shell echo cppinternals|sed '$(program_transform_name)')
++
++INFO_FORTRAN_NAME = $(shell echo gfortran|sed '$(program_transform_name)')
++INFO_GCJ_NAME = $(shell echo gcj|sed '$(program_transform_name)')
++
++INFOFILES = doc/$(INFO_CPP_NAME).info doc/$(INFO_GCC_NAME).info \
++ doc/$(INFO_GCCINT_NAME).info \
++ doc/$(INFO_GCCINSTALL_NAME).info doc/$(INFO_CPPINT_NAME).info
++
++MAKEINFODEFS = -D 'fncpp $(INFO_CPP_NAME)' -D 'fngcc $(INFO_GCC_NAME)' \
++ -D 'fngxx $(INFO_GXX_NAME)' \
++ -D 'fngccint $(INFO_GCCINT_NAME)' \
++ -D 'fngccinstall $(INFO_GCCINSTALL_NAME)' \
++ -D 'fncppint $(INFO_CPPINT_NAME)' \
++ -D 'fngfortran $(INFO_FORTRAN_NAME)' \
++ -D 'fngcj $(INFO_GCJ_NAME)'
+
+ info: $(INFOFILES) lang.info @GENINSRC@ srcinfo lang.srcinfo
+
+@@ -4239,21 +4258,41 @@
+ # patterns. To use them, put each of the specific targets with its
+ # specific dependencies but no build commands.
+
+-doc/cpp.info: $(TEXI_CPP_FILES)
+-doc/gcc.info: $(TEXI_GCC_FILES)
+-doc/gccint.info: $(TEXI_GCCINT_FILES)
+-doc/cppinternals.info: $(TEXI_CPPINT_FILES)
+-
++# Generic entry to handle info files, which are not renamed (currently Ada)
+ doc/%.info: %.texi
+ if [ x$(BUILD_INFO) = xinfo ]; then \
+ $(MAKEINFO) $(MAKEINFOFLAGS) -I . -I $(gcc_docdir) \
+ -I $(gcc_docdir)/include -o $@ $<; \
+ fi
+
++doc/$(INFO_CPP_NAME).info: $(TEXI_CPP_FILES)
++ if [ x$(BUILD_INFO) = xinfo ]; then \
++ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
++ -I $(gcc_docdir)/include -o $@ $<; \
++ fi
++
++doc/$(INFO_GCC_NAME).info: $(TEXI_GCC_FILES)
++ if [ x$(BUILD_INFO) = xinfo ]; then \
++ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
++ -I $(gcc_docdir)/include -o $@ $<; \
++ fi
++
++doc/$(INFO_GCCINT_NAME).info: $(TEXI_GCCINT_FILES)
++ if [ x$(BUILD_INFO) = xinfo ]; then \
++ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
++ -I $(gcc_docdir)/include -o $@ $<; \
++ fi
++
++doc/$(INFO_CPPINT_NAME).info: $(TEXI_CPPINT_FILES)
++ if [ x$(BUILD_INFO) = xinfo ]; then \
++ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
++ -I $(gcc_docdir)/include -o $@ $<; \
++ fi
++
+ # Duplicate entry to handle renaming of gccinstall.info
+-doc/gccinstall.info: $(TEXI_GCCINSTALL_FILES)
++doc/$(INFO_GCCINSTALL_NAME).info: $(TEXI_GCCINSTALL_FILES)
+ if [ x$(BUILD_INFO) = xinfo ]; then \
+- $(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir) \
++ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
+ -I $(gcc_docdir)/include -o $@ $<; \
+ fi
+
+@@ -4607,11 +4646,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 \
+ lang.install-info
+
+ $(DESTDIR)$(infodir)/%.info: doc/%.info installdirs
+@@ -4803,8 +4842,11 @@
+ -rm -rf $(DESTDIR)$(bindir)/$(GCOV_INSTALL_NAME)$(exeext)
+ -rm -rf $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext)
+ -rm -rf $(DESTDIR)$(man1dir)/cpp$(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.
+--- a/src/gcc/java/gcj.texi
++++ b/src/gcc/java/gcj.texi
+@@ -55,25 +55,25 @@
+ @format
+ @dircategory Software development
+ @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
+ @direntry
+-* jcf-dump: (gcj)Invoking jcf-dump.
++* jcf-dump: (@value{fngcj}) Invoking jcf-dump.
+ Print information about Java class files
+-* gij: (gcj)Invoking gij. GNU interpreter for Java bytecode
+-* gcj-dbtool: (gcj)Invoking gcj-dbtool.
++* gij: (@value{fngcj}) Invoking gij. GNU interpreter for Java bytecode
++* gcj-dbtool: (@value{fngcj}) Invoking gcj-dbtool.
+ Tool for manipulating class file databases.
+-* jv-convert: (gcj)Invoking jv-convert.
++* jv-convert: (@value{fngcj}) Invoking jv-convert.
+ Convert file from one encoding to another
+-* grmic: (gcj)Invoking grmic.
++* grmic: (@value{fngcj}) Invoking grmic.
+ Generate stubs for Remote Method Invocation.
+-* gc-analyze: (gcj)Invoking gc-analyze.
++* gc-analyze: (@value{fngcj}) Invoking gc-analyze.
+ Analyze Garbage Collector (GC) memory dumps.
+-* aot-compile: (gcj)Invoking aot-compile.
++* aot-compile: (@value{fngcj})Invoking aot-compile.
+ Compile bytecode to native and generate databases.
+-* rebuild-gcj-db: (gcj)Invoking rebuild-gcj-db.
++* rebuild-gcj-db: (@value{fngcj})Invoking rebuild-gcj-db.
+ Merge the per-solib databases made by aot-compile
+ into one system-wide database.
+ @end direntry
+@@ -159,7 +159,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
+--- a/src/gcc/java/Make-lang.in
++++ b/src/gcc/java/Make-lang.in
+@@ -127,11 +127,23 @@
+ etags --include TAGS.sub --include ../TAGS.sub
+
+
+-java.info: doc/gcj.info
++TEXI_GCJ_FILES = java/gcj.texi \
++ $(gcc_docdir)/include/gpl.texi $(gcc_docdir)/include/funding.texi \
++ $(gcc_docdir)/include/fdl.texi $(gcc_docdir)/include/gcc-common.texi gcc-vers.texi
++INFO_GCJ_NAME = $(shell echo gcj|sed '$(program_transform_name)')
+
+-java.srcinfo: doc/gcj.info
++java.info: doc/$(INFO_GCJ_NAME).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$(gcc_docdir)/include -I$(srcdir)/f -o$@ $<; \
++ fi
++
+ java.dvi: doc/gcj.dvi
+
+ JAVA_PDFFILES = doc/gcj.pdf
+@@ -195,7 +207,7 @@
+ -rm -rf $(DESTDIR)$(man1dir)/aot-compile$(man1ext)
+ -rm -rf $(DESTDIR)$(man1dir)/rebuild-gcj-db$(man1ext)
+
+-java.install-info: $(DESTDIR)$(infodir)/gcj.info
++java.install-info: $(DESTDIR)$(infodir)/$(INFO_GCJ_NAME).info
+
+ java.install-pdf: $(JAVA_PDFFILES)
+ @$(NORMAL_INSTALL)
+--- a/src/gcc/ada/gnat-style.texi
++++ b/src/gcc/ada/gnat-style.texi
+@@ -31,7 +31,7 @@
+
+ @dircategory Software development
+ @direntry
+-* gnat-style: (gnat-style). GNAT Coding Style
++* gnat-style: (gnat-style-4.6). GNAT Coding Style
+ @end direntry
+
+ @macro syntax{element}
+--- a/src/gcc/ada/gnat_rm.texi
++++ b/src/gcc/ada/gnat_rm.texi
+@@ -38,7 +38,7 @@
+
+ @dircategory GNU Ada tools
+ @direntry
+-* GNAT Reference Manual: (gnat_rm). Reference Manual for GNU Ada tools.
++* GNAT Reference Manual: (gnat_rm-4.6). Reference Manual for GNU Ada tools.
+ @end direntry
+
+ @titlepage
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -9061,7 +9061,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
+@@ -9069,7 +9069,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
+@@ -18314,7 +18314,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
+@@ -18469,7 +18469,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
+--- a/src/gcc/doc/extend.texi
++++ b/src/gcc/doc/extend.texi
+@@ -13684,7 +13684,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
+ * C++ Volatiles:: What constitutes an access to a volatile object.
+--- a/src/gcc/doc/standards.texi
++++ b/src/gcc/doc/standards.texi
+@@ -287,8 +287,8 @@
+ GNAT Reference Manual}, for information on standard
+ conformance and compatibility of the Ada compiler.
+
+-@xref{Standards,,Standards, gfortran, The GNU Fortran Compiler}, for details
++@xref{Standards,,Standards, @value{fngfortran}, The GNU Fortran Compiler}, for details
+ of standards supported by GNU Fortran.
+
+-@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.
+--- a/src/gcc/doc/libgcc.texi
++++ b/src/gcc/doc/libgcc.texi
+@@ -25,7 +25,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
+--- a/src/gcc/doc/gccint.texi
++++ b/src/gcc/doc/gccint.texi
+@@ -51,7 +51,7 @@
+ @ifnottex
+ @dircategory Software development
+ @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
+@@ -83,7 +83,7 @@
+ @value{VERSION_PACKAGE}
+ @end ifset
+ 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
+--- a/src/gcc/doc/cpp.texi
++++ b/src/gcc/doc/cpp.texi
+@@ -53,7 +53,7 @@
+ @ifinfo
+ @dircategory Software development
+ @direntry
+-* Cpp: (cpp). The GNU C preprocessor.
++* @value{fncpp}: (@value{fncpp}). The GNU C preprocessor.
+ @end direntry
+ @end ifinfo
+
+--- a/src/gcc/doc/passes.texi
++++ b/src/gcc/doc/passes.texi
+@@ -201,7 +201,7 @@
+ @item Mudflap declaration registration
+
+ If mudflap (@pxref{Optimize Options,,-fmudflap -fmudflapth
+--fmudflapir,gcc,Using the GNU Compiler Collection (GCC)}) is
++-fmudflapir,@value{fngcc},Using the GNU Compiler Collection (GCC)}) is
+ enabled, we generate code to register some variable declarations with
+ the mudflap runtime. Specifically, the runtime tracks the lifetimes of
+ those variable declarations that have their addresses taken, or whose
+--- a/src/gcc/doc/gcc.texi
++++ b/src/gcc/doc/gcc.texi
+@@ -65,8 +65,8 @@
+ @ifnottex
+ @dircategory Software development
+ @direntry
+-* gcc: (gcc). The GNU Compiler Collection.
+-* g++: (gcc). The GNU C++ compiler.
++* @value{fngcc}: (@value{fngcc}). The GNU Compiler Collection.
++* @value{fngxx}: (@value{fngcc}). The GNU C++ compiler.
+ @end direntry
+ This file documents the use of the GNU compilers.
+ @sp 1
+@@ -126,7 +126,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.
+--- a/src/gcc/doc/makefile.texi
++++ b/src/gcc/doc/makefile.texi
+@@ -140,7 +140,7 @@
+ Builds a compiler with profiling feedback information. In this case,
+ the second and third stages are named @samp{profile} and @samp{feedback},
+ respectively. For more information, see
+-@ref{Building,,Building with profile feedback,gccinstall,Installing GCC}.
++@ref{Building,,Building with profile feedback,@value{fngccinstall},Installing GCC}.
+
+ @item restrap
+ Restart a bootstrap, so that everything that was not built with
+--- a/src/gcc/doc/install.texi
++++ b/src/gcc/doc/install.texi
+@@ -98,7 +98,7 @@
+ @end ifinfo
+ @dircategory Software development
+ @direntry
+-* gccinstall: (gccinstall). Installing the GNU Compiler Collection.
++* @value{fngccinstall}: (@value{fngccinstall}). Installing the GNU Compiler Collection.
+ @end direntry
+
+ @c Part 3 Titlepage and Copyright
+--- a/src/gcc/doc/cppinternals.texi
++++ b/src/gcc/doc/cppinternals.texi
+@@ -7,7 +7,7 @@
+ @ifinfo
+ @dircategory Software development
+ @direntry
+-* Cpplib: (cppinternals). Cpplib internals.
++* @value{fncppint}: (@value{fncppint}). Cpplib internals.
+ @end direntry
+ @end ifinfo
+
+--- a/src/libgomp/libgomp.texi
++++ b/src/libgomp/libgomp.texi
+@@ -31,7 +31,7 @@
+ @ifinfo
+ @dircategory GNU Libraries
+ @direntry
+-* libgomp: (libgomp). GNU OpenMP runtime library
++* @value{fnlibgomp}: (@value{fnlibgomp}). GNU OpenMP runtime library
+ @end direntry
+
+ This manual documents the GNU implementation of the OpenMP API for
+--- a/src/libgomp/Makefile.in
++++ b/src/libgomp/Makefile.in
+@@ -343,7 +343,8 @@
+
+ # AM_CONDITIONAL on configure check ACX_CHECK_PROG_VER([MAKEINFO])
+ @BUILD_INFO_TRUE@STAMP_BUILD_INFO = stamp-build-info
+-CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) libgomp.info
++INFO_LIBGOMP_NAME = $(shell echo libgomp|sed '$(program_transform_name)')
++CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) $(INFO_LIBGOMP_NAME).info
+ MAINTAINERCLEANFILES = $(srcdir)/libgomp.info
+ all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+@@ -1089,15 +1090,16 @@
+ env.o: libgomp_f.h
+
+ all-local: $(STAMP_GENINSRC)
+-
+-stamp-geninsrc: libgomp.info
+- cp -p $(top_builddir)/libgomp.info $(srcdir)/libgomp.info
++stamp-geninsrc: $(INFO_LIBGOMP_NAME).info
++ cp -p $(top_builddir)/$(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.info
+ @touch $@
+
+-libgomp.info: $(STAMP_BUILD_INFO)
++libgomp.info: $(INFO_LIBGOMP_NAME).info
++ [ "$(INFO_LIBGOMP_NAME).info" = libgomp.info ] || cp $(INFO_LIBGOMP_NAME).info libgomp.info
++$(INFO_LIBGOMP_NAME).info: $(STAMP_BUILD_INFO)
+
+ stamp-build-info: libgomp.texi
+- $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o libgomp.info $(srcdir)/libgomp.texi
++ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -D 'fnlibgomp $(INFO_LIBGOMP_NAME)' -I $(srcdir) -o $(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.texi
+ @touch $@
+
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+--- a/src/libgomp/Makefile.am
++++ b/src/libgomp/Makefile.am
+@@ -111,16 +111,19 @@
+
+ all-local: $(STAMP_GENINSRC)
+
+-stamp-geninsrc: libgomp.info
+- cp -p $(top_builddir)/libgomp.info $(srcdir)/libgomp.info
++INFO_LIBGOMP_NAME = $(shell echo libgomp|sed '$(program_transform_name)')
++stamp-geninsrc: $(INFO_LIBGOMP_NAME).info
++ cp -p $(top_builddir)/$(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.info
+ @touch $@
+
+-libgomp.info: $(STAMP_BUILD_INFO)
++libgomp.info: $(INFO_LIBGOMP_NAME).info
++ cp $(INFO_LIBGOMP_NAME).info libgomp.info
++$(INFO_LIBGOMP_NAME).info: $(STAMP_BUILD_INFO)
+
+ stamp-build-info: libgomp.texi
+- $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o libgomp.info $(srcdir)/libgomp.texi
++ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -D 'fnlibgomp $(INFO_LIBGOMP_NAME)' -I $(srcdir) -o $(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.texi
+ @touch $@
+
+
+-CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) libgomp.info
++CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) $(INFO_LIBGOMP_NAME).info
+ MAINTAINERCLEANFILES = $(srcdir)/libgomp.info
diff --git a/debian/patches/s390-biarch.diff b/debian/patches/s390-biarch.diff
new file mode 100644
index 0000000..0ccb6b6
--- /dev/null
+++ b/debian/patches/s390-biarch.diff
@@ -0,0 +1,24 @@
+# DP: Build a bi-arch compiler on s390-linux-gnu.
+# DP: http://gcc.gnu.org/ml/gcc-patches/2009-03/msg01044.html
+
+2009-03-23 Arthur Loiret <aloiret@debian.org>
+
+ * config.gcc (s390-*-linux*): If 'enabled_targets' is 'all', build
+ a bi-arch compiler defaulting to 31-bit. In this case:
+ (tmake_file): Add s390/t-linux64.
+---
+ gcc/config.gcc | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -2289,6 +2289,9 @@
+ ;;
+ s390-*-linux*)
+ tm_file="s390/s390.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h s390/linux.h"
++ if test x$enable_targets = xall; then
++ tmake_file="${tmake_file} s390/t-linux64"
++ fi
+ ;;
+ s390x-*-linux*)
+ tm_file="s390/s390x.h s390/s390.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h s390/linux.h"
diff --git a/debian/patches/sh4-multilib.diff b/debian/patches/sh4-multilib.diff
new file mode 100644
index 0000000..3ccafca
--- /dev/null
+++ b/debian/patches/sh4-multilib.diff
@@ -0,0 +1,23 @@
+# DP: Fix multilib (m4/m4-nofpu) for sh4-linux
+
+---
+ gcc/config.gcc | 5 +++--
+ 1 files changed, 3 insertions(+), 2 deletions(-)
+
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -2119,11 +2119,12 @@ sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \
+ if test x${sh_multilibs} = x ; then
+ case ${target} in
+ sh64-superh-linux* | \
+- sh[1234]*) sh_multilibs=${sh_cpu_target} ;;
+ sh64* | sh5*) sh_multilibs=m5-32media,m5-32media-nofpu,m5-compact,m5-compact-nofpu,m5-64media,m5-64media-nofpu ;;
+- sh-superh-*) sh_multilibs=m4,m4-single,m4-single-only,m4-nofpu ;;
++ sh-superh-* | \
++ sh4-*-linux*) sh_multilibs=m4,m4-nofpu ;;
+ sh*-*-linux*) sh_multilibs=m1,m3e,m4 ;;
+ sh*-*-netbsd*) sh_multilibs=m3,m3e,m4 ;;
++ sh-superh-*) sh_multilibs=m4,m4-single,m4-single-only,m4-nofpu ;;
+ *) sh_multilibs=m1,m2,m2e,m4,m4-single,m4-single-only,m2a,m2a-single ;;
+ esac
+ if test x$with_fp = xno; then
diff --git a/debian/patches/sparc-force-cpu.diff b/debian/patches/sparc-force-cpu.diff
new file mode 100644
index 0000000..f7447e4
--- /dev/null
+++ b/debian/patches/sparc-force-cpu.diff
@@ -0,0 +1,18 @@
+# DP: On sparc default to ultrasparc (v9a) in 32bit mode
+
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -3736,6 +3736,13 @@
+ ;;
+ esac
+
++ # setting this directly fails to build a biarch defaulting to 32bit
++ case "$target" in sparc*-*-linux*)
++ if test "$option" = cpu; then
++ val=ultrasparc
++ fi
++ esac
++
+ if test "x$t" = x
+ then
+ t="{ \"$option\", \"$val\" }"
diff --git a/debian/patches/svn-class-updates.diff b/debian/patches/svn-class-updates.diff
new file mode 100644
index 0000000..3fa6978
--- /dev/null
+++ b/debian/patches/svn-class-updates.diff
@@ -0,0 +1,27 @@
+# DP: updated class files from the 4.6 branch upto yyyymmdd.
+
+dir=gcc-4_6-branch
+dir=/scratch/packages/gcc/svn/gcc-4_6-branch
+tag=gcc_4_6_0_release
+branch=gcc-4_6-branch
+
+tmplist=files$$
+
+svn diff --summarize \
+ svn://gcc.gnu.org/svn/gcc/tags/$tag \
+ svn://gcc.gnu.org/svn/gcc/branches/$branch \
+ | grep '\.class$' > $tmplist
+
+sed -n '/^[AM].*\.class$/s,.*/'$tag'/\(.*\),\1,p' $tmplist \
+ > neworchanged.list
+sed -n '/^[D].*\.class$/s,.*/'$tag'/\(.*\),\1,p' $tmplist \
+ > removed.list
+sed -n '/^[^ADM].*\.class$/s,.*/'$tag'/\(.*\),\1,p' $tmplist \
+ > unknown.list
+
+echo "new or changed: $(wc -l neworchanged.list | cut '-d ' -f1), removed $(wc -l removed.list | cut '-d ' -f1): , unknown: $(wc -l unknown.list | cut '-d ' -f1)"
+tar -c -J -f java-class-files.tar.xz -C $dir -T neworchanged.list
+uuencode java-class-files.tar.xz java-class-files.tar.xz > java-class-files.tar.xz.uue
+
+rm -f $tmplist neworchanged.list removed.list unknown.list
+
diff --git a/debian/patches/svn-doc-updates.diff b/debian/patches/svn-doc-updates.diff
new file mode 100644
index 0000000..9caef4a
--- /dev/null
+++ b/debian/patches/svn-doc-updates.diff
@@ -0,0 +1,105 @@
+# DP: updates from the 4.6 branch upto 20110816 (documentation).
+
+svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_6_1_release svn://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch \
+ | sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
+ | awk '/^Index:.*\.texi/ {skip=0; print; next} /^Index:/ {skip=1; next} skip==0'
+
+Index: gcc/doc/invoke.texi
+===================================================================
+--- a/src/gcc/doc/invoke.texi (.../tags/gcc_4_6_1_release)
++++ b/src/gcc/doc/invoke.texi (.../branches/gcc-4_6-branch)
+@@ -611,7 +611,8 @@
+ -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs @gol
+ -mcmodel=@var{code-model} -mabi=@var{name} @gol
+ -m32 -m64 -mlarge-data-threshold=@var{num} @gol
+--msse2avx -mfentry -m8bit-idiv}
++-msse2avx -mfentry -m8bit-idiv @gol
++-mavx256-split-unaligned-load -mavx256-split-unaligned-store}
+
+ @emph{i386 and x86-64 Windows Options}
+ @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll
+@@ -12172,6 +12173,10 @@
+ @item corei7-avx
+ Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction set support.
++@item core-avx-i
++Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
++SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and F16C instruction
++set support.
+ @item atom
+ Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
+ instruction set support.
+@@ -12769,6 +12774,12 @@
+ to 255, 8bit unsigned integer divide will be used instead of
+ 32bit/64bit integer divide.
+
++@item -mavx256-split-unaligned-load
++@item -mavx256-split-unaligned-store
++@opindex avx256-split-unaligned-load
++@opindex avx256-split-unaligned-store
++Split 32-byte AVX unaligned load and store.
++
+ @end table
+
+ These @samp{-m} switches are supported in addition to the above
+Index: gcc/doc/md.texi
+===================================================================
+--- a/src/gcc/doc/md.texi (.../tags/gcc_4_6_1_release)
++++ b/src/gcc/doc/md.texi (.../branches/gcc-4_6-branch)
+@@ -4641,8 +4641,9 @@
+ string. The instruction is not allowed to prefetch more than one byte
+ at a time since either string may end in the first byte and reading past
+ that may access an invalid page or segment and cause a fault. The
+-effect of the instruction is to store a value in operand 0 whose sign
+-indicates the result of the comparison.
++comparison terminates early if the fetched bytes are different or if
++they are equal to zero. The effect of the instruction is to store a
++value in operand 0 whose sign indicates the result of the comparison.
+
+ @cindex @code{cmpstr@var{m}} instruction pattern
+ @item @samp{cmpstr@var{m}}
+@@ -4660,8 +4661,10 @@
+ order starting at the beginning of each string. The instruction is not allowed
+ to prefetch more than one byte at a time since either string may end in the
+ first byte and reading past that may access an invalid page or segment and
+-cause a fault. The effect of the instruction is to store a value in operand 0
+-whose sign indicates the result of the comparison.
++cause a fault. The comparison will terminate when the fetched bytes
++are different or if they are equal to zero. The effect of the
++instruction is to store a value in operand 0 whose sign indicates the
++result of the comparison.
+
+ @cindex @code{cmpmem@var{m}} instruction pattern
+ @item @samp{cmpmem@var{m}}
+@@ -4669,9 +4672,10 @@
+ of @samp{cmpstr@var{m}}. The two memory blocks specified are compared
+ byte by byte in lexicographic order starting at the beginning of each
+ block. Unlike @samp{cmpstr@var{m}} the instruction can prefetch
+-any bytes in the two memory blocks. The effect of the instruction is
+-to store a value in operand 0 whose sign indicates the result of the
+-comparison.
++any bytes in the two memory blocks. Also unlike @samp{cmpstr@var{m}}
++the comparison will not stop if both bytes are zero. The effect of
++the instruction is to store a value in operand 0 whose sign indicates
++the result of the comparison.
+
+ @cindex @code{strlen@var{m}} instruction pattern
+ @item @samp{strlen@var{m}}
+@@ -5510,7 +5514,7 @@
+ @cindex @code{stack_protect_set} instruction pattern
+ @item @samp{stack_protect_set}
+
+-This pattern, if defined, moves a @code{Pmode} value from the memory
++This pattern, if defined, moves a @code{ptr_mode} value from the memory
+ in operand 1 to the memory in operand 0 without leaving the value in
+ a register afterward. This is to avoid leaking the value some place
+ that an attacker might use to rewrite the stack guard slot after
+@@ -5521,7 +5525,7 @@
+ @cindex @code{stack_protect_test} instruction pattern
+ @item @samp{stack_protect_test}
+
+-This pattern, if defined, compares a @code{Pmode} value from the
++This pattern, if defined, compares a @code{ptr_mode} value from the
+ memory in operand 1 with the memory in operand 0 without leaving the
+ value in a register afterward and branches to operand 2 if the values
+ weren't equal.
diff --git a/debian/patches/svn-updates-linaro.diff b/debian/patches/svn-updates-linaro.diff
new file mode 100644
index 0000000..fcfbf7c
--- /dev/null
+++ b/debian/patches/svn-updates-linaro.diff
@@ -0,0 +1,2746 @@
+# DP: updates from the 4.6 branch upto 20111215 (r182348).
+
+last_updated()
+{
+ cat > ${dir}LAST_UPDATED <<EOF
+Thu Dec 15 01:05:16 CET 2011
+Thu Dec 15 00:05:16 UTC 2011 (revision 182348)
+EOF
+}
+
+svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@181866 svn://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch \
+ | sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
+ | awk '/^Index:.*\.(class|texi)/ {skip=1; next} /^Index:/ { skip=0 } skip==0'
+
+Index: gcc/DATESTAMP
+===================================================================
+--- a/src/gcc/DATESTAMP (revision
++++ b/src/gcc/DATESTAMP (revision
+@@ -1 +1 @@
+-20111201
++20111214
+Index: gcc/ChangeLog
+===================================================================
+--- a/src/gcc/ChangeLog (revision
++++ b/src/gcc/ChangeLog (revision
+@@ -1,3 +1,185 @@
++2011-12-13 Eric Botcazou <ebotcazou@adacore.com>
++
++ * lto-streamer-out.c (write_symbol): Use proper 64-bit host type.
++ * lto-cgraph.c (input_cgraph_opt_section): Use 'int' for offsets.
++ * lto-streamer-in.c (lto_read_body): Likewise.
++ (lto_input_toplevel_asms): Likewise.
++ * lto-section-in.c (lto_create_simple_input_block): Likewise.
++ * lto-opts.c (lto_read_file_options): Likewise.
++ * ipa-prop.c (ipa_prop_read_section): Likewise.
++
++ * df.h (DF_NOTE): Fix typo in comment.
++
++2011-12-13 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
++
++ * regmove.c (fixup_match_2): Only access call_used_regs with hard
++ regs.
++
++2011-12-12 Jakub Jelinek <jakub@redhat.com>
++
++ PR middle-end/51510
++ * calls.c (internal_arg_pointer_based_exp_scan): Don't use
++ VEC_safe_grow_cleared if idx is smaller than VEC_length.
++
++ Backported from mainline
++ 2011-12-11 Jakub Jelinek <jakub@redhat.com>
++
++ PR tree-optimization/51485
++ * tree-vect-data-refs.c (vect_analyze_data_refs): Give up on
++ DRs in call stmts.
++
++2011-12-12 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR tree-optimization/50569
++ * tree-sra.c (build_ref_for_model): Replicate a chain of COMPONENT_REFs
++ in the expression of MODEL instead of just the last one.
++
++2011-12-09 Michael Meissner <meissner@the-meissners.org>
++
++ Backport from mainline
++ 2011-12-09 Michael Meissner <meissner@the-meissners.org>
++
++ PR rtl-optimization/51469
++ * varasm.c (default_binds_local_p_1): If the symbol is a gnu
++ indirect function, mark the symbol as non-local.
++
++2011-12-09 Jakub Jelinek <jakub@redhat.com>
++
++ Backport from mainline
++ 2011-12-08 Jakub Jelinek <jakub@redhat.com>
++
++ PR tree-optimization/51466
++ * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Also copy
++ TREE_SIDE_EFFECTS.
++
++ 2011-11-28 Jakub Jelinek <jakub@redhat.com>
++
++ PR tree-optimization/50078
++ * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Copy over
++ TREE_THIS_VOLATILE also from the old to new lhs resp. rhs.
++
++2011-12-09 Kazu Hirata <kazu@codesourcery.com>
++
++ Backport from mainline:
++
++ 2011-12-05 Kazu Hirata <kazu@codesourcery.com>
++
++ PR target/51408
++ * config/arm/arm.md (*minmax_arithsi): Always require the else
++ clause in the MINUS case.
++
++2011-12-08 Teresa Johnson <tejohnson@google.com>
++
++ Backport from mainline:
++
++ 2011-08-05 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.md (*movdi_internal_rex64): Use "!o" constraint
++ instead of "!m" for operand 0, alternative 4.
++ (*movdf_internal_rex64): Ditto for operand 0, alernative 6.
++
++2011-12-08 Jakub Jelinek <jakub@redhat.com>
++
++ Backport from mainline
++ 2011-12-05 Jakub Jelinek <jakub@redhat.com>
++
++ PR debug/51410
++ * c-decl.c (pop_scope): Don't add DECL_EXTERNAL decls
++ for debug info if scope is file_scope.
++
++ PR c/51339
++ * c-decl.c (c_finish_incomplete_decl, finish_decl): Call
++ relayout_decl instead of layout_decl.
++
++ 2011-12-05 Jakub Jelinek <jakub@redhat.com>
++ Eric Botcazou <ebotcazou@adacore.com>
++
++ PR middle-end/51323
++ PR middle-end/50074
++ * calls.c (internal_arg_pointer_exp_state): New variable.
++ (internal_arg_pointer_based_exp_1,
++ internal_arg_pointer_exp_scan): New functions.
++ (internal_arg_pointer_based_exp): New function.
++ (mem_overlaps_already_clobbered_arg_p): Use it.
++ (expand_call): Free internal_arg_pointer_exp_state.cache vector
++ and clear internal_arg_pointer_exp_state.scan_start.
++
++ 2011-11-30 Jakub Jelinek <jakub@redhat.com>
++
++ PR rtl-optimization/48721
++ * sched-deps.c (sched_analyze_insn): For SIBLING_CALL_P set
++ reg_pending_barrier to TRUE_BARRIER.
++
++ 2011-11-26 Joern Rennecke <joern.rennecke@embecosm.com>
++
++ PR middle-end/50074
++ * calls.c (mem_overlaps_already_clobbered_arg_p):
++ Return false if no outgoing arguments have been stored so far.
++
++2011-12-08 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR tree-optimization/51315
++ * tree-sra.c (tree_non_mode_aligned_mem_p): Rename to...
++ (tree_non_aligned_mem_p): ...this. Add ALIGN parameter. Look into
++ MEM_REFs and use get_object_or_type_alignment for them.
++ (build_accesses_from_assign): Adjust for above change.
++ (access_precludes_ipa_sra_p): Likewise.
++
++2011-12-06 Martin Jambor <mjambor@suse.cz>
++
++ Backport from mainline:
++
++ 2011-12-02 Martin Jambor <mjambor@suse.cz>
++
++ PR tree-optimization/50622
++ * tree-sra.c (load_assign_lhs_subreplacements): Force gimple operand
++ if both lacc and racc are grp_partial_lhs.
++
++2011-12-06 Iain Sandoe <iains@gcc.gnu.org>
++
++ * config/rs6000/rs6000.c (darwin_rs6000_override_options): Initialize
++ rs6000_current_abi.
++
++2011-12-06 Alan Modra <amodra@gmail.com>
++
++ PR target/50906
++ * config/rs6000/rs6000.c (rs6000_emit_prologue <TARGET_SPE_ABI>):
++ Do not mark r11 setup as frame-related. Pass correct offset to
++ rs6000_emit_savres_rtx. Correct out-of-line rs6000_frame_related
++ arguments. Correct sp_offset. Remove "offset" fudge from
++ in-line rs6000_frame_related call. Rename misleading variable.
++ Fix comments and whitespace. Tidy some expressions.
++ (rs6000_emit_epilogue <TARGET_SPE_ABI>): Always set frame_reg_rtx
++ to r11 in out-of-line case. Correct sp_offset. Pass correct
++ offset to rs6000_emit_savres_rtx. Rename misleading variable.
++ Fix comments and whitespace. Tidy some expressions.
++ (rs6000_emit_epilogue <non-TARGET_SPE_ABI>): Add sp_offset
++ adjustment when !saving_GPRs_inline. Correct register mode
++ used in address calcs.
++ (rs6000_emit_epilogue <non-TARGET_SPE_ABI>): Similarly when
++ !restoring_GPRs_inline.
++
++2011-12-04 Jérémie Detrey <Jeremie.Detrey@loria.fr>
++
++ PR target/51393
++ * config/i386/avxintrin.h (_mm256_insert_epi64): Declare second
++ parameter as long long.
++
++2011-12-02 Georg-Johann Lay <avr@gjlay.de>
++
++ PR target/51002
++ PR target/51345
++ * config/avr/libgcc.S (__prologue_saves__, __epilogue_restores__):
++ Enclose parts using __SP_H__ in !defined (__AVR_HAVE_8BIT_SP__).
++ Add FIXME comments.
++ * config/avr/avr.md (movhi_sp_r_irq_off, movhi_sp_r_irq_on): Set
++ insn condition to !AVR_HAVE_8BIT_SP.
++ * config/avr/avr.c (output_movhi): "clr%B0" instead of "in
++ %B0,__SP_H__" if AVR_HAVE_8BIT_SP.
++ (avr_file_start): Only print "__SP_H__ = 0x3e" if !AVR_HAVE_8BIT_SP.
++ * config/avr/avr-devices.c (avr_mcu_types): ATtiny4313 and
++ AT86RF401 have a 16-bit SP (their manual is bogus).
++
+ 2011-11-25 Richard Sandiford <richard.sandiford@linaro.org>
+
+ Backport from mainline:
+@@ -415,7 +597,7 @@
+ * config/rs6000/rs6000.md (probe_stack): Use explicit operand.
+ * config/rs6000/rs6000.c (output_probe_stack_range): Likewise.
+
+-2011-09-14 Diego Novillo <dnovillo@google.com>
++2011-09-14 Diego Novillo <dnovillo@google.com>
+
+ * tree-vect-stmts.c (vect_transform_stmt): Remove unused
+ local variable ORIG_SCALAR_STMT.
+Index: gcc/testsuite/gcc.target/i386/pr51393.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/pr51393.c (revision
++++ b/src/gcc/testsuite/gcc.target/i386/pr51393.c (revision
+@@ -0,0 +1,22 @@
++/* { dg-do run } */
++/* { dg-require-effective-target avx } */
++/* { dg-require-effective-target lp64 } */
++/* { dg-options "-O -mavx" } */
++
++#include "avx-check.h"
++#include <immintrin.h>
++
++static void
++__attribute__((noinline))
++avx_test (void)
++{
++ long long in = 0x800000000ll;
++ long long out;
++
++ __m256i zero = _mm256_setzero_si256();
++ __m256i tmp = _mm256_insert_epi64 (zero, in, 0);
++ out = _mm256_extract_epi64(tmp, 0);
++
++ if (in != out)
++ abort ();
++}
+Index: gcc/testsuite/gcc.target/i386/pr48721.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/pr48721.c (revision
++++ b/src/gcc/testsuite/gcc.target/i386/pr48721.c (revision
+@@ -0,0 +1,51 @@
++/* PR rtl-optimization/48721 */
++/* { dg-do compile } */
++/* { dg-options "-O -foptimize-sibling-calls -fsched2-use-superblocks -fschedule-insns2 -mtune=core2" } */
++
++extern unsigned char a[];
++extern int b[], d[], e[], f[], g[], *h[], m[], *n[], o[];
++extern char c[];
++
++struct S
++{
++ unsigned char s1;
++ int s2, s3, s4, s5, s6, s7, s8;
++};
++
++__attribute__((noinline, noclone)) int
++foo (int x)
++{
++ return 0;
++}
++
++int
++bar (int x, struct S *y)
++{
++ int z;
++ switch (x)
++ {
++ case 1:
++ case 2:
++ {
++ int t2, t4, t5, t6, t7, t8;
++ z = o[y->s8 * 6];
++ t8 = *n[m[x] * 5];
++ t4 = *h[y->s7];
++ t7 = z;
++ z = g[f[x] + y->s6];
++ t6 = e[y->s5];
++ t5 = d[c[x] + y->s3 * 17];
++ if (z)
++ t2 = b[z];
++ if (a[z] != y->s1)
++ return foo (x);
++ y->s8 = t8;
++ y->s4 = t4;
++ y->s7 = t7;
++ y->s6 = t6;
++ y->s5 = t5;
++ y->s2 = t2;
++ }
++ }
++ return 0;
++}
+Index: gcc/testsuite/gcc.target/i386/movdi-rex64.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/movdi-rex64.c (revision
++++ b/src/gcc/testsuite/gcc.target/i386/movdi-rex64.c (revision
+@@ -0,0 +1,11 @@
++/* { dg-do compile { target *-*-linux* } } */
++/* { dg-options "-fPIE" } */
++
++char *strcpy (char *dest, const char *src);
++
++static __thread char buffer[25];
++const char * error_message (void)
++{
++ strcpy (buffer, "Unknown code ");
++ return 0;
++}
+Index: gcc/testsuite/gfortran.dg/move_alloc_8.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/move_alloc_8.f90 (revision
++++ b/src/gcc/testsuite/gfortran.dg/move_alloc_8.f90 (revision
+@@ -0,0 +1,106 @@
++! { dg-do compile }
++!
++! PR fortran/50684
++!
++! Module "bug" contributed by Martin Steghöfer.
++!
++
++MODULE BUG
++ TYPE MY_TYPE
++ INTEGER, ALLOCATABLE :: VALUE
++ END TYPE
++CONTAINS
++ SUBROUTINE POINTER_INTENT_IN_BUG_WORKING(POINTER_INTENT_IN_VARIABLE)
++ TYPE(MY_TYPE), POINTER, INTENT(IN) :: POINTER_INTENT_IN_VARIABLE
++ TYPE(MY_TYPE), POINTER :: POINTER_VARIABLE_LOCAL
++ INTEGER, ALLOCATABLE :: LOCAL_VALUE
++
++ POINTER_VARIABLE_LOCAL=>POINTER_INTENT_IN_VARIABLE
++ CALL MOVE_ALLOC(POINTER_VARIABLE_LOCAL%VALUE, LOCAL_VALUE)
++
++ RETURN
++ END SUBROUTINE POINTER_INTENT_IN_BUG_WORKING
++
++ SUBROUTINE POINTER_INTENT_IN_BUG_FAILING(POINTER_INTENT_IN_VARIABLE)
++ TYPE(MY_TYPE), POINTER, INTENT(IN) :: POINTER_INTENT_IN_VARIABLE
++ INTEGER, ALLOCATABLE :: LOCAL_VALUE
++
++ CALL MOVE_ALLOC(POINTER_INTENT_IN_VARIABLE%VALUE, LOCAL_VALUE)
++
++ RETURN
++ END SUBROUTINE POINTER_INTENT_IN_BUG_FAILING
++end module bug
++
++subroutine test1()
++ TYPE MY_TYPE
++ INTEGER, ALLOCATABLE :: VALUE
++ END TYPE
++CONTAINS
++ SUBROUTINE sub (dt)
++ type(MY_TYPE), intent(in) :: dt
++ INTEGER, ALLOCATABLE :: lv
++ call move_alloc(dt%VALUE, lv) ! { dg-error "cannot be INTENT.IN." }
++ END SUBROUTINE
++end subroutine test1
++
++subroutine test2 (x, px)
++ implicit none
++ type t
++ integer, allocatable :: a
++ end type t
++
++ type t2
++ type(t), pointer :: ptr
++ integer, allocatable :: a
++ end type t2
++
++ type(t2), intent(in) :: x
++ type(t2), pointer, intent(in) :: px
++
++ integer, allocatable :: a
++ type(t2), pointer :: ta
++
++ call move_alloc (px, ta) ! { dg-error "cannot be INTENT.IN." }
++ call move_alloc (x%a, a) ! { dg-error "cannot be INTENT.IN." }
++ call move_alloc (x%ptr%a, a) ! OK (3)
++ call move_alloc (px%a, a) ! OK (4)
++ call move_alloc (px%ptr%a, a) ! OK (5)
++end subroutine test2
++
++subroutine test3 (x, px)
++ implicit none
++ type t
++ integer, allocatable :: a
++ end type t
++
++ type t2
++ class(t), pointer :: ptr
++ integer, allocatable :: a
++ end type t2
++
++ type(t2), intent(in) :: x
++ class(t2), pointer, intent(in) :: px
++
++ integer, allocatable :: a
++ class(t2), pointer :: ta
++
++ call move_alloc (px, ta) ! { dg-error "cannot be INTENT.IN." }
++ call move_alloc (x%a, a) ! { dg-error "cannot be INTENT.IN." }
++ call move_alloc (x%ptr%a, a) ! OK (6)
++ call move_alloc (px%a, a) ! OK (7)
++ call move_alloc (px%ptr%a, a) ! OK (8)
++end subroutine test3
++
++subroutine test4()
++ TYPE MY_TYPE
++ INTEGER, ALLOCATABLE :: VALUE
++ END TYPE
++CONTAINS
++ SUBROUTINE sub (dt)
++ CLASS(MY_TYPE), intent(in) :: dt
++ INTEGER, ALLOCATABLE :: lv
++ call move_alloc(dt%VALUE, lv) ! { dg-error "cannot be INTENT.IN." }
++ END SUBROUTINE
++end subroutine test4
++
++! { dg-final { cleanup-modules "bug" } }
+Index: gcc/testsuite/gfortran.dg/realloc_on_assign_8.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/realloc_on_assign_8.f90 (revision
++++ b/src/gcc/testsuite/gfortran.dg/realloc_on_assign_8.f90 (revision
+@@ -0,0 +1,17 @@
++! { dg-do compile }
++!
++! PR fortran/51448
++!
++! Contribued by François Willot
++!
++ PROGRAM MAIN
++ IMPLICIT NONE
++ TYPE mytype
++ REAL b(2)
++ END TYPE mytype
++ TYPE(mytype) a
++ DOUBLE PRECISION, ALLOCATABLE :: x(:)
++ ALLOCATE(x(2))
++ a%b=0.0E0
++ x=a%b
++ END
+Index: gcc/testsuite/gfortran.dg/default_initialization_5.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/default_initialization_5.f90 (revision
++++ b/src/gcc/testsuite/gfortran.dg/default_initialization_5.f90 (revision
+@@ -0,0 +1,66 @@
++! { dg-do run }
++! { dg-options "-fdump-tree-original" }
++!
++! PR fortran/51435
++!
++! Contributed by darmar.xxl@gmail.com
++!
++module arr_m
++ type arr_t
++ real(8), dimension(:), allocatable :: rsk
++ end type
++ type arr_t2
++ integer :: a = 77
++ end type
++end module arr_m
++!*********************
++module list_m
++ use arr_m
++ implicit none
++
++ type(arr_t2), target :: tgt
++
++ type my_list
++ type(arr_t), pointer :: head => null()
++ end type my_list
++ type my_list2
++ type(arr_t2), pointer :: head => tgt
++ end type my_list2
++end module list_m
++!***********************
++module worker_mod
++ use list_m
++ implicit none
++
++ type data_all_t
++ type(my_list) :: my_data
++ end type data_all_t
++ type data_all_t2
++ type(my_list2) :: my_data
++ end type data_all_t2
++contains
++ subroutine do_job()
++ type(data_all_t) :: dum
++ type(data_all_t2) :: dum2
++
++ if (associated(dum%my_data%head)) then
++ call abort()
++ else
++ print *, 'OK: do_job my_data%head is NOT associated'
++ end if
++
++ if (dum2%my_data%head%a /= 77) &
++ call abort()
++ end subroutine
++end module
++!***************
++program hello
++ use worker_mod
++ implicit none
++ call do_job()
++end program
++
++! { dg-final { scan-tree-dump-times "my_data.head = 0B" 1 "original" } }
++! { dg-final { scan-tree-dump-times "my_data.head = &tgt" 1 "original" } }
++! { dg-final { cleanup-tree-dump "original" } }
++! { dg-final { cleanup-modules "arr_m list_m worker_mod" } }
+Index: gcc/testsuite/gfortran.dg/warn_function_without_result_2.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/warn_function_without_result_2.f90 (revision
++++ b/src/gcc/testsuite/gfortran.dg/warn_function_without_result_2.f90 (revision
+@@ -0,0 +1,19 @@
++! { dg-do compile }
++! { dg-options "-Wall" }
++!
++! PR fortran/50923
++!
++module m
++contains
++ integer pure function f() ! { dg-warning "Return value of function 'f' at .1. not set" }
++ end function f
++ integer pure function g() result(h) ! { dg-warning "Return value 'h' of function 'g' declared at .1. not set" }
++ end function g
++ integer pure function i()
++ i = 7
++ end function i
++ integer pure function j() result(k)
++ k = 8
++ end function j
++end module m
++! { dg-final { cleanup-modules "mod" } }
+Index: gcc/testsuite/gcc.c-torture/execute/pr51466.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr51466.c (revision
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr51466.c (revision
+@@ -0,0 +1,43 @@
++/* PR tree-optimization/51466 */
++
++extern void abort (void);
++
++__attribute__((noinline, noclone)) int
++foo (int i)
++{
++ volatile int v[4];
++ int *p;
++ v[i] = 6;
++ p = (int *) &v[i];
++ return *p;
++}
++
++__attribute__((noinline, noclone)) int
++bar (int i)
++{
++ volatile int v[4];
++ int *p;
++ v[i] = 6;
++ p = (int *) &v[i];
++ *p = 8;
++ return v[i];
++}
++
++__attribute__((noinline, noclone)) int
++baz (int i)
++{
++ volatile int v[4];
++ int *p;
++ v[i] = 6;
++ p = (int *) &v[0];
++ *p = 8;
++ return v[i];
++}
++
++int
++main ()
++{
++ if (foo (3) != 6 || bar (2) != 8 || baz (0) != 8 || baz (1) != 6)
++ abort ();
++ return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/20111212-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/20111212-1.c (revision
++++ b/src/gcc/testsuite/gcc.c-torture/execute/20111212-1.c (revision
+@@ -0,0 +1,34 @@
++/* PR tree-optimization/50569 */
++/* Reported by Paul Koning <pkoning@gcc.gnu.org> */
++/* Reduced testcase by Mikael Pettersson <mikpe@it.uu.se> */
++
++struct event {
++ struct {
++ unsigned int sec;
++ } sent __attribute__((packed));
++};
++
++void __attribute__((noinline,noclone)) frob_entry(char *buf)
++{
++ struct event event;
++
++ __builtin_memcpy(&event, buf, sizeof(event));
++ if (event.sent.sec < 64) {
++ event.sent.sec = -1U;
++ __builtin_memcpy(buf, &event, sizeof(event));
++ }
++}
++
++int main(void)
++{
++ union {
++ char buf[1 + sizeof(struct event)];
++ int align;
++ } u;
++
++ __builtin_memset(&u, 0, sizeof u);
++
++ frob_entry(&u.buf[1]);
++
++ return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/pr51323.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr51323.c (revision
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr51323.c (revision
+@@ -0,0 +1,35 @@
++/* PR middle-end/51323 */
++
++extern void abort (void);
++struct S { int a, b, c; };
++int v;
++
++__attribute__((noinline, noclone)) void
++foo (int x, int y, int z)
++{
++ if (x != v || y != 0 || z != 9)
++ abort ();
++}
++
++static inline int
++baz (const struct S *p)
++{
++ return p->b;
++}
++
++__attribute__((noinline, noclone)) void
++bar (int x, struct S y)
++{
++ foo (baz (&y), 0, x);
++}
++
++int
++main ()
++{
++ struct S s;
++ v = 3; s.a = v - 1; s.b = v; s.c = v + 1;
++ bar (9, s);
++ v = 17; s.a = v - 1; s.b = v; s.c = v + 1;
++ bar (9, s);
++ return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/20111208-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/20111208-1.c (revision
++++ b/src/gcc/testsuite/gcc.c-torture/execute/20111208-1.c (revision
+@@ -0,0 +1,94 @@
++/* PR tree-optimization/51315 */
++/* Reported by Jurij Smakov <jurij@wooyd.org> */
++
++typedef unsigned int size_t;
++
++extern void *memcpy (void *__restrict __dest,
++ __const void *__restrict __src, size_t __n)
++ __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
++
++extern size_t strlen (__const char *__s)
++ __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
++
++typedef short int int16_t;
++typedef int int32_t;
++
++extern void abort (void);
++
++int a;
++
++static void __attribute__ ((noinline,noclone))
++do_something (int item)
++{
++ a = item;
++}
++
++int
++pack_unpack (char *s, char *p)
++{
++ char *send, *pend;
++ char type;
++ int integer_size;
++
++ send = s + strlen (s);
++ pend = p + strlen (p);
++
++ while (p < pend)
++ {
++ type = *p++;
++
++ switch (type)
++ {
++ case 's':
++ integer_size = 2;
++ goto unpack_integer;
++
++ case 'l':
++ integer_size = 4;
++ goto unpack_integer;
++
++ unpack_integer:
++ switch (integer_size)
++ {
++ case 2:
++ {
++ union
++ {
++ int16_t i;
++ char a[sizeof (int16_t)];
++ }
++ v;
++ memcpy (v.a, s, sizeof (int16_t));
++ s += sizeof (int16_t);
++ do_something (v.i);
++ }
++ break;
++
++ case 4:
++ {
++ union
++ {
++ int32_t i;
++ char a[sizeof (int32_t)];
++ }
++ v;
++ memcpy (v.a, s, sizeof (int32_t));
++ s += sizeof (int32_t);
++ do_something (v.i);
++ }
++ break;
++ }
++ break;
++ }
++ }
++ return (int) *s;
++}
++
++int
++main (void)
++{
++ int n = pack_unpack ("\200\001\377\376\035\300", "sl");
++ if (n != 0)
++ abort ();
++ return 0;
++}
+Index: gcc/testsuite/gnat.dg/frame_overflow.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/frame_overflow.adb (revision
++++ b/src/gcc/testsuite/gnat.dg/frame_overflow.adb (revision
+@@ -1,27 +1,20 @@
+ -- { dg-do compile }
+
+-with System;
++package body Frame_Overflow is
+
+-procedure frame_overflow is
+-
+- type Bitpos_Range_T is range 1..2**(System.Word_Size-1)-1;
+- type Bitmap_Array_T is array (Bitpos_Range_T) of Boolean;
+-
+- type Bitmap_T is record
+- Bits : Bitmap_Array_T := (others => False);
+- end record;
+-
+- function
++ function -- { dg-error "too large" }
+ Set_In (Bitmap : Bitmap_T; Bitpos : Bitpos_Range_T) return Bitmap_T
+ is
+- Result: Bitmap_T := Bitmap; -- { dg-error "Storage_Error" }
++ Result: Bitmap_T := Bitmap;
+ begin
+ Result.Bits (Bitpos) := True;
+ return Result;
+ end;
+
+- function Negate (Bitmap : Bitmap_T) return Bitmap_T is
+- Result: Bitmap_T; -- { dg-error "Storage_Error" }
++ function -- { dg-error "too large" }
++ Negate (Bitmap : Bitmap_T) return Bitmap_T
++ is
++ Result: Bitmap_T;
+ begin
+ for E in Bitpos_Range_T loop
+ Result.Bits (E) := not Bitmap.Bits (E);
+@@ -29,6 +22,4 @@
+ return Result;
+ end;
+
+-begin
+- null;
+-end;
++end Frame_Overflow;
+Index: gcc/testsuite/gnat.dg/frame_overflow.ads
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/frame_overflow.ads (revision
++++ b/src/gcc/testsuite/gnat.dg/frame_overflow.ads (revision
+@@ -0,0 +1,17 @@
++with System;
++
++package Frame_Overflow is
++
++ type Bitpos_Range_T is range 1..2**(System.Word_Size-1)-1;
++ type Bitmap_Array_T is array (Bitpos_Range_T) of Boolean;
++
++ type Bitmap_T is record
++ Bits : Bitmap_Array_T := (others => False);
++ end record;
++
++ function
++ Set_In (Bitmap : Bitmap_T; Bitpos : Bitpos_Range_T) return Bitmap_T;
++
++ function Negate (Bitmap : Bitmap_T) return Bitmap_T;
++
++end Frame_Overflow;
+Index: gcc/testsuite/gnat.dg/specs/addr1.ads
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/specs/addr1.ads (revision
++++ b/src/gcc/testsuite/gnat.dg/specs/addr1.ads (revision
+@@ -15,7 +15,7 @@
+ end record;
+ for Rec2'Size use 64;
+
+- A: Arr (1 .. 12);
++ A: Arr (1 .. 4);
+
+ Obj1: Rec1;
+ for Obj1'Address use A'Address; -- { dg-bogus "alignment" }
+Index: gcc/testsuite/gcc.dg/pr45819.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/pr45819.c (revision
++++ b/src/gcc/testsuite/gcc.dg/pr45819.c (revision
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fdump-tree-optimized" } */
++/* { dg-options "-O2 -fdump-tree-optimized -w" } */
+
+ struct ehci_regs {
+ char x;
+Index: gcc/testsuite/gcc.dg/gomp/pr51339.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/gomp/pr51339.c (revision
++++ b/src/gcc/testsuite/gcc.dg/gomp/pr51339.c (revision
+@@ -0,0 +1,15 @@
++/* PR c/51339 */
++/* { dg-do compile } */
++/* { dg-options "-fopenmp" } */
++
++char g[] = "g";
++
++void
++foo (void)
++{
++#pragma omp parallel sections firstprivate (g) lastprivate (g)
++ {
++ #pragma omp section
++ g[0] = 'h';
++ }
++}
+Index: gcc/testsuite/gcc.dg/pr50078.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/pr50078.c (revision
++++ b/src/gcc/testsuite/gcc.dg/pr50078.c (revision
+@@ -0,0 +1,14 @@
++/* PR tree-optimization/50078 */
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++unsigned nonvolvar[2];
++
++void
++test (int arg)
++{
++ unsigned v = *(volatile unsigned *) (&nonvolvar[arg]);
++ *(volatile unsigned *) (&nonvolvar[arg]) = v;
++}
++
++/* { dg-final { scan-assembler-times "movl\[^\n\r\]*nonvolvar" 2 { target { { i?86-*-* x86_64-*-* } && nonpic } } } } */
+Index: gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c (revision
++++ b/src/gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c (revision
+@@ -0,0 +1,13 @@
++/* PR debug/51410 */
++/* { dg-do compile } */
++/* { dg-options "-O0 -gdwarf-2 -dA -fno-merge-debug-strings" } */
++
++int x;
++
++int
++foo (void)
++{
++ return x;
++}
++
++/* { dg-final { scan-assembler-times "\\(DIE\[^\\r\\n\]*DW_TAG_variable\\)" 1 } } */
+Index: gcc/testsuite/gcc.dg/pr51408.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/pr51408.c (revision
++++ b/src/gcc/testsuite/gcc.dg/pr51408.c (revision
+@@ -0,0 +1,22 @@
++/* This testcase used to fail because of a bug in
++ arm.md:*minmax_arithsi. */
++
++/* { dg-do run } */
++/* { dg-options "-O1" } */
++
++extern void abort (void);
++
++int __attribute__((noinline))
++foo (int a, int b)
++{
++ int max = (b > 0) ? b : 0;
++ return max - a;
++}
++
++int
++main (void)
++{
++ if (foo (3, -1) != -3)
++ abort ();
++ return 0;
++}
+Index: gcc/testsuite/ChangeLog
+===================================================================
+--- a/src/gcc/testsuite/ChangeLog (revision
++++ b/src/gcc/testsuite/ChangeLog (revision
+@@ -1,3 +1,137 @@
++2011-12-14 Jason Merrill <jason@redhat.com>
++
++ PR c++/51248
++ * g++.dg/other/enum2.C: New.
++
++2011-12-13 Jason Merrill <jason@redhat.com>
++
++ PR c++/51406
++ PR c++/51161
++ * g++.dg/cpp0x/rv-cast3.C: New.
++ * g++.dg/cpp0x/rv-cast4.C: New.
++
++2011-12-12 Jakub Jelinek <jakub@redhat.com>
++
++ PR testsuite/51511
++ * gcc.dg/pr45819.c: Add -w to dg-options.
++
++ Backported from mainline
++ 2011-12-11 Jakub Jelinek <jakub@redhat.com>
++
++ PR tree-optimization/51485
++ * g++.dg/vect/pr51485.cc: New test.
++
++2011-12-12 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc.c-torture/execute/20111212-1.c: New test.
++
++2011-12-11 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/50923
++ * gfortran.dg/warn_function_without_result_2.f90: New.
++
++2011-12-11 Thomas Koenig <tkoenig@gcc.gnu.org>
++
++ PR fortran/51338
++ Backport from trunk
++ * gfortran.dg/assumed_charlen_substring_1.f90: New test.
++
++2011-12-09 Jakub Jelinek <jakub@redhat.com>
++
++ Backport from mainline
++ 2011-12-08 Jakub Jelinek <jakub@redhat.com>
++
++ PR tree-optimization/51466
++ * gcc.c-torture/execute/pr51466.c: New test.
++
++ 2011-11-28 Jakub Jelinek <jakub@redhat.com>
++
++ PR tree-optimization/50078
++ * gcc.dg/pr50078.c: New test.
++
++2011-12-09 Kazu Hirata <kazu@codesourcery.com>
++
++ Backport from mainline:
++
++ 2011-12-05 Kazu Hirata <kazu@codesourcery.com>
++
++ PR target/51408
++ * gcc.dg/pr51408.c: New.
++
++2011-12-08 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/51448
++ * gfortran.dg/realloc_on_assign_8.f90: New.
++
++2011-12-08 Teresa Johnson <tejohnson@google.com>
++
++ * gcc.target/i386/movdi-rex64.c: Remove unnecessary
++ unused label.
++
++2011-12-08 Teresa Johnson <tejohnson@google.com>
++
++ * gcc.target/i386/movdi-rex64.c: Remove unnecessary
++ -Wwrite-strings option.
++
++2011-12-08 Teresa Johnson <tejohnson@google.com>
++
++ * gcc.target/i386/movdi-rex64.c: New.
++
++2011-12-08 Jakub Jelinek <jakub@redhat.com>
++
++ Backport from mainline
++ 2011-12-05 Jakub Jelinek <jakub@redhat.com>
++
++ PR debug/51410
++ * gcc.dg/debug/dwarf2/pr51410.c: New test.
++
++ PR c/51339
++ * gcc.dg/gomp/pr51339.c: New test.
++
++ 2011-12-05 Jakub Jelinek <jakub@redhat.com>
++ Eric Botcazou <ebotcazou@adacore.com>
++
++ PR middle-end/51323
++ PR middle-end/50074
++ * gcc.c-torture/execute/pr51323.c: New test.
++
++ 2011-11-30 Jakub Jelinek <jakub@redhat.com>
++
++ PR rtl-optimization/48721
++ * gcc.target/i386/pr48721.c: New test.
++
++2011-12-08 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc.c-torture/execute/20111208-1.c: New test.
++
++ Backport from mainline
++ 2011-09-25 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gnat.dg/frame_overflow.ads: New.
++ * gnat.dg/frame_overflow.adb: Adjust.
++ * gnat.dg/specs/addr1.ads: Likewise.
++
++2011-12-06 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/51435
++ * gfortran.dg/default_initialization_5.f90: New.
++
++2011-12-06 Martin Jambor <mjambor@suse.cz>
++
++ PR tree-optimization/50622
++ * g++.dg/tree-ssa/pr50622.C: New test.
++
++2011-12-04 Uros Bizjak <ubizjak@gmail.com>
++ Jérémie Detrey <Jeremie.Detrey@loria.fr>
++
++ PR target/51393
++ * gcc.target/i386/pr51393.c: New test.
++
++2011-12-03 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/50684
++ * gfortran.dg/move_alloc_8.f90: New.
++
+ 2011-11-25 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/50408
+@@ -75,9 +209,9 @@
+
+ 2011-10-20 Uros Bizjak <ubizjak@gmail.com>
+
+- * gcc.dg/ipa/ipa-sra-2.c: Add dg-require-effective-target
+- non_strict_align.
+- * gcc.dg/ipa/ipa-sra-6.c: Ditto.
++ * gcc.dg/ipa/ipa-sra-2.c: Add dg-require-effective-target
++ non_strict_align.
++ * gcc.dg/ipa/ipa-sra-6.c: Ditto.
+
+ 2011-10-19 Jason Merrill <jason@redhat.com>
+
+Index: gcc/testsuite/g++.dg/vect/pr51485.cc
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/vect/pr51485.cc (revision
++++ b/src/gcc/testsuite/g++.dg/vect/pr51485.cc (revision
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++
++struct A { A (); unsigned int a; };
++double bar (A a) throw () __attribute__((pure));
++
++void
++foo (unsigned int x, double *y, A *z)
++{
++ unsigned int i;
++ for (i = 0; i < x; i++)
++ y[i] = bar (z[i]);
++}
++
++/* { dg-final { cleanup-tree-dump "vect" } } */
+Index: gcc/testsuite/g++.dg/other/enum2.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/other/enum2.C (revision
++++ b/src/gcc/testsuite/g++.dg/other/enum2.C (revision
+@@ -0,0 +1,3 @@
++// PR c++/51248
++
++enum E { e = sizeof(const E*) };
+Index: gcc/testsuite/g++.dg/tree-ssa/pr50622.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/tree-ssa/pr50622.C (revision
++++ b/src/gcc/testsuite/g++.dg/tree-ssa/pr50622.C (revision
+@@ -0,0 +1,30 @@
++// { dg-do compile }
++// { dg-options "-O2" }
++
++typedef __complex__ double Value;
++struct LorentzVector
++{
++ LorentzVector & operator+=(const LorentzVector & a) {
++ theX += a.theX;
++ theY += a.theY;
++ theZ += a.theZ;
++ theT += a.theT;
++ return *this;
++ }
++
++ Value theX;
++ Value theY;
++ Value theZ;
++ Value theT;
++};
++
++inline LorentzVector
++operator+(LorentzVector a, const LorentzVector & b) {
++ return a += b;
++}
++
++Value ex, et;
++LorentzVector sum() {
++ LorentzVector v1; v1.theX =ex; v1.theY =ex+et; v1.theZ =ex-et; v1.theT =et;
++ return v1+v1;
++}
+Index: gcc/testsuite/g++.dg/cpp0x/rv-cast3.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C (revision
++++ b/src/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C (revision
+@@ -0,0 +1,17 @@
++// PR c++/51406
++// { dg-do run { target c++11 } }
++
++extern "C" int printf(const char *,...);
++extern "C" void abort();
++
++struct A { int a; A() : a(1) {} };
++struct B { int b; B() : b(2) {} };
++struct X : A, B {};
++
++int main() {
++ X x;
++ int a=static_cast<A&&>(x).a;
++ int b=static_cast<B&&>(x).b;
++ // printf ("%d %d\n", a, b);
++ if (a!=1 || b!=2) abort();
++}
+Index: gcc/testsuite/g++.dg/cpp0x/rv-cast4.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C (revision
++++ b/src/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C (revision
+@@ -0,0 +1,13 @@
++// PR c++/51161
++// { dg-do compile { target c++11 } }
++
++struct A{};
++struct B : A{};
++struct C : A{};
++struct D : B, C{};
++
++int main()
++{
++ D d;
++ static_cast<A &&>(d); // { dg-error "ambiguous" }
++}
+Index: gcc/cp/typeck.c
+===================================================================
+--- a/src/gcc/cp/typeck.c (revision
++++ b/src/gcc/cp/typeck.c (revision
+@@ -5770,8 +5770,18 @@
+ && reference_related_p (TREE_TYPE (type), intype)
+ && (c_cast_p || at_least_as_qualified_p (TREE_TYPE (type), intype)))
+ {
+- expr = build_typed_address (expr, type);
+- return convert_from_reference (expr);
++ /* Handle the lvalue case here by casting to lvalue reference and
++ then changing it to an rvalue reference. Casting an xvalue to
++ rvalue reference will be handled by the main code path. */
++ tree lref = cp_build_reference_type (TREE_TYPE (type), false);
++ result = (perform_direct_initialization_if_possible
++ (lref, expr, c_cast_p, complain));
++ result = cp_fold_convert (type, result);
++ /* Make sure we don't fold back down to a named rvalue reference,
++ because that would be an lvalue. */
++ if (DECL_P (result))
++ result = build1 (NON_LVALUE_EXPR, type, result);
++ return convert_from_reference (result);
+ }
+
+ /* Resolve overloaded address here rather than once in
+Index: gcc/cp/decl.c
+===================================================================
+--- a/src/gcc/cp/decl.c (revision
++++ b/src/gcc/cp/decl.c (revision
+@@ -11540,15 +11540,19 @@
+ static void
+ copy_type_enum (tree dst, tree src)
+ {
+- TYPE_MIN_VALUE (dst) = TYPE_MIN_VALUE (src);
+- TYPE_MAX_VALUE (dst) = TYPE_MAX_VALUE (src);
+- TYPE_SIZE (dst) = TYPE_SIZE (src);
+- TYPE_SIZE_UNIT (dst) = TYPE_SIZE_UNIT (src);
+- SET_TYPE_MODE (dst, TYPE_MODE (src));
+- TYPE_PRECISION (dst) = TYPE_PRECISION (src);
+- TYPE_ALIGN (dst) = TYPE_ALIGN (src);
+- TYPE_USER_ALIGN (dst) = TYPE_USER_ALIGN (src);
+- TYPE_UNSIGNED (dst) = TYPE_UNSIGNED (src);
++ tree t;
++ for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
++ {
++ TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
++ TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
++ TYPE_SIZE (t) = TYPE_SIZE (src);
++ TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
++ SET_TYPE_MODE (dst, TYPE_MODE (src));
++ TYPE_PRECISION (t) = TYPE_PRECISION (src);
++ TYPE_ALIGN (t) = TYPE_ALIGN (src);
++ TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
++ TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
++ }
+ }
+
+ /* Begin compiling the definition of an enumeration type.
+@@ -11903,9 +11907,12 @@
+ return;
+ }
+
+- /* Here there should not be any variants of this type. */
++ /* If this is a forward declaration, there should not be any variants,
++ though we can get a variant in the middle of an enum-specifier with
++ wacky code like 'enum E { e = sizeof(const E*) };' */
+ gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
+- && !TYPE_NEXT_VARIANT (enumtype));
++ && (TYPE_VALUES (enumtype)
++ || !TYPE_NEXT_VARIANT (enumtype)));
+ }
+
+ /* Build and install a CONST_DECL for an enumeration constant of the
+Index: gcc/cp/ChangeLog
+===================================================================
+--- a/src/gcc/cp/ChangeLog (revision
++++ b/src/gcc/cp/ChangeLog (revision
+@@ -1,3 +1,16 @@
++2011-12-14 Jason Merrill <jason@redhat.com>
++
++ PR c++/51248
++ * decl.c (copy_type_enum): Also update variants.
++ (finish_enum): Allow variants of complete enums.
++
++2011-12-13 Jason Merrill <jason@redhat.com>
++
++ PR c++/51406
++ PR c++/51161
++ * typeck.c (build_static_cast_1): Fix cast of lvalue to
++ base rvalue reference.
++
+ 2011-11-22 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/51265
+Index: gcc/lto-cgraph.c
+===================================================================
+--- a/src/gcc/lto-cgraph.c (revision
++++ b/src/gcc/lto-cgraph.c (revision
+@@ -1792,9 +1792,9 @@
+ {
+ const struct lto_function_header *header =
+ (const struct lto_function_header *) data;
+- const int32_t cfg_offset = sizeof (struct lto_function_header);
+- const int32_t main_offset = cfg_offset + header->cfg_size;
+- const int32_t string_offset = main_offset + header->main_size;
++ const int cfg_offset = sizeof (struct lto_function_header);
++ const int main_offset = cfg_offset + header->cfg_size;
++ const int string_offset = main_offset + header->main_size;
+ struct data_in *data_in;
+ struct lto_input_block ib_main;
+ unsigned int i;
+Index: gcc/lto-streamer-out.c
+===================================================================
+--- a/src/gcc/lto-streamer-out.c (revision
++++ b/src/gcc/lto-streamer-out.c (revision
+@@ -2408,7 +2408,7 @@
+ enum gcc_plugin_symbol_kind kind;
+ enum gcc_plugin_symbol_visibility visibility;
+ int slot_num;
+- uint64_t size;
++ unsigned HOST_WIDEST_INT size;
+ const char *comdat;
+ unsigned char c;
+
+@@ -2466,7 +2466,7 @@
+ when symbol has attribute (visibility("hidden")) specified.
+ targetm.binds_local_p check DECL_VISIBILITY_SPECIFIED and gets this
+ right. */
+-
++
+ if (DECL_EXTERNAL (t)
+ && !targetm.binds_local_p (t))
+ visibility = GCCPV_DEFAULT;
+@@ -2488,14 +2488,9 @@
+ }
+
+ if (kind == GCCPK_COMMON
+- && DECL_SIZE (t)
+- && TREE_CODE (DECL_SIZE (t)) == INTEGER_CST)
+- {
+- size = (HOST_BITS_PER_WIDE_INT >= 64)
+- ? (uint64_t) int_size_in_bytes (TREE_TYPE (t))
+- : (((uint64_t) TREE_INT_CST_HIGH (DECL_SIZE_UNIT (t))) << 32)
+- | TREE_INT_CST_LOW (DECL_SIZE_UNIT (t));
+- }
++ && DECL_SIZE_UNIT (t)
++ && TREE_CODE (DECL_SIZE_UNIT (t)) == INTEGER_CST)
++ size = TREE_INT_CST_LOW (DECL_SIZE_UNIT (t));
+ else
+ size = 0;
+
+Index: gcc/ada/ChangeLog
+===================================================================
+--- a/src/gcc/ada/ChangeLog (revision
++++ b/src/gcc/ada/ChangeLog (revision
+@@ -1,3 +1,12 @@
++2011-12-08 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR tree-optimization/51315
++ Backport from mainline
++ 2011-09-25 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc-interface/decl.c (gnat_to_gnu_entity) <object>: Do not promote
++ the alignment if this doesn't prevent BLKmode access to the object.
++
+ 2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
+
+ Backport from mainline r181474
+Index: gcc/ada/gcc-interface/decl.c
+===================================================================
+--- a/src/gcc/ada/gcc-interface/decl.c (revision
++++ b/src/gcc/ada/gcc-interface/decl.c (revision
+@@ -808,16 +808,30 @@
+ && No (Address_Clause (gnat_entity))))
+ && TREE_CODE (TYPE_SIZE (gnu_type)) == INTEGER_CST)
+ {
+- /* No point in jumping through all the hoops needed in order
++ unsigned int size_cap, align_cap;
++
++ /* No point in promoting the alignment if this doesn't prevent
++ BLKmode access to the object, in particular block copy, as
++ this will for example disable the NRV optimization for it.
++ No point in jumping through all the hoops needed in order
+ to support BIGGEST_ALIGNMENT if we don't really have to.
+ So we cap to the smallest alignment that corresponds to
+ a known efficient memory access pattern of the target. */
+- unsigned int align_cap = Is_Atomic (gnat_entity)
+- ? BIGGEST_ALIGNMENT
+- : get_mode_alignment (ptr_mode);
++ if (Is_Atomic (gnat_entity))
++ {
++ size_cap = UINT_MAX;
++ align_cap = BIGGEST_ALIGNMENT;
++ }
++ else
++ {
++ size_cap = MAX_FIXED_MODE_SIZE;
++ align_cap = get_mode_alignment (ptr_mode);
++ }
+
+ if (!host_integerp (TYPE_SIZE (gnu_type), 1)
+- || compare_tree_int (TYPE_SIZE (gnu_type), align_cap) >= 0)
++ || compare_tree_int (TYPE_SIZE (gnu_type), size_cap) > 0)
++ align = 0;
++ else if (compare_tree_int (TYPE_SIZE (gnu_type), align_cap) > 0)
+ align = align_cap;
+ else
+ align = ceil_alignment (tree_low_cst (TYPE_SIZE (gnu_type), 1));
+Index: gcc/lto-streamer-in.c
+===================================================================
+--- a/src/gcc/lto-streamer-in.c (revision
++++ b/src/gcc/lto-streamer-in.c (revision
+@@ -1366,9 +1366,9 @@
+ {
+ const struct lto_function_header *header;
+ struct data_in *data_in;
+- int32_t cfg_offset;
+- int32_t main_offset;
+- int32_t string_offset;
++ int cfg_offset;
++ int main_offset;
++ int string_offset;
+ struct lto_input_block ib_cfg;
+ struct lto_input_block ib_main;
+
+Index: gcc/c-decl.c
+===================================================================
+--- a/src/gcc/c-decl.c (revision
++++ b/src/gcc/c-decl.c (revision
+@@ -721,7 +721,7 @@
+
+ complete_array_type (&TREE_TYPE (decl), NULL_TREE, true);
+
+- layout_decl (decl, 0);
++ relayout_decl (decl);
+ }
+ }
+ }
+@@ -1200,7 +1200,7 @@
+ DECL_CHAIN (p) = BLOCK_VARS (block);
+ BLOCK_VARS (block) = p;
+ }
+- else if (VAR_OR_FUNCTION_DECL_P (p))
++ else if (VAR_OR_FUNCTION_DECL_P (p) && scope != file_scope)
+ {
+ /* For block local externs add a special
+ DECL_EXTERNAL decl for debug info generation. */
+@@ -4261,7 +4261,7 @@
+ if (DECL_INITIAL (decl))
+ TREE_TYPE (DECL_INITIAL (decl)) = type;
+
+- layout_decl (decl, 0);
++ relayout_decl (decl);
+ }
+
+ if (TREE_CODE (decl) == VAR_DECL)
+Index: gcc/fortran/trans-array.c
+===================================================================
+--- a/src/gcc/fortran/trans-array.c (revision
++++ b/src/gcc/fortran/trans-array.c (revision
+@@ -6772,8 +6772,17 @@
+ gfc_array_index_type, cond,
+ lbound, gfc_index_one_node);
+ }
+- else if (expr->expr_type == EXPR_VARIABLE)
++
++ if (expr->expr_type == EXPR_FUNCTION)
+ {
++ /* A conversion function, so use the argument. */
++ gcc_assert (expr->value.function.isym
++ && expr->value.function.isym->conversion);
++ expr = expr->value.function.actual->expr;
++ }
++
++ if (expr->expr_type == EXPR_VARIABLE)
++ {
+ tmp = TREE_TYPE (expr->symtree->n.sym->backend_decl);
+ for (ref = expr->ref; ref; ref = ref->next)
+ {
+@@ -6785,15 +6794,6 @@
+ }
+ return GFC_TYPE_ARRAY_LBOUND(tmp, dim);
+ }
+- else if (expr->expr_type == EXPR_FUNCTION)
+- {
+- /* A conversion function, so use the argument. */
+- expr = expr->value.function.actual->expr;
+- if (expr->expr_type != EXPR_VARIABLE)
+- return gfc_index_one_node;
+- desc = TREE_TYPE (expr->symtree->n.sym->backend_decl);
+- return get_std_lbound (expr, desc, dim, assumed_size);
+- }
+
+ return gfc_index_one_node;
+ }
+Index: gcc/fortran/ChangeLog
+===================================================================
+--- a/src/gcc/fortran/ChangeLog (revision
++++ b/src/gcc/fortran/ChangeLog (revision
+@@ -1,3 +1,40 @@
++2011-12-11 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/50923
++ * trans-decl.c (generate_local_decl): Set TREE_NO_WARNING only
++ if the front end has printed a warning.
++ (gfc_generate_function_code): Fix unset-result warning.
++
++2011-12-11 Thomas Koenig <tkoenig@gcc.gnu.org>
++
++ PR fortran/51338
++ Backport from trunk
++ * dependency.c (are_identical_variables): Handle case where
++ end fields of substring references are NULL.
++
++2011-12-08 Toon Moene <toon@moene.org>
++
++ PR fortran/51310
++ * invoke.texi: Itemize the cases for which
++ -finit-<type>=<constant> doesn't work.
++
++2011-12-08 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/51448
++ * fortran/trans-array.c (get_std_lbound): Fix handling of
++ conversion functions.
++
++2011-12-06 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/51435
++ * expr.c (gfc_has_default_initializer): Fix handling of
++ DT with initialized pointer components.
++
++2011-12-03 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/50684
++ * check.c (variable_check): Fix intent(in) check.
++
+ 2011-11-25 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/50408
+Index: gcc/fortran/expr.c
+===================================================================
+--- a/src/gcc/fortran/expr.c (revision
++++ b/src/gcc/fortran/expr.c (revision
+@@ -3679,6 +3679,8 @@
+ if (!c->attr.pointer
+ && gfc_has_default_initializer (c->ts.u.derived))
+ return true;
++ if (c->attr.pointer && c->initializer)
++ return true;
+ }
+ else
+ {
+@@ -3689,6 +3691,7 @@
+ return false;
+ }
+
++
+ /* Get an expression for a default initializer. */
+
+ gfc_expr *
+Index: gcc/fortran/trans-decl.c
+===================================================================
+--- a/src/gcc/fortran/trans-decl.c (revision
++++ b/src/gcc/fortran/trans-decl.c (revision
+@@ -4184,10 +4184,16 @@
+ "declared INTENT(OUT) but was not set and "
+ "does not have a default initializer",
+ sym->name, &sym->declared_at);
++ if (sym->backend_decl != NULL_TREE)
++ TREE_NO_WARNING(sym->backend_decl) = 1;
+ }
+ else if (gfc_option.warn_unused_dummy_argument)
+- gfc_warning ("Unused dummy argument '%s' at %L", sym->name,
++ {
++ gfc_warning ("Unused dummy argument '%s' at %L", sym->name,
+ &sym->declared_at);
++ if (sym->backend_decl != NULL_TREE)
++ TREE_NO_WARNING(sym->backend_decl) = 1;
++ }
+ }
+
+ /* Warn for unused variables, but not if they're inside a common
+@@ -4232,11 +4238,6 @@
+ mark the symbol now, as well as in traverse_ns, to prevent
+ getting stuck in a circular dependency. */
+ sym->mark = 1;
+-
+- /* We do not want the middle-end to warn about unused parameters
+- as this was already done above. */
+- if (sym->attr.dummy && sym->backend_decl != NULL_TREE)
+- TREE_NO_WARNING(sym->backend_decl) = 1;
+ }
+ else if (sym->attr.flavor == FL_PARAMETER)
+ {
+@@ -4851,11 +4852,11 @@
+ if (result == NULL_TREE)
+ {
+ /* TODO: move to the appropriate place in resolve.c. */
+- if (warn_return_type && !sym->attr.referenced && sym == sym->result)
++ if (warn_return_type && sym == sym->result)
+ gfc_warning ("Return value of function '%s' at %L not set",
+ sym->name, &sym->declared_at);
+-
+- TREE_NO_WARNING(sym->backend_decl) = 1;
++ if (warn_return_type)
++ TREE_NO_WARNING(sym->backend_decl) = 1;
+ }
+ else
+ gfc_add_expr_to_block (&body, gfc_generate_return ());
+Index: gcc/fortran/check.c
+===================================================================
+--- a/src/gcc/fortran/check.c (revision
++++ b/src/gcc/fortran/check.c (revision
+@@ -485,10 +485,31 @@
+ && (gfc_current_intrinsic_arg[n]->intent == INTENT_OUT
+ || gfc_current_intrinsic_arg[n]->intent == INTENT_INOUT))
+ {
+- gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
+- gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
+- &e->where);
+- return FAILURE;
++ gfc_ref *ref;
++ bool pointer = e->symtree->n.sym->ts.type == BT_CLASS
++ && CLASS_DATA (e->symtree->n.sym)
++ ? CLASS_DATA (e->symtree->n.sym)->attr.class_pointer
++ : e->symtree->n.sym->attr.pointer;
++
++ for (ref = e->ref; ref; ref = ref->next)
++ {
++ if (pointer && ref->type == REF_COMPONENT)
++ break;
++ if (ref->type == REF_COMPONENT
++ && ((ref->u.c.component->ts.type == BT_CLASS
++ && CLASS_DATA (ref->u.c.component)->attr.class_pointer)
++ || (ref->u.c.component->ts.type != BT_CLASS
++ && ref->u.c.component->attr.pointer)))
++ break;
++ }
++
++ if (!ref)
++ {
++ gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be "
++ "INTENT(IN)", gfc_current_intrinsic_arg[n]->name,
++ gfc_current_intrinsic, &e->where);
++ return FAILURE;
++ }
+ }
+
+ if (e->expr_type == EXPR_VARIABLE
+Index: gcc/fortran/dependency.c
+===================================================================
+--- a/src/gcc/fortran/dependency.c (revision
++++ b/src/gcc/fortran/dependency.c (revision
+@@ -163,9 +163,19 @@
+ break;
+
+ case REF_SUBSTRING:
+- if (gfc_dep_compare_expr (r1->u.ss.start, r2->u.ss.start) != 0
+- || gfc_dep_compare_expr (r1->u.ss.end, r2->u.ss.end) != 0)
++ if (gfc_dep_compare_expr (r1->u.ss.start, r2->u.ss.start) != 0)
+ return false;
++
++ /* If both are NULL, the end length compares equal, because we
++ are looking at the same variable. This can only happen for
++ assumed- or deferred-length character arguments. */
++
++ if (r1->u.ss.end == NULL && r2->u.ss.end == NULL)
++ break;
++
++ if (gfc_dep_compare_expr (r1->u.ss.end, r2->u.ss.end) != 0)
++ return false;
++
+ break;
+
+ default:
+Index: gcc/regmove.c
+===================================================================
+--- a/src/gcc/regmove.c (revision
++++ b/src/gcc/regmove.c (revision
+@@ -860,7 +860,7 @@
+ if (REG_N_CALLS_CROSSED (REGNO (src)) == 0)
+ break;
+
+- if (call_used_regs [REGNO (dst)]
++ if ((HARD_REGISTER_P (dst) && call_used_regs [REGNO (dst)])
+ || find_reg_fusage (p, CLOBBER, dst))
+ break;
+ }
+Index: gcc/df.h
+===================================================================
+--- a/src/gcc/df.h (revision
++++ b/src/gcc/df.h (revision
+@@ -53,7 +53,7 @@
+ #define DF_RD 3 /* Reaching Defs. */
+ #define DF_CHAIN 4 /* Def-Use and/or Use-Def Chains. */
+ #define DF_WORD_LR 5 /* Subreg tracking lr. */
+-#define DF_NOTE 6 /* REG_DEF and REG_UNUSED notes. */
++#define DF_NOTE 6 /* REG_DEAD and REG_UNUSED notes. */
+ #define DF_MD 7 /* Multiple Definitions. */
+
+ #define DF_LAST_PROBLEM_PLUS1 (DF_MD + 1)
+Index: gcc/lto-section-in.c
+===================================================================
+--- a/src/gcc/lto-section-in.c (revision
++++ b/src/gcc/lto-section-in.c (revision
+@@ -296,7 +296,7 @@
+ = (const struct lto_simple_header *) data;
+
+ struct lto_input_block* ib_main;
+- int32_t main_offset = sizeof (struct lto_simple_header);
++ int main_offset = sizeof (struct lto_simple_header);
+
+ if (!data)
+ return NULL;
+Index: gcc/tree-vect-data-refs.c
+===================================================================
+--- a/src/gcc/tree-vect-data-refs.c (revision
++++ b/src/gcc/tree-vect-data-refs.c (revision
+@@ -2631,6 +2631,16 @@
+ return false;
+ }
+
++ if (is_gimple_call (stmt))
++ {
++ if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
++ {
++ fprintf (vect_dump, "not vectorized: dr in a call ");
++ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
++ }
++ return false;
++ }
++
+ /* Update DR field in stmt_vec_info struct. */
+
+ /* If the dataref is in an inner-loop of the loop that is considered for
+Index: gcc/calls.c
+===================================================================
+--- a/src/gcc/calls.c (revision
++++ b/src/gcc/calls.c (revision
+@@ -1548,6 +1548,131 @@
+ return funexp;
+ }
+
++/* Internal state for internal_arg_pointer_based_exp and its helpers. */
++static struct
++{
++ /* Last insn that has been scanned by internal_arg_pointer_based_exp_scan,
++ or NULL_RTX if none has been scanned yet. */
++ rtx scan_start;
++ /* Vector indexed by REGNO - FIRST_PSEUDO_REGISTER, recording if a pseudo is
++ based on crtl->args.internal_arg_pointer. The element is NULL_RTX if the
++ pseudo isn't based on it, a CONST_INT offset if the pseudo is based on it
++ with fixed offset, or PC if this is with variable or unknown offset. */
++ VEC(rtx, heap) *cache;
++} internal_arg_pointer_exp_state;
++
++static rtx internal_arg_pointer_based_exp (rtx, bool);
++
++/* Helper function for internal_arg_pointer_based_exp. Scan insns in
++ the tail call sequence, starting with first insn that hasn't been
++ scanned yet, and note for each pseudo on the LHS whether it is based
++ on crtl->args.internal_arg_pointer or not, and what offset from that
++ that pointer it has. */
++
++static void
++internal_arg_pointer_based_exp_scan (void)
++{
++ rtx insn, scan_start = internal_arg_pointer_exp_state.scan_start;
++
++ if (scan_start == NULL_RTX)
++ insn = get_insns ();
++ else
++ insn = NEXT_INSN (scan_start);
++
++ while (insn)
++ {
++ rtx set = single_set (insn);
++ if (set && REG_P (SET_DEST (set)) && !HARD_REGISTER_P (SET_DEST (set)))
++ {
++ rtx val = NULL_RTX;
++ unsigned int idx = REGNO (SET_DEST (set)) - FIRST_PSEUDO_REGISTER;
++ /* Punt on pseudos set multiple times. */
++ if (idx < VEC_length (rtx, internal_arg_pointer_exp_state.cache)
++ && (VEC_index (rtx, internal_arg_pointer_exp_state.cache, idx)
++ != NULL_RTX))
++ val = pc_rtx;
++ else
++ val = internal_arg_pointer_based_exp (SET_SRC (set), false);
++ if (val != NULL_RTX)
++ {
++ if (idx
++ >= VEC_length (rtx, internal_arg_pointer_exp_state.cache))
++ VEC_safe_grow_cleared (rtx, heap,
++ internal_arg_pointer_exp_state.cache,
++ idx + 1);
++ VEC_replace (rtx, internal_arg_pointer_exp_state.cache,
++ idx, val);
++ }
++ }
++ if (NEXT_INSN (insn) == NULL_RTX)
++ scan_start = insn;
++ insn = NEXT_INSN (insn);
++ }
++
++ internal_arg_pointer_exp_state.scan_start = scan_start;
++}
++
++/* Helper function for internal_arg_pointer_based_exp, called through
++ for_each_rtx. Return 1 if *LOC is a register based on
++ crtl->args.internal_arg_pointer. Return -1 if *LOC is not based on it
++ and the subexpressions need not be examined. Otherwise return 0. */
++
++static int
++internal_arg_pointer_based_exp_1 (rtx *loc, void *data ATTRIBUTE_UNUSED)
++{
++ if (REG_P (*loc) && internal_arg_pointer_based_exp (*loc, false) != NULL_RTX)
++ return 1;
++ if (MEM_P (*loc))
++ return -1;
++ return 0;
++}
++
++/* Compute whether RTL is based on crtl->args.internal_arg_pointer. Return
++ NULL_RTX if RTL isn't based on it, a CONST_INT offset if RTL is based on
++ it with fixed offset, or PC if this is with variable or unknown offset.
++ TOPLEVEL is true if the function is invoked at the topmost level. */
++
++static rtx
++internal_arg_pointer_based_exp (rtx rtl, bool toplevel)
++{
++ if (CONSTANT_P (rtl))
++ return NULL_RTX;
++
++ if (rtl == crtl->args.internal_arg_pointer)
++ return const0_rtx;
++
++ if (REG_P (rtl) && HARD_REGISTER_P (rtl))
++ return NULL_RTX;
++
++ if (GET_CODE (rtl) == PLUS && CONST_INT_P (XEXP (rtl, 1)))
++ {
++ rtx val = internal_arg_pointer_based_exp (XEXP (rtl, 0), toplevel);
++ if (val == NULL_RTX || val == pc_rtx)
++ return val;
++ return plus_constant (val, INTVAL (XEXP (rtl, 1)));
++ }
++
++ /* When called at the topmost level, scan pseudo assignments in between the
++ last scanned instruction in the tail call sequence and the latest insn
++ in that sequence. */
++ if (toplevel)
++ internal_arg_pointer_based_exp_scan ();
++
++ if (REG_P (rtl))
++ {
++ unsigned int idx = REGNO (rtl) - FIRST_PSEUDO_REGISTER;
++ if (idx < VEC_length (rtx, internal_arg_pointer_exp_state.cache))
++ return VEC_index (rtx, internal_arg_pointer_exp_state.cache, idx);
++
++ return NULL_RTX;
++ }
++
++ if (for_each_rtx (&rtl, internal_arg_pointer_based_exp_1, NULL))
++ return pc_rtx;
++
++ return NULL_RTX;
++}
++
+ /* Return true if and only if SIZE storage units (usually bytes)
+ starting from address ADDR overlap with already clobbered argument
+ area. This function is used to determine if we should give up a
+@@ -1557,20 +1682,17 @@
+ mem_overlaps_already_clobbered_arg_p (rtx addr, unsigned HOST_WIDE_INT size)
+ {
+ HOST_WIDE_INT i;
++ rtx val;
+
+- if (addr == crtl->args.internal_arg_pointer)
+- i = 0;
+- else if (GET_CODE (addr) == PLUS
+- && XEXP (addr, 0) == crtl->args.internal_arg_pointer
+- && CONST_INT_P (XEXP (addr, 1)))
+- i = INTVAL (XEXP (addr, 1));
+- /* Return true for arg pointer based indexed addressing. */
+- else if (GET_CODE (addr) == PLUS
+- && (XEXP (addr, 0) == crtl->args.internal_arg_pointer
+- || XEXP (addr, 1) == crtl->args.internal_arg_pointer))
++ if (sbitmap_empty_p (stored_args_map))
++ return false;
++ val = internal_arg_pointer_based_exp (addr, true);
++ if (val == NULL_RTX)
++ return false;
++ else if (val == pc_rtx)
+ return true;
+ else
+- return false;
++ i = INTVAL (val);
+
+ #ifdef ARGS_GROW_DOWNWARD
+ i = -i - size;
+@@ -3175,6 +3297,8 @@
+ }
+
+ sbitmap_free (stored_args_map);
++ internal_arg_pointer_exp_state.scan_start = NULL_RTX;
++ VEC_free (rtx, heap, internal_arg_pointer_exp_state.cache);
+ }
+ else
+ {
+Index: gcc/tree-sra.c
+===================================================================
+--- a/src/gcc/tree-sra.c (revision
++++ b/src/gcc/tree-sra.c (revision
+@@ -1020,26 +1020,28 @@
+ return false;
+ }
+
+-/* Return true iff type of EXP is not sufficiently aligned. */
++/* Return true if EXP is a memory reference less aligned than ALIGN. This is
++ invoked only on strict-alignment targets. */
+
+ static bool
+-tree_non_mode_aligned_mem_p (tree exp)
++tree_non_aligned_mem_p (tree exp, unsigned int align)
+ {
+- enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
+- unsigned int align;
++ unsigned int exp_align;
+
+ if (TREE_CODE (exp) == VIEW_CONVERT_EXPR)
+ exp = TREE_OPERAND (exp, 0);
+
+- if (TREE_CODE (exp) == SSA_NAME
+- || TREE_CODE (exp) == MEM_REF
+- || mode == BLKmode
+- || is_gimple_min_invariant (exp)
+- || !STRICT_ALIGNMENT)
++ if (TREE_CODE (exp) == SSA_NAME || is_gimple_min_invariant (exp))
+ return false;
+
+- align = get_object_alignment (exp, BIGGEST_ALIGNMENT);
+- if (GET_MODE_ALIGNMENT (mode) > align)
++ /* get_object_alignment will fall back to BITS_PER_UNIT if it cannot
++ compute an explicit alignment. Pretend that dereferenced pointers
++ are always aligned on strict-alignment targets. */
++ exp_align = get_object_alignment (exp, BIGGEST_ALIGNMENT);
++ if (TREE_CODE (exp) == MEM_REF || TREE_CODE (exp) == TARGET_MEM_REF)
++ exp_align = MAX (TYPE_ALIGN (TREE_TYPE (exp)), exp_align);
++
++ if (exp_align < align)
+ return true;
+
+ return false;
+@@ -1071,7 +1073,11 @@
+ if (lacc)
+ {
+ lacc->grp_assignment_write = 1;
+- lacc->grp_unscalarizable_region |= tree_non_mode_aligned_mem_p (rhs);
++ if (STRICT_ALIGNMENT
++ && tree_non_aligned_mem_p (rhs,
++ get_object_alignment (lhs,
++ BIGGEST_ALIGNMENT)))
++ lacc->grp_unscalarizable_region = 1;
+ }
+
+ if (racc)
+@@ -1080,7 +1086,11 @@
+ if (should_scalarize_away_bitmap && !gimple_has_volatile_ops (stmt)
+ && !is_gimple_reg_type (racc->type))
+ bitmap_set_bit (should_scalarize_away_bitmap, DECL_UID (racc->base));
+- racc->grp_unscalarizable_region |= tree_non_mode_aligned_mem_p (lhs);
++ if (STRICT_ALIGNMENT
++ && tree_non_aligned_mem_p (lhs,
++ get_object_alignment (rhs,
++ BIGGEST_ALIGNMENT)))
++ racc->grp_unscalarizable_region = 1;
+ }
+
+ if (lacc && racc
+@@ -1435,29 +1445,61 @@
+ return fold_build2_loc (loc, MEM_REF, exp_type, base, off);
+ }
+
++DEF_VEC_ALLOC_P_STACK (tree);
++#define VEC_tree_stack_alloc(alloc) VEC_stack_alloc (tree, alloc)
++
+ /* Construct a memory reference to a part of an aggregate BASE at the given
+- OFFSET and of the same type as MODEL. In case this is a reference to a
+- component, the function will replicate the last COMPONENT_REF of model's
+- expr to access it. GSI and INSERT_AFTER have the same meaning as in
+- build_ref_for_offset. */
++ OFFSET and of the type of MODEL. In case this is a chain of references
++ to component, the function will replicate the chain of COMPONENT_REFs of
++ the expression of MODEL to access it. GSI and INSERT_AFTER have the same
++ meaning as in build_ref_for_offset. */
+
+ static tree
+ build_ref_for_model (location_t loc, tree base, HOST_WIDE_INT offset,
+ struct access *model, gimple_stmt_iterator *gsi,
+ bool insert_after)
+ {
++ tree type = model->type, t;
++ VEC(tree,stack) *cr_stack = NULL;
++
+ if (TREE_CODE (model->expr) == COMPONENT_REF)
+ {
+- tree t, exp_type, fld = TREE_OPERAND (model->expr, 1);
+- offset -= int_bit_position (fld);
+- exp_type = TREE_TYPE (TREE_OPERAND (model->expr, 0));
+- t = build_ref_for_offset (loc, base, offset, exp_type, gsi, insert_after);
+- return fold_build3_loc (loc, COMPONENT_REF, TREE_TYPE (fld), t, fld,
+- NULL_TREE);
++ tree expr = model->expr;
++
++ /* Create a stack of the COMPONENT_REFs so later we can walk them in
++ order from inner to outer. */
++ cr_stack = VEC_alloc (tree, stack, 6);
++
++ do {
++ tree field = TREE_OPERAND (expr, 1);
++ offset -= int_bit_position (field);
++
++ VEC_safe_push (tree, stack, cr_stack, expr);
++
++ expr = TREE_OPERAND (expr, 0);
++ type = TREE_TYPE (expr);
++ } while (TREE_CODE (expr) == COMPONENT_REF);
+ }
+- else
+- return build_ref_for_offset (loc, base, offset, model->type,
+- gsi, insert_after);
++
++ t = build_ref_for_offset (loc, base, offset, type, gsi, insert_after);
++
++ if (TREE_CODE (model->expr) == COMPONENT_REF)
++ {
++ unsigned i;
++ tree expr;
++
++ /* Now replicate the chain of COMPONENT_REFs from inner to outer. */
++ FOR_EACH_VEC_ELT_REVERSE (tree, cr_stack, i, expr)
++ {
++ tree field = TREE_OPERAND (expr, 1);
++ t = fold_build3_loc (loc, COMPONENT_REF, TREE_TYPE (field), t, field,
++ NULL_TREE);
++ }
++
++ VEC_free (tree, stack, cr_stack);
++ }
++
++ return t;
+ }
+
+ /* Construct a memory reference consisting of component_refs and array_refs to
+@@ -2594,6 +2636,10 @@
+ rhs = get_access_replacement (racc);
+ if (!useless_type_conversion_p (lacc->type, racc->type))
+ rhs = fold_build1_loc (loc, VIEW_CONVERT_EXPR, lacc->type, rhs);
++
++ if (racc->grp_partial_lhs && lacc->grp_partial_lhs)
++ rhs = force_gimple_operand_gsi (old_gsi, rhs, true, NULL_TREE,
++ true, GSI_SAME_STMT);
+ }
+ else
+ {
+@@ -3604,7 +3650,8 @@
+ || gimple_code (access->stmt) == GIMPLE_ASM))
+ return true;
+
+- if (tree_non_mode_aligned_mem_p (access->expr))
++ if (STRICT_ALIGNMENT
++ && tree_non_aligned_mem_p (access->expr, TYPE_ALIGN (access->type)))
+ return true;
+
+ return false;
+Index: gcc/lto/lto.c
+===================================================================
+--- a/src/gcc/lto/lto.c (revision
++++ b/src/gcc/lto/lto.c (revision
+@@ -198,7 +198,7 @@
+ uint32_t ix;
+ tree decl;
+ uint32_t i, j;
+-
++
+ ix = *data++;
+ decl = lto_streamer_cache_get (data_in->reader_cache, (int) ix);
+ if (TREE_CODE (decl) != FUNCTION_DECL)
+@@ -241,9 +241,9 @@
+ VEC(ld_plugin_symbol_resolution_t,heap) *resolutions)
+ {
+ const struct lto_decl_header *header = (const struct lto_decl_header *) data;
+- const int32_t decl_offset = sizeof (struct lto_decl_header);
+- const int32_t main_offset = decl_offset + header->decl_state_size;
+- const int32_t string_offset = main_offset + header->main_size;
++ const int decl_offset = sizeof (struct lto_decl_header);
++ const int main_offset = decl_offset + header->decl_state_size;
++ const int string_offset = main_offset + header->main_size;
+ struct lto_input_block ib_main;
+ struct data_in *data_in;
+ unsigned int i;
+@@ -291,17 +291,20 @@
+
+ if (data_ptr != data_end)
+ internal_error ("bytecode stream: garbage at the end of symbols section");
+-
++
+ /* Set the current decl state to be the global state. */
+ decl_data->current_decl_state = decl_data->global_decl_state;
+
+ lto_data_in_delete (data_in);
+ }
+
+-/* strtoll is not portable. */
+-int64_t
+-lto_parse_hex (const char *p) {
+- uint64_t ret = 0;
++/* Custom version of strtoll, which is not portable. */
++
++static HOST_WIDEST_INT
++lto_parse_hex (const char *p)
++{
++ HOST_WIDEST_INT ret = 0;
++
+ for (; *p != '\0'; ++p)
+ {
+ char c = *p;
+@@ -317,6 +320,7 @@
+ internal_error ("could not parse hex number");
+ ret |= part;
+ }
++
+ return ret;
+ }
+
+@@ -352,7 +356,7 @@
+ {
+ int t;
+ char offset_p[17];
+- int64_t offset;
++ HOST_WIDEST_INT offset;
+ t = fscanf (resolution, "@0x%16s", offset_p);
+ if (t != 1)
+ internal_error ("could not parse file offset");
+Index: gcc/lto/lto.h
+===================================================================
+--- a/src/gcc/lto/lto.h (revision
++++ b/src/gcc/lto/lto.h (revision
+@@ -60,6 +60,4 @@
+ size_t len;
+ };
+
+-int64_t lto_parse_hex (const char *p);
+-
+ #endif /* LTO_H */
+Index: gcc/lto/ChangeLog
+===================================================================
+--- a/src/gcc/lto/ChangeLog (revision
++++ b/src/gcc/lto/ChangeLog (revision
+@@ -1,3 +1,10 @@
++2011-12-13 Eric Botcazou <ebotcazou@adacore.com>
++
++ * lto.h (lto_parse_hex): Delete.
++ * lto.c (lto_read_decls): Use 'int' for offsets.
++ (lto_parse_hex): Make static and return proper 64-bit host type.
++ (lto_resolution_read): Use proper 64-bit host type.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: gcc/ipa-prop.c
+===================================================================
+--- a/src/gcc/ipa-prop.c (revision
++++ b/src/gcc/ipa-prop.c (revision
+@@ -2868,9 +2868,9 @@
+ {
+ const struct lto_function_header *header =
+ (const struct lto_function_header *) data;
+- const int32_t cfg_offset = sizeof (struct lto_function_header);
+- const int32_t main_offset = cfg_offset + header->cfg_size;
+- const int32_t string_offset = main_offset + header->main_size;
++ const int cfg_offset = sizeof (struct lto_function_header);
++ const int main_offset = cfg_offset + header->cfg_size;
++ const int string_offset = main_offset + header->main_size;
+ struct data_in *data_in;
+ struct lto_input_block ib_main;
+ unsigned int i;
+Index: gcc/tree-ssa-forwprop.c
+===================================================================
+--- a/src/gcc/tree-ssa-forwprop.c (revision
++++ b/src/gcc/tree-ssa-forwprop.c (revision
+@@ -872,7 +872,7 @@
+ TREE_TYPE (gimple_assign_rhs1 (use_stmt))))
+ {
+ tree *def_rhs_basep = &TREE_OPERAND (def_rhs, 0);
+- tree new_offset, new_base, saved;
++ tree new_offset, new_base, saved, new_lhs;
+ while (handled_component_p (*def_rhs_basep))
+ def_rhs_basep = &TREE_OPERAND (*def_rhs_basep, 0);
+ saved = *def_rhs_basep;
+@@ -891,9 +891,12 @@
+ *def_rhs_basep = build2 (MEM_REF, TREE_TYPE (*def_rhs_basep),
+ new_base, new_offset);
+ TREE_THIS_VOLATILE (*def_rhs_basep) = TREE_THIS_VOLATILE (lhs);
++ TREE_SIDE_EFFECTS (*def_rhs_basep) = TREE_SIDE_EFFECTS (lhs);
+ TREE_THIS_NOTRAP (*def_rhs_basep) = TREE_THIS_NOTRAP (lhs);
+- gimple_assign_set_lhs (use_stmt,
+- unshare_expr (TREE_OPERAND (def_rhs, 0)));
++ new_lhs = unshare_expr (TREE_OPERAND (def_rhs, 0));
++ gimple_assign_set_lhs (use_stmt, new_lhs);
++ TREE_THIS_VOLATILE (new_lhs) = TREE_THIS_VOLATILE (lhs);
++ TREE_SIDE_EFFECTS (new_lhs) = TREE_SIDE_EFFECTS (lhs);
+ *def_rhs_basep = saved;
+ tidy_after_forward_propagate_addr (use_stmt);
+ /* Continue propagating into the RHS if this was not the
+@@ -953,7 +956,7 @@
+ TREE_TYPE (TREE_OPERAND (def_rhs, 0))))
+ {
+ tree *def_rhs_basep = &TREE_OPERAND (def_rhs, 0);
+- tree new_offset, new_base, saved;
++ tree new_offset, new_base, saved, new_rhs;
+ while (handled_component_p (*def_rhs_basep))
+ def_rhs_basep = &TREE_OPERAND (*def_rhs_basep, 0);
+ saved = *def_rhs_basep;
+@@ -972,9 +975,12 @@
+ *def_rhs_basep = build2 (MEM_REF, TREE_TYPE (*def_rhs_basep),
+ new_base, new_offset);
+ TREE_THIS_VOLATILE (*def_rhs_basep) = TREE_THIS_VOLATILE (rhs);
++ TREE_SIDE_EFFECTS (*def_rhs_basep) = TREE_SIDE_EFFECTS (rhs);
+ TREE_THIS_NOTRAP (*def_rhs_basep) = TREE_THIS_NOTRAP (rhs);
+- gimple_assign_set_rhs1 (use_stmt,
+- unshare_expr (TREE_OPERAND (def_rhs, 0)));
++ new_rhs = unshare_expr (TREE_OPERAND (def_rhs, 0));
++ gimple_assign_set_rhs1 (use_stmt, new_rhs);
++ TREE_THIS_VOLATILE (new_rhs) = TREE_THIS_VOLATILE (rhs);
++ TREE_SIDE_EFFECTS (new_rhs) = TREE_SIDE_EFFECTS (rhs);
+ *def_rhs_basep = saved;
+ fold_stmt_inplace (use_stmt);
+ tidy_after_forward_propagate_addr (use_stmt);
+Index: gcc/varasm.c
+===================================================================
+--- a/src/gcc/varasm.c (revision
++++ b/src/gcc/varasm.c (revision
+@@ -6751,11 +6751,14 @@
+ /* A non-decl is an entry in the constant pool. */
+ if (!DECL_P (exp))
+ local_p = true;
+- /* Weakrefs may not bind locally, even though the weakref itself is
+- always static and therefore local.
+- FIXME: We can resolve this more curefuly by looking at the weakref
+- alias. */
+- else if (lookup_attribute ("weakref", DECL_ATTRIBUTES (exp)))
++ /* Weakrefs may not bind locally, even though the weakref itself is always
++ static and therefore local. Similarly, the resolver for ifunc functions
++ might resolve to a non-local function.
++ FIXME: We can resolve the weakref case more curefuly by looking at the
++ weakref alias. */
++ else if (lookup_attribute ("weakref", DECL_ATTRIBUTES (exp))
++ || (TREE_CODE (exp) == FUNCTION_DECL
++ && lookup_attribute ("ifunc", DECL_ATTRIBUTES (exp))))
+ local_p = false;
+ /* Static variables are always local. */
+ else if (! TREE_PUBLIC (exp))
+Index: gcc/sched-deps.c
+===================================================================
+--- a/src/gcc/sched-deps.c (revision
++++ b/src/gcc/sched-deps.c (revision
+@@ -2687,7 +2687,11 @@
+ else
+ sched_analyze_2 (deps, XEXP (link, 0), insn);
+ }
+- if (find_reg_note (insn, REG_SETJMP, NULL))
++ /* Don't schedule anything after a tail call, tail call needs
++ to use at least all call-saved registers. */
++ if (SIBLING_CALL_P (insn))
++ reg_pending_barrier = TRUE_BARRIER;
++ else if (find_reg_note (insn, REG_SETJMP, NULL))
+ reg_pending_barrier = MOVE_BARRIER;
+ }
+
+Index: gcc/lto-opts.c
+===================================================================
+--- a/src/gcc/lto-opts.c (revision
++++ b/src/gcc/lto-opts.c (revision
+@@ -358,7 +358,7 @@
+ size_t len, l, skip;
+ const char *data, *p;
+ const struct lto_simple_header *header;
+- int32_t opts_offset;
++ int opts_offset;
+ struct lto_input_block ib;
+
+ data = lto_get_section_data (file_data, LTO_section_opts, NULL, &len);
+@@ -379,10 +379,10 @@
+
+ lto_check_version (header->lto_header.major_version,
+ header->lto_header.minor_version);
+-
++
+ LTO_INIT_INPUT_BLOCK (ib, p + opts_offset, 0, header->main_size);
+ input_options (&ib);
+-
++
+ skip = header->main_size + opts_offset;
+ l -= skip;
+ p += skip;
+Index: gcc/config/i386/i386.md
+===================================================================
+--- a/src/gcc/config/i386/i386.md (revision
++++ b/src/gcc/config/i386/i386.md (revision
+@@ -1960,7 +1960,7 @@
+
+ (define_insn "*movdi_internal_rex64"
+ [(set (match_operand:DI 0 "nonimmediate_operand"
+- "=r,r ,r,m ,!m,*y,*y,?r ,m ,?*Ym,?*y,*x,*x,?r ,m,?*Yi,*x,?*x,?*Ym")
++ "=r,r ,r,m ,!o,*y,*y,?r ,m ,?*Ym,?*y,*x,*x,?r ,m,?*Yi,*x,?*x,?*Ym")
+ (match_operand:DI 1 "general_operand"
+ "Z ,rem,i,re,n ,C ,*y,*Ym,*y,r ,m ,C ,*x,*Yi,*x,r ,m ,*Ym,*x"))]
+ "TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+@@ -2905,7 +2905,7 @@
+
+ (define_insn "*movdf_internal_rex64"
+ [(set (match_operand:DF 0 "nonimmediate_operand"
+- "=f,m,f,r ,m,!r,!m,Y2*x,Y2*x,Y2*x,m ,Yi,r ")
++ "=f,m,f,r ,m,!r,!o,Y2*x,Y2*x,Y2*x,m ,Yi,r ")
+ (match_operand:DF 1 "general_operand"
+ "fm,f,G,rm,r,F ,F ,C ,Y2*x,m ,Y2*x,r ,Yi"))]
+ "TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1]))
+Index: gcc/config/i386/avxintrin.h
+===================================================================
+--- a/src/gcc/config/i386/avxintrin.h (revision
++++ b/src/gcc/config/i386/avxintrin.h (revision
+@@ -759,7 +759,7 @@
+
+ #ifdef __x86_64__
+ extern __inline __m256i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+-_mm256_insert_epi64 (__m256i __X, int __D, int const __N)
++_mm256_insert_epi64 (__m256i __X, long long __D, int const __N)
+ {
+ __m128i __Y = _mm256_extractf128_si256 (__X, __N >> 1);
+ __Y = _mm_insert_epi64 (__Y, __D, __N % 2);
+Index: gcc/config/avr/libgcc.S
+===================================================================
+--- a/src/gcc/config/avr/libgcc.S (revision
++++ b/src/gcc/config/avr/libgcc.S (revision
+@@ -582,7 +582,16 @@
+ push r17
+ push r28
+ push r29
++#if defined (__AVR_HAVE_8BIT_SP__)
++;; FIXME: __AVR_HAVE_8BIT_SP__ is set on device level, not on core level
++;; so this lines are dead code. To make it work, devices without
++;; SP_H must get their own multilib(s), see PR51345.
+ in r28,__SP_L__
++ sub r28,r26
++ clr r29
++ out __SP_L__,r28
++#else
++ in r28,__SP_L__
+ in r29,__SP_H__
+ sub r28,r26
+ sbc r29,r27
+@@ -591,6 +600,7 @@
+ out __SP_H__,r29
+ out __SREG__,__tmp_reg__
+ out __SP_L__,r28
++#endif
+ #if defined (__AVR_HAVE_EIJMP_EICALL__)
+ eijmp
+ #else
+@@ -625,6 +635,15 @@
+ ldd r16,Y+4
+ ldd r17,Y+3
+ ldd r26,Y+2
++#if defined (__AVR_HAVE_8BIT_SP__)
++;; FIXME: __AVR_HAVE_8BIT_SP__ is set on device level, not on core level
++;; so this lines are dead code. To make it work, devices without
++;; SP_H must get their own multilib(s).
++ ldd r29,Y+1
++ add r28,r30
++ out __SP_L__,r28
++ mov r28, r26
++#else
+ ldd r27,Y+1
+ add r28,r30
+ adc r29,__zero_reg__
+@@ -635,6 +654,7 @@
+ out __SP_L__,r28
+ mov_l r28, r26
+ mov_h r29, r27
++#endif
+ ret
+ .endfunc
+ #endif /* defined (L_epilogue) */
+Index: gcc/config/avr/avr.md
+===================================================================
+--- a/src/gcc/config/avr/avr.md (revision
++++ b/src/gcc/config/avr/avr.md (revision
+@@ -299,7 +299,7 @@
+ [(set (match_operand:HI 0 "stack_register_operand" "=q")
+ (unspec_volatile:HI [(match_operand:HI 1 "register_operand" "r")]
+ UNSPECV_WRITE_SP_IRQ_OFF))]
+- ""
++ "!AVR_HAVE_8BIT_SP"
+ "out __SP_H__, %B1
+ out __SP_L__, %A1"
+ [(set_attr "length" "2")
+@@ -309,7 +309,7 @@
+ [(set (match_operand:HI 0 "stack_register_operand" "=q")
+ (unspec_volatile:HI [(match_operand:HI 1 "register_operand" "r")]
+ UNSPECV_WRITE_SP_IRQ_ON))]
+- ""
++ "!AVR_HAVE_8BIT_SP"
+ "cli
+ out __SP_H__, %B1
+ sei
+Index: gcc/config/avr/avr-devices.c
+===================================================================
+--- a/src/gcc/config/avr/avr-devices.c (revision
++++ b/src/gcc/config/avr/avr-devices.c (revision
+@@ -70,7 +70,7 @@
+ { "attiny2313a", ARCH_AVR25, "__AVR_ATtiny2313A__", 1, 0x0060, "tn2313a" },
+ { "attiny24", ARCH_AVR25, "__AVR_ATtiny24__", 1, 0x0060, "tn24" },
+ { "attiny24a", ARCH_AVR25, "__AVR_ATtiny24A__", 1, 0x0060, "tn24a" },
+- { "attiny4313", ARCH_AVR25, "__AVR_ATtiny4313__", 1, 0x0060, "tn4313" },
++ { "attiny4313", ARCH_AVR25, "__AVR_ATtiny4313__", 0, 0x0060, "tn4313" },
+ { "attiny44", ARCH_AVR25, "__AVR_ATtiny44__", 0, 0x0060, "tn44" },
+ { "attiny44a", ARCH_AVR25, "__AVR_ATtiny44A__", 0, 0x0060, "tn44a" },
+ { "attiny84", ARCH_AVR25, "__AVR_ATtiny84__", 0, 0x0060, "tn84" },
+@@ -88,7 +88,7 @@
+ { "attiny87", ARCH_AVR25, "__AVR_ATtiny87__", 0, 0x0100, "tn87" },
+ { "attiny48", ARCH_AVR25, "__AVR_ATtiny48__", 0, 0x0100, "tn48" },
+ { "attiny88", ARCH_AVR25, "__AVR_ATtiny88__", 0, 0x0100, "tn88" },
+- { "at86rf401", ARCH_AVR25, "__AVR_AT86RF401__", 1, 0x0060, "86401" },
++ { "at86rf401", ARCH_AVR25, "__AVR_AT86RF401__", 0, 0x0060, "86401" },
+ /* Classic, > 8K, <= 64K. */
+ { "avr3", ARCH_AVR3, NULL, 0, 0x0060, "43355" },
+ { "at43usb355", ARCH_AVR3, "__AVR_AT43USB355__", 0, 0x0060, "43355" },
+Index: gcc/config/avr/avr.c
+===================================================================
+--- a/src/gcc/config/avr/avr.c (revision
++++ b/src/gcc/config/avr/avr.c (revision
+@@ -1879,9 +1879,12 @@
+ }
+ else if (test_hard_reg_class (STACK_REG, src))
+ {
+- *l = 2;
+- return (AS2 (in,%A0,__SP_L__) CR_TAB
+- AS2 (in,%B0,__SP_H__));
++ *l = 2;
++ return AVR_HAVE_8BIT_SP
++ ? (AS2 (in,%A0,__SP_L__) CR_TAB
++ AS1 (clr,%B0))
++ : (AS2 (in,%A0,__SP_L__) CR_TAB
++ AS2 (in,%B0,__SP_H__));
+ }
+
+ if (AVR_HAVE_MOVW)
+@@ -5173,10 +5176,10 @@
+
+ default_file_start ();
+
+-/* fprintf (asm_out_file, "\t.arch %s\n", avr_mcu_name);*/
+- fputs ("__SREG__ = 0x3f\n"
+- "__SP_H__ = 0x3e\n"
+- "__SP_L__ = 0x3d\n", asm_out_file);
++ fputs ("__SREG__ = 0x3f\n", asm_out_file);
++ if (!AVR_HAVE_8BIT_SP)
++ fputs ("__SP_H__ = 0x3e\n", asm_out_file);
++ fputs ("__SP_L__ = 0x3d\n", asm_out_file);
+
+ fputs ("__tmp_reg__ = 0\n"
+ "__zero_reg__ = 1\n", asm_out_file);
+Index: gcc/config/rs6000/rs6000.c
+===================================================================
+--- a/src/gcc/config/rs6000/rs6000.c (revision
++++ b/src/gcc/config/rs6000/rs6000.c (revision
+@@ -2612,6 +2612,7 @@
+ off. */
+ rs6000_altivec_abi = 1;
+ TARGET_ALTIVEC_VRSAVE = 1;
++ rs6000_current_abi = ABI_DARWIN;
+
+ if (DEFAULT_ABI == ABI_DARWIN
+ && TARGET_64BIT)
+@@ -20645,56 +20646,52 @@
+ {
+ int i;
+ rtx spe_save_area_ptr;
+-
++ int save_ptr_to_sp;
++ int ool_adjust = 0;
++
+ /* Determine whether we can address all of the registers that need
+- to be saved with an offset from the stack pointer that fits in
++ to be saved with an offset from frame_reg_rtx that fits in
+ the small const field for SPE memory instructions. */
+- int spe_regs_addressable_via_sp
+- = (SPE_CONST_OFFSET_OK(info->spe_gp_save_offset + sp_offset
+- + (32 - info->first_gp_reg_save - 1) * reg_size)
++ int spe_regs_addressable
++ = (SPE_CONST_OFFSET_OK (info->spe_gp_save_offset + sp_offset
++ + reg_size * (32 - info->first_gp_reg_save - 1))
+ && saving_GPRs_inline);
+ int spe_offset;
+-
+- if (spe_regs_addressable_via_sp)
++
++ if (spe_regs_addressable)
+ {
+ spe_save_area_ptr = frame_reg_rtx;
++ save_ptr_to_sp = info->total_size - sp_offset;
+ spe_offset = info->spe_gp_save_offset + sp_offset;
+ }
+ else
+ {
+ /* Make r11 point to the start of the SPE save area. We need
+ to be careful here if r11 is holding the static chain. If
+- it is, then temporarily save it in r0. We would use r0 as
+- our base register here, but using r0 as a base register in
+- loads and stores means something different from what we
+- would like. */
+- int ool_adjust = (saving_GPRs_inline
+- ? 0
+- : (info->first_gp_reg_save
+- - (FIRST_SAVRES_REGISTER+1))*8);
+- HOST_WIDE_INT offset = (info->spe_gp_save_offset
+- + sp_offset - ool_adjust);
++ it is, then temporarily save it in r0. */
++ int offset;
+
++ if (!saving_GPRs_inline)
++ ool_adjust = 8 * (info->first_gp_reg_save
++ - (FIRST_SAVRES_REGISTER + 1));
++ offset = info->spe_gp_save_offset + sp_offset - ool_adjust;
++ spe_save_area_ptr = gen_rtx_REG (Pmode, 11);
++ save_ptr_to_sp = info->total_size - sp_offset + offset;
++ spe_offset = 0;
++
+ if (using_static_chain_p)
+ {
+ rtx r0 = gen_rtx_REG (Pmode, 0);
+ gcc_assert (info->first_gp_reg_save > 11);
+-
+- emit_move_insn (r0, gen_rtx_REG (Pmode, 11));
++
++ emit_move_insn (r0, spe_save_area_ptr);
+ }
+-
+- spe_save_area_ptr = gen_rtx_REG (Pmode, 11);
+- insn = emit_insn (gen_addsi3 (spe_save_area_ptr,
+- frame_reg_rtx,
+- GEN_INT (offset)));
+- /* We need to make sure the move to r11 gets noted for
+- properly outputting unwind information. */
+- if (!saving_GPRs_inline)
+- rs6000_frame_related (insn, frame_reg_rtx, offset,
+- NULL_RTX, NULL_RTX);
+- spe_offset = 0;
++ emit_insn (gen_addsi3 (spe_save_area_ptr,
++ frame_reg_rtx, GEN_INT (offset)));
++ if (REGNO (frame_reg_rtx) == 11)
++ sp_offset = -info->spe_gp_save_offset + ool_adjust;
+ }
+-
++
+ if (saving_GPRs_inline)
+ {
+ for (i = 0; i < 32 - info->first_gp_reg_save; i++)
+@@ -20706,36 +20703,34 @@
+ /* We're doing all this to ensure that the offset fits into
+ the immediate offset of 'evstdd'. */
+ gcc_assert (SPE_CONST_OFFSET_OK (reg_size * i + spe_offset));
+-
++
+ offset = GEN_INT (reg_size * i + spe_offset);
+ addr = gen_rtx_PLUS (Pmode, spe_save_area_ptr, offset);
+ mem = gen_rtx_MEM (V2SImode, addr);
+-
++
+ insn = emit_move_insn (mem, reg);
+-
+- rs6000_frame_related (insn, spe_save_area_ptr,
+- info->spe_gp_save_offset
+- + sp_offset + reg_size * i,
+- offset, const0_rtx);
++
++ rs6000_frame_related (insn,
++ spe_save_area_ptr, save_ptr_to_sp,
++ NULL_RTX, NULL_RTX);
+ }
+ }
+ else
+ {
+ rtx par;
+
+- par = rs6000_make_savres_rtx (info, gen_rtx_REG (Pmode, 11),
+- 0, reg_mode,
++ par = rs6000_make_savres_rtx (info, spe_save_area_ptr,
++ ool_adjust, reg_mode,
+ /*savep=*/true, /*gpr=*/true,
+ /*lr=*/false);
+ insn = emit_insn (par);
+- rs6000_frame_related (insn, frame_ptr_rtx, info->total_size,
++ rs6000_frame_related (insn, spe_save_area_ptr, save_ptr_to_sp,
+ NULL_RTX, NULL_RTX);
+ }
+-
+-
++
+ /* Move the static chain pointer back. */
+- if (using_static_chain_p && !spe_regs_addressable_via_sp)
+- emit_move_insn (gen_rtx_REG (Pmode, 11), gen_rtx_REG (Pmode, 0));
++ if (using_static_chain_p && !spe_regs_addressable)
++ emit_move_insn (spe_save_area_ptr, gen_rtx_REG (Pmode, 0));
+ }
+ else if (!WORLD_SAVE_P (info) && !saving_GPRs_inline)
+ {
+@@ -20744,10 +20739,12 @@
+ /* Need to adjust r11 (r12) if we saved any FPRs. */
+ if (info->first_fp_reg_save != 64)
+ {
+- rtx dest_reg = gen_rtx_REG (reg_mode, DEFAULT_ABI == ABI_AIX
+- ? 12 : 11);
+- rtx offset = GEN_INT (sp_offset
+- + (-8 * (64-info->first_fp_reg_save)));
++ rtx dest_reg = gen_rtx_REG (Pmode, DEFAULT_ABI == ABI_AIX ? 12 : 11);
++ int save_off = 8 * (64 - info->first_fp_reg_save);
++ rtx offset = GEN_INT (sp_offset - save_off);
++
++ if (REGNO (dest_reg) == REGNO (frame_reg_rtx))
++ sp_offset = save_off;
+ emit_insn (gen_add3_insn (dest_reg, frame_reg_rtx, offset));
+ }
+
+@@ -21623,40 +21620,39 @@
+ && info->first_gp_reg_save != 32)
+ {
+ /* Determine whether we can address all of the registers that need
+- to be saved with an offset from the stack pointer that fits in
+- the small const field for SPE memory instructions. */
+- int spe_regs_addressable_via_sp
+- = (SPE_CONST_OFFSET_OK(info->spe_gp_save_offset + sp_offset
+- + (32 - info->first_gp_reg_save - 1) * reg_size)
++ to be saved with an offset from frame_reg_rtx that fits in
++ the small const field for SPE memory instructions. */
++ int spe_regs_addressable
++ = (SPE_CONST_OFFSET_OK (info->spe_gp_save_offset + sp_offset
++ + reg_size * (32 - info->first_gp_reg_save - 1))
+ && restoring_GPRs_inline);
+ int spe_offset;
++ int ool_adjust = 0;
+
+- if (spe_regs_addressable_via_sp)
++ if (spe_regs_addressable)
+ spe_offset = info->spe_gp_save_offset + sp_offset;
+ else
+- {
++ {
+ rtx old_frame_reg_rtx = frame_reg_rtx;
+- /* Make r11 point to the start of the SPE save area. We worried about
+- not clobbering it when we were saving registers in the prologue.
+- There's no need to worry here because the static chain is passed
+- anew to every function. */
+- int ool_adjust = (restoring_GPRs_inline
+- ? 0
+- : (info->first_gp_reg_save
+- - (FIRST_SAVRES_REGISTER+1))*8);
++ /* Make r11 point to the start of the SPE save area. We worried about
++ not clobbering it when we were saving registers in the prologue.
++ There's no need to worry here because the static chain is passed
++ anew to every function. */
+
+- if (frame_reg_rtx == sp_reg_rtx)
+- frame_reg_rtx = gen_rtx_REG (Pmode, 11);
+- emit_insn (gen_addsi3 (frame_reg_rtx, old_frame_reg_rtx,
++ if (!restoring_GPRs_inline)
++ ool_adjust = 8 * (info->first_gp_reg_save
++ - (FIRST_SAVRES_REGISTER + 1));
++ frame_reg_rtx = gen_rtx_REG (Pmode, 11);
++ emit_insn (gen_addsi3 (frame_reg_rtx, old_frame_reg_rtx,
+ GEN_INT (info->spe_gp_save_offset
+ + sp_offset
+ - ool_adjust)));
+ /* Keep the invariant that frame_reg_rtx + sp_offset points
+ at the top of the stack frame. */
+- sp_offset = -info->spe_gp_save_offset;
++ sp_offset = -info->spe_gp_save_offset + ool_adjust;
+
+- spe_offset = 0;
+- }
++ spe_offset = 0;
++ }
+
+ if (restoring_GPRs_inline)
+ {
+@@ -21696,8 +21692,8 @@
+ {
+ rtx par;
+
+- par = rs6000_make_savres_rtx (info, gen_rtx_REG (Pmode, 11),
+- 0, reg_mode,
++ par = rs6000_make_savres_rtx (info, frame_reg_rtx,
++ ool_adjust, reg_mode,
+ /*savep=*/false, /*gpr=*/true,
+ /*lr=*/true);
+ emit_jump_insn (par);
+@@ -21718,12 +21714,12 @@
+ sp_offset, can_use_exit);
+ else
+ {
+- emit_insn (gen_add3_insn (gen_rtx_REG (Pmode, DEFAULT_ABI == ABI_AIX
+- ? 12 : 11),
+- frame_reg_rtx,
++ rtx src_reg = gen_rtx_REG (Pmode, DEFAULT_ABI == ABI_AIX ? 12 : 11);
++
++ emit_insn (gen_add3_insn (src_reg, frame_reg_rtx,
+ GEN_INT (sp_offset - info->fp_size)));
+- if (REGNO (frame_reg_rtx) == 11)
+- sp_offset += info->fp_size;
++ if (REGNO (frame_reg_rtx) == REGNO (src_reg))
++ sp_offset = info->fp_size;
+ }
+
+ par = rs6000_make_savres_rtx (info, frame_reg_rtx,
+Index: gcc/config/arm/arm.md
+===================================================================
+--- a/src/gcc/config/arm/arm.md (revision
++++ b/src/gcc/config/arm/arm.md (revision
+@@ -3272,7 +3272,7 @@
+ bool need_else;
+
+ if (which_alternative != 0 || operands[3] != const0_rtx
+- || (code != PLUS && code != MINUS && code != IOR && code != XOR))
++ || (code != PLUS && code != IOR && code != XOR))
+ need_else = true;
+ else
+ need_else = false;
diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff
new file mode 100644
index 0000000..f0056fa
--- /dev/null
+++ b/debian/patches/svn-updates.diff
@@ -0,0 +1,9566 @@
+# DP: updates from the 4.6 branch upto 20111215 (r182348).
+
+last_updated()
+{
+ cat > ${dir}LAST_UPDATED <<EOF
+Thu Dec 15 01:05:16 CET 2011
+Thu Dec 15 00:05:16 UTC 2011 (revision 182348)
+EOF
+}
+
+svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_6_2_release svn://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch \
+ | sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
+ | awk '/^Index:.*\.(class|texi)/ {skip=1; next} /^Index:/ { skip=0 } skip==0'
+
+Index: configure
+===================================================================
+--- a/src/configure (.../tags/gcc_4_6_2_release)
++++ b/src/configure (.../branches/gcc-4_6-branch)
+@@ -6944,10 +6944,6 @@
+ extra_arflags_for_target=" -X32_64"
+ extra_nmflags_for_target=" -B -X32_64"
+ ;;
+- *-*-darwin[3-9]*)
+- # ranlib before Darwin10 requires the -c flag to look at common symbols.
+- extra_ranlibflags_for_target=" -c"
+- ;;
+ mips*-*-pe | sh*-*-pe | *arm-wince-pe)
+ target_makefile_frag="config/mt-wince"
+ ;;
+Index: libgcc/config.host
+===================================================================
+--- a/src/libgcc/config.host (.../tags/gcc_4_6_2_release)
++++ b/src/libgcc/config.host (.../branches/gcc-4_6-branch)
+@@ -145,15 +145,6 @@
+ asm_hidden_op=.private_extern
+ tmake_file="t-darwin ${cpu_type}/t-darwin t-slibgcc-darwin"
+ ;;
+-*-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*)
+- # This is the place-holder for the generic a.out configuration
+- # of FreeBSD. No actual configuration resides here since
+- # there was only ever a bare-bones ix86 configuration for
+- # a.out and it exists solely in the machine-specific section.
+- # This place-holder must exist to avoid dropping into
+- # the generic ELF configuration of FreeBSD (i.e. it must be
+- # ordered before that section).
+- ;;
+ *-*-freebsd*)
+ # This is the generic ELF configuration of FreeBSD. Later
+ # machine-specific sections may refine and add to this
+Index: libgcc/ChangeLog
+===================================================================
+--- a/src/libgcc/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/libgcc/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,8 @@
++2011-11-23 Gerald Pfeifer <gerald@pfeifer.com>
++
++ * config.host (*-*-freebsd[12], *-*-freebsd[12].*,
++ *-*-freebsd*aout*): Remove.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: libtool.m4
+===================================================================
+--- a/src/libtool.m4 (.../tags/gcc_4_6_2_release)
++++ b/src/libtool.m4 (.../branches/gcc-4_6-branch)
+@@ -2273,7 +2273,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[[123]]*) objformat=aout ;;
++ freebsd[[23]].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -2291,7 +2291,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+@@ -4804,7 +4804,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+@@ -5751,7 +5751,7 @@
+ esac
+ ;;
+
+- freebsd[[12]]*)
++ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ _LT_TAGVAR(ld_shlibs, $1)=no
+Index: libgomp/configure
+===================================================================
+--- a/src/libgomp/configure (.../tags/gcc_4_6_2_release)
++++ b/src/libgomp/configure (.../branches/gcc-4_6-branch)
+@@ -9317,7 +9317,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -10230,7 +10230,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -10248,7 +10248,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -13164,7 +13164,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_FC=yes
+ hardcode_minus_L_FC=yes
+@@ -13869,7 +13869,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -13887,7 +13887,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+Index: libgomp/ChangeLog
+===================================================================
+--- a/src/libgomp/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/libgomp/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: libquadmath/configure
+===================================================================
+--- a/src/libquadmath/configure (.../tags/gcc_4_6_2_release)
++++ b/src/libquadmath/configure (.../branches/gcc-4_6-branch)
+@@ -8727,7 +8727,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -9643,7 +9643,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -9661,7 +9661,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+Index: libquadmath/ChangeLog
+===================================================================
+--- a/src/libquadmath/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/libquadmath/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: gcc/c-family/ChangeLog
+===================================================================
+--- a/src/gcc/c-family/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/c-family/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,15 @@
++2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR c++/50608
++ * c-common.c (c_fully_fold_internal) <ADDR_EXPR>: Call fold_offsetof_1.
++ (fold_offsetof_1): Make global. Remove STOP_REF argument and adjust.
++ <INDIRECT_REF>: Return the argument.
++ <ARRAY_REF>: Remove special code for negative offset.
++ Call fold_build_pointer_plus instead of size_binop.
++ (fold_offsetof): Remove STOP_REF argument and adjust.
++ * c-common.h (fold_offsetof_1): Declare.
++ (fold_offsetof): Remove STOP_REF argument.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: gcc/c-family/c-common.c
+===================================================================
+--- a/src/gcc/c-family/c-common.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/c-family/c-common.c (.../branches/gcc-4_6-branch)
+@@ -1236,13 +1236,7 @@
+ && (op1 = get_base_address (op0)) != NULL_TREE
+ && TREE_CODE (op1) == INDIRECT_REF
+ && TREE_CONSTANT (TREE_OPERAND (op1, 0)))
+- {
+- tree offset = fold_offsetof (op0, op1);
+- op1
+- = fold_convert_loc (loc, TREE_TYPE (expr), TREE_OPERAND (op1, 0));
+- ret = fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (expr), op1,
+- offset);
+- }
++ ret = fold_convert_loc (loc, TREE_TYPE (expr), fold_offsetof_1 (op0));
+ else if (op0 != orig_op0 || in_init)
+ ret = in_init
+ ? fold_build1_initializer_loc (loc, code, TREE_TYPE (expr), op0)
+@@ -8459,20 +8453,15 @@
+ return uc;
+ }
+
+-/* Build the result of __builtin_offsetof. EXPR is a nested sequence of
+- component references, with STOP_REF, or alternatively an INDIRECT_REF of
+- NULL, at the bottom; much like the traditional rendering of offsetof as a
+- macro. Returns the folded and properly cast result. */
++/* Fold an offsetof-like expression. EXPR is a nested sequence of component
++ references with an INDIRECT_REF of a constant at the bottom; much like the
++ traditional rendering of offsetof as a macro. Return the folded result. */
+
+-static tree
+-fold_offsetof_1 (tree expr, tree stop_ref)
++tree
++fold_offsetof_1 (tree expr)
+ {
+- enum tree_code code = PLUS_EXPR;
+ tree base, off, t;
+
+- if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
+- return size_zero_node;
+-
+ switch (TREE_CODE (expr))
+ {
+ case ERROR_MARK:
+@@ -8489,15 +8478,15 @@
+
+ case NOP_EXPR:
+ case INDIRECT_REF:
+- if (!integer_zerop (TREE_OPERAND (expr, 0)))
++ if (!TREE_CONSTANT (TREE_OPERAND (expr, 0)))
+ {
+ error ("cannot apply %<offsetof%> to a non constant address");
+ return error_mark_node;
+ }
+- return size_zero_node;
++ return TREE_OPERAND (expr, 0);
+
+ case COMPONENT_REF:
+- base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
++ base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
+ if (base == error_mark_node)
+ return base;
+
+@@ -8515,21 +8504,14 @@
+ break;
+
+ case ARRAY_REF:
+- base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
++ base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
+ if (base == error_mark_node)
+ return base;
+
+ t = TREE_OPERAND (expr, 1);
+- if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
+- {
+- code = MINUS_EXPR;
+- t = fold_build1_loc (input_location, NEGATE_EXPR, TREE_TYPE (t), t);
+- }
+- t = convert (sizetype, t);
+- off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
+
+ /* Check if the offset goes beyond the upper bound of the array. */
+- if (code == PLUS_EXPR && TREE_CODE (t) == INTEGER_CST)
++ if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) >= 0)
+ {
+ tree upbound = array_ref_up_bound (expr);
+ if (upbound != NULL_TREE
+@@ -8569,26 +8551,30 @@
+ }
+ }
+ }
++
++ t = convert (sizetype, t);
++ off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
+ break;
+
+ case COMPOUND_EXPR:
+ /* Handle static members of volatile structs. */
+ t = TREE_OPERAND (expr, 1);
+ gcc_assert (TREE_CODE (t) == VAR_DECL);
+- return fold_offsetof_1 (t, stop_ref);
++ return fold_offsetof_1 (t);
+
+ default:
+ gcc_unreachable ();
+ }
+
+- return size_binop (code, base, off);
++ return fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (base), base, off);
+ }
+
++/* Likewise, but convert it to the return type of offsetof. */
++
+ tree
+-fold_offsetof (tree expr, tree stop_ref)
++fold_offsetof (tree expr)
+ {
+- /* Convert back from the internal sizetype to size_t. */
+- return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
++ return convert (size_type_node, fold_offsetof_1 (expr));
+ }
+
+ /* Warn for A ?: C expressions (with B omitted) where A is a boolean
+Index: gcc/c-family/c-common.h
+===================================================================
+--- a/src/gcc/c-family/c-common.h (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/c-family/c-common.h (.../branches/gcc-4_6-branch)
+@@ -916,7 +916,8 @@
+
+ extern void verify_sequence_points (tree);
+
+-extern tree fold_offsetof (tree, tree);
++extern tree fold_offsetof_1 (tree);
++extern tree fold_offsetof (tree);
+
+ /* Places where an lvalue, or modifiable lvalue, may be required.
+ Used to select diagnostic messages in lvalue_error and
+Index: gcc/DATESTAMP
+===================================================================
+--- a/src/gcc/DATESTAMP (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/DATESTAMP (.../branches/gcc-4_6-branch)
+@@ -1 +1 @@
+-20111026
++20111214
+Index: gcc/configure
+===================================================================
+--- a/src/gcc/configure (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/configure (.../branches/gcc-4_6-branch)
+@@ -7442,17 +7442,7 @@
+ RANLIB="$ac_cv_prog_RANLIB"
+ fi
+
+-case "${host}" in
+-*-*-darwin*)
+- # By default, the Darwin ranlib will not treat common symbols as
+- # definitions when building the archive table of contents. Other
+- # ranlibs do that; pass an option to the Darwin ranlib that makes
+- # it behave similarly.
+- ranlib_flags="-c"
+- ;;
+-*)
+- ranlib_flags=""
+-esac
++ranlib_flags=""
+
+
+ # Find a good install program. We prefer a C program (faster),
+@@ -15740,7 +15730,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -16653,7 +16643,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -16671,7 +16661,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -17505,7 +17495,7 @@
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 17508 "configure"
++#line 17498 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -17611,7 +17601,7 @@
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 17614 "configure"
++#line 17604 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -18537,7 +18527,7 @@
+ esac
+ ;;
+
+- freebsd[12]*)
++ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ ld_shlibs_CXX=no
+@@ -20312,7 +20302,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -20330,7 +20320,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+Index: gcc/objc/objc-next-runtime-abi-01.c
+===================================================================
+--- a/src/gcc/objc/objc-next-runtime-abi-01.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/objc/objc-next-runtime-abi-01.c (.../branches/gcc-4_6-branch)
+@@ -2871,12 +2871,15 @@
+ return eh_id;
+ }
+
++/* For NeXT ABI 0 and 1, the personality routines are just those of the
++ underlying language. */
++
+ static tree
+ objc_eh_personality (void)
+ {
+ if (!objc_eh_personality_decl)
+ #ifndef OBJCPLUS
+- objc_eh_personality_decl = build_personality_function ("objc");
++ objc_eh_personality_decl = build_personality_function ("gcc");
+ #else
+ objc_eh_personality_decl = build_personality_function ("gxx");
+ #endif
+Index: gcc/objc/objc-act.c
+===================================================================
+--- a/src/gcc/objc/objc-act.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/objc/objc-act.c (.../branches/gcc-4_6-branch)
+@@ -3136,9 +3136,8 @@
+ struct string_descriptor *desc, key;
+ void **loc;
+
+- /* Prep the string argument. */
+- string = fix_string_type (string);
+- TREE_SET_CODE (string, STRING_CST);
++ /* We should be passed a STRING_CST. */
++ gcc_checking_assert (TREE_CODE (string) == STRING_CST);
+ length = TREE_STRING_LENGTH (string) - 1;
+
+ /* The target may have different ideas on how to construct an ObjC string
+Index: gcc/objc/ChangeLog
+===================================================================
+--- a/src/gcc/objc/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/objc/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,18 @@
++2011-11-12 Iain Sandoe <iains@gcc.gnu.org>
++
++ Backport from mainline
++ 2011-10-29 Iain Sandoe <iains@gcc.gnu.org>
++
++ PR target/47997
++ * objc-act.c (objc_build_string_object): Remove redundant second
++ call to fix_string_type (). Add a checking assert that we are,
++ indeed, passed a STRING_CST.
++
++2011-11-12 Iain Sandoe <iains@gcc.gnu.org>
++
++ * objc-next-runtime-abi-01.c (objc_eh_personality): Use gcc personality
++ for Objective-C m32.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: gcc/reorg.c
+===================================================================
+--- a/src/gcc/reorg.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/reorg.c (.../branches/gcc-4_6-branch)
+@@ -3554,9 +3554,11 @@
+ }
+ }
+
++ /* See if we have a simple (conditional) jump that is useless. */
+ if (! INSN_ANNULLED_BRANCH_P (delay_insn)
++ && ! condjump_in_parallel_p (delay_insn)
+ && prev_active_insn (target_label) == insn
+- && ! condjump_in_parallel_p (delay_insn)
++ && ! BARRIER_P (prev_nonnote_insn (target_label))
+ #ifdef HAVE_cc0
+ /* If the last insn in the delay slot sets CC0 for some insn,
+ various code assumes that it is in a delay slot. We could
+Index: gcc/ChangeLog
+===================================================================
+--- a/src/gcc/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,343 @@
++2011-12-13 Eric Botcazou <ebotcazou@adacore.com>
++
++ * lto-streamer-out.c (write_symbol): Use proper 64-bit host type.
++ * lto-cgraph.c (input_cgraph_opt_section): Use 'int' for offsets.
++ * lto-streamer-in.c (lto_read_body): Likewise.
++ (lto_input_toplevel_asms): Likewise.
++ * lto-section-in.c (lto_create_simple_input_block): Likewise.
++ * lto-opts.c (lto_read_file_options): Likewise.
++ * ipa-prop.c (ipa_prop_read_section): Likewise.
++
++ * df.h (DF_NOTE): Fix typo in comment.
++
++2011-12-13 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
++
++ * regmove.c (fixup_match_2): Only access call_used_regs with hard
++ regs.
++
++2011-12-12 Jakub Jelinek <jakub@redhat.com>
++
++ PR middle-end/51510
++ * calls.c (internal_arg_pointer_based_exp_scan): Don't use
++ VEC_safe_grow_cleared if idx is smaller than VEC_length.
++
++ Backported from mainline
++ 2011-12-11 Jakub Jelinek <jakub@redhat.com>
++
++ PR tree-optimization/51485
++ * tree-vect-data-refs.c (vect_analyze_data_refs): Give up on
++ DRs in call stmts.
++
++2011-12-12 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR tree-optimization/50569
++ * tree-sra.c (build_ref_for_model): Replicate a chain of COMPONENT_REFs
++ in the expression of MODEL instead of just the last one.
++
++2011-12-09 Michael Meissner <meissner@the-meissners.org>
++
++ Backport from mainline
++ 2011-12-09 Michael Meissner <meissner@the-meissners.org>
++
++ PR rtl-optimization/51469
++ * varasm.c (default_binds_local_p_1): If the symbol is a gnu
++ indirect function, mark the symbol as non-local.
++
++2011-12-09 Jakub Jelinek <jakub@redhat.com>
++
++ Backport from mainline
++ 2011-12-08 Jakub Jelinek <jakub@redhat.com>
++
++ PR tree-optimization/51466
++ * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Also copy
++ TREE_SIDE_EFFECTS.
++
++ 2011-11-28 Jakub Jelinek <jakub@redhat.com>
++
++ PR tree-optimization/50078
++ * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Copy over
++ TREE_THIS_VOLATILE also from the old to new lhs resp. rhs.
++
++2011-12-09 Kazu Hirata <kazu@codesourcery.com>
++
++ Backport from mainline:
++
++ 2011-12-05 Kazu Hirata <kazu@codesourcery.com>
++
++ PR target/51408
++ * config/arm/arm.md (*minmax_arithsi): Always require the else
++ clause in the MINUS case.
++
++2011-12-08 Teresa Johnson <tejohnson@google.com>
++
++ Backport from mainline:
++
++ 2011-08-05 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.md (*movdi_internal_rex64): Use "!o" constraint
++ instead of "!m" for operand 0, alternative 4.
++ (*movdf_internal_rex64): Ditto for operand 0, alernative 6.
++
++2011-12-08 Jakub Jelinek <jakub@redhat.com>
++
++ Backport from mainline
++ 2011-12-05 Jakub Jelinek <jakub@redhat.com>
++
++ PR debug/51410
++ * c-decl.c (pop_scope): Don't add DECL_EXTERNAL decls
++ for debug info if scope is file_scope.
++
++ PR c/51339
++ * c-decl.c (c_finish_incomplete_decl, finish_decl): Call
++ relayout_decl instead of layout_decl.
++
++ 2011-12-05 Jakub Jelinek <jakub@redhat.com>
++ Eric Botcazou <ebotcazou@adacore.com>
++
++ PR middle-end/51323
++ PR middle-end/50074
++ * calls.c (internal_arg_pointer_exp_state): New variable.
++ (internal_arg_pointer_based_exp_1,
++ internal_arg_pointer_exp_scan): New functions.
++ (internal_arg_pointer_based_exp): New function.
++ (mem_overlaps_already_clobbered_arg_p): Use it.
++ (expand_call): Free internal_arg_pointer_exp_state.cache vector
++ and clear internal_arg_pointer_exp_state.scan_start.
++
++ 2011-11-30 Jakub Jelinek <jakub@redhat.com>
++
++ PR rtl-optimization/48721
++ * sched-deps.c (sched_analyze_insn): For SIBLING_CALL_P set
++ reg_pending_barrier to TRUE_BARRIER.
++
++ 2011-11-26 Joern Rennecke <joern.rennecke@embecosm.com>
++
++ PR middle-end/50074
++ * calls.c (mem_overlaps_already_clobbered_arg_p):
++ Return false if no outgoing arguments have been stored so far.
++
++2011-12-08 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR tree-optimization/51315
++ * tree-sra.c (tree_non_mode_aligned_mem_p): Rename to...
++ (tree_non_aligned_mem_p): ...this. Add ALIGN parameter. Look into
++ MEM_REFs and use get_object_or_type_alignment for them.
++ (build_accesses_from_assign): Adjust for above change.
++ (access_precludes_ipa_sra_p): Likewise.
++
++2011-12-06 Martin Jambor <mjambor@suse.cz>
++
++ Backport from mainline:
++
++ 2011-12-02 Martin Jambor <mjambor@suse.cz>
++
++ PR tree-optimization/50622
++ * tree-sra.c (load_assign_lhs_subreplacements): Force gimple operand
++ if both lacc and racc are grp_partial_lhs.
++
++2011-12-06 Iain Sandoe <iains@gcc.gnu.org>
++
++ * config/rs6000/rs6000.c (darwin_rs6000_override_options): Initialize
++ rs6000_current_abi.
++
++2011-12-06 Alan Modra <amodra@gmail.com>
++
++ PR target/50906
++ * config/rs6000/rs6000.c (rs6000_emit_prologue <TARGET_SPE_ABI>):
++ Do not mark r11 setup as frame-related. Pass correct offset to
++ rs6000_emit_savres_rtx. Correct out-of-line rs6000_frame_related
++ arguments. Correct sp_offset. Remove "offset" fudge from
++ in-line rs6000_frame_related call. Rename misleading variable.
++ Fix comments and whitespace. Tidy some expressions.
++ (rs6000_emit_epilogue <TARGET_SPE_ABI>): Always set frame_reg_rtx
++ to r11 in out-of-line case. Correct sp_offset. Pass correct
++ offset to rs6000_emit_savres_rtx. Rename misleading variable.
++ Fix comments and whitespace. Tidy some expressions.
++ (rs6000_emit_epilogue <non-TARGET_SPE_ABI>): Add sp_offset
++ adjustment when !saving_GPRs_inline. Correct register mode
++ used in address calcs.
++ (rs6000_emit_epilogue <non-TARGET_SPE_ABI>): Similarly when
++ !restoring_GPRs_inline.
++
++2011-12-04 Jérémie Detrey <Jeremie.Detrey@loria.fr>
++
++ PR target/51393
++ * config/i386/avxintrin.h (_mm256_insert_epi64): Declare second
++ parameter as long long.
++
++2011-12-02 Georg-Johann Lay <avr@gjlay.de>
++
++ PR target/51002
++ PR target/51345
++ * config/avr/libgcc.S (__prologue_saves__, __epilogue_restores__):
++ Enclose parts using __SP_H__ in !defined (__AVR_HAVE_8BIT_SP__).
++ Add FIXME comments.
++ * config/avr/avr.md (movhi_sp_r_irq_off, movhi_sp_r_irq_on): Set
++ insn condition to !AVR_HAVE_8BIT_SP.
++ * config/avr/avr.c (output_movhi): "clr%B0" instead of "in
++ %B0,__SP_H__" if AVR_HAVE_8BIT_SP.
++ (avr_file_start): Only print "__SP_H__ = 0x3e" if !AVR_HAVE_8BIT_SP.
++ * config/avr/avr-devices.c (avr_mcu_types): ATtiny4313 and
++ AT86RF401 have a 16-bit SP (their manual is bogus).
++
++2011-11-25 Richard Sandiford <richard.sandiford@linaro.org>
++
++ Backport from mainline:
++
++ 2011-03-29 Richard Sandiford <richard.sandiford@linaro.org>
++
++ PR debug/48190
++ * dwarf2out.c (dw_loc_list_node): Add resolved_addr and replaced.
++ (cached_dw_loc_list_def): New structure.
++ (cached_dw_loc_list): New typedef.
++ (cached_dw_loc_list_table): New variable.
++ (cached_dw_loc_list_table_hash): New function.
++ (cached_dw_loc_list_table_eq): Likewise.
++ (add_location_or_const_value_attribute): Take a bool cache_p.
++ Cache the list when the parameter is true.
++ (gen_formal_parameter_die): Update caller.
++ (gen_variable_die): Likewise.
++ (dwarf2out_finish): Likewise.
++ (dwarf2out_abstract_function): Nullify cached_dw_loc_list_table
++ while generating debug info for the decl.
++ (dwarf2out_function_decl): Clear cached_dw_loc_list_table.
++ (dwarf2out_init): Initialize cached_dw_loc_list_table.
++ (resolve_addr): Cache the result of resolving a chain of
++ location lists.
++
++2011-11-24 Enkovich Ilya <ilya.enkovich@intel.com>
++
++ PR target/51287
++ * i386.c (distance_non_agu_define): Fix insn attr check.
++
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
++2011-11-19 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR rtl-optimization/51187
++ * reorg.c (relax_delay_slots): Do not consider a jump useless if there
++ is a barrier between the jump and its target label.
++
++2011-11-19 Richard Earnshaw <rearnsha@arm.com>
++
++ PR target/50493
++ * config/arm/arm.c (neon_disambiguate_copy): Correctly handle partial
++ overlap of src and dest operands.
++
++2011-11-18 Iain Sandoe <iains@gcc.gnu.org>
++
++ PR target/49992
++ * configure.ac: Remove ranlib special-casing for Darwin.
++ * configure: Regenerate.
++
++2011-11-16 Richard Earnshaw <rearnsha@arm.com>
++ Bernd Schmidt <bernds@coudesourcery.com>
++ Sebastian Huber <sebastian.huber@embedded-brains.de>
++
++ PR target/49641
++ * config/arm/arm.c (store_multiple_sequence): Avoid cases where
++ the base reg is stored iff compiling for Thumb1.
++
++2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
++
++ PR target/48108
++ Backport from mainline r180523
++ * config/darwin.c (top level): Amend comments concerning LTO output.
++ (lto_section_num): New variable. (darwin_lto_section_e): New GTY.
++ (LTO_SECTS_SECTION, LTO_INDEX_SECTION): New.
++ (LTO_NAMES_SECTION): Rename.
++ (darwin_asm_named_section): Record LTO section counts and switches
++ in a vec of darwin_lto_section_e.
++ (darwin_file_start): Remove unused code.
++ (darwin_file_end): Put an LTO section termination label. Handle
++ output of the wrapped LTO sections, index and names table.
++
++2011-11-12 Iain Sandoe <iains@gcc.gnu.org>
++
++ PR target/45233
++ * config/rs6000/rs6000.c (rs6000_legitimize_reload_address):
++ Only expand a symbol ref. into an access when the entity is defined
++ in the TU.
++
++2011-11-10 Jakub Jelinek <jakub@redhat.com>
++
++ PR middle-end/51077
++ * tree-object-size.c (addr_object_size): Check TREE_CODE of
++ MEM_REF's operand rather than code of the MEM_REF itself.
++
++2011-11-07 Alan Modra <amodra@gmail.com>
++
++ PR target/30282
++ * config/rs6000/rs6000.c (rs6000_emit_stack_reset): Always emit
++ blockage for ABI_V4.
++
++2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR c++/50608
++ * c-parser.c (c_parser_postfix_expression) <RID_OFFSETOF>: Adjust call
++ to fold_offsetof.
++ * c-typeck.c (build_unary_op) <ADDR_EXPR>: Call fold_offsetof_1.
++
++2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR target/50979
++ * config/sparc/sparc.h (ASM_CPU_SPEC): Pass -Av8 if -mcpu=v8.
++
++2011-11-03 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.md (lround<X87MODEF:mode><SWI248x:mode>2,
++ rint<mode>2, floor<mode>2, lfloor<MODEF:mode><SWI48:mode>2,
++ btrunc<mode>2, lwp_lwpval<mode>3): Use operands[N] instead of operandN.
++
++2011-11-02 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR target/50945
++ * config/sparc/sparc.md (movsf_insn): Reindent constraints.
++ (movsf_insn_no_fpu): Likewise.
++ (movdf_insn_sp32): Likewise.
++ (movdf_insn_sp32_no_fpu): Likewise.
++ (movdf_insn_sp32_v9): Likewise. Remove redundant GY constraint.
++ (movdf_insn_sp32_v9_no_fpu): Likewise.
++ (movdf_insn_sp64): Likewise.
++ (movdf_insn_sp64_no_fpu): Likewise.
++ (movtf_insn_sp32): Likewise.
++ (movtf_insn_sp32_no_fpu): Likewise.
++ (movtf_insn_sp64): Likewise.
++ (movtf_insn_sp64_hq): Likewise.
++ (movtf_insn_sp64_no_fpu): Likewise.
++
++2011-11-02 Bernd Schmidt <bernds@codesourcery.com>
++
++ * cfgcleanup.c (try_head_merge_bb): If get_condition returns
++ NULL for a jump that is a cc0 insn, pick the previous insn for
++ move_before.
++
++2011-11-01 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.md (splitters for int-float conversion): Use
++ SUBREG_REG on SUBREGs in splitter constraints.
++
++2011-11-01 Julian Brown <julian@codesourcery.com>
++
++ PR rtl-optimization/47918
++ * reload1.c (set_initial_label_offsets): Use initial offsets
++ for labels on the nonlocal_goto_handler_labels chain.
++
++2011-10-29 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
++
++ PR target/50691
++ * config/pa/pa.c (emit_move_sequence): Legitimize TLS symbol references.
++ * config/pa/pa.h (LEGITIMATE_CONSTANT_P): Return false for
++ TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC symbol references.
++
++2011-10-27 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/50875
++ * config/i386/sse.md (*avx_unpcklpd256): Remove extra insn
++ constraints. Change alternative 1 to "x,m,1".
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+@@ -144,8 +489,8 @@
+
+ 2011-10-07 Bernd Schmidt <bernds@codesourcery.com>
+
+- PR target/49049
+- * config/arm/arm.md (arm_subsi3_insn): Lose the last alternative.
++ PR target/49049
++ * config/arm/arm.md (arm_subsi3_insn): Lose the last alternative.
+
+ 2011-10-06 Jakub Jelinek <jakub@redhat.com>
+
+@@ -252,7 +597,7 @@
+ * config/rs6000/rs6000.md (probe_stack): Use explicit operand.
+ * config/rs6000/rs6000.c (output_probe_stack_range): Likewise.
+
+-2011-09-14 Diego Novillo <dnovillo@google.com>
++2011-09-14 Diego Novillo <dnovillo@google.com>
+
+ * tree-vect-stmts.c (vect_transform_stmt): Remove unused
+ local variable ORIG_SCALAR_STMT.
+Index: gcc/testsuite/gcc.target/arm/pr49641.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/arm/pr49641.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.target/arm/pr49641.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,18 @@
++/* { dg-do compile } */
++/* { dg-options "-mthumb -O2" } */
++/* { dg-require-effective-target arm_thumb1_ok } */
++/* { dg-final { scan-assembler-not "stmia\[\\t \]*r3!\[^\\n]*r3" } } */
++typedef struct {
++ void *t1, *t2, *t3;
++} z;
++extern volatile int y;
++static inline void foo(z *x) {
++ x->t1 = &x->t2;
++ x->t2 = ((void *)0);
++ x->t3 = &x->t1;
++}
++extern z v;
++void bar (void) {
++ y = 0;
++ foo(&v);
++}
+Index: gcc/testsuite/gcc.target/i386/pr51393.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/pr51393.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.target/i386/pr51393.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,22 @@
++/* { dg-do run } */
++/* { dg-require-effective-target avx } */
++/* { dg-require-effective-target lp64 } */
++/* { dg-options "-O -mavx" } */
++
++#include "avx-check.h"
++#include <immintrin.h>
++
++static void
++__attribute__((noinline))
++avx_test (void)
++{
++ long long in = 0x800000000ll;
++ long long out;
++
++ __m256i zero = _mm256_setzero_si256();
++ __m256i tmp = _mm256_insert_epi64 (zero, in, 0);
++ out = _mm256_extract_epi64(tmp, 0);
++
++ if (in != out)
++ abort ();
++}
+Index: gcc/testsuite/gcc.target/i386/pr48721.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/pr48721.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.target/i386/pr48721.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,51 @@
++/* PR rtl-optimization/48721 */
++/* { dg-do compile } */
++/* { dg-options "-O -foptimize-sibling-calls -fsched2-use-superblocks -fschedule-insns2 -mtune=core2" } */
++
++extern unsigned char a[];
++extern int b[], d[], e[], f[], g[], *h[], m[], *n[], o[];
++extern char c[];
++
++struct S
++{
++ unsigned char s1;
++ int s2, s3, s4, s5, s6, s7, s8;
++};
++
++__attribute__((noinline, noclone)) int
++foo (int x)
++{
++ return 0;
++}
++
++int
++bar (int x, struct S *y)
++{
++ int z;
++ switch (x)
++ {
++ case 1:
++ case 2:
++ {
++ int t2, t4, t5, t6, t7, t8;
++ z = o[y->s8 * 6];
++ t8 = *n[m[x] * 5];
++ t4 = *h[y->s7];
++ t7 = z;
++ z = g[f[x] + y->s6];
++ t6 = e[y->s5];
++ t5 = d[c[x] + y->s3 * 17];
++ if (z)
++ t2 = b[z];
++ if (a[z] != y->s1)
++ return foo (x);
++ y->s8 = t8;
++ y->s4 = t4;
++ y->s7 = t7;
++ y->s6 = t6;
++ y->s5 = t5;
++ y->s2 = t2;
++ }
++ }
++ return 0;
++}
+Index: gcc/testsuite/gcc.target/i386/movdi-rex64.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/movdi-rex64.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.target/i386/movdi-rex64.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,11 @@
++/* { dg-do compile { target *-*-linux* } } */
++/* { dg-options "-fPIE" } */
++
++char *strcpy (char *dest, const char *src);
++
++static __thread char buffer[25];
++const char * error_message (void)
++{
++ strcpy (buffer, "Unknown code ");
++ return 0;
++}
+Index: gcc/testsuite/gfortran.dg/whole_file_35.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/whole_file_35.f90 (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gfortran.dg/whole_file_35.f90 (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,28 @@
++! { dg-do compile }
++!
++! PR fortran/50408
++!
++! Contributed by Vittorio Zecca
++!
++ module m
++ type int
++ integer :: val
++ end type int
++ interface ichar
++ module procedure uch
++ end interface
++ contains
++ function uch (c)
++ character (len=1), intent (in) :: c
++ type (int) :: uch
++ intrinsic ichar
++ uch%val = 127 - ichar (c)
++ end function uch
++ end module m
++
++ program p
++ use m
++ print *,ichar('~') ! must print "1"
++ end program p
++
++! { dg-final { cleanup-modules "m" } }
+Index: gcc/testsuite/gfortran.dg/move_alloc_8.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/move_alloc_8.f90 (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gfortran.dg/move_alloc_8.f90 (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,106 @@
++! { dg-do compile }
++!
++! PR fortran/50684
++!
++! Module "bug" contributed by Martin Steghöfer.
++!
++
++MODULE BUG
++ TYPE MY_TYPE
++ INTEGER, ALLOCATABLE :: VALUE
++ END TYPE
++CONTAINS
++ SUBROUTINE POINTER_INTENT_IN_BUG_WORKING(POINTER_INTENT_IN_VARIABLE)
++ TYPE(MY_TYPE), POINTER, INTENT(IN) :: POINTER_INTENT_IN_VARIABLE
++ TYPE(MY_TYPE), POINTER :: POINTER_VARIABLE_LOCAL
++ INTEGER, ALLOCATABLE :: LOCAL_VALUE
++
++ POINTER_VARIABLE_LOCAL=>POINTER_INTENT_IN_VARIABLE
++ CALL MOVE_ALLOC(POINTER_VARIABLE_LOCAL%VALUE, LOCAL_VALUE)
++
++ RETURN
++ END SUBROUTINE POINTER_INTENT_IN_BUG_WORKING
++
++ SUBROUTINE POINTER_INTENT_IN_BUG_FAILING(POINTER_INTENT_IN_VARIABLE)
++ TYPE(MY_TYPE), POINTER, INTENT(IN) :: POINTER_INTENT_IN_VARIABLE
++ INTEGER, ALLOCATABLE :: LOCAL_VALUE
++
++ CALL MOVE_ALLOC(POINTER_INTENT_IN_VARIABLE%VALUE, LOCAL_VALUE)
++
++ RETURN
++ END SUBROUTINE POINTER_INTENT_IN_BUG_FAILING
++end module bug
++
++subroutine test1()
++ TYPE MY_TYPE
++ INTEGER, ALLOCATABLE :: VALUE
++ END TYPE
++CONTAINS
++ SUBROUTINE sub (dt)
++ type(MY_TYPE), intent(in) :: dt
++ INTEGER, ALLOCATABLE :: lv
++ call move_alloc(dt%VALUE, lv) ! { dg-error "cannot be INTENT.IN." }
++ END SUBROUTINE
++end subroutine test1
++
++subroutine test2 (x, px)
++ implicit none
++ type t
++ integer, allocatable :: a
++ end type t
++
++ type t2
++ type(t), pointer :: ptr
++ integer, allocatable :: a
++ end type t2
++
++ type(t2), intent(in) :: x
++ type(t2), pointer, intent(in) :: px
++
++ integer, allocatable :: a
++ type(t2), pointer :: ta
++
++ call move_alloc (px, ta) ! { dg-error "cannot be INTENT.IN." }
++ call move_alloc (x%a, a) ! { dg-error "cannot be INTENT.IN." }
++ call move_alloc (x%ptr%a, a) ! OK (3)
++ call move_alloc (px%a, a) ! OK (4)
++ call move_alloc (px%ptr%a, a) ! OK (5)
++end subroutine test2
++
++subroutine test3 (x, px)
++ implicit none
++ type t
++ integer, allocatable :: a
++ end type t
++
++ type t2
++ class(t), pointer :: ptr
++ integer, allocatable :: a
++ end type t2
++
++ type(t2), intent(in) :: x
++ class(t2), pointer, intent(in) :: px
++
++ integer, allocatable :: a
++ class(t2), pointer :: ta
++
++ call move_alloc (px, ta) ! { dg-error "cannot be INTENT.IN." }
++ call move_alloc (x%a, a) ! { dg-error "cannot be INTENT.IN." }
++ call move_alloc (x%ptr%a, a) ! OK (6)
++ call move_alloc (px%a, a) ! OK (7)
++ call move_alloc (px%ptr%a, a) ! OK (8)
++end subroutine test3
++
++subroutine test4()
++ TYPE MY_TYPE
++ INTEGER, ALLOCATABLE :: VALUE
++ END TYPE
++CONTAINS
++ SUBROUTINE sub (dt)
++ CLASS(MY_TYPE), intent(in) :: dt
++ INTEGER, ALLOCATABLE :: lv
++ call move_alloc(dt%VALUE, lv) ! { dg-error "cannot be INTENT.IN." }
++ END SUBROUTINE
++end subroutine test4
++
++! { dg-final { cleanup-modules "bug" } }
+Index: gcc/testsuite/gfortran.dg/realloc_on_assign_8.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/realloc_on_assign_8.f90 (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gfortran.dg/realloc_on_assign_8.f90 (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,17 @@
++! { dg-do compile }
++!
++! PR fortran/51448
++!
++! Contribued by François Willot
++!
++ PROGRAM MAIN
++ IMPLICIT NONE
++ TYPE mytype
++ REAL b(2)
++ END TYPE mytype
++ TYPE(mytype) a
++ DOUBLE PRECISION, ALLOCATABLE :: x(:)
++ ALLOCATE(x(2))
++ a%b=0.0E0
++ x=a%b
++ END
+Index: gcc/testsuite/gfortran.dg/default_initialization_5.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/default_initialization_5.f90 (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gfortran.dg/default_initialization_5.f90 (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,66 @@
++! { dg-do run }
++! { dg-options "-fdump-tree-original" }
++!
++! PR fortran/51435
++!
++! Contributed by darmar.xxl@gmail.com
++!
++module arr_m
++ type arr_t
++ real(8), dimension(:), allocatable :: rsk
++ end type
++ type arr_t2
++ integer :: a = 77
++ end type
++end module arr_m
++!*********************
++module list_m
++ use arr_m
++ implicit none
++
++ type(arr_t2), target :: tgt
++
++ type my_list
++ type(arr_t), pointer :: head => null()
++ end type my_list
++ type my_list2
++ type(arr_t2), pointer :: head => tgt
++ end type my_list2
++end module list_m
++!***********************
++module worker_mod
++ use list_m
++ implicit none
++
++ type data_all_t
++ type(my_list) :: my_data
++ end type data_all_t
++ type data_all_t2
++ type(my_list2) :: my_data
++ end type data_all_t2
++contains
++ subroutine do_job()
++ type(data_all_t) :: dum
++ type(data_all_t2) :: dum2
++
++ if (associated(dum%my_data%head)) then
++ call abort()
++ else
++ print *, 'OK: do_job my_data%head is NOT associated'
++ end if
++
++ if (dum2%my_data%head%a /= 77) &
++ call abort()
++ end subroutine
++end module
++!***************
++program hello
++ use worker_mod
++ implicit none
++ call do_job()
++end program
++
++! { dg-final { scan-tree-dump-times "my_data.head = 0B" 1 "original" } }
++! { dg-final { scan-tree-dump-times "my_data.head = &tgt" 1 "original" } }
++! { dg-final { cleanup-tree-dump "original" } }
++! { dg-final { cleanup-modules "arr_m list_m worker_mod" } }
+Index: gcc/testsuite/gfortran.dg/pr50875.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/pr50875.f90 (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gfortran.dg/pr50875.f90 (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,39 @@
++! { dg-do compile { target { i?86-*-* x86_64-*-* } } }
++! { dg-options "-O3 -mavx" }
++!
++! PR fortran/50875.f90
++
++module test
++
++ implicit none
++
++ integer, parameter :: dp=kind(1.d0)
++
++ integer :: P = 2
++
++ real(kind=dp), allocatable :: real_array_A(:),real_array_B(:,:)
++ complex(kind=dp), allocatable :: cmplx_array_A(:)
++
++contains
++
++ subroutine routine_A
++
++ integer :: i
++
++ allocate(cmplx_array_A(P),real_array_B(P,P),real_array_A(P))
++
++ real_array_A = 1
++ real_array_B = 1
++
++ do i = 1, p
++ cmplx_array_A = cmplx(real_array_B(:,i),0.0_dp,dp)
++ cmplx_array_A = cmplx_array_A * exp(cmplx(0.0_dp,real_array_A+1))
++ end do
++
++ deallocate(cmplx_array_A,real_array_B,real_array_A)
++
++ end subroutine routine_A
++
++end module test
++
++! { dg-final { cleanup-modules "test" } }
+Index: gcc/testsuite/gfortran.dg/warn_function_without_result_2.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/warn_function_without_result_2.f90 (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gfortran.dg/warn_function_without_result_2.f90 (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,19 @@
++! { dg-do compile }
++! { dg-options "-Wall" }
++!
++! PR fortran/50923
++!
++module m
++contains
++ integer pure function f() ! { dg-warning "Return value of function 'f' at .1. not set" }
++ end function f
++ integer pure function g() result(h) ! { dg-warning "Return value 'h' of function 'g' declared at .1. not set" }
++ end function g
++ integer pure function i()
++ i = 7
++ end function i
++ integer pure function j() result(k)
++ k = 8
++ end function j
++end module m
++! { dg-final { cleanup-modules "mod" } }
+Index: gcc/testsuite/gfortran.dg/implicit_pure_1.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/implicit_pure_1.f90 (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gfortran.dg/implicit_pure_1.f90 (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,53 @@
++! { dg-do run }
++!
++! PR fortran/51218
++!
++! Contributed by Harald Anlauf
++!
++
++module a
++ implicit none
++ integer :: neval = 0
++contains
++ subroutine inc_eval
++ neval = neval + 1
++ end subroutine inc_eval
++end module a
++
++module b
++ use a
++ implicit none
++contains
++ function f(x) ! Should be implicit pure
++ real :: f
++ real, intent(in) :: x
++ f = x
++ end function f
++
++ function g(x) ! Should NOT be implicit pure
++ real :: g
++ real, intent(in) :: x
++ call inc_eval
++ g = x
++ end function g
++end module b
++
++program gfcbug114a
++ use a
++ use b
++ implicit none
++ real :: x = 1, y = 1, t, u, v, w
++ if (neval /= 0) call abort ()
++ t = f(x)*f(y)
++ if (neval /= 0) call abort ()
++ u = f(x)*f(y) + f(x)*f(y)
++ if (neval /= 0) call abort ()
++ v = g(x)*g(y)
++ if (neval /= 2) call abort ()
++ w = g(x)*g(y) + g(x)*g(y)
++ if (neval /= 6) call abort ()
++ if (t /= 1.0 .or. u /= 2.0 .or. v /= 1.0 .or. w /= 2) call abort ()
++end program gfcbug114a
++
++! { dg-final { scan-module "b" "IMPLICIT_PURE" } }
++! { dg-final { cleanup-modules "b" } }
+Index: gcc/testsuite/gcc.c-torture/execute/pr51466.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr51466.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr51466.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,43 @@
++/* PR tree-optimization/51466 */
++
++extern void abort (void);
++
++__attribute__((noinline, noclone)) int
++foo (int i)
++{
++ volatile int v[4];
++ int *p;
++ v[i] = 6;
++ p = (int *) &v[i];
++ return *p;
++}
++
++__attribute__((noinline, noclone)) int
++bar (int i)
++{
++ volatile int v[4];
++ int *p;
++ v[i] = 6;
++ p = (int *) &v[i];
++ *p = 8;
++ return v[i];
++}
++
++__attribute__((noinline, noclone)) int
++baz (int i)
++{
++ volatile int v[4];
++ int *p;
++ v[i] = 6;
++ p = (int *) &v[0];
++ *p = 8;
++ return v[i];
++}
++
++int
++main ()
++{
++ if (foo (3) != 6 || bar (2) != 8 || baz (0) != 8 || baz (1) != 6)
++ abort ();
++ return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/20111212-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/20111212-1.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.c-torture/execute/20111212-1.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,34 @@
++/* PR tree-optimization/50569 */
++/* Reported by Paul Koning <pkoning@gcc.gnu.org> */
++/* Reduced testcase by Mikael Pettersson <mikpe@it.uu.se> */
++
++struct event {
++ struct {
++ unsigned int sec;
++ } sent __attribute__((packed));
++};
++
++void __attribute__((noinline,noclone)) frob_entry(char *buf)
++{
++ struct event event;
++
++ __builtin_memcpy(&event, buf, sizeof(event));
++ if (event.sent.sec < 64) {
++ event.sent.sec = -1U;
++ __builtin_memcpy(buf, &event, sizeof(event));
++ }
++}
++
++int main(void)
++{
++ union {
++ char buf[1 + sizeof(struct event)];
++ int align;
++ } u;
++
++ __builtin_memset(&u, 0, sizeof u);
++
++ frob_entry(&u.buf[1]);
++
++ return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/pr51323.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr51323.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr51323.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,35 @@
++/* PR middle-end/51323 */
++
++extern void abort (void);
++struct S { int a, b, c; };
++int v;
++
++__attribute__((noinline, noclone)) void
++foo (int x, int y, int z)
++{
++ if (x != v || y != 0 || z != 9)
++ abort ();
++}
++
++static inline int
++baz (const struct S *p)
++{
++ return p->b;
++}
++
++__attribute__((noinline, noclone)) void
++bar (int x, struct S y)
++{
++ foo (baz (&y), 0, x);
++}
++
++int
++main ()
++{
++ struct S s;
++ v = 3; s.a = v - 1; s.b = v; s.c = v + 1;
++ bar (9, s);
++ v = 17; s.a = v - 1; s.b = v; s.c = v + 1;
++ bar (9, s);
++ return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/20111208-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/20111208-1.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.c-torture/execute/20111208-1.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,94 @@
++/* PR tree-optimization/51315 */
++/* Reported by Jurij Smakov <jurij@wooyd.org> */
++
++typedef unsigned int size_t;
++
++extern void *memcpy (void *__restrict __dest,
++ __const void *__restrict __src, size_t __n)
++ __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
++
++extern size_t strlen (__const char *__s)
++ __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
++
++typedef short int int16_t;
++typedef int int32_t;
++
++extern void abort (void);
++
++int a;
++
++static void __attribute__ ((noinline,noclone))
++do_something (int item)
++{
++ a = item;
++}
++
++int
++pack_unpack (char *s, char *p)
++{
++ char *send, *pend;
++ char type;
++ int integer_size;
++
++ send = s + strlen (s);
++ pend = p + strlen (p);
++
++ while (p < pend)
++ {
++ type = *p++;
++
++ switch (type)
++ {
++ case 's':
++ integer_size = 2;
++ goto unpack_integer;
++
++ case 'l':
++ integer_size = 4;
++ goto unpack_integer;
++
++ unpack_integer:
++ switch (integer_size)
++ {
++ case 2:
++ {
++ union
++ {
++ int16_t i;
++ char a[sizeof (int16_t)];
++ }
++ v;
++ memcpy (v.a, s, sizeof (int16_t));
++ s += sizeof (int16_t);
++ do_something (v.i);
++ }
++ break;
++
++ case 4:
++ {
++ union
++ {
++ int32_t i;
++ char a[sizeof (int32_t)];
++ }
++ v;
++ memcpy (v.a, s, sizeof (int32_t));
++ s += sizeof (int32_t);
++ do_something (v.i);
++ }
++ break;
++ }
++ break;
++ }
++ }
++ return (int) *s;
++}
++
++int
++main (void)
++{
++ int n = pack_unpack ("\200\001\377\376\035\300", "sl");
++ if (n != 0)
++ abort ();
++ return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/compile/pr51077.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/compile/pr51077.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.c-torture/compile/pr51077.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,15 @@
++/* PR middle-end/51077 */
++
++struct S { unsigned char s, t[256]; };
++
++void
++foo (const struct S *x, struct S *y, int z)
++{
++ int i;
++ for (i = 0; i < 8; i++)
++ {
++ const struct S *a = &x[i];
++ __builtin___memcpy_chk (y->t, a->t, z, __builtin_object_size (y->t, 0));
++ y = (struct S *) &y->t[z];
++ }
++}
+Index: gcc/testsuite/gcc.c-torture/compile/20110913-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/compile/20110913-1.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.c-torture/compile/20110913-1.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,26 @@
++struct ieee754_double {
++ double d;
++};
++extern const float __exp_deltatable[178];
++float __ieee754_expf (float x)
++{
++ static const float himark = 88.72283935546875;
++ static const float lomark = -103.972084045410;
++ if (__builtin_isless(x, himark) && __builtin_isgreater(x, lomark))
++ {
++ int tval;
++ double x22, t, result, dx;
++ float delta;
++ struct ieee754_double ex2_u;
++ dx -= t;
++ tval = (int) (t * 512.0);
++ if (t >= 0)
++ delta = - __exp_deltatable[tval];
++ else
++ delta = __exp_deltatable[-tval];
++ x22 = (0.5000000496709180453 * dx + 1.0000001192102037084) * dx + delta;
++ result = x22 * ex2_u.d + ex2_u.d;
++ return (float) result;
++ }
++ return x;
++}
+Index: gcc/testsuite/gnat.dg/frame_overflow.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/frame_overflow.adb (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gnat.dg/frame_overflow.adb (.../branches/gcc-4_6-branch)
+@@ -1,27 +1,20 @@
+ -- { dg-do compile }
+
+-with System;
++package body Frame_Overflow is
+
+-procedure frame_overflow is
+-
+- type Bitpos_Range_T is range 1..2**(System.Word_Size-1)-1;
+- type Bitmap_Array_T is array (Bitpos_Range_T) of Boolean;
+-
+- type Bitmap_T is record
+- Bits : Bitmap_Array_T := (others => False);
+- end record;
+-
+- function
++ function -- { dg-error "too large" }
+ Set_In (Bitmap : Bitmap_T; Bitpos : Bitpos_Range_T) return Bitmap_T
+ is
+- Result: Bitmap_T := Bitmap; -- { dg-error "Storage_Error" }
++ Result: Bitmap_T := Bitmap;
+ begin
+ Result.Bits (Bitpos) := True;
+ return Result;
+ end;
+
+- function Negate (Bitmap : Bitmap_T) return Bitmap_T is
+- Result: Bitmap_T; -- { dg-error "Storage_Error" }
++ function -- { dg-error "too large" }
++ Negate (Bitmap : Bitmap_T) return Bitmap_T
++ is
++ Result: Bitmap_T;
+ begin
+ for E in Bitpos_Range_T loop
+ Result.Bits (E) := not Bitmap.Bits (E);
+@@ -29,6 +22,4 @@
+ return Result;
+ end;
+
+-begin
+- null;
+-end;
++end Frame_Overflow;
+Index: gcc/testsuite/gnat.dg/frame_overflow.ads
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/frame_overflow.ads (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gnat.dg/frame_overflow.ads (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,17 @@
++with System;
++
++package Frame_Overflow is
++
++ type Bitpos_Range_T is range 1..2**(System.Word_Size-1)-1;
++ type Bitmap_Array_T is array (Bitpos_Range_T) of Boolean;
++
++ type Bitmap_T is record
++ Bits : Bitmap_Array_T := (others => False);
++ end record;
++
++ function
++ Set_In (Bitmap : Bitmap_T; Bitpos : Bitpos_Range_T) return Bitmap_T;
++
++ function Negate (Bitmap : Bitmap_T) return Bitmap_T;
++
++end Frame_Overflow;
+Index: gcc/testsuite/gnat.dg/specs/addr1.ads
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/specs/addr1.ads (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gnat.dg/specs/addr1.ads (.../branches/gcc-4_6-branch)
+@@ -15,7 +15,7 @@
+ end record;
+ for Rec2'Size use 64;
+
+- A: Arr (1 .. 12);
++ A: Arr (1 .. 4);
+
+ Obj1: Rec1;
+ for Obj1'Address use A'Address; -- { dg-bogus "alignment" }
+Index: gcc/testsuite/gcc.dg/pr45819.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/pr45819.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.dg/pr45819.c (.../branches/gcc-4_6-branch)
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fdump-tree-optimized" } */
++/* { dg-options "-O2 -fdump-tree-optimized -w" } */
+
+ struct ehci_regs {
+ char x;
+Index: gcc/testsuite/gcc.dg/gomp/pr51339.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/gomp/pr51339.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.dg/gomp/pr51339.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,15 @@
++/* PR c/51339 */
++/* { dg-do compile } */
++/* { dg-options "-fopenmp" } */
++
++char g[] = "g";
++
++void
++foo (void)
++{
++#pragma omp parallel sections firstprivate (g) lastprivate (g)
++ {
++ #pragma omp section
++ g[0] = 'h';
++ }
++}
+Index: gcc/testsuite/gcc.dg/cpp/assert4.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/cpp/assert4.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.dg/cpp/assert4.c (.../branches/gcc-4_6-branch)
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2003, 2006, 2008 Free Software Foundation, Inc.
++/* Copyright (C) 2003, 2006, 2008, 2009, 2011 Free Software Foundation, Inc.
+ Test builtin preprocessor assertions.
+ By Kaveh Ghazi <ghazi@caip.rutgers.edu>. */
+
+@@ -7,7 +7,7 @@
+
+ /* Check for #system assertions. */
+
+-#if defined __gnu_linux__
++#if defined __linux__
+ # if !#system(linux) || !#system(unix) || !#system(posix)
+ # error
+ # endif
+Index: gcc/testsuite/gcc.dg/pr50078.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/pr50078.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.dg/pr50078.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,14 @@
++/* PR tree-optimization/50078 */
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++unsigned nonvolvar[2];
++
++void
++test (int arg)
++{
++ unsigned v = *(volatile unsigned *) (&nonvolvar[arg]);
++ *(volatile unsigned *) (&nonvolvar[arg]) = v;
++}
++
++/* { dg-final { scan-assembler-times "movl\[^\n\r\]*nonvolvar" 2 { target { { i?86-*-* x86_64-*-* } && nonpic } } } } */
+Index: gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,13 @@
++/* PR debug/51410 */
++/* { dg-do compile } */
++/* { dg-options "-O0 -gdwarf-2 -dA -fno-merge-debug-strings" } */
++
++int x;
++
++int
++foo (void)
++{
++ return x;
++}
++
++/* { dg-final { scan-assembler-times "\\(DIE\[^\\r\\n\]*DW_TAG_variable\\)" 1 } } */
+Index: gcc/testsuite/gcc.dg/pr51408.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/pr51408.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.dg/pr51408.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,22 @@
++/* This testcase used to fail because of a bug in
++ arm.md:*minmax_arithsi. */
++
++/* { dg-do run } */
++/* { dg-options "-O1" } */
++
++extern void abort (void);
++
++int __attribute__((noinline))
++foo (int a, int b)
++{
++ int max = (b > 0) ? b : 0;
++ return max - a;
++}
++
++int
++main (void)
++{
++ if (foo (3, -1) != -3)
++ abort ();
++ return 0;
++}
+Index: gcc/testsuite/gcc.dg/delay-slot-2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/delay-slot-2.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/gcc.dg/delay-slot-2.c (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,116 @@
++/* PR rtl-optimization/51187 */
++/* Reported by Jurij Smakov <jurij@wooyd.org> */
++
++/* { dg-do compile } */
++/* { dg-options "-g -O2" } */
++
++extern int printf (__const char *__restrict __format, ...);
++extern void print_c_condition (const char *);
++
++enum decision_type
++{
++ DT_num_insns,
++ DT_mode, DT_code, DT_veclen,
++ DT_elt_zero_int, DT_elt_one_int, DT_elt_zero_wide, DT_elt_zero_wide_safe,
++ DT_const_int,
++ DT_veclen_ge, DT_dup, DT_pred, DT_c_test,
++ DT_accept_op, DT_accept_insn
++};
++
++struct decision_test
++{
++ struct decision_test *next;
++ enum decision_type type;
++
++ union
++ {
++ int num_insns;
++
++ struct
++ {
++ const char *name;
++ } pred;
++
++ const char *c_test;
++ int veclen;
++ int dup;
++ long intval;
++ int opno;
++
++ struct {
++ int code_number;
++ int lineno;
++ int num_clobbers_to_add;
++ } insn;
++ } u;
++};
++
++enum routine_type {
++ RECOG, SPLIT, PEEPHOLE2
++};
++
++void
++write_cond (struct decision_test *p, int depth,
++ enum routine_type subroutine_type)
++{
++ switch (p->type)
++ {
++ case DT_num_insns:
++ printf ("peep2_current_count >= %d", p->u.num_insns);
++ break;
++
++ case DT_code:
++ printf ("GET_CODE (x%d) == ", depth);
++ break;
++
++ case DT_veclen:
++ printf ("XVECLEN (x%d, 0) == %d", depth, p->u.veclen);
++ break;
++
++ case DT_elt_zero_int:
++ printf ("XINT (x%d, 0) == %d", depth, (int) p->u.intval);
++ break;
++
++ case DT_elt_one_int:
++ printf ("XINT (x%d, 1) == %d", depth, (int) p->u.intval);
++ break;
++
++ case DT_elt_zero_wide:
++ case DT_elt_zero_wide_safe:
++ printf ("XWINT (x%d, 0) == ", depth);
++ print_host_wide_int (p->u.intval);
++ break;
++
++ case DT_const_int:
++ printf ("x%d == const_int_rtx[MAX_SAVED_CONST_INT + (%d)]",
++ depth, (int) p->u.intval);
++ break;
++
++ case DT_veclen_ge:
++ printf ("XVECLEN (x%d, 0) >= %d", depth, p->u.veclen);
++ break;
++
++ case DT_dup:
++ printf ("rtx_equal_p (x%d, operands[%d])", depth, p->u.dup);
++ break;
++
++ case DT_pred:
++ printf ("%s (x%d)", p->u.pred.name, depth);
++ break;
++
++ case DT_c_test:
++ print_c_condition (p->u.c_test);
++ break;
++
++ case DT_accept_insn:
++ ((void)(__builtin_expect(!(subroutine_type == RECOG), 0) ? __builtin_unreachable(), 0 : 0));
++ ((void)(__builtin_expect(!(p->u.insn.num_clobbers_to_add), 0) ? __builtin_unreachable(), 0 : 0));
++ printf ("pnum_clobbers != NULL");
++ break;
++
++ default:
++ __builtin_unreachable();
++ }
++}
++
++/* { dg-final { scan-assembler "printf" } } */
+Index: gcc/testsuite/ChangeLog
+===================================================================
+--- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,203 @@
++2011-12-14 Jason Merrill <jason@redhat.com>
++
++ PR c++/51248
++ * g++.dg/other/enum2.C: New.
++
++2011-12-13 Jason Merrill <jason@redhat.com>
++
++ PR c++/51406
++ PR c++/51161
++ * g++.dg/cpp0x/rv-cast3.C: New.
++ * g++.dg/cpp0x/rv-cast4.C: New.
++
++2011-12-12 Jakub Jelinek <jakub@redhat.com>
++
++ PR testsuite/51511
++ * gcc.dg/pr45819.c: Add -w to dg-options.
++
++ Backported from mainline
++ 2011-12-11 Jakub Jelinek <jakub@redhat.com>
++
++ PR tree-optimization/51485
++ * g++.dg/vect/pr51485.cc: New test.
++
++2011-12-12 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc.c-torture/execute/20111212-1.c: New test.
++
++2011-12-11 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/50923
++ * gfortran.dg/warn_function_without_result_2.f90: New.
++
++2011-12-11 Thomas Koenig <tkoenig@gcc.gnu.org>
++
++ PR fortran/51338
++ Backport from trunk
++ * gfortran.dg/assumed_charlen_substring_1.f90: New test.
++
++2011-12-09 Jakub Jelinek <jakub@redhat.com>
++
++ Backport from mainline
++ 2011-12-08 Jakub Jelinek <jakub@redhat.com>
++
++ PR tree-optimization/51466
++ * gcc.c-torture/execute/pr51466.c: New test.
++
++ 2011-11-28 Jakub Jelinek <jakub@redhat.com>
++
++ PR tree-optimization/50078
++ * gcc.dg/pr50078.c: New test.
++
++2011-12-09 Kazu Hirata <kazu@codesourcery.com>
++
++ Backport from mainline:
++
++ 2011-12-05 Kazu Hirata <kazu@codesourcery.com>
++
++ PR target/51408
++ * gcc.dg/pr51408.c: New.
++
++2011-12-08 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/51448
++ * gfortran.dg/realloc_on_assign_8.f90: New.
++
++2011-12-08 Teresa Johnson <tejohnson@google.com>
++
++ * gcc.target/i386/movdi-rex64.c: Remove unnecessary
++ unused label.
++
++2011-12-08 Teresa Johnson <tejohnson@google.com>
++
++ * gcc.target/i386/movdi-rex64.c: Remove unnecessary
++ -Wwrite-strings option.
++
++2011-12-08 Teresa Johnson <tejohnson@google.com>
++
++ * gcc.target/i386/movdi-rex64.c: New.
++
++2011-12-08 Jakub Jelinek <jakub@redhat.com>
++
++ Backport from mainline
++ 2011-12-05 Jakub Jelinek <jakub@redhat.com>
++
++ PR debug/51410
++ * gcc.dg/debug/dwarf2/pr51410.c: New test.
++
++ PR c/51339
++ * gcc.dg/gomp/pr51339.c: New test.
++
++ 2011-12-05 Jakub Jelinek <jakub@redhat.com>
++ Eric Botcazou <ebotcazou@adacore.com>
++
++ PR middle-end/51323
++ PR middle-end/50074
++ * gcc.c-torture/execute/pr51323.c: New test.
++
++ 2011-11-30 Jakub Jelinek <jakub@redhat.com>
++
++ PR rtl-optimization/48721
++ * gcc.target/i386/pr48721.c: New test.
++
++2011-12-08 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc.c-torture/execute/20111208-1.c: New test.
++
++ Backport from mainline
++ 2011-09-25 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gnat.dg/frame_overflow.ads: New.
++ * gnat.dg/frame_overflow.adb: Adjust.
++ * gnat.dg/specs/addr1.ads: Likewise.
++
++2011-12-06 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/51435
++ * gfortran.dg/default_initialization_5.f90: New.
++
++2011-12-06 Martin Jambor <mjambor@suse.cz>
++
++ PR tree-optimization/50622
++ * g++.dg/tree-ssa/pr50622.C: New test.
++
++2011-12-04 Uros Bizjak <ubizjak@gmail.com>
++ Jérémie Detrey <Jeremie.Detrey@loria.fr>
++
++ PR target/51393
++ * gcc.target/i386/pr51393.c: New test.
++
++2011-12-03 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/50684
++ * gfortran.dg/move_alloc_8.f90: New.
++
++2011-11-25 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/50408
++ * gfortran.dg/whole_file_35.f90: New.
++
++2011-11-24 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/51218
++ * resolve.c (pure_subroutine): If called subroutine is
++ impure, unset implicit_pure.
++ (resolve_function): Move impure check to simplify code.
++
++2011-11-22 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/51265
++ * g++.dg/cpp0x/decltype36.C: New.
++
++2011-11-19 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc.dg/delay-slot-2.c: New test.
++
++2011-11-18 Joseph Myers <joseph@codesourcery.com>
++
++ * gcc.dg/cpp/assert4.c: Test __linux__, not __gnu_linux__.
++
++2011-11-18 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/51150
++ * g++.dg/cpp0x/pr51150.C: New.
++
++2011-11-16 Richard Earnshaw <rearnsha@arm.com>
++ Bernd Schmidt <bernds@coudesourcery.com>
++ Sebastian Huber <sebastian.huber@embedded-brains.de>
++
++ PR target/49641
++ * gcc.target/arm/pr49641.c: New test.
++
++2011-11-10 Jakub Jelinek <jakub@redhat.com>
++
++ PR middle-end/51077
++ * gcc.c-torture/compile/pr51077.c: New test.
++
++2011-11-07 Jason Merrill <jason@redhat.com>
++
++ PR c++/50870
++ * g++.dg/cpp0x/decltype35.C: New.
++
++2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
++
++ * g++.dg/other/offsetof7.C: New test.
++
++2011-11-02 Bernd Schmidt <bernds@codesourcery.com>
++
++ * gcc.c-torture/compile/20110907.c: New file.
++
++2011-10-29 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/50901
++ * g++.dg/cpp0x/pr50901.C: New.
++
++2011-10-27 Uros Bizjak <ubizjak@gmail.com>
++ Steven G. Kargl <kargl@gcc.gnu.org>
++
++ PR target/50875
++ * gfortran.dg/pr50875.f90: New test.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+@@ -9,9 +209,9 @@
+
+ 2011-10-20 Uros Bizjak <ubizjak@gmail.com>
+
+- * gcc.dg/ipa/ipa-sra-2.c: Add dg-require-effective-target
+- non_strict_align.
+- * gcc.dg/ipa/ipa-sra-6.c: Ditto.
++ * gcc.dg/ipa/ipa-sra-2.c: Add dg-require-effective-target
++ non_strict_align.
++ * gcc.dg/ipa/ipa-sra-6.c: Ditto.
+
+ 2011-10-19 Jason Merrill <jason@redhat.com>
+
+Index: gcc/testsuite/g++.dg/vect/pr51485.cc
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/vect/pr51485.cc (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/g++.dg/vect/pr51485.cc (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++
++struct A { A (); unsigned int a; };
++double bar (A a) throw () __attribute__((pure));
++
++void
++foo (unsigned int x, double *y, A *z)
++{
++ unsigned int i;
++ for (i = 0; i < x; i++)
++ y[i] = bar (z[i]);
++}
++
++/* { dg-final { cleanup-tree-dump "vect" } } */
+Index: gcc/testsuite/g++.dg/other/enum2.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/other/enum2.C (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/g++.dg/other/enum2.C (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,3 @@
++// PR c++/51248
++
++enum E { e = sizeof(const E*) };
+Index: gcc/testsuite/g++.dg/other/offsetof7.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/other/offsetof7.C (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/g++.dg/other/offsetof7.C (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,17 @@
++// PR c++/50608
++// Testcase by <dberger@oubliette.org>
++// { dg-do compile }
++
++struct A {
++ int offset;
++};
++
++struct B: public A {
++};
++
++struct C {
++ A a;
++ B b;
++};
++
++int fails = __builtin_offsetof (C, b.offset);
+Index: gcc/testsuite/g++.dg/tree-ssa/pr50622.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/tree-ssa/pr50622.C (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/g++.dg/tree-ssa/pr50622.C (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,30 @@
++// { dg-do compile }
++// { dg-options "-O2" }
++
++typedef __complex__ double Value;
++struct LorentzVector
++{
++ LorentzVector & operator+=(const LorentzVector & a) {
++ theX += a.theX;
++ theY += a.theY;
++ theZ += a.theZ;
++ theT += a.theT;
++ return *this;
++ }
++
++ Value theX;
++ Value theY;
++ Value theZ;
++ Value theT;
++};
++
++inline LorentzVector
++operator+(LorentzVector a, const LorentzVector & b) {
++ return a += b;
++}
++
++Value ex, et;
++LorentzVector sum() {
++ LorentzVector v1; v1.theX =ex; v1.theY =ex+et; v1.theZ =ex-et; v1.theT =et;
++ return v1+v1;
++}
+Index: gcc/testsuite/g++.dg/cpp0x/pr50901.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/pr50901.C (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/pr50901.C (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,9 @@
++// { dg-options "-std=c++0x" }
++
++template<class T> int foo(int a)
++{
++ const unsigned b = a < 0 ? -a : a;
++ return 0;
++}
++
++int i = foo<float>(1);
+Index: gcc/testsuite/g++.dg/cpp0x/decltype35.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/decltype35.C (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/decltype35.C (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,15 @@
++// PR c++/50870
++// { dg-options -std=c++0x }
++
++template <class V>
++ struct impl
++ {
++ template <class T> static T create();
++ };
++
++template <class T, class U, class V, class
++ = decltype(impl<V>::template create<T>()
++ -> impl<V>::template create<U>())>
++struct tester { };
++
++tester<impl<float>*, int, float> ti;
+Index: gcc/testsuite/g++.dg/cpp0x/decltype36.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/decltype36.C (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/decltype36.C (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,21 @@
++// PR c++/51265
++// { dg-options -std=c++0x }
++
++struct Funny
++{
++ int print(int);
++};
++
++template<typename X>
++void c();
++
++template<typename X, X ff>
++void xx()
++{
++ c<decltype(ff)>();
++}
++
++int main()
++{
++ xx<int(Funny::*)(int), &Funny::print>();
++}
+Index: gcc/testsuite/g++.dg/cpp0x/pr51150.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/pr51150.C (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/pr51150.C (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,20 @@
++// PR c++/51150
++// { dg-options "-std=c++0x" }
++
++struct Clock {
++ double Now();
++};
++template <class T> void Foo(Clock* clock) {
++ const int now = clock->Now();
++}
++
++template void Foo<float>(Clock*);
++
++template <class T> void Boo(int val) {
++ const int now1 = (double)(val);
++ const int now2 = const_cast<double>(val); // { dg-error "invalid" }
++ const int now3 = static_cast<double>(val);
++ const int now4 = reinterpret_cast<double>(val); // { dg-error "invalid" }
++}
++
++template void Boo<float>(int);
+Index: gcc/testsuite/g++.dg/cpp0x/rv-cast3.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,17 @@
++// PR c++/51406
++// { dg-do run { target c++11 } }
++
++extern "C" int printf(const char *,...);
++extern "C" void abort();
++
++struct A { int a; A() : a(1) {} };
++struct B { int b; B() : b(2) {} };
++struct X : A, B {};
++
++int main() {
++ X x;
++ int a=static_cast<A&&>(x).a;
++ int b=static_cast<B&&>(x).b;
++ // printf ("%d %d\n", a, b);
++ if (a!=1 || b!=2) abort();
++}
+Index: gcc/testsuite/g++.dg/cpp0x/rv-cast4.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,13 @@
++// PR c++/51161
++// { dg-do compile { target c++11 } }
++
++struct A{};
++struct B : A{};
++struct C : A{};
++struct D : B, C{};
++
++int main()
++{
++ D d;
++ static_cast<A &&>(d); // { dg-error "ambiguous" }
++}
+Index: gcc/cp/typeck.c
+===================================================================
+--- a/src/gcc/cp/typeck.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/cp/typeck.c (.../branches/gcc-4_6-branch)
+@@ -4835,9 +4835,7 @@
+ && TREE_CONSTANT (TREE_OPERAND (val, 0)))
+ {
+ tree type = build_pointer_type (argtype);
+- tree op0 = fold_convert (type, TREE_OPERAND (val, 0));
+- tree op1 = fold_convert (sizetype, fold_offsetof (arg, val));
+- return fold_build2 (POINTER_PLUS_EXPR, type, op0, op1);
++ return fold_convert (type, fold_offsetof_1 (arg));
+ }
+
+ /* Handle complex lvalues (when permitted)
+@@ -5772,8 +5770,18 @@
+ && reference_related_p (TREE_TYPE (type), intype)
+ && (c_cast_p || at_least_as_qualified_p (TREE_TYPE (type), intype)))
+ {
+- expr = build_typed_address (expr, type);
+- return convert_from_reference (expr);
++ /* Handle the lvalue case here by casting to lvalue reference and
++ then changing it to an rvalue reference. Casting an xvalue to
++ rvalue reference will be handled by the main code path. */
++ tree lref = cp_build_reference_type (TREE_TYPE (type), false);
++ result = (perform_direct_initialization_if_possible
++ (lref, expr, c_cast_p, complain));
++ result = cp_fold_convert (type, result);
++ /* Make sure we don't fold back down to a named rvalue reference,
++ because that would be an lvalue. */
++ if (DECL_P (result))
++ result = build1 (NON_LVALUE_EXPR, type, result);
++ return convert_from_reference (result);
+ }
+
+ /* Resolve overloaded address here rather than once in
+Index: gcc/cp/decl.c
+===================================================================
+--- a/src/gcc/cp/decl.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/cp/decl.c (.../branches/gcc-4_6-branch)
+@@ -11540,15 +11540,19 @@
+ static void
+ copy_type_enum (tree dst, tree src)
+ {
+- TYPE_MIN_VALUE (dst) = TYPE_MIN_VALUE (src);
+- TYPE_MAX_VALUE (dst) = TYPE_MAX_VALUE (src);
+- TYPE_SIZE (dst) = TYPE_SIZE (src);
+- TYPE_SIZE_UNIT (dst) = TYPE_SIZE_UNIT (src);
+- SET_TYPE_MODE (dst, TYPE_MODE (src));
+- TYPE_PRECISION (dst) = TYPE_PRECISION (src);
+- TYPE_ALIGN (dst) = TYPE_ALIGN (src);
+- TYPE_USER_ALIGN (dst) = TYPE_USER_ALIGN (src);
+- TYPE_UNSIGNED (dst) = TYPE_UNSIGNED (src);
++ tree t;
++ for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
++ {
++ TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
++ TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
++ TYPE_SIZE (t) = TYPE_SIZE (src);
++ TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
++ SET_TYPE_MODE (dst, TYPE_MODE (src));
++ TYPE_PRECISION (t) = TYPE_PRECISION (src);
++ TYPE_ALIGN (t) = TYPE_ALIGN (src);
++ TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
++ TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
++ }
+ }
+
+ /* Begin compiling the definition of an enumeration type.
+@@ -11903,9 +11907,12 @@
+ return;
+ }
+
+- /* Here there should not be any variants of this type. */
++ /* If this is a forward declaration, there should not be any variants,
++ though we can get a variant in the middle of an enum-specifier with
++ wacky code like 'enum E { e = sizeof(const E*) };' */
+ gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
+- && !TYPE_NEXT_VARIANT (enumtype));
++ && (TYPE_VALUES (enumtype)
++ || !TYPE_NEXT_VARIANT (enumtype)));
+ }
+
+ /* Build and install a CONST_DECL for an enumeration constant of the
+Index: gcc/cp/ChangeLog
+===================================================================
+--- a/src/gcc/cp/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/cp/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,45 @@
++2011-12-14 Jason Merrill <jason@redhat.com>
++
++ PR c++/51248
++ * decl.c (copy_type_enum): Also update variants.
++ (finish_enum): Allow variants of complete enums.
++
++2011-12-13 Jason Merrill <jason@redhat.com>
++
++ PR c++/51406
++ PR c++/51161
++ * typeck.c (build_static_cast_1): Fix cast of lvalue to
++ base rvalue reference.
++
++2011-11-22 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/51265
++ * semantics.c (finish_decltype_type): Handle PTRMEM_CST.
++
++2011-11-18 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/51150
++ * pt.c (tsubst_copy_and_build): Handle FIX_TRUNC_EXPR.
++
++2011-11-07 Jason Merrill <jason@redhat.com>
++
++ PR c++/50870
++ * pt.c (tsubst_copy): Handle NAMESPACE_DECL.
++ (tsubst_copy_and_build) [COMPONENT_REF]: Handle a still-dependent
++ object.
++
++2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR c++/50608
++ * semantics.c (finish_offsetof): Adjust call to fold_offsetof.
++ * typeck.c (cp_build_addr_expr_1): Call fold_offsetof_1.
++
++2011-10-29 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/50901
++ * call.c (build_new_op_1): Handle ABS_EXPR together with the
++ other unary EXPR.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: gcc/cp/pt.c
+===================================================================
+--- a/src/gcc/cp/pt.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/cp/pt.c (.../branches/gcc-4_6-branch)
+@@ -11439,6 +11439,9 @@
+ mark_used (t);
+ return t;
+
++ case NAMESPACE_DECL:
++ return t;
++
+ case OVERLOAD:
+ /* An OVERLOAD will always be a non-dependent overload set; an
+ overload set from function scope will just be represented with an
+@@ -12704,6 +12707,10 @@
+ return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
+ complain);
+
++ case FIX_TRUNC_EXPR:
++ return cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
++ 0, complain);
++
+ case ADDR_EXPR:
+ op1 = TREE_OPERAND (t, 0);
+ if (TREE_CODE (op1) == LABEL_DECL)
+@@ -13179,7 +13186,9 @@
+ if (member == error_mark_node)
+ return error_mark_node;
+
+- if (object_type && !CLASS_TYPE_P (object_type))
++ if (type_dependent_expression_p (object))
++ /* We can't do much here. */;
++ else if (!CLASS_TYPE_P (object_type))
+ {
+ if (SCALAR_TYPE_P (object_type))
+ {
+Index: gcc/cp/semantics.c
+===================================================================
+--- a/src/gcc/cp/semantics.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/cp/semantics.c (.../branches/gcc-4_6-branch)
+@@ -3348,7 +3348,7 @@
+ }
+ if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
+ expr = TREE_OPERAND (expr, 0);
+- return fold_offsetof (expr, NULL_TREE);
++ return fold_offsetof (expr);
+ }
+
+ /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. This
+@@ -4927,8 +4927,9 @@
+ gcc_unreachable ();
+
+ case INTEGER_CST:
++ case PTRMEM_CST:
+ /* We can get here when the id-expression refers to an
+- enumerator. */
++ enumerator or non-type template parameter. */
+ type = TREE_TYPE (expr);
+ break;
+
+Index: gcc/cp/call.c
+===================================================================
+--- a/src/gcc/cp/call.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/cp/call.c (.../branches/gcc-4_6-branch)
+@@ -4996,6 +4996,7 @@
+ case POSTDECREMENT_EXPR:
+ case REALPART_EXPR:
+ case IMAGPART_EXPR:
++ case ABS_EXPR:
+ return cp_build_unary_op (code, arg1, candidates != 0, complain);
+
+ case ARRAY_REF:
+Index: gcc/lto-cgraph.c
+===================================================================
+--- a/src/gcc/lto-cgraph.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/lto-cgraph.c (.../branches/gcc-4_6-branch)
+@@ -1792,9 +1792,9 @@
+ {
+ const struct lto_function_header *header =
+ (const struct lto_function_header *) data;
+- const int32_t cfg_offset = sizeof (struct lto_function_header);
+- const int32_t main_offset = cfg_offset + header->cfg_size;
+- const int32_t string_offset = main_offset + header->main_size;
++ const int cfg_offset = sizeof (struct lto_function_header);
++ const int main_offset = cfg_offset + header->cfg_size;
++ const int string_offset = main_offset + header->main_size;
+ struct data_in *data_in;
+ struct lto_input_block ib_main;
+ unsigned int i;
+Index: gcc/lto-streamer-out.c
+===================================================================
+--- a/src/gcc/lto-streamer-out.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/lto-streamer-out.c (.../branches/gcc-4_6-branch)
+@@ -2408,7 +2408,7 @@
+ enum gcc_plugin_symbol_kind kind;
+ enum gcc_plugin_symbol_visibility visibility;
+ int slot_num;
+- uint64_t size;
++ unsigned HOST_WIDEST_INT size;
+ const char *comdat;
+ unsigned char c;
+
+@@ -2466,7 +2466,7 @@
+ when symbol has attribute (visibility("hidden")) specified.
+ targetm.binds_local_p check DECL_VISIBILITY_SPECIFIED and gets this
+ right. */
+-
++
+ if (DECL_EXTERNAL (t)
+ && !targetm.binds_local_p (t))
+ visibility = GCCPV_DEFAULT;
+@@ -2488,14 +2488,9 @@
+ }
+
+ if (kind == GCCPK_COMMON
+- && DECL_SIZE (t)
+- && TREE_CODE (DECL_SIZE (t)) == INTEGER_CST)
+- {
+- size = (HOST_BITS_PER_WIDE_INT >= 64)
+- ? (uint64_t) int_size_in_bytes (TREE_TYPE (t))
+- : (((uint64_t) TREE_INT_CST_HIGH (DECL_SIZE_UNIT (t))) << 32)
+- | TREE_INT_CST_LOW (DECL_SIZE_UNIT (t));
+- }
++ && DECL_SIZE_UNIT (t)
++ && TREE_CODE (DECL_SIZE_UNIT (t)) == INTEGER_CST)
++ size = TREE_INT_CST_LOW (DECL_SIZE_UNIT (t));
+ else
+ size = 0;
+
+Index: gcc/dwarf2out.c
+===================================================================
+--- a/src/gcc/dwarf2out.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/dwarf2out.c (.../branches/gcc-4_6-branch)
+@@ -4431,6 +4431,11 @@
+ const char *section; /* Section this loclist is relative to */
+ dw_loc_descr_ref expr;
+ hashval_t hash;
++ /* True if all addresses in this and subsequent lists are known to be
++ resolved. */
++ bool resolved_addr;
++ /* True if this list has been replaced by dw_loc_next. */
++ bool replaced;
+ bool emitted;
+ } dw_loc_list_node;
+
+@@ -6091,6 +6096,19 @@
+ /* Table of decl location linked lists. */
+ static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
+
++/* A cached location list. */
++struct GTY (()) cached_dw_loc_list_def {
++ /* The DECL_UID of the decl that this entry describes. */
++ unsigned int decl_id;
++
++ /* The cached location list. */
++ dw_loc_list_ref loc_list;
++};
++typedef struct cached_dw_loc_list_def cached_dw_loc_list;
++
++/* Table of cached location lists. */
++static GTY ((param_is (cached_dw_loc_list))) htab_t cached_dw_loc_list_table;
++
+ /* A pointer to the base of a list of references to DIE's that
+ are uniquely identified by their tag, presence/absence of
+ children DIE's, and list of attribute/value pairs. */
+@@ -6439,7 +6457,7 @@
+ static void insert_double (double_int, unsigned char *);
+ static void insert_float (const_rtx, unsigned char *);
+ static rtx rtl_for_decl_location (tree);
+-static bool add_location_or_const_value_attribute (dw_die_ref, tree,
++static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool,
+ enum dwarf_attribute);
+ static bool tree_add_const_value_attribute (dw_die_ref, tree);
+ static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
+@@ -8173,6 +8191,24 @@
+ htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
+ }
+
++/* Returns a hash value for X (which really is a cached_dw_loc_list_list). */
++
++static hashval_t
++cached_dw_loc_list_table_hash (const void *x)
++{
++ return (hashval_t) ((const cached_dw_loc_list *) x)->decl_id;
++}
++
++/* Return nonzero if decl_id of cached_dw_loc_list X is the same as
++ UID of decl *Y. */
++
++static int
++cached_dw_loc_list_table_eq (const void *x, const void *y)
++{
++ return (((const cached_dw_loc_list *) x)->decl_id
++ == DECL_UID ((const_tree) y));
++}
++
+ /* Equate a DIE to a particular declaration. */
+
+ static void
+@@ -16995,15 +17031,22 @@
+ these things can crop up in other ways also.) Note that one type of
+ constant value which can be passed into an inlined function is a constant
+ pointer. This can happen for example if an actual argument in an inlined
+- function call evaluates to a compile-time constant address. */
++ function call evaluates to a compile-time constant address.
+
++ CACHE_P is true if it is worth caching the location list for DECL,
++ so that future calls can reuse it rather than regenerate it from scratch.
++ This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
++ since we will need to refer to them each time the function is inlined. */
++
+ static bool
+-add_location_or_const_value_attribute (dw_die_ref die, tree decl,
++add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p,
+ enum dwarf_attribute attr)
+ {
+ rtx rtl;
+ dw_loc_list_ref list;
+ var_loc_list *loc_list;
++ cached_dw_loc_list *cache;
++ void **slot;
+
+ if (TREE_CODE (decl) == ERROR_MARK)
+ return false;
+@@ -17040,7 +17083,33 @@
+ && add_const_value_attribute (die, rtl))
+ return true;
+ }
+- list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
++ /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
++ list several times. See if we've already cached the contents. */
++ list = NULL;
++ if (loc_list == NULL || cached_dw_loc_list_table == NULL)
++ cache_p = false;
++ if (cache_p)
++ {
++ cache = (cached_dw_loc_list *)
++ htab_find_with_hash (cached_dw_loc_list_table, decl, DECL_UID (decl));
++ if (cache)
++ list = cache->loc_list;
++ }
++ if (list == NULL)
++ {
++ list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
++ /* It is usually worth caching this result if the decl is from
++ BLOCK_NONLOCALIZED_VARS and if the list has at least two elements. */
++ if (cache_p && list && list->dw_loc_next)
++ {
++ slot = htab_find_slot_with_hash (cached_dw_loc_list_table, decl,
++ DECL_UID (decl), INSERT);
++ cache = ggc_alloc_cleared_cached_dw_loc_list ();
++ cache->decl_id = DECL_UID (decl);
++ cache->loc_list = list;
++ *slot = cache;
++ }
++ }
+ if (list)
+ {
+ add_AT_location_description (die, attr, list);
+@@ -18738,7 +18807,7 @@
+ equate_decl_number_to_die (node, parm_die);
+ if (! DECL_ABSTRACT (node_or_origin))
+ add_location_or_const_value_attribute (parm_die, node_or_origin,
+- DW_AT_location);
++ node == NULL, DW_AT_location);
+
+ break;
+
+@@ -18923,6 +18992,7 @@
+ tree context;
+ int was_abstract;
+ htab_t old_decl_loc_table;
++ htab_t old_cached_dw_loc_list_table;
+
+ /* Make sure we have the actual abstract inline, not a clone. */
+ decl = DECL_ORIGIN (decl);
+@@ -18937,6 +19007,8 @@
+ get locations in abstract instantces. */
+ old_decl_loc_table = decl_loc_table;
+ decl_loc_table = NULL;
++ old_cached_dw_loc_list_table = cached_dw_loc_list_table;
++ cached_dw_loc_list_table = NULL;
+
+ /* Be sure we've emitted the in-class declaration DIE (if any) first, so
+ we don't get confused by DECL_ABSTRACT. */
+@@ -18961,6 +19033,7 @@
+
+ current_function_decl = save_fn;
+ decl_loc_table = old_decl_loc_table;
++ cached_dw_loc_list_table = old_cached_dw_loc_list_table;
+ pop_cfun ();
+ }
+
+@@ -19745,9 +19818,8 @@
+ && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
+ defer_location (decl_or_origin, var_die);
+ else
+- add_location_or_const_value_attribute (var_die,
+- decl_or_origin,
+- DW_AT_location);
++ add_location_or_const_value_attribute (var_die, decl_or_origin,
++ decl == NULL, DW_AT_location);
+ add_pubname (decl_or_origin, var_die);
+ }
+ else
+@@ -21534,6 +21606,7 @@
+ dwarf2out_decl (decl);
+
+ htab_empty (decl_loc_table);
++ htab_empty (cached_dw_loc_list_table);
+ }
+
+ /* Output a marker (i.e. a label) for the beginning of the generated code for
+@@ -22267,6 +22340,11 @@
+ decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
+ decl_loc_table_eq, NULL);
+
++ /* Allocate the cached_dw_loc_list_table. */
++ cached_dw_loc_list_table
++ = htab_create_ggc (10, cached_dw_loc_list_table_hash,
++ cached_dw_loc_list_table_eq, NULL);
++
+ /* Allocate the initial hunk of the decl_scope_table. */
+ decl_scope_table = VEC_alloc (tree, gc, 256);
+
+@@ -22907,30 +22985,53 @@
+ {
+ dw_die_ref c;
+ dw_attr_ref a;
+- dw_loc_list_ref *curr;
++ dw_loc_list_ref *curr, *start, loc;
+ unsigned ix;
+
+ FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
+ switch (AT_class (a))
+ {
+ case dw_val_class_loc_list:
+- curr = AT_loc_list_ptr (a);
+- while (*curr)
++ start = curr = AT_loc_list_ptr (a);
++ loc = *curr;
++ gcc_assert (loc);
++ /* The same list can be referenced more than once. See if we have
++ already recorded the result from a previous pass. */
++ if (loc->replaced)
++ *curr = loc->dw_loc_next;
++ else if (!loc->resolved_addr)
+ {
+- if (!resolve_addr_in_expr ((*curr)->expr))
++ /* As things stand, we do not expect or allow one die to
++ reference a suffix of another die's location list chain.
++ References must be identical or completely separate.
++ There is therefore no need to cache the result of this
++ pass on any list other than the first; doing so
++ would lead to unnecessary writes. */
++ while (*curr)
+ {
+- dw_loc_list_ref next = (*curr)->dw_loc_next;
+- if (next && (*curr)->ll_symbol)
++ gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
++ if (!resolve_addr_in_expr ((*curr)->expr))
+ {
+- gcc_assert (!next->ll_symbol);
+- next->ll_symbol = (*curr)->ll_symbol;
++ dw_loc_list_ref next = (*curr)->dw_loc_next;
++ if (next && (*curr)->ll_symbol)
++ {
++ gcc_assert (!next->ll_symbol);
++ next->ll_symbol = (*curr)->ll_symbol;
++ }
++ *curr = next;
+ }
+- *curr = next;
++ else
++ curr = &(*curr)->dw_loc_next;
+ }
++ if (loc == *start)
++ loc->resolved_addr = 1;
+ else
+- curr = &(*curr)->dw_loc_next;
++ {
++ loc->replaced = 1;
++ loc->dw_loc_next = *start;
++ }
+ }
+- if (!AT_loc_list (a))
++ if (!*start)
+ {
+ remove_AT (die, a->dw_attr);
+ ix--;
+@@ -23359,6 +23460,7 @@
+ add_location_or_const_value_attribute (
+ VEC_index (deferred_locations, deferred_locations_list, i)->die,
+ VEC_index (deferred_locations, deferred_locations_list, i)->variable,
++ false,
+ DW_AT_location);
+ }
+
+Index: gcc/ada/mlib-tgt-specific-darwin.adb
+===================================================================
+--- a/src/gcc/ada/mlib-tgt-specific-darwin.adb (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/ada/mlib-tgt-specific-darwin.adb (.../branches/gcc-4_6-branch)
+@@ -36,8 +36,6 @@
+
+ -- Non default subprograms
+
+- function Archive_Indexer_Options return String_List_Access;
+-
+ procedure Build_Dynamic_Library
+ (Ofiles : Argument_List;
+ Options : Argument_List;
+@@ -67,15 +65,6 @@
+ (1 => Flat_Namespace'Access,
+ 2 => Shared_Libgcc'Access);
+
+- -----------------------------
+- -- Archive_Indexer_Options --
+- -----------------------------
+-
+- function Archive_Indexer_Options return String_List_Access is
+- begin
+- return new String_List'(1 => new String'("-c"));
+- end Archive_Indexer_Options;
+-
+ ---------------------------
+ -- Build_Dynamic_Library --
+ ---------------------------
+@@ -180,7 +169,6 @@
+ end Is_Archive_Ext;
+
+ begin
+- Archive_Indexer_Options_Ptr := Archive_Indexer_Options'Access;
+ Build_Dynamic_Library_Ptr := Build_Dynamic_Library'Access;
+ DLL_Ext_Ptr := DLL_Ext'Access;
+ Dynamic_Option_Ptr := Dynamic_Option'Access;
+Index: gcc/ada/init.c
+===================================================================
+--- a/src/gcc/ada/init.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/ada/init.c (.../branches/gcc-4_6-branch)
+@@ -2216,12 +2216,33 @@
+ return 0;
+ }
+
++#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
++
++void
++__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED,
++ void *ucontext ATTRIBUTE_UNUSED)
++{
++#if defined (__x86_64__)
++ /* Work around radar #10302855/pr50678, where the unwinders (libunwind or
++ libgcc_s depending on the system revision) and the DWARF unwind data for
++ the sigtramp have different ideas about register numbering (causing rbx
++ and rdx to be transposed).. */
++ ucontext_t *uc = (ucontext_t *)ucontext ;
++ unsigned long t = uc->uc_mcontext->__ss.__rbx;
++
++ uc->uc_mcontext->__ss.__rbx = uc->uc_mcontext->__ss.__rdx;
++ uc->uc_mcontext->__ss.__rdx = t;
++#endif
++}
++
+ static void
+-__gnat_error_handler (int sig, siginfo_t *si, void *ucontext ATTRIBUTE_UNUSED)
++__gnat_error_handler (int sig, siginfo_t *si, void *ucontext)
+ {
+ struct Exception_Data *exception;
+ const char *msg;
+
++ __gnat_adjust_context_for_raise (sig, ucontext);
++
+ switch (sig)
+ {
+ case SIGSEGV:
+Index: gcc/ada/ChangeLog
+===================================================================
+--- a/src/gcc/ada/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/ada/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,42 @@
++2011-12-08 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR tree-optimization/51315
++ Backport from mainline
++ 2011-09-25 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc-interface/decl.c (gnat_to_gnu_entity) <object>: Do not promote
++ the alignment if this doesn't prevent BLKmode access to the object.
++
++2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
++
++ Backport from mainline r181474
++ PR target/50678
++ * init.c (__gnat_error_handler) [Darwin]: Move work-around to the
++ bug filed as radar #10302855 from __gnat_error_handler ...
++ ... to (__gnat_adjust_context_for_raise) [Darwin]: New.
++ (HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE) [Darwin]: Define.
++ (__gnat_error_handler) [Darwin]: Use __gnat_adjust_context_for_raise.
++
++2011-11-18 Tristan Gingold <gingold@adacore.com>
++ Iain Sandoe <iains@gcc.gnu.org>
++
++ PR target/49992
++ * mlib-tgt-specific-darwin.adb (Archive_Indexer_Options): Remove.
++ * gcc-interface/Makefile.in (darwin): Remove ranlib special-casing
++ for Darwin.
++
++2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
++
++ Backport from mainline r181319
++ * gcc-interface/Makefile.in (stamp-gnatlib-$(RTSDIR)): Don't link
++ s-oscons.ads.
++ (OSCONS_CPP, OSCONS_EXTRACT): New.
++ (./bldtools/oscons/xoscons): New Target.
++ ($(RTSDIR)/s-oscons.ads): New Target.
++ (gnatlib): Depend on $(RTSDIR)/s-oscons.ads.
++ * Make-generated.in: Remove machinery to generate xoscons and
++ ada/s-oscons.ads.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: gcc/ada/gcc-interface/Makefile.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Makefile.in (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/ada/gcc-interface/Makefile.in (.../branches/gcc-4_6-branch)
+@@ -2189,7 +2189,6 @@
+
+ EH_MECHANISM=-gcc
+ GNATLIB_SHARED = gnatlib-shared-darwin
+- RANLIB = ranlib -c
+ GMEM_LIB = gmemlib
+ LIBRARY_VERSION := $(LIB_VERSION)
+ soext = .dylib
+@@ -2447,21 +2446,52 @@
+ $(foreach PAIR,$(LIBGNAT_TARGET_PAIRS), \
+ $(LN_S) $(fsrcpfx)ada/$(word 2,$(subst <, ,$(PAIR))) \
+ $(RTSDIR)/$(word 1,$(subst <, ,$(PAIR)));)
+-# Copy generated target dependent sources
+- $(RM) $(RTSDIR)/s-oscons.ads
+- (cd $(RTSDIR); $(LN_S) ../s-oscons.ads s-oscons.ads)
++# Copy tsystem.h
++ $(CP) $(srcdir)/tsystem.h $(RTSDIR)
+ $(RM) ../stamp-gnatlib-$(RTSDIR)
+ touch ../stamp-gnatlib1-$(RTSDIR)
+
+ # GNULLI End #############################################################
+
++ifeq ($(strip $(filter-out alpha64 ia64 dec hp vms% openvms% alphavms%,$(subst -, ,$(host)))),)
++OSCONS_CPP=../../$(DECC) -E /comment=as_is -DNATIVE \
++ -DTARGET='""$(target)""' $(fsrcpfx)ada/s-oscons-tmplt.c
++
++OSCONS_EXTRACT=../../$(DECC) -DNATIVE \
++ -DTARGET='""$(target)""' $(fsrcpfx)ada/s-oscons-tmplt.c ; \
++ ld -o s-oscons-tmplt.exe s-oscons-tmplt.obj; \
++ ./s-oscons-tmplt.exe > s-oscons-tmplt.s
++
++else
++# GCC_FOR_TARGET has paths relative to the gcc directory, so we need to adjust
++# for running it from $(RTSDIR)
++OSCONS_CC=`echo "$(GCC_FOR_TARGET)" \
++ | sed -e 's^\./xgcc^../../xgcc^' -e 's^-B./^-B../../^'`
++OSCONS_CPP=$(OSCONS_CC) $(GNATLIBCFLAGS) -E -C \
++ -DTARGET=\"$(target)\" $(fsrcpfx)ada/s-oscons-tmplt.c > s-oscons-tmplt.i
++OSCONS_EXTRACT=$(OSCONS_CC) -S s-oscons-tmplt.i
++endif
++
++./bldtools/oscons/xoscons: xoscons.adb xutil.ads xutil.adb
++ -$(MKDIR) ./bldtools/oscons
++ $(RM) $(addprefix ./bldtools/oscons/,$(notdir $^))
++ $(CP) $^ ./bldtools/oscons
++ (cd ./bldtools/oscons ; gnatmake -q xoscons)
++
++$(RTSDIR)/s-oscons.ads: ../stamp-gnatlib1-$(RTSDIR) s-oscons-tmplt.c gsocket.h ./bldtools/oscons/xoscons
++ $(RM) $(RTSDIR)/s-oscons-tmplt.i $(RTSDIR)/s-oscons-tmplt.s
++ (cd $(RTSDIR) ; \
++ $(OSCONS_CPP) ; \
++ $(OSCONS_EXTRACT) ; \
++ ../bldtools/oscons/xoscons)
++
+ # Don't use semicolon separated shell commands that involve list expansions.
+ # The semicolon triggers a call to DCL on VMS and DCL can't handle command
+ # line lengths in excess of 256 characters.
+ # Example: cd $(RTSDIR); ar rc libfoo.a $(LONG_LIST_OF_OBJS)
+ # is guaranteed to overflow the buffer.
+
+-gnatlib: ../stamp-gnatlib1-$(RTSDIR) ../stamp-gnatlib2-$(RTSDIR)
++gnatlib: ../stamp-gnatlib1-$(RTSDIR) ../stamp-gnatlib2-$(RTSDIR) $(RTSDIR)/s-oscons.ads
+ $(MAKE) -C $(RTSDIR) \
+ CC="`echo \"$(GCC_FOR_TARGET)\" \
+ | sed -e 's,\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
+Index: gcc/ada/gcc-interface/decl.c
+===================================================================
+--- a/src/gcc/ada/gcc-interface/decl.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/ada/gcc-interface/decl.c (.../branches/gcc-4_6-branch)
+@@ -808,16 +808,30 @@
+ && No (Address_Clause (gnat_entity))))
+ && TREE_CODE (TYPE_SIZE (gnu_type)) == INTEGER_CST)
+ {
+- /* No point in jumping through all the hoops needed in order
++ unsigned int size_cap, align_cap;
++
++ /* No point in promoting the alignment if this doesn't prevent
++ BLKmode access to the object, in particular block copy, as
++ this will for example disable the NRV optimization for it.
++ No point in jumping through all the hoops needed in order
+ to support BIGGEST_ALIGNMENT if we don't really have to.
+ So we cap to the smallest alignment that corresponds to
+ a known efficient memory access pattern of the target. */
+- unsigned int align_cap = Is_Atomic (gnat_entity)
+- ? BIGGEST_ALIGNMENT
+- : get_mode_alignment (ptr_mode);
++ if (Is_Atomic (gnat_entity))
++ {
++ size_cap = UINT_MAX;
++ align_cap = BIGGEST_ALIGNMENT;
++ }
++ else
++ {
++ size_cap = MAX_FIXED_MODE_SIZE;
++ align_cap = get_mode_alignment (ptr_mode);
++ }
+
+ if (!host_integerp (TYPE_SIZE (gnu_type), 1)
+- || compare_tree_int (TYPE_SIZE (gnu_type), align_cap) >= 0)
++ || compare_tree_int (TYPE_SIZE (gnu_type), size_cap) > 0)
++ align = 0;
++ else if (compare_tree_int (TYPE_SIZE (gnu_type), align_cap) > 0)
+ align = align_cap;
+ else
+ align = ceil_alignment (tree_low_cst (TYPE_SIZE (gnu_type), 1));
+Index: gcc/ada/Make-generated.in
+===================================================================
+--- a/src/gcc/ada/Make-generated.in (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/ada/Make-generated.in (.../branches/gcc-4_6-branch)
+@@ -64,37 +64,6 @@
+ $(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/nmake_s
+ (cd $(ADA_GEN_SUBDIR)/bldtools/nmake_s; gnatmake -q xnmake ; ./xnmake -s ../../nmake.ads )
+
+-ifeq ($(strip $(filter-out alpha64 ia64 dec hp vms% openvms% alphavms%,$(subst -, ,$(host)))),)
+-OSCONS_CPP=../../../$(DECC) -E /comment=as_is -DNATIVE \
+- -DTARGET='""$(target)""' s-oscons-tmplt.c
+-
+-OSCONS_EXTRACT=../../../$(DECC) -DNATIVE \
+- -DTARGET='""$(target)""' s-oscons-tmplt.c ; \
+- ld -o s-oscons-tmplt.exe s-oscons-tmplt.obj; \
+- ./s-oscons-tmplt.exe > s-oscons-tmplt.s
+-
+-else
+-# GCC_FOR_TARGET has paths relative to the gcc directory, so we need to ajust
+-# for running it from $(ADA_GEN_SUBDIR)/bldtools/oscons
+-OSCONS_CC=`echo "$(GCC_FOR_TARGET)" \
+- | sed -e 's^\./xgcc^../../../xgcc^' -e 's^-B./^-B../../../^'`
+-OSCONS_CPP=$(OSCONS_CC) $(GNATLIBCFLAGS) -E -C \
+- -DTARGET=\"$(target)\" s-oscons-tmplt.c > s-oscons-tmplt.i
+-OSCONS_EXTRACT=$(OSCONS_CC) -S s-oscons-tmplt.i
+-endif
+-
+-$(ADA_GEN_SUBDIR)/s-oscons.ads : $(ADA_GEN_SUBDIR)/s-oscons-tmplt.c $(ADA_GEN_SUBDIR)/gsocket.h $(ADA_GEN_SUBDIR)/xoscons.adb $(ADA_GEN_SUBDIR)/xutil.ads $(ADA_GEN_SUBDIR)/xutil.adb
+- -$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/oscons
+- $(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/oscons/,$(notdir $^))
+- $(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/oscons
+- (cd $(ADA_GEN_SUBDIR)/bldtools/oscons ; gnatmake -q xoscons ; \
+- $(RM) s-oscons-tmplt.i s-oscons-tmplt.s ; \
+- $(OSCONS_CPP) ; \
+- $(OSCONS_EXTRACT) ; \
+- ./xoscons ; \
+- $(RM) ../../s-oscons.ads ; \
+- $(CP) s-oscons.ads s-oscons.h ../../)
+-
+ $(ADA_GEN_SUBDIR)/sdefault.adb: $(ADA_GEN_SUBDIR)/stamp-sdefault ; @true
+ $(ADA_GEN_SUBDIR)/stamp-sdefault : $(srcdir)/version.c Makefile
+ $(ECHO) "pragma Style_Checks (Off);" >tmp-sdefault.adb
+Index: gcc/lto-streamer-in.c
+===================================================================
+--- a/src/gcc/lto-streamer-in.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/lto-streamer-in.c (.../branches/gcc-4_6-branch)
+@@ -1366,9 +1366,9 @@
+ {
+ const struct lto_function_header *header;
+ struct data_in *data_in;
+- int32_t cfg_offset;
+- int32_t main_offset;
+- int32_t string_offset;
++ int cfg_offset;
++ int main_offset;
++ int string_offset;
+ struct lto_input_block ib_cfg;
+ struct lto_input_block ib_main;
+
+Index: gcc/c-decl.c
+===================================================================
+--- a/src/gcc/c-decl.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/c-decl.c (.../branches/gcc-4_6-branch)
+@@ -721,7 +721,7 @@
+
+ complete_array_type (&TREE_TYPE (decl), NULL_TREE, true);
+
+- layout_decl (decl, 0);
++ relayout_decl (decl);
+ }
+ }
+ }
+@@ -1200,7 +1200,7 @@
+ DECL_CHAIN (p) = BLOCK_VARS (block);
+ BLOCK_VARS (block) = p;
+ }
+- else if (VAR_OR_FUNCTION_DECL_P (p))
++ else if (VAR_OR_FUNCTION_DECL_P (p) && scope != file_scope)
+ {
+ /* For block local externs add a special
+ DECL_EXTERNAL decl for debug info generation. */
+@@ -4261,7 +4261,7 @@
+ if (DECL_INITIAL (decl))
+ TREE_TYPE (DECL_INITIAL (decl)) = type;
+
+- layout_decl (decl, 0);
++ relayout_decl (decl);
+ }
+
+ if (TREE_CODE (decl) == VAR_DECL)
+Index: gcc/fortran/trans-array.c
+===================================================================
+--- a/src/gcc/fortran/trans-array.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/fortran/trans-array.c (.../branches/gcc-4_6-branch)
+@@ -6772,8 +6772,17 @@
+ gfc_array_index_type, cond,
+ lbound, gfc_index_one_node);
+ }
+- else if (expr->expr_type == EXPR_VARIABLE)
++
++ if (expr->expr_type == EXPR_FUNCTION)
+ {
++ /* A conversion function, so use the argument. */
++ gcc_assert (expr->value.function.isym
++ && expr->value.function.isym->conversion);
++ expr = expr->value.function.actual->expr;
++ }
++
++ if (expr->expr_type == EXPR_VARIABLE)
++ {
+ tmp = TREE_TYPE (expr->symtree->n.sym->backend_decl);
+ for (ref = expr->ref; ref; ref = ref->next)
+ {
+@@ -6785,15 +6794,6 @@
+ }
+ return GFC_TYPE_ARRAY_LBOUND(tmp, dim);
+ }
+- else if (expr->expr_type == EXPR_FUNCTION)
+- {
+- /* A conversion function, so use the argument. */
+- expr = expr->value.function.actual->expr;
+- if (expr->expr_type != EXPR_VARIABLE)
+- return gfc_index_one_node;
+- desc = TREE_TYPE (expr->symtree->n.sym->backend_decl);
+- return get_std_lbound (expr, desc, dim, assumed_size);
+- }
+
+ return gfc_index_one_node;
+ }
+Index: gcc/fortran/ChangeLog
+===================================================================
+--- a/src/gcc/fortran/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,55 @@
++2011-12-11 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/50923
++ * trans-decl.c (generate_local_decl): Set TREE_NO_WARNING only
++ if the front end has printed a warning.
++ (gfc_generate_function_code): Fix unset-result warning.
++
++2011-12-11 Thomas Koenig <tkoenig@gcc.gnu.org>
++
++ PR fortran/51338
++ Backport from trunk
++ * dependency.c (are_identical_variables): Handle case where
++ end fields of substring references are NULL.
++
++2011-12-08 Toon Moene <toon@moene.org>
++
++ PR fortran/51310
++ * invoke.texi: Itemize the cases for which
++ -finit-<type>=<constant> doesn't work.
++
++2011-12-08 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/51448
++ * fortran/trans-array.c (get_std_lbound): Fix handling of
++ conversion functions.
++
++2011-12-06 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/51435
++ * expr.c (gfc_has_default_initializer): Fix handling of
++ DT with initialized pointer components.
++
++2011-12-03 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/50684
++ * check.c (variable_check): Fix intent(in) check.
++
++2011-11-25 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/50408
++ * trans-decl.c (gfc_get_module_backend_decl): Also copy
++ ts.u.derived from the gsym if the ts.type is BT_CLASS.
++ (gfc_get_extern_function_decl): Copy also the backend_decl
++ for the symbol's ts.u.{derived,cl} from the gsym.
++ * trans-types.c (gfc_copy_dt_decls_ifequal): Directly
++ return if "from" and "to" are the same.
++
++2011-11-24 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/51218
++ * gfortran.dg/implicit_pure_1.f90: New.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: gcc/fortran/expr.c
+===================================================================
+--- a/src/gcc/fortran/expr.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/fortran/expr.c (.../branches/gcc-4_6-branch)
+@@ -3679,6 +3679,8 @@
+ if (!c->attr.pointer
+ && gfc_has_default_initializer (c->ts.u.derived))
+ return true;
++ if (c->attr.pointer && c->initializer)
++ return true;
+ }
+ else
+ {
+@@ -3689,6 +3691,7 @@
+ return false;
+ }
+
++
+ /* Get an expression for a default initializer. */
+
+ gfc_expr *
+Index: gcc/fortran/trans-types.c
+===================================================================
+--- a/src/gcc/fortran/trans-types.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/fortran/trans-types.c (.../branches/gcc-4_6-branch)
+@@ -2092,6 +2092,9 @@
+ gfc_component *to_cm;
+ gfc_component *from_cm;
+
++ if (from == to)
++ return 1;
++
+ if (from->backend_decl == NULL
+ || !gfc_compare_derived_types (from, to))
+ return 0;
+Index: gcc/fortran/resolve.c
+===================================================================
+--- a/src/gcc/fortran/resolve.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/fortran/resolve.c (.../branches/gcc-4_6-branch)
+@@ -3132,11 +3132,11 @@
+ "procedure within a PURE procedure", name, &expr->where);
+ t = FAILURE;
+ }
++
++ if (gfc_implicit_pure (NULL))
++ gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ }
+
+- if (!pure_function (expr, &name) && name && gfc_implicit_pure (NULL))
+- gfc_current_ns->proc_name->attr.implicit_pure = 0;
+-
+ /* Functions without the RECURSIVE attribution are not allowed to
+ * call themselves. */
+ if (expr->value.function.esym && !expr->value.function.esym->attr.recursive)
+@@ -3195,6 +3195,9 @@
+ else if (gfc_pure (NULL))
+ gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name,
+ &c->loc);
++
++ if (gfc_implicit_pure (NULL))
++ gfc_current_ns->proc_name->attr.implicit_pure = 0;
+ }
+
+
+Index: gcc/fortran/trans-decl.c
+===================================================================
+--- a/src/gcc/fortran/trans-decl.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/fortran/trans-decl.c (.../branches/gcc-4_6-branch)
+@@ -677,7 +677,7 @@
+ }
+ else if (s->backend_decl)
+ {
+- if (sym->ts.type == BT_DERIVED)
++ if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
+ gfc_copy_dt_decls_ifequal (s->ts.u.derived, sym->ts.u.derived,
+ true);
+ else if (sym->ts.type == BT_CHARACTER)
+@@ -1602,6 +1602,11 @@
+ gfc_find_symbol (sym->name, gsym->ns, 0, &s);
+ if (s && s->backend_decl)
+ {
++ if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
++ gfc_copy_dt_decls_ifequal (s->ts.u.derived, sym->ts.u.derived,
++ true);
++ else if (sym->ts.type == BT_CHARACTER)
++ sym->ts.u.cl->backend_decl = s->ts.u.cl->backend_decl;
+ sym->backend_decl = s->backend_decl;
+ return sym->backend_decl;
+ }
+@@ -4179,10 +4184,16 @@
+ "declared INTENT(OUT) but was not set and "
+ "does not have a default initializer",
+ sym->name, &sym->declared_at);
++ if (sym->backend_decl != NULL_TREE)
++ TREE_NO_WARNING(sym->backend_decl) = 1;
+ }
+ else if (gfc_option.warn_unused_dummy_argument)
+- gfc_warning ("Unused dummy argument '%s' at %L", sym->name,
++ {
++ gfc_warning ("Unused dummy argument '%s' at %L", sym->name,
+ &sym->declared_at);
++ if (sym->backend_decl != NULL_TREE)
++ TREE_NO_WARNING(sym->backend_decl) = 1;
++ }
+ }
+
+ /* Warn for unused variables, but not if they're inside a common
+@@ -4227,11 +4238,6 @@
+ mark the symbol now, as well as in traverse_ns, to prevent
+ getting stuck in a circular dependency. */
+ sym->mark = 1;
+-
+- /* We do not want the middle-end to warn about unused parameters
+- as this was already done above. */
+- if (sym->attr.dummy && sym->backend_decl != NULL_TREE)
+- TREE_NO_WARNING(sym->backend_decl) = 1;
+ }
+ else if (sym->attr.flavor == FL_PARAMETER)
+ {
+@@ -4846,11 +4852,11 @@
+ if (result == NULL_TREE)
+ {
+ /* TODO: move to the appropriate place in resolve.c. */
+- if (warn_return_type && !sym->attr.referenced && sym == sym->result)
++ if (warn_return_type && sym == sym->result)
+ gfc_warning ("Return value of function '%s' at %L not set",
+ sym->name, &sym->declared_at);
+-
+- TREE_NO_WARNING(sym->backend_decl) = 1;
++ if (warn_return_type)
++ TREE_NO_WARNING(sym->backend_decl) = 1;
+ }
+ else
+ gfc_add_expr_to_block (&body, gfc_generate_return ());
+Index: gcc/fortran/check.c
+===================================================================
+--- a/src/gcc/fortran/check.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/fortran/check.c (.../branches/gcc-4_6-branch)
+@@ -485,10 +485,31 @@
+ && (gfc_current_intrinsic_arg[n]->intent == INTENT_OUT
+ || gfc_current_intrinsic_arg[n]->intent == INTENT_INOUT))
+ {
+- gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
+- gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
+- &e->where);
+- return FAILURE;
++ gfc_ref *ref;
++ bool pointer = e->symtree->n.sym->ts.type == BT_CLASS
++ && CLASS_DATA (e->symtree->n.sym)
++ ? CLASS_DATA (e->symtree->n.sym)->attr.class_pointer
++ : e->symtree->n.sym->attr.pointer;
++
++ for (ref = e->ref; ref; ref = ref->next)
++ {
++ if (pointer && ref->type == REF_COMPONENT)
++ break;
++ if (ref->type == REF_COMPONENT
++ && ((ref->u.c.component->ts.type == BT_CLASS
++ && CLASS_DATA (ref->u.c.component)->attr.class_pointer)
++ || (ref->u.c.component->ts.type != BT_CLASS
++ && ref->u.c.component->attr.pointer)))
++ break;
++ }
++
++ if (!ref)
++ {
++ gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be "
++ "INTENT(IN)", gfc_current_intrinsic_arg[n]->name,
++ gfc_current_intrinsic, &e->where);
++ return FAILURE;
++ }
+ }
+
+ if (e->expr_type == EXPR_VARIABLE
+Index: gcc/fortran/dependency.c
+===================================================================
+--- a/src/gcc/fortran/dependency.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/fortran/dependency.c (.../branches/gcc-4_6-branch)
+@@ -163,9 +163,19 @@
+ break;
+
+ case REF_SUBSTRING:
+- if (gfc_dep_compare_expr (r1->u.ss.start, r2->u.ss.start) != 0
+- || gfc_dep_compare_expr (r1->u.ss.end, r2->u.ss.end) != 0)
++ if (gfc_dep_compare_expr (r1->u.ss.start, r2->u.ss.start) != 0)
+ return false;
++
++ /* If both are NULL, the end length compares equal, because we
++ are looking at the same variable. This can only happen for
++ assumed- or deferred-length character arguments. */
++
++ if (r1->u.ss.end == NULL && r2->u.ss.end == NULL)
++ break;
++
++ if (gfc_dep_compare_expr (r1->u.ss.end, r2->u.ss.end) != 0)
++ return false;
++
+ break;
+
+ default:
+Index: gcc/regmove.c
+===================================================================
+--- a/src/gcc/regmove.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/regmove.c (.../branches/gcc-4_6-branch)
+@@ -860,7 +860,7 @@
+ if (REG_N_CALLS_CROSSED (REGNO (src)) == 0)
+ break;
+
+- if (call_used_regs [REGNO (dst)]
++ if ((HARD_REGISTER_P (dst) && call_used_regs [REGNO (dst)])
+ || find_reg_fusage (p, CLOBBER, dst))
+ break;
+ }
+Index: gcc/configure.ac
+===================================================================
+--- a/src/gcc/configure.ac (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/configure.ac (.../branches/gcc-4_6-branch)
+@@ -807,17 +807,7 @@
+ gcc_AC_PROG_LN_S
+ ACX_PROG_LN($LN_S)
+ AC_PROG_RANLIB
+-case "${host}" in
+-*-*-darwin*)
+- # By default, the Darwin ranlib will not treat common symbols as
+- # definitions when building the archive table of contents. Other
+- # ranlibs do that; pass an option to the Darwin ranlib that makes
+- # it behave similarly.
+- ranlib_flags="-c"
+- ;;
+-*)
+- ranlib_flags=""
+-esac
++ranlib_flags=""
+ AC_SUBST(ranlib_flags)
+
+ gcc_AC_PROG_INSTALL
+Index: gcc/df.h
+===================================================================
+--- a/src/gcc/df.h (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/df.h (.../branches/gcc-4_6-branch)
+@@ -53,7 +53,7 @@
+ #define DF_RD 3 /* Reaching Defs. */
+ #define DF_CHAIN 4 /* Def-Use and/or Use-Def Chains. */
+ #define DF_WORD_LR 5 /* Subreg tracking lr. */
+-#define DF_NOTE 6 /* REG_DEF and REG_UNUSED notes. */
++#define DF_NOTE 6 /* REG_DEAD and REG_UNUSED notes. */
+ #define DF_MD 7 /* Multiple Definitions. */
+
+ #define DF_LAST_PROBLEM_PLUS1 (DF_MD + 1)
+Index: gcc/lto-section-in.c
+===================================================================
+--- a/src/gcc/lto-section-in.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/lto-section-in.c (.../branches/gcc-4_6-branch)
+@@ -296,7 +296,7 @@
+ = (const struct lto_simple_header *) data;
+
+ struct lto_input_block* ib_main;
+- int32_t main_offset = sizeof (struct lto_simple_header);
++ int main_offset = sizeof (struct lto_simple_header);
+
+ if (!data)
+ return NULL;
+Index: gcc/tree-vect-data-refs.c
+===================================================================
+--- a/src/gcc/tree-vect-data-refs.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/tree-vect-data-refs.c (.../branches/gcc-4_6-branch)
+@@ -2631,6 +2631,16 @@
+ return false;
+ }
+
++ if (is_gimple_call (stmt))
++ {
++ if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
++ {
++ fprintf (vect_dump, "not vectorized: dr in a call ");
++ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
++ }
++ return false;
++ }
++
+ /* Update DR field in stmt_vec_info struct. */
+
+ /* If the dataref is in an inner-loop of the loop that is considered for
+Index: gcc/c-typeck.c
+===================================================================
+--- a/src/gcc/c-typeck.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/c-typeck.c (.../branches/gcc-4_6-branch)
+@@ -3802,11 +3802,7 @@
+ if (val && TREE_CODE (val) == INDIRECT_REF
+ && TREE_CONSTANT (TREE_OPERAND (val, 0)))
+ {
+- tree op0 = fold_convert_loc (location, sizetype,
+- fold_offsetof (arg, val)), op1;
+-
+- op1 = fold_convert_loc (location, argtype, TREE_OPERAND (val, 0));
+- ret = fold_build2_loc (location, POINTER_PLUS_EXPR, argtype, op1, op0);
++ ret = fold_convert_loc (location, argtype, fold_offsetof_1 (arg));
+ goto return_build_unary_op;
+ }
+
+Index: gcc/calls.c
+===================================================================
+--- a/src/gcc/calls.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/calls.c (.../branches/gcc-4_6-branch)
+@@ -1548,6 +1548,131 @@
+ return funexp;
+ }
+
++/* Internal state for internal_arg_pointer_based_exp and its helpers. */
++static struct
++{
++ /* Last insn that has been scanned by internal_arg_pointer_based_exp_scan,
++ or NULL_RTX if none has been scanned yet. */
++ rtx scan_start;
++ /* Vector indexed by REGNO - FIRST_PSEUDO_REGISTER, recording if a pseudo is
++ based on crtl->args.internal_arg_pointer. The element is NULL_RTX if the
++ pseudo isn't based on it, a CONST_INT offset if the pseudo is based on it
++ with fixed offset, or PC if this is with variable or unknown offset. */
++ VEC(rtx, heap) *cache;
++} internal_arg_pointer_exp_state;
++
++static rtx internal_arg_pointer_based_exp (rtx, bool);
++
++/* Helper function for internal_arg_pointer_based_exp. Scan insns in
++ the tail call sequence, starting with first insn that hasn't been
++ scanned yet, and note for each pseudo on the LHS whether it is based
++ on crtl->args.internal_arg_pointer or not, and what offset from that
++ that pointer it has. */
++
++static void
++internal_arg_pointer_based_exp_scan (void)
++{
++ rtx insn, scan_start = internal_arg_pointer_exp_state.scan_start;
++
++ if (scan_start == NULL_RTX)
++ insn = get_insns ();
++ else
++ insn = NEXT_INSN (scan_start);
++
++ while (insn)
++ {
++ rtx set = single_set (insn);
++ if (set && REG_P (SET_DEST (set)) && !HARD_REGISTER_P (SET_DEST (set)))
++ {
++ rtx val = NULL_RTX;
++ unsigned int idx = REGNO (SET_DEST (set)) - FIRST_PSEUDO_REGISTER;
++ /* Punt on pseudos set multiple times. */
++ if (idx < VEC_length (rtx, internal_arg_pointer_exp_state.cache)
++ && (VEC_index (rtx, internal_arg_pointer_exp_state.cache, idx)
++ != NULL_RTX))
++ val = pc_rtx;
++ else
++ val = internal_arg_pointer_based_exp (SET_SRC (set), false);
++ if (val != NULL_RTX)
++ {
++ if (idx
++ >= VEC_length (rtx, internal_arg_pointer_exp_state.cache))
++ VEC_safe_grow_cleared (rtx, heap,
++ internal_arg_pointer_exp_state.cache,
++ idx + 1);
++ VEC_replace (rtx, internal_arg_pointer_exp_state.cache,
++ idx, val);
++ }
++ }
++ if (NEXT_INSN (insn) == NULL_RTX)
++ scan_start = insn;
++ insn = NEXT_INSN (insn);
++ }
++
++ internal_arg_pointer_exp_state.scan_start = scan_start;
++}
++
++/* Helper function for internal_arg_pointer_based_exp, called through
++ for_each_rtx. Return 1 if *LOC is a register based on
++ crtl->args.internal_arg_pointer. Return -1 if *LOC is not based on it
++ and the subexpressions need not be examined. Otherwise return 0. */
++
++static int
++internal_arg_pointer_based_exp_1 (rtx *loc, void *data ATTRIBUTE_UNUSED)
++{
++ if (REG_P (*loc) && internal_arg_pointer_based_exp (*loc, false) != NULL_RTX)
++ return 1;
++ if (MEM_P (*loc))
++ return -1;
++ return 0;
++}
++
++/* Compute whether RTL is based on crtl->args.internal_arg_pointer. Return
++ NULL_RTX if RTL isn't based on it, a CONST_INT offset if RTL is based on
++ it with fixed offset, or PC if this is with variable or unknown offset.
++ TOPLEVEL is true if the function is invoked at the topmost level. */
++
++static rtx
++internal_arg_pointer_based_exp (rtx rtl, bool toplevel)
++{
++ if (CONSTANT_P (rtl))
++ return NULL_RTX;
++
++ if (rtl == crtl->args.internal_arg_pointer)
++ return const0_rtx;
++
++ if (REG_P (rtl) && HARD_REGISTER_P (rtl))
++ return NULL_RTX;
++
++ if (GET_CODE (rtl) == PLUS && CONST_INT_P (XEXP (rtl, 1)))
++ {
++ rtx val = internal_arg_pointer_based_exp (XEXP (rtl, 0), toplevel);
++ if (val == NULL_RTX || val == pc_rtx)
++ return val;
++ return plus_constant (val, INTVAL (XEXP (rtl, 1)));
++ }
++
++ /* When called at the topmost level, scan pseudo assignments in between the
++ last scanned instruction in the tail call sequence and the latest insn
++ in that sequence. */
++ if (toplevel)
++ internal_arg_pointer_based_exp_scan ();
++
++ if (REG_P (rtl))
++ {
++ unsigned int idx = REGNO (rtl) - FIRST_PSEUDO_REGISTER;
++ if (idx < VEC_length (rtx, internal_arg_pointer_exp_state.cache))
++ return VEC_index (rtx, internal_arg_pointer_exp_state.cache, idx);
++
++ return NULL_RTX;
++ }
++
++ if (for_each_rtx (&rtl, internal_arg_pointer_based_exp_1, NULL))
++ return pc_rtx;
++
++ return NULL_RTX;
++}
++
+ /* Return true if and only if SIZE storage units (usually bytes)
+ starting from address ADDR overlap with already clobbered argument
+ area. This function is used to determine if we should give up a
+@@ -1557,20 +1682,17 @@
+ mem_overlaps_already_clobbered_arg_p (rtx addr, unsigned HOST_WIDE_INT size)
+ {
+ HOST_WIDE_INT i;
++ rtx val;
+
+- if (addr == crtl->args.internal_arg_pointer)
+- i = 0;
+- else if (GET_CODE (addr) == PLUS
+- && XEXP (addr, 0) == crtl->args.internal_arg_pointer
+- && CONST_INT_P (XEXP (addr, 1)))
+- i = INTVAL (XEXP (addr, 1));
+- /* Return true for arg pointer based indexed addressing. */
+- else if (GET_CODE (addr) == PLUS
+- && (XEXP (addr, 0) == crtl->args.internal_arg_pointer
+- || XEXP (addr, 1) == crtl->args.internal_arg_pointer))
++ if (sbitmap_empty_p (stored_args_map))
++ return false;
++ val = internal_arg_pointer_based_exp (addr, true);
++ if (val == NULL_RTX)
++ return false;
++ else if (val == pc_rtx)
+ return true;
+ else
+- return false;
++ i = INTVAL (val);
+
+ #ifdef ARGS_GROW_DOWNWARD
+ i = -i - size;
+@@ -3175,6 +3297,8 @@
+ }
+
+ sbitmap_free (stored_args_map);
++ internal_arg_pointer_exp_state.scan_start = NULL_RTX;
++ VEC_free (rtx, heap, internal_arg_pointer_exp_state.cache);
+ }
+ else
+ {
+Index: gcc/cfgcleanup.c
+===================================================================
+--- a/src/gcc/cfgcleanup.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/cfgcleanup.c (.../branches/gcc-4_6-branch)
+@@ -1969,7 +1969,14 @@
+
+ cond = get_condition (jump, &move_before, true, false);
+ if (cond == NULL_RTX)
+- move_before = jump;
++ {
++#ifdef HAVE_cc0
++ if (reg_mentioned_p (cc0_rtx, jump))
++ move_before = prev_nonnote_nondebug_insn (jump);
++ else
++#endif
++ move_before = jump;
++ }
+
+ for (ix = 0; ix < nedges; ix++)
+ if (EDGE_SUCC (bb, ix)->dest == EXIT_BLOCK_PTR)
+@@ -2131,7 +2138,14 @@
+ jump = BB_END (final_dest_bb);
+ cond = get_condition (jump, &move_before, true, false);
+ if (cond == NULL_RTX)
+- move_before = jump;
++ {
++#ifdef HAVE_cc0
++ if (reg_mentioned_p (cc0_rtx, jump))
++ move_before = prev_nonnote_nondebug_insn (jump);
++ else
++#endif
++ move_before = jump;
++ }
+ }
+
+ do
+Index: gcc/tree-sra.c
+===================================================================
+--- a/src/gcc/tree-sra.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/tree-sra.c (.../branches/gcc-4_6-branch)
+@@ -1020,26 +1020,28 @@
+ return false;
+ }
+
+-/* Return true iff type of EXP is not sufficiently aligned. */
++/* Return true if EXP is a memory reference less aligned than ALIGN. This is
++ invoked only on strict-alignment targets. */
+
+ static bool
+-tree_non_mode_aligned_mem_p (tree exp)
++tree_non_aligned_mem_p (tree exp, unsigned int align)
+ {
+- enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
+- unsigned int align;
++ unsigned int exp_align;
+
+ if (TREE_CODE (exp) == VIEW_CONVERT_EXPR)
+ exp = TREE_OPERAND (exp, 0);
+
+- if (TREE_CODE (exp) == SSA_NAME
+- || TREE_CODE (exp) == MEM_REF
+- || mode == BLKmode
+- || is_gimple_min_invariant (exp)
+- || !STRICT_ALIGNMENT)
++ if (TREE_CODE (exp) == SSA_NAME || is_gimple_min_invariant (exp))
+ return false;
+
+- align = get_object_alignment (exp, BIGGEST_ALIGNMENT);
+- if (GET_MODE_ALIGNMENT (mode) > align)
++ /* get_object_alignment will fall back to BITS_PER_UNIT if it cannot
++ compute an explicit alignment. Pretend that dereferenced pointers
++ are always aligned on strict-alignment targets. */
++ exp_align = get_object_alignment (exp, BIGGEST_ALIGNMENT);
++ if (TREE_CODE (exp) == MEM_REF || TREE_CODE (exp) == TARGET_MEM_REF)
++ exp_align = MAX (TYPE_ALIGN (TREE_TYPE (exp)), exp_align);
++
++ if (exp_align < align)
+ return true;
+
+ return false;
+@@ -1071,7 +1073,11 @@
+ if (lacc)
+ {
+ lacc->grp_assignment_write = 1;
+- lacc->grp_unscalarizable_region |= tree_non_mode_aligned_mem_p (rhs);
++ if (STRICT_ALIGNMENT
++ && tree_non_aligned_mem_p (rhs,
++ get_object_alignment (lhs,
++ BIGGEST_ALIGNMENT)))
++ lacc->grp_unscalarizable_region = 1;
+ }
+
+ if (racc)
+@@ -1080,7 +1086,11 @@
+ if (should_scalarize_away_bitmap && !gimple_has_volatile_ops (stmt)
+ && !is_gimple_reg_type (racc->type))
+ bitmap_set_bit (should_scalarize_away_bitmap, DECL_UID (racc->base));
+- racc->grp_unscalarizable_region |= tree_non_mode_aligned_mem_p (lhs);
++ if (STRICT_ALIGNMENT
++ && tree_non_aligned_mem_p (lhs,
++ get_object_alignment (rhs,
++ BIGGEST_ALIGNMENT)))
++ racc->grp_unscalarizable_region = 1;
+ }
+
+ if (lacc && racc
+@@ -1435,29 +1445,61 @@
+ return fold_build2_loc (loc, MEM_REF, exp_type, base, off);
+ }
+
++DEF_VEC_ALLOC_P_STACK (tree);
++#define VEC_tree_stack_alloc(alloc) VEC_stack_alloc (tree, alloc)
++
+ /* Construct a memory reference to a part of an aggregate BASE at the given
+- OFFSET and of the same type as MODEL. In case this is a reference to a
+- component, the function will replicate the last COMPONENT_REF of model's
+- expr to access it. GSI and INSERT_AFTER have the same meaning as in
+- build_ref_for_offset. */
++ OFFSET and of the type of MODEL. In case this is a chain of references
++ to component, the function will replicate the chain of COMPONENT_REFs of
++ the expression of MODEL to access it. GSI and INSERT_AFTER have the same
++ meaning as in build_ref_for_offset. */
+
+ static tree
+ build_ref_for_model (location_t loc, tree base, HOST_WIDE_INT offset,
+ struct access *model, gimple_stmt_iterator *gsi,
+ bool insert_after)
+ {
++ tree type = model->type, t;
++ VEC(tree,stack) *cr_stack = NULL;
++
+ if (TREE_CODE (model->expr) == COMPONENT_REF)
+ {
+- tree t, exp_type, fld = TREE_OPERAND (model->expr, 1);
+- offset -= int_bit_position (fld);
+- exp_type = TREE_TYPE (TREE_OPERAND (model->expr, 0));
+- t = build_ref_for_offset (loc, base, offset, exp_type, gsi, insert_after);
+- return fold_build3_loc (loc, COMPONENT_REF, TREE_TYPE (fld), t, fld,
+- NULL_TREE);
++ tree expr = model->expr;
++
++ /* Create a stack of the COMPONENT_REFs so later we can walk them in
++ order from inner to outer. */
++ cr_stack = VEC_alloc (tree, stack, 6);
++
++ do {
++ tree field = TREE_OPERAND (expr, 1);
++ offset -= int_bit_position (field);
++
++ VEC_safe_push (tree, stack, cr_stack, expr);
++
++ expr = TREE_OPERAND (expr, 0);
++ type = TREE_TYPE (expr);
++ } while (TREE_CODE (expr) == COMPONENT_REF);
+ }
+- else
+- return build_ref_for_offset (loc, base, offset, model->type,
+- gsi, insert_after);
++
++ t = build_ref_for_offset (loc, base, offset, type, gsi, insert_after);
++
++ if (TREE_CODE (model->expr) == COMPONENT_REF)
++ {
++ unsigned i;
++ tree expr;
++
++ /* Now replicate the chain of COMPONENT_REFs from inner to outer. */
++ FOR_EACH_VEC_ELT_REVERSE (tree, cr_stack, i, expr)
++ {
++ tree field = TREE_OPERAND (expr, 1);
++ t = fold_build3_loc (loc, COMPONENT_REF, TREE_TYPE (field), t, field,
++ NULL_TREE);
++ }
++
++ VEC_free (tree, stack, cr_stack);
++ }
++
++ return t;
+ }
+
+ /* Construct a memory reference consisting of component_refs and array_refs to
+@@ -2594,6 +2636,10 @@
+ rhs = get_access_replacement (racc);
+ if (!useless_type_conversion_p (lacc->type, racc->type))
+ rhs = fold_build1_loc (loc, VIEW_CONVERT_EXPR, lacc->type, rhs);
++
++ if (racc->grp_partial_lhs && lacc->grp_partial_lhs)
++ rhs = force_gimple_operand_gsi (old_gsi, rhs, true, NULL_TREE,
++ true, GSI_SAME_STMT);
+ }
+ else
+ {
+@@ -3604,7 +3650,8 @@
+ || gimple_code (access->stmt) == GIMPLE_ASM))
+ return true;
+
+- if (tree_non_mode_aligned_mem_p (access->expr))
++ if (STRICT_ALIGNMENT
++ && tree_non_aligned_mem_p (access->expr, TYPE_ALIGN (access->type)))
+ return true;
+
+ return false;
+Index: gcc/lto/lto.c
+===================================================================
+--- a/src/gcc/lto/lto.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/lto/lto.c (.../branches/gcc-4_6-branch)
+@@ -198,7 +198,7 @@
+ uint32_t ix;
+ tree decl;
+ uint32_t i, j;
+-
++
+ ix = *data++;
+ decl = lto_streamer_cache_get (data_in->reader_cache, (int) ix);
+ if (TREE_CODE (decl) != FUNCTION_DECL)
+@@ -241,9 +241,9 @@
+ VEC(ld_plugin_symbol_resolution_t,heap) *resolutions)
+ {
+ const struct lto_decl_header *header = (const struct lto_decl_header *) data;
+- const int32_t decl_offset = sizeof (struct lto_decl_header);
+- const int32_t main_offset = decl_offset + header->decl_state_size;
+- const int32_t string_offset = main_offset + header->main_size;
++ const int decl_offset = sizeof (struct lto_decl_header);
++ const int main_offset = decl_offset + header->decl_state_size;
++ const int string_offset = main_offset + header->main_size;
+ struct lto_input_block ib_main;
+ struct data_in *data_in;
+ unsigned int i;
+@@ -291,17 +291,20 @@
+
+ if (data_ptr != data_end)
+ internal_error ("bytecode stream: garbage at the end of symbols section");
+-
++
+ /* Set the current decl state to be the global state. */
+ decl_data->current_decl_state = decl_data->global_decl_state;
+
+ lto_data_in_delete (data_in);
+ }
+
+-/* strtoll is not portable. */
+-int64_t
+-lto_parse_hex (const char *p) {
+- uint64_t ret = 0;
++/* Custom version of strtoll, which is not portable. */
++
++static HOST_WIDEST_INT
++lto_parse_hex (const char *p)
++{
++ HOST_WIDEST_INT ret = 0;
++
+ for (; *p != '\0'; ++p)
+ {
+ char c = *p;
+@@ -317,6 +320,7 @@
+ internal_error ("could not parse hex number");
+ ret |= part;
+ }
++
+ return ret;
+ }
+
+@@ -352,7 +356,7 @@
+ {
+ int t;
+ char offset_p[17];
+- int64_t offset;
++ HOST_WIDEST_INT offset;
+ t = fscanf (resolution, "@0x%16s", offset_p);
+ if (t != 1)
+ internal_error ("could not parse file offset");
+Index: gcc/lto/lto.h
+===================================================================
+--- a/src/gcc/lto/lto.h (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/lto/lto.h (.../branches/gcc-4_6-branch)
+@@ -60,6 +60,4 @@
+ size_t len;
+ };
+
+-int64_t lto_parse_hex (const char *p);
+-
+ #endif /* LTO_H */
+Index: gcc/lto/ChangeLog
+===================================================================
+--- a/src/gcc/lto/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/lto/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,10 @@
++2011-12-13 Eric Botcazou <ebotcazou@adacore.com>
++
++ * lto.h (lto_parse_hex): Delete.
++ * lto.c (lto_read_decls): Use 'int' for offsets.
++ (lto_parse_hex): Make static and return proper 64-bit host type.
++ (lto_resolution_read): Use proper 64-bit host type.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: gcc/ipa-prop.c
+===================================================================
+--- a/src/gcc/ipa-prop.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/ipa-prop.c (.../branches/gcc-4_6-branch)
+@@ -2868,9 +2868,9 @@
+ {
+ const struct lto_function_header *header =
+ (const struct lto_function_header *) data;
+- const int32_t cfg_offset = sizeof (struct lto_function_header);
+- const int32_t main_offset = cfg_offset + header->cfg_size;
+- const int32_t string_offset = main_offset + header->main_size;
++ const int cfg_offset = sizeof (struct lto_function_header);
++ const int main_offset = cfg_offset + header->cfg_size;
++ const int string_offset = main_offset + header->main_size;
+ struct data_in *data_in;
+ struct lto_input_block ib_main;
+ unsigned int i;
+Index: gcc/po/ChangeLog
+===================================================================
+--- a/src/gcc/po/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/po/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,7 @@
++2011-10-30 Joseph Myers <joseph@codesourcery.com>
++
++ * ja.po: Update.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: gcc/po/ja.po
+===================================================================
+--- a/src/gcc/po/ja.po (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/po/ja.po (.../branches/gcc-4_6-branch)
+@@ -20,7 +20,7 @@
+ "Project-Id-Version: gcc 4.6.1\n"
+ "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+ "POT-Creation-Date: 2011-06-21 10:27+0000\n"
+-"PO-Revision-Date: 2011-10-25 22:36+0900\n"
++"PO-Revision-Date: 2011-10-30 18:48+0900\n"
+ "Last-Translator: Yasuaki Taniguchi <yasuakit@gmail.com>\n"
+ "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
+ "Language: ja\n"
+@@ -834,12 +834,12 @@
+ #: gcov.c:420
+ #, c-format
+ msgid " -a, --all-blocks Show information for every basic block\n"
+-msgstr ""
++msgstr " -a, --all-blocks å„基本ブロックã«é–¢ã™ã‚‹æƒ…報を表示ã™ã‚‹\n"
+
+ #: gcov.c:421
+ #, c-format
+ msgid " -b, --branch-probabilities Include branch probabilities in output\n"
+-msgstr ""
++msgstr " -b, --branch-probabilities 出力ã«åˆ†å²å¯èƒ½æ€§æƒ…報をå«ã‚ã‚‹\n"
+
+ #: gcov.c:422
+ #, c-format
+@@ -847,6 +847,8 @@
+ " -c, --branch-counts Given counts of branches taken\n"
+ " rather than percentages\n"
+ msgstr ""
++" -c, --branch-counts 分å²ã«é–¢ã™ã‚‹ç™¾åˆ†çއã§ã¯ç„¡ã行ã‚れãŸ\n"
++" 回数をå–å¾—ã™ã‚‹\n"
+
+ #: gcov.c:424
+ #, c-format
+@@ -859,21 +861,23 @@
+ " -l, --long-file-names Use long output file names for included\n"
+ " source files\n"
+ msgstr ""
++" -l, --long-file-names インクルードã•れãŸã‚½ãƒ¼ã‚¹ãƒ•ァイルã«é–¢ã™ã‚‹é•·ã„\n"
++" 出力ファイルåを使用ã™ã‚‹\n"
+
+ #: gcov.c:427
+ #, c-format
+ msgid " -f, --function-summaries Output summaries for each function\n"
+-msgstr ""
++msgstr " -f, --function-summaries å„関数ã«é–¢ã™ã‚‹è¦ç´„を出力ã™ã‚‹\n"
+
+ #: gcov.c:428
+ #, c-format
+ msgid " -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n"
+-msgstr ""
++msgstr " -o, --object-directory DIR|FILE オブジェクトファイルを DIR 内ã¾ãŸã¯å‘¼ã³å‡ºã—用 FILE å†…ã§æ¤œç´¢ã™ã‚‹\n"
+
+ #: gcov.c:429
+ #, c-format
+ msgid " -p, --preserve-paths Preserve all pathname components\n"
+-msgstr ""
++msgstr " -p, --preserve-paths ã™ã¹ã¦ã®ãƒ‘スåè¦ç´ ã‚’ä¿è­·ã™ã‚‹\n"
+
+ #: gcov.c:430
+ #, c-format
+@@ -977,7 +981,7 @@
+ #: gcov.c:1045
+ #, c-format
+ msgid "%s:cannot open data file, assuming not executed\n"
+-msgstr ""
++msgstr "%s:データファイルを開ã‘ã¾ã›ã‚“。実行ã•れã¦ã„ãªã„ã¨è¦‹ãªã—ã¾ã™\n"
+
+ #: gcov.c:1052
+ #, c-format
+@@ -1027,7 +1031,7 @@
+ #: gcov.c:1379
+ #, c-format
+ msgid "%s:graph is unsolvable for '%s'\n"
+-msgstr ""
++msgstr "%s: '%s' 用ã®ã‚°ãƒ©ãƒ•ãŒè§£æ±ºã§ãã¾ã›ã‚“\n"
+
+ #: gcov.c:1459
+ #, c-format
+@@ -1037,7 +1041,7 @@
+ #: gcov.c:1462
+ #, c-format
+ msgid "Lines executed:%s of %d\n"
+-msgstr ""
++msgstr "実行ã•れãŸè¡Œ:%s of %d\n"
+
+ #: gcov.c:1466
+ #, c-format
+@@ -1047,7 +1051,7 @@
+ #: gcov.c:1472
+ #, c-format
+ msgid "Branches executed:%s of %d\n"
+-msgstr ""
++msgstr "実行ã•れãŸåˆ†å²:%s of %d\n"
+
+ #: gcov.c:1476
+ #, c-format
+@@ -1057,12 +1061,12 @@
+ #: gcov.c:1482
+ #, c-format
+ msgid "No branches\n"
+-msgstr ""
++msgstr "分å²ãŒã‚りã¾ã›ã‚“\n"
+
+ #: gcov.c:1484
+ #, c-format
+ msgid "Calls executed:%s of %d\n"
+-msgstr ""
++msgstr "実行ã•れãŸå‘¼ã³å‡ºã—:%s of %d\n"
+
+ #: gcov.c:1488
+ #, c-format
+@@ -1075,24 +1079,24 @@
+ msgstr "%s: '%s' ã«å¯¾ã™ã‚‹è¡ŒãŒã‚りã¾ã›ã‚“\n"
+
+ #: gcov.c:1843
+-#, fuzzy, c-format
++#, c-format
+ msgid "call %2d returned %s\n"
+-msgstr "呼ã³å‡ºã— %d ã®æˆ»ã‚Š = %d\n"
++msgstr ""
+
+ #: gcov.c:1848
+-#, fuzzy, c-format
++#, c-format
+ msgid "call %2d never executed\n"
+-msgstr "呼ã³å‡ºã— %d ã¯ä¸€åº¦ã‚‚実行ã›ãš\n"
++msgstr ""
+
+ #: gcov.c:1853
+-#, fuzzy, c-format
++#, c-format
+ msgid "branch %2d taken %s%s\n"
+-msgstr "ブランム%d å—ç† = %d%%\n"
++msgstr ""
+
+ #: gcov.c:1857
+-#, fuzzy, c-format
++#, c-format
+ msgid "branch %2d never executed\n"
+-msgstr "ブランム%d ã¯ä¸€åº¦ã‚‚実行ã•れãš\n"
++msgstr ""
+
+ #: gcov.c:1862
+ #, c-format
+@@ -1100,9 +1104,9 @@
+ msgstr ""
+
+ #: gcov.c:1865
+-#, fuzzy, c-format
++#, c-format
+ msgid "unconditional %2d never executed\n"
+-msgstr "呼ã³å‡ºã— %d ã¯ä¸€åº¦ã‚‚実行ã›ãš\n"
++msgstr ""
+
+ #: gcov.c:1901
+ #, c-format
+@@ -1412,11 +1416,11 @@
+
+ #: opts.c:1183
+ msgid "The following options take separate arguments"
+-msgstr ""
++msgstr "次ã®ã‚ªãƒ—ションã¯åˆ†é›¢ã—ãŸå¼•æ•°ã‚’å–りã¾ã™"
+
+ #: opts.c:1185
+ msgid "The following options take joined arguments"
+-msgstr ""
++msgstr "次ã®ã‚ªãƒ—ションã¯çµåˆã—ãŸå¼•æ•°ã‚’å–りã¾ã™"
+
+ #: opts.c:1196
+ msgid "The following options are language-related"
+@@ -1472,7 +1476,7 @@
+ #: targhooks.c:1469
+ #, c-format
+ msgid "created and used with differing settings of '%s'"
+-msgstr ""
++msgstr "ä½œæˆæ™‚ã¨ä½¿ç”¨æ™‚ã§ '%s' ã®è¨­å®šãŒç•°ãªã‚Šã¾ã™"
+
+ #: targhooks.c:1471
+ msgid "out of memory"
+@@ -1480,11 +1484,11 @@
+
+ #: targhooks.c:1486
+ msgid "created and used with different settings of -fpic"
+-msgstr ""
++msgstr "ä½œæˆæ™‚ã¨ä½¿ç”¨æ™‚ã§ -fpic ã®è¨­å®šãŒç•°ãªã‚Šã¾ã™"
+
+ #: targhooks.c:1488
+ msgid "created and used with different settings of -fpie"
+-msgstr ""
++msgstr "ä½œæˆæ™‚ã¨ä½¿ç”¨æ™‚ã§ -fpie ã®è¨­å®šãŒç•°ãªã‚Šã¾ã™"
+
+ #: tlink.c:386
+ #, c-format
+@@ -1717,11 +1721,11 @@
+
+ #: params.def:100
+ msgid "The maximum depth of recursive inlining for inline functions"
+-msgstr ""
++msgstr "インライン関数をå†å¸°çš„ã«ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³åŒ–ã™ã‚‹æ™‚ã®æœ€å¤§æ·±åº¦"
+
+ #: params.def:105
+ msgid "The maximum depth of recursive inlining for non-inline functions"
+-msgstr ""
++msgstr "éžã‚¤ãƒ³ãƒ©ã‚¤ãƒ³é–¢æ•°ã‚’å†å¸°çš„ã«ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³åŒ–ã™ã‚‹æ™‚ã®æœ€å¤§æ·±åº¦"
+
+ #: params.def:110
+ msgid "Inline recursively only when the probability of call being executed exceeds the parameter"
+@@ -1761,16 +1765,15 @@
+
+ #: params.def:180
+ msgid "The size of function body to be considered large"
+-msgstr ""
++msgstr "大ãã„ã¨è¦‹ãªã•れる関数本体ã®ã‚µã‚¤ã‚º"
+
+ #: params.def:184
+ msgid "Maximal growth due to inlining of large function (in percent)"
+ msgstr ""
+
+ #: params.def:188
+-#, fuzzy
+ msgid "The size of translation unit to be considered large"
+-msgstr "翻訳å˜ä½å…¨ä½“をファイルã«ãƒ€ãƒ³ãƒ—ã™ã‚‹"
++msgstr "大ãã„ã¨è¦‹ãªã•れる翻訳å˜ä½ã®ã‚µã‚¤ã‚º"
+
+ #: params.def:192
+ msgid "How much can given compilation unit grow because of the inlining (in percent)"
+@@ -1786,20 +1789,19 @@
+
+ #: params.def:204
+ msgid "The size of stack frame to be considered large"
+-msgstr ""
++msgstr "大ãã„ã¨è¦‹ãªã•れるスタックフレームã®ã‚µã‚¤ã‚º"
+
+ #: params.def:208
+ msgid "Maximal stack frame growth due to inlining (in percent)"
+-msgstr ""
++msgstr "インライン化ã«ã‚ˆã£ã¦å¢—加ã™ã‚‹ã‚¹ã‚¿ãƒƒã‚¯ãƒ•ãƒ¬ãƒ¼ãƒ ã®æœ€å¤§é‡ (百分率)"
+
+ #: params.def:215
+ msgid "The maximum amount of memory to be allocated by GCSE"
+-msgstr ""
++msgstr "GCSE ã«ã‚ˆã£ã¦é…ç½®ã•ã‚Œã‚‹ãƒ¡ãƒ¢ãƒªã®æœ€å¤§é‡"
+
+ #: params.def:222
+-#, fuzzy
+ msgid "The maximum ratio of insertions to deletions of expressions in GCSE"
+-msgstr "RPTS ç”¨ã®æœ€å¤§å復数を指定ã™ã‚‹"
++msgstr ""
+
+ #: params.def:233
+ msgid "The threshold ratio for performing partial redundancy elimination after reload"
+@@ -1963,9 +1965,8 @@
+ msgstr ""
+
+ #: params.def:470
+-#, fuzzy
+ msgid "Bound on number of iv uses in loop optimized in iv optimizations"
+-msgstr "目立ãŸãªã„ã€ã‚³ã‚¹ãƒˆã®ã‹ã‹ã‚‹æœ€é©åŒ–を行ãªã†"
++msgstr ""
+
+ #: params.def:478
+ msgid "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization"
+@@ -2044,9 +2045,8 @@
+ msgstr ""
+
+ #: params.def:594
+-#, fuzzy
+ msgid "The maximum number of iterations through CFG to extend regions"
+-msgstr "RPTS ç”¨ã®æœ€å¤§å復数を指定ã™ã‚‹"
++msgstr ""
+
+ #: params.def:599
+ msgid "The maximum conflict delay for an insn to be considered for speculative motion"
+@@ -2077,9 +2077,8 @@
+ msgstr ""
+
+ #: params.def:637
+-#, fuzzy
+ msgid "The upper bound for sharing integer constants"
+-msgstr "`%s' ã®åˆ—æŒ™å€¤ãŒæ•´æ•°å®šæ•°ã§ã¯ã‚りã¾ã›ã‚“"
++msgstr "整数定数を共有ã™ã‚‹ãŸã‚ã®ä¸Šé™å€¤"
+
+ #: params.def:656
+ msgid "Minimum number of virtual mappings to consider switching to full virtual renames"
+@@ -2111,11 +2110,11 @@
+
+ #: params.def:714
+ msgid "The number of insns executed before prefetch is completed"
+-msgstr ""
++msgstr "プリフェッãƒãŒå®Œäº†ã™ã‚‹å‰ã«å®Ÿè¡Œã•れる命令数"
+
+ #: params.def:721
+ msgid "The number of prefetches that can run at the same time"
+-msgstr ""
++msgstr "åŒæ™‚ã«å®Ÿè¡Œå¯èƒ½ãªãƒ—リフェッãƒã®æ•°"
+
+ #: params.def:728
+ msgid "The size of L1 cache"
+@@ -2162,9 +2161,8 @@
+ msgstr ""
+
+ #: params.def:806
+-#, fuzzy
+ msgid "maximum number of parameters in a SCoP"
+-msgstr "RPTS ç”¨ã®æœ€å¤§å復数を指定ã™ã‚‹"
++msgstr "SCoP 内ã®ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ã®æœ€å¤§æ•°"
+
+ #: params.def:813
+ msgid "maximum number of basic blocks per function to be analyzed by Graphite"
+@@ -2597,9 +2595,9 @@
+ msgstr "無効㪠%%E 値"
+
+ #: config/alpha/alpha.c:5431 config/alpha/alpha.c:5479
+-#, fuzzy, c-format
++#, c-format
+ msgid "unknown relocation unspec"
+-msgstr "䏿˜Žãªè¨­å®šæ¸ˆã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿åž‹ã§ã™"
++msgstr ""
+
+ #: config/alpha/alpha.c:5440 config/crx/crx.c:1119
+ #: config/rs6000/rs6000.c:16490 config/spu/spu.c:1726
+@@ -3000,32 +2998,32 @@
+ #: config/i386/i386.c:14106 config/i386/i386.c:14146
+ #, c-format
+ msgid "operand is not a condition code, invalid operand code 'D'"
+-msgstr ""
++msgstr "被演算å­ã¯æ¡ä»¶ã‚³ãƒ¼ãƒ‰ã§ã¯ã‚りã¾ã›ã‚“。無効ãªè¢«æ¼”ç®—å­ã‚³ãƒ¼ãƒ‰ 'D' ã§ã™"
+
+ #: config/i386/i386.c:14172
+ #, c-format
+ msgid "operand is neither a constant nor a condition code, invalid operand code 'C'"
+-msgstr ""
++msgstr "被演算å­ã¯å®šæ•°ã§ã‚‚æ¡ä»¶ã‚³ãƒ¼ãƒ‰ã§ã‚‚ã‚りã¾ã›ã‚“。無効ãªè¢«æ¼”ç®—å­ã‚³ãƒ¼ãƒ‰ 'C' ã§ã™"
+
+ #: config/i386/i386.c:14182
+ #, c-format
+ msgid "operand is neither a constant nor a condition code, invalid operand code 'F'"
+-msgstr ""
++msgstr "被演算å­ã¯å®šæ•°ã§ã‚‚æ¡ä»¶ã‚³ãƒ¼ãƒ‰ã§ã‚‚ã‚りã¾ã›ã‚“。無効ãªè¢«æ¼”ç®—å­ã‚³ãƒ¼ãƒ‰ 'F' ã§ã™"
+
+ #: config/i386/i386.c:14200
+ #, c-format
+ msgid "operand is neither a constant nor a condition code, invalid operand code 'c'"
+-msgstr ""
++msgstr "被演算å­ã¯å®šæ•°ã§ã‚‚æ¡ä»¶ã‚³ãƒ¼ãƒ‰ã§ã‚‚ã‚りã¾ã›ã‚“。無効ãªè¢«æ¼”ç®—å­ã‚³ãƒ¼ãƒ‰ 'c' ã§ã™"
+
+ #: config/i386/i386.c:14210
+ #, c-format
+ msgid "operand is neither a constant nor a condition code, invalid operand code 'f'"
+-msgstr ""
++msgstr "被演算å­ã¯å®šæ•°ã§ã‚‚æ¡ä»¶ã‚³ãƒ¼ãƒ‰ã§ã‚‚ã‚りã¾ã›ã‚“。無効ãªè¢«æ¼”ç®—å­ã‚³ãƒ¼ãƒ‰ 'f' ã§ã™"
+
+ #: config/i386/i386.c:14313
+ #, c-format
+ msgid "operand is not a condition code, invalid operand code 'Y'"
+-msgstr ""
++msgstr "被演算å­ã¯æ¡ä»¶ã‚³ãƒ¼ãƒ‰ã§ã¯ã‚りã¾ã›ã‚“。無効ãªè¢«æ¼”ç®—å­ã‚³ãƒ¼ãƒ‰ 'Y' ã§ã™"
+
+ #: config/i386/i386.c:14339
+ #, c-format
+@@ -3098,7 +3096,7 @@
+ #: config/lm32/lm32.c:529
+ #, c-format
+ msgid "only 0.0 can be loaded as an immediate"
+-msgstr ""
++msgstr "å³å€¤ã¨ã—ã¦ãƒ­ãƒ¼ãƒ‰ã§ãã‚‹ã®ã¯ 0.0 ã®ã¿ã§ã™"
+
+ #: config/lm32/lm32.c:599
+ msgid "bad operand"
+@@ -3138,15 +3136,15 @@
+
+ #: config/m32r/m32r.c:2290
+ msgid "pre-increment address is not a register"
+-msgstr ""
++msgstr "å‰ç½®å¢—分アドレスãŒãƒ¬ã‚¸ã‚¹ã‚¿ã§ã¯ã‚りã¾ã›ã‚“"
+
+ #: config/m32r/m32r.c:2297
+ msgid "pre-decrement address is not a register"
+-msgstr ""
++msgstr "å‰ç½®æ¸›åˆ†ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãƒ¬ã‚¸ã‚¹ã‚¿ã§ã¯ã‚りã¾ã›ã‚“"
+
+ #: config/m32r/m32r.c:2304
+ msgid "post-increment address is not a register"
+-msgstr ""
++msgstr "後置増分アドレスãŒãƒ¬ã‚¸ã‚¹ã‚¿ã§ã¯ã‚りã¾ã›ã‚“"
+
+ #: config/m32r/m32r.c:2380 config/m32r/m32r.c:2394
+ #: config/rs6000/rs6000.c:25500
+@@ -3252,7 +3250,7 @@
+
+ #: config/mmix/mmix.c:1589 config/mmix/mmix.c:1719
+ msgid "MMIX Internal: Expected a CONST_INT, not this"
+-msgstr ""
++msgstr "MMIX 内部: CONST_INT ãŒäºˆæœŸã•れã¾ã™ãŒã€ç•°ãªã£ã¦ã„ã¾ã™"
+
+ #: config/mmix/mmix.c:1668
+ msgid "MMIX Internal: Bad value for 'm', not a CONST_INT"
+@@ -3260,11 +3258,11 @@
+
+ #: config/mmix/mmix.c:1687
+ msgid "MMIX Internal: Expected a register, not this"
+-msgstr ""
++msgstr "MMIX 内部: レジスタãŒäºˆæœŸã•れã¾ã™ãŒã€ç•°ãªã£ã¦ã„ã¾ã™"
+
+ #: config/mmix/mmix.c:1697
+ msgid "MMIX Internal: Expected a constant, not this"
+-msgstr ""
++msgstr "MMIX 内部: 定数ãŒäºˆæœŸã•れã¾ã™ãŒã€ç•°ãªã£ã¦ã„ã¾ã™"
+
+ #. We need the original here.
+ #: config/mmix/mmix.c:1781
+@@ -3301,7 +3299,7 @@
+
+ #: config/picochip/picochip.c:2983 config/picochip/picochip.c:3015
+ msgid "Bad address, not (reg+disp):"
+-msgstr ""
++msgstr "誤ã£ãŸã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã™ã€‚ (reg+disp) ã§ã¯ã‚りã¾ã›ã‚“:"
+
+ #: config/picochip/picochip.c:3029
+ msgid "Bad address, not register:"
+@@ -3526,15 +3524,15 @@
+
+ #: config/sh/sh.c:9271
+ msgid "created and used with different architectures / ABIs"
+-msgstr ""
++msgstr "ä½œæˆæ™‚ã¨ä½¿ç”¨æ™‚㧠アーキテクãƒãƒ£/ABI ãŒç•°ãªã‚Šã¾ã™"
+
+ #: config/sh/sh.c:9273
+ msgid "created and used with different ABIs"
+-msgstr ""
++msgstr "ä½œæˆæ™‚ã¨ä½¿ç”¨æ™‚ã§ ABI ãŒç•°ãªã‚Šã¾ã™"
+
+ #: config/sh/sh.c:9275
+ msgid "created and used with different endianness"
+-msgstr ""
++msgstr "ä½œæˆæ™‚ã¨ä½¿ç”¨æ™‚ã§ã‚¨ãƒ³ãƒ‡ã‚£ã‚¢ãƒ³ãŒç•°ãªã‚Šã¾ã™"
+
+ #: config/sparc/sparc.c:7445 config/sparc/sparc.c:7451
+ #, c-format
+@@ -3617,7 +3615,7 @@
+ #: config/vax/vax.c:427
+ #, c-format
+ msgid "symbol with offset used in PIC mode"
+-msgstr ""
++msgstr "PIC モードã§ä½¿ç”¨ã•れるオフセット付ãã®ã‚·ãƒ³ãƒœãƒ«ã§ã™"
+
+ #: config/vax/vax.c:513
+ #, c-format
+@@ -3837,19 +3835,19 @@
+ msgstr "%s:%d:%d: ã“ã“ã‹ã‚‰å†å¸°çš„ã«å®Ÿä½“化ã•れã¾ã—ãŸ"
+
+ #: cp/error.c:2913
+-#, fuzzy, c-format
++#, c-format
+ msgid "%s:%d:%d: instantiated from here"
+ msgstr "%s:%d:%d: ã“ã“ã‹ã‚‰å®Ÿä½“化ã•れã¾ã—ãŸ"
+
+ #: cp/error.c:2918
+ #, c-format
+ msgid "%s:%d: recursively instantiated from here"
+-msgstr ""
++msgstr "%s:%d: ã“ã“ã‹ã‚‰å†å¸°çš„ã«å®Ÿä½“化ã•れã¾ã—ãŸ"
+
+ #: cp/error.c:2919
+-#, fuzzy, c-format
++#, c-format
+ msgid "%s:%d: instantiated from here"
+-msgstr "%s:%d: ã“ã“ã§å®Ÿä½“化ã•れã¾ã—ãŸ\n"
++msgstr "%s:%d: ã“ã“ã‹ã‚‰å®Ÿä½“化ã•れã¾ã—ãŸ"
+
+ #: cp/error.c:2962
+ #, c-format
+@@ -4029,22 +4027,21 @@
+ #: fortran/expr.c:607
+ #, c-format
+ msgid "Constant expression required at %C"
+-msgstr ""
++msgstr "%C ã§ã¯å®šæ•°å¼ãŒè¦æ±‚ã•れã¾ã™"
+
+ #: fortran/expr.c:610
+ #, c-format
+ msgid "Integer expression required at %C"
+-msgstr ""
++msgstr "%C ã§ã¯æ•´æ•°å¼ãŒè¦æ±‚ã•れã¾ã™"
+
+ #: fortran/expr.c:615
+-#, fuzzy, c-format
++#, c-format
+ msgid "Integer value too large in expression at %C"
+-msgstr "å¼ã®æ•´æ•°ãŒã‚ªãƒ¼ãƒãƒ¼ãƒ•ローã—ã¾ã—ãŸ"
++msgstr "%C ã®å¼å†…ã§æ•´æ•°å€¤ãŒå¤§ãã™ãŽã¾ã™"
+
+ #: fortran/expr.c:3147
+-#, fuzzy
+ msgid "array assignment"
+-msgstr "代入"
++msgstr "é…列代入"
+
+ #: fortran/gfortranspec.c:303
+ #, c-format
+@@ -4080,7 +4077,7 @@
+
+ #: fortran/io.c:551
+ msgid "Unexpected element '%c' in format string at %L"
+-msgstr ""
++msgstr "予期ã—ãªã„è¦ç´  '%c' ãŒæ›¸å¼æ–‡å­—列内 (ä½ç½® %L) ã«ã‚りã¾ã™"
+
+ #: fortran/io.c:553
+ msgid "Unexpected end of format string"
+@@ -4088,15 +4085,15 @@
+
+ #: fortran/io.c:554
+ msgid "Zero width in format descriptor"
+-msgstr ""
++msgstr "å¹… 0 ã®æ›¸å¼è¨˜è¿°å­ã§ã™"
+
+ #: fortran/io.c:574
+ msgid "Missing leading left parenthesis"
+-msgstr ""
++msgstr "å‰ã«å·¦å°æ‹¬å¼§ãŒã‚りã¾ã›ã‚“"
+
+ #: fortran/io.c:603
+ msgid "Left parenthesis required after '*'"
+-msgstr ""
++msgstr "'*' ã®å¾Œã«ã¯å·¦å°æ‹¬å¼§ãŒå¿…è¦ã§ã™"
+
+ #: fortran/io.c:634
+ msgid "Expected P edit descriptor"
+@@ -4116,9 +4113,8 @@
+ msgstr ""
+
+ #: fortran/io.c:844
+-#, fuzzy
+ msgid "E specifier not allowed with g0 descriptor"
+-msgstr "åž‹æŒ‡å®šå­ `%s' 㯠struct ã‚„ class ã®å¾Œã«ã¯ä½¿ãˆã¾ã›ã‚“"
++msgstr ""
+
+ #: fortran/io.c:914
+ msgid "Positive exponent width required"
+@@ -4362,9 +4358,8 @@
+ msgstr ""
+
+ #: fortran/resolve.c:6233
+-#, fuzzy
+ msgid "End expression in DO loop"
+-msgstr "オペランドã¨ã—ã¦ç„¡åйãªå¼"
++msgstr ""
+
+ #: fortran/resolve.c:6237
+ msgid "Step expression in DO loop"
+@@ -4564,7 +4559,7 @@
+ #: java/jcf-dump.c:1148
+ #, c-format
+ msgid " --extdirs PATH Set extensions directory path\n"
+-msgstr ""
++msgstr " --extdirs PATH æ‹¡å¼µã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ‘スを設定ã™ã‚‹\n"
+
+ #: java/jcf-dump.c:1149
+ #, c-format
+@@ -4734,18 +4729,18 @@
+ #: config/pa/pa-hpux11.h:111 config/pa/pa64-hpux.h:30 config/pa/pa64-hpux.h:33
+ #: config/pa/pa64-hpux.h:42 config/pa/pa64-hpux.h:45
+ msgid "warning: consider linking with '-static' as system libraries with"
+-msgstr ""
++msgstr "警告: システムライブラリã¨ãƒªãƒ³ã‚¯ã™ã‚‹æ™‚㯠'-static' を指定ã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„"
+
+ #: config/pa/pa-hpux10.h:90 config/pa/pa-hpux10.h:93 config/pa/pa-hpux10.h:101
+ #: config/pa/pa-hpux10.h:104 config/pa/pa-hpux11.h:109
+ #: config/pa/pa-hpux11.h:112 config/pa/pa64-hpux.h:31 config/pa/pa64-hpux.h:34
+ #: config/pa/pa64-hpux.h:43 config/pa/pa64-hpux.h:46
+ msgid " profiling support are only provided in archive format"
+-msgstr ""
++msgstr " プロファイリングサãƒãƒ¼ãƒˆã¯æ›¸åº«ãƒ•ォーマット内ã§ã®ã¿æä¾›ã•れã¾ã™"
+
+ #: config/rs6000/darwin.h:99
+ msgid " conflicting code gen style switches are used"
+-msgstr ""
++msgstr " ç«¶åˆã—ã¦ã„るコード生æˆã‚¹ã‚¿ã‚¤ãƒ«ã‚¹ã‚¤ãƒƒãƒãŒä½¿ç”¨ã•れã¦ã„ã¾ã™"
+
+ #: config/arm/arm.h:178
+ msgid "-msoft-float and -mhard_float may not be used together"
+@@ -4805,7 +4800,7 @@
+
+ #: config/i386/linux-unwind.h:186
+ msgid "ax ; {int $0x80 | syscall"
+-msgstr ""
++msgstr "ax ; {int $0x80 | syscall"
+
+ #: config/s390/tpf.h:120
+ msgid "static is not supported on TPF-OS"
+@@ -4869,7 +4864,7 @@
+
+ #: java/lang.opt:206
+ msgid "--extdirs=<path>\tSet the extension directory path"
+-msgstr ""
++msgstr "--extdirs=<path>\tæ‹¡å¼µã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ‘スを設定ã™ã‚‹"
+
+ #: java/lang.opt:216
+ msgid "Input file is a file with a list of filenames to compile"
+@@ -5388,7 +5383,7 @@
+
+ #: config/frv/frv.opt:31
+ msgid "Enable label alignment optimizations"
+-msgstr ""
++msgstr "ラベル整列最é©åŒ–を有効ã«ã™ã‚‹"
+
+ #: config/frv/frv.opt:35
+ msgid "Dynamically allocate cc registers"
+@@ -5452,7 +5447,7 @@
+
+ #: config/frv/frv.opt:116
+ msgid "Enable use of GPREL for read-only data in FDPIC"
+-msgstr ""
++msgstr "FDPIC 内ã®èª­ã¿å–り専用データ用 GPREL ã®ä½¿ç”¨ã‚’有効ã«ã™ã‚‹"
+
+ #: config/frv/frv.opt:120 config/rs6000/rs6000.opt:216
+ #: config/pdp11/pdp11.opt:67
+@@ -5460,9 +5455,8 @@
+ msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æµ®å‹•å°æ•°ç‚¹ã‚’利用ã™ã‚‹"
+
+ #: config/frv/frv.opt:124 config/bfin/bfin.opt:77
+-#, fuzzy
+ msgid "Enable inlining of PLT in function calls"
+-msgstr "関数呼ã³å‡ºã—ã®å‰å¾Œã§ãƒ¬ã‚¸ã‚¹ã‚¿ã®ä¿å­˜ã‚’有効ã«ã™ã‚‹"
++msgstr "関数呼ã³å‡ºã—内㧠PLT ã®ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³åŒ–を有効ã«ã™ã‚‹"
+
+ #: config/frv/frv.opt:128
+ msgid "Enable PIC support for building libraries"
+@@ -5478,7 +5472,7 @@
+
+ #: config/frv/frv.opt:140
+ msgid "Use media instructions"
+-msgstr ""
++msgstr "media 命令を使用ã™ã‚‹"
+
+ #: config/frv/frv.opt:144
+ msgid "Use multiply add/subtract instructions"
+@@ -5494,7 +5488,7 @@
+
+ #: config/frv/frv.opt:157
+ msgid "Do not mark ABI switches in e_flags"
+-msgstr ""
++msgstr "e_flags 内㮠ABI スイッãƒã‚’マークã—ãªã„"
+
+ #: config/frv/frv.opt:161
+ msgid "Remove redundant membars"
+@@ -5506,7 +5500,7 @@
+
+ #: config/frv/frv.opt:169
+ msgid "Enable setting GPRs to the result of comparisons"
+-msgstr ""
++msgstr "æ¯”è¼ƒçµæžœã‚’汎用レジスタã«è¨­å®šã™ã‚‹ã“ã¨ã‚’有効ã«ã™ã‚‹"
+
+ #: config/frv/frv.opt:173
+ msgid "Change the amount of scheduler lookahead"
+@@ -5565,9 +5559,8 @@
+ msgstr ""
+
+ #: config/mn10300/mn10300.opt:56
+-#, fuzzy
+ msgid "Allow gcc to generate LIW instructions"
+-msgstr "gcc ㌠repeat/erepeat 命令を使用ã™ã‚‹ã“ã¨ã‚’許å¯ã™ã‚‹"
++msgstr "gcc ㌠LIW 命令を生æˆã™ã‚‹ã“ã¨ã‚’許å¯ã™ã‚‹"
+
+ #: config/s390/tpf.opt:23
+ msgid "Enable TPF-OS tracing code"
+@@ -5640,11 +5633,11 @@
+
+ #: config/s390/s390.opt:91
+ msgid "Warn if a function uses alloca or creates an array with dynamic size"
+-msgstr ""
++msgstr "関数㧠alloca を使用ã™ã‚‹ã‹ã€ã¾ãŸã¯å‹•的サイズã®é…列を作æˆã—ãŸå ´åˆã«ã€è­¦å‘Šã™ã‚‹"
+
+ #: config/s390/s390.opt:95
+ msgid "Warn if a single function's framesize exceeds the given framesize"
+-msgstr ""
++msgstr "一ã¤ã®é–¢æ•°ã®ãƒ•レームサイズãŒä¸Žãˆã‚‰ã‚ŒãŸãƒ•レームサイズを超éŽã™ã‚‹å ´åˆã«è­¦å‘Šã™ã‚‹"
+
+ #: config/s390/s390.opt:99
+ msgid "z/Architecture"
+@@ -5692,7 +5685,7 @@
+
+ #: config/ia64/ia64.opt:56
+ msgid "gp is constant (but save/restore gp on indirect calls)"
+-msgstr "gp を定数ã¨ã™ã‚‹ï¼ˆä½†ã€é–“接呼ã³å‡ºã—ã§ã¯ gp ã‚’ save/restore ã™ã‚‹ï¼‰"
++msgstr "gp を定数ã¨ã™ã‚‹ï¼ˆãŸã ã—ã€é–“接呼ã³å‡ºã—ã§ã¯ gp ã‚’ save/restore ã™ã‚‹ï¼‰"
+
+ #: config/ia64/ia64.opt:60
+ msgid "Generate self-relocatable code"
+@@ -5741,39 +5734,39 @@
+ #: config/ia64/ia64.opt:107 config/spu/spu.opt:72 config/sh/sh.opt:258
+ #: config/pa/pa.opt:51
+ msgid "Specify range of registers to make fixed"
+-msgstr ""
++msgstr "固定ã™ã‚‹ãƒ¬ã‚¸ã‚¹ã‚¿ã®ç¯„囲を指定ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:119
+ msgid "Use data speculation before reload"
+-msgstr ""
++msgstr "reload å‰ã«ãƒ‡ãƒ¼ã‚¿æŠ•機を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:123
+ msgid "Use data speculation after reload"
+-msgstr ""
++msgstr "reload 後ã«ãƒ‡ãƒ¼ã‚¿æŠ•機を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:127
+ msgid "Use control speculation"
+-msgstr ""
++msgstr "制御投機を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:131
+ msgid "Use in block data speculation before reload"
+-msgstr ""
++msgstr "reload å‰ã«ãƒ–ロック内データ投機を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:135
+ msgid "Use in block data speculation after reload"
+-msgstr ""
++msgstr "reload 後ã«ãƒ–ロック内データ投機を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:139
+ msgid "Use in block control speculation"
+-msgstr ""
++msgstr "ブロック内制御投機を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:143
+ msgid "Use simple data speculation check"
+-msgstr ""
++msgstr "å˜ç´”データ投機検査を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:147
+ msgid "Use simple data speculation check for control speculation"
+-msgstr ""
++msgstr "制御投機用ã®å˜ç´”データ投機検査を使用ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:151
+ msgid "If set, data speculative instructions will be chosen for schedule only if there are no other choices at the moment "
+@@ -5789,7 +5782,7 @@
+
+ #: config/ia64/ia64.opt:163
+ msgid "Place a stop bit after every cycle when scheduling"
+-msgstr ""
++msgstr "スケジューリング時ã®å„サイクル後ã«ã‚¹ãƒˆãƒƒãƒ—ビットをé…ç½®ã™ã‚‹"
+
+ #: config/ia64/ia64.opt:167
+ msgid "Assume that floating-point stores and loads are not likely to cause conflict when placed into one instruction group"
+@@ -5805,7 +5798,7 @@
+
+ #: config/ia64/ia64.opt:179
+ msgid "Don't generate checks for control speculation in selective scheduling"
+-msgstr ""
++msgstr "é¸æŠžçš„ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒªãƒ³ã‚°å†…ã§ã¯åˆ¶å¾¡æŠ•æ©Ÿç”¨ã®æ¤œæŸ»ã‚’生æˆã—ãªã„"
+
+ #: config/ia64/vms_symvec_libgcc_s.opt:3
+ msgid "! It would be better to auto-generate this file."
+@@ -6109,7 +6102,7 @@
+
+ #: config/m68k/m68k.opt:160 config/bfin/bfin.opt:61
+ msgid "Enable separate data segment"
+-msgstr ""
++msgstr "分離データセグメントを有効ã«ã™ã‚‹"
+
+ #: config/m68k/m68k.opt:164 config/bfin/bfin.opt:57
+ msgid "ID of shared library to build"
+@@ -6149,7 +6142,7 @@
+
+ #: config/i386/mingw.opt:23
+ msgid "Warn about none ISO msvcrt scanf/printf width extensions"
+-msgstr ""
++msgstr "éž ISO ã® msvcrt scanf/printf ã®å¹…æ‹¡å¼µã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
+
+ #: config/i386/mingw.opt:27
+ msgid "For nested functions on stack executable permission is set."
+@@ -6201,7 +6194,7 @@
+
+ #: config/i386/i386.opt:114
+ msgid "Data greater than given threshold will go into .ldata section in x86-64 medium model"
+-msgstr ""
++msgstr "x86-64 メディアモデルã§ã¯ä¸Žãˆã‚‰ã‚ŒãŸé–¾å€¤ã‚ˆã‚Šå¤§ãã„データを .ldata セクションã«é…ç½®ã™ã‚‹"
+
+ #: config/i386/i386.opt:118
+ msgid "Use given x86-64 code model"
+@@ -6217,16 +6210,15 @@
+
+ #: config/i386/i386.opt:129
+ msgid "Always use Dynamic Realigned Argument Pointer (DRAP) to realign stack"
+-msgstr ""
++msgstr "ã‚¹ã‚¿ãƒƒã‚¯ã‚’å†æ•´åˆ—ã™ã‚‹ãŸã‚ã«å‹•çš„å†æ•´åˆ—引数ãƒã‚¤ãƒ³ã‚¿ (Dynamic Realigned Argument Pointer, DRAP) を常ã«ä½¿ç”¨ã™ã‚‹"
+
+ #: config/i386/i386.opt:133
+ msgid "Return values of functions in FPU registers"
+ msgstr "FPU ãƒ¬ã‚¸ã‚¹ã‚¿å†…ã®æ©Ÿèƒ½ã®å€¤ã‚’è¿”ã™"
+
+ #: config/i386/i386.opt:137
+-#, fuzzy
+ msgid "Generate floating point mathematics using given instruction set"
+-msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æµ®å‹•å°æ•°ç‚¹å‘½ä»¤ã‚’使用ã™ã‚‹"
++msgstr "与ãˆã‚‰ã‚ŒãŸå‘½ä»¤é›†åˆã‚’使用ã—ã¦æµ®å‹•å°æ•°æ•°å€¤è¨ˆç®—を生æˆã™ã‚‹"
+
+ #: config/i386/i386.opt:149
+ msgid "Inline all known string operations"
+@@ -6314,8 +6306,9 @@
+ msgstr "8 ãƒã‚¤ãƒˆãƒ™ã‚¯ãƒˆãƒ«ã‚’メモリã«è¿”ã™"
+
+ #: config/i386/i386.opt:253
++#, fuzzy
+ msgid "Generate reciprocals instead of divss and sqrtss."
+-msgstr ""
++msgstr "divss ãŠã‚ˆã³ sqrtss ã®ä»£ã‚りã«é€†æ•° (reciprocal) を生æˆã™ã‚‹"
+
+ #: config/i386/i386.opt:257
+ msgid "Generate cld instruction in the function prologue."
+@@ -6331,7 +6324,7 @@
+
+ #: config/i386/i386.opt:271
+ msgid "Use 128-bit AVX instructions instead of 256-bit AVX instructions in the auto-vectorizer."
+-msgstr ""
++msgstr "自動ベクトル化㧠256 ビット AVX 命令ã®ä»£ã‚り㫠128 ビット AVX 命令を使用ã™ã‚‹"
+
+ #: config/i386/i386.opt:277
+ msgid "Generate 32bit i386 code"
+@@ -6382,9 +6375,8 @@
+ msgstr "SSE4.1 㨠SSE4.2 ã®çµ„ã¿è¾¼ã¿é–¢æ•°ã¨ã‚³ãƒ¼ãƒ‰ç”Ÿæˆã‚’サãƒãƒ¼ãƒˆã—ãªã„"
+
+ #: config/i386/i386.opt:328
+-#, fuzzy
+ msgid "%<-msse5%> was removed"
+-msgstr "'-msse5' ã¯å‰Šé™¤ã•れã¾ã—ãŸ"
++msgstr "%<-msse5%> ã¯å‰Šé™¤ã•れã¾ã—ãŸ"
+
+ #: config/i386/i386.opt:333
+ msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation"
+@@ -6544,7 +6536,7 @@
+
+ #: config/rs6000/rs6000.opt:152
+ msgid "Use PowerPC General Purpose group optional instructions"
+-msgstr "PowerPC 一般用途グループオプション命令を使用ã™ã‚‹"
++msgstr "PowerPC 汎用グループオプション命令を使用ã™ã‚‹"
+
+ #: config/rs6000/rs6000.opt:156
+ msgid "Use PowerPC Graphics group optional instructions"
+@@ -7002,7 +6994,7 @@
+
+ #: config/mcore/mcore.opt:56 config/fr30/fr30.opt:27
+ msgid "Assume that run-time support has been provided, so omit -lsim from the linker command line"
+-msgstr ""
++msgstr "実行時サãƒãƒ¼ãƒˆãŒæä¾›ã•れるã¨è¦‹ãªã—ã€ãƒªãƒ³ã‚«ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã« -lsim ã‚’å«ã‚ãªã„"
+
+ #: config/mcore/mcore.opt:60
+ msgid "Use arbitrary sized immediates in bit operations"
+@@ -7014,7 +7006,7 @@
+
+ #: config/mcore/mcore.opt:71
+ msgid "Set the maximum amount for a single stack increment operation"
+-msgstr "å˜ä¸€ã®ã‚¹ã‚¿ãƒƒã‚¯ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆæ“ä½œã®æœ€å¤§å€¤ã‚’設定ã™ã‚‹"
++msgstr "å˜ä¸€ã®ã‚¹ã‚¿ãƒƒã‚¯å¢—分æ“ä½œã®æœ€å¤§å€¤ã‚’設定ã™ã‚‹"
+
+ #: config/mcore/mcore.opt:75
+ msgid "Always treat bitfields as int-sized"
+@@ -7234,7 +7226,7 @@
+
+ #: config/sh/sh.opt:246
+ msgid "Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table"
+-msgstr ""
++msgstr "é™¤ç®—æˆ¦ç•¥ã€æ¬¡ã®ã„ãšã‚Œã‹: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table"
+
+ #: config/sh/sh.opt:250
+ msgid "Specify name for 32 bit signed division function"
+@@ -7282,7 +7274,7 @@
+
+ #: config/sh/sh.opt:298
+ msgid "Mark MAC register as call-clobbered"
+-msgstr ""
++msgstr "MAC レジスタを呼ã³å‡ºã—ã§ç ´å£Šã•れるã¨ãƒžãƒ¼ã‚¯ã™ã‚‹"
+
+ #: config/sh/sh.opt:304
+ msgid "Make structs a multiple of 4 bytes (warning: ABI altered)"
+@@ -7960,7 +7952,7 @@
+
+ #: config/m68hc11/m68hc11.opt:49
+ msgid "Auto pre/post decrement increment allowed"
+-msgstr "自動 pre/post デクリメント インクリメントを許容ã™ã‚‹"
++msgstr "自動 å‰ç½®/後置 減分/増分 を許容ã™ã‚‹"
+
+ #: config/m68hc11/m68hc11.opt:53
+ msgid "Min/max instructions allowed"
+@@ -7972,7 +7964,7 @@
+
+ #: config/m68hc11/m68hc11.opt:61
+ msgid "Auto pre/post decrement increment not allowed"
+-msgstr "自動 pre/post デクリメント インクリメントを許容ã—ãªã„"
++msgstr "自動 å‰ç½®/後置 減分/増分を許容ã—ãªã„"
+
+ #: config/m68hc11/m68hc11.opt:65
+ msgid "Use jsr and rts for function calls and returns"
+@@ -8346,7 +8338,7 @@
+
+ #: config/bfin/bfin.opt:69
+ msgid "Link with the fast floating-point library"
+-msgstr ""
++msgstr "é«˜é€Ÿãªæµ®å‹•å°æ•°ãƒ©ã‚¤ãƒ–ラリã¨ãƒªãƒ³ã‚¯ã™ã‚‹"
+
+ #: config/bfin/bfin.opt:81
+ msgid "Do stack checking using bounds in L1 scratch memory"
+@@ -8382,7 +8374,7 @@
+
+ #: config/picochip/picochip.opt:31
+ msgid "Specify whether the byte access instructions should be used. Enabled by default."
+-msgstr ""
++msgstr "ãƒã‚¤ãƒˆã‚¢ã‚¯ã‚»ã‚¹å‘½ä»¤ã‚’使用ã™ã‚‹ã‹ã©ã†ã‹ã‚’指定ã™ã‚‹ã€‚デフォルトã§ã¯æœ‰åйã¨ãªã‚‹"
+
+ #: config/picochip/picochip.opt:35
+ msgid "Enable debug output to be generated."
+@@ -8390,11 +8382,11 @@
+
+ #: config/picochip/picochip.opt:39
+ msgid "Allow a symbol value to be used as an immediate value in an instruction."
+-msgstr ""
++msgstr "命令内ã§ã‚·ãƒ³ãƒœãƒ«å€¤ãŒå³å€¤ã¨ã—ã¦ä½¿ç”¨ã•れるã“ã¨ã‚’許å¯ã™ã‚‹"
+
+ #: config/picochip/picochip.opt:43
+ msgid "Generate warnings when inefficient code is known to be generated."
+-msgstr ""
++msgstr "éžåŠ¹çŽ‡ãªã‚³ãƒ¼ãƒ‰ãŒç”Ÿæˆã•ã‚ŒãŸæ™‚ã«è­¦å‘Šã™ã‚‹"
+
+ #: config/vxworks.opt:36
+ msgid "Assume the VxWorks RTP environment"
+@@ -8418,7 +8410,7 @@
+
+ #: config/darwin.opt:205
+ msgid "Warn if constant CFString objects contain non-portable characters"
+-msgstr ""
++msgstr "定数 CFString オブジェクトãŒç§»æ¤æ€§ã®ç„¡ã„文字をå«ã‚€å ´åˆã«è­¦å‘Šã™ã‚‹"
+
+ #: config/darwin.opt:210
+ msgid "Generate AT&T-style stubs for Mach-O"
+@@ -8430,7 +8422,7 @@
+
+ #: config/darwin.opt:218
+ msgid "Generate code suitable for fast turn around debugging"
+-msgstr ""
++msgstr "デãƒãƒƒã‚°ã‚’高速ã«è¡Œã†ãŸã‚ã«é©ã—ãŸã‚³ãƒ¼ãƒ‰ã‚’生æˆã™ã‚‹"
+
+ #: config/darwin.opt:227
+ msgid "The earliest MacOS X version on which this program will run"
+@@ -8442,15 +8434,15 @@
+
+ #: config/darwin.opt:235
+ msgid "Generate code for darwin loadable kernel extensions"
+-msgstr ""
++msgstr "darwin ロードå¯èƒ½ã‚«ãƒ¼ãƒãƒ«æ‹¡å¼µç”¨ã®ã‚³ãƒ¼ãƒ‰ã‚’生æˆã™ã‚‹"
+
+ #: config/darwin.opt:239
+ msgid "Generate code for the kernel or loadable kernel extensions"
+-msgstr ""
++msgstr "カーãƒãƒ«ç”¨ã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ‰å¯èƒ½ã‚«ãƒ¼ãƒãƒ«æ‹¡å¼µç”¨ã®ã‚³ãƒ¼ãƒ‰ã‚’生æˆã™ã‚‹"
+
+ #: config/darwin.opt:243
+ msgid "-iframework <dir>\tAdd <dir> to the end of the system framework include path"
+-msgstr ""
++msgstr "-iframework <dir>\t<dir> ã‚’ã‚·ã‚¹ãƒ†ãƒ ãƒ•ãƒ¬ãƒ¼ãƒ ãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãƒ‘ã‚¹ã®æœ«å°¾ã«åŠ ãˆã‚‹"
+
+ #: config/lynx.opt:23
+ msgid "Support legacy multi-threading"
+@@ -8737,7 +8729,6 @@
+ msgstr ""
+
+ #: config/microblaze/microblaze.opt:92
+-#, fuzzy
+ msgid "Use hardware floating point conversion instructions"
+ msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æµ®å‹•å°æ•°ç‚¹å¤‰æ›å‘½ä»¤ã‚’使用ã™ã‚‹"
+
+@@ -8862,7 +8853,7 @@
+
+ #: c-family/c.opt:249
+ msgid "-MT <target>\tAdd an unquoted target"
+-msgstr ""
++msgstr "-MT <target>\tターゲット (引用符を付ã‘ãªã„) を追加ã™ã‚‹"
+
+ #: c-family/c.opt:253
+ msgid "Do not generate #line directives"
+@@ -8898,11 +8889,11 @@
+
+ #: c-family/c.opt:288
+ msgid "Warn about C constructs that are not in the common subset of C and C++"
+-msgstr ""
++msgstr "C 㨠C++ ã®å…±é€šéƒ¨åˆ†é›†åˆã§ã¯ç„¡ã„ C æ§‹æ–‡ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
+
+ #: c-family/c.opt:292
+ msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 200x"
+-msgstr ""
++msgstr "ISO C++ 1998 㨠ISO C++ 200x ã§æ„味ãŒç•°ãªã‚‹ C++ æ§‹æ–‡ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
+
+ #: c-family/c.opt:296
+ msgid "Warn about casts which discard qualifiers"
+@@ -8962,7 +8953,7 @@
+
+ #: c-family/c.opt:352
+ msgid "Warn about stray tokens after #elif and #endif"
+-msgstr ""
++msgstr "#elif ãŠã‚ˆã³ #endif ã®å¾Œã«ã‚ã‚‹ã¯ãれãŸãƒˆãƒ¼ã‚¯ãƒ³ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
+
+ #: c-family/c.opt:356
+ msgid "Warn about comparison of different enum types"
+@@ -8977,9 +8968,8 @@
+ msgstr "æµ®å‹•å°æ•°ç‚¹æ•°ã®ç­‰ä¾¡æ¯”較ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
+
+ #: c-family/c.opt:372
+-#, fuzzy
+ msgid "Warn about printf/scanf/strftime/strfmon format string anomalies"
+-msgstr "printf/scanf/strftime/strfmon å½¢å¼ã®å¤‰å‰‡çš„ãªã‚‚ã®ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
++msgstr "printf/scanf/strftime/strfmon æ›¸å¼æ–‡å­—列異常ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
+
+ #: c-family/c.opt:376
+ msgid "Warn if passing too many arguments to a function for its format string"
+@@ -8998,9 +8988,8 @@
+ msgstr "セキュリティå•題ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚る書å¼é–¢æ•°ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
+
+ #: c-family/c.opt:392
+-#, fuzzy
+ msgid "Warn about strftime formats yielding 2-digit years"
+-msgstr "strftime å½¢å¼ãŒäºŒæ¡ã§å¹´ã‚’表ã—ã¦ã„る時ã®è­¦å‘Šã—ãªã„"
++msgstr "strftime 書å¼ãŒ 2 æ¡ã®å¹´ã®å ´åˆã«è­¦å‘Šã™ã‚‹"
+
+ #: c-family/c.opt:396
+ msgid "Warn about zero-length formats"
+@@ -9409,7 +9398,7 @@
+
+ #: c-family/c.opt:823
+ msgid "Don't emit dllexported inline functions unless needed"
+-msgstr ""
++msgstr "å¿…è¦ãŒç„¡ã„é™ã‚Š dllexported インライン関数を発行ã—ãªã„"
+
+ #: c-family/c.opt:830
+ msgid "Allow implicit conversions between vectors with differing numbers of subparts and/or differing element types."
+@@ -9501,7 +9490,7 @@
+
+ #: c-family/c.opt:942
+ msgid "Generate run time type descriptor information"
+-msgstr ""
++msgstr "å®Ÿè¡Œæ™‚åž‹è¨˜è¿°å­æƒ…報を生æˆã™ã‚‹"
+
+ #: c-family/c.opt:946
+ msgid "Use the same size for double as for float"
+@@ -9889,19 +9878,16 @@
+ msgstr "関数㌠__attribute__((pure)) ã®å€™è£œã¨ãªã‚Šãã†ãªå ´åˆã«è­¦å‘Šã™ã‚‹"
+
+ #: common.opt:608
+-#, fuzzy
+ msgid "Warn about enumerated switches, with no default, missing a case"
+-msgstr "列挙定数㮠switch ã§ case æŒ‡å®šãŒæ¬ ã‘ã¦ã„ã‚‹ã‚‚ã®ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
++msgstr "列挙定数を使用ã—㟠switch 文㧠default æ–‡ãŒç„¡ã„ã‹ç‰¹å®šã® case ãŒç„¡ã„å ´åˆã«è­¦å‘Šã™ã‚‹"
+
+ #: common.opt:612
+-#, fuzzy
+ msgid "Warn about enumerated switches missing a \"default:\" statement"
+-msgstr "列挙定数㮠switch ã§ case æŒ‡å®šãŒæ¬ ã‘ã¦ã„ã‚‹ã‚‚ã®ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
++msgstr "列挙定数を使用ã—㟠switch 文㧠\"default:\" æ–‡ãŒç„¡ã„å ´åˆã«è­¦å‘Šã™ã‚‹"
+
+ #: common.opt:616
+-#, fuzzy
+ msgid "Warn about all enumerated switches missing a specific case"
+-msgstr "列挙定数㮠switch ã§ case æŒ‡å®šãŒæ¬ ã‘ã¦ã„ã‚‹ã‚‚ã®ã«é–¢ã—ã¦è­¦å‘Šã™ã‚‹"
++msgstr "列挙定数を使用ã—㟠switch æ–‡ã§ç‰¹å®šã® case ãŒç„¡ã„å ´åˆã«è­¦å‘Šã™ã‚‹"
+
+ #: common.opt:620
+ msgid "Do not suppress warnings from system headers"
+@@ -10000,9 +9986,8 @@
+ msgstr "自動増加/減少命令を生æˆã™ã‚‹"
+
+ #: common.opt:821
+-#, fuzzy
+ msgid "Generate code to check bounds before indexing arrays"
+-msgstr "é…åˆ—ã®æ·»å­—ã¨æ·»å­—境界を検査ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’生æˆã™ã‚‹"
++msgstr "é…åˆ—ã®æ·»ãˆå­—を使用ã™ã‚‹å‰ã«å¢ƒç•Œæ¤œæŸ»ã‚’行ã†ã‚³ãƒ¼ãƒ‰ã‚’生æˆã™ã‚‹"
+
+ #: common.opt:825
+ #, fuzzy
+@@ -10043,7 +10028,7 @@
+
+ #: common.opt:864
+ msgid "Looks for opportunities to reduce stack adjustments and stack references."
+-msgstr ""
++msgstr "スタック調整ãŠã‚ˆã³ã‚¹ã‚¿ãƒƒã‚¯å‚照を削減ã™ã‚‹æ©Ÿä¼šã‚’探ã™"
+
+ #: common.opt:868
+ msgid "Do not put uninitialized globals in the common section"
+@@ -10058,18 +10043,16 @@
+ msgstr ""
+
+ #: common.opt:884
+-#, fuzzy
+ msgid "Perform comparison elimination after register allocation has finished"
+-msgstr "グローãƒãƒ«å…±é€šéƒ¨åˆ†å¼ã‚’除去ã™ã‚‹"
++msgstr "レジスタã¯ä½ç½®ãŒå®Œäº†ã—ãŸå¾Œã«æ¯”較ã®é™¤åŽ»ã‚’è¡Œã†"
+
+ #: common.opt:888
+ msgid "Do not perform optimizations increasing noticeably stack usage"
+-msgstr ""
++msgstr "スタック使用é‡ã‚’è‘—ã—ã増加ã•ã›ã‚‹æœ€é©åŒ–を行ã‚ãªã„"
+
+ #: common.opt:892
+-#, fuzzy
+ msgid "Perform a register copy-propagation optimization pass"
+-msgstr "最é©åŒ–éŽç¨‹ã®ãƒ¬ã‚¸ã‚¹ã‚¿ã¤ã‘変ãˆã‚’行ãªã†"
++msgstr ""
+
+ #: common.opt:896
+ msgid "Perform cross-jumping optimization"
+@@ -10101,7 +10084,7 @@
+
+ #: common.opt:928
+ msgid "Map one directory name to another in debug information"
+-msgstr ""
++msgstr "デãƒãƒƒã‚°æƒ…報内ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼åã‚’ä»–ã®ã‚‚ã®ã«ãƒžãƒƒãƒ—ã™ã‚‹"
+
+ #: common.opt:934
+ msgid "Defer popping functions args from stack until later"
+@@ -10116,9 +10099,8 @@
+ msgstr "ç„¡æ„味㪠null ãƒã‚¤ãƒ³ã‚¿æ¤œæŸ»ã‚’削除ã™ã‚‹"
+
+ #: common.opt:946
+-#, fuzzy
+ msgid "Try to convert virtual calls to direct ones."
+-msgstr "リンカ㌠PIC 呼ã³å‡ºã—を直接呼ã³å‡ºã—ã«å¤‰æ›´ã™ã‚‹ã“ã¨ã‚’許å¯ã™ã‚‹ã‚ˆã†ã«è©¦ã¿ã‚‹"
++msgstr "仮想呼ã³å‡ºã—を直接呼ã³å‡ºã—ã«å¤‰æ›ã™ã‚‹ã“ã¨ã‚’試ã¿ã‚‹"
+
+ #: common.opt:950
+ #, fuzzy
+@@ -10137,7 +10119,7 @@
+
+ #: common.opt:978
+ msgid "-fdump-final-insns=filename\tDump to filename the insns at the end of translation"
+-msgstr ""
++msgstr "-fdump-final-insns=filename\t翻訳終了時㫠filename ã¸å‘½ä»¤ã‚’ダンプã™ã‚‹"
+
+ #: common.opt:982
+ msgid "-fdump-go-spec=filename\tWrite all declarations to file as Go code"
+@@ -10173,7 +10155,7 @@
+
+ #: common.opt:1014 common.opt:1018
+ msgid "Perform unused type elimination in debug info"
+-msgstr ""
++msgstr "デãƒãƒƒã‚°æƒ…報内ã§ä½¿ç”¨ã•れã¦ã„ãªã„åž‹ã®é™¤åŽ»ã‚’è¡Œã†"
+
+ #: common.opt:1022
+ msgid "Do not suppress C++ class debug information."
+@@ -10181,25 +10163,24 @@
+
+ #: common.opt:1026
+ msgid "Generate debug information to support Identical Code Folding (ICF)"
+-msgstr ""
++msgstr "Identical Code Folding (ICF) をサãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã®ãƒ‡ãƒãƒƒã‚°æƒ…報を生æˆã™ã‚‹"
+
+ #: common.opt:1030
+ msgid "Enable exception handling"
+ msgstr "例外処ç†ã‚’有効ã«ã™ã‚‹"
+
+ #: common.opt:1034
+-#, fuzzy
+ msgid "Perform a number of minor, expensive optimizations"
+-msgstr "目立ãŸãªã„ã€ã‚³ã‚¹ãƒˆã®ã‹ã‹ã‚‹æœ€é©åŒ–を行ãªã†"
++msgstr "多ãã®ã€ç›®ç«‹ãŸãªã„ãŒã‚³ã‚¹ãƒˆãŒé«˜ã„最é©åŒ–を行ã†"
+
+ #: common.opt:1038
+ msgid "-fexcess-precision=[fast|standard]\tSpecify handling of excess floating-point precision"
+-msgstr ""
++msgstr "-fexcess-precision=[fast|standard]\tä½™åˆ†ãªæµ®å‹•å°æ•°ç‚¹ç²¾åº¦ã®å–り扱ã„を指定ã™ã‚‹"
+
+ #: common.opt:1041
+ #, c-format
+ msgid "unknown excess precision style %qs"
+-msgstr ""
++msgstr "䏿˜Žãªä½™åˆ†ãªç²¾åº¦ã‚¹ã‚¿ã‚¤ãƒ« %qs ã§ã™"
+
+ #: common.opt:1054
+ msgid "Assume no NaNs or infinities are generated"
+@@ -10222,52 +10203,45 @@
+ msgstr ""
+
+ #: common.opt:1077
+-#, fuzzy, c-format
++#, c-format
+ msgid "unknown floating point contraction style %qs"
+-msgstr "æµ®å‹•å°æ•°ç‚¹å®šæ•°ã‚’ TOC 内ã«é…ç½®ã™ã‚‹"
++msgstr "䏿˜Žãªæµ®å‹•å°æ•°çŸ­ç¸®å½¢ %qs ã§ã™"
+
+ #: common.opt:1094
+ msgid "Allow function addresses to be held in registers"
+ msgstr "é–¢æ•°ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’ãƒ¬ã‚¸ã‚¹ã‚¿ã«æŒãŸã›ã‚‹äº‹ã‚’許å¯ã™ã‚‹"
+
+ #: common.opt:1098
+-#, fuzzy
+ msgid "Place each function into its own section"
+-msgstr "å„々ã®é–¢æ•°ã‚’ãれ自身ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«é…ç½®ã™ã‚‹"
++msgstr "ãれãžã‚Œã®é–¢æ•°ã‚’ãれ自身ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«é…ç½®ã™ã‚‹"
+
+ #: common.opt:1102
+-#, fuzzy
+ msgid "Perform global common subexpression elimination"
+-msgstr "グローãƒãƒ«å…±é€šéƒ¨åˆ†å¼ã‚’除去ã™ã‚‹"
++msgstr "大域共通部分å¼ã®é™¤åŽ»ã‚’è¡Œã†"
+
+ #: common.opt:1106
+-#, fuzzy
+ msgid "Perform enhanced load motion during global common subexpression elimination"
+-msgstr "グローãƒãƒ«å…±é€šéƒ¨åˆ†å¼ã‚’除去ã™ã‚‹"
++msgstr ""
+
+ #: common.opt:1110
+-#, fuzzy
+ msgid "Perform store motion after global common subexpression elimination"
+-msgstr "グローãƒãƒ«å…±é€šéƒ¨åˆ†å¼ã‚’除去ã™ã‚‹"
++msgstr ""
+
+ #: common.opt:1114
+ msgid "Perform redundant load after store elimination in global common subexpression"
+ msgstr ""
+
+ #: common.opt:1119
+-#, fuzzy
+ msgid "Perform global common subexpression elimination after register allocation"
+-msgstr "グローãƒãƒ«å…±é€šéƒ¨åˆ†å¼ã‚’除去ã™ã‚‹"
++msgstr "レジスタé…置後ã«å¤§åŸŸå…±é€šéƒ¨åˆ†å¼ã®é™¤åŽ»ã‚’è¡Œã†"
+
+ #: common.opt:1125
+-#, fuzzy
+ msgid "Enable in and out of Graphite representation"
+-msgstr "自動テンプレート実体化を有効ã«ã™ã‚‹"
++msgstr ""
+
+ #: common.opt:1129
+-#, fuzzy
+ msgid "Enable Graphite Identity transformation"
+-msgstr "呼ã³å‡ºã—グラフ情報をé€å‡ºã™ã‚‹"
++msgstr ""
+
+ #: common.opt:1133
+ msgid "Mark all loops as parallel"
+@@ -10306,9 +10280,8 @@
+ msgstr ""
+
+ #: common.opt:1173
+-#, fuzzy
+ msgid "Perform conversion of conditional jumps to conditional execution"
+-msgstr "æ¡ä»¶çš„ãªå®Ÿè¡Œã¸ã®å¤‰æ›´ã®ãŸã‚ã®é–¾å€¤ã‚’変更ã™ã‚‹"
++msgstr ""
+
+ #: common.opt:1177
+ msgid "Convert conditional jumps in innermost loops to branchless equivalents"
+@@ -10376,13 +10349,12 @@
+ msgstr ""
+
+ #: common.opt:1253
+-#, fuzzy
+ msgid "Discover pure and const functions"
+-msgstr "使ã‚れãªã„仮想関数を切りæ¨ã¦ã‚‹"
++msgstr "純粋ãŠã‚ˆã³å®šæ•°é–¢æ•°ã‚’見ã¤ã‘ã‚‹"
+
+ #: common.opt:1257
+ msgid "Discover readonly and non addressable static variables"
+-msgstr ""
++msgstr "読ã¿å–り専用ãŠã‚ˆã³ã‚¢ãƒ‰ãƒ¬ã‚¹ä»˜ã‘ã§ããªã„é™çš„変数を見ã¤ã‘ã‚‹"
+
+ #: common.opt:1261
+ msgid "Perform matrix layout flattening and transposing based"
+@@ -10415,9 +10387,8 @@
+ msgstr ""
+
+ #: common.opt:1305
+-#, fuzzy
+ msgid "Share slots for saving different hard registers."
+-msgstr "引数レジスタã«ãƒ­ãƒ¼ã‚«ãƒ«ã®ã‚‚ã®ã‚’æ ¼ç´ã™ã‚‹"
++msgstr ""
+
+ #: common.opt:1309
+ msgid "Share stack slots for spilled pseudo-registers."
+@@ -10621,19 +10592,19 @@
+
+ #: common.opt:1521
+ msgid "Enable basic program profiling code"
+-msgstr ""
++msgstr "基本プログラムプロファイリングコードを有効ã«ã™ã‚‹"
+
+ #: common.opt:1525
+ msgid "Insert arc-based program profiling code"
+-msgstr ""
++msgstr "円弧ベースプログラムプロファイリングコードを挿入ã™ã‚‹"
+
+ #: common.opt:1529
+ msgid "Set the top-level directory for storing the profile data."
+-msgstr ""
++msgstr "プロファイルデータä¿å­˜ç”¨ã®æœ€ä¸Šä½ãƒ‡ã‚£ãƒ¬ã‚¯ãƒªãƒ¼ã‚’設定ã™ã‚‹"
+
+ #: common.opt:1534
+ msgid "Enable correction of flow inconsistent profile data input"
+-msgstr ""
++msgstr "フロー一貫性ãŒç„¡ã„データ入力ã®è¨‚正を有効ã«ã™ã‚‹"
+
+ #: common.opt:1538
+ msgid "Enable common options for generating profile info for profile feedback directed optimizations"
+@@ -10653,7 +10624,7 @@
+
+ #: common.opt:1554
+ msgid "Insert code to profile values of expressions"
+-msgstr ""
++msgstr "å¼ã®å€¤ã‚’プロファイルã™ã‚‹ãŸã‚ã®ã‚³ãƒ¼ãƒ‰ã‚’挿入ã™ã‚‹"
+
+ #: common.opt:1561
+ msgid "-frandom-seed=<string>\tMake compile reproducible using <string>"
+@@ -11836,7 +11807,7 @@
+ #: c-decl.c:1150
+ #, gcc-internal-format
+ msgid "nested function %q+D declared but never defined"
+-msgstr ""
++msgstr "入れå­ã«ãªã£ãŸé–¢æ•° %q+D ãŒå®£è¨€ã•れã¾ã—ãŸãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“"
+
+ #: c-decl.c:1162
+ #, gcc-internal-format
+@@ -11893,7 +11864,7 @@
+ #: c-decl.c:1613
+ #, gcc-internal-format
+ msgid "prototype for %q+D follows non-prototype definition"
+-msgstr ""
++msgstr "éžãƒ—ロトタイプ定義ã«ç¶šã„㦠%q+D 用ã®ãƒ—ロトタイプãŒã‚りã¾ã™"
+
+ #: c-decl.c:1628
+ #, gcc-internal-format
+@@ -11969,9 +11940,9 @@
+ msgstr "%q+D ãŒç•°ãªã‚‹åž‹ã§å†å®šç¾©ã•れã¾ã—ãŸ"
+
+ #: c-decl.c:1818
+-#, fuzzy, gcc-internal-format
++#, gcc-internal-format
+ msgid "redefinition of typedef %q+D with variably modified type"
+-msgstr "%q+D ãŒç•°ãªã‚‹åž‹ã§å†å®šç¾©ã•れã¾ã—ãŸ"
++msgstr ""
+
+ #: c-decl.c:1825
+ #, gcc-internal-format
+@@ -12016,17 +11987,17 @@
+ #: c-decl.c:2001
+ #, gcc-internal-format
+ msgid "extern declaration of %q+D follows declaration with no linkage"
+-msgstr ""
++msgstr "リンク無ã—宣言ã®å¾Œã« %q+D ã® extern 宣言ãŒç¶šã„ã¦ã„ã¾ã™"
+
+ #: c-decl.c:2037
+ #, gcc-internal-format
+ msgid "declaration of %q+D with no linkage follows extern declaration"
+-msgstr ""
++msgstr "extern 宣言ã®å¾Œã«ãƒªãƒ³ã‚¯ç„¡ã— %q+D ã®å®£è¨€ãŒç¶šã„ã¦ã„ã¾ã™"
+
+ #: c-decl.c:2043
+ #, gcc-internal-format
+ msgid "redeclaration of %q+D with no linkage"
+-msgstr ""
++msgstr "リンク無㗠%q+D ã®å†å®šç¾©ã§ã™"
+
+ #: c-decl.c:2069
+ #, gcc-internal-format
+@@ -12354,7 +12325,7 @@
+ #: c-decl.c:4614
+ #, gcc-internal-format
+ msgid "defining a type in a compound literal is invalid in C++"
+-msgstr ""
++msgstr "複åˆãƒªãƒ†ãƒ©ãƒ«å†…ã§ã®åž‹å®šç¾©ã¯ C++ ã§ã¯ç„¡åйã§ã™"
+
+ #: c-decl.c:4666 c-decl.c:4681
+ #, gcc-internal-format
+@@ -13393,23 +13364,23 @@
+ #: c-parser.c:1829
+ #, gcc-internal-format
+ msgid "expression in static assertion is not an integer"
+-msgstr ""
++msgstr "é™çš„アサーション内ã®å¼ãŒæ•´æ•°ã§ã¯ã‚りã¾ã›ã‚“"
+
+ #: c-parser.c:1836
+ #, gcc-internal-format
+ msgid "expression in static assertion is not an integer constant expression"
+-msgstr ""
++msgstr "é™çš„アサーション内ã®å¼ãŒæ•´æ•°å®šæ•°å¼ã§ã¯ã‚りã¾ã›ã‚“"
+
+ #: c-parser.c:1841
+ #, gcc-internal-format
+ msgid "expression in static assertion is not constant"
+-msgstr ""
++msgstr "é™çš„アサーション内ã®å¼ãŒå®šæ•°ã§ã¯ã‚りã¾ã›ã‚“"
+
+ #. Report the error.
+ #: c-parser.c:1846 cp/semantics.c:4719
+ #, gcc-internal-format
+ msgid "static assertion failed: %E"
+-msgstr ""
++msgstr "é™çš„アサーションã«å¤±æ•—ã—ã¾ã—ãŸ: %E"
+
+ #: c-parser.c:2207 c-parser.c:3063 c-parser.c:3709 c-parser.c:3983
+ #: c-parser.c:5084 c-parser.c:5175 c-parser.c:5800 c-parser.c:6083
+@@ -14125,12 +14096,12 @@
+ #: c-typeck.c:3578
+ #, gcc-internal-format
+ msgid "increment of enumeration value is invalid in C++"
+-msgstr "列挙値ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã¯ C++ ã§ã¯ç„¡åйã§ã™"
++msgstr "列挙値ã®å¢—分㯠C++ ã§ã¯ç„¡åйã§ã™"
+
+ #: c-typeck.c:3581
+ #, gcc-internal-format
+ msgid "decrement of enumeration value is invalid in C++"
+-msgstr "列挙値ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã¯ C++ ã§ã¯ç„¡åйã§ã™"
++msgstr "åˆ—æŒ™å€¤ã®æ¸›åˆ†ã¯ C++ ã§ã¯ç„¡åйã§ã™"
+
+ #: c-typeck.c:3594
+ #, gcc-internal-format
+@@ -14140,22 +14111,22 @@
+ #: c-typeck.c:3613 c-typeck.c:3645
+ #, gcc-internal-format
+ msgid "wrong type argument to increment"
+-msgstr "インクリメントã™ã‚‹å¼•æ•°ã®åž‹ãŒé–“é•ã£ã¦ã„ã¾ã™"
++msgstr "増分ã™ã‚‹å¼•æ•°ã®åž‹ãŒé–“é•ã£ã¦ã„ã¾ã™"
+
+ #: c-typeck.c:3615 c-typeck.c:3648
+ #, gcc-internal-format
+ msgid "wrong type argument to decrement"
+-msgstr "デクリメントã™ã‚‹å¼•æ•°ã®åž‹ãŒé–“é•ã£ã¦ã„ã¾ã™"
++msgstr "減分ã™ã‚‹å¼•æ•°ã®åž‹ãŒé–“é•ã£ã¦ã„ã¾ã™"
+
+ #: c-typeck.c:3635
+ #, gcc-internal-format
+ msgid "increment of pointer to unknown structure"
+-msgstr "䏿˜Žãªæ§‹é€ ä½“ã¸ã®ãƒã‚¤ãƒ³ã‚¿ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "䏿˜Žãªæ§‹é€ ä½“ã¸ã®ãƒã‚¤ãƒ³ã‚¿ã®å¢—分ã§ã™"
+
+ #: c-typeck.c:3638
+ #, gcc-internal-format
+ msgid "decrement of pointer to unknown structure"
+-msgstr "䏿˜Žãªæ§‹é€ ä½“ã¸ã®ãƒã‚¤ãƒ³ã‚¿ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "䏿˜Žãªæ§‹é€ ä½“ã¸ã®ãƒã‚¤ãƒ³ã‚¿ã®æ¸›åˆ†ã§ã™"
+
+ #: c-typeck.c:3722
+ #, gcc-internal-format
+@@ -14170,12 +14141,12 @@
+ #: c-typeck.c:3895 c-family/c-common.c:8658
+ #, gcc-internal-format
+ msgid "increment of read-only location %qE"
+-msgstr "読ã¿å–り専用ä½ç½® %qE ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用ä½ç½® %qE ã®å¢—分ã§ã™"
+
+ #: c-typeck.c:3898 c-family/c-common.c:8659
+ #, gcc-internal-format
+ msgid "decrement of read-only location %qE"
+-msgstr "読ã¿å–り専用ä½ç½® %qE ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用ä½ç½® %qE ã®æ¸›åˆ†ã§ã™"
+
+ #: c-typeck.c:3939
+ #, gcc-internal-format
+@@ -19787,12 +19758,12 @@
+ #: c-family/c-common.c:8611
+ #, gcc-internal-format
+ msgid "increment of member %qD in read-only object"
+-msgstr "読ã¿å–り専用オブジェクト内ã®ãƒ¡ãƒ³ãƒ %qD ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用オブジェクト内ã®ãƒ¡ãƒ³ãƒ %qD ã®å¢—分ã§ã™"
+
+ #: c-family/c-common.c:8613
+ #, gcc-internal-format
+ msgid "decrement of member %qD in read-only object"
+-msgstr "読ã¿å–り専用オブジェクト内ã®ãƒ¡ãƒ³ãƒ %qD ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用オブジェクト内ã®ãƒ¡ãƒ³ãƒ %qD ã®æ¸›åˆ†ã§ã™"
+
+ #: c-family/c-common.c:8615
+ #, gcc-internal-format
+@@ -19807,12 +19778,12 @@
+ #: c-family/c-common.c:8620
+ #, gcc-internal-format
+ msgid "increment of read-only member %qD"
+-msgstr "読ã¿å–り専用メンム%qD ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用メンム%qD ã®å¢—分ã§ã™"
+
+ #: c-family/c-common.c:8621
+ #, gcc-internal-format
+ msgid "decrement of read-only member %qD"
+-msgstr "読ã¿å–り専用メンム%qD ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用メンム%qD ã®æ¸›åˆ†ã§ã™"
+
+ #: c-family/c-common.c:8622
+ #, gcc-internal-format
+@@ -19827,12 +19798,12 @@
+ #: c-family/c-common.c:8627
+ #, gcc-internal-format
+ msgid "increment of read-only variable %qD"
+-msgstr "読ã¿å–り専用変数 %qD ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用変数 %qD ã®å¢—分ã§ã™"
+
+ #: c-family/c-common.c:8628
+ #, gcc-internal-format
+ msgid "decrement of read-only variable %qD"
+-msgstr "読ã¿å–り専用変数 %qD ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用変数 %qD ã®æ¸›åˆ†ã§ã™"
+
+ #: c-family/c-common.c:8629
+ #, gcc-internal-format
+@@ -19847,12 +19818,12 @@
+ #: c-family/c-common.c:8633
+ #, gcc-internal-format
+ msgid "increment of read-only parameter %qD"
+-msgstr "読ã¿å–り専用パラメータ %qD ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用パラメータ %qD ã®å¢—分ã§ã™"
+
+ #: c-family/c-common.c:8634
+ #, gcc-internal-format
+ msgid "decrement of read-only parameter %qD"
+-msgstr "読ã¿å–り専用パラメータ %qD ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用パラメータ %qD ã®æ¸›åˆ†ã§ã™"
+
+ #: c-family/c-common.c:8635
+ #, gcc-internal-format
+@@ -19867,12 +19838,12 @@
+ #: c-family/c-common.c:8642
+ #, gcc-internal-format
+ msgid "increment of read-only named return value %qD"
+-msgstr "読ã¿å–り専用åå‰ä»˜ã戻り値 %qD ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用åå‰ä»˜ã戻り値 %qD ã®å¢—分ã§ã™"
+
+ #: c-family/c-common.c:8644
+ #, gcc-internal-format
+ msgid "decrement of read-only named return value %qD"
+-msgstr "読ã¿å–り専用åå‰ä»˜ã戻り値 %qD ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "読ã¿å–り専用åå‰ä»˜ã戻り値 %qD ã®æ¸›åˆ†ã§ã™"
+
+ #: c-family/c-common.c:8646
+ #, gcc-internal-format
+@@ -19887,12 +19858,12 @@
+ #: c-family/c-common.c:8652
+ #, gcc-internal-format
+ msgid "increment of function %qD"
+-msgstr "関数 %qD ã®ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "関数 %qD ã®å¢—分ã§ã™"
+
+ #: c-family/c-common.c:8653
+ #, gcc-internal-format
+ msgid "decrement of function %qD"
+-msgstr "関数 %qD ã®ãƒ‡ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã§ã™"
++msgstr "関数 %qD ã®æ¸›åˆ†ã§ã™"
+
+ #: c-family/c-common.c:8654
+ #, gcc-internal-format
+@@ -19912,12 +19883,12 @@
+ #: c-family/c-common.c:8677
+ #, gcc-internal-format
+ msgid "lvalue required as increment operand"
+-msgstr "インクリメントã®è¢«æ¼”ç®—å­ã¨ã—ã¦å·¦è¾ºå€¤ãŒå¿…è¦ã§ã™"
++msgstr "増分ã®è¢«æ¼”ç®—å­ã¨ã—ã¦å·¦è¾ºå€¤ãŒå¿…è¦ã§ã™"
+
+ #: c-family/c-common.c:8680
+ #, gcc-internal-format
+ msgid "lvalue required as decrement operand"
+-msgstr "デクリメントã®è¢«æ¼”ç®—å­ã¨ã—ã¦å·¦è¾ºå€¤ãŒå¿…è¦ã§ã™"
++msgstr "減分ã®è¢«æ¼”ç®—å­ã¨ã—ã¦å·¦è¾ºå€¤ãŒå¿…è¦ã§ã™"
+
+ #: c-family/c-common.c:8683
+ #, gcc-internal-format
+@@ -20556,12 +20527,12 @@
+ #: c-family/c-omp.c:375 cp/semantics.c:4431
+ #, gcc-internal-format
+ msgid "missing increment expression"
+-msgstr "インクリメントå¼ãŒã‚りã¾ã›ã‚“"
++msgstr "増分å¼ãŒã‚りã¾ã›ã‚“"
+
+ #: c-family/c-omp.c:444 cp/semantics.c:4287
+ #, gcc-internal-format
+ msgid "invalid increment expression"
+-msgstr "無効ãªã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆå¼ã§ã™"
++msgstr "無効ãªå¢—分å¼ã§ã™"
+
+ #: c-family/c-opts.c:303
+ #, gcc-internal-format
+@@ -20571,7 +20542,7 @@
+ #: c-family/c-opts.c:306
+ #, gcc-internal-format
+ msgid "obsolete option -I- used, please use -iquote instead"
+-msgstr "廃止ã‚れãŸã‚ªãƒ—ション -I- ãŒä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚代ã‚り㫠-iquote を使用ã—ã¦ãã ã•ã„"
++msgstr "廃止ã•れãŸã‚ªãƒ—ション -I- ãŒä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚代ã‚り㫠-iquote を使用ã—ã¦ãã ã•ã„"
+
+ #: c-family/c-opts.c:486
+ #, gcc-internal-format
+Index: gcc/tree-ssa-forwprop.c
+===================================================================
+--- a/src/gcc/tree-ssa-forwprop.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/tree-ssa-forwprop.c (.../branches/gcc-4_6-branch)
+@@ -872,7 +872,7 @@
+ TREE_TYPE (gimple_assign_rhs1 (use_stmt))))
+ {
+ tree *def_rhs_basep = &TREE_OPERAND (def_rhs, 0);
+- tree new_offset, new_base, saved;
++ tree new_offset, new_base, saved, new_lhs;
+ while (handled_component_p (*def_rhs_basep))
+ def_rhs_basep = &TREE_OPERAND (*def_rhs_basep, 0);
+ saved = *def_rhs_basep;
+@@ -891,9 +891,12 @@
+ *def_rhs_basep = build2 (MEM_REF, TREE_TYPE (*def_rhs_basep),
+ new_base, new_offset);
+ TREE_THIS_VOLATILE (*def_rhs_basep) = TREE_THIS_VOLATILE (lhs);
++ TREE_SIDE_EFFECTS (*def_rhs_basep) = TREE_SIDE_EFFECTS (lhs);
+ TREE_THIS_NOTRAP (*def_rhs_basep) = TREE_THIS_NOTRAP (lhs);
+- gimple_assign_set_lhs (use_stmt,
+- unshare_expr (TREE_OPERAND (def_rhs, 0)));
++ new_lhs = unshare_expr (TREE_OPERAND (def_rhs, 0));
++ gimple_assign_set_lhs (use_stmt, new_lhs);
++ TREE_THIS_VOLATILE (new_lhs) = TREE_THIS_VOLATILE (lhs);
++ TREE_SIDE_EFFECTS (new_lhs) = TREE_SIDE_EFFECTS (lhs);
+ *def_rhs_basep = saved;
+ tidy_after_forward_propagate_addr (use_stmt);
+ /* Continue propagating into the RHS if this was not the
+@@ -953,7 +956,7 @@
+ TREE_TYPE (TREE_OPERAND (def_rhs, 0))))
+ {
+ tree *def_rhs_basep = &TREE_OPERAND (def_rhs, 0);
+- tree new_offset, new_base, saved;
++ tree new_offset, new_base, saved, new_rhs;
+ while (handled_component_p (*def_rhs_basep))
+ def_rhs_basep = &TREE_OPERAND (*def_rhs_basep, 0);
+ saved = *def_rhs_basep;
+@@ -972,9 +975,12 @@
+ *def_rhs_basep = build2 (MEM_REF, TREE_TYPE (*def_rhs_basep),
+ new_base, new_offset);
+ TREE_THIS_VOLATILE (*def_rhs_basep) = TREE_THIS_VOLATILE (rhs);
++ TREE_SIDE_EFFECTS (*def_rhs_basep) = TREE_SIDE_EFFECTS (rhs);
+ TREE_THIS_NOTRAP (*def_rhs_basep) = TREE_THIS_NOTRAP (rhs);
+- gimple_assign_set_rhs1 (use_stmt,
+- unshare_expr (TREE_OPERAND (def_rhs, 0)));
++ new_rhs = unshare_expr (TREE_OPERAND (def_rhs, 0));
++ gimple_assign_set_rhs1 (use_stmt, new_rhs);
++ TREE_THIS_VOLATILE (new_rhs) = TREE_THIS_VOLATILE (rhs);
++ TREE_SIDE_EFFECTS (new_rhs) = TREE_SIDE_EFFECTS (rhs);
+ *def_rhs_basep = saved;
+ fold_stmt_inplace (use_stmt);
+ tidy_after_forward_propagate_addr (use_stmt);
+Index: gcc/varasm.c
+===================================================================
+--- a/src/gcc/varasm.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/varasm.c (.../branches/gcc-4_6-branch)
+@@ -6751,11 +6751,14 @@
+ /* A non-decl is an entry in the constant pool. */
+ if (!DECL_P (exp))
+ local_p = true;
+- /* Weakrefs may not bind locally, even though the weakref itself is
+- always static and therefore local.
+- FIXME: We can resolve this more curefuly by looking at the weakref
+- alias. */
+- else if (lookup_attribute ("weakref", DECL_ATTRIBUTES (exp)))
++ /* Weakrefs may not bind locally, even though the weakref itself is always
++ static and therefore local. Similarly, the resolver for ifunc functions
++ might resolve to a non-local function.
++ FIXME: We can resolve the weakref case more curefuly by looking at the
++ weakref alias. */
++ else if (lookup_attribute ("weakref", DECL_ATTRIBUTES (exp))
++ || (TREE_CODE (exp) == FUNCTION_DECL
++ && lookup_attribute ("ifunc", DECL_ATTRIBUTES (exp))))
+ local_p = false;
+ /* Static variables are always local. */
+ else if (! TREE_PUBLIC (exp))
+Index: gcc/sched-deps.c
+===================================================================
+--- a/src/gcc/sched-deps.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/sched-deps.c (.../branches/gcc-4_6-branch)
+@@ -2687,7 +2687,11 @@
+ else
+ sched_analyze_2 (deps, XEXP (link, 0), insn);
+ }
+- if (find_reg_note (insn, REG_SETJMP, NULL))
++ /* Don't schedule anything after a tail call, tail call needs
++ to use at least all call-saved registers. */
++ if (SIBLING_CALL_P (insn))
++ reg_pending_barrier = TRUE_BARRIER;
++ else if (find_reg_note (insn, REG_SETJMP, NULL))
+ reg_pending_barrier = MOVE_BARRIER;
+ }
+
+Index: gcc/tree-object-size.c
+===================================================================
+--- a/src/gcc/tree-object-size.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/tree-object-size.c (.../branches/gcc-4_6-branch)
+@@ -175,7 +175,7 @@
+ unsigned HOST_WIDE_INT sz;
+
+ if (!osi || (object_size_type & 1) != 0
+- || TREE_CODE (pt_var) != SSA_NAME)
++ || TREE_CODE (TREE_OPERAND (pt_var, 0)) != SSA_NAME)
+ {
+ sz = compute_builtin_object_size (TREE_OPERAND (pt_var, 0),
+ object_size_type & ~1);
+Index: gcc/lto-opts.c
+===================================================================
+--- a/src/gcc/lto-opts.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/lto-opts.c (.../branches/gcc-4_6-branch)
+@@ -358,7 +358,7 @@
+ size_t len, l, skip;
+ const char *data, *p;
+ const struct lto_simple_header *header;
+- int32_t opts_offset;
++ int opts_offset;
+ struct lto_input_block ib;
+
+ data = lto_get_section_data (file_data, LTO_section_opts, NULL, &len);
+@@ -379,10 +379,10 @@
+
+ lto_check_version (header->lto_header.major_version,
+ header->lto_header.minor_version);
+-
++
+ LTO_INIT_INPUT_BLOCK (ib, p + opts_offset, 0, header->main_size);
+ input_options (&ib);
+-
++
+ skip = header->main_size + opts_offset;
+ l -= skip;
+ p += skip;
+Index: gcc/c-parser.c
+===================================================================
+--- a/src/gcc/c-parser.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/c-parser.c (.../branches/gcc-4_6-branch)
+@@ -6294,7 +6294,7 @@
+ c_parser_error (parser, "expected identifier");
+ c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
+ "expected %<)%>");
+- expr.value = fold_offsetof (offsetof_ref, NULL_TREE);
++ expr.value = fold_offsetof (offsetof_ref);
+ }
+ break;
+ case RID_CHOOSE_EXPR:
+Index: gcc/config/sparc/sparc.md
+===================================================================
+--- a/src/gcc/config/sparc/sparc.md (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/sparc/sparc.md (.../branches/gcc-4_6-branch)
+@@ -1813,8 +1813,8 @@
+ })
+
+ (define_insn "*movsf_insn"
+- [(set (match_operand:V32 0 "nonimmediate_operand" "=d,f,*r,*r,*r,f,*r,m,m")
+- (match_operand:V32 1 "input_operand" "GY,f,*rRY,Q,S,m,m,f,*rGY"))]
++ [(set (match_operand:V32 0 "nonimmediate_operand" "=d,f, *r,*r,*r,f,*r,m, m")
++ (match_operand:V32 1 "input_operand" "GY,f,*rRY, Q, S,m, m,f,*rGY"))]
+ "TARGET_FPU
+ && (register_operand (operands[0], <V32:MODE>mode)
+ || register_or_zero_operand (operands[1], <V32:MODE>mode))"
+@@ -1861,8 +1861,8 @@
+ ;; when -mno-fpu.
+
+ (define_insn "*movsf_insn_no_fpu"
+- [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,r,r,m")
+- (match_operand:SF 1 "input_operand" "rR,Q,S,m,rG"))]
++ [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,r,r, m")
++ (match_operand:SF 1 "input_operand" "rR,Q,S,m,rG"))]
+ "! TARGET_FPU
+ && (register_operand (operands[0], SFmode)
+ || register_or_zero_operand (operands[1], SFmode))"
+@@ -1948,8 +1948,8 @@
+
+ ;; Be careful, fmovd does not exist when !v9.
+ (define_insn "*movdf_insn_sp32"
+- [(set (match_operand:DF 0 "nonimmediate_operand" "=e,W,U,T,o,e,*r,o,e,o")
+- (match_operand:DF 1 "input_operand" "W#F,e,T,U,G,e,*rFo,*r,o#F,e"))]
++ [(set (match_operand:DF 0 "nonimmediate_operand" "= e,W,U,T,o,e, *r, o, e,o")
++ (match_operand:DF 1 "input_operand" "W#F,e,T,U,G,e,*rFo,*r,o#F,e"))]
+ "TARGET_FPU
+ && ! TARGET_V9
+ && (register_operand (operands[0], DFmode)
+@@ -1969,8 +1969,8 @@
+ (set_attr "length" "*,*,*,*,2,2,2,2,2,2")])
+
+ (define_insn "*movdf_insn_sp32_no_fpu"
+- [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,o,r,o")
+- (match_operand:DF 1 "input_operand" "T,U,G,ro,r"))]
++ [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,o, r,o")
++ (match_operand:DF 1 "input_operand" " T,U,G,ro,r"))]
+ "! TARGET_FPU
+ && ! TARGET_V9
+ && (register_operand (operands[0], DFmode)
+@@ -1986,8 +1986,8 @@
+
+ ;; We have available v9 double floats but not 64-bit integer registers.
+ (define_insn "*movdf_insn_sp32_v9"
+- [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e,e,T,W,U,T,f,*r,o")
+- (match_operand:V64 1 "input_operand" "GY,e,W#F,GY,e,T,U,o#F,*roGYDF,*rGYf"))]
++ [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e, e, T,W,U,T, f, *r, o")
++ (match_operand:V64 1 "input_operand" "GY,e,W#F,GY,e,T,U,o#F,*roFD,*rGYf"))]
+ "TARGET_FPU
+ && TARGET_V9
+ && ! TARGET_ARCH64
+@@ -2009,8 +2009,8 @@
+ (set_attr "fptype" "double,double,*,*,*,*,*,*,*,*")])
+
+ (define_insn "*movdf_insn_sp32_v9_no_fpu"
+- [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,T,r,o")
+- (match_operand:DF 1 "input_operand" "T,U,G,ro,rG"))]
++ [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,T, r, o")
++ (match_operand:DF 1 "input_operand" " T,U,G,ro,rG"))]
+ "! TARGET_FPU
+ && TARGET_V9
+ && ! TARGET_ARCH64
+@@ -2027,8 +2027,8 @@
+
+ ;; We have available both v9 double floats and 64-bit integer registers.
+ (define_insn "*movdf_insn_sp64"
+- [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e,e,W,*r,*r,m,*r")
+- (match_operand:V64 1 "input_operand" "GY,e,W#F,e,*rGY,m,*rGY,DF"))]
++ [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e, e,W, *r,*r, m,*r")
++ (match_operand:V64 1 "input_operand" "GY,e,W#F,e,*rGY, m,*rGY,FD"))]
+ "TARGET_FPU
+ && TARGET_ARCH64
+ && (register_operand (operands[0], <V64:MODE>mode)
+@@ -2047,8 +2047,8 @@
+ (set_attr "fptype" "double,double,*,*,*,*,*,*")])
+
+ (define_insn "*movdf_insn_sp64_no_fpu"
+- [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m")
+- (match_operand:DF 1 "input_operand" "r,m,rG"))]
++ [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r, m")
++ (match_operand:DF 1 "input_operand" "r,m,rG"))]
+ "! TARGET_FPU
+ && TARGET_ARCH64
+ && (register_operand (operands[0], DFmode)
+@@ -2288,8 +2288,8 @@
+ })
+
+ (define_insn "*movtf_insn_sp32"
+- [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,o,U,r")
+- (match_operand:TF 1 "input_operand" "G,oe,GeUr,o,roG"))]
++ [(set (match_operand:TF 0 "nonimmediate_operand" "=b, e, o,U, r")
++ (match_operand:TF 1 "input_operand" " G,oe,GeUr,o,roG"))]
+ "TARGET_FPU
+ && ! TARGET_ARCH64
+ && (register_operand (operands[0], TFmode)
+@@ -2302,8 +2302,8 @@
+ ;; when -mno-fpu.
+
+ (define_insn "*movtf_insn_sp32_no_fpu"
+- [(set (match_operand:TF 0 "nonimmediate_operand" "=o,U,o,r,o")
+- (match_operand:TF 1 "input_operand" "G,o,U,roG,r"))]
++ [(set (match_operand:TF 0 "nonimmediate_operand" "=o,U,o, r,o")
++ (match_operand:TF 1 "input_operand" " G,o,U,roG,r"))]
+ "! TARGET_FPU
+ && ! TARGET_ARCH64
+ && (register_operand (operands[0], TFmode)
+@@ -2312,8 +2312,8 @@
+ [(set_attr "length" "4")])
+
+ (define_insn "*movtf_insn_sp64"
+- [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,o,r")
+- (match_operand:TF 1 "input_operand" "G,oe,Ger,roG"))]
++ [(set (match_operand:TF 0 "nonimmediate_operand" "=b, e, o, r")
++ (match_operand:TF 1 "input_operand" "G,oe,Ger,roG"))]
+ "TARGET_FPU
+ && TARGET_ARCH64
+ && ! TARGET_HARD_QUAD
+@@ -2323,8 +2323,8 @@
+ [(set_attr "length" "2")])
+
+ (define_insn "*movtf_insn_sp64_hq"
+- [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,e,m,o,r")
+- (match_operand:TF 1 "input_operand" "G,e,m,e,rG,roG"))]
++ [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,e,m, o, r")
++ (match_operand:TF 1 "input_operand" "G,e,m,e,rG,roG"))]
+ "TARGET_FPU
+ && TARGET_ARCH64
+ && TARGET_HARD_QUAD
+@@ -2341,8 +2341,8 @@
+ (set_attr "length" "2,*,*,*,2,2")])
+
+ (define_insn "*movtf_insn_sp64_no_fpu"
+- [(set (match_operand:TF 0 "nonimmediate_operand" "=r,o")
+- (match_operand:TF 1 "input_operand" "orG,rG"))]
++ [(set (match_operand:TF 0 "nonimmediate_operand" "= r, o")
++ (match_operand:TF 1 "input_operand" "orG,rG"))]
+ "! TARGET_FPU
+ && TARGET_ARCH64
+ && (register_operand (operands[0], TFmode)
+Index: gcc/config/sparc/sparc.h
+===================================================================
+--- a/src/gcc/config/sparc/sparc.h (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/sparc/sparc.h (.../branches/gcc-4_6-branch)
+@@ -408,6 +408,7 @@
+ %{mcpu=sparclite:-Asparclite} \
+ %{mcpu=sparclite86x:-Asparclite} \
+ %{mcpu=f930:-Asparclite} %{mcpu=f934:-Asparclite} \
++%{mcpu=v8:-Av8} \
+ %{mv8plus:-Av8plus} \
+ %{mcpu=v9:-Av9} \
+ %{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
+Index: gcc/config/i386/i386.md
+===================================================================
+--- a/src/gcc/config/i386/i386.md (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/i386/i386.md (.../branches/gcc-4_6-branch)
+@@ -1960,7 +1960,7 @@
+
+ (define_insn "*movdi_internal_rex64"
+ [(set (match_operand:DI 0 "nonimmediate_operand"
+- "=r,r ,r,m ,!m,*y,*y,?r ,m ,?*Ym,?*y,*x,*x,?r ,m,?*Yi,*x,?*x,?*Ym")
++ "=r,r ,r,m ,!o,*y,*y,?r ,m ,?*Ym,?*y,*x,*x,?r ,m,?*Yi,*x,?*x,?*Ym")
+ (match_operand:DI 1 "general_operand"
+ "Z ,rem,i,re,n ,C ,*y,*Ym,*y,r ,m ,C ,*x,*Yi,*x,r ,m ,*Ym,*x"))]
+ "TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+@@ -2905,7 +2905,7 @@
+
+ (define_insn "*movdf_internal_rex64"
+ [(set (match_operand:DF 0 "nonimmediate_operand"
+- "=f,m,f,r ,m,!r,!m,Y2*x,Y2*x,Y2*x,m ,Yi,r ")
++ "=f,m,f,r ,m,!r,!o,Y2*x,Y2*x,Y2*x,m ,Yi,r ")
+ (match_operand:DF 1 "general_operand"
+ "fm,f,G,rm,r,F ,F ,C ,Y2*x,m ,Y2*x,r ,Yi"))]
+ "TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1]))
+@@ -5103,7 +5103,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(set (match_dup 0) (float:MODEF (match_dup 1)))])
+
+ (define_split
+@@ -5116,7 +5116,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(set (match_dup 2) (match_dup 1))
+ (set (match_dup 0) (float:MODEF (match_dup 2)))])
+
+@@ -5207,7 +5207,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(const_int 0)]
+ {
+ rtx op1 = operands[1];
+@@ -5248,7 +5248,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(const_int 0)]
+ {
+ operands[3] = simplify_gen_subreg (<ssevecmode>mode, operands[0],
+@@ -5270,7 +5270,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(const_int 0)]
+ {
+ rtx op1 = operands[1];
+@@ -5314,7 +5314,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(const_int 0)]
+ {
+ operands[3] = simplify_gen_subreg (<ssevecmode>mode, operands[0],
+@@ -5375,7 +5375,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(set (match_dup 0) (float:MODEF (match_dup 1)))])
+
+ (define_insn "*float<SSEMODEI24:mode><MODEF:mode>2_sse_nointerunit"
+@@ -5410,7 +5410,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(set (match_dup 2) (match_dup 1))
+ (set (match_dup 0) (float:MODEF (match_dup 2)))])
+
+@@ -5423,7 +5423,7 @@
+ && reload_completed
+ && (SSE_REG_P (operands[0])
+ || (GET_CODE (operands[0]) == SUBREG
+- && SSE_REG_P (operands[0])))"
++ && SSE_REG_P (SUBREG_REG (operands[0]))))"
+ [(set (match_dup 0) (float:MODEF (match_dup 1)))])
+
+ (define_insn "*float<SSEMODEI24:mode><X87MODEF:mode>2_i387_with_temp"
+@@ -14625,7 +14625,7 @@
+ emit_insn (gen_sse4_1_round<mode>2
+ (operands[0], operands[1], GEN_INT (0x04)));
+ else
+- ix86_expand_rint (operand0, operand1);
++ ix86_expand_rint (operands[0], operands[1]);
+ }
+ else
+ {
+@@ -14649,9 +14649,9 @@
+ if (optimize_insn_for_size_p ())
+ FAIL;
+ if (TARGET_64BIT || (<MODE>mode != DFmode))
+- ix86_expand_round (operand0, operand1);
++ ix86_expand_round (operands[0], operands[1]);
+ else
+- ix86_expand_rounddf_32 (operand0, operand1);
++ ix86_expand_rounddf_32 (operands[0], operands[1]);
+ DONE;
+ })
+
+@@ -14796,7 +14796,7 @@
+ {
+ if (optimize_insn_for_size_p ())
+ FAIL;
+- ix86_expand_lround (operand0, operand1);
++ ix86_expand_lround (operands[0], operands[1]);
+ DONE;
+ })
+
+@@ -14871,9 +14871,9 @@
+ emit_insn (gen_sse4_1_round<mode>2
+ (operands[0], operands[1], GEN_INT (0x01)));
+ else if (TARGET_64BIT || (<MODE>mode != DFmode))
+- ix86_expand_floorceil (operand0, operand1, true);
++ ix86_expand_floorceil (operands[0], operands[1], true);
+ else
+- ix86_expand_floorceildf_32 (operand0, operand1, true);
++ ix86_expand_floorceildf_32 (operands[0], operands[1], true);
+ }
+ else
+ {
+@@ -15053,7 +15053,7 @@
+ {
+ if (TARGET_64BIT && optimize_insn_for_size_p ())
+ FAIL;
+- ix86_expand_lfloorceil (operand0, operand1, true);
++ ix86_expand_lfloorceil (operands[0], operands[1], true);
+ DONE;
+ })
+
+@@ -15128,9 +15128,9 @@
+ else if (optimize_insn_for_size_p ())
+ FAIL;
+ else if (TARGET_64BIT || (<MODE>mode != DFmode))
+- ix86_expand_floorceil (operand0, operand1, false);
++ ix86_expand_floorceil (operands[0], operands[1], false);
+ else
+- ix86_expand_floorceildf_32 (operand0, operand1, false);
++ ix86_expand_floorceildf_32 (operands[0], operands[1], false);
+ }
+ else
+ {
+@@ -15308,7 +15308,7 @@
+ "SSE_FLOAT_MODE_P (<MODEF:MODE>mode) && TARGET_SSE_MATH
+ && !flag_trapping_math"
+ {
+- ix86_expand_lfloorceil (operand0, operand1, false);
++ ix86_expand_lfloorceil (operands[0], operands[1], false);
+ DONE;
+ })
+
+@@ -15383,9 +15383,9 @@
+ else if (optimize_insn_for_size_p ())
+ FAIL;
+ else if (TARGET_64BIT || (<MODE>mode != DFmode))
+- ix86_expand_trunc (operand0, operand1);
++ ix86_expand_trunc (operands[0], operands[1]);
+ else
+- ix86_expand_truncdf_32 (operand0, operand1);
++ ix86_expand_truncdf_32 (operands[0], operands[1]);
+ }
+ else
+ {
+@@ -18285,8 +18285,8 @@
+ (match_operand:SI 3 "const_int_operand" "i")]
+ UNSPECV_LWPVAL_INTRINSIC)]
+ "TARGET_LWP"
+- "/* Avoid unused variable warning. */
+- (void) operand0;")
++ ;; Avoid unused variable warning.
++ "(void) operands[0];")
+
+ (define_insn "*lwp_lwpval<mode>3_1"
+ [(unspec_volatile [(match_operand:SWI48 0 "register_operand" "r")
+Index: gcc/config/i386/sse.md
+===================================================================
+--- a/src/gcc/config/i386/sse.md (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/i386/sse.md (.../branches/gcc-4_6-branch)
+@@ -4521,15 +4521,14 @@
+ [(set (match_operand:V4DF 0 "register_operand" "=x,x")
+ (vec_select:V4DF
+ (vec_concat:V8DF
+- (match_operand:V4DF 1 "nonimmediate_operand" "xm,x")
+- (match_operand:V4DF 2 "nonimmediate_operand" " 1,xm"))
++ (match_operand:V4DF 1 "nonimmediate_operand" " x,m")
++ (match_operand:V4DF 2 "nonimmediate_operand" "xm,1"))
+ (parallel [(const_int 0) (const_int 4)
+ (const_int 2) (const_int 6)])))]
+- "TARGET_AVX
+- && (!MEM_P (operands[1]) || rtx_equal_p (operands[1], operands[2]))"
++ "TARGET_AVX"
+ "@
+- vmovddup\t{%1, %0|%0, %1}
+- vunpcklpd\t{%2, %1, %0|%0, %1, %2}"
++ vunpcklpd\t{%2, %1, %0|%0, %1, %2}
++ vmovddup\t{%1, %0|%0, %1}"
+ [(set_attr "type" "sselog")
+ (set_attr "prefix" "vex")
+ (set_attr "mode" "V4DF")])
+Index: gcc/config/i386/avxintrin.h
+===================================================================
+--- a/src/gcc/config/i386/avxintrin.h (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/i386/avxintrin.h (.../branches/gcc-4_6-branch)
+@@ -759,7 +759,7 @@
+
+ #ifdef __x86_64__
+ extern __inline __m256i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+-_mm256_insert_epi64 (__m256i __X, int __D, int const __N)
++_mm256_insert_epi64 (__m256i __X, long long __D, int const __N)
+ {
+ __m128i __Y = _mm256_extractf128_si256 (__X, __N >> 1);
+ __Y = _mm_insert_epi64 (__Y, __D, __N % 2);
+Index: gcc/config/i386/i386.c
+===================================================================
+--- a/src/gcc/config/i386/i386.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/i386/i386.c (.../branches/gcc-4_6-branch)
+@@ -16329,7 +16329,6 @@
+ basic_block bb = BLOCK_FOR_INSN (insn);
+ int distance = 0;
+ df_ref *def_rec;
+- enum attr_type insn_type;
+
+ if (insn != BB_HEAD (bb))
+ {
+@@ -16345,8 +16344,8 @@
+ && (regno1 == DF_REF_REGNO (*def_rec)
+ || regno2 == DF_REF_REGNO (*def_rec)))
+ {
+- insn_type = get_attr_type (prev);
+- if (insn_type != TYPE_LEA)
++ if (recog_memoized (prev) < 0
++ || get_attr_type (prev) != TYPE_LEA)
+ goto done;
+ }
+ }
+@@ -16385,8 +16384,8 @@
+ && (regno1 == DF_REF_REGNO (*def_rec)
+ || regno2 == DF_REF_REGNO (*def_rec)))
+ {
+- insn_type = get_attr_type (prev);
+- if (insn_type != TYPE_LEA)
++ if (recog_memoized (prev) < 0
++ || get_attr_type (prev) != TYPE_LEA)
+ goto done;
+ }
+ }
+Index: gcc/config/avr/libgcc.S
+===================================================================
+--- a/src/gcc/config/avr/libgcc.S (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/avr/libgcc.S (.../branches/gcc-4_6-branch)
+@@ -582,7 +582,16 @@
+ push r17
+ push r28
+ push r29
++#if defined (__AVR_HAVE_8BIT_SP__)
++;; FIXME: __AVR_HAVE_8BIT_SP__ is set on device level, not on core level
++;; so this lines are dead code. To make it work, devices without
++;; SP_H must get their own multilib(s), see PR51345.
+ in r28,__SP_L__
++ sub r28,r26
++ clr r29
++ out __SP_L__,r28
++#else
++ in r28,__SP_L__
+ in r29,__SP_H__
+ sub r28,r26
+ sbc r29,r27
+@@ -591,6 +600,7 @@
+ out __SP_H__,r29
+ out __SREG__,__tmp_reg__
+ out __SP_L__,r28
++#endif
+ #if defined (__AVR_HAVE_EIJMP_EICALL__)
+ eijmp
+ #else
+@@ -625,6 +635,15 @@
+ ldd r16,Y+4
+ ldd r17,Y+3
+ ldd r26,Y+2
++#if defined (__AVR_HAVE_8BIT_SP__)
++;; FIXME: __AVR_HAVE_8BIT_SP__ is set on device level, not on core level
++;; so this lines are dead code. To make it work, devices without
++;; SP_H must get their own multilib(s).
++ ldd r29,Y+1
++ add r28,r30
++ out __SP_L__,r28
++ mov r28, r26
++#else
+ ldd r27,Y+1
+ add r28,r30
+ adc r29,__zero_reg__
+@@ -635,6 +654,7 @@
+ out __SP_L__,r28
+ mov_l r28, r26
+ mov_h r29, r27
++#endif
+ ret
+ .endfunc
+ #endif /* defined (L_epilogue) */
+Index: gcc/config/avr/avr.md
+===================================================================
+--- a/src/gcc/config/avr/avr.md (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/avr/avr.md (.../branches/gcc-4_6-branch)
+@@ -299,7 +299,7 @@
+ [(set (match_operand:HI 0 "stack_register_operand" "=q")
+ (unspec_volatile:HI [(match_operand:HI 1 "register_operand" "r")]
+ UNSPECV_WRITE_SP_IRQ_OFF))]
+- ""
++ "!AVR_HAVE_8BIT_SP"
+ "out __SP_H__, %B1
+ out __SP_L__, %A1"
+ [(set_attr "length" "2")
+@@ -309,7 +309,7 @@
+ [(set (match_operand:HI 0 "stack_register_operand" "=q")
+ (unspec_volatile:HI [(match_operand:HI 1 "register_operand" "r")]
+ UNSPECV_WRITE_SP_IRQ_ON))]
+- ""
++ "!AVR_HAVE_8BIT_SP"
+ "cli
+ out __SP_H__, %B1
+ sei
+Index: gcc/config/avr/avr-devices.c
+===================================================================
+--- a/src/gcc/config/avr/avr-devices.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/avr/avr-devices.c (.../branches/gcc-4_6-branch)
+@@ -70,7 +70,7 @@
+ { "attiny2313a", ARCH_AVR25, "__AVR_ATtiny2313A__", 1, 0x0060, "tn2313a" },
+ { "attiny24", ARCH_AVR25, "__AVR_ATtiny24__", 1, 0x0060, "tn24" },
+ { "attiny24a", ARCH_AVR25, "__AVR_ATtiny24A__", 1, 0x0060, "tn24a" },
+- { "attiny4313", ARCH_AVR25, "__AVR_ATtiny4313__", 1, 0x0060, "tn4313" },
++ { "attiny4313", ARCH_AVR25, "__AVR_ATtiny4313__", 0, 0x0060, "tn4313" },
+ { "attiny44", ARCH_AVR25, "__AVR_ATtiny44__", 0, 0x0060, "tn44" },
+ { "attiny44a", ARCH_AVR25, "__AVR_ATtiny44A__", 0, 0x0060, "tn44a" },
+ { "attiny84", ARCH_AVR25, "__AVR_ATtiny84__", 0, 0x0060, "tn84" },
+@@ -88,7 +88,7 @@
+ { "attiny87", ARCH_AVR25, "__AVR_ATtiny87__", 0, 0x0100, "tn87" },
+ { "attiny48", ARCH_AVR25, "__AVR_ATtiny48__", 0, 0x0100, "tn48" },
+ { "attiny88", ARCH_AVR25, "__AVR_ATtiny88__", 0, 0x0100, "tn88" },
+- { "at86rf401", ARCH_AVR25, "__AVR_AT86RF401__", 1, 0x0060, "86401" },
++ { "at86rf401", ARCH_AVR25, "__AVR_AT86RF401__", 0, 0x0060, "86401" },
+ /* Classic, > 8K, <= 64K. */
+ { "avr3", ARCH_AVR3, NULL, 0, 0x0060, "43355" },
+ { "at43usb355", ARCH_AVR3, "__AVR_AT43USB355__", 0, 0x0060, "43355" },
+Index: gcc/config/avr/avr.c
+===================================================================
+--- a/src/gcc/config/avr/avr.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/avr/avr.c (.../branches/gcc-4_6-branch)
+@@ -1879,9 +1879,12 @@
+ }
+ else if (test_hard_reg_class (STACK_REG, src))
+ {
+- *l = 2;
+- return (AS2 (in,%A0,__SP_L__) CR_TAB
+- AS2 (in,%B0,__SP_H__));
++ *l = 2;
++ return AVR_HAVE_8BIT_SP
++ ? (AS2 (in,%A0,__SP_L__) CR_TAB
++ AS1 (clr,%B0))
++ : (AS2 (in,%A0,__SP_L__) CR_TAB
++ AS2 (in,%B0,__SP_H__));
+ }
+
+ if (AVR_HAVE_MOVW)
+@@ -5173,10 +5176,10 @@
+
+ default_file_start ();
+
+-/* fprintf (asm_out_file, "\t.arch %s\n", avr_mcu_name);*/
+- fputs ("__SREG__ = 0x3f\n"
+- "__SP_H__ = 0x3e\n"
+- "__SP_L__ = 0x3d\n", asm_out_file);
++ fputs ("__SREG__ = 0x3f\n", asm_out_file);
++ if (!AVR_HAVE_8BIT_SP)
++ fputs ("__SP_H__ = 0x3e\n", asm_out_file);
++ fputs ("__SP_L__ = 0x3d\n", asm_out_file);
+
+ fputs ("__tmp_reg__ = 0\n"
+ "__zero_reg__ = 1\n", asm_out_file);
+Index: gcc/config/rs6000/rs6000.c
+===================================================================
+--- a/src/gcc/config/rs6000/rs6000.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/rs6000/rs6000.c (.../branches/gcc-4_6-branch)
+@@ -2612,6 +2612,7 @@
+ off. */
+ rs6000_altivec_abi = 1;
+ TARGET_ALTIVEC_VRSAVE = 1;
++ rs6000_current_abi = ABI_DARWIN;
+
+ if (DEFAULT_ABI == ABI_DARWIN
+ && TARGET_64BIT)
+@@ -6824,6 +6825,7 @@
+ #if TARGET_MACHO
+ && DEFAULT_ABI == ABI_DARWIN
+ && (flag_pic || MACHO_DYNAMIC_NO_PIC_P)
++ && machopic_symbol_defined_p (x)
+ #else
+ && DEFAULT_ABI == ABI_V4
+ && !flag_pic
+@@ -20227,7 +20229,7 @@
+ {
+ /* This blockage is needed so that sched doesn't decide to move
+ the sp change before the register restores. */
+- if (frame_reg_rtx != sp_reg_rtx
++ if (DEFAULT_ABI == ABI_V4
+ || (TARGET_SPE_ABI
+ && info->spe_64bit_regs_used != 0
+ && info->first_gp_reg_save != 32))
+@@ -20644,56 +20646,52 @@
+ {
+ int i;
+ rtx spe_save_area_ptr;
+-
++ int save_ptr_to_sp;
++ int ool_adjust = 0;
++
+ /* Determine whether we can address all of the registers that need
+- to be saved with an offset from the stack pointer that fits in
++ to be saved with an offset from frame_reg_rtx that fits in
+ the small const field for SPE memory instructions. */
+- int spe_regs_addressable_via_sp
+- = (SPE_CONST_OFFSET_OK(info->spe_gp_save_offset + sp_offset
+- + (32 - info->first_gp_reg_save - 1) * reg_size)
++ int spe_regs_addressable
++ = (SPE_CONST_OFFSET_OK (info->spe_gp_save_offset + sp_offset
++ + reg_size * (32 - info->first_gp_reg_save - 1))
+ && saving_GPRs_inline);
+ int spe_offset;
+-
+- if (spe_regs_addressable_via_sp)
++
++ if (spe_regs_addressable)
+ {
+ spe_save_area_ptr = frame_reg_rtx;
++ save_ptr_to_sp = info->total_size - sp_offset;
+ spe_offset = info->spe_gp_save_offset + sp_offset;
+ }
+ else
+ {
+ /* Make r11 point to the start of the SPE save area. We need
+ to be careful here if r11 is holding the static chain. If
+- it is, then temporarily save it in r0. We would use r0 as
+- our base register here, but using r0 as a base register in
+- loads and stores means something different from what we
+- would like. */
+- int ool_adjust = (saving_GPRs_inline
+- ? 0
+- : (info->first_gp_reg_save
+- - (FIRST_SAVRES_REGISTER+1))*8);
+- HOST_WIDE_INT offset = (info->spe_gp_save_offset
+- + sp_offset - ool_adjust);
++ it is, then temporarily save it in r0. */
++ int offset;
+
++ if (!saving_GPRs_inline)
++ ool_adjust = 8 * (info->first_gp_reg_save
++ - (FIRST_SAVRES_REGISTER + 1));
++ offset = info->spe_gp_save_offset + sp_offset - ool_adjust;
++ spe_save_area_ptr = gen_rtx_REG (Pmode, 11);
++ save_ptr_to_sp = info->total_size - sp_offset + offset;
++ spe_offset = 0;
++
+ if (using_static_chain_p)
+ {
+ rtx r0 = gen_rtx_REG (Pmode, 0);
+ gcc_assert (info->first_gp_reg_save > 11);
+-
+- emit_move_insn (r0, gen_rtx_REG (Pmode, 11));
++
++ emit_move_insn (r0, spe_save_area_ptr);
+ }
+-
+- spe_save_area_ptr = gen_rtx_REG (Pmode, 11);
+- insn = emit_insn (gen_addsi3 (spe_save_area_ptr,
+- frame_reg_rtx,
+- GEN_INT (offset)));
+- /* We need to make sure the move to r11 gets noted for
+- properly outputting unwind information. */
+- if (!saving_GPRs_inline)
+- rs6000_frame_related (insn, frame_reg_rtx, offset,
+- NULL_RTX, NULL_RTX);
+- spe_offset = 0;
++ emit_insn (gen_addsi3 (spe_save_area_ptr,
++ frame_reg_rtx, GEN_INT (offset)));
++ if (REGNO (frame_reg_rtx) == 11)
++ sp_offset = -info->spe_gp_save_offset + ool_adjust;
+ }
+-
++
+ if (saving_GPRs_inline)
+ {
+ for (i = 0; i < 32 - info->first_gp_reg_save; i++)
+@@ -20705,36 +20703,34 @@
+ /* We're doing all this to ensure that the offset fits into
+ the immediate offset of 'evstdd'. */
+ gcc_assert (SPE_CONST_OFFSET_OK (reg_size * i + spe_offset));
+-
++
+ offset = GEN_INT (reg_size * i + spe_offset);
+ addr = gen_rtx_PLUS (Pmode, spe_save_area_ptr, offset);
+ mem = gen_rtx_MEM (V2SImode, addr);
+-
++
+ insn = emit_move_insn (mem, reg);
+-
+- rs6000_frame_related (insn, spe_save_area_ptr,
+- info->spe_gp_save_offset
+- + sp_offset + reg_size * i,
+- offset, const0_rtx);
++
++ rs6000_frame_related (insn,
++ spe_save_area_ptr, save_ptr_to_sp,
++ NULL_RTX, NULL_RTX);
+ }
+ }
+ else
+ {
+ rtx par;
+
+- par = rs6000_make_savres_rtx (info, gen_rtx_REG (Pmode, 11),
+- 0, reg_mode,
++ par = rs6000_make_savres_rtx (info, spe_save_area_ptr,
++ ool_adjust, reg_mode,
+ /*savep=*/true, /*gpr=*/true,
+ /*lr=*/false);
+ insn = emit_insn (par);
+- rs6000_frame_related (insn, frame_ptr_rtx, info->total_size,
++ rs6000_frame_related (insn, spe_save_area_ptr, save_ptr_to_sp,
+ NULL_RTX, NULL_RTX);
+ }
+-
+-
++
+ /* Move the static chain pointer back. */
+- if (using_static_chain_p && !spe_regs_addressable_via_sp)
+- emit_move_insn (gen_rtx_REG (Pmode, 11), gen_rtx_REG (Pmode, 0));
++ if (using_static_chain_p && !spe_regs_addressable)
++ emit_move_insn (spe_save_area_ptr, gen_rtx_REG (Pmode, 0));
+ }
+ else if (!WORLD_SAVE_P (info) && !saving_GPRs_inline)
+ {
+@@ -20743,10 +20739,12 @@
+ /* Need to adjust r11 (r12) if we saved any FPRs. */
+ if (info->first_fp_reg_save != 64)
+ {
+- rtx dest_reg = gen_rtx_REG (reg_mode, DEFAULT_ABI == ABI_AIX
+- ? 12 : 11);
+- rtx offset = GEN_INT (sp_offset
+- + (-8 * (64-info->first_fp_reg_save)));
++ rtx dest_reg = gen_rtx_REG (Pmode, DEFAULT_ABI == ABI_AIX ? 12 : 11);
++ int save_off = 8 * (64 - info->first_fp_reg_save);
++ rtx offset = GEN_INT (sp_offset - save_off);
++
++ if (REGNO (dest_reg) == REGNO (frame_reg_rtx))
++ sp_offset = save_off;
+ emit_insn (gen_add3_insn (dest_reg, frame_reg_rtx, offset));
+ }
+
+@@ -21622,40 +21620,39 @@
+ && info->first_gp_reg_save != 32)
+ {
+ /* Determine whether we can address all of the registers that need
+- to be saved with an offset from the stack pointer that fits in
+- the small const field for SPE memory instructions. */
+- int spe_regs_addressable_via_sp
+- = (SPE_CONST_OFFSET_OK(info->spe_gp_save_offset + sp_offset
+- + (32 - info->first_gp_reg_save - 1) * reg_size)
++ to be saved with an offset from frame_reg_rtx that fits in
++ the small const field for SPE memory instructions. */
++ int spe_regs_addressable
++ = (SPE_CONST_OFFSET_OK (info->spe_gp_save_offset + sp_offset
++ + reg_size * (32 - info->first_gp_reg_save - 1))
+ && restoring_GPRs_inline);
+ int spe_offset;
++ int ool_adjust = 0;
+
+- if (spe_regs_addressable_via_sp)
++ if (spe_regs_addressable)
+ spe_offset = info->spe_gp_save_offset + sp_offset;
+ else
+- {
++ {
+ rtx old_frame_reg_rtx = frame_reg_rtx;
+- /* Make r11 point to the start of the SPE save area. We worried about
+- not clobbering it when we were saving registers in the prologue.
+- There's no need to worry here because the static chain is passed
+- anew to every function. */
+- int ool_adjust = (restoring_GPRs_inline
+- ? 0
+- : (info->first_gp_reg_save
+- - (FIRST_SAVRES_REGISTER+1))*8);
++ /* Make r11 point to the start of the SPE save area. We worried about
++ not clobbering it when we were saving registers in the prologue.
++ There's no need to worry here because the static chain is passed
++ anew to every function. */
+
+- if (frame_reg_rtx == sp_reg_rtx)
+- frame_reg_rtx = gen_rtx_REG (Pmode, 11);
+- emit_insn (gen_addsi3 (frame_reg_rtx, old_frame_reg_rtx,
++ if (!restoring_GPRs_inline)
++ ool_adjust = 8 * (info->first_gp_reg_save
++ - (FIRST_SAVRES_REGISTER + 1));
++ frame_reg_rtx = gen_rtx_REG (Pmode, 11);
++ emit_insn (gen_addsi3 (frame_reg_rtx, old_frame_reg_rtx,
+ GEN_INT (info->spe_gp_save_offset
+ + sp_offset
+ - ool_adjust)));
+ /* Keep the invariant that frame_reg_rtx + sp_offset points
+ at the top of the stack frame. */
+- sp_offset = -info->spe_gp_save_offset;
++ sp_offset = -info->spe_gp_save_offset + ool_adjust;
+
+- spe_offset = 0;
+- }
++ spe_offset = 0;
++ }
+
+ if (restoring_GPRs_inline)
+ {
+@@ -21695,8 +21692,8 @@
+ {
+ rtx par;
+
+- par = rs6000_make_savres_rtx (info, gen_rtx_REG (Pmode, 11),
+- 0, reg_mode,
++ par = rs6000_make_savres_rtx (info, frame_reg_rtx,
++ ool_adjust, reg_mode,
+ /*savep=*/false, /*gpr=*/true,
+ /*lr=*/true);
+ emit_jump_insn (par);
+@@ -21717,12 +21714,12 @@
+ sp_offset, can_use_exit);
+ else
+ {
+- emit_insn (gen_add3_insn (gen_rtx_REG (Pmode, DEFAULT_ABI == ABI_AIX
+- ? 12 : 11),
+- frame_reg_rtx,
++ rtx src_reg = gen_rtx_REG (Pmode, DEFAULT_ABI == ABI_AIX ? 12 : 11);
++
++ emit_insn (gen_add3_insn (src_reg, frame_reg_rtx,
+ GEN_INT (sp_offset - info->fp_size)));
+- if (REGNO (frame_reg_rtx) == 11)
+- sp_offset += info->fp_size;
++ if (REGNO (frame_reg_rtx) == REGNO (src_reg))
++ sp_offset = info->fp_size;
+ }
+
+ par = rs6000_make_savres_rtx (info, frame_reg_rtx,
+Index: gcc/config/darwin.c
+===================================================================
+--- a/src/gcc/config/darwin.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/darwin.c (.../branches/gcc-4_6-branch)
+@@ -1753,19 +1753,51 @@
+ return (!strncmp ((const char *)p, "_OBJC_", 6));
+ }
+
+-/* LTO support for Mach-O. */
++/* LTO support for Mach-O.
+
+-/* Section names for LTO sections. */
+-static unsigned int lto_section_names_offset = 0;
++ This version uses three mach-o sections to encapsulate the (unlimited
++ number of) lto sections.
+
+-/* This is the obstack which we use to allocate the many strings. */
+-static struct obstack lto_section_names_obstack;
++ __GNU_LTO, __lto_sections contains the concatented GNU LTO section data.
++ __GNU_LTO, __section_names contains the GNU LTO section names.
++ __GNU_LTO, __section_index contains an array of values that index these.
+
+-/* Segment name for LTO sections. */
++ Indexed thus:
++ <section offset from the start of __GNU_LTO, __lto_sections>,
++ <section length>
++ <name offset from the start of __GNU_LTO, __section_names,
++ <name length>.
++
++ At present, for both m32 and m64 mach-o files each of these fields is
++ represented by a uint32_t. This is because, AFAICT, a mach-o object
++ cannot exceed 4Gb because the section_64 offset field (see below) is 32bits.
++
++ uint32_t offset;
++ "offset An integer specifying the offset to this section in the file." */
++
++/* Count lto section numbers. */
++static unsigned int lto_section_num = 0;
++
++/* A vector of information about LTO sections, at present, we only have
++ the name. TODO: see if we can get the data length somehow. */
++typedef struct GTY (()) darwin_lto_section_e {
++ const char *sectname;
++} darwin_lto_section_e ;
++DEF_VEC_O(darwin_lto_section_e);
++DEF_VEC_ALLOC_O(darwin_lto_section_e, gc);
++
++static GTY (()) VEC (darwin_lto_section_e, gc) * lto_section_names;
++
++/* Segment for LTO data. */
+ #define LTO_SEGMENT_NAME "__GNU_LTO"
+
+-/* Section name for LTO section names section. */
+-#define LTO_NAMES_SECTION "__section_names"
++/* Section wrapper scheme (used here to wrap the unlimited number of LTO
++ sections into three Mach-O ones).
++ NOTE: These names MUST be kept in sync with those in
++ libiberty/simple-object-mach-o. */
++#define LTO_SECTS_SECTION "__wrapper_sects"
++#define LTO_NAMES_SECTION "__wrapper_names"
++#define LTO_INDEX_SECTION "__wrapper_index"
+
+ /* File to temporarily store LTO data. This is appended to asm_out_file
+ in darwin_end_file. */
+@@ -1808,37 +1840,38 @@
+ unsigned int flags,
+ tree decl ATTRIBUTE_UNUSED)
+ {
+- /* LTO sections go in a special segment __GNU_LTO. We want to replace the
+- section name with something we can use to represent arbitrary-length
+- names (section names in Mach-O are at most 16 characters long). */
++ /* LTO sections go in a special section that encapsulates the (unlimited)
++ number of GNU LTO sections within a single mach-o one. */
+ if (strncmp (name, LTO_SECTION_NAME_PREFIX,
+ strlen (LTO_SECTION_NAME_PREFIX)) == 0)
+ {
++ darwin_lto_section_e e;
+ /* We expect certain flags to be set... */
+ gcc_assert ((flags & (SECTION_DEBUG | SECTION_NAMED))
+ == (SECTION_DEBUG | SECTION_NAMED));
+
+- /* Add the section name to the things to output when we end the
+- current assembler output file.
+- This is all not very efficient, but that doesn't matter -- this
+- shouldn't be a hot path in the compiler... */
+- obstack_1grow (&lto_section_names_obstack, '\t');
+- obstack_grow (&lto_section_names_obstack, ".ascii ", 7);
+- obstack_1grow (&lto_section_names_obstack, '"');
+- obstack_grow (&lto_section_names_obstack, name, strlen (name));
+- obstack_grow (&lto_section_names_obstack, "\\0\"\n", 4);
+-
+- /* Output the dummy section name. */
+- fprintf (asm_out_file, "\t# %s\n", name);
+- fprintf (asm_out_file, "\t.section %s,__%08X,regular,debug\n",
+- LTO_SEGMENT_NAME, lto_section_names_offset);
+-
+- /* Update the offset for the next section name. Make sure we stay
+- within reasonable length. */
+- lto_section_names_offset += strlen (name) + 1;
+- gcc_assert (lto_section_names_offset > 0
+- && lto_section_names_offset < ((unsigned) 1 << 31));
+- }
++ /* Switch to our combined section. */
++ fprintf (asm_out_file, "\t.section %s,%s,regular,debug\n",
++ LTO_SEGMENT_NAME, LTO_SECTS_SECTION);
++ /* Output a label for the start of this sub-section. */
++ fprintf (asm_out_file, "L_GNU_LTO%d:\t;# %s\n",
++ lto_section_num, name);
++ /* We have to jump through hoops to get the values of the intra-section
++ offsets... */
++ fprintf (asm_out_file, "\t.set L$gnu$lto$offs%d,L_GNU_LTO%d-L_GNU_LTO0\n",
++ lto_section_num, lto_section_num);
++ fprintf (asm_out_file,
++ "\t.set L$gnu$lto$size%d,L_GNU_LTO%d-L_GNU_LTO%d\n",
++ lto_section_num, lto_section_num+1, lto_section_num);
++ lto_section_num++;
++ e.sectname = xstrdup (name);
++ /* Keep the names, we'll need to make a table later.
++ TODO: check that we do not revisit sections, that would break
++ the assumption of how this is done. */
++ if (lto_section_names == NULL)
++ lto_section_names = VEC_alloc (darwin_lto_section_e, gc, 16);
++ VEC_safe_push (darwin_lto_section_e, gc, lto_section_names, &e);
++ }
+ else if (strncmp (name, "__DWARF,", 8) == 0)
+ darwin_asm_dwarf_section (name, flags, decl);
+ else
+@@ -2711,16 +2744,12 @@
+ darwin_asm_output_dwarf_delta (file, size, lab, sname);
+ }
+
+-/* Called from the within the TARGET_ASM_FILE_START for each target.
+- Initialize the stuff we need for LTO long section names support. */
++/* Called from the within the TARGET_ASM_FILE_START for each target. */
+
+ void
+ darwin_file_start (void)
+ {
+- /* We fill this obstack with the complete section text for the lto section
+- names to write in darwin_file_end. */
+- obstack_init (&lto_section_names_obstack);
+- lto_section_names_offset = 0;
++ /* Nothing to do. */
+ }
+
+ /* Called for the TARGET_ASM_FILE_END hook.
+@@ -2731,8 +2760,6 @@
+ void
+ darwin_file_end (void)
+ {
+- const char *lto_section_names;
+-
+ machopic_finish (asm_out_file);
+ if (strcmp (lang_hooks.name, "GNU C++") == 0)
+ {
+@@ -2762,6 +2789,13 @@
+ lto_asm_txt = buf = (char *) xmalloc (n + 1);
+ while (fgets (lto_asm_txt, n, lto_asm_out_file))
+ fputs (lto_asm_txt, asm_out_file);
++ /* Put a termination label. */
++ fprintf (asm_out_file, "\t.section %s,%s,regular,debug\n",
++ LTO_SEGMENT_NAME, LTO_SECTS_SECTION);
++ fprintf (asm_out_file, "L_GNU_LTO%d:\t;# end of lto\n",
++ lto_section_num);
++ /* Make sure our termination label stays in this section. */
++ fputs ("\t.space\t1\n", asm_out_file);
+ }
+
+ /* Remove the temporary file. */
+@@ -2770,21 +2804,50 @@
+ free (lto_asm_out_name);
+ }
+
+- /* Finish the LTO section names obstack. Don't output anything if
+- there are no recorded section names. */
+- obstack_1grow (&lto_section_names_obstack, '\0');
+- lto_section_names = XOBFINISH (&lto_section_names_obstack, const char *);
+- if (strlen (lto_section_names) > 0)
++ /* Output the names and indices. */
++ if (lto_section_names && VEC_length (darwin_lto_section_e, lto_section_names))
+ {
+- fprintf (asm_out_file,
+- "\t.section %s,%s,regular,debug\n",
++ int count;
++ darwin_lto_section_e *ref;
++ /* For now, we'll make the offsets 4 bytes and unaligned - we'll fix
++ the latter up ourselves. */
++ const char *op = integer_asm_op (4,0);
++
++ /* Emit the names. */
++ fprintf (asm_out_file, "\t.section %s,%s,regular,debug\n",
+ LTO_SEGMENT_NAME, LTO_NAMES_SECTION);
+- fprintf (asm_out_file,
+- "\t# Section names in %s are offsets into this table\n",
+- LTO_SEGMENT_NAME);
+- fprintf (asm_out_file, "%s\n", lto_section_names);
++ FOR_EACH_VEC_ELT (darwin_lto_section_e, lto_section_names, count, ref)
++ {
++ fprintf (asm_out_file, "L_GNU_LTO_NAME%d:\n", count);
++ /* We have to jump through hoops to get the values of the intra-section
++ offsets... */
++ fprintf (asm_out_file,
++ "\t.set L$gnu$lto$noff%d,L_GNU_LTO_NAME%d-L_GNU_LTO_NAME0\n",
++ count, count);
++ fprintf (asm_out_file,
++ "\t.set L$gnu$lto$nsiz%d,L_GNU_LTO_NAME%d-L_GNU_LTO_NAME%d\n",
++ count, count+1, count);
++ fprintf (asm_out_file, "\t.asciz\t\"%s\"\n", ref->sectname);
++ }
++ fprintf (asm_out_file, "L_GNU_LTO_NAME%d:\t;# end\n", lto_section_num);
++ /* make sure our termination label stays in this section. */
++ fputs ("\t.space\t1\n", asm_out_file);
++
++ /* Emit the Index. */
++ fprintf (asm_out_file, "\t.section %s,%s,regular,debug\n",
++ LTO_SEGMENT_NAME, LTO_INDEX_SECTION);
++ fputs ("\t.align\t2\n", asm_out_file);
++ fputs ("# Section offset, Section length, Name offset, Name length\n",
++ asm_out_file);
++ FOR_EACH_VEC_ELT (darwin_lto_section_e, lto_section_names, count, ref)
++ {
++ fprintf (asm_out_file, "%s L$gnu$lto$offs%d\t;# %s\n",
++ op, count, ref->sectname);
++ fprintf (asm_out_file, "%s L$gnu$lto$size%d\n", op, count);
++ fprintf (asm_out_file, "%s L$gnu$lto$noff%d\n", op, count);
++ fprintf (asm_out_file, "%s L$gnu$lto$nsiz%d\n", op, count);
++ }
+ }
+- obstack_free (&lto_section_names_obstack, NULL);
+
+ /* If we have section anchors, then we must prevent the linker from
+ re-arranging data. */
+Index: gcc/config/arm/arm.c
+===================================================================
+--- a/src/gcc/config/arm/arm.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/arm/arm.c (.../branches/gcc-4_6-branch)
+@@ -9812,6 +9812,9 @@
+ rtx base_reg_rtx = NULL;
+ int i, stm_case;
+
++ /* Write back of base register is currently only supported for Thumb 1. */
++ int base_writeback = TARGET_THUMB1;
++
+ /* Can only handle up to MAX_LDM_STM_OPS insns at present, though could be
+ easily extended if required. */
+ gcc_assert (nops >= 2 && nops <= MAX_LDM_STM_OPS);
+@@ -9869,7 +9872,9 @@
+ /* If it isn't an integer register, then we can't do this. */
+ if (unsorted_regs[i] < 0
+ || (TARGET_THUMB1 && unsorted_regs[i] > LAST_LO_REGNUM)
+- || (TARGET_THUMB2 && unsorted_regs[i] == base_reg)
++ /* The effects are unpredictable if the base register is
++ both updated and stored. */
++ || (base_writeback && unsorted_regs[i] == base_reg)
+ || (TARGET_THUMB2 && unsorted_regs[i] == SP_REGNUM)
+ || unsorted_regs[i] > 14)
+ return 0;
+@@ -19571,39 +19576,34 @@
+ emit_move_insn (mem, tmp2);
+ }
+
+-/* Set up operands for a register copy from src to dest, taking care not to
+- clobber registers in the process.
+- FIXME: This has rather high polynomial complexity (O(n^3)?) but shouldn't
+- be called with a large N, so that should be OK. */
++/* Set up OPERANDS for a register copy from SRC to DEST, taking care
++ not to early-clobber SRC registers in the process.
+
++ We assume that the operands described by SRC and DEST represent a
++ decomposed copy of OPERANDS[1] into OPERANDS[0]. COUNT is the
++ number of components into which the copy has been decomposed. */
+ void
+ neon_disambiguate_copy (rtx *operands, rtx *dest, rtx *src, unsigned int count)
+ {
+- unsigned int copied = 0, opctr = 0;
+- unsigned int done = (1 << count) - 1;
+- unsigned int i, j;
++ unsigned int i;
+
+- while (copied != done)
++ if (!reg_overlap_mentioned_p (operands[0], operands[1])
++ || REGNO (operands[0]) < REGNO (operands[1]))
+ {
+ for (i = 0; i < count; i++)
+- {
+- int good = 1;
+-
+- for (j = 0; good && j < count; j++)
+- if (i != j && (copied & (1 << j)) == 0
+- && reg_overlap_mentioned_p (src[j], dest[i]))
+- good = 0;
+-
+- if (good)
+- {
+- operands[opctr++] = dest[i];
+- operands[opctr++] = src[i];
+- copied |= 1 << i;
+- }
+- }
++ {
++ operands[2 * i] = dest[i];
++ operands[2 * i + 1] = src[i];
++ }
+ }
+-
+- gcc_assert (opctr == count * 2);
++ else
++ {
++ for (i = 0; i < count; i++)
++ {
++ operands[2 * i] = dest[count - i - 1];
++ operands[2 * i + 1] = src[count - i - 1];
++ }
++ }
+ }
+
+ /* Expand an expression EXP that calls a built-in function,
+Index: gcc/config/arm/arm.md
+===================================================================
+--- a/src/gcc/config/arm/arm.md (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/arm/arm.md (.../branches/gcc-4_6-branch)
+@@ -3272,7 +3272,7 @@
+ bool need_else;
+
+ if (which_alternative != 0 || operands[3] != const0_rtx
+- || (code != PLUS && code != MINUS && code != IOR && code != XOR))
++ || (code != PLUS && code != IOR && code != XOR))
+ need_else = true;
+ else
+ need_else = false;
+Index: gcc/config/pa/pa.c
+===================================================================
+--- a/src/gcc/config/pa/pa.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/pa/pa.c (.../branches/gcc-4_6-branch)
+@@ -1863,6 +1863,11 @@
+ /* Handle the most common case: storing into a register. */
+ else if (register_operand (operand0, mode))
+ {
++ /* Legitimize TLS symbol references. This happens for references
++ that aren't a legitimate constant. */
++ if (PA_SYMBOL_REF_TLS_P (operand1))
++ operand1 = legitimize_tls_address (operand1);
++
+ if (register_operand (operand1, mode)
+ || (GET_CODE (operand1) == CONST_INT
+ && cint_ok_for_move (INTVAL (operand1)))
+Index: gcc/config/pa/pa.h
+===================================================================
+--- a/src/gcc/config/pa/pa.h (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/config/pa/pa.h (.../branches/gcc-4_6-branch)
+@@ -848,6 +848,9 @@
+ && (NEW_HP_ASSEMBLER \
+ || TARGET_GAS \
+ || GET_CODE (X) != LABEL_REF) \
++ && (!PA_SYMBOL_REF_TLS_P (X) \
++ || (SYMBOL_REF_TLS_MODEL (X) != TLS_MODEL_GLOBAL_DYNAMIC \
++ && SYMBOL_REF_TLS_MODEL (X) != TLS_MODEL_LOCAL_DYNAMIC)) \
+ && (!TARGET_64BIT \
+ || GET_CODE (X) != CONST_DOUBLE) \
+ && (!TARGET_64BIT \
+Index: gcc/reload1.c
+===================================================================
+--- a/src/gcc/reload1.c (.../tags/gcc_4_6_2_release)
++++ b/src/gcc/reload1.c (.../branches/gcc-4_6-branch)
+@@ -3899,6 +3899,10 @@
+ if (XEXP (x, 0))
+ set_label_offsets (XEXP (x, 0), NULL_RTX, 1);
+
++ for (x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1))
++ if (XEXP (x, 0))
++ set_label_offsets (XEXP (x, 0), NULL_RTX, 1);
++
+ for_each_eh_label (set_initial_eh_label_offset);
+ }
+
+Index: zlib/configure
+===================================================================
+--- a/src/zlib/configure (.../tags/gcc_4_6_2_release)
++++ b/src/zlib/configure (.../branches/gcc-4_6-branch)
+@@ -8600,7 +8600,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -9516,7 +9516,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -9534,7 +9534,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+Index: zlib/ChangeLog
+===================================================================
+--- a/src/zlib/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/zlib/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: libstdc++-v3/configure
+===================================================================
+--- a/src/libstdc++-v3/configure (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/configure (.../branches/gcc-4_6-branch)
+@@ -9698,7 +9698,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -10614,7 +10614,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -10632,7 +10632,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -12522,7 +12522,7 @@
+ esac
+ ;;
+
+- freebsd[12]*)
++ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ ld_shlibs_CXX=no
+@@ -14297,7 +14297,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -14315,7 +14315,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+Index: libstdc++-v3/include/debug/unordered_map
+===================================================================
+--- a/src/libstdc++-v3/include/debug/unordered_map (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/include/debug/unordered_map (.../branches/gcc-4_6-branch)
+@@ -276,6 +276,10 @@
+ }
+
+ iterator
++ erase(iterator __it)
++ { return erase(const_iterator(__it)); }
++
++ iterator
+ erase(const_iterator __first, const_iterator __last)
+ {
+ __glibcxx_check_erase_range(__first, __last);
+@@ -558,6 +562,10 @@
+ }
+
+ iterator
++ erase(iterator __it)
++ { return erase(const_iterator(__it)); }
++
++ iterator
+ erase(const_iterator __first, const_iterator __last)
+ {
+ __glibcxx_check_erase_range(__first, __last);
+Index: libstdc++-v3/include/debug/unordered_set
+===================================================================
+--- a/src/libstdc++-v3/include/debug/unordered_set (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/include/debug/unordered_set (.../branches/gcc-4_6-branch)
+@@ -269,6 +269,10 @@
+ }
+
+ iterator
++ erase(iterator __it)
++ { return erase(const_iterator(__it)); }
++
++ iterator
+ erase(const_iterator __first, const_iterator __last)
+ {
+ __glibcxx_check_erase_range(__first, __last);
+@@ -539,6 +543,10 @@
+ }
+
+ iterator
++ erase(iterator __it)
++ { return erase(const_iterator(__it)); }
++
++ iterator
+ erase(const_iterator __first, const_iterator __last)
+ {
+ __glibcxx_check_erase_range(__first, __last);
+Index: libstdc++-v3/include/debug/map.h
+===================================================================
+--- a/src/libstdc++-v3/include/debug/map.h (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/include/debug/map.h (.../branches/gcc-4_6-branch)
+@@ -273,6 +273,10 @@
+ this->_M_invalidate_if(_Equal(__position.base()));
+ return iterator(_Base::erase(__position.base()), this);
+ }
++
++ iterator
++ erase(iterator __position)
++ { return erase(const_iterator(__position)); }
+ #else
+ void
+ erase(iterator __position)
+Index: libstdc++-v3/include/debug/multimap.h
+===================================================================
+--- a/src/libstdc++-v3/include/debug/multimap.h (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/include/debug/multimap.h (.../branches/gcc-4_6-branch)
+@@ -254,6 +254,10 @@
+ this->_M_invalidate_if(_Equal(__position.base()));
+ return iterator(_Base::erase(__position.base()), this);
+ }
++
++ iterator
++ erase(iterator __position)
++ { return erase(const_iterator(__position)); }
+ #else
+ void
+ erase(iterator __position)
+Index: libstdc++-v3/include/std/complex
+===================================================================
+--- a/src/libstdc++-v3/include/std/complex (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/include/std/complex (.../branches/gcc-4_6-branch)
+@@ -1,7 +1,7 @@
+ // The template and inlines for the -*- C++ -*- complex number classes.
+
+ // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+-// 2006, 2007, 2008, 2009, 2010
++// 2006, 2007, 2008, 2009, 2010, 2011
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+@@ -1695,12 +1695,9 @@
+ std::complex<_Tp>
+ __complex_acosh(const std::complex<_Tp>& __z)
+ {
+- std::complex<_Tp> __t((__z.real() - __z.imag())
+- * (__z.real() + __z.imag()) - _Tp(1.0),
+- _Tp(2.0) * __z.real() * __z.imag());
+- __t = std::sqrt(__t);
+-
+- return std::log(__t + __z);
++ // Kahan's formula.
++ return _Tp(2.0) * std::log(std::sqrt(_Tp(0.5) * (__z + _Tp(1.0)))
++ + std::sqrt(_Tp(0.5) * (__z - _Tp(1.0))));
+ }
+
+ #if _GLIBCXX_USE_C99_COMPLEX_TR1
+Index: libstdc++-v3/include/profile/map.h
+===================================================================
+--- a/src/libstdc++-v3/include/profile/map.h (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/include/profile/map.h (.../branches/gcc-4_6-branch)
+@@ -326,6 +326,10 @@
+ __profcxx_map_to_unordered_map_erase(this, size(), 1);
+ return __i;
+ }
++
++ iterator
++ erase(iterator __position)
++ { return erase(const_iterator(__position)); }
+ #else
+ void
+ erase(iterator __position)
+Index: libstdc++-v3/include/profile/multimap.h
+===================================================================
+--- a/src/libstdc++-v3/include/profile/multimap.h (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/include/profile/multimap.h (.../branches/gcc-4_6-branch)
+@@ -225,6 +225,10 @@
+ iterator
+ erase(const_iterator __position)
+ { return iterator(_Base::erase(__position)); }
++
++ iterator
++ erase(iterator __position)
++ { return iterator(_Base::erase(__position)); }
+ #else
+ void
+ erase(iterator __position)
+Index: libstdc++-v3/include/bits/hashtable.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/hashtable.h (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/include/bits/hashtable.h (.../branches/gcc-4_6-branch)
+@@ -440,6 +440,11 @@
+ iterator
+ erase(const_iterator);
+
++ // LWG 2059.
++ iterator
++ erase(iterator __it)
++ { return erase(const_iterator(__it)); }
++
+ size_type
+ erase(const key_type&);
+
+Index: libstdc++-v3/include/bits/stl_map.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/stl_map.h (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/include/bits/stl_map.h (.../branches/gcc-4_6-branch)
+@@ -612,6 +612,11 @@
+ iterator
+ erase(const_iterator __position)
+ { return _M_t.erase(__position); }
++
++ // LWG 2059.
++ iterator
++ erase(iterator __position)
++ { return _M_t.erase(__position); }
+ #else
+ /**
+ * @brief Erases an element from a %map.
+Index: libstdc++-v3/include/bits/stl_multimap.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/stl_multimap.h (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/include/bits/stl_multimap.h (.../branches/gcc-4_6-branch)
+@@ -533,6 +533,11 @@
+ iterator
+ erase(const_iterator __position)
+ { return _M_t.erase(__position); }
++
++ // LWG 2059.
++ iterator
++ erase(iterator __position)
++ { return _M_t.erase(__position); }
+ #else
+ /**
+ * @brief Erases an element from a %multimap.
+Index: libstdc++-v3/include/bits/stl_tree.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/stl_tree.h (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/include/bits/stl_tree.h (.../branches/gcc-4_6-branch)
+@@ -760,6 +760,16 @@
+ _M_erase_aux(__position);
+ return __result._M_const_cast();
+ }
++
++ // LWG 2059.
++ iterator
++ erase(iterator __position)
++ {
++ iterator __result = __position;
++ ++__result;
++ _M_erase_aux(__position);
++ return __result;
++ }
+ #else
+ void
+ erase(iterator __position)
+Index: libstdc++-v3/include/tr1/complex
+===================================================================
+--- a/src/libstdc++-v3/include/tr1/complex (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/include/tr1/complex (.../branches/gcc-4_6-branch)
+@@ -185,12 +185,9 @@
+ std::complex<_Tp>
+ __complex_acosh(const std::complex<_Tp>& __z)
+ {
+- std::complex<_Tp> __t((__z.real() - __z.imag())
+- * (__z.real() + __z.imag()) - _Tp(1.0),
+- _Tp(2.0) * __z.real() * __z.imag());
+- __t = std::sqrt(__t);
+-
+- return std::log(__t + __z);
++ // Kahan's formula.
++ return _Tp(2.0) * std::log(std::sqrt(_Tp(0.5) * (__z + _Tp(1.0)))
++ + std::sqrt(_Tp(0.5) * (__z - _Tp(1.0))));
+ }
+
+ #if _GLIBCXX_USE_C99_COMPLEX_TR1
+Index: libstdc++-v3/include/tr1/poly_hermite.tcc
+===================================================================
+--- a/src/libstdc++-v3/include/tr1/poly_hermite.tcc (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/include/tr1/poly_hermite.tcc (.../branches/gcc-4_6-branch)
+@@ -1,6 +1,6 @@
+ // Special functions -*- C++ -*-
+
+-// Copyright (C) 2006, 2007, 2008, 2009, 2010
++// Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+@@ -84,7 +84,7 @@
+ unsigned int __i;
+ for (__H_nm2 = __H_0, __H_nm1 = __H_1, __i = 2; __i <= __n; ++__i)
+ {
+- __H_n = 2 * (__x * __H_nm1 + (__i - 1) * __H_nm2);
++ __H_n = 2 * (__x * __H_nm1 - (__i - 1) * __H_nm2);
+ __H_nm2 = __H_nm1;
+ __H_nm1 = __H_n;
+ }
+Index: libstdc++-v3/ChangeLog
+===================================================================
+--- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,55 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
++2011-11-16 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR libstdc++/51142
++ * include/debug/unordered_map (unordered_map<>::erase(iterator),
++ unordered_multimap<>::erase(iterator)): Add, consistently with
++ LWG 2059.
++ * include/debug/unordered_set (unordered_set<>::erase(iterator),
++ unordered_multiset<>::erase(iterator)): Likewise.
++ * include/debug/map.h (map<>::erase(iterator)): Likewise.
++ * include/debug/multimap.h (multimap<>::erase(iterator)): Likewise.
++ * include/profile/map.h (map<>::erase(iterator)): Likewise.
++ * include/profile/multimap.h (multimap<>::erase(iterator)): Likewise.
++ * include/bits/hashtable.h (_Hashtable<>::erase(iterator)): Likewise.
++ * include/bits/stl_map.h (map<>::erase(iterator)): Likewise.
++ * include/bits/stl_multimap.h (multimap<>::erase(iterator)): Likewise.
++ * include/bits/stl_tree.h (_Rb_tree<>::erase(iterator)): Likewise.
++ * testsuite/23_containers/unordered_map/erase/51142.cc: New.
++ * testsuite/23_containers/multimap/modifiers/erase/51142.cc: Likewise.
++ * testsuite/23_containers/set/modifiers/erase/51142.cc: Likewise.
++ * testsuite/23_containers/unordered_multimap/erase/51142.cc: Likewise.
++ * testsuite/23_containers/unordered_set/erase/51142.cc: Likewise.
++ * testsuite/23_containers/multiset/modifiers/erase/51142.cc: Likewise.
++ * testsuite/23_containers/unordered_multiset/erase/51142.cc: Likewise.
++ * testsuite/23_containers/map/modifiers/erase/51142.cc: Likewise.
++
++2011-11-15 Jason Dick <dickphd@gmail.com>
++
++ PR libstdc++/51133
++ * include/tr1/poly_hermite.tcc (__poly_hermite_recursion): Fix
++ wrong sign in recursion relation.
++
++2011-11-02 Richard B. Kreckel <kreckel@ginac.de>
++ Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR libstdc++/50880
++ * include/std/complex (__complex_acosh): Fix in a better way,
++ use Kahan's formula.
++ * include/tr1/complex (__complex_acosh): Likewise.
++
++2011-11-02 Richard B. Kreckel <kreckel@ginac.de>
++ Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR libstdc++/50880
++ * include/std/complex (__complex_acosh): Fix for __z.real() < 0.
++ * include/tr1/complex (__complex_acosh): Likewise.
++ * testsuite/26_numerics/complex/50880.cc: New.
++ * testsuite/tr1/8_c_compatibility/complex/50880.cc: Likewise.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: libstdc++-v3/testsuite/26_numerics/complex/50880.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/26_numerics/complex/50880.cc (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/testsuite/26_numerics/complex/50880.cc (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,53 @@
++// { dg-options "-std=gnu++0x" }
++//
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <complex>
++#include <testsuite_hooks.h>
++
++template<typename T>
++ void test01_do()
++ {
++ bool test __attribute__((unused)) = true;
++
++ const std::complex<T> ca(T(-2), T(2));
++ const std::complex<T> cb(T(-2), T(0));
++ const std::complex<T> cc(T(-2), T(-2));
++
++ std::complex<T> cra = std::acosh(ca);
++ std::complex<T> crb = std::acosh(cb);
++ std::complex<T> crc = std::acosh(cc);
++
++ VERIFY( cra.real() > T(0) );
++ VERIFY( crb.real() > T(0) );
++ VERIFY( crc.real() > T(0) );
++ }
++
++// libstdc++/50880
++void test01()
++{
++ test01_do<float>();
++ test01_do<double>();
++ test01_do<long double>();
++}
++
++int main()
++{
++ test01();
++ return 0;
++}
+Index: libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,51 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <tr1/complex>
++#include <testsuite_hooks.h>
++
++template<typename T>
++ void test01_do()
++ {
++ bool test __attribute__((unused)) = true;
++
++ const std::complex<T> ca(T(-2), T(2));
++ const std::complex<T> cb(T(-2), T(0));
++ const std::complex<T> cc(T(-2), T(-2));
++
++ std::complex<T> cra = std::tr1::acosh(ca);
++ std::complex<T> crb = std::tr1::acosh(cb);
++ std::complex<T> crc = std::tr1::acosh(cc);
++
++ VERIFY( cra.real() > T(0) );
++ VERIFY( crb.real() > T(0) );
++ VERIFY( crc.real() > T(0) );
++ }
++
++// libstdc++/50880
++void test01()
++{
++ test01_do<float>();
++ test01_do<double>();
++ test01_do<long double>();
++}
++
++int main()
++{
++ test01();
++ return 0;
++}
+Index: libstdc++-v3/testsuite/23_containers/unordered_map/erase/51142.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/23_containers/unordered_map/erase/51142.cc (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/testsuite/23_containers/unordered_map/erase/51142.cc (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <unordered_map>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator==(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::unordered_map<X, int>& s, X x)
++{
++ std::unordered_map<X, int>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+Index: libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <map>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator<(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::multimap<X, int>& s, X x)
++{
++ std::multimap<X, int>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+Index: libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <set>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator<(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::set<X>& s, X x)
++{
++ std::set<X>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+Index: libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51142.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51142.cc (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51142.cc (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <unordered_map>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator==(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::unordered_multimap<X, int>& s, X x)
++{
++ std::unordered_multimap<X, int>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+Index: libstdc++-v3/testsuite/23_containers/unordered_set/erase/51142.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/23_containers/unordered_set/erase/51142.cc (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/testsuite/23_containers/unordered_set/erase/51142.cc (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <unordered_set>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator==(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::unordered_set<X>& s, X x)
++{
++ std::unordered_set<X>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+Index: libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <set>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator<(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::multiset<X>& s, X x)
++{
++ std::multiset<X>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+Index: libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/51142.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/51142.cc (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/51142.cc (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <unordered_set>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator==(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::unordered_multiset<X>& s, X x)
++{
++ std::unordered_multiset<X>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+Index: libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc (.../tags/gcc_4_6_2_release)
++++ b/src/libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc (.../branches/gcc-4_6-branch)
+@@ -0,0 +1,38 @@
++// Copyright (C) 2011 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++
++// { dg-do compile }
++// { dg-options "-std=gnu++0x" }
++
++#include <map>
++
++struct X
++{
++ template<typename T>
++ X(T&) {}
++};
++
++bool operator<(const X&, const X&) { return false; }
++
++// LWG 2059.
++void erasor(std::map<X, int>& s, X x)
++{
++ std::map<X, int>::iterator it = s.find(x);
++ if (it != s.end())
++ s.erase(it);
++}
+Index: configure.ac
+===================================================================
+--- a/src/configure.ac (.../tags/gcc_4_6_2_release)
++++ b/src/configure.ac (.../branches/gcc-4_6-branch)
+@@ -2428,10 +2428,6 @@
+ extra_arflags_for_target=" -X32_64"
+ extra_nmflags_for_target=" -B -X32_64"
+ ;;
+- *-*-darwin[[3-9]]*)
+- # ranlib before Darwin10 requires the -c flag to look at common symbols.
+- extra_ranlibflags_for_target=" -c"
+- ;;
+ mips*-*-pe | sh*-*-pe | *arm-wince-pe)
+ target_makefile_frag="config/mt-wince"
+ ;;
+Index: libobjc/configure
+===================================================================
+--- a/src/libobjc/configure (.../tags/gcc_4_6_2_release)
++++ b/src/libobjc/configure (.../branches/gcc-4_6-branch)
+@@ -8797,7 +8797,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -9713,7 +9713,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -9731,7 +9731,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+Index: libobjc/ChangeLog
+===================================================================
+--- a/src/libobjc/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/libobjc/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: libgfortran/configure
+===================================================================
+--- a/src/libgfortran/configure (.../tags/gcc_4_6_2_release)
++++ b/src/libgfortran/configure (.../branches/gcc-4_6-branch)
+@@ -10326,7 +10326,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -11242,7 +11242,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -11260,7 +11260,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -14162,7 +14162,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_FC=yes
+ hardcode_minus_L_FC=yes
+@@ -14870,7 +14870,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -14888,7 +14888,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+Index: libgfortran/ChangeLog
+===================================================================
+--- a/src/libgfortran/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/libgfortran/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: libada/Makefile.in
+===================================================================
+--- a/src/libada/Makefile.in (.../tags/gcc_4_6_2_release)
++++ b/src/libada/Makefile.in (.../branches/gcc-4_6-branch)
+@@ -70,6 +70,7 @@
+ version := $(shell cat $(srcdir)/../gcc/BASE-VER)
+ libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR)
+ ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR))
++ADA_RTS_SUBDIR=./rts$(subst /,_,$(MULTISUBDIR))
+
+ # exeext should not be used because it's the *host* exeext. We're building
+ # a *target* library, aren't we?!? Likewise for CC. Still, provide bogus
+@@ -96,10 +97,10 @@
+ "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)"
+
+ # Rules to build gnatlib.
+-.PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared oscons
++.PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared osconstool
+ gnatlib: @default_gnatlib_target@
+
+-gnatlib-plain: oscons $(GCC_DIR)/ada/Makefile
++gnatlib-plain: osconstool $(GCC_DIR)/ada/Makefile
+ test -f stamp-libada || \
+ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) gnatlib \
+ && touch stamp-libada
+@@ -108,7 +109,7 @@
+ $(LN_S) $(ADA_RTS_DIR) adainclude
+ $(LN_S) $(ADA_RTS_DIR) adalib
+
+-gnatlib-sjlj gnatlib-zcx gnatlib-shared: oscons $(GCC_DIR)/ada/Makefile
++gnatlib-sjlj gnatlib-zcx gnatlib-shared: osconstool $(GCC_DIR)/ada/Makefile
+ test -f stamp-libada || \
+ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) $@ \
+ && touch stamp-libada
+@@ -117,8 +118,8 @@
+ $(LN_S) $(ADA_RTS_DIR) adainclude
+ $(LN_S) $(ADA_RTS_DIR) adalib
+
+-oscons:
+- $(MAKE) -C $(GCC_DIR) $(LIBADA_FLAGS_TO_PASS) ada/s-oscons.ads
++osconstool:
++ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) ./bldtools/oscons/xoscons
+
+ install-gnatlib: $(GCC_DIR)/ada/Makefile
+ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) install-gnatlib
+Index: libada/ChangeLog
+===================================================================
+--- a/src/libada/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/libada/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,9 @@
++2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
++
++ Backport from mainline r181319
++ Makefile.in: Change dependency on oscons to depend on the generator
++ tool.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: libmudflap/configure
+===================================================================
+--- a/src/libmudflap/configure (.../tags/gcc_4_6_2_release)
++++ b/src/libmudflap/configure (.../branches/gcc-4_6-branch)
+@@ -8818,7 +8818,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -9731,7 +9731,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -9749,7 +9749,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+Index: libmudflap/ChangeLog
+===================================================================
+--- a/src/libmudflap/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/libmudflap/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: boehm-gc/ChangeLog
+===================================================================
+--- a/src/boehm-gc/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/boehm-gc/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: boehm-gc/configure
+===================================================================
+--- a/src/boehm-gc/configure (.../tags/gcc_4_6_2_release)
++++ b/src/boehm-gc/configure (.../branches/gcc-4_6-branch)
+@@ -9604,7 +9604,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -10520,7 +10520,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -10538,7 +10538,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -12428,7 +12428,7 @@
+ esac
+ ;;
+
+- freebsd[12]*)
++ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ ld_shlibs_CXX=no
+@@ -14203,7 +14203,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -14221,7 +14221,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+Index: libiberty/ChangeLog
+===================================================================
+--- a/src/libiberty/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/libiberty/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,17 @@
++2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
++
++ PR target/48108
++ Backport from mainline r180523
++ * simple-object-mach-o.c (GNU_WRAPPER_SECTS, GNU_WRAPPER_INDEX,
++ GNU_WRAPPER_NAMES): New macros.
++ (simple_object_mach_o_segment): Handle wrapper scheme.
++ (simple_object_mach_o_write_section_header): Allow the segment name
++ to be supplied.
++ (simple_object_mach_o_write_segment): Handle wrapper scheme. Ensure
++ that the top-level segment name in the load command is empty.
++ (simple_object_mach_o_write_to_file): Determine the number of
++ sections during segment output, use that in writing the header.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: libiberty/simple-object-mach-o.c
+===================================================================
+--- a/src/libiberty/simple-object-mach-o.c (.../tags/gcc_4_6_2_release)
++++ b/src/libiberty/simple-object-mach-o.c (.../branches/gcc-4_6-branch)
+@@ -1,5 +1,5 @@
+ /* simple-object-mach-o.c -- routines to manipulate Mach-O object files.
+- Copyright 2010 Free Software Foundation, Inc.
++ Copyright 2010, 2011 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+ This program is free software; you can redistribute it and/or modify it
+@@ -174,6 +174,15 @@
+
+ #define GNU_SECTION_NAMES "__section_names"
+
++/* A GNU-specific extension to wrap multiple sections using three
++ mach-o sections within a given segment. The section '__wrapper_sects'
++ is subdivided according to the index '__wrapper_index' and each sub
++ sect is named according to the names supplied in '__wrapper_names'. */
++
++#define GNU_WRAPPER_SECTS "__wrapper_sects"
++#define GNU_WRAPPER_INDEX "__wrapper_index"
++#define GNU_WRAPPER_NAMES "__wrapper_names"
++
+ /* Private data for an simple_object_read. */
+
+ struct simple_object_mach_o_read
+@@ -214,8 +223,19 @@
+ unsigned int reserved;
+ };
+
+-/* See if we have a Mach-O file. */
++/* See if we have a Mach-O MH_OBJECT file:
+
++ A standard MH_OBJECT (from as) will have three load commands:
++ 0 - LC_SEGMENT/LC_SEGMENT64
++ 1 - LC_SYMTAB
++ 2 - LC_DYSYMTAB
++
++ The LC_SEGMENT/LC_SEGMENT64 will introduce a single anonymous segment
++ containing all the sections.
++
++ Files written by simple-object will have only the segment command
++ (no symbol tables). */
++
+ static void *
+ simple_object_mach_o_match (
+ unsigned char header[SIMPLE_OBJECT_MATCH_HEADER_LEN],
+@@ -356,9 +376,30 @@
+ }
+ }
+
+-/* Handle a segment in a Mach-O file. Return 1 if we should continue,
+- 0 if the caller should return. */
++/* Handle a segment in a Mach-O Object file.
+
++ This will callback to the function pfn for each "section found" the meaning
++ of which depends on gnu extensions to mach-o:
++
++ If we find mach-o sections (with the segment name as specified) which also
++ contain: a 'sects' wrapper, an index, and a name table, we expand this into
++ as many sections as are specified in the index. In this case, there will
++ be a callback for each of these.
++
++ We will also allow an extension that permits long names (more than 16
++ characters) to be used with mach-o. In this case, the section name has
++ a specific format embedding an index into a name table, and the file must
++ contain such name table.
++
++ Return 1 if we should continue, 0 if the caller should return. */
++
++#define SOMO_SECTS_PRESENT 0x01
++#define SOMO_INDEX_PRESENT 0x02
++#define SOMO_NAMES_PRESENT 0x04
++#define SOMO_LONGN_PRESENT 0x08
++#define SOMO_WRAPPING (SOMO_SECTS_PRESENT | SOMO_INDEX_PRESENT \
++ | SOMO_NAMES_PRESENT)
++
+ static int
+ simple_object_mach_o_segment (simple_object_read *sobj, off_t offset,
+ const unsigned char *segbuf,
+@@ -378,9 +419,20 @@
+ unsigned int nsects;
+ unsigned char *secdata;
+ unsigned int i;
++ unsigned int gnu_sections_found;
+ unsigned int strtab_index;
++ unsigned int index_index;
++ unsigned int nametab_index;
++ unsigned int sections_index;
+ char *strtab;
++ char *nametab;
++ unsigned char *index;
+ size_t strtab_size;
++ size_t nametab_size;
++ size_t index_size;
++ unsigned int n_wrapped_sects;
++ size_t wrapper_sect_size;
++ off_t wrapper_sect_offset;
+
+ fetch_32 = (omr->is_big_endian
+ ? simple_object_fetch_big_32
+@@ -409,6 +461,8 @@
+ nsects));
+ }
+
++ /* Fetch the section headers from the segment command. */
++
+ secdata = XNEWVEC (unsigned char, nsects * sechdrsize);
+ if (!simple_object_internal_read (sobj->descriptor, offset + seghdrsize,
+ secdata, nsects * sechdrsize, errmsg, err))
+@@ -417,9 +471,13 @@
+ return 0;
+ }
+
+- /* Scan for a __section_names section. This is in effect a GNU
+- extension that permits section names longer than 16 chars. */
++ /* Scan for special sections that signal GNU extensions to the format. */
+
++ gnu_sections_found = 0;
++ index_index = nsects;
++ sections_index = nsects;
++ strtab_index = nsects;
++ nametab_index = nsects;
+ for (i = 0; i < nsects; ++i)
+ {
+ size_t nameoff;
+@@ -427,19 +485,104 @@
+ nameoff = i * sechdrsize + segname_offset;
+ if (strcmp ((char *) secdata + nameoff, omr->segment_name) != 0)
+ continue;
++
+ nameoff = i * sechdrsize + sectname_offset;
+- if (strcmp ((char *) secdata + nameoff, GNU_SECTION_NAMES) == 0)
+- break;
++ if (strcmp ((char *) secdata + nameoff, GNU_WRAPPER_NAMES) == 0)
++ {
++ nametab_index = i;
++ gnu_sections_found |= SOMO_NAMES_PRESENT;
++ }
++ else if (strcmp ((char *) secdata + nameoff, GNU_WRAPPER_INDEX) == 0)
++ {
++ index_index = i;
++ gnu_sections_found |= SOMO_INDEX_PRESENT;
++ }
++ else if (strcmp ((char *) secdata + nameoff, GNU_WRAPPER_SECTS) == 0)
++ {
++ sections_index = i;
++ gnu_sections_found |= SOMO_SECTS_PRESENT;
++ }
++ else if (strcmp ((char *) secdata + nameoff, GNU_SECTION_NAMES) == 0)
++ {
++ strtab_index = i;
++ gnu_sections_found |= SOMO_LONGN_PRESENT;
++ }
+ }
+
+- strtab_index = i;
+- if (strtab_index >= nsects)
++ /* If any of the special wrapper section components is present, then
++ they all should be. */
++
++ if ((gnu_sections_found & SOMO_WRAPPING) != 0)
+ {
+- strtab = NULL;
+- strtab_size = 0;
++ off_t nametab_offset;
++ off_t index_offset;
++
++ if ((gnu_sections_found & SOMO_WRAPPING) != SOMO_WRAPPING)
++ {
++ *errmsg = "GNU Mach-o section wrapper: required section missing";
++ *err = 0; /* No useful errno. */
++ XDELETEVEC (secdata);
++ return 0;
++ }
++
++ /* Fetch the name table. */
++
++ simple_object_mach_o_section_info (omr->is_big_endian, is_32,
++ secdata + nametab_index * sechdrsize,
++ &nametab_offset, &nametab_size);
++ nametab = XNEWVEC (char, nametab_size);
++ if (!simple_object_internal_read (sobj->descriptor,
++ sobj->offset + nametab_offset,
++ (unsigned char *) nametab, nametab_size,
++ errmsg, err))
++ {
++ XDELETEVEC (nametab);
++ XDELETEVEC (secdata);
++ return 0;
++ }
++
++ /* Fetch the index. */
++
++ simple_object_mach_o_section_info (omr->is_big_endian, is_32,
++ secdata + index_index * sechdrsize,
++ &index_offset, &index_size);
++ index = XNEWVEC (unsigned char, index_size);
++ if (!simple_object_internal_read (sobj->descriptor,
++ sobj->offset + index_offset,
++ index, index_size,
++ errmsg, err))
++ {
++ XDELETEVEC (index);
++ XDELETEVEC (nametab);
++ XDELETEVEC (secdata);
++ return 0;
++ }
++
++ /* The index contains 4 unsigned ints per sub-section:
++ sub-section offset/length, sub-section name/length.
++ We fix this for both 32 and 64 bit mach-o for now, since
++ other fields limit the maximum size of an object to 4G. */
++ n_wrapped_sects = index_size / 16;
++
++ /* Get the parameters for the wrapper too. */
++ simple_object_mach_o_section_info (omr->is_big_endian, is_32,
++ secdata + sections_index * sechdrsize,
++ &wrapper_sect_offset,
++ &wrapper_sect_size);
+ }
+ else
+ {
++ index = NULL;
++ index_size = 0;
++ nametab = NULL;
++ nametab_size = 0;
++ n_wrapped_sects = 0;
++ }
++
++ /* If we have a long names section, fetch it. */
++
++ if ((gnu_sections_found & SOMO_LONGN_PRESENT) != 0)
++ {
+ off_t strtab_offset;
+
+ simple_object_mach_o_section_info (omr->is_big_endian, is_32,
+@@ -452,52 +595,120 @@
+ errmsg, err))
+ {
+ XDELETEVEC (strtab);
++ XDELETEVEC (index);
++ XDELETEVEC (nametab);
+ XDELETEVEC (secdata);
+ return 0;
+ }
+ }
++ else
++ {
++ strtab = NULL;
++ strtab_size = 0;
++ strtab_index = nsects;
++ }
+
+ /* Process the sections. */
+
+ for (i = 0; i < nsects; ++i)
+ {
+ const unsigned char *sechdr;
+- char namebuf[MACH_O_NAME_LEN + 1];
++ char namebuf[MACH_O_NAME_LEN * 2 + 2];
+ char *name;
+ off_t secoffset;
+ size_t secsize;
++ int l;
+
+- if (i == strtab_index)
++ sechdr = secdata + i * sechdrsize;
++
++ /* We've already processed the long section names. */
++
++ if ((gnu_sections_found & SOMO_LONGN_PRESENT) != 0
++ && i == strtab_index)
+ continue;
+
+- sechdr = secdata + i * sechdrsize;
++ /* We only act on the segment named. */
+
+ if (strcmp ((char *) sechdr + segname_offset, omr->segment_name) != 0)
+ continue;
+
+- memcpy (namebuf, sechdr + sectname_offset, MACH_O_NAME_LEN);
+- namebuf[MACH_O_NAME_LEN] = '\0';
++ /* Process sections associated with the wrapper. */
+
+- name = &namebuf[0];
+- if (strtab != NULL && name[0] == '_' && name[1] == '_')
++ if ((gnu_sections_found & SOMO_WRAPPING) != 0)
+ {
+- unsigned long stringoffset;
++ if (i == nametab_index || i == index_index)
++ continue;
+
+- if (sscanf (name + 2, "%08lX", &stringoffset) == 1)
++ if (i == sections_index)
+ {
+- if (stringoffset >= strtab_size)
++ unsigned int j;
++ for (j = 0; j < n_wrapped_sects; ++j)
+ {
+- *errmsg = "section name offset out of range";
+- *err = 0;
+- XDELETEVEC (strtab);
+- XDELETEVEC (secdata);
+- return 0;
++ unsigned int subsect_offset, subsect_length, name_offset;
++ subsect_offset = (*fetch_32) (index + 16 * j);
++ subsect_length = (*fetch_32) (index + 16 * j + 4);
++ name_offset = (*fetch_32) (index + 16 * j + 8);
++ /* We don't need the name_length yet. */
++
++ secoffset = wrapper_sect_offset + subsect_offset;
++ secsize = subsect_length;
++ name = nametab + name_offset;
++
++ if (!(*pfn) (data, name, secoffset, secsize))
++ {
++ *errmsg = NULL;
++ *err = 0;
++ XDELETEVEC (index);
++ XDELETEVEC (nametab);
++ XDELETEVEC (strtab);
++ XDELETEVEC (secdata);
++ return 0;
++ }
+ }
+-
+- name = strtab + stringoffset;
++ continue;
+ }
+ }
+
++ if ((gnu_sections_found & SOMO_LONGN_PRESENT) != 0)
++ {
++ memcpy (namebuf, sechdr + sectname_offset, MACH_O_NAME_LEN);
++ namebuf[MACH_O_NAME_LEN] = '\0';
++
++ name = &namebuf[0];
++ if (strtab != NULL && name[0] == '_' && name[1] == '_')
++ {
++ unsigned long stringoffset;
++
++ if (sscanf (name + 2, "%08lX", &stringoffset) == 1)
++ {
++ if (stringoffset >= strtab_size)
++ {
++ *errmsg = "section name offset out of range";
++ *err = 0;
++ XDELETEVEC (index);
++ XDELETEVEC (nametab);
++ XDELETEVEC (strtab);
++ XDELETEVEC (secdata);
++ return 0;
++ }
++
++ name = strtab + stringoffset;
++ }
++ }
++ }
++ else
++ {
++ /* Otherwise, make a name like __segment,__section as per the
++ convention in mach-o asm. */
++ name = &namebuf[0];
++ memset (namebuf, 0, MACH_O_NAME_LEN * 2 + 2);
++ memcpy (namebuf, (char *) sechdr + segname_offset, MACH_O_NAME_LEN);
++ l = strlen (namebuf);
++ namebuf[l] = ',';
++ memcpy (namebuf + l + 1, (char *) sechdr + sectname_offset,
++ MACH_O_NAME_LEN);
++ }
++
+ simple_object_mach_o_section_info (omr->is_big_endian, is_32, sechdr,
+ &secoffset, &secsize);
+
+@@ -505,12 +716,16 @@
+ {
+ *errmsg = NULL;
+ *err = 0;
++ XDELETEVEC (index);
++ XDELETEVEC (nametab);
+ XDELETEVEC (strtab);
+ XDELETEVEC (secdata);
+ return 0;
+ }
+ }
+
++ XDELETEVEC (index);
++ XDELETEVEC (nametab);
+ XDELETEVEC (strtab);
+ XDELETEVEC (secdata);
+
+@@ -724,9 +939,9 @@
+ simple_object_mach_o_write_section_header (simple_object_write *sobj,
+ int descriptor,
+ size_t sechdr_offset,
+- const char *name, size_t secaddr,
+- size_t secsize, size_t offset,
+- unsigned int align,
++ const char *name, const char *segn,
++ size_t secaddr, size_t secsize,
++ size_t offset, unsigned int align,
+ const char **errmsg, int *err)
+ {
+ struct simple_object_mach_o_attributes *attrs =
+@@ -748,7 +963,7 @@
+ strncpy ((char *) hdr + offsetof (struct mach_o_section_32, sectname),
+ name, MACH_O_NAME_LEN);
+ strncpy ((char *) hdr + offsetof (struct mach_o_section_32, segname),
+- sobj->segment_name, MACH_O_NAME_LEN);
++ segn, MACH_O_NAME_LEN);
+ set_32 (hdr + offsetof (struct mach_o_section_32, addr), secaddr);
+ set_32 (hdr + offsetof (struct mach_o_section_32, size), secsize);
+ set_32 (hdr + offsetof (struct mach_o_section_32, offset), offset);
+@@ -773,7 +988,7 @@
+ strncpy ((char *) hdr + offsetof (struct mach_o_section_64, sectname),
+ name, MACH_O_NAME_LEN);
+ strncpy ((char *) hdr + offsetof (struct mach_o_section_64, segname),
+- sobj->segment_name, MACH_O_NAME_LEN);
++ segn, MACH_O_NAME_LEN);
+ set_64 (hdr + offsetof (struct mach_o_section_64, addr), secaddr);
+ set_64 (hdr + offsetof (struct mach_o_section_64, size), secsize);
+ set_32 (hdr + offsetof (struct mach_o_section_64, offset), offset);
+@@ -793,11 +1008,25 @@
+ sechdrsize, errmsg, err);
+ }
+
+-/* Write out the single segment and the sections of a Mach-O file. */
++/* Write out the single (anonymous) segment containing the sections of a Mach-O
++ Object file.
+
++ As a GNU extension to mach-o, when the caller specifies a segment name in
++ sobj->segment_name, all the sections passed will be output under a single
++ mach-o section header. The caller's sections are indexed within this
++ 'wrapper' section by a table stored in a second mach-o section. Finally,
++ arbitrary length section names are permitted by the extension and these are
++ stored in a table in a third mach-o section.
++
++ Note that this is only likely to make any sense for the __GNU_LTO segment
++ at present.
++
++ If the wrapper extension is not in force, we assume that the section name
++ is in the form __SEGMENT_NAME,__section_name as per Mach-O asm. */
++
+ static int
+ simple_object_mach_o_write_segment (simple_object_write *sobj, int descriptor,
+- size_t nsects, const char **errmsg,
++ size_t *nsects, const char **errmsg,
+ int *err)
+ {
+ struct simple_object_mach_o_attributes *attrs =
+@@ -814,6 +1043,10 @@
+ simple_object_write_section *section;
+ unsigned char hdrbuf[sizeof (struct mach_o_segment_command_64)];
+ unsigned char *hdr;
++ size_t nsects_in;
++ unsigned int *index;
++ char *snames;
++ unsigned int sect;
+
+ set_32 = (attrs->is_big_endian
+ ? simple_object_set_big_32
+@@ -834,19 +1067,62 @@
+ sechdrsize = sizeof (struct mach_o_section_64);
+ }
+
++ name_offset = 0;
++ *nsects = nsects_in = 0;
++
++ /* Count the number of sections we start with. */
++
++ for (section = sobj->sections; section != NULL; section = section->next)
++ nsects_in++;
++
++ if (sobj->segment_name != NULL)
++ {
++ /* We will only write 3 sections: wrapped data, index and names. */
++
++ *nsects = 3;
++
++ /* The index has four entries per wrapped section:
++ Section Offset, length, Name offset, length.
++ Where the offsets are based at the start of the wrapper and name
++ sections respectively.
++ The values are stored as 32 bit int for both 32 and 64 bit mach-o
++ since the size of a mach-o MH_OBJECT cannot exceed 4G owing to
++ other constraints. */
++
++ index = XNEWVEC (unsigned int, nsects_in * 4);
++
++ /* We now need to figure out the size of the names section. This just
++ stores the names as null-terminated c strings, packed without any
++ alignment padding. */
++
++ for (section = sobj->sections, sect = 0; section != NULL;
++ section = section->next, sect++)
++ {
++ index[sect*4+2] = name_offset;
++ index[sect*4+3] = strlen (section->name) + 1;
++ name_offset += strlen (section->name) + 1;
++ }
++ snames = XNEWVEC (char, name_offset);
++ }
++ else
++ {
++ *nsects = nsects_in;
++ index = NULL;
++ snames = NULL;
++ }
++
+ sechdr_offset = hdrsize + seghdrsize;
+- cmdsize = seghdrsize + nsects * sechdrsize;
++ cmdsize = seghdrsize + *nsects * sechdrsize;
+ offset = hdrsize + cmdsize;
+- name_offset = 0;
+ secaddr = 0;
+
+- for (section = sobj->sections; section != NULL; section = section->next)
++ for (section = sobj->sections, sect = 0;
++ section != NULL; section = section->next, sect++)
+ {
+ size_t mask;
+ size_t new_offset;
+ size_t secsize;
+ struct simple_object_write_section_buffer *buffer;
+- char namebuf[MACH_O_NAME_LEN + 1];
+
+ mask = (1U << section->align) - 1;
+ new_offset = offset + mask;
+@@ -877,39 +1153,126 @@
+ secsize += buffer->size;
+ }
+
+- snprintf (namebuf, sizeof namebuf, "__%08X", name_offset);
++ if (sobj->segment_name != NULL)
++ {
++ index[sect*4+0] = (unsigned int) offset;
++ index[sect*4+1] = secsize;
++ /* Stash the section name in our table. */
++ memcpy (snames + index[sect * 4 + 2], section->name,
++ index[sect * 4 + 3]);
++ }
++ else
++ {
++ char namebuf[MACH_O_NAME_LEN + 1];
++ char segnbuf[MACH_O_NAME_LEN + 1];
++ char *comma;
++
++ /* Try to extract segment,section from the input name. */
++
++ memset (namebuf, 0, sizeof namebuf);
++ memset (segnbuf, 0, sizeof segnbuf);
++ comma = strchr (section->name, ',');
++ if (comma != NULL)
++ {
++ int len = comma - section->name;
++ len = len > MACH_O_NAME_LEN ? MACH_O_NAME_LEN : len;
++ strncpy (namebuf, section->name, len);
++ strncpy (segnbuf, comma + 1, MACH_O_NAME_LEN);
++ }
++ else /* just try to copy the name, leave segment blank. */
++ strncpy (namebuf, section->name, MACH_O_NAME_LEN);
++
++ if (!simple_object_mach_o_write_section_header (sobj, descriptor,
++ sechdr_offset,
++ namebuf, segnbuf,
++ secaddr, secsize,
++ offset,
++ section->align,
++ errmsg, err))
++ return 0;
++ sechdr_offset += sechdrsize;
++ }
++
++ offset += secsize;
++ secaddr += secsize;
++ }
++
++ if (sobj->segment_name != NULL)
++ {
++ size_t secsize;
++ unsigned int i;
++
++ /* Write the section header for the wrapper. */
++ /* Account for any initial aligment - which becomes the alignment for this
++ created section. */
++
++ secsize = (offset - index[0]);
+ if (!simple_object_mach_o_write_section_header (sobj, descriptor,
+- sechdr_offset, namebuf,
+- secaddr, secsize, offset,
+- section->align,
++ sechdr_offset,
++ GNU_WRAPPER_SECTS,
++ sobj->segment_name,
++ 0 /*secaddr*/,
++ secsize, index[0],
++ sobj->sections->align,
+ errmsg, err))
+ return 0;
+
++ /* Subtract the wrapper section start from the begining of each sub
++ section. */
++
++ for (i = 1; i < nsects_in; ++i)
++ index[4 * i] -= index[0];
++ index[0] = 0;
++
+ sechdr_offset += sechdrsize;
+- offset += secsize;
+- name_offset += strlen (section->name) + 1;
+- secaddr += secsize;
+- }
+
+- /* Write out the section names. */
++ /* Write out the section names.
++ ... the header ...
++ name_offset contains the length of the section. It is not aligned. */
+
+- if (!simple_object_mach_o_write_section_header (sobj, descriptor,
+- sechdr_offset,
+- GNU_SECTION_NAMES, secaddr,
+- name_offset, offset, 0,
+- errmsg, err))
+- return 0;
++ if (!simple_object_mach_o_write_section_header (sobj, descriptor,
++ sechdr_offset,
++ GNU_WRAPPER_NAMES,
++ sobj->segment_name,
++ 0 /*secaddr*/,
++ name_offset,
++ offset,
++ 0, errmsg, err))
++ return 0;
+
+- for (section = sobj->sections; section != NULL; section = section->next)
+- {
+- size_t namelen;
++ /* ... and the content.. */
++ if (!simple_object_internal_write (descriptor, offset,
++ (const unsigned char *) snames,
++ name_offset, errmsg, err))
++ return 0;
+
+- namelen = strlen (section->name) + 1;
++ sechdr_offset += sechdrsize;
++ secaddr += name_offset;
++ offset += name_offset;
++
++ /* Now do the index, we'll align this to 4 bytes although the read code
++ will handle unaligned. */
++
++ offset += 3;
++ offset &= ~0x03;
++ if (!simple_object_mach_o_write_section_header (sobj, descriptor,
++ sechdr_offset,
++ GNU_WRAPPER_INDEX,
++ sobj->segment_name,
++ 0 /*secaddr*/,
++ nsects_in * 16,
++ offset,
++ 2, errmsg, err))
++ return 0;
++
++ /* ... and the content.. */
+ if (!simple_object_internal_write (descriptor, offset,
+- (const unsigned char *) section->name,
+- namelen, errmsg, err))
++ (const unsigned char *) index,
++ nsects_in*16, errmsg, err))
+ return 0;
+- offset += namelen;
++
++ XDELETEVEC (index);
++ XDELETEVEC (snames);
+ }
+
+ /* Write out the segment header. */
+@@ -923,9 +1286,8 @@
+ MACH_O_LC_SEGMENT);
+ set_32 (hdr + offsetof (struct mach_o_segment_command_32, cmdsize),
+ cmdsize);
+- strncpy (((char *) hdr
+- + offsetof (struct mach_o_segment_command_32, segname)),
+- sobj->segment_name, MACH_O_NAME_LEN);
++ /* MH_OBJECTS have a single, anonymous, segment - so the segment name
++ is left empty. */
+ /* vmaddr left as zero. */
+ /* vmsize left as zero. */
+ set_32 (hdr + offsetof (struct mach_o_segment_command_32, fileoff),
+@@ -935,7 +1297,7 @@
+ /* maxprot left as zero. */
+ /* initprot left as zero. */
+ set_32 (hdr + offsetof (struct mach_o_segment_command_32, nsects),
+- nsects);
++ *nsects);
+ /* flags left as zero. */
+ }
+ else
+@@ -951,9 +1313,8 @@
+ MACH_O_LC_SEGMENT);
+ set_32 (hdr + offsetof (struct mach_o_segment_command_64, cmdsize),
+ cmdsize);
+- strncpy (((char *) hdr
+- + offsetof (struct mach_o_segment_command_64, segname)),
+- sobj->segment_name, MACH_O_NAME_LEN);
++ /* MH_OBJECTS have a single, anonymous, segment - so the segment name
++ is left empty. */
+ /* vmaddr left as zero. */
+ /* vmsize left as zero. */
+ set_64 (hdr + offsetof (struct mach_o_segment_command_64, fileoff),
+@@ -963,7 +1324,7 @@
+ /* maxprot left as zero. */
+ /* initprot left as zero. */
+ set_32 (hdr + offsetof (struct mach_o_segment_command_64, nsects),
+- nsects);
++ *nsects);
+ /* flags left as zero. */
+ #endif
+ }
+@@ -978,23 +1339,17 @@
+ simple_object_mach_o_write_to_file (simple_object_write *sobj, int descriptor,
+ int *err)
+ {
+- size_t nsects;
+- simple_object_write_section *section;
++ size_t nsects = 0;
+ const char *errmsg;
+
+- /* Start at 1 for symbol_names section. */
+- nsects = 1;
+- for (section = sobj->sections; section != NULL; section = section->next)
+- ++nsects;
++ if (!simple_object_mach_o_write_segment (sobj, descriptor, &nsects,
++ &errmsg, err))
++ return errmsg;
+
+ if (!simple_object_mach_o_write_header (sobj, descriptor, nsects,
+ &errmsg, err))
+ return errmsg;
+
+- if (!simple_object_mach_o_write_segment (sobj, descriptor, nsects,
+- &errmsg, err))
+- return errmsg;
+-
+ return NULL;
+ }
+
+Index: ChangeLog
+===================================================================
+--- a/src/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,13 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * libtool.m4: Additional FreeBSD 10 fixes.
++
++2011-11-18 Iain Sandoe <iains@gcc.gnu.org>
++
++ PR target/49992
++ * configure.ac: Remove ranlib special-casing for Darwin.
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: lto-plugin/configure
+===================================================================
+--- a/src/lto-plugin/configure (.../tags/gcc_4_6_2_release)
++++ b/src/lto-plugin/configure (.../branches/gcc-4_6-branch)
+@@ -8733,7 +8733,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -9646,7 +9646,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -9664,7 +9664,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+Index: lto-plugin/ChangeLog
+===================================================================
+--- a/src/lto-plugin/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/lto-plugin/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: libffi/configure
+===================================================================
+--- a/src/libffi/configure (.../tags/gcc_4_6_2_release)
++++ b/src/libffi/configure (.../branches/gcc-4_6-branch)
+@@ -9001,7 +9001,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -9914,7 +9914,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -9932,7 +9932,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+Index: libffi/ChangeLog
+===================================================================
+--- a/src/libffi/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/libffi/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: libssp/configure
+===================================================================
+--- a/src/libssp/configure (.../tags/gcc_4_6_2_release)
++++ b/src/libssp/configure (.../branches/gcc-4_6-branch)
+@@ -8864,7 +8864,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -9780,7 +9780,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -9798,7 +9798,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+Index: libssp/ChangeLog
+===================================================================
+--- a/src/libssp/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/libssp/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,7 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: libjava/libltdl/configure
+===================================================================
+--- a/src/libjava/libltdl/configure (.../tags/gcc_4_6_2_release)
++++ b/src/libjava/libltdl/configure (.../branches/gcc-4_6-branch)
+@@ -7355,7 +7355,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -7968,7 +7968,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+Index: libjava/libltdl/ChangeLog
+===================================================================
+--- a/src/libjava/libltdl/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/libjava/libltdl/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,8 @@
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * acinclude.m4: Additional FreeBSD 10 fixes.
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: libjava/libltdl/acinclude.m4
+===================================================================
+--- a/src/libjava/libltdl/acinclude.m4 (.../tags/gcc_4_6_2_release)
++++ b/src/libjava/libltdl/acinclude.m4 (.../branches/gcc-4_6-branch)
+@@ -1377,7 +1377,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+@@ -3035,7 +3035,7 @@
+ ;;
+ esac
+ ;;
+- freebsd[[12]]*)
++ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before switch to ELF
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+@@ -5669,7 +5669,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+Index: libjava/configure.ac
+===================================================================
+--- a/src/libjava/configure.ac (.../tags/gcc_4_6_2_release)
++++ b/src/libjava/configure.ac (.../branches/gcc-4_6-branch)
+@@ -1060,7 +1060,7 @@
+ *-*-cygwin*)
+ # Don't set THREADLIBS here. Cygwin doesn't have -lpthread.
+ ;;
+- *-*-freebsd[[1234]]*)
++ *-*-freebsd[[34]].*)
+ # Before FreeBSD 5, it didn't have -lpthread (or any library which
+ # merely adds pthread_* functions) but it does have a -pthread switch
+ # which is required at link-time to select -lc_r *instead* of -lc.
+Index: libjava/classpath/config.rpath
+===================================================================
+--- a/src/libjava/classpath/config.rpath (.../tags/gcc_4_6_2_release)
++++ b/src/libjava/classpath/config.rpath (.../branches/gcc-4_6-branch)
+@@ -361,7 +361,7 @@
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+- freebsd2*)
++ freebsd2.*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+@@ -533,7 +533,7 @@
+ ;;
+ freebsd* | dragonfly*)
+ case "$host_os" in
+- freebsd[123]*)
++ freebsd[23].*)
+ library_names_spec='$libname$shrext$versuffix' ;;
+ *)
+ library_names_spec='$libname$shrext' ;;
+Index: libjava/classpath/configure
+===================================================================
+--- a/src/libjava/classpath/configure (.../tags/gcc_4_6_2_release)
++++ b/src/libjava/classpath/configure (.../branches/gcc-4_6-branch)
+@@ -10025,7 +10025,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -10941,7 +10941,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -10959,7 +10959,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -14225,7 +14225,7 @@
+ esac
+ ;;
+
+- freebsd[12]*)
++ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ ld_shlibs_CXX=no
+@@ -16000,7 +16000,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -16018,7 +16018,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+Index: libjava/classpath/ChangeLog.gcj
+===================================================================
+--- a/src/libjava/classpath/ChangeLog.gcj (.../tags/gcc_4_6_2_release)
++++ b/src/libjava/classpath/ChangeLog.gcj (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,9 @@
++2011-11-29 Andreas Tobler <andreast@fgznet.ch>
++
++ * config.rpath (ld_shlibs): Fix detection of FreeBSD-10 and up.
++ (libname_spec): Likewise.
++ * configure: Regenerate with autoconf -I ../../.
++
+ 2011-02-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * config.rpath, ltcf-c.sh, ltcf-gcj.sh, ltconfig: Remove
+Index: libjava/ChangeLog
+===================================================================
+--- a/src/libjava/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/libjava/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,16 @@
++2011-11-24 Jakub Jelinek <jakub@redhat.com>
++
++ PR bootstrap/50888
++ * prims.cc: Don't include ctype.h.
++ (c_isspace): Define.
++ (next_property_key, next_property_value): Use it instead
++ of isspace.
++
++2011-11-20 Andreas Tobler <andreast@fgznet.ch>
++
++ * configure.ac: Fix FreeBSD 10 detection.
++ * configure: Regenerate.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: libjava/prims.cc
+===================================================================
+--- a/src/libjava/prims.cc (.../tags/gcc_4_6_2_release)
++++ b/src/libjava/prims.cc (.../branches/gcc-4_6-branch)
+@@ -38,7 +38,6 @@
+ #endif
+
+ #ifndef DISABLE_GETENV_PROPERTIES
+-#include <ctype.h>
+ #include <java-props.h>
+ #define PROCESS_GCJ_PROPERTIES process_gcj_properties()
+ #else
+@@ -985,6 +984,8 @@
+
+ #ifndef DISABLE_GETENV_PROPERTIES
+
++#define c_isspace(c) (memchr (" \t\n\r\v\f", c, 6) != NULL)
++
+ static char *
+ next_property_key (char *s, size_t *length)
+ {
+@@ -993,7 +994,7 @@
+ JvAssert (s);
+
+ // Skip over whitespace
+- while (isspace (*s))
++ while (c_isspace (*s))
+ s++;
+
+ // If we've reached the end, return NULL. Also return NULL if for
+@@ -1005,7 +1006,7 @@
+
+ // Determine the length of the property key.
+ while (s[l] != 0
+- && ! isspace (s[l])
++ && ! c_isspace (s[l])
+ && s[l] != ':'
+ && s[l] != '=')
+ {
+@@ -1027,19 +1028,19 @@
+
+ JvAssert (s);
+
+- while (isspace (*s))
++ while (c_isspace (*s))
+ s++;
+
+ if (*s == ':'
+ || *s == '=')
+ s++;
+
+- while (isspace (*s))
++ while (c_isspace (*s))
+ s++;
+
+ // Determine the length of the property value.
+ while (s[l] != 0
+- && ! isspace (s[l])
++ && ! c_isspace (s[l])
+ && s[l] != ':'
+ && s[l] != '=')
+ {
+Index: libjava/configure
+===================================================================
+--- a/src/libjava/configure (.../tags/gcc_4_6_2_release)
++++ b/src/libjava/configure (.../branches/gcc-4_6-branch)
+@@ -11560,7 +11560,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+@@ -12476,7 +12476,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -12494,7 +12494,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -14384,7 +14384,7 @@
+ esac
+ ;;
+
+- freebsd[12]*)
++ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ ld_shlibs_CXX=no
+@@ -16159,7 +16159,7 @@
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+- freebsd[123]*) objformat=aout ;;
++ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+@@ -16177,7 +16177,7 @@
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+- freebsd2*)
++ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+@@ -18520,7 +18520,7 @@
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+- freebsd2*)
++ freebsd2.*)
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_GCJ=yes
+ hardcode_minus_L_GCJ=yes
+@@ -20715,7 +20715,7 @@
+ *-*-cygwin*)
+ # Don't set THREADLIBS here. Cygwin doesn't have -lpthread.
+ ;;
+- *-*-freebsd[1234]*)
++ *-*-freebsd[34].*)
+ # Before FreeBSD 5, it didn't have -lpthread (or any library which
+ # merely adds pthread_* functions) but it does have a -pthread switch
+ # which is required at link-time to select -lc_r *instead* of -lc.
+Index: maintainer-scripts/ChangeLog
+===================================================================
+--- a/src/maintainer-scripts/ChangeLog (.../tags/gcc_4_6_2_release)
++++ b/src/maintainer-scripts/ChangeLog (.../branches/gcc-4_6-branch)
+@@ -1,3 +1,8 @@
++2011-11-23 Gerald Pfeifer <gerald@pfeifer.com>
++
++ * update_web_docs_svn: Make $DOCSDIR group writable after
++ creating it.
++
+ 2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+Index: maintainer-scripts/update_web_docs_svn
+===================================================================
+--- a/src/maintainer-scripts/update_web_docs_svn (.../tags/gcc_4_6_2_release)
++++ b/src/maintainer-scripts/update_web_docs_svn (.../branches/gcc-4_6-branch)
+@@ -93,6 +93,7 @@
+
+ if [ ! -d $DOCSDIR ]; then
+ mkdir $DOCSDIR
++ chmod g+w $DOCSDIR
+ fi
+
+ if [ -z "$RELEASE" ]; then
diff --git a/debian/patches/testsuite-hardening-format.diff b/debian/patches/testsuite-hardening-format.diff
new file mode 100644
index 0000000..69e7366
--- /dev/null
+++ b/debian/patches/testsuite-hardening-format.diff
@@ -0,0 +1,89 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: Description: use -Wno-format on tests that cannot be adjusted other ways.
+# DP: Author: Kees Cook <kees@ubuntu.com>
+# DP: Ubuntu: https://bugs.launchpad.net/bugs/344502
+
+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
+
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.c-torture/execute/vfprintf-chk-1.x
+@@ -0,0 +1,5 @@
++# Implement "/* { dg-options "-U_FORITFY_SOURCE" } */", due to
++# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20567
++
++set additional_flags "-U_FORTIFY_SOURCE"
++return 0
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.c-torture/execute/vprintf-chk-1.x
+@@ -0,0 +1,5 @@
++# Implement "/* { dg-options "-U_FORITFY_SOURCE" } */", due to
++# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20567
++
++set additional_flags "-U_FORTIFY_SOURCE"
++return 0
+--- a/src/gcc/testsuite/gcc.dg/charset/builtin2.c
++++ b/src/gcc/testsuite/gcc.dg/charset/builtin2.c
+@@ -3,7 +3,7 @@
+
+ /* { dg-do compile } */
+ /* { dg-require-iconv "IBM1047" } */
+-/* { dg-options "-O2 -fexec-charset=IBM1047" } */
++/* { dg-options "-O2 -fexec-charset=IBM1047 -Wno-format" } */
+ /* { dg-final { scan-assembler-not "printf" } } */
+ /* { dg-final { scan-assembler-not "fprintf" } } */
+ /* { dg-final { scan-assembler-not "sprintf" } } */
+--- a/src/gcc/testsuite/gcc.dg/format/format.exp
++++ b/src/gcc/testsuite/gcc.dg/format/format.exp
+@@ -26,7 +26,7 @@
+ load_lib torture-options.exp
+
+ torture-init
+-set-torture-options [list { } { -DWIDE } ]
++set-torture-options [list { -Wformat=0 } { -DWIDE -Wformat=0 } ]
+
+ dg-init
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] ""
+--- a/src/gcc/testsuite/gcc.dg/pr30473.c
++++ b/src/gcc/testsuite/gcc.dg/pr30473.c
+@@ -1,7 +1,7 @@
+ /* PR middle-end/30473 */
+ /* Make sure this doesn't ICE. */
+ /* { dg-do compile } */
+-/* { dg-options "-O2" } */
++/* { dg-options "-O2 -Wno-format" } */
+
+ extern int sprintf (char *, const char *, ...);
+
+--- a/src/gcc/testsuite/gcc.dg/pr38902.c
++++ b/src/gcc/testsuite/gcc.dg/pr38902.c
+@@ -1,6 +1,6 @@
+ /* PR target/38902 */
+ /* { dg-do run } */
+-/* { dg-options "-O2 -fstack-protector" } */
++/* { dg-options "-O2 -fstack-protector -Wno-format" } */
+ /* { dg-require-effective-target fstack_protector } */
+
+ #ifdef DEBUG
diff --git a/debian/patches/testsuite-hardening-printf-types.diff b/debian/patches/testsuite-hardening-printf-types.diff
new file mode 100644
index 0000000..9c880c6
--- /dev/null
+++ b/debian/patches/testsuite-hardening-printf-types.diff
@@ -0,0 +1,631 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: Description: adjust/standardize printf types to avoid -Wformat warnings.
+# DP: Author: Kees Cook <kees@ubuntu.com>
+# DP: Ubuntu: https://bugs.launchpad.net/bugs/344502
+
+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
+
+--- a/src/gcc/testsuite/g++.dg/ext/align1.C
++++ b/src/gcc/testsuite/g++.dg/ext/align1.C
+@@ -16,6 +16,7 @@
+ int
+ main (void)
+ {
+- printf ("%d %d\n", __alignof (a1), __alignof (f1));
++ // "%td" is not allowed by ISO C++, so use %p with a void * cast
++ printf ("%p %p\n", (void*)__alignof (a1), (void*)__alignof (f1));
+ return (__alignof (a1) < __alignof (f1));
+ }
+--- a/src/gcc/testsuite/g++.old-deja/g++.law/operators28.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.law/operators28.C
+@@ -14,7 +14,8 @@
+ {
+ void *p;
+
+- printf("%d %d %d\n", sz, count, type);
++ // ISO C++ does not support format size modifier "z", so use a cast
++ printf("%u %d %d\n", (unsigned int)sz, count, type);
+
+ p = new char[sz * count];
+ ((new_test *)p)->type = type;
+--- a/src/gcc/testsuite/gcc.dg/matrix/matrix-2.c
++++ b/src/gcc/testsuite/gcc.dg/matrix/matrix-2.c
+@@ -42,7 +42,7 @@
+ }
+ for (i = 0; i < ARCHnodes; i++)
+ for (j = 0; j < 3; j++)
+- printf ("%x\n",vel[i][j]);
++ printf ("%p\n",vel[i][j]);
+ /*if (i!=1 || j!=1)*/
+ /*if (i==1 && j==1)
+ continue;
+@@ -83,14 +83,14 @@
+ for (j = 0; j < 3; j++)
+ {
+ vel[i][j] = (int *) malloc (ARCHnodes1 * sizeof (int));
+- printf ("%x %d %d\n",vel[i][j], ARCHnodes1, sizeof (int));
++ printf ("%p %d %d\n",vel[i][j], ARCHnodes1, (int)sizeof (int));
+ }
+ }
+ for (i = 0; i < ARCHnodes; i++)
+ {
+ for (j = 0; j < 3; j++)
+ {
+- printf ("%x\n",vel[i][j]);
++ printf ("%p\n",vel[i][j]);
+ }
+ }
+
+@@ -99,7 +99,7 @@
+ {
+ for (j = 0; j < 3; j++)
+ {
+- printf ("%x\n",vel[i][j]);
++ printf ("%p\n",vel[i][j]);
+ /*for (k = 0; k < ARCHnodes1; k++)
+ {
+ vel[i][j][k] = d;
+--- a/src/gcc/testsuite/gcc.dg/packed-vla.c
++++ b/src/gcc/testsuite/gcc.dg/packed-vla.c
+@@ -17,8 +17,8 @@
+ int b[4];
+ } __attribute__ ((__packed__)) foo;
+
+- printf("foo %d\n", sizeof(foo));
+- printf("bar %d\n", sizeof(bar));
++ printf("foo %d\n", (int)sizeof(foo));
++ printf("bar %d\n", (int)sizeof(bar));
+
+ if (sizeof (foo) != sizeof (bar))
+ abort ();
+--- a/src/gcc/testsuite/g++.dg/opt/alias2.C
++++ b/src/gcc/testsuite/g++.dg/opt/alias2.C
+@@ -30,14 +30,14 @@
+
+
+ _Deque_base::~_Deque_base() {
+- printf ("bb %x %x\n", this, *_M_start._M_node);
++ printf ("bb %p %x\n", this, *_M_start._M_node);
+ }
+
+ void
+ _Deque_base::_M_initialize_map()
+ {
+ yy = 0x123;
+- printf ("aa %x %x\n", this, yy);
++ printf ("aa %p %x\n", this, yy);
+
+ _M_start._M_node = &yy;
+ _M_start._M_cur = yy;
+--- a/src/gcc/testsuite/g++.old-deja/g++.abi/vbase1.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.abi/vbase1.C
+@@ -33,7 +33,7 @@
+ void Offset () const
+ {
+ printf ("VBase\n");
+- printf (" VBase::member %d\n", &this->VBase::member - (int *)this);
++ printf (" VBase::member %d\n", (int)(&this->VBase::member - (int *)this));
+ }
+ };
+
+@@ -55,8 +55,8 @@
+ void Offset () const
+ {
+ printf ("VDerived\n");
+- printf (" VBase::member %d\n", &this->VBase::member - (int *)this);
+- printf (" VDerived::member %d\n", &this->VDerived::member - (int *)this);
++ printf (" VBase::member %d\n", (int)(&this->VBase::member - (int *)this));
++ printf (" VDerived::member %d\n", (int)(&this->VDerived::member - (int *)this));
+ }
+ };
+ struct B : virtual VBase
+@@ -65,8 +65,8 @@
+ void Offset () const
+ {
+ printf ("B\n");
+- printf (" VBase::member %d\n", &this->VBase::member - (int *)this);
+- printf (" B::member %d\n", &this->B::member - (int *)this);
++ printf (" VBase::member %d\n", (int)(&this->VBase::member - (int *)this));
++ printf (" B::member %d\n", (int)(&this->B::member - (int *)this));
+ }
+ };
+ struct MostDerived : B, virtual VDerived
+@@ -75,10 +75,10 @@
+ void Offset () const
+ {
+ printf ("MostDerived\n");
+- printf (" VBase::member %d\n", &this->VBase::member - (int *)this);
+- printf (" B::member %d\n", &this->B::member - (int *)this);
+- printf (" VDerived::member %d\n", &this->VDerived::member - (int *)this);
+- printf (" MostDerived::member %d\n", &this->MostDerived::member - (int *)this);
++ printf (" VBase::member %d\n", (int)(&this->VBase::member - (int *)this));
++ printf (" B::member %d\n", (int)(&this->B::member - (int *)this));
++ printf (" VDerived::member %d\n", (int)(&this->VDerived::member - (int *)this));
++ printf (" MostDerived::member %d\n", (int)(&this->MostDerived::member - (int *)this));
+ }
+ };
+
+@@ -95,10 +95,10 @@
+ if (ctorVDerived != &dum.VDerived::member)
+ return 24;
+
+- printf (" VBase::member %d\n", &dum.VBase::member - this_);
+- printf (" B::member %d\n", &dum.B::member - this_);
+- printf (" VDerived::member %d\n", &dum.VDerived::member - this_);
+- printf (" MostDerived::member %d\n", &dum.MostDerived::member - this_);
++ printf (" VBase::member %d\n", (int)(&dum.VBase::member - this_));
++ printf (" B::member %d\n", (int)(&dum.B::member - this_));
++ printf (" VDerived::member %d\n", (int)(&dum.VDerived::member - this_));
++ printf (" MostDerived::member %d\n", (int)(&dum.MostDerived::member - this_));
+ dum.MostDerived::Offset ();
+ dum.B::Offset ();
+ dum.VDerived::Offset ();
+--- a/src/gcc/testsuite/g++.old-deja/g++.brendan/template8.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.brendan/template8.C
+@@ -15,6 +15,6 @@
+
+ Double_alignt<20000> heap;
+
+- printf(" &heap.array[0] = %d, &heap.for_alignt = %d\n", &heap.array[0], &heap.for_alignt);
++ printf(" &heap.array[0] = %p, &heap.for_alignt = %p\n", (void*)&heap.array[0], (void*)&heap.for_alignt);
+
+ }
+--- a/src/gcc/testsuite/g++.old-deja/g++.eh/ptr1.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.eh/ptr1.C
+@@ -16,7 +16,7 @@
+ }
+
+ catch (E *&e) {
+- printf ("address of e is 0x%lx\n", (__SIZE_TYPE__)e);
++ printf ("address of e is %p\n", (void *)e);
+ return !((__SIZE_TYPE__)e != 5 && e->x == 5);
+ }
+ return 2;
+--- a/src/gcc/testsuite/g++.old-deja/g++.jason/access23.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.jason/access23.C
+@@ -42,19 +42,19 @@
+ void DoSomething() {
+ PUB_A = 0;
+ Foo::A = 0;
+- printf("%x\n",pX);
++ printf("%p\n",pX);
+ Foo::PUB.A = 0;
+- printf("%x\n",PUB.pX);
++ printf("%p\n",PUB.pX);
+ B = 0;
+- printf("%x\n",Foo::pY);
++ printf("%p\n",Foo::pY);
+ PRT_A = 0;
+ PRT.B = 0;
+- printf("%x\n",Foo::PRT.pY);
++ printf("%p\n",Foo::PRT.pY);
+ PRV_A = 0; // { dg-error "" }
+ Foo::C = 0; // { dg-error "" }
+- printf("%x\n",pZ); // { dg-error "" }
++ printf("%p\n",pZ); // { dg-error "" }
+ Foo::PRV.C = 0; // { dg-error "" }
+- printf("%x\n",PRV.pZ); // { dg-error "" }
++ printf("%p\n",PRV.pZ); // { dg-error "" }
+ }
+ };
+
+@@ -64,17 +64,17 @@
+
+ a.PUB_A = 0;
+ a.A = 0;
+- printf("%x\n",a.pX);
++ printf("%p\n",a.pX);
+ a.PRT_A = 0; // { dg-error "" }
+ a.B = 0; // { dg-error "" }
+- printf("%x\n",a.pY); // { dg-error "" }
++ printf("%p\n",a.pY); // { dg-error "" }
+ a.PRV_A = 0; // { dg-error "" }
+ a.C = 0; // { dg-error "" }
+- printf("%x\n",a.pZ); // { dg-error "" }
++ printf("%p\n",a.pZ); // { dg-error "" }
+ a.PUB.A = 0;
+- printf("%x\n",a.PUB.pX);
++ printf("%p\n",a.PUB.pX);
+ a.PRT.B = 0; // { dg-error "" }
+- printf("%x\n",a.PRT.pY); // { dg-error "" }
++ printf("%p\n",a.PRT.pY); // { dg-error "" }
+ a.PRV.C = 0; // { dg-error "" }
+- printf("%x\n",a.PRV.pZ); // { dg-error "" }
++ printf("%p\n",a.PRV.pZ); // { dg-error "" }
+ }
+--- a/src/gcc/testsuite/g++.old-deja/g++.law/cvt8.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.law/cvt8.C
+@@ -20,12 +20,12 @@
+ B::operator const A&() const {
+ static A a;
+ a.i = i;
+- printf("convert B to A at %x\n", &a);
++ printf("convert B to A at %p\n", (void*)&a);
+ return a;
+ }
+
+ void f(A &a) { // { dg-error "" } in passing argument
+- printf("A at %x is %d\n", &a, a.i);
++ printf("A at %p is %d\n", (void*)&a, a.i);
+ }
+
+ int main() {
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/net35.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/net35.C
+@@ -17,10 +17,10 @@
+
+ int main() {
+ C c;
+- printf("&c.x = %x\n", &c.x);
+- printf("&c.B1::x = %x\n", &c.B1::x);
+- printf("&c.B2::x = %x\n", &c.B2::x);
+- printf("&c.A::x = %x\n", &c.A::x);
++ printf("&c.x = %p\n", (void*)&c.x);
++ printf("&c.B1::x = %p\n", (void*)&c.B1::x);
++ printf("&c.B2::x = %p\n", (void*)&c.B2::x);
++ printf("&c.A::x = %p\n", (void*)&c.A::x);
+ if (&c.x != &c.B1::x
+ || &c.x != &c.B2::x
+ || &c.x != &c.A::x)
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/offset1.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/offset1.C
+@@ -6,7 +6,7 @@
+ class Foo {
+ public:
+ virtual void setName() {
+- printf("Foo at %x\n", this);
++ printf("Foo at %p\n", (void*)this);
+ if (vp != (void*)this)
+ fail = 1;
+ }
+@@ -15,7 +15,7 @@
+ class Bar : public Foo {
+ public:
+ virtual void init(int argc, char **argv) {
+- printf("Bar's Foo at %x\n", (Foo*)this);
++ printf("Bar's Foo at %p\n", (void*)(Foo*)this);
+ vp = (void*)(Foo*)this;
+ setName();
+ }
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p12306.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p12306.C
+@@ -18,7 +18,7 @@
+ if (ptr2 != &(*this).slist)
+ fail = 6;
+
+- if (0) printf("at %x %x\n", (RWSlistIterator*)this, &(*this).slist);
++ if (0) printf("at %p %p\n", (void*)(RWSlistIterator*)this, (void*)&(*this).slist);
+ }
+ };
+
+@@ -54,14 +54,14 @@
+ void Sim_Event_Manager::post_event () {
+ ptr1 = (RWSlistIterator*)&last_posted_event_position_;
+ ptr2 = &((RWSlistIterator*)&last_posted_event_position_)->slist;
+- if (0) printf("at %x %x\n", (RWSlistIterator*)&last_posted_event_position_,
+- &((RWSlistIterator*)&last_posted_event_position_)->slist);
++ if (0) printf("at %p %p\n", (void*)(RWSlistIterator*)&last_posted_event_position_,
++ (void*)&((RWSlistIterator*)&last_posted_event_position_)->slist);
+ if (ptr1 != (RWSlistIterator*)&last_posted_event_position_)
+ fail = 1;
+ if (ptr2 != &((RWSlistIterator&)last_posted_event_position_).slist)
+ fail = 2;
+- if (0) printf("at %x ?%x\n", (RWSlistIterator*)&last_posted_event_position_,
+- &((RWSlistIterator&)last_posted_event_position_).slist);
++ if (0) printf("at %p ?%p\n", (void*)(RWSlistIterator*)&last_posted_event_position_,
++ (void*)&((RWSlistIterator&)last_posted_event_position_).slist);
+ if (ptr1 != (RWSlistIterator*)&last_posted_event_position_)
+ fail = 3;
+ if (ptr2 != &((RWSlistIterator&)last_posted_event_position_).slist)
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p3579.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p3579.C
+@@ -7,26 +7,26 @@
+
+ class Y {
+ public:
+- Y () { printf("Y() this: %x\n", this); }
+- ~Y () { printf("~Y() this: %x\n", this); }
++ Y () { printf("Y() this: %p\n", (void*)this); }
++ ~Y () { printf("~Y() this: %p\n", (void*)this); }
+ };
+
+ class X {
+ public:
+ X () {
+ ++num_x;
+- printf("X() this: %x\n", this);
++ printf("X() this: %p\n", (void*)this);
+ Y y;
+ *this = (X) y;
+ }
+
+- X (const Y & yy) { printf("X(const Y&) this: %x\n", this); ++num_x; }
++ X (const Y & yy) { printf("X(const Y&) this: %p\n", (void*)this); ++num_x; }
+ X & operator = (const X & xx) {
+- printf("X.op=(X&) this: %x\n", this);
++ printf("X.op=(X&) this: %p\n", (void*)this);
+ return *this;
+ }
+
+- ~X () { printf("~X() this: %x\n", this); --num_x; }
++ ~X () { printf("~X() this: %p\n", (void*)this); --num_x; }
+ };
+
+ int main (int, char **) {
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p3708a.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p3708a.C
+@@ -38,7 +38,7 @@
+ virtual void xx(int doit) {
+ --num;
+ if (ptr != this)
+- printf("FAIL\n%x != %x\n", ptr, this);
++ printf("FAIL\n%p != %p\n", ptr, (void*)this);
+ printf ("C is destructed.\n");
+ B::xx (0);
+ if (doit) A::xx (1);
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p3708b.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p3708b.C
+@@ -48,7 +48,7 @@
+ virtual void xx(int doit) {
+ --num;
+ if (ptr != this) {
+- printf("FAIL\n%x != %x\n", ptr, this);
++ printf("FAIL\n%p != %p\n", ptr, (void*)this);
+ exit(1);
+ }
+ printf ("D is destructed.\n");
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p3708.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p3708.C
+@@ -38,7 +38,7 @@
+ virtual void xx(int doit) {
+ --num;
+ if (ptr != this)
+- printf("FAIL\n%x != %x\n", ptr, this);
++ printf("FAIL\n%p != %p\n", ptr, (void*)this);
+ printf ("C is destructed.\n");
+ B::xx (0);
+ if (doit) A::xx (1);
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p646.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p646.C
+@@ -35,20 +35,20 @@
+ foo::foo ()
+ {
+ si++;
+- printf ("new foo @ 0x%x; now %d foos\n", this, si);
++ printf ("new foo @ %p; now %d foos\n", (void*)this, si);
+ }
+
+ foo::foo (const foo &other)
+ {
+ si++;
+- printf ("another foo @ 0x%x; now %d foos\n", this, si);
++ printf ("another foo @ %p; now %d foos\n", (void*)this, si);
+ *this = other;
+ }
+
+ foo::~foo ()
+ {
+ si--;
+- printf ("deleted foo @ 0x%x; now %d foos\n", this, si);
++ printf ("deleted foo @ %p; now %d foos\n", (void*)this, si);
+ }
+
+ int
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p710.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p710.C
+@@ -30,7 +30,7 @@
+ virtual ~B() {}
+ void operator delete(void*,size_t s)
+ {
+- printf("B::delete() %d\n",s);
++ printf("B::delete() %u\n",(unsigned int)s);
+ }
+ void operator delete(void*){}
+ };
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p789a.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p789a.C
+@@ -13,10 +13,10 @@
+ int x;
+ foo () {
+ x = count++;
+- printf("this %d = %x\n", x, (void *)this);
++ printf("this %d = %p\n", x, (void *)this);
+ }
+ virtual ~foo () {
+- printf("this %d = %x\n", x, (void *)this);
++ printf("this %d = %p\n", x, (void *)this);
+ --count;
+ }
+ };
+@@ -31,7 +31,7 @@
+ {
+ for (int j = 0; j < 3; j++)
+ {
+- printf("&a[%d][%d] = %x\n", i, j, (void *)&array[i][j]);
++ printf("&a[%d][%d] = %p\n", i, j, (void *)&array[i][j]);
+ }
+ }
+ // The count should be nine, if not, fail the test.
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C
+@@ -42,7 +42,7 @@
+ bar jar;
+
+ int main() {
+- printf("ptr to B_table=%x, ptr to A_table=%x\n",&b,(A_table*)&b);
++ printf("ptr to B_table=%p, ptr to A_table=%p\n",(void*)&b,(void*)(A_table*)&b);
+ B_table::B_ti_fn z = &B_table::func1;
+ int j = 1;
+ jar.call_fn_fn1(j,(void *)&z);
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/temp.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/temp.C
+@@ -7,11 +7,11 @@
+ public:
+ T() {
+ i = 1;
+- printf("T() at %x\n", this);
++ printf("T() at %p\n", (void*)this);
+ }
+ T(const T& o) {
+ i = o.i;
+- printf("T(const T&) at %x <-- %x\n", this, &o);
++ printf("T(const T&) at %p <-- %p\n", (void*)this, (void*)&o);
+ }
+ T operator +(const T& o) {
+ T r;
+@@ -21,7 +21,7 @@
+ operator int () {
+ return i;
+ }
+- ~T() { printf("~T() at %x\n", this); }
++ ~T() { printf("~T() at %p\n", (void*)this); }
+ } s, b;
+
+ int foo() { return getenv("TEST") == 0; }
+--- a/src/gcc/testsuite/g++.old-deja/g++.other/temporary1.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.other/temporary1.C
+@@ -5,16 +5,16 @@
+ class Foo
+ {
+ public:
+- Foo() { printf("Foo() 0x%08lx\n", (__SIZE_TYPE__)this); ++c; }
+- Foo(Foo const &) { printf("Foo(Foo const &) 0x%08lx\n", (__SIZE_TYPE__)this); }
+- ~Foo() { printf("~Foo() 0x%08lx\n", (__SIZE_TYPE__)this); ++d; }
++ Foo() { printf("Foo() %p\n", (void*)this); ++c; }
++ Foo(Foo const &) { printf("Foo(Foo const &) %p\n", (void*)this); }
++ ~Foo() { printf("~Foo() %p\n", (void*)this); ++d; }
+ };
+
+ // Bar creates constructs a temporary Foo() as a default
+ class Bar
+ {
+ public:
+- Bar(Foo const & = Foo()) { printf("Bar(Foo const &) 0x%08lx\n", (__SIZE_TYPE__)this); }
++ Bar(Foo const & = Foo()) { printf("Bar(Foo const &) %p\n", (void*)this); }
+ };
+
+ void fakeRef(Bar *)
+--- a/src/gcc/testsuite/g++.old-deja/g++.other/virtual8.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.other/virtual8.C
+@@ -4,7 +4,7 @@
+ struct A
+ {
+ virtual void f () {
+- printf ("%x\n", this);
++ printf ("%p\n", (void*)this);
+ }
+ };
+
+--- a/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp23.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp23.C
+@@ -13,7 +13,7 @@
+
+ template <class U>
+ void f(U u)
+- { printf ("In S::f(U)\nsizeof(U) == %d\n", sizeof(u)); }
++ { printf ("In S::f(U)\nsizeof(U) == %d\n", (int)sizeof(u)); }
+
+ int c[16];
+ };
+--- a/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp24.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp24.C
+@@ -13,7 +13,7 @@
+
+ template <class U>
+ void f(U u)
+- { printf ("In S::f(U)\nsizeof(U) == %d\n", sizeof(u)); }
++ { printf ("In S::f(U)\nsizeof(U) == %d\n", (int)sizeof(u)); }
+
+ int c[16];
+ };
+--- a/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp25.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp25.C
+@@ -6,7 +6,7 @@
+ struct S
+ {
+ template <class U>
+- void f(U u) { printf ("%d\n", sizeof (U)); }
++ void f(U u) { printf ("%d\n", (int)sizeof (U)); }
+
+ int i[4];
+ };
+--- a/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp26.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp26.C
+@@ -16,7 +16,7 @@
+ template <class U>
+ void S<X>::f(U u)
+ {
+- printf ("%d\n", sizeof (U));
++ printf ("%d\n", (int)sizeof (U));
+ }
+
+
+--- a/src/gcc/testsuite/g++.old-deja/g++.pt/t39.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.pt/t39.C
+@@ -10,9 +10,9 @@
+
+ template <class T>
+ void frob<T>::print () {
+- printf ("this = %08x\n", this);
+- printf (" ptr = %08x\n", ptr);
+- printf (" values = %x %x %x ...\n", ptr[0], ptr[1], ptr[2]);
++ printf ("this = %p\n", (void*)this);
++ printf (" ptr = %p\n", (void*)ptr);
++ printf (" values = %x %x %x ...\n", (int)ptr[0], (int)ptr[1], (int)ptr[2]);
+ }
+
+ static int x[10];
+--- a/src/gcc/testsuite/g++.old-deja/g++.robertl/eb17.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.robertl/eb17.C
+@@ -44,15 +44,15 @@
+ A * a = new B;
+ B * b = dynamic_cast<B *>(a);
+
+- printf("%p\n",b); // (*2*)
++ printf("%p\n",(void*)b); // (*2*)
+ b->print();
+
+ a = b;
+- printf("%p\n",a);
++ printf("%p\n",(void*)a);
+ a->print();
+
+ a = a->clone();
+- printf("%p\n",a);
++ printf("%p\n",(void*)a);
+ a->print(); // (*1*)
+
+ return 0;
+--- a/src/gcc/testsuite/gcc.dg/pch/inline-4.c
++++ b/src/gcc/testsuite/gcc.dg/pch/inline-4.c
+@@ -1,6 +1,6 @@
+ #include "inline-4.h"
+ extern int printf (const char *, ...);
+ int main(void) {
+- printf (getstring());
++ printf ("%s", getstring());
+ return 0;
+ }
diff --git a/debian/porting.html b/debian/porting.html
new file mode 100644
index 0000000..2fe5477
--- /dev/null
+++ b/debian/porting.html
@@ -0,0 +1,30 @@
+<html lang="en">
+<head>
+<title>Porting libstdc++-v3</title>
+<meta http-equiv="Content-Type" content="text/html">
+<meta name="description" content="Porting libstdc++-v3">
+<meta name="generator" content="makeinfo 4.6">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+ pre.display { font-family:inherit }
+ pre.format { font-family:inherit }
+ pre.smalldisplay { font-family:inherit; font-size:smaller }
+ pre.smallformat { font-family:inherit; font-size:smaller }
+ pre.smallexample { font-size:smaller }
+ pre.smalllisp { font-size:smaller }
+--></style>
+</head>
+<body>
+<h1 class="settitle">Porting libstdc++-v3</h1>
+<div class="node">
+<p><hr>
+Node:&nbsp;<a name="Top">Top</a>,
+Next:&nbsp;<a rel="next" accesskey="n" href="#Operating%20system">Operating system</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
+<br>
+</div>
+
+The documentation in this file was removed, because it is licencensed
+under a non DFSG conforming licencse.
+
+</body></html>
diff --git a/debian/protoize.1 b/debian/protoize.1
new file mode 100644
index 0000000..59c7ec4
--- /dev/null
+++ b/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.
diff --git a/debian/reduce-test-diff.awk b/debian/reduce-test-diff.awk
new file mode 100755
index 0000000..0e438de
--- /dev/null
+++ b/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
+}
diff --git a/debian/relink b/debian/relink
new file mode 100644
index 0000000..7cfb24e
--- /dev/null
+++ b/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
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..6166c84
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,110 @@
+#! /usr/bin/make -f
+# -*- makefile -*-
+# Build rules for gcc (>= 2.95) and gcc-snapshot
+# Targets found in this makefile:
+# - unpack tarballs
+# - patch sources
+# - (re)create the control file
+# - create a debian/rules.parameters file, which is included
+# by debian/rules2
+# All other targets are passed to the debian/rules2 file
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+unexport LANG LC_ALL LC_CTYPE LC_COLLATE LC_TIME LC_NUMERIC LC_MESSAGES
+
+default: build
+
+include debian/rules.defs
+include debian/rules.unpack
+include debian/rules.patch
+
+control: $(control_dependencies)
+ -mkdir -p $(stampdir)
+ $(MAKE) -f debian/rules.conf $@
+
+configure: $(configure_dependencies)
+$(configure_stamp): control $(unpack_stamp) $(patch_stamp)
+ $(MAKE) -f debian/rules2 $@
+$(configure_dummy_stamp): control
+ $(MAKE) -f debian/rules2 $@
+$(configure_hppa64_stamp): $(build_stamp)
+ $(MAKE) -f debian/rules2 $@
+$(configure_neon_stamp): $(build_stamp)
+ $(MAKE) -f debian/rules2 $@
+$(configure_spu_stamp): $(build_stamp)
+ $(MAKE) -f debian/rules2 $@
+
+pre-build:
+#ifneq (,$(filter $(distrelease),squeeze sid))
+#ifeq (,$(filter $(DEB_TARGET_ARCH),amd64 i386))
+# @echo explicitely fail the build for $(DEB_TARGET_ARCH)
+# @echo no bug report required. please ask the port maintainers if they support gcc-4.5.
+# false
+#endif
+#endif
+
+build: pre-build $(build_dependencies)
+$(build_stamp): $(unpack_stamp) $(patch_stamp) $(configure_stamp)
+ $(MAKE) -f debian/rules2 $@
+$(build_dummy_stamp): $(configure_dummy_stamp)
+ $(MAKE) -f debian/rules2 $@
+$(build_javadoc_stamp): $(build_stamp)
+ $(MAKE) -f debian/rules2 $@
+$(build_hppa64_stamp): $(configure_hppa64_stamp)
+ $(MAKE) -f debian/rules2 $@
+$(build_neon_stamp): $(configure_neon_stamp)
+ $(MAKE) -f debian/rules2 $@
+$(build_spu_stamp): $(configure_spu_stamp)
+ $(MAKE) -f debian/rules2 $@
+
+check: $(check_stamp)
+$(check_stamp): $(build_stamp)
+ $(MAKE) -f debian/rules2 $@
+
+clean:
+ rm -rf $(stampdir)
+# remove temporary dirs used for unpacking
+ rm -rf $(gcc_srcdir) $(gdc_srcdir) d
+ -$(MAKE) -f debian/rules2 $@
+ rm -rf $(srcdir)* $(builddir)* debian/tmp* html
+ rm -f bootstrap-* first-move-stamp
+ rm -f autotools_files
+ rm -f debian/*.tmp
+ rm -f debian/soname-cache
+ find debian -name '.#*' | xargs -r rm -f
+ rm -f $(series_file)*
+ dh_clean
+
+install: $(install_dependencies)
+$(install_stamp): $(build_stamp)
+ $(MAKE) -f debian/rules2 $@
+$(install_snap_stamp): $(build_stamp)
+ $(MAKE) -f debian/rules2 $@
+$(install_dummy_stamp): $(build_dummy_stamp)
+ $(MAKE) -f debian/rules2 $@
+$(install_hppa64_stamp): $(build_hppa64_stamp)
+ $(MAKE) -f debian/rules2 $@
+$(install_neon_stamp): $(build_neon_stamp)
+ $(MAKE) -f debian/rules2 $@
+$(install_spu_stamp): $(build_spu_stamp)
+ $(MAKE) -f debian/rules2 $@
+
+html-docs doxygen-docs update-doxygen-docs update-ada-files xxx:
+ $(MAKE) -f debian/rules2 $@
+
+binary-indep binary-arch binary: install
+ $(MAKE) -f debian/rules2 $@
+
+source diff:
+ @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
+
+release:
+ foo=$(shell basename $(CURDIR)); \
+ if [ "$$foo" != "gcc-3.4" ]; then \
+ find -name CVS -o -name .cvsignore -o -name '.#*' | \
+ xargs rm -rf; \
+ fi
+
+.PHONY: build clean binary-indep binary-arch binary release
diff --git a/debian/rules.conf b/debian/rules.conf
new file mode 100644
index 0000000..cb98a79
--- /dev/null
+++ b/debian/rules.conf
@@ -0,0 +1,946 @@
+# -*- makefile -*-
+# rules.conf
+# - used to build debian/control and debian/rules.parameters
+# - assumes unpacked sources
+
+include debian/rules.defs
+include debian/rules.sonames
+
+# Helper to generate biarch/triarch dependencies.
+# For example, $(eval $(call gen_multilib_deps,gomp)) will create the
+# libgompbiarch variable, and make it contains the libgompbiarch{32,64,n32}
+# variables if biarch{32,64,n32} is set to yes.
+define gen_multilib_deps
+ lib$1biarch64 := lib64$1$$($(shell echo $1 | tr "a-z" "A-Z")_SONAME)$(LS) (>= $$$${gcc:Version})
+ lib$1biarch32 := lib32$1$$($(shell echo $1 | tr "a-z" "A-Z")_SONAME)$(LS) (>= $$$${gcc:Version})
+ lib$1biarchn32 := libn32$1$$($(shell echo $1 | tr "a-z" "A-Z")_SONAME)$(LS) (>= $$$${gcc:Version})
+ lib$1biarchhf := libhf$1$$($(shell echo $1 | tr "a-z" "A-Z")_SONAME)$(LS) (>= $$$${gcc:Version})
+ lib$1biarchsf := libsf$1$$($(shell echo $1 | tr "a-z" "A-Z")_SONAME)$(LS) (>= $$$${gcc:Version})
+ ifeq ($$(biarch64),yes)
+ lib$1biarch := $$(lib$1biarch64)
+ endif
+ ifeq ($$(biarch32),yes)
+ lib$1biarch := $$(lib$1biarch32)
+ endif
+ ifeq ($$(biarchn32),yes)
+ ifeq ($$(biarch64),yes)
+ lib$1biarch := $$(lib$1biarch64), $$(lib$1biarchn32)
+ else
+ lib$1biarch := $$(lib$1biarchn32)
+ endif
+ endif
+ ifeq ($$(biarchhf),yes)
+ lib$1biarch := $$(lib$1biarchhf)
+ endif
+ ifeq ($$(biarchsf),yes)
+ lib$1biarch := $$(lib$1biarchsf)
+ endif
+endef
+$(foreach x,gomp mudflap ssp gfortran objc quadmath go,$(eval $(call gen_multilib_deps,$(x))))
+
+# Helper to generate _no_archs variables.
+# For example, $(eval $(call gen_no_archs,java)) will create the java_no_archs
+# variable, using the java_no_cpu and java_no_systems variables.
+define gen_no_archs
+ $1_no_archs :=
+ ifneq (,$$($1_no_cpus))
+ $1_no_archs += $$(foreach cpu,$$(filter-out i386 amd64 alpha arm,$$($1_no_cpus)),!$$(cpu))
+ ifneq (,$$(filter i386,$$($1_no_cpus)))
+ $1_no_archs += !i386 !hurd-i386 !kfreebsd-i386 !knetbsd-i386
+ endif
+ ifneq (,$$(filter amd64,$$($1_no_cpus)))
+ $1_no_archs += !amd64 !kfreebsd-amd64
+ endif
+ ifneq (,$$(filter alpha,$$($1_no_cpus)))
+ $1_no_archs += !alpha !hurd-alpha !knetbsd-alpha
+ endif
+ ifneq (,$$(filter arm,$$($1_no_cpus)))
+ $1_no_archs += !arm !armel !armhf
+ endif
+ ifneq (,$$(strip $3))
+ $1_no_systems_tmp := $$(subst $$(SPACE)gnu$$(SPACE),$$(SPACE)hurd-gnu$$(SPACE),$$(SPACE)$3$$(SPACE))
+ $1_no_archs += $$(foreach cpu,$$($1_no_cpus),$$(foreach system,$$($1_no_systems_tmp),!$$(subst gnu,$$(cpu),$$(system))))
+ endif
+ endif
+ ifneq (,$$($1_no_systems))
+ $1_no_systems_tmp := $$(subst $$(SPACE)gnu$$(SPACE),$$(SPACE)hurd-gnu$$(SPACE),$$(SPACE)$$($1_no_systems)$$(SPACE))
+ $1_no_archs += $$(foreach system,$$($1_no_systems_tmp),$$(foreach cpu,$2,!$$(subst gnu,$$(cpu),$$(system))))
+ endif
+ $1_no_archs := $$(strip $$($1_no_archs))
+endef
+base_deb_cpus := i386 alpha
+base_deb_systems :=
+$(foreach x,ada java java_plugin fortran libphobos libgc check locale,$(eval $(call gen_no_archs,$(x),$(base_deb_cpus),$(base_deb_systems))))
+linux_no_archs := !hurd-i386 !hurd-alpha !kfreebsd-i386 !kfreebsd-amd64 !knetbsd-i386 !knetbsd-alpha
+
+GCC_VERSION := $(strip $(shell cat $(firstword $(wildcard $(srcdir)/gcc/FULL-VER $(srcdir)/gcc/BASE-VER))))
+NEXT_GCC_VERSION := $(shell echo $(GCC_VERSION) | \
+ awk -F. '{OFS="."; if (NF==2) $$3=1; else $$NF += 1; print}')
+GCC_MAJOR_VERSION := $(shell echo $(GCC_VERSION) | sed -r 's/([0-9])\.[0-9]\.[0-9]/\1/')
+GCC_MINOR_VERSION := $(shell echo $(GCC_VERSION) | sed -r 's/[0-9]\.([0-9])\.[0-9]/\1/')
+GCC_RELEASE_VERSION := $(shell echo $(GCC_VERSION) | sed -r 's/[0-9]\.[0-9]\.([0-9])/\1/')
+NEXT_GCC_MAJOR_VERSION := $(shell expr $(echo $(GCC_MAJOR_VERSION)) + 1)
+NEXT_GCC_MINOR_VERSION := $(shell expr $(echo $(GCC_MINOR_VERSION)) + 1)
+NEXT_GCC_RELEASE_VERSION := $(shell expr $(echo $(GCC_MAJOR_VERSION)) + 1)
+
+ifeq ($(single_package),yes)
+ BASE_VERSION := $(shell echo $(GCC_VERSION) | sed -e 's/\([1-9]\.[0-9]\).*/\1/')
+endif
+ifneq (,$(findstring gdc,$(PKGSOURCE)))
+ GDC_BASE_VERSION := $(word 1, $(subst -, ,$(DEB_VERSION)))
+ DEB_VERSION := $(subst $(GDC_BASE_VERSION)-,,$(DEB_VERSION))
+endif
+
+GCC_SOURCE_VERSION := $(shell echo $(DEB_VERSION) | sed 's/-.*//')
+NEXT_GCC_SOURCE_VERSION := $(shell echo $(GCC_SOURCE_VERSION) | \
+ awk -F. '{OFS="."; if (NF==2) $$3=1; else $$NF += 1; print}')
+
+MAINTAINER = Debian GCC Maintainers <debian-gcc@lists.debian.org>
+ifeq ($(distribution),Ubuntu)
+ ifneq (,$(findstring $(PKGSOURCE),gnat gdc))
+ MAINTAINER = Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
+ else
+ MAINTAINER = Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+ endif
+endif
+
+UPLOADERS = Matthias Klose <doko@debian.org>
+ifneq (,$(findstring $(PKGSOURCE),gnat))
+ UPLOADERS = Ludovic Brenta <lbrenta@debian.org>
+endif
+ifneq (,$(findstring $(PKGSOURCE),gdc))
+ UPLOADERS = Iain Buclaw <ibuclaw@ubuntu.com>
+endif
+
+DPKG_BUILD_DEP = dpkg-dev (>= 1.14.15),
+ifeq ($(with_multiarch_lib),yes)
+ DPKG_BUILD_DEP = dpkg-dev (>= 1.16.0~ubuntu4),
+endif
+ifeq ($(multiarch_stage1),yes)
+ DPKG_BUILD_DEP = dpkg-dev (>= 1.16.0~ubuntu4),
+endif
+
+ifeq ($(DEB_CROSS),yes)
+ DPKG_BUILD_DEP += dpkg-cross (>= 1.25.99),
+endif
+
+# The binutils version needed.
+# The oldest suitable versions for the various platforms can be found in
+# INSTALL/specific.html ; we take a tighter dependency if possible to be on
+# the safe side (something like newest( version in stable, versions for the
+# various platforms in INSTALL/specific.html) ).
+# We need binutils (>= 2.19.1) for a new dwarf unwind expression opcode.
+# See http://gcc.gnu.org/ml/gcc-patches/2008-09/msg01713.html
+ifeq ($(trunk_build),yes)
+ BINUTILSV = 2.22
+else
+ BINUTILSV = 2.21.1
+endif
+ifeq ($(DEB_CROSS),yes)
+ BINUTILS_BUILD_DEP = binutils$(TS) (>= $(BINUTILSV)), binutils-multiarch (>= $(BINUTILSV))
+else
+ BINUTILS_BUILD_DEP = binutils (>= $(BINUTILSV)) | binutils-multiarch (>= $(BINUTILSV))
+endif
+# FIXME; stripping doesn't work with gold
+#BINUTILS_BUILD_DEP += , binutils-gold (>= $(BINUTILSV)) [$(gold_archs)]
+
+# libc-dev dependencies
+libc_ver := 2.5
+libc_dev_ver := $(libc_ver)
+ifneq (,$(findstring gnat,$(PKGSOURCE)))
+ libc_ver := 2.9-21
+endif
+ifeq ($(with_multiarch_lib),yes)
+ ifeq ($(distribution),Debian)
+ libc_dev_ver := 2.13-5
+ else
+ libc_dev_ver := 2.13-0ubuntu6
+ endif
+endif
+ifeq ($(DEB_TARGET_ARCH_OS),linux)
+ ifneq (,$(findstring $(DEB_TARGET_ARCH),alpha ia64))
+ LIBC_DEP = libc6.1
+ else
+ LIBC_DEP = libc6
+ endif
+else
+ ifeq ($(DEB_TARGET_ARCH_OS),hurd)
+ LIBC_DEP = libc0.3
+ endif
+ ifeq ($(DEB_TARGET_ARCH_OS),kfreebsd)
+ LIBC_DEP = libc0.1
+ endif
+ ifeq ($(DEB_TARGET_ARCH),uclibc)
+ LIBC_DEP ?= libuclibc
+ LIBC_DEV_DEP ?= libuclibc-dev
+ endif
+endif
+LIBC_DEV_DEP = $(LIBC_DEP)-dev
+# for cross
+ifeq ($(DEB_CROSS),yes)
+ LIBC_DEP ?= $(LIBC_DEP)$(LS)
+ LIBC_DEV_DEP ?= $(LIBC_DEV_DEP)$(LS)
+endif
+
+# this is about Debian archs name, *NOT* GNU target triplet
+biarch_deb_map := \
+ i386=amd64 amd64=i386 \
+ mips=mips64 mipsel=mips64 \
+ powerpc=ppc64 ppc64=powerpc \
+ sparc=sparc64 \
+ s390=s390x s390x=s390 \
+ kfreebsd-amd64=i386 \
+ armel=armhf \
+ armhf=armel
+
+biarch_deb_arch := $(patsubst $(DEB_TARGET_ARCH)=%,%, \
+ $(filter $(DEB_TARGET_ARCH)=%,$(biarch_deb_map)))
+
+LIBC_BIARCH_DEP :=
+LIBC_BIARCH_DEV_DEP :=
+LIBCXX_BIARCH_DEP :=
+LIBCXX_BIARCH_DBG_DEP :=
+ifneq (,$(findstring yes,$(biarch64) $(biarch32) $(biarchn32)$(biarchhf)$(biarchsf)))
+ LIBC_BIARCH_DEP := $(LIBC_DEP)-$(biarch_deb_arch)$(LS) (>= $(libc_ver))
+ LIBC_BIARCH_DEV_DEP := $(LIBC_DEV_DEP)-$(biarch_deb_arch)$(LS) (>= $(libc_ver))
+ ifeq ($(biarch64),yes)
+ LIBCXX_BIARCH_DEP := lib64stdc++$(CXX_SONAME)$(LS) (>= $${gcc:Version})
+ LIBCXX_BIARCH_DBG_DEP := lib64stdc++$(CXX_SONAME)-$(BASE_VERSION)-dbg$(LS)
+ endif
+ ifeq ($(biarch32),yes)
+ LIBCXX_BIARCH_DEP := lib32stdc++$(CXX_SONAME)$(LS) (>= $${gcc:Version})
+ LIBCXX_BIARCH_DBG_DEP := lib32stdc++$(CXX_SONAME)-$(BASE_VERSION)-dbg$(LS)
+ endif
+ ifeq ($(biarchn32),yes)
+ ifneq (,$(findstring $(DEB_TARGET_ARCH),mips mipsel))
+ triarch :=
+ ifeq ($(biarch64),yes)
+ triarch := $(COMMA)$(SPACE)
+ endif
+ LIBC_BIARCH_DEV_DEP += $(triarch)libc6-dev-mipsn32$(LS) (>= $(libc_ver))
+ LIBC_BIARCH_DEP += $(triarch)libc6-mipsn32$(LS) (>= $(libc_ver))
+ LIBCXX_BIARCH_DEP += $(triarch)libn32stdc++$(CXX_SONAME)$(LS) (>= $${gcc:Version})
+ LIBCXX_BIARCH_DBG_DEP += $(triarch)libn32stdc++$(CXX_SONAME)-$(BASE_VERSION)-dbg$(LS)
+ endif
+ endif
+ ifeq ($(biarchhf),yes)
+ LIBCXX_BIARCH_DEP := libhfstdc++$(CXX_SONAME)$(LS) (>= $${gcc:Version})
+ LIBCXX_BIARCH_DBG_DEP := libhfstdc++$(CXX_SONAME)-$(BASE_VERSION)-dbg$(LS)
+ endif
+ ifeq ($(biarchsf),yes)
+ LIBCXX_BIARCH_DEP := libsfstdc++$(CXX_SONAME)$(LS) (>= $${gcc:Version})
+ LIBCXX_BIARCH_DBG_DEP := libsfstdc++$(CXX_SONAME)-$(BASE_VERSION)-dbg$(LS)
+ endif
+endif
+
+# Add suffix and required version
+LIBC_DEV_DEP := $(LIBC_DEV_DEP)$(LS) (>= $(libc_dev_ver))
+
+# TODO: make this automatic, there must be a better way to define LIBC_DEP.
+ifneq ($(DEB_CROSS),yes)
+ LIBC_BUILD_DEP = libc6.1-dev (>= $(libc_dev_ver)) [alpha ia64] | libc0.3-dev (>= $(libc_dev_ver)) [hurd-i386] | libc0.1-dev (>= $(libc_dev_ver)) [kfreebsd-i386 kfreebsd-amd64] | libc6-dev (>= $(libc_dev_ver)),
+ LIBC_BIARCH_BUILD_DEP = libc6-dev-amd64 [i386], libc6-dev-sparc64 [sparc], libc6-dev-s390 [s390x], libc6-dev-s390x [s390], libc6-dev-i386 [amd64], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], libc0.1-dev-i386 [kfreebsd-amd64], lib32gcc1 [amd64 ppc64 kfreebsd-amd64 s390x], lib64gcc1 [i386 powerpc sparc s390], libc6-dev-mips64 [mips mipsel], libc6-dev-mipsn32 [mips mipsel],
+ifneq (,$(findstring armel,$(biarchhfarchs)))
+ LIBC_BIARCH_BUILD_DEP += libc6-dev-armhf [armel],
+endif
+ifneq (,$(findstring armhf,$(biarchsfarchs)))
+ LIBC_BIARCH_BUILD_DEP += libc6-dev-armel [armhf],
+endif
+else
+ LIBC_BUILD_DEP = $(LIBC_DEV_DEP),
+ ifneq ($(LIBC_BIARCH_DEV_DEP),)
+ LIBC_BIARCH_BUILD_DEP = $(LIBC_BIARCH_DEV_DEP),
+ else
+ LIBC_BIARCH_BUILD_DEP =
+ endif
+endif
+
+GCC_MULTILIB_BUILD_DEP = g++-multilib [$(multilib_archs)],
+
+LIBUNWIND_DEV_DEP := libunwind7-dev$(LS) (>= 0.98.5-6)
+LIBUNWIND_BUILD_DEP := $(LIBUNWIND_DEV_DEP) [ia64],
+LIBATOMIC_OPS_BUILD_DEP := libatomic-ops-dev$(LS) [ia64],
+ifneq ($(DEB_TARGET_ARCH),ia64)
+ LIBUNWIND_DEV_DEP := # nothing
+endif
+
+ifneq (,$(filter $(distrelease),lenny etch squeeze dapper hardy jaunty karmic lucid maverick natty))
+ GMP_BUILD_DEP = libgmp3-dev,
+ MPFR_BUILD_DEP = libmpfr-dev,
+else
+ GMP_BUILD_DEP = libgmp-dev (>= 2:5.0.1~),
+ MPFR_BUILD_DEP = libmpfr-dev (>= 3.0.0-9~),
+endif
+
+cloog_parma =
+ifeq ($(cloog_parma),yes)
+ PPL_BUILD_DEP = libppl-dev (>= 0.11~) | libppl0.11-dev,
+ CLOOG_BUILD_DEP = libcloog-parma-dev,
+ # FIXME: currently not dl'opened.
+ #CLOOG_RUNTIME_DEP = libcloog-ppl1, libppl-c4, libppl9, libpwl5
+else
+ PPL_BUILD_DEP = libppl-dev (>= 0.11~) | libppl0.10-dev,
+ CLOOG_BUILD_DEP = libcloog-ppl-dev (>= 0.15.9-2~),
+ # FIXME: currently not dl'opened.
+ #CLOOG_RUNTIME_DEP = libcloog-ppl0 (>= 0.15.9-2~), libppl-c2, libppl7
+endif
+MPC_BUILD_DEP = libmpc-dev,
+ELF_BUILD_DEP = libelfg0-dev (>= 0.8.12),
+
+SOURCE_BUILD_DEP :=
+ifeq (,$(findstring gcc,$(PKGSOURCE)))
+ SOURCE_BUILD_DEP := gcc-$(BASE_VERSION)-source (>= $(GCC_SOURCE_VERSION)), gcc-$(BASE_VERSION)-source (<< $(NEXT_GCC_SOURCE_VERSION)),
+endif
+
+CHECK_BUILD_DEP := dejagnu [$(check_no_archs)],
+ifneq (,$(findstring gcc,$(PKGSOURCE)))
+ CHECK_BUILD_DEP += autogen,
+endif
+
+AUTO_BUILD_DEP := m4, libtool,
+AUTO_BUILD_DEP += autoconf2.64, automake (>= 1:1.11), automake (<< 1:1.12),
+
+ifneq ($(DEB_CROSS),yes)
+LIBC_BUILD_DEP := libc6.1-dev (>= $(libc_dev_ver)) [alpha ia64] | libc0.3-dev (>= $(libc_dev_ver)) [hurd-i386] | libc0.1-dev (>= $(libc_dev_ver)) [kfreebsd-i386 kfreebsd-amd64] | libc6-dev (>= $(libc_dev_ver))
+JAVA_BUILD_DEP := libc6.1-dbg [alpha ia64] | libc0.3-dbg [hurd-i386] | libc0.1-dbg [kfreebsd-i386 kfreebsd-amd64] | libc6-dbg, zlib1g-dev, libantlr-java, python, libffi-dev,
+
+ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+ bd_java_archs =
+else ifeq ($(single_package)-$(with_java),yes-yes)
+ bd_java_archs =
+else
+ bd_java_archs = $(EMPTY) [$(java_no_archs)]
+endif
+
+ifneq (,$(java_awt_peers))
+ JAVA_BUILD_DEP += fastjar$(bd_java_archs), libmagic-dev$(bd_java_archs),
+ JAVA_BUILD_DEP += libecj-java (>= 3.3.0-2)$(bd_java_archs), zip$(bd_java_archs),
+ ifeq ($(with_java_maintainer_mode),yes)
+ # gcj-4.3 needed for gjavah-4.3.
+ JAVA_BUILD_DEP += gcj-4.4$(bd_java_archs), ecj (>= 3.3.0-2)$(bd_java_archs),
+ endif
+ JAVA_BUILD_DEP += libasound2-dev [$(java_no_archs) $(linux_no_archs)],
+ ifneq (,$(findstring gtk,$(java_awt_peers)))
+ JAVA_BUILD_DEP += libxtst-dev$(bd_java_archs), libxt-dev$(bd_java_archs), libgtk2.0-dev (>= 2.4.4-2)$(bd_java_archs), libart-2.0-dev$(bd_java_archs), libcairo2-dev$(bd_java_archs),
+ endif
+ ifneq (,$(findstring qt,$(java_awt_peers)))
+ JAVA_BUILD_DEP += libqt4-dev (>= 4.1.0)$(bd_java_archs),
+ endif
+ # gconf peer, disabled by default
+ #JAVA_BUILD_DEP += libgconf2-dev$(bd_java_archs),
+ # gstreamer peer
+ #JAVA_BUILD_DEP += libgstreamer-plugins-base0.10-dev$(bd_java_archs),
+ ifneq ($(single_package),yes)
+ JAVA_BUILD_DEP += g++-4.6 [armel armhf],
+ endif
+endif
+ifneq ($(with_standalone_gcj),yes)
+ ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+ JAVA_BUILD_DEP += $(SOURCE_BUILD_DEP)
+ endif
+endif
+#JAVA_BUILD_INDEP := gcj-$(BASE_VERSION)-jdk
+ifeq ($(single_package),yes)
+ LIBSTDCXX_BUILD_INDEP = doxygen (>= 1.7.2), graphviz (>= 2.2), gsfonts-x11, texlive-latex-base
+ ifeq ($(cloog_parma),yes)
+ LIBSTDCXX_BUILD_INDEP +=, xsltproc, libxml2-utils, docbook-xsl-ns
+ endif
+ JAVA_BUILD_INDEP :=
+endif
+ifeq ($(with_separate_libgcj),yes)
+ ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+ JAVA_BUILD_DEP :=
+ JAVA_BUILD_INDEP :=
+ endif
+endif
+
+ifeq ($(with_ecj),yes)
+ ifneq (./,$(dir $(ecj_jar)))
+ ECJ_DEP = libecj-java (>= 3.5.1)
+ endif
+else
+ ECJ_DEP = ecj, libecj-java (>= 3.5.1)
+ ECJ_DEP = ecj-gcj, libecj-java-gcj (>= 3.5.1)
+ ifneq (,$(filter $(DEB_HOST_ARCH),arm armel armhf))
+ ECJ_DEP +=, ecj1
+ endif
+endif
+
+ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+ LIBSTDCXX_BUILD_INDEP = doxygen (>= 1.7.2), graphviz (>= 2.2), gsfonts-x11, texlive-latex-base
+ ifeq ($(cloog_parma),yes)
+ LIBSTDCXX_BUILD_INDEP +=, xsltproc, libxml2-utils, docbook-xsl-ns
+ endif
+ JAVA_BUILD_INDEP :=, $(JAVA_BUILD_INDEP)
+endif
+
+SPU_BUILD_DEP := binutils-spu (>= $(BINUTILSV)) [powerpc ppc64], newlib-spu (>= 1.16.0) [powerpc ppc64], gcc-$(BASE_VERSION)-base [powerpc ppc64],
+SPU_BUILD_DEP := binutils-spu (>= $(BINUTILSV)) [powerpc ppc64], newlib-spu (>= 1.16.0) [powerpc ppc64],
+
+ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+ ifneq ($(with_separate_gnat),yes)
+ # Build gnat as part of the combiled gcc-x.y source package. Do not fail
+ # if gnat is not present on unsupported architectures; the build scripts
+ # will not use gnat anyway.
+ GNAT_BUILD_DEP := gnat (>= 4.1) [$(ada_no_archs)],
+ endif
+else ifeq ($(single_package),yes)
+ # Ditto, as part of the gcc-snapshot package.
+ # FIXME: ad hoc dependency, better fix setting of ada_no_archs
+ #GNAT_BUILD_DEP := gnat (>= 4.1) [$(ada_no_archs)], gcc-snapshot (>= 20090821-1) [armel armhf],
+ GNAT_BUILD_DEP := gnat (>= 4.1) [!arm !armhf !m68k !powerpcspe !sh4 !sparc64 !hurd-i386],
+else ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+ # Special source package just for gnat. Fail early if gnat is not present,
+ # rather than waste CPU cycles and fail later.
+ GNAT_BUILD_DEP := gnat (>= 4.1),
+ GNAT_BUILD_DEP += $(SOURCE_BUILD_DEP)
+ JAVA_BUILD_DEP :=
+ JAVA_BUILD_INDEP :=
+ GDC_BUILD_DEP :=
+ # gnat on spu should work ...
+ SPU_BUILD_DEP :=
+else ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+ # Special source package just for gcj.
+ GNAT_BUILD_DEP :=
+ GDC_BUILD_DEP :=
+ SPU_BUILD_DEP :=
+else ifeq ($(PKGSOURCE),gdc-$(BASE_VERSION))
+ # Special source package just for gdc.
+ GNAT_BUILD_DEP :=
+ JAVA_BUILD_DEP :=
+ JAVA_BUILD_INDEP :=
+ GDC_BUILD_DEP := $(SOURCE_BUILD_DEP)
+ SPU_BUILD_DEP :=
+endif
+
+else
+# build cross compiler
+ CROSS_BUILD_DEP := libc6-dev$(cross_lib_arch),
+ifeq ($(REVERSE_CROSS),yes)
+ CROSS_BUILD_DEP += zlib1g-dev$(cross_lib_arch), libmpfr-dev$(cross_lib_arch),
+endif
+ SOURCE_BUILD_DEP :=
+ ifeq (,$(findstring gcc,$(PKGSOURCE)))
+ SOURCE_BUILD_DEP := gcc-$(BASE_VERSION)-source (>= $(GCC_SOURCE_VERSION)), gcc-$(BASE_VERSION)-source (<< $(NEXT_GCC_SOURCE_VERSION)),
+ endif
+ ifeq ($(with_java),yes)
+ JAVA_BUILD_DEP := zlib1g-dev, lib64z1-dev [i386 powerpc sparc s390], lib32z1-dev [amd64 ppc64 kfreebsd-amd64 s390x],
+ endif
+ JAVA_BUILD_INDEP :=
+ GNAT_BUILD_DEP :=
+ ifeq (,$(findstring spu,$(DEB_TARGET_GNU_CPU)))
+ SPU_BUILD_DEP :=
+ endif
+endif # cross compiler
+
+# The numeric part of the gcc version number (x.yy.zz)
+NEXT_GCC_VERSION := $(shell echo $(GCC_VERSION) | \
+ awk -F. '{OFS="."; if (NF==2) $$3=1; else $$NF += 1; print}')
+# first version with a new path component in gcc_lib_dir (i.e. GCC_VERSION
+# or TARGET_ALIAS changes), or last version available for all architectures
+DEB_GCC_SOFT_VERSION := 4.6.1-16
+DEB_GCJ_SOFT_VERSION := 4.6.1-9
+
+ifeq ($(with_d),yes)
+ DEB_GDC_VERSION := $(GDC_BASE_VERSION)-$(DEB_VERSION)
+endif
+
+# semiautomatic ...
+DEB_SOVERSION := $(DEB_VERSION)
+DEB_SOVERSION := 4.6
+DEB_SOEVERSION := $(EPOCH):4.6
+DEB_STDCXX_SOVERSION := 4.6
+DEB_GCJ_SOVERSION := 4.6
+DEB_GOMP_SOVERSION := $(DEB_SOVERSION)
+DEB_GCCMATH_SOVERSION := $(DEB_SOVERSION)
+
+DEB_GCC_VERSION := $(DEB_VERSION)
+DEB_GCJ_VERSION := $(DEB_VERSION)
+ifeq ($(with_separate_libgcj),yes)
+ ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+ DEB_GCC_VERSION := $(DEB_GCC_SOFT_VERSION)
+ endif
+endif
+
+DEB_GNAT_VERSION := $(DEB_VERSION)
+ifeq ($(with_separate_gnat),yes)
+ ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+ DEB_GCC_VERSION := $(DEB_GCC_SOFT_VERSION)
+ endif
+endif
+
+# manual ...
+ifeq ($(DEB_TARGET_GNU_CPU), $(findstring $(DEB_TARGET_GNU_CPU),hppa m68k))
+ ifeq ($(DEB_TARGET_ARCH),m68k)
+ GCC_SONAME := 2
+ endif
+ ifeq ($(DEB_TARGET_ARCH),hppa)
+ GCC_SONAME := 4
+ endif
+ DEB_LIBGCC_SOVERSION := $(DEB_SOVERSION)
+ DEB_LIBGCC_VERSION := $(DEB_VERSION)
+else
+ GCC_SONAME := 1
+ DEB_LIBGCC_SOVERSION := $(DEB_SOEVERSION)
+ DEB_LIBGCC_VERSION := $(DEB_EVERSION)
+endif
+
+ifeq ($(with_shared_libgcc),yes)
+LIBGCC_DEP := libgcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+LIBGCC_BIARCH_DEP :=
+ifeq ($(biarch64),yes)
+ LIBGCC_BIARCH_DEP := lib64gcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+endif
+ifeq ($(biarch32),yes)
+ LIBGCC_BIARCH_DEP := lib32gcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+endif
+ifeq ($(biarchn32),yes)
+ ifeq ($(biarch64),yes)
+ LIBGCC_BIARCH_DEP := lib64gcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION)), libn32gcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+ else
+ LIBGCC_BIARCH_DEP := libn32gcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+ endif
+endif
+ifeq ($(biarchhf),yes)
+ LIBGCC_BIARCH_DEP := libhfgcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+endif
+ifeq ($(biarchsf),yes)
+ LIBGCC_BIARCH_DEP := libsfgcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+endif
+endif # $(with_shared_libgcc)
+
+GNAT_VERSION := $(BASE_VERSION)
+
+LIBGNAT_DEP :=
+ifeq ($(with_libgnat),yes)
+ LIBGNAT_DEP := libgnat-$(GNAT_VERSION) (= $(DEB_VERSION))
+endif
+
+pkg_ver := -$(BASE_VERSION)
+
+PKG_GCJ_EXT = $(GCJ_SONAME1)
+PKG_LIBGCJ_EXT = $(GCJ_SONAME1)$(if $(GCJ_SONAME2),-$(GCJ_SONAME2))
+
+ctrl_flags = \
+ -DBINUTILSV=$(BINUTILSV) \
+ -DSRCNAME=$(PKGSOURCE) \
+ -D__$(DEB_TARGET_GNU_CPU)__ \
+ -DARCH=$(DEB_TARGET_ARCH) \
+ -DDIST=$(distribution)
+
+ctrl_flags += \
+ -DLIBC_DEV_DEP="$(LIBC_DEV_DEP)" \
+ -DLIBC_BIARCH_BUILD_DEP="$(LIBC_BIARCH_BUILD_DEP)" \
+ -DFORTRAN_BUILD_DEP="$(FORTRAN_BUILD_DEP)" \
+ -DGNAT_BUILD_DEP="$(GNAT_BUILD_DEP)" \
+ -DJAVA_BUILD_DEP="$(JAVA_BUILD_DEP)" \
+ -DJAVA_BUILD_INDEP="$(JAVA_BUILD_INDEP)" \
+ -DLIBSTDCXX_BUILD_INDEP="$(LIBSTDCXX_BUILD_INDEP)" \
+ -DGDC_BUILD_DEP="$(GDC_BUILD_DEP)" \
+ -DSPU_BUILD_DEP="$(SPU_BUILD_DEP)" \
+ -DBINUTILS_BUILD_DEP="$(BINUTILS_BUILD_DEP)" \
+ -DLIBC_BUILD_DEP="$(LIBC_BUILD_DEP)" \
+ -DCHECK_BUILD_DEP="$(CHECK_BUILD_DEP)" \
+ -DAUTO_BUILD_DEP="$(AUTO_BUILD_DEP)" \
+ -DAUTOGEN_BUILD_DEP="$(AUTOGEN_BUILD_DEP)" \
+ -DCLOOG_BUILD_DEP="$(CLOOG_BUILD_DEP)" \
+ -DGMP_BUILD_DEP="$(GMP_BUILD_DEP)" \
+ -DMPFR_BUILD_DEP="$(MPFR_BUILD_DEP)" \
+ -DMPC_BUILD_DEP="$(MPC_BUILD_DEP)" \
+ -DELF_BUILD_DEP="$(ELF_BUILD_DEP)" \
+ -DDPKG_BUILD_DEP="$(DPKG_BUILD_DEP)" \
+ -DSOURCE_BUILD_DEP="$(SOURCE_BUILD_DEP)" \
+ -DCROSS_BUILD_DEP="$(CROSS_BUILD_DEP)" \
+ -DGCC_MULTILIB_BUILD_DEP='$(GCC_MULTILIB_BUILD_DEP)' \
+ -DMULTILIB_ARCHS="$(multilib_archs)" \
+ -DNEON_ARCHS="$(neon_archs)" \
+ -DTP=$(TP) \
+ -DTS=$(TS) \
+ -DLS=$(LS)
+
+ifeq ($(DEB_CROSS),yes)
+ ctrl_flags += \
+ -DTARGET=$(DEB_TARGET_ARCH) \
+ -DLIBUNWIND_BUILD_DEP="$(LIBUNWIND_BUILD_DEP)" \
+ -DLIBATOMIC_OPS_BUILD_DEP="$(LIBATOMIC_OPS_BUILD_DEP)"
+else
+ # add '-DPRI=optional' to ctrl_flags if this is not the default compiler
+ # ctrl_flags += \
+ # -DPRI=optional
+endif
+
+ifeq ($(with_base_only),yes)
+ ctrl_flags += \
+ -DBASE_ONLY=yes
+endif
+
+ifeq ($(with_multiarch_lib),yes)
+ ctrl_flags += \
+ -DMULTIARCH=yes
+endif
+
+control: control-file readme-bugs-file parameters-file copyright-file substvars-file versioned-files
+
+# stage1 and stage2 compilers are only C
+ifdef DEB_STAGE
+ languages = c
+ addons = cdev plugindev
+ ifeq ($(DEB_STAGE),stage2)
+ addons += libgcc gccxbase
+ endif
+else
+languages = c c++ fortran objc objpp
+ifeq ($(DEB_CROSS),yes)
+ addons = gccxbase
+else
+ addons = gccbase
+endif
+addons += cdev c++dev fdev objcdev source objppdev multilib
+addons += plugindev
+ifeq ($(with_libgcc),yes)
+ addons += libgcc lib4gcc lib32gcc lib64gcc libn32gcc
+endif
+ifeq ($(with_libcxx),yes)
+ addons += libcxx lib32cxx lib64cxx libn32cxx
+endif
+ifeq ($(with_mudflap),yes)
+ addons += mudflap
+ ifeq ($(with_libmudflap),yes)
+ addons += libmudf
+ endif
+endif
+ifeq ($(with_libgfortran),yes)
+ addons += libgfortran lib32gfortran lib64gfortran libn32gfortran
+endif
+ifeq ($(with_libobjc),yes)
+ addons += libobjc lib32objc lib64objc libn32objc
+endif
+ifeq ($(with_libgomp),yes)
+ addons += libgomp lib32gomp lib64gomp libn32gomp
+endif
+ifeq ($(with_libqmath),yes)
+ addons += libqmath lib32qmath lib64qmath libn32qmath
+endif
+ifeq ($(with_go),yes)
+ addons += ggo godev
+ ifeq ($(with_go),yes)
+ addons += libggo
+ endif
+endif
+ifneq (,$(findstring armel,$(biarchhfarchs)))
+ addons += libhfgcc libhfgomp libhfqmath libhfcxx libhfobjc libhfmudflap libhfgfortran
+endif
+ifneq (,$(findstring armhf,$(biarchsfarchs)))
+ addons += libsfgcc libsfgomp libsfqmath libsfcxx libsfobjc libsfmudflap libsfgfortran
+endif
+ifneq ($(DEB_CROSS),yes)
+
+ languages += ada java
+ addons += libgcj libgcjdev gcjdoc libgnat libs source # libgmath libnof lib64gnat ssp
+
+ ifneq (,$(neon_archs))
+ addons += libneongcc libneongomp libneonobjc libneongfortran libneoncxx
+ endif
+ ifeq ($(with_fixincl),yes)
+ addons += fixincl
+ endif
+ ifeq ($(with_libgcj_doc),yes)
+ addons += gcjdoc
+ endif
+# ifneq (,$(findstring gtk, $(java_awt_peers)))
+# addons += gtkpeer
+# endif
+# ifneq (,$(findstring qt, $(java_awt_peers)))
+# addons += qtpeer
+# endif
+ ifeq ($(with_separate_libgcj),yes)
+ ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+ languages := $(filter-out java,$(languages))
+ addons := $(filter-out gcj libgcj libgcjdev gcjdoc gtkpeer qtpeer,$(addons))
+ endif
+ ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+ languages = java
+ addons = gcj libgcj libgcjdev
+ ifeq ($(with_libgcj_doc),yes)
+ addons += gcjdoc
+ endif
+# ifneq (,$(findstring gtk, $(java_awt_peers)))
+# addons += gtkpeer
+# endif
+# ifneq (,$(findstring qt, $(java_awt_peers)))
+# addons += qtpeer
+# endif
+ ifeq ($(with_standalone_gcj),yes)
+ addons += libgcc lib4gcc lib64gcc lib32gcc libn32gcc
+ endif
+ endif
+ endif
+ ifeq ($(with_standalone_gcj),yes)
+ ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+ ctrl_flags += -DSTANDALONEJAVA
+ endif
+ endif
+ ifeq ($(with_separate_gnat),yes)
+ ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+ languages := $(filter-out ada,$(languages))
+ addons := $(filter-out libgnat,$(addons))
+ endif
+ ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+ languages = ada
+ addons = libgnat
+ endif
+ endif
+ ifeq ($(with_separate_gdc),yes)
+ ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+ languages := $(filter-out d,$(languages))
+ endif
+ ifeq ($(PKGSOURCE),gdc-$(BASE_VERSION))
+ languages = d
+ addons =
+ ifeq ($(with_libphobos),yes)
+ addons += libphobos
+ endif
+ endif
+ endif
+ ifneq ($(GFDL_INVARIANT_FREE),yes)
+ addons += gfdldoc
+ endif
+endif
+endif # not stage
+
+control-file:
+ echo "addons: $(addons)"; \
+ m4 $(ctrl_flags) \
+ -DPV=$(pkg_ver) \
+ -DCXX_SO=$(CXX_SONAME) \
+ -DGCC_SO=$(GCC_SONAME) \
+ -DOBJC_SO=$(OBJC_SONAME) \
+ -DFORTRAN_SO=$(FORTRAN_SONAME) \
+ -DGCJ_SO=$(PKG_GCJ_EXT) \
+ -DLIBGCJ_EXT=$(PKG_LIBGCJ_EXT) \
+ -DGNAT_SO=$(GNAT_SONAME) \
+ -DGNAT_V=$(GNAT_VERSION) \
+ -DPHOBOS_V=$(libphobos_version) \
+ -DGOMP_SO=$(GOMP_SONAME) \
+ -DGCCMATH_SO=$(GCCMATH_SONAME) \
+ -DMF_SO=$(MUDFLAP_SONAME) \
+ -DQMATH_SO=$(QUADMATH_SONAME) \
+ -DSSP_SO=$(SSP_SONAME) \
+ -DGO_SO=$(GO_SONAME) \
+ -Denabled_languages="$(languages) $(addons)" \
+ -Dada_no_archs="$(ada_no_archs)" \
+ -Djava_no_archs="$(java_no_archs)" \
+ -Dfortran_no_archs="$(fortran_no_archs)" \
+ -Dlibgc_no_archs="$(libgc_no_archs)" \
+ -Dcheck_no_archs="$(check_no_archs)" \
+ -Dlocale_no_archs="$(locale_no_archs)" \
+ -Dlinux_gnu_archs="$(linux_gnu_archs)" \
+ -Dbiarch32_archs="$(strip $(subst /, ,$(biarch32archs)))" \
+ -Dbiarch64_archs="$(strip $(subst /, ,$(biarch64archs)))" \
+ -Dbiarchn32_archs="$(strip $(subst /, ,$(biarchn32archs)))" \
+ -Dbiarchhf_archs="$(strip $(subst /, ,$(biarchhfarchs)))" \
+ -Dbiarchsf_archs="$(strip $(subst /, ,$(biarchsfarchs)))" \
+ debian/control.m4 > debian/control.tmp2
+ uniq debian/control.tmp2 | sed '/^Build/s/ *, */, /g' \
+ > debian/control.tmp
+ rm -f debian/control.tmp2
+ [ -e debian/control ] \
+ && cmp -s debian/control debian/control.tmp \
+ && rm -f debian/control.tmp && exit 0; \
+ mv debian/control.tmp debian/control; touch $(control_stamp)
+
+readme-bugs-file:
+ m4 -DDIST=$(distribution) -DSRCNAME=$(PKGSOURCE) \
+ debian/README.Bugs.m4 > debian/README.Bugs
+
+copyright-file:
+ rm -f debian/copyright
+ if echo $(SOURCE_VERSION) | grep -E ^'[0-9]\.[0-9]-[0-9]{8}' ; \
+ then SVN_BRANCH="trunk" ; \
+ else \
+ SVN_BRANCH="gcc-$(subst .,_,$(BASE_VERSION))-branch" ; \
+ fi ; \
+ sed debian/copyright.in \
+ -e "s/@BV@/$(BASE_VERSION)/g" \
+ -e "s/@SVN_BRANCH@/$$SVN_BRANCH/g" \
+ > debian/copyright
+
+substvars-file:
+ rm -f debian/substvars.local.tmp
+ ( \
+ echo 'gcc:Version=$(DEB_GCC_VERSION)'; \
+ echo 'gcc:EpochVersion=$(DEB_EVERSION)'; \
+ echo 'gcc:SoftVersion=$(DEB_GCC_SOFT_VERSION)'; \
+ echo 'gdc:Version=$(DEB_GDC_VERSION)'; \
+ echo 'gcj:Version=$(DEB_GCJ_VERSION)'; \
+ echo 'gcj:SoftVersion=$(DEB_GCJ_SOFT_VERSION)'; \
+ echo 'gcj:BaseVersion=$(BASE_VERSION)'; \
+ echo 'gnat:Version=$(DEB_GNAT_VERSION)'; \
+ echo 'binutils:Version=$(BINUTILSV)'; \
+ echo 'dep:libgcc=$(LIBGCC_DEP)'; \
+ echo 'dep:libgccbiarch=$(LIBGCC_BIARCH_DEP)'; \
+ echo 'dep:libcdev=$(LIBC_DEV_DEP)'; \
+ echo 'dep:libcbiarch=$(LIBC_BIARCH_DEP)'; \
+ echo 'dep:libcbiarchdev=$(LIBC_BIARCH_DEV_DEP)'; \
+ echo 'dep:libunwinddev=$(LIBUNWIND_DEV_DEP)'; \
+ echo 'dep:libcxxbiarch=$(LIBCXX_BIARCH_DEP)'; \
+ echo 'dep:libcxxbiarchdbg=$(LIBCXX_BIARCH_DBG_DEP)'; \
+ echo 'dep:libgobiarch=$(LIBGO_BIARCH_DEP)'; \
+ echo 'dep:libgobiarchdbg=$(LIBGO_BIARCH_DBG_DEP)'; \
+ echo 'dep:libgnat=$(LIBGNAT_DEP)'; \
+ echo 'dep:ecj=$(ECJ_DEP)'; \
+ echo 'dep:libcloog=$(CLOOG_RUNTIME_DEP)'; \
+ ) > debian/substvars.local.tmp
+ifneq (,$(filter $(DEB_TARGET_ARCH), $(multilib_archs)))
+ ( \
+ echo 'gcc:multilib=gcc-$(BASE_VERSION)-multilib$(TS)'; \
+ echo 'gxx:multilib=g++-$(BASE_VERSION)-multilib$(TS)'; \
+ echo 'gobjc:multilib=gobjc-$(BASE_VERSION)-multilib$(TS)'; \
+ echo 'gobjcxx:multilib=gobjc++-$(BASE_VERSION)-multilib$(TS)'; \
+ echo 'gfortran:multilib=gfortran-$(BASE_VERSION)-multilib$(TS)'; \
+ ) >> debian/substvars.local.tmp
+endif
+ifeq ($(with_gold),yes)
+ echo 'dep:gold=binutils-gold (>= $(BINUTILSV))' \
+ >> debian/substvars.local.tmp
+endif
+ifeq ($(with_libssp),yes)
+ echo 'dep:libssp=libssp$(SSP_SONAME) (>= $${gcc:Version})' \
+ >> debian/substvars.local.tmp
+endif
+ifeq ($(with_gomp),yes)
+ echo 'dep:libgomp=libgomp$(GOMP_SONAME)$(LS) (>= $${gcc:Version})' \
+ >> debian/substvars.local.tmp
+endif
+ifeq ($(with_qmath),yes)
+ echo 'dep:libqmath=libquadmath$(QUADMATH_SONAME)$(LS) (>= $${gcc:Version})' \
+ >> debian/substvars.local.tmp
+endif
+ifeq ($(multilib),yes)
+ echo 'dep:libgfortranbiarch=$(libgfortranbiarch)' \
+ >> debian/substvars.local.tmp
+ echo 'dep:libobjcbiarch=$(libobjcbiarch)' \
+ >> debian/substvars.local.tmp
+ ifeq ($(with_mudflap),yes)
+ echo 'dep:libmudflapbiarch=$(libmudflapbiarch)' \
+ >> debian/substvars.local.tmp
+ endif
+ ifeq ($(with_libssp),yes)
+ echo 'dep:libsspbiarch=$(libsspbiarch)' \
+ >> debian/substvars.local.tmp
+ endif
+ ifeq ($(with_gomp),yes)
+ echo 'dep:libgompbiarch=$(libgompbiarch)' \
+ >> debian/substvars.local.tmp
+ endif
+ ifeq ($(with_qmath),yes)
+ echo 'dep:libqmathbiarch=$(libquadmathbiarch)' \
+ >> debian/substvars.local.tmp
+ endif
+ ifeq ($(with_go),yes)
+ echo 'dep:libgobiarch=$(libgobiarch)' \
+ >> debian/substvars.local.tmp
+ endif
+endif
+ifneq ($(with_standalone_gcj),yes)
+ ifneq (,$(filter $(DEB_HOST_ARCH),armel armhf))
+ echo 'dep:gcj=g++$(pkg_ver) (>= $(DEB_GCC_SOFT_VERSION))' \
+ >> debian/substvars.local.tmp
+ else
+ echo 'dep:gcj=gcc$(pkg_ver) (>= $(DEB_GCC_SOFT_VERSION))' \
+ >> debian/substvars.local.tmp
+ endif
+endif
+#ifneq (,$(findstring gtk, $(java_awt_peers)))
+# echo 'pkg:gcjgtk=libgcj$(subst 0,,$(GCJ_SONAME))-awt-gtk (>= $(DEB_GCJ_VERSION))' \
+# >> debian/substvars.local.tmp
+#endif
+#ifneq (,$(findstring qt, $(java_awt_peers)))
+# echo 'pkg:gcjqt=libgcj$(subst 0,,$(GCJ_SONAME))-awt-qt (>= $(DEB_GCJ_VERSION))' \
+# >> debian/substvars.local.tmp
+#endif
+ifeq ($(DEB_HOST_ARCH),hppa)
+ echo 'dep:prctl=prctl' >> debian/substvars.local.tmp
+endif
+ifneq (,$(filter $(DEB_TARGET_ARCH), powerpc ppc64))
+ echo 'base:Replaces=gcc-$(BASE_VERSION)-spu (<< 4.4.0-1)' >> debian/substvars.local.tmp
+endif
+ifeq ($(distribution)-$(DEB_HOST_ARCH),Debian-amd64)
+ echo 'confl:lib32=libc6-i386 (<< 2.9-22)' >> debian/substvars.local.tmp
+endif
+ifeq ($(with_multiarch_lib),yes)
+ echo 'multiarch:breaks=gcc-4.1, gcc-4.3 (<< 4.3.6-1), gcc-4.4 (<< 4.4.6-4), gcc-4.5 (<< 4.5.3-2)' >> debian/substvars.local.tmp
+endif
+ [ -e debian/substvars.local ] \
+ && cmp -s debian/substvars.local debian/substvars.local.tmp \
+ && rm -f debian/substvars.local.tmp && exit 0; \
+ mv debian/substvars.local.tmp debian/substvars.local; \
+ touch $(control_stamp)
+
+parameters-file:
+ rm -f debian/rules.parameters.tmp
+ ( \
+ echo '# configuration parameters taken from upstream source files'; \
+ echo 'GCC_VERSION := $(GCC_VERSION)'; \
+ echo 'NEXT_GCC_VERSION := $(NEXT_GCC_VERSION)'; \
+ echo 'BASE_VERSION := $(BASE_VERSION)'; \
+ echo 'SOURCE_VERSION := $(SOURCE_VERSION)'; \
+ echo 'DEB_VERSION := $(DEB_VERSION)'; \
+ echo 'DEB_EVERSION := $(DEB_EVERSION)'; \
+ echo 'GDC_BASE_VERSION := $(GDC_BASE_VERSION)'; \
+ echo 'DEB_GDC_VERSION := $(DEB_GDC_VERSION)'; \
+ echo 'DEB_SOVERSION := $(DEB_SOVERSION)'; \
+ echo 'DEB_SOEVERSION := $(DEB_SOEVERSION)'; \
+ echo 'DEB_LIBGCC_SOVERSION := $(DEB_LIBGCC_SOVERSION)'; \
+ echo 'DEB_LIBGCC_VERSION := $(DEB_LIBGCC_VERSION)'; \
+ echo 'DEB_STDCXX_SOVERSION := $(DEB_STDCXX_SOVERSION)'; \
+ echo 'DEB_GCJ_SOVERSION := $(DEB_GCJ_SOVERSION)'; \
+ echo 'PKG_GCJ_EXT := $(PKG_GCJ_EXT)'; \
+ echo 'PKG_LIBGCJ_EXT := $(PKG_LIBGCJ_EXT)'; \
+ echo 'DEB_GOMP_SOVERSION := $(DEB_GOMP_SOVERSION)'; \
+ echo 'DEB_GCCMATH_SOVERSION := $(DEB_GCCMATH_SOVERSION)'; \
+ echo 'GCC_SONAME := $(GCC_SONAME)'; \
+ echo 'CXX_SONAME := $(CXX_SONAME)'; \
+ echo 'FORTRAN_SONAME := $(FORTRAN_SONAME)'; \
+ echo 'OBJC_SONAME := $(OBJC_SONAME)'; \
+ echo 'GCJ_SONAME := $(GCJ_SONAME)'; \
+ echo 'GNAT_VERSION := $(GNAT_VERSION)'; \
+ echo 'GNAT_SONAME := $(GNAT_SONAME)'; \
+ echo 'FFI_SONAME := $(FFI_SONAME)'; \
+ echo 'MUDFLAP_SONAME := $(MUDFLAP_SONAME)'; \
+ echo 'SSP_SONAME := $(SSP_SONAME)'; \
+ echo 'GOMP_SONAME := $(GOMP_SONAME)'; \
+ echo 'QMATH_SONAME := $(QUADMATH_SONAME)'; \
+ echo 'GCCMATH_SONAME := $(GCCMATH_SONAME)'; \
+ echo 'GO_SONAME := $(GO_SONAME)'; \
+ echo 'LIBC_DEP := $(LIBC_DEP)'; \
+ ) > debian/rules.parameters.tmp
+ [ -e debian/rules.parameters ] \
+ && cmp -s debian/rules.parameters debian/rules.parameters.tmp \
+ && rm -f debian/rules.parameters.tmp && exit 0; \
+ mv debian/rules.parameters.tmp debian/rules.parameters; \
+ touch $(control_stamp)
+
+versioned-files:
+ fs=`echo debian/*BV* debian/*GCJ* debian/*CXX* debian/*LC* debian/*MF* | sort -u`; \
+ for f in $$fs debian/source.lintian-overrides.in; do \
+ [ -f $$f ] || echo "CANNOT FIND $$f"; \
+ [ -f $$f ] || continue; \
+ if [ -z "$(DEB_CROSS)" ]; then case "$$f" in *-CR*) continue; esac; fi; \
+ f2=$$(echo $$f \
+ | sed 's/BV/$(BASE_VERSION)/;s/CXX/$(CXX_SONAME)/;s/LGCJ/$(PKG_LIBGCJ_EXT)/;s/GCJ/$(PKG_GCJ_EXT)/;s/LC/$(GCC_SONAME)/;s/MF/$(MUDFLAP_SONAME)/;s/-CRB/$(cross_bin_arch)/;s/\.in$$//'); \
+ sed -e 's/@BV@/$(BASE_VERSION)/g' \
+ -e 's/@CXX@/$(CXX_SONAME)/g' \
+ -e 's/@LGCJ@/$(PKG_LIBGCJ_EXT)/g' \
+ -e 's/@GCJ@/$(PKG_GCJ_EXT)/g' \
+ -e 's/@GCJSO@/$(GCJ_SONAME)/g' \
+ -e 's/@LC@/$(GCC_SONAME)/g' \
+ -e 's/@MF@/$(MUDFLAP_SONAME)/g' \
+ -e 's/@SRC@/$(PKGSOURCE)/g' \
+ -e 's/@GFDL@/$(if $(filter yes,$(GFDL_INVARIANT_FREE)),#)/g' \
+ -e 's/@java_priority@/$(java_priority)/g' \
+ -e 's/@gcc_priority@/$(subst .,,$(BASE_VERSION))/g' \
+ -e 's/@TARGET@/$(DEB_TARGET_GNU_TYPE)/g' \
+ $$f > $$f2; \
+ touch -r $$f $$f2; \
+ done
diff --git a/debian/rules.d/binary-ada.mk b/debian/rules.d/binary-ada.mk
new file mode 100644
index 0000000..a121624
--- /dev/null
+++ b/debian/rules.d/binary-ada.mk
@@ -0,0 +1,359 @@
+arch_binaries := $(arch_binaries) gnatbase ada
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ indep_binaries := $(indep_binaries) ada-doc
+endif
+
+ifeq ($(with_libgnat),yes)
+ arch_binaries := $(arch_binaries) libgnat
+endif
+
+p_gbase = gnat-$(GNAT_VERSION)-base
+p_gnat = gnat-$(GNAT_VERSION)
+p_lgnat = libgnat-$(GNAT_VERSION)
+p_lgnat_dbg = $(p_lgnat)-dbg
+p_lgnatvsn = libgnatvsn$(GNAT_VERSION)
+p_lgnatvsn_dev = $(p_lgnatvsn)-dev
+p_lgnatvsn_dbg = $(p_lgnatvsn)-dbg
+p_lgnatprj = libgnatprj$(GNAT_VERSION)
+p_lgnatprj_dev = $(p_lgnatprj)-dev
+p_lgnatprj_dbg = $(p_lgnatprj)-dbg
+p_gnatd = $(p_gnat)-doc
+
+d_gbase = debian/$(p_gbase)
+d_gnat = debian/$(p_gnat)
+d_lgnat = debian/$(p_lgnat)
+d_lgnatvsn = debian/$(p_lgnatvsn)
+d_lgnatprj = debian/$(p_lgnatprj)
+d_gnatd = debian/$(p_gnatd)
+
+GNAT_TOOLS = gnat gnatbind gnatchop gnatclean gnatfind gnatkr gnatlink \
+ gnatls gnatmake gnatname gnatprep gnatxref gnathtml
+
+dirs_gnat = \
+ $(docdir)/$(p_base) \
+ $(PF)/bin \
+ $(PF)/share/man/man1 \
+ $(gcc_lib_dir) \
+ $(gcc_lexec_dir)
+
+files_gnat = \
+ $(gcc_lexec_dir)/gnat1 \
+ $(gcc_lib_dir)/{adalib,adainclude} \
+ $(foreach i,$(GNAT_TOOLS),$(PF)/bin/$(i))
+ifeq ($(with_gnat_zcx)-$(with_gnat_sjlj),yes-yes)
+ files_gnat += \
+ $(gcc_lib_dir)/rts-native
+# rts-sjlj moved to a separate package
+endif
+
+dirs_lgnat = \
+ $(docdir) \
+ $(PF)/lib
+files_lgnat = \
+ $(PF)/$(libdir)/lib{gnat,gnarl}-$(GNAT_SONAME).so.1
+
+$(binary_stamp)-gnatbase: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ dh_installdocs -p$(p_gbase) debian/README.gnat debian/README.maintainers
+ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+ ifeq ($(with_check),yes)
+ dh_installdocs -p$(p_gbase) test-summary
+ endif
+endif
+ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+ mkdir -p $(d_gbase)/$(docdir)/$(p_base)
+ ln -sf ../$(p_gbase) $(d_gbase)/$(docdir)/$(p_base)/Ada
+endif
+ dh_installchangelogs -p$(p_gbase) src/gcc/ada/ChangeLog
+ dh_compress -p$(p_gbase)
+ dh_fixperms -p$(p_gbase)
+ dh_gencontrol -p$(p_gbase) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_gbase)
+ dh_md5sums -p$(p_gbase)
+ dh_builddeb -p$(p_gbase)
+ touch $@
+
+
+$(binary_stamp)-libgnat: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ : # libgnat
+ rm -rf $(d_lgnat)
+ dh_installdirs -p$(p_lgnat) $(dirs_lgnat)
+
+ for lib in lib{gnat,gnarl}; do \
+ vlib=$$lib-$(GNAT_SONAME); \
+ mv $(d)/$(gcc_lib_dir)/adalib/$$vlib.so.1 $(d)/$(PF)/$(libdir)/. ; \
+ rm -f $(d)/$(gcc_lib_dir)/adalib/$$lib.so.1; \
+ done
+ dh_movefiles -p$(p_lgnat) $(files_lgnat)
+
+ debian/dh_doclink -p$(p_lgnat) $(p_gbase)
+
+ debian/dh_rmemptydirs -p$(p_lgnat)
+
+ dh_strip -p$(p_lgnat) --dbg-package=$(p_lgnat_dbg)
+ dh_compress -p$(p_lgnat)
+ dh_fixperms -p$(p_lgnat)
+ b=libgnat; \
+ v=$(GNAT_VERSION); \
+ for ext in preinst postinst prerm postrm; do \
+ for t in '' -dev -dbg; do \
+ if [ -f debian/$$b$$t.$$ext ]; then \
+ cp -pf debian/$$b$$t.$$ext debian/$$b$$v$$t.$$ext; \
+ fi; \
+ done; \
+ done
+ dh_makeshlibs -p$(p_lgnat) -V '$(p_lgnat) (>= $(DEB_VERSION))'
+
+ mkdir -p $(d_lgnat)/usr/share/lintian/overrides
+ cp -p debian/$(p_lgnat).overrides \
+ $(d_lgnat)/usr/share/lintian/overrides/$(p_lgnat)
+
+ dh_shlibdeps -p$(p_lgnat)
+ dh_gencontrol -p$(p_lgnat) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_lgnat)
+ dh_md5sums -p$(p_lgnat)
+ dh_builddeb -p$(p_lgnat)
+
+ : # $(p_lgnat_dbg)
+ debian/dh_doclink -p$(p_lgnat_dbg) $(p_gbase)
+ dh_compress -p$(p_lgnat_dbg)
+ dh_fixperms -p$(p_lgnat_dbg)
+ dh_gencontrol -p$(p_lgnat_dbg) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_lgnat_dbg)
+ dh_md5sums -p$(p_lgnat_dbg)
+ dh_builddeb -p$(p_lgnat_dbg)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+
+$(binary_stamp)-libgnatvsn: $(binary_stamp)-libgnat
+ : # $(p_lgnatvsn_dev)
+ dh_movefiles -p$(p_lgnatvsn_dev) usr/lib/ada/adalib/gnatvsn
+ dh_movefiles -p$(p_lgnatvsn_dev) usr/share/ada/adainclude/gnatvsn
+ dh_install -p$(p_lgnatvsn_dev) \
+ debian/gnatvsn.gpr usr/share/ada/adainclude
+ dh_movefiles -p$(p_lgnatvsn_dev) usr/$(libdir)/libgnatvsn.a
+ dh_link -p$(p_lgnatvsn_dev) \
+ usr/$(libdir)/libgnatvsn.so.$(GNAT_VERSION) \
+ usr/$(libdir)/libgnatvsn.so
+ dh_strip -p$(p_lgnatvsn_dev) -X.a --keep-debug
+ dh_fixperms -p$(p_lgnatvsn_dev)
+ debian/dh_doclink -p$(p_lgnatvsn_dev) $(p_gbase)
+ dh_gencontrol -p$(p_lgnatvsn_dev) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_md5sums -p$(p_lgnatvsn_dev)
+ dh_builddeb -p$(p_lgnatvsn_dev)
+
+ : # $(p_lgnatvsn)
+ mkdir -p $(d_lgnatvsn)/usr/share/lintian/overrides
+ cp -p debian/$(p_lgnatvsn).overrides \
+ $(d_lgnatvsn)/usr/share/lintian/overrides/$(p_lgnatvsn)
+ dh_movefiles -p$(p_lgnatvsn) usr/$(libdir)/libgnatvsn.so.$(GNAT_VERSION)
+ debian/dh_doclink -p$(p_lgnatvsn) $(p_gbase)
+ dh_strip -p$(p_lgnatvsn) --dbg-package=$(p_lgnatvsn_dbg)
+ dh_makeshlibs -p$(p_lgnatvsn) -V '$(p_lgnatvsn) (>= $(DEB_VERSION))'
+ cat debian/$(p_lgnatvsn)/DEBIAN/shlibs >> debian/shlibs.local
+ dh_shlibdeps -p$(p_lgnatvsn) -L$(p_lgnat)
+ dh_gencontrol -p$(p_lgnatvsn) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_lgnatvsn)
+ dh_md5sums -p$(p_lgnatvsn)
+ dh_builddeb -p$(p_lgnatvsn)
+
+ : # $(p_lgnatvsn_dbg)
+ debian/dh_doclink -p$(p_lgnatvsn_dbg) $(p_gbase)
+ dh_compress -p$(p_lgnatvsn_dbg)
+ dh_fixperms -p$(p_lgnatvsn_dbg)
+ dh_gencontrol -p$(p_lgnatvsn_dbg) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_lgnatvsn_dbg)
+ dh_md5sums -p$(p_lgnatvsn_dbg)
+ dh_builddeb -p$(p_lgnatvsn_dbg)
+ touch $@
+
+$(binary_stamp)-libgnatprj: $(binary_stamp)-libgnat $(binary_stamp)-libgnatvsn
+ : # $(p_lgnatprj_dev)
+ dh_movefiles -p$(p_lgnatprj_dev) usr/lib/ada/adalib/gnatprj
+ dh_movefiles -p$(p_lgnatprj_dev) usr/share/ada/adainclude/gnatprj
+ dh_install -p$(p_lgnatprj_dev) \
+ debian/gnatprj.gpr usr/share/ada/adainclude
+ dh_movefiles -p$(p_lgnatprj_dev) usr/$(libdir)/libgnatprj.a
+ dh_link -p$(p_lgnatprj_dev) \
+ usr/$(libdir)/libgnatprj.so.$(GNAT_VERSION) \
+ usr/$(libdir)/libgnatprj.so
+ dh_strip -p$(p_lgnatprj_dev) -X.a --keep-debug
+ dh_fixperms -p$(p_lgnatprj_dev)
+ debian/dh_doclink -p$(p_lgnatprj_dev) $(p_gbase)
+ dh_gencontrol -p$(p_lgnatprj_dev) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_md5sums -p$(p_lgnatprj_dev)
+ dh_builddeb -p$(p_lgnatprj_dev)
+
+ : # $(p_lgnatprj)
+ mkdir -p $(d_lgnatprj)/usr/share/lintian/overrides
+ cp -p debian/$(p_lgnatprj).overrides \
+ $(d_lgnatprj)/usr/share/lintian/overrides/$(p_lgnatprj)
+ dh_movefiles -p$(p_lgnatprj) usr/$(libdir)/libgnatprj.so.$(GNAT_VERSION)
+ debian/dh_doclink -p$(p_lgnatprj) $(p_gbase)
+ dh_strip -p$(p_lgnatprj) --dbg-package=$(p_lgnatprj_dbg)
+ dh_makeshlibs -p$(p_lgnatprj) -V '$(p_lgnatprj) (>= $(DEB_VERSION))'
+ cat debian/$(p_lgnatprj)/DEBIAN/shlibs >> debian/shlibs.local
+ dh_shlibdeps -p$(p_lgnatprj) -L$(p_lgnat) -L$(p_lgnatvsn)
+ dh_gencontrol -p$(p_lgnatprj) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_lgnatprj)
+ dh_md5sums -p$(p_lgnatprj)
+ dh_builddeb -p$(p_lgnatprj)
+
+ : # $(p_lgnatprj_dbg)
+ debian/dh_doclink -p$(p_lgnatprj_dbg) $(p_gbase)
+ dh_compress -p$(p_lgnatprj_dbg)
+ dh_fixperms -p$(p_lgnatprj_dbg)
+ dh_gencontrol -p$(p_lgnatprj_dbg) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_lgnatprj_dbg)
+ dh_md5sums -p$(p_lgnatprj_dbg)
+ dh_builddeb -p$(p_lgnatprj_dbg)
+ touch $@
+
+ifeq ($(with_libgnat),yes)
+$(binary_stamp)-ada: $(install_stamp) $(binary_stamp)-libgnat
+$(binary_stamp)-ada: $(binary_stamp)-libgnatvsn
+$(binary_stamp)-ada: $(binary_stamp)-libgnatprj
+else
+$(binary_stamp)-ada: $(install_stamp)
+endif
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+ : # gnat
+ rm -rf $(d_gnat)
+ dh_installdirs -p$(p_gnat) $(dirs_gnat)
+ # Upstream does not install gnathtml.
+ cp src/gcc/ada/gnathtml.pl debian/tmp/$(PF)/bin/gnathtml
+ chmod 755 debian/tmp/$(PF)/bin/gnathtml
+ dh_movefiles -p$(p_gnat) $(files_gnat)
+ifeq ($(with_gnat_zcx)-$(with_gnat_sjlj),yes-yes)
+ dh_installdirs -p$(p_gnat)-sjlj $(gcc_lib_dir)
+ dh_movefiles -p$(p_gnat)-sjlj $(gcc_lib_dir)/rts-sjlj
+ dh_link -p$(p_gnat)-sjlj \
+ $(gcc_lib_dir)/rts-sjlj usr/share/ada/adainclude/rts-sjlj
+ dh_link -p$(p_gnat)-sjlj \
+ $(gcc_lib_dir)/rts-sjlj/adalib/libgnat.a \
+ $(gcc_lib_dir)/rts-sjlj/adalib/libgnat-$(GNAT_VERSION).a
+ dh_link -p$(p_gnat)-sjlj \
+ $(gcc_lib_dir)/rts-sjlj/adalib/libgnarl.a \
+ $(gcc_lib_dir)/rts-sjlj/adalib/libgnarl-$(GNAT_VERSION).a
+else
+ dh_link -p$(p_gnat) \
+ $(gcc_lib_dir)/adalib/libgnarl.a \
+ $(gcc_lib_dir)/adalib/libgnarl-$(GNAT_VERSION).a
+endif
+
+ifeq (0,1)
+ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+ mkdir -p $(d_gnat)/$(libexecdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)
+ ln -sf ../$(GCC_VERSION)/gnat1 \
+ $(d_gnat)/$(libexecdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)/gnat1
+ mkdir -p $(d_gnat)/$(PF)/$(libdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)
+ ln -sf ../$(GCC_VERSION)/adalib \
+ $(d_gnat)/$(PF)/$(libdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)/adalib
+ ln -sf ../$(GCC_VERSION)/adainclude \
+ $(d_gnat)/$(PF)/$(libdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)/adainclude
+endif
+endif
+
+ifeq ($(with_libgnat),yes)
+ for lib in lib{gnat,gnarl}; do \
+ vlib=$$lib-$(GNAT_SONAME); \
+ dh_link -p$(p_gnat) \
+ /$(PF)/$(libdir)/$$vlib.so.1 /$(PF)/$(libdir)/$$vlib.so \
+ /$(PF)/$(libdir)/$$vlib.so.1 /$(PF)/$(libdir)/$$lib.so; \
+ done
+ ifeq ($(with_gnat_zcx)-$(with_gnat_sjlj),yes-yes)
+ for lib in lib{gnat,gnarl}; do \
+ vlib=$$lib-$(GNAT_SONAME); \
+ dh_link -p$(p_gnat) \
+ /$(PF)/$(libdir)/$$vlib.so.1 $(gcc_lib_dir)/rts-native/adalib/$$lib.so; \
+ done
+ else
+ for lib in lib{gnat,gnarl}; do \
+ vlib=$$lib-$(GNAT_SONAME); \
+ dh_link -p$(p_gnat) \
+ /$(PF)/$(libdir)/$$vlib.so.1 $(gcc_lib_dir)/adalib/$$lib.so; \
+ done
+ endif
+endif
+ debian/dh_doclink -p$(p_gnat) $(p_gbase)
+ debian/dh_doclink -p$(p_gnat)-sjlj $(p_gbase)
+ for i in $(GNAT_TOOLS); do \
+ case "$$i" in \
+ gnat) cp -p debian/gnat.1 $(d_gnat)/$(PF)/share/man/man1/ ;; \
+ *) ln -sf gnat.1 $(d_gnat)/$(PF)/share/man/man1/$$i.1; \
+ esac; \
+ done
+
+ debian/dh_rmemptydirs -p$(p_gnat)
+
+ dh_strip -p$(p_gnat)
+ dh_compress -p$(p_gnat)
+ dh_fixperms -p$(p_gnat)
+ find $(d_gnat) -name '*.ali' | xargs chmod 444
+ dh_shlibdeps -p$(p_gnat)
+ dh_gencontrol -p$(p_gnat) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_gnat)
+ dh_md5sums -p$(p_gnat)
+ dh_builddeb -p$(p_gnat)
+
+ifeq ($(with_libgnat)-$(with_gnat_zcx)-$(with_gnat_sjlj),yes-yes-yes)
+ dh_strip -p$(p_gnat)-sjlj
+ dh_compress -p$(p_gnat)-sjlj
+ dh_fixperms -p$(p_gnat)-sjlj
+ find $(d_gnat)-sjlj -name '*.ali' | xargs chmod 444
+ dh_shlibdeps -p$(p_gnat)-sjlj
+ dh_gencontrol -p$(p_gnat)-sjlj -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_gnat)-sjlj
+ dh_md5sums -p$(p_gnat)-sjlj
+ dh_builddeb -p$(p_gnat)-sjlj
+endif
+
+ 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) \
+ $(PF)/share/info
+
+ cd $(ada_info_dir) && \
+ makeinfo -I $(srcdir)/gcc/doc/include -I $(srcdir)/gcc/ada \
+ -I $(builddir)/gcc \
+ -o gnat_ugn-$(GNAT_VERSION).info \
+ $(builddir)/gcc/doc/gnat_ugn.texi
+ cd $(ada_info_dir) && \
+ makeinfo -I $(srcdir)/gcc/doc/include -I $(srcdir)/gcc/ada \
+ -I $(builddir)/gcc \
+ -o gnat_rm-$(GNAT_VERSION).info \
+ $(srcdir)/gcc/ada/gnat_rm.texi
+ cd $(ada_info_dir) && \
+ makeinfo -I $(srcdir)/gcc/doc/include -I $(srcdir)/gcc/ada \
+ -I $(builddir)/gcc \
+ -o gnat-style-$(GNAT_VERSION).info \
+ $(srcdir)/gcc/ada/gnat-style.texi
+
+ dh_installdocs -p$(p_gnatd) \
+ html/gnat_ugn.html html/gnat_rm.html html/gnat-style.html
+ dh_installchangelogs -p$(p_gnatd)
+ 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)
diff --git a/debian/rules.d/binary-base.mk b/debian/rules.d/binary-base.mk
new file mode 100644
index 0000000..c43f10f
--- /dev/null
+++ b/debian/rules.d/binary-base.mk
@@ -0,0 +1,51 @@
+$(lib_binaries) += base
+
+# ---------------------------------------------------------------------------
+# gcc-base
+
+ifneq (,$(filter $(distrelease),oneiric precise wheezy sid))
+ additional_links = 4.6.1
+else ifneq (,$(filter $(distrelease),))
+ additional_links =
+else
+ additional_links =
+endif
+
+$(binary_stamp)-base: $(install_dependencies)
+ dh_testdir
+ dh_testroot
+ rm -rf $(d_base)
+ dh_installdirs -p$(p_base) \
+ $(gcc_lexec_dir)
+
+ ln -sf $(BASE_VERSION) \
+ $(d_base)/$(subst /$(BASE_VERSION),/$(GCC_VERSION),$(gcc_lib_dir))
+ for link in $(additional_links); do \
+ ln -sf $(BASE_VERSION) \
+ $(d_base)/$$(dirname $(gcc_lib_dir))/$$link; \
+ done
+ifneq ($(gcc_lib_dir),$(gcc_lexec_dir))
+ ln -sf $(BASE_VERSION) \
+ $(d_base)/$(subst /$(BASE_VERSION),/$(GCC_VERSION),$(gcc_lexec_dir))
+ for link in $(additional_links); do \
+ ln -sf $(BASE_VERSION) \
+ $(d_base)/$$(dirname $(gcc_lexec_dir))/$$link; \
+ done
+endif
+
+ifeq ($(with_spu),yes)
+ mkdir -p $(d_base)/$(gcc_spu_lexec_dir)
+ mkdir -p $(d_base)/$(gcc_spu_lib_dir)
+ ln -sf $(BASE_VERSION) $(d_base)/$(spulibexecdir)/gcc/spu/$(GCC_VERSION)
+ ln -sf $(BASE_VERSION) $(d_base)/usr/spu/lib/gcc/spu/$(GCC_VERSION)
+endif
+
+ dh_installdocs -p$(p_base) debian/README.Debian.$(DEB_TARGET_ARCH)
+ dh_installchangelogs -p$(p_base)
+ 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 $@
diff --git a/debian/rules.d/binary-cpp.mk b/debian/rules.d/binary-cpp.mk
new file mode 100644
index 0000000..eb21e8d
--- /dev/null
+++ b/debian/rules.d/binary-cpp.mk
@@ -0,0 +1,94 @@
+arch_binaries := $(arch_binaries) cpp
+ifneq ($(DEB_CROSS),yes)
+ ifneq ($(GFDL_INVARIANT_FREE),yes)
+ indep_binaries := $(indep_binaries) cpp-doc
+ endif
+endif
+
+dirs_cpp = \
+ $(docdir) \
+ $(PF)/share/man/man1 \
+ $(PF)/bin \
+ $(gcc_lexec_dir)
+
+files_cpp = \
+ $(PF)/bin/$(cmd_prefix)cpp$(pkg_ver) \
+ $(gcc_lexec_dir)/cc1 \
+ $(gcc_lexec_dir)/liblto_plugin.so{,.0,.0.0.0}
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ files_cpp += \
+ $(PF)/share/man/man1/$(cmd_prefix)cpp$(pkg_ver).1
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-cpp: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_cpp)
+ dh_installdirs -p$(p_cpp) $(dirs_cpp)
+ DH_COMPAT=2 dh_movefiles -p$(p_cpp) $(files_cpp)
+
+ifneq ($(DEB_CROSS),yes)
+ ln -sf cpp$(pkg_ver) \
+ $(d_cpp)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-cpp$(pkg_ver)
+ ln -sf cpp$(pkg_ver) \
+ $(d_cpp)/$(PF)/bin/$(TARGET_ALIAS)-cpp$(pkg_ver)
+ ifneq ($(GFDL_INVARIANT_FREE),yes)
+ ln -sf cpp$(pkg_ver).1 \
+ $(d_cpp)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-cpp$(pkg_ver).1
+ ln -sf cpp$(pkg_ver).1 \
+ $(d_cpp)/$(PF)/share/man/man1/$(TARGET_ALIAS)-cpp$(pkg_ver).1
+ endif
+endif
+
+ debian/dh_doclink -p$(p_cpp) $(p_base)
+ debian/dh_rmemptydirs -p$(p_cpp)
+
+ifeq ($(with_multiarch_lib),yes)
+ : # paths needed for relative lookups from startfile_prefixes
+ for ma in $(xarch_multiarch_names); do \
+ mkdir -p $(d_cpp)/lib/$$ma; \
+ mkdir -p $(d_cpp)/usr/lib/$$ma; \
+ done
+endif
+
+ 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)
diff --git a/debian/rules.d/binary-cxx.mk b/debian/rules.d/binary-cxx.mk
new file mode 100644
index 0000000..36dfa98
--- /dev/null
+++ b/debian/rules.d/binary-cxx.mk
@@ -0,0 +1,136 @@
+ifneq (,$(filter yes, $(biarch64) $(biarch32) $(biarchn32) $(biarchhf) $(biarchsf)))
+ arch_binaries := $(arch_binaries) cxx-multi
+endif
+arch_binaries := $(arch_binaries) cxx
+
+dirs_cxx = \
+ $(docdir)/$(p_base)/C++ \
+ $(PF)/bin \
+ $(PF)/share/info \
+ $(gcc_lexec_dir) \
+ $(PF)/share/man/man1
+files_cxx = \
+ $(PF)/bin/$(cmd_prefix)g++$(pkg_ver) \
+ $(gcc_lexec_dir)/cc1plus
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ files_cxx += \
+ $(PF)/share/man/man1/$(cmd_prefix)g++$(pkg_ver).1
+endif
+
+p_cxx_m = g++$(pkg_ver)-multilib$(cross_bin_arch)
+d_cxx_m = debian/$(p_cxx_m)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-cxx: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_cxx)
+ dh_installdirs -p$(p_cxx) $(dirs_cxx)
+ DH_COMPAT=2 dh_movefiles -p$(p_cxx) $(files_cxx)
+
+ifneq ($(DEB_CROSS),yes)
+ ln -sf g++$(pkg_ver) \
+ $(d_cxx)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-g++$(pkg_ver)
+ ln -sf g++$(pkg_ver) \
+ $(d_cxx)/$(PF)/bin/$(TARGET_ALIAS)-g++$(pkg_ver)
+endif
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+# g++ man page is a .so link
+ rm -f $(d_cxx)/$(PF)/share/man/man1/$(cmd_prefix)g++$(pkg_ver).1
+ ln -sf $(cmd_prefix)gcc$(pkg_ver).1.gz \
+ $(d_cxx)/$(PF)/share/man/man1/$(cmd_prefix)g++$(pkg_ver).1.gz
+ ifneq ($(DEB_CROSS),yes)
+ ln -sf g++$(pkg_ver).1.gz \
+ $(d_cxx)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-g++$(pkg_ver).1.gz
+ ln -sf g++$(pkg_ver).1.gz \
+ $(d_cxx)/$(PF)/share/man/man1/$(TARGET_ALIAS)-g++$(pkg_ver).1.gz
+ endif
+endif
+
+ debian/dh_doclink -p$(p_cxx) $(p_base)
+ cp -p debian/README.C++ $(d_cxx)/$(docdir)/$(p_base)/C++/
+ cp -p $(srcdir)/gcc/cp/ChangeLog \
+ $(d_cxx)/$(docdir)/$(p_base)/C++/changelog
+ debian/dh_rmemptydirs -p$(p_cxx)
+
+ mkdir -p $(d_cxx)/$(docdir)/$(p_base)/test-summaries
+ echo "TEST COMPARE BEGIN"
+ifeq ($(with_check),yes)
+ cp -p $$(find $(builddir) -mindepth 3 -name '*.sum') \
+ $(d_cxx)/$(docdir)/$(p_base)/test-summaries/
+ ifeq (0,1)
+ cd $(builddir); \
+ for i in $(CURDIR)/$(d_cxx)/$(docdir)/$(p_base)/test-summaries/*.sum; do \
+ b=$$(basename $$i); \
+ if [ -f /usr/share/doc/$(p_base)/test-summaries/$$b.gz ]; then \
+ zcat /usr/share/doc/$(p_base)/test-summaries/$$b.gz > /tmp/$$b; \
+ if sh $(srcdir)/contrib/test_summary /tmp/$$b $$i; then \
+ echo "$$b: OK"; \
+ else \
+ echo "$$b: FAILURES"; \
+ fi; \
+ rm -f /tmp/$$b; \
+ else \
+ echo "Test summary for $$b is not available"; \
+ fi; \
+ done
+ endif
+else
+ echo "Nothing to compare (testsuite not run)"
+endif
+ echo "TEST COMPARE END"
+
+ 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)
+
+# ----------------------------------------------------------------------
+define do_cxx
+ dh_installdirs -p$(p_cxx_m) $(gcc_lib_dir($1))
+ mv $(d)/$(usr_lib$(1))/lib*c++*.{a,so} $(d)/$(gcc_lib_dir$(1))/.
+ DH_COMPAT=2 dh_movefiles -p$(p_cxx_m) \
+ $(gcc_lib_dir$(1))/libstdc++.{a,so} \
+ $(gcc_lib_dir$(1))/libsupc++.a \
+ $(gcc_lib_dir$(1))/libstdc++_pic.a
+ dh_link -p$(p_cxx_m) \
+ /$(usr_lib$(1))/libstdc++.so.$(CXX_SONAME) \
+ /$(gcc_lib_dir$(1))/libstdc++.so
+
+endef
+
+$(binary_stamp)-cxx-multi: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_cxx_m)
+ dh_installdirs -p$(p_cxx_m) \
+ $(docdir)
+
+ $(foreach flavour,$(flavours), \
+ $(call do_cxx,$(flavour)))
+
+ debian/dh_doclink -p$(p_cxx_m) $(p_base)
+ debian/dh_rmemptydirs -p$(p_cxx_m)
+
+ dh_strip -p$(p_cxx_m)
+ dh_compress -p$(p_cxx_m)
+ dh_fixperms -p$(p_cxx_m)
+ dh_shlibdeps -p$(p_cxx_m)
+ dh_gencontrol -p$(p_cxx_m) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_cxx_m)
+ dh_md5sums -p$(p_cxx_m)
+ dh_builddeb -p$(p_cxx_m)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
diff --git a/debian/rules.d/binary-d.mk b/debian/rules.d/binary-d.mk
new file mode 100644
index 0000000..847a743
--- /dev/null
+++ b/debian/rules.d/binary-d.mk
@@ -0,0 +1,131 @@
+arch_binaries := $(arch_binaries) gdc
+
+ifeq ($(with_libphobos),yes)
+ arch_binaries += libphobos
+endif
+
+p_gdc = gdc$(pkg_ver)
+p_libphobos = libphobos$(libphobos_version)$(pkg_ver)-dev
+
+d_gdc = debian/$(p_gdc)
+d_libphobos = debian/$(p_libphobos)
+
+gdc_include_dir := $(PF)/include/d$(libphobos_version)
+
+dirs_gdc = \
+ $(PF)/bin \
+ $(PF)/share/man/man1 \
+ $(gdc_include_dir)/$(BASE_VERSION) \
+ $(gcc_lexec_dir)
+
+files_gdc = \
+ $(PF)/bin/$(cmd_prefix)gdc$(pkg_ver) \
+ $(PF)/bin/$(cmd_prefix)gdmd$(pkg_ver) \
+ $(PF)/share/man/man1/gdc$(pkg_ver).1 \
+ $(PF)/share/man/man1/gdmd$(pkg_ver).1 \
+ $(gcc_lexec_dir)/cc1d
+
+
+dirs_libphobos = \
+ $(PF)/lib \
+ $(gdc_include_dir)/$(BASE_VERSION) \
+ $(gcc_lib_dir)
+
+files_libphobos = \
+ $(PF)/$(libdir)/libgphobos$(libphobos_version).a \
+ $(gdc_include_dir)/$(BASE_VERSION)
+
+links_gdc = \
+ /$(gdc_include_dir)/$(BASE_VERSION) \
+ /$(gdc_include_dir)/$(GCC_VERSION) \
+ /$(docdir)/$(p_gcc)/README.Bugs \
+ /$(docdir)/$(p_gdc)/README.Bugs
+
+
+$(binary_stamp)-gdc: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_gdc)
+ dh_installdirs -p$(p_gdc) $(dirs_gdc)
+
+ dh_installdocs -p$(p_gdc) \
+ src/gcc/d/{README,GDC.html,History}
+ dh_installchangelogs -p$(p_gdc) src/gcc/d/ChangeLog
+
+ DH_COMPAT=2 dh_movefiles -p$(p_gdc) -X/zlib/ $(files_gdc)
+
+ifneq ($(DEB_CROSS),yes)
+ ln -sf gdc$(pkg_ver) \
+ $(d_gdc)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gdc$(pkg_ver)
+ ln -sf gdc$(pkg_ver) \
+ $(d_gdc)/$(PF)/bin/$(TARGET_ALIAS)-gdc$(pkg_ver)
+ ln -sf gdc$(pkg_ver).1 \
+ $(d_gdc)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gdc$(pkg_ver).1
+ ln -sf gdc$(pkg_ver).1 \
+ $(d_gdc)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gdc$(pkg_ver).1
+
+ ln -sf gdmd$(pkg_ver) \
+ $(d_gdc)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gdmd$(pkg_ver)
+ ln -sf gdmd$(pkg_ver) \
+ $(d_gdc)/$(PF)/bin/$(TARGET_ALIAS)-gdmd$(pkg_ver)
+ ln -sf gdmd$(pkg_ver).1 \
+ $(d_gdc)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gdmd$(pkg_ver).1
+ ln -sf gdmd$(pkg_ver).1 \
+ $(d_gdc)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gdmd$(pkg_ver).1
+endif
+
+ # Always needed by gdc.
+ cp $(srcdir)/gcc/d/druntime/object.di \
+ $(d_gdc)/$(gdc_include_dir)/$(BASE_VERSION)/
+
+ dh_link -p$(p_gdc) $(links_gdc)
+
+ dh_strip -p$(p_gdc)
+ dh_compress -p$(p_gdc)
+ dh_fixperms -p$(p_gdc)
+ dh_shlibdeps -p$(p_gdc)
+ dh_gencontrol -p$(p_gdc) -- -v$(DEB_GDC_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_gdc)
+ dh_md5sums -p$(p_gdc)
+ dh_builddeb -p$(p_gdc)
+
+ find $(d_gdc) -type d -empty -delete
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+$(binary_stamp)-libphobos: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_libphobos)
+ dh_installdirs -p$(p_libphobos) $(dirs_libphobos)
+
+ DH_COMPAT=2 dh_movefiles -p$(p_libphobos) -X/zlib/ $(files_libphobos)
+
+ # better to have it there, avoid conflicts
+ mv $(d_libphobos)/$(PF)/$(libdir)/libgphobos$(libphobos_version).a \
+ $(d_libphobos)/$(gcc_lib_dir)
+
+ # included in gdc package
+ rm -f $(d_libphobos)/$(gdc_include_dir)/$(BASE_VERSION)/object.di
+
+ # no need to have it twice
+ dh_link -p$(p_libphobos) \
+ /$(PF)/share/doc/$(p_gdc) /$(PF)/share/doc/$(p_libphobos)
+
+ dh_strip -p$(p_libphobos)
+ dh_compress -p$(p_libphobos)
+ dh_fixperms -p$(p_libphobos)
+ dh_shlibdeps -p$(p_libphobos)
+ dh_gencontrol -p$(p_libphobos) -- -v$(DEB_GDC_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_libphobos)
+ dh_md5sums -p$(p_libphobos)
+ dh_builddeb -p$(p_libphobos)
+
+ find $(d_libphobos) -type d -empty -delete
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
diff --git a/debian/rules.d/binary-fixincl.mk b/debian/rules.d/binary-fixincl.mk
new file mode 100644
index 0000000..851b261
--- /dev/null
+++ b/debian/rules.d/binary-fixincl.mk
@@ -0,0 +1,47 @@
+arch_binaries := $(arch_binaries) fixincl
+
+p_fix = fixincludes
+d_fix = debian/$(p_fix)
+
+dirs_fix = \
+ $(docdir)/$(p_base)/fixincludes \
+ $(PF)/share/man/man1 \
+ $(PF)/bin \
+ $(gcc_lexec_dir) \
+ $(gcc_lib_dir)
+files_fix = \
+ $(gcc_lexec_dir)/install-tools \
+ $(gcc_lib_dir)/install-tools
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-fixincl: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_fix)
+ dh_installdirs -p$(p_fix) $(dirs_fix)
+ DH_COMPAT=2 dh_movefiles -p$(p_fix) $(files_fix)
+
+# $(IP) $(builddir)/gcc/fixinc/fixincl $(d_fix)/$(PF)/lib/fixincludes/
+# sed -e "s,^FIXINCL=\(.*\),FIXINCL=/$(PF)/lib/fixincludes/fixincl," \
+# $(builddir)/gcc/fixinc.sh \
+# > $(d_fix)/$(PF)/lib/fixincludes/fixinc.sh
+# chmod 755 $(d_fix)/$(PF)/lib/fixincludes/fixinc.sh
+ $(IR) $(srcdir)/fixincludes/README \
+ $(d_fix)/$(docdir)/$(p_base)/fixincludes
+ sed -e 's,@LIBEXECDIR@,$(gcc_lexec_dir),g' debian/fixincludes.in \
+ > $(d_fix)/$(PF)/bin/fixincludes
+ chmod 755 $(d_fix)/$(PF)/bin/fixincludes
+
+ debian/dh_doclink -p$(p_fix) $(p_base)
+ dh_strip -p$(p_fix)
+ dh_compress -p$(p_fix)
+ dh_fixperms -p$(p_fix)
+ dh_shlibdeps -p$(p_fix)
+ dh_gencontrol -p$(p_fix) -- -v$(DEB_EVERSION) $(common_substvars)
+ dh_installdeb -p$(p_fix)
+ dh_md5sums -p$(p_fix)
+ dh_builddeb -p$(p_fix)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
diff --git a/debian/rules.d/binary-fortran.mk b/debian/rules.d/binary-fortran.mk
new file mode 100644
index 0000000..c667541
--- /dev/null
+++ b/debian/rules.d/binary-fortran.mk
@@ -0,0 +1,217 @@
+ifeq ($(with_libgfortran),yes)
+ $(lib_binaries) += libgfortran
+endif
+ifeq ($(with_lib64gfortran),yes)
+ $(lib_binaries) += lib64fortran
+endif
+ifeq ($(with_lib32gfortran),yes)
+ $(lib_binaries) += lib32fortran
+endif
+ifeq ($(with_libn32gfortran),yes)
+ $(lib_binaries) += libn32fortran
+endif
+ifeq ($(with_libhfgfortran),yes)
+ $(lib_binaries) += libhffortran
+endif
+ifeq ($(with_libsfgfortran),yes)
+ $(lib_binaries) += libsffortran
+endif
+
+ifeq ($(with_fdev),yes)
+ ifneq (,$(filter yes, $(biarch64) $(biarch32) $(biarchn32) $(biarchhf) $(biarchsf)))
+ arch_binaries := $(arch_binaries) fdev-multi
+ endif
+ arch_binaries := $(arch_binaries) fdev
+ ifneq ($(DEB_CROSS),yes)
+ ifneq ($(GFDL_INVARIANT_FREE),yes)
+ indep_binaries := $(indep_binaries) fortran-doc
+ endif
+ endif
+endif
+
+p_g95 = gfortran$(pkg_ver)$(cross_bin_arch)
+p_g95_m = gfortran$(pkg_ver)-multilib$(cross_bin_arch)
+p_g95d = gfortran$(pkg_ver)-doc
+p_flib = libgfortran$(FORTRAN_SONAME)$(cross_lib_arch)
+
+d_g95 = debian/$(p_g95)
+d_g95_m = debian/$(p_g95_m)
+d_g95d = debian/$(p_g95d)
+
+dirs_g95 = \
+ $(docdir)/$(p_base)/fortran \
+ $(PF)/bin \
+ $(gcc_lexec_dir) \
+ $(gcc_lib_dir) \
+ $(PF)/include \
+ $(PF)/share/man/man1
+files_g95 = \
+ $(PF)/bin/$(cmd_prefix)gfortran$(pkg_ver) \
+ $(gcc_lib_dir)/finclude \
+ $(gcc_lexec_dir)/f951
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ files_g95 += \
+ $(PF)/share/man/man1/$(cmd_prefix)gfortran$(pkg_ver).1
+endif
+
+# ----------------------------------------------------------------------
+define __do_fortran
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_l) $(d_d)
+ dh_installdirs -p$(p_l) $(usr_lib$(2))
+ DH_COMPAT=2 dh_movefiles -p$(p_l) $(usr_lib$(2))/libgfortran.so.*
+
+ debian/dh_doclink -p$(p_l) $(p_base)
+ debian/dh_doclink -p$(p_d) $(p_base)
+
+ dh_strip -p$(p_l) --dbg-package=$(p_d)
+ dh_compress -p$(p_l) -p$(p_d)
+ dh_fixperms -p$(p_l) -p$(p_d)
+ dh_makeshlibs -p$(p_l) || echo FIXME: libgfortran symbols
+ $(call cross_mangle_shlibs,$(p_l))
+ DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_l) \
+ -L$(p_l$(2)quadmath) -l:$(d)/$(usr_lib$(2)): || echo FIXME libgfortran symbols
+ $(call cross_mangle_substvars,$(p_l))
+ dh_gencontrol -p$(p_l) -p$(p_d) \
+ -- -v$(DEB_VERSION) $(common_substvars)
+ $(call cross_mangle_control,$(p_l))
+ if [ -f debian/$(p_l).overrides ]; then \
+ mkdir -p debian/$(p_l)/usr/share/lintian/overrides; \
+ cp debian/$(p_l).overrides debian/$(p_l)/usr/share/lintian/overrides/$(p_l); \
+ fi
+ dh_installdeb -p$(p_l) -p$(p_d)
+ dh_md5sums -p$(p_l) -p$(p_d)
+ dh_builddeb -p$(p_l) -p$(p_d)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+do_fortran = $(call __do_fortran,lib$(1)gfortran$(FORTRAN_SONAME),$(1))
+
+define do_fortran_dev
+ dh_installdirs -p$(2) $(gcc_lib_dir$(1))
+ DH_COMPAT=2 dh_movefiles -p$(2) \
+ $(gcc_lib_dir$(1))/libgfortranbegin.a
+ $(call install_gcc_lib,libgfortran,$(FORTRAN_SONAME),$(1),$(2))
+endef
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgfortran: $(install_stamp)
+ $(call do_fortran,)
+
+$(binary_stamp)-lib64fortran: $(install_stamp)
+ $(call do_fortran,64)
+
+$(binary_stamp)-lib32fortran: $(install_stamp)
+ $(call do_fortran,32)
+
+$(binary_stamp)-libn32fortran: $(install_stamp)
+ $(call do_fortran,n32)
+
+$(binary_stamp)-libhffortran: $(install_stamp)
+ $(call do_fortran,hf)
+
+$(binary_stamp)-libsffortran: $(install_stamp)
+ $(call do_fortran,sf)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-fdev: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_g95)
+ dh_installdirs -p$(p_g95) $(dirs_g95)
+
+ DH_COMPAT=2 dh_movefiles -p$(p_g95) $(files_g95)
+
+ $(call do_fortran_dev,,$(p_g95))
+
+ mv $(d)/$(usr_lib)/libgfortran.spec $(d_g95)/$(gcc_lib_dir)/
+
+ifneq ($(DEB_CROSS),yes)
+ ln -sf gfortran$(pkg_ver) \
+ $(d_g95)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gfortran$(pkg_ver)
+ ln -sf gfortran$(pkg_ver) \
+ $(d_g95)/$(PF)/bin/$(TARGET_ALIAS)-gfortran$(pkg_ver)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ ln -sf gfortran$(pkg_ver).1 \
+ $(d_g95)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gfortran$(pkg_ver).1
+ ln -sf gfortran$(pkg_ver).1 \
+ $(d_g95)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gfortran$(pkg_ver).1
+endif
+endif
+
+ debian/dh_doclink -p$(p_g95) $(p_base)
+
+ cp -p $(srcdir)/gcc/fortran/ChangeLog \
+ $(d_g95)/$(docdir)/$(p_base)/fortran/changelog
+ debian/dh_rmemptydirs -p$(p_g95)
+
+ dh_strip -p$(p_g95)
+ dh_compress -p$(p_g95)
+ dh_fixperms -p$(p_g95)
+ dh_shlibdeps -p$(p_g95)
+ dh_gencontrol -p$(p_g95) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_g95)
+ dh_md5sums -p$(p_g95)
+ dh_builddeb -p$(p_g95)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-fdev-multi: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_g95_m)
+ dh_installdirs -p$(p_g95_m) $(docdir)
+
+ $(foreach flavour,$(flavours), \
+ $(call do_fortran_dev,$(flavour),$(p_g95_m)))
+
+ debian/dh_doclink -p$(p_g95_m) $(p_base)
+ debian/dh_rmemptydirs -p$(p_g95_m)
+ dh_strip -p$(p_g95_m)
+ dh_compress -p$(p_g95_m)
+ dh_fixperms -p$(p_g95_m)
+ dh_shlibdeps -p$(p_g95_m)
+ dh_gencontrol -p$(p_g95_m) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_g95_m)
+ dh_md5sums -p$(p_g95_m)
+ dh_builddeb -p$(p_g95_m)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-fortran-doc: $(build_html_stamp) $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_g95d)
+ dh_installdirs -p$(p_g95d) \
+ $(docdir)/$(p_base)/fortran \
+ $(PF)/share/info
+ DH_COMPAT=2 dh_movefiles -p$(p_g95d) \
+ $(PF)/share/info/gfortran*
+
+ debian/dh_doclink -p$(p_g95d) $(p_base)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ dh_installdocs -p$(p_g95d)
+ rm -f $(d_g95d)/$(docdir)/$(p_base)/copyright
+ cp -p html/gfortran.html $(d_g95d)/$(docdir)/$(p_base)/fortran/
+endif
+
+ dh_compress -p$(p_g95d)
+ dh_fixperms -p$(p_g95d)
+ dh_installdeb -p$(p_g95d)
+ dh_gencontrol -p$(p_g95d) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_md5sums -p$(p_g95d)
+ dh_builddeb -p$(p_g95d)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
diff --git a/debian/rules.d/binary-gcc.mk b/debian/rules.d/binary-gcc.mk
new file mode 100644
index 0000000..17dec4f
--- /dev/null
+++ b/debian/rules.d/binary-gcc.mk
@@ -0,0 +1,359 @@
+ifneq (,$(filter yes, $(biarch64) $(biarch32) $(biarchn32) $(biarchhf) $(biarchsf)))
+ arch_binaries := $(arch_binaries) gcc-multi
+endif
+ifeq ($(with_plugins),yes)
+ arch_binaries := $(arch_binaries) gcc-plugindev
+endif
+
+arch_binaries := $(arch_binaries) gcc
+
+ifneq ($(DEB_CROSS),yes)
+ ifneq ($(GFDL_INVARIANT_FREE),yes)
+ indep_binaries := $(indep_binaries) gcc-doc
+ endif
+ ifeq ($(with_nls),yes)
+ indep_binaries := $(indep_binaries) gcc-locales
+ endif
+endif
+
+# gcc must be moved after g77 and g++
+# not all files $(PF)/include/*.h are part of gcc,
+# but it becomes difficult to name all these files ...
+
+dirs_gcc = \
+ $(docdir)/$(p_base)/{gcc,libssp,gomp,quadmath} \
+ $(PF)/bin \
+ $(gcc_lexec_dir) \
+ $(gcc_lib_dir)/{include,include-fixed} \
+ $(PF)/share/man/man1 $(libgcc_dir)
+
+# XXX: what about triarch mapping?
+files_gcc = \
+ $(PF)/bin/$(cmd_prefix){gcc,gcov}$(pkg_ver) \
+ $(gcc_lexec_dir)/{collect2,lto1,lto-wrapper} \
+ $(gcc_lib_dir)/include/std*.h \
+ $(shell for h in \
+ README features.h arm_neon.h \
+ {cpuid,decfloat,float,iso646,limits,mm3dnow,mm_malloc}.h \
+ {ppu_intrinsics,paired,spu2vmx,vec_types,si2vmx}.h \
+ {,a,b,e,i,n,p,s,t,w,x}mmintrin.h mmintrin-common.h \
+ {abm,avx,bmi,fma4,ia32,lwp,popcnt,tbm,x86,xop,}intrin.h \
+ {cross-stdarg,syslimits,unwind,varargs}.h; \
+ do \
+ test -e $(d)/$(gcc_lib_dir)/include/$$h \
+ && echo $(gcc_lib_dir)/include/$$h; \
+ test -e $(d)/$(gcc_lib_dir)/include-fixed/$$h \
+ && echo $(gcc_lib_dir)/include-fixed/$$h; \
+ done) \
+ $(shell for d in \
+ asm bits gnu linux $(TARGET_ALIAS) \
+ $(subst $(DEB_TARGET_GNU_CPU),$(biarch_cpu),$(TARGET_ALIAS)); \
+ do \
+ test -e $(d)/$(gcc_lib_dir)/include/$$d \
+ && echo $(gcc_lib_dir)/include/$$d; \
+ test -e $(d)/$(gcc_lib_dir)/include-fixed/$$d \
+ && echo $(gcc_lib_dir)/include-fixed/$$d; \
+ done) \
+ $(shell test -e $(d)/$(gcc_lib_dir)/SYSCALLS.c.X \
+ && echo $(gcc_lib_dir)/SYSCALLS.c.X)
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ files_gcc += \
+ $(PF)/share/man/man1/$(cmd_prefix){gcc,gcov}$(pkg_ver).1
+endif
+
+ifeq ($(with_libssp),yes)
+ files_gcc += $(gcc_lib_dir)/include/ssp
+endif
+ifeq ($(with_gomp),yes)
+ files_gcc += $(gcc_lib_dir)/include/omp.h
+endif
+ifeq ($(with_qmath),yes)
+ files_gcc += $(gcc_lib_dir)/include/quadmath{,_weak}.h
+endif
+
+ifeq ($(DEB_TARGET_ARCH),ia64)
+ files_gcc += $(gcc_lib_dir)/include/ia64intrin.h
+endif
+
+ifeq ($(DEB_TARGET_ARCH),m68k)
+ files_gcc += $(gcc_lib_dir)/include/math-68881.h
+endif
+
+ifeq ($(DEB_TARGET_ARCH),$(findstring $(DEB_TARGET_ARCH),powerpc ppc64 powerpcspe))
+ files_gcc += $(gcc_lib_dir)/include/{altivec.h,ppc-asm.h,spe.h}
+endif
+
+usr_doc_files = debian/README.Bugs \
+ $(shell test -f $(srcdir)/FAQ && echo $(srcdir)/FAQ) \
+ $(shell test -f test-summary && echo test-summary)
+
+p_loc = gcc$(pkg_ver)-locales
+d_loc = debian/$(p_loc)
+
+p_gcc_m = gcc$(pkg_ver)-multilib$(cross_bin_arch)
+d_gcc_m = debian/$(p_gcc_m)
+
+p_pld = gcc$(pkg_ver)-plugin-dev$(cross_bin_arch)
+d_pld = debian/$(p_pld)
+
+# __do_gcc_libs(flavour,package,todir,fromdir)
+define __do_gcc_libs
+ dh_installdirs -p$(2) $(3)
+# stage1 builds static libgcc only
+ $(if $(filter $(DEB_STAGE),stage1),,
+ : # libgcc_s.so may be a linker script on some architectures
+ set -e; \
+ if [ -h $(4)/libgcc_s.so ]; then \
+ rm -f $(4)/libgcc_s.so; \
+ dh_link -p$(2) /$(libgcc_dir$(1))/libgcc_s.so.$(GCC_SONAME) \
+ $(3)/libgcc_s.so; \
+ else \
+ mv $(4)/libgcc_s.so $(d)/$(3)/libgcc_s.so; \
+ dh_link -p$(2) /$(libgcc_dir$(1))/libgcc_s.so.$(GCC_SONAME) \
+ $(3)/libgcc_s.so.$(GCC_SONAME); \
+ fi; \
+ $(if $(1), dh_link -p$(2) /$(3)/libgcc_s.so \
+ $(gcc_lib_dir)/libgcc_s_$(1).so;)
+ )
+ DH_COMPAT=2 dh_movefiles -p$(2) \
+ $(3)/{libgcc*,libgcov.a,*.o}
+ $(if $(filter yes, $(with_lib$(1)gmath)),
+ $(call install_gcc_lib,libgcc-math,$(GCC_SONAME),$(1),$(2))
+ )
+ $(if $(filter yes, $(with_libssp)),
+ $(call install_gcc_lib,libssp,$(SSP_SONAME),$(1),$(2))
+ )
+ $(if $(filter yes, $(with_ssp)),
+ mv $(4)/libssp_nonshared.a debian/$(2)/$(3)/;
+ )
+ $(if $(filter yes, $(with_gomp)),
+ $(call install_gcc_lib,libgomp,$(GOMP_SONAME),$(1),$(2))
+ )
+ $(if $(filter yes, $(with_qmath)),
+ $(call install_gcc_lib,libquadmath,$(QMATH_SONAME),$(1),$(2))
+ )
+
+endef
+
+# do_gcc_libs(flavour,pkg)
+define do_gcc_libs
+ $(call __do_gcc_libs,$(1),$(2),$(gcc_lib_dir$(1)),$(d)/$(usr_lib$(1)))
+endef
+
+# ----------------------------------------------------------------------
+$(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)
+
+ $(call do_gcc_libs,,$(p_gcc))
+
+ifeq ($(with_linaro_branch),yes)
+ if [ -f $(srcdir)/ChangeLog.linaro ]; then \
+ cp -p $(srcdir)/ChangeLog.linaro \
+ $(d_gcc)/$(docdir)/$(p_base)/changelog.linaro; \
+ fi
+endif
+ifeq ($(with_libssp),yes)
+ cp -p $(srcdir)/libssp/ChangeLog \
+ $(d_gcc)/$(docdir)/$(p_base)/libssp/changelog
+endif
+ifeq ($(with_gomp),yes)
+ mv $(d)/$(usr_lib)/libgomp*.spec $(d_gcc)/$(gcc_lib_dir)/
+ cp -p $(srcdir)/libgomp/ChangeLog \
+ $(d_gcc)/$(docdir)/$(p_base)/gomp/changelog
+endif
+ifeq ($(with_qmath),yes)
+ cp -p $(srcdir)/libquadmath/ChangeLog \
+ $(d_gcc)/$(docdir)/$(p_base)/quadmath/changelog
+endif
+
+ DH_COMPAT=2 dh_movefiles -p$(p_gcc) $(files_gcc)
+
+ifneq ($(DEB_CROSS),yes)
+ ln -sf gcc$(pkg_ver) \
+ $(d_gcc)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gcc$(pkg_ver)
+ ln -sf gcc$(pkg_ver) \
+ $(d_gcc)/$(PF)/bin/$(TARGET_ALIAS)-gcc$(pkg_ver)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ ln -sf gcc$(pkg_ver).1 \
+ $(d_gcc)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gcc$(pkg_ver).1
+ ln -sf gcc$(pkg_ver).1 \
+ $(d_gcc)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gcc$(pkg_ver).1
+endif
+endif
+
+# dh_installdebconf
+ debian/dh_doclink -p$(p_gcc) $(p_base)
+ cp -p $(usr_doc_files) $(d_gcc)/$(docdir)/$(p_base)/.
+ if [ -f testsuite-comparision ]; then \
+ cp -p testsuite-comparision $(d_gcc)/$(docdir)/$(p_base)/. ; \
+ fi
+ cp -p debian/README.ssp $(d_gcc)/$(docdir)/$(p_base)/
+ cp -p debian/NEWS.gcc $(d_gcc)/$(docdir)/$(p_base)/NEWS
+ cp -p debian/NEWS.html $(d_gcc)/$(docdir)/$(p_base)/NEWS.html
+ cp -p $(srcdir)/ChangeLog $(d_gcc)/$(docdir)/$(p_base)/changelog
+ 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
+ -find $(d) -type d -empty -delete
+
+ @echo "Listing installed files not included in any package:"
+ -find $(d) ! -type d
+
+# ----------------------------------------------------------------------
+
+$(binary_stamp)-gcc-multi: $(install_dependencies)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_gcc_m)
+ dh_installdirs -p$(p_gcc_m) $(docdir)
+
+ $(foreach flavour,$(flavours), \
+ $(call do_gcc_libs,$(flavour),$(p_gcc_m)))
+
+ debian/dh_doclink -p$(p_gcc_m) $(p_base)
+ debian/dh_rmemptydirs -p$(p_gcc_m)
+
+ dh_strip -p$(p_gcc_m)
+ dh_compress -p$(p_gcc_m)
+ dh_shlibdeps -p$(p_gcc_m)
+ dh_fixperms -p$(p_gcc_m)
+ dh_installdeb -p$(p_gcc_m)
+ dh_gencontrol -p$(p_gcc_m) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_md5sums -p$(p_gcc_m)
+ dh_builddeb -p$(p_gcc_m)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcc-plugindev: $(install_dependencies)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_pld)
+ dh_installdirs -p$(p_pld) \
+ $(docdir) \
+ $(gcc_lib_dir)/plugin/include/config/arm
+ DH_COMPAT=2 dh_movefiles -p$(p_pld) \
+ $(gcc_lib_dir)/plugin
+
+ cp $(builddir)/gcc/build/gengtype $(d_pld)/$(gcc_lib_dir)/
+ cp $(builddir)/gcc/gtype.state $(d_pld)/$(gcc_lib_dir)/
+
+ifneq (,$(filter arm% mips% sh% sparc%,$(DEB_TARGET_GNU_CPU)))
+ # see GCC #45078; vxworks-dummy.h is included for cpu_type in arm,
+ # i386, mips, sh and sparc but only installed when it's i386; copy it
+ # manually on the other arches where it's included
+ cp $(srcdir)/gcc/config/vxworks-dummy.h \
+ $(d_pld)/$(gcc_lib_dir)/plugin/include/config/
+endif
+ cp $(srcdir)/gcc/config/arm/arm-cores.def \
+ $(d_pld)/$(gcc_lib_dir)/plugin/include/config/arm/
+
+ debian/dh_doclink -p$(p_pld) $(p_base)
+ debian/dh_rmemptydirs -p$(p_pld)
+
+ dh_strip -p$(p_pld)
+ dh_compress -p$(p_pld)
+ dh_shlibdeps -p$(p_pld)
+ dh_fixperms -p$(p_pld)
+ dh_installdeb -p$(p_pld)
+ dh_gencontrol -p$(p_pld) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_md5sums -p$(p_pld)
+ dh_builddeb -p$(p_pld)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcc-locales: $(install_dependencies)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_loc)
+ dh_installdirs -p$(p_loc) \
+ $(docdir)
+ DH_COMPAT=2 dh_movefiles -p$(p_loc) \
+ $(PF)/share/locale/*/*/cpplib*.* \
+ $(PF)/share/locale/*/*/gcc*.*
+
+ debian/dh_doclink -p$(p_loc) $(p_base)
+ debian/dh_rmemptydirs -p$(p_loc)
+
+ dh_compress -p$(p_loc)
+ dh_fixperms -p$(p_loc)
+ dh_installdeb -p$(p_loc)
+ dh_gencontrol -p$(p_loc) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_md5sums -p$(p_loc)
+ dh_builddeb -p$(p_loc)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcc-doc: $(build_html_stamp) $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_doc)
+ dh_installdirs -p$(p_doc) \
+ $(docdir)/$(p_base) \
+ $(PF)/share/info
+ DH_COMPAT=2 dh_movefiles -p$(p_doc) \
+ $(PF)/share/info/gcc*
+ rm -f $(d_doc)/$(PF)/share/info/gccinst*
+
+ifeq ($(with_gomp),yes)
+ $(MAKE) -C $(buildlibdir)/libgomp stamp-build-info
+ cp -p $(buildlibdir)/libgomp/libgomp$(pkg_ver).info $(d_doc)/$(PF)/share/info/
+endif
+
+ debian/dh_doclink -p$(p_doc) $(p_base)
+ dh_installdocs -p$(p_doc) html/gcc.html html/gccint.html
+ifeq ($(with_gomp),yes)
+ cp -p html/libgomp.html $(d_doc)/usr/share/doc/$(p_doc)/
+endif
+ 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)
diff --git a/debian/rules.d/binary-go.mk b/debian/rules.d/binary-go.mk
new file mode 100644
index 0000000..06fb633
--- /dev/null
+++ b/debian/rules.d/binary-go.mk
@@ -0,0 +1,216 @@
+ifeq ($(with_libgo),yes)
+ $(lib_binaries) += libgo
+endif
+ifeq ($(with_lib64go),yes)
+ $(lib_binaries) += lib64go
+endif
+ifeq ($(with_lib32go),yes)
+ $(lib_binaries) += lib32go
+endif
+ifeq ($(with_libn32go),yes)
+ $(lib_binaries) += libn32go
+endif
+
+arch_binaries := $(arch_binaries) gccgo
+ifneq (,$(filter yes, $(biarch64) $(biarch32) $(biarchn32)))
+ arch_binaries := $(arch_binaries) gccgo-multi
+endif
+ifneq ($(DEB_CROSS),yes)
+ ifneq ($(GFDL_INVARIANT_FREE),yes)
+ #indep_binaries := $(indep_binaries) go-doc
+ endif
+endif
+
+p_go = gccgo$(pkg_ver)$(cross_bin_arch)
+p_go_m = gccgo$(pkg_ver)-multilib$(cross_bin_arch)
+p_god = gccgo$(pkg_ver)-doc
+p_golib = libgo$(GO_SONAME)$(cross_lib_arch)
+
+d_go = debian/$(p_go)
+d_go_m = debian/$(p_go_m)
+d_god = debian/$(p_god)
+d_golib = debian/$(p_golib)
+
+dirs_go = \
+ $(docdir)/$(p_base)/go \
+ $(PF)/bin \
+ $(gcc_lexec_dir) \
+ $(gcc_lib_dir) \
+ $(PF)/include \
+ $(PF)/share/man/man1
+files_go = \
+ $(PF)/bin/$(cmd_prefix)gccgo$(pkg_ver) \
+ $(gcc_lexec_dir)/go1
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ files_go += \
+ $(PF)/share/man/man1/$(cmd_prefix)gccgo$(pkg_ver).1
+endif
+
+# ----------------------------------------------------------------------
+define __do_gccgo
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_l) $(d_d)
+ dh_installdirs -p$(p_l) $(2)
+ DH_COMPAT=2 dh_movefiles -p$(p_l) \
+ $(2)/libgo.so.* $(2)/go
+
+ debian/dh_doclink -p$(p_l) $(p_base)
+ debian/dh_doclink -p$(p_d) $(p_base)
+
+ dh_strip -p$(p_l) --dbg-package=$(p_d)
+ dh_compress -p$(p_l) -p$(p_d)
+ dh_fixperms -p$(p_l) -p$(p_d)
+ dh_makeshlibs -p$(p_l)
+ $(call cross_mangle_shlibs,$(p_l))
+ $(cross_shlibdeps) dh_shlibdeps -p$(p_l) \
+ -L$(p_l$(2)go) -l:$(d)/$(usr_lib$(2)):
+ $(call cross_mangle_substvars,$(p_l))
+ dh_gencontrol -p$(p_l) -p$(p_d) \
+ -- -v$(DEB_VERSION) $(common_substvars)
+ $(call cross_mangle_control,$(p_l))
+ dh_installdeb -p$(p_l) -p$(p_d)
+ dh_md5sums -p$(p_l) -p$(p_d)
+ dh_builddeb -p$(p_l) -p$(p_d)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+do_gccgo = $(call __do_gccgo,lib$(1)go$(GO_SONAME),$(usr_lib$(1)))
+
+define install_gccgo_lib
+ mv $(d)/$(usr_lib$(3))/$(1).a debian/$(4)/$(gcc_lib_dir$(3))/
+ rm -f $(d)/$(usr_lib$(3))/$(1)*.{la,so}
+ dh_link -p$(4) \
+ /$(usr_lib$(3))/$(1).so.$(2) /$(gcc_lib_dir$(3))/$(1).so
+endef
+
+define do_go_dev
+ dh_installdirs -p$(2) $(gcc_lib_dir$(1))
+ DH_COMPAT=2 dh_movefiles -p$(2) \
+ $(gcc_lib_dir$(1))/libgobegin.a
+ $(call install_gccgo_lib,libgo,$(GO_SONAME),$(1),$(2))
+endef
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgo: $(install_stamp)
+ $(call do_gccgo,)
+
+$(binary_stamp)-lib64go: $(install_stamp)
+ $(call do_gccgo,64)
+
+$(binary_stamp)-lib32go: $(install_stamp)
+ $(call do_gccgo,32)
+
+$(binary_stamp)-libn32go: $(install_stamp)
+ $(call do_gccgo,n32)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gccgo: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_go)
+ dh_installdirs -p$(p_go) $(dirs_go)
+
+ mv $(d)/$(usr_lib)/libgobegin.a \
+ $(d)/$(gcc_lib_dir)/
+ if [ -f $(d)/$(usr_lib64)/libgobegin.a ]; then \
+ mv $(d)/$(usr_lib64)/libgobegin.a \
+ $(d)/$(gcc_lib_dir)/64/; \
+ fi
+ if [ -f $(d)/$(usr_lib32)/libgobegin.a ]; then \
+ mv $(d)/$(usr_lib32)/libgobegin.a \
+ $(d)/$(gcc_lib_dir)/32/; \
+ fi
+
+ DH_COMPAT=2 dh_movefiles -p$(p_go) $(files_go)
+
+ $(call do_go_dev,,$(p_go))
+
+ifneq ($(DEB_CROSS),yes)
+ ln -sf gccgo$(pkg_ver) \
+ $(d_go)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gccgo$(pkg_ver)
+ ln -sf gccgo$(pkg_ver) \
+ $(d_go)/$(PF)/bin/$(TARGET_ALIAS)-gccgo$(pkg_ver)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ ln -sf gccgo$(pkg_ver).1 \
+ $(d_go)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gccgo$(pkg_ver).1
+ ln -sf gccgo$(pkg_ver).1 \
+ $(d_go)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gccgo$(pkg_ver).1
+endif
+endif
+
+ debian/dh_doclink -p$(p_go) $(p_base)
+
+# cp -p $(srcdir)/gcc/go/ChangeLog \
+# $(d_go)/$(docdir)/$(p_base)/go/changelog
+ debian/dh_rmemptydirs -p$(p_go)
+
+ dh_strip -p$(p_go)
+ dh_compress -p$(p_go)
+ dh_fixperms -p$(p_go)
+ dh_shlibdeps -p$(p_go)
+ dh_gencontrol -p$(p_go) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_go)
+ dh_md5sums -p$(p_go)
+ dh_builddeb -p$(p_go)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gccgo-multi: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_go_m)
+ dh_installdirs -p$(p_go_m) $(docdir)
+
+ $(foreach flavour,$(flavours), \
+ $(call do_go_dev,$(flavour),$(p_go_m)))
+
+ debian/dh_doclink -p$(p_go_m) $(p_base)
+ debian/dh_rmemptydirs -p$(p_go_m)
+ dh_strip -p$(p_go_m)
+ dh_compress -p$(p_go_m)
+ dh_fixperms -p$(p_go_m)
+ dh_shlibdeps -p$(p_go_m)
+ dh_gencontrol -p$(p_go_m) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_go_m)
+ dh_md5sums -p$(p_go_m)
+ dh_builddeb -p$(p_go_m)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-go-doc: $(build_html_stamp) $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_god)
+ dh_installdirs -p$(p_god) \
+ $(docdir)/$(p_base)/go \
+ $(PF)/share/info
+# DH_COMPAT=2 dh_movefiles -p$(p_god) \
+# $(PF)/share/info/gfortran*
+
+ debian/dh_doclink -p$(p_god) $(p_base)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ dh_installdocs -p$(p_god)
+ rm -f $(d_god)/$(docdir)/$(p_base)/copyright
+# cp -p html/gccgo.html $(d_god)/$(docdir)/$(p_base)/go/
+endif
+
+ dh_compress -p$(p_god)
+ dh_fixperms -p$(p_god)
+ dh_installdeb -p$(p_god)
+ dh_gencontrol -p$(p_god) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_md5sums -p$(p_god)
+ dh_builddeb -p$(p_god)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
diff --git a/debian/rules.d/binary-hppa64.mk b/debian/rules.d/binary-hppa64.mk
new file mode 100644
index 0000000..9ccefae
--- /dev/null
+++ b/debian/rules.d/binary-hppa64.mk
@@ -0,0 +1,29 @@
+arch_binaries := $(arch_binaries) hppa64
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-hppa64: $(install_hppa64_stamp)
+ dh_testdir
+ dh_testroot
+
+# dh_installdirs -p$(p_hppa64)
+
+ : # provide as and ld links
+ dh_link -p $(p_hppa64) \
+ /usr/bin/hppa64-linux-gnu-as \
+ /$(hppa64libexecdir)/gcc/hppa64-linux-gnu/$(GCC_VERSION)/as \
+ /usr/bin/hppa64-linux-gnu-ld \
+ /$(hppa64libexecdir)/gcc/hppa64-linux-gnu/$(GCC_VERSION)/ld
+
+ debian/dh_doclink -p$(p_hppa64) $(p_base)
+ debian/dh_rmemptydirs -p$(p_hppa64)
+
+ dh_strip -p$(p_hppa64) -X.o -Xlibgcc.a -Xlibgcov.a
+ dh_compress -p$(p_hppa64)
+ dh_fixperms -p$(p_hppa64)
+ dh_shlibdeps -p$(p_hppa64)
+ dh_gencontrol -p$(p_hppa64) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_hppa64)
+ dh_md5sums -p$(p_hppa64)
+ dh_builddeb -p$(p_hppa64)
+
+ touch $@
diff --git a/debian/rules.d/binary-java.mk b/debian/rules.d/binary-java.mk
new file mode 100644
index 0000000..e7736e9
--- /dev/null
+++ b/debian/rules.d/binary-java.mk
@@ -0,0 +1,724 @@
+ifeq ($(with_gcj_base_only),yes)
+ arch_binaries := $(arch_binaries) jbase
+else
+ifeq ($(with_separate_libgcj),yes)
+ ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+ arch_binaries := $(arch_binaries) jbase
+ endif
+else
+ arch_binaries := $(arch_binaries) jbase
+endif
+
+ifeq ($(with_libgcj),yes)
+ ifeq ($(with_java),yes)
+ arch_binaries := $(arch_binaries) java gcjjre
+ indep_binaries := $(indep_binaries) libgcjjar
+ endif
+
+ ifeq ($(with_javadev),yes)
+ arch_binaries := $(arch_binaries) libgcjdev libgcjdbg
+ indep_binaries := $(indep_binaries) libgcjsrc
+ ifeq ($(with_libgcj_doc),yes)
+ indep_binaries := $(indep_binaries) libgcjdoc
+ endif
+ endif
+endif
+
+ifeq ($(with_gcj),yes)
+ arch_binaries := $(arch_binaries) gcj
+endif
+endif
+
+p_jbase = gcj$(pkg_ver)-base
+p_jdk = gcj$(pkg_ver)-jdk
+p_jrehl = gcj$(pkg_ver)-jre-headless
+p_jre = gcj$(pkg_ver)-jre
+p_jar = gcj$(pkg_ver)-jre-lib
+p_jsrc = gcj$(pkg_ver)-source
+p_jlib = libgcj$(PKG_LIBGCJ_EXT)
+p_jdbg = libgcj$(PKG_GCJ_EXT)-dbg
+p_jlibx = libgcj$(PKG_LIBGCJ_EXT)-awt
+p_jgtk = libgcj$(PKG_GCJ_EXT)-awt-gtk
+p_jqt = libgcj$(PKG_GCJ_EXT)-awt-qt
+p_jdev = libgcj$(PKG_GCJ_EXT)-dev
+p_jdoc = libgcj-doc
+
+d_jbase = debian/$(p_jbase)
+d_jdk = debian/$(p_jdk)
+d_jrehl = debian/$(p_jrehl)
+d_jar = debian/$(p_jar)
+d_jsrc = debian/$(p_jsrc)
+d_jlib = debian/$(p_jlib)
+d_jdbg = debian/$(p_jdbg)
+d_jlibx = debian/$(p_jlibx)
+d_jgtk = debian/$(p_jgtk)
+d_jqt = debian/$(p_jqt)
+d_jdev = debian/$(p_jdev)
+d_jdoc = debian/$(p_jdoc)
+d_jre = debian/$(p_jre)
+
+GCJ_BASE_VERSION = $(BASE_VERSION)
+
+gcj_vlibdir = $(PF)/$(libdir)/gcj-$(BASE_VERSION)-$(GCJ_SONAME)
+
+jre_tools = java keytool orbd rmid rmiregistry tnameserv
+jdk_tools = appletviewer jar jarsigner javac javadoc javah native2ascii rmic serialver
+
+dirs_jdk = \
+ $(docdir)/$(p_jbase) \
+ $(PF)/bin \
+ $(PF)/share/man/man1 \
+ $(PF)/share/info \
+ $(gcc_lexec_dir) \
+ $(jvm_dir)/bin
+
+files_jdk = \
+ $(PF)/bin/{gappletviewer,gjdoc,gcj,gc-analyze,gjar,gjarsigner,gcjh,gjavah,gnative2ascii,grmic,gserialver,jv-convert,jcf-dump}$(pkg_ver) \
+ $(PF)/share/man/man1/{gappletviewer,gjdoc,gjar,gjarsigner,gcjh,gjavah,gnative2ascii,gserialver}$(pkg_ver).1 \
+ $(gcc_lexec_dir)/{ecj1,jc1,jvgenmain} \
+ $(gcc_lib_dir)/include/{jni.h,jni_md.h,jvmpi.h} \
+ $(gcc_lib_dir)/include/{jawt.h,jawt_md.h} \
+ $(gcc_lib_dir)/include/gcj/libgcj-config.h \
+ $(PF)/$(libdir)/lib{gij,gcj,gcj-tools}.so \
+ $(PF)/$(libdir)/libgcj.spec \
+ $(jvm_dir)/include \
+ $(jvm_dir)/bin/{appletviewer,jar,jarsigner,javadoc,javah,native2ascii,rmic,serialver} \
+ $(PF)/lib/jvm-exports
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ files_jdk += \
+ $(PF)/share/info/gcj* \
+ $(PF)/share/man/man1/{gcj,gc-analyze,grmic,jv-convert,jcf-dump}$(pkg_ver).1
+endif
+
+dirs_jrehl = \
+ $(docdir)/$(p_jbase) \
+ $(PF)/bin \
+ $(PF)/share/man/man1 \
+ $(jvm_dir)/bin \
+ var/lib/gcj$(pkg_ver)
+
+files_jrehl = \
+ $(PF)/bin/{gij,gcj-dbtool,gorbd,grmid,grmiregistry,gkeytool,gtnameserv}$(pkg_ver) \
+ $(PF)/share/man/man1/{gorbd,grmid,grmiregistry,gkeytool,gtnameserv}$(pkg_ver).1 \
+ $(jvm_dir)/jre \
+ $(jvm_dir)/bin/{java,keytool,orbd,rmid,rmiregistry,tnameserv} \
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ files_jrehl += \
+ $(PF)/share/man/man1/{gij,gcj-dbtool}$(pkg_ver).1
+endif
+
+dirs_jlib = \
+ $(docdir)/$(p_jbase) \
+ $(gcj_vlibdir) \
+ $(PF)/$(libdir) \
+ $(jvm_dir)/jre/lib
+
+files_jlib = \
+ $(PF)/$(libdir)/libgij.so.* \
+ $(PF)/$(libdir)/libgcj-tools.so.* \
+ $(PF)/$(libdir)/libgcj.so.* \
+ $(gcj_vlibdir)/libjvm.so \
+ $(gcj_vlibdir)/libjavamath.so \
+ $(jvm_dir)/jre/lib/security
+
+# $(gcj_vlibdir)/libgconfpeer.so
+
+ifeq ($(with_java_alsa),yes)
+ files_jlib += \
+ $(gcj_vlibdir)/libgjsmalsa.so
+endif
+
+dirs_jar = \
+ $(PF)/share/java \
+ $(jvm_dir)/lib \
+
+files_jar = \
+ $(PF)/share/java/libgcj-$(BASE_VERSION).jar \
+ $(PF)/share/java/libgcj-tools-$(BASE_VERSION).jar \
+ $(jvm_dir)/jre/lib/rt.jar \
+ $(jvm_dir)/lib/tools.jar
+
+dirs_jlibx = \
+ $(PF)/$(libdir) \
+ $(gcj_vlibdir) \
+ $(PF)/share/java
+
+files_jlibx = \
+ $(gcj_vlibdir)/libjawt.so \
+ $(gcj_vlibdir)/libgtkpeer.so
+
+#files_jgtk = \
+# $(gcj_vlibdir)/libgtkpeer.so
+#files_jqt = \
+# $(gcj_vlibdir)/libqtpeer.so
+
+dirs_jdev = \
+ $(PF)/{include,lib} \
+ $(jvm_dir)/include
+
+files_jdev = \
+ $(cxx_inc_dir)/{org,gcj,java,javax} \
+ $(cxx_inc_dir)/gnu/{awt,classpath,gcj,java,javax} \
+ $(PF)/$(libdir)/pkgconfig/libgcj-$(BASE_VERSION).pc \
+ $(gcj_vlibdir)/lib*peer.so
+
+ifeq ($(with_static_java),yes)
+ files_jdev += \
+ $(PF)/$(libdir)/libgij.a \
+ $(PF)/$(libdir)/libgcj.a \
+ $(PF)/$(libdir)/libgcj-tools.a
+endif
+
+ifeq (,$(p_l64gcc))
+ p_l64gcc = lib64gcc$(GCC_SONAME)
+ d_l64gcc = debian/$(p_l64gcc)
+endif
+
+ifeq ($(with_standalone_gcj),yes)
+
+ dirs_gcj += \
+ $(gcc_lib_dir)/include \
+ $(PF)/share/man/man1
+
+# XXX: what about triarch mapping?
+ files_gcj += \
+ $(PF)/bin/{cpp,gcc,gcov}$(pkg_ver) \
+ $(gcc_lexec_dir)/{collect2,lto1,lto-wrapper} \
+ $(gcc_lexec_dir)/liblto_plugin.so{,.0,.0.0.0} \
+ $(gcc_lib_dir)/{libgcc*,libgcov.a,*.o} \
+ $(gcc_lib_dir)/include/std*.h \
+ $(shell for h in \
+ README features.h arm_neon.h \
+ {cpuid,decfloat,float,iso646,limits,mm3dnow,mm_malloc}.h \
+ {ppu_intrinsics,paired,spu2vmx,vec_types,si2vmx}.h \
+ {,a,b,e,i,n,p,s,t,w,x}mmintrin.h mmintrin-common.h \
+ {abm,avx,bmi,fma4,ia32,lwp,popcnt,tbm,x86,xop,}intrin.h \
+ {cross-stdarg,syslimits,unwind,varargs}.h; \
+ do \
+ test -e $(d)/$(gcc_lib_dir)/include/$$h \
+ && echo $(gcc_lib_dir)/include/$$h; \
+ test -e $(d)/$(gcc_lib_dir)/include-fixed/$$h \
+ && echo $(gcc_lib_dir)/include-fixed/$$h; \
+ done) \
+ $(shell for d in \
+ asm bits gnu linux $(TARGET_ALIAS) \
+ $(subst $(DEB_TARGET_GNU_CPU),$(biarch_cpu),$(TARGET_ALIAS)); \
+ do \
+ test -e $(d)/$(gcc_lib_dir)/include/$$d \
+ && echo $(gcc_lib_dir)/include/$$d; \
+ test -e $(d)/$(gcc_lib_dir)/include-fixed/$$d \
+ && echo $(gcc_lib_dir)/include-fixed/$$d; \
+ done) \
+ $(shell test -e $(d)/$(gcc_lib_dir)/SYSCALLS.c.X \
+ && echo $(gcc_lib_dir)/SYSCALLS.c.X)
+
+ ifneq ($(GFDL_INVARIANT_FREE),yes)
+ files_gcj += \
+ $(PF)/share/man/man1/{cpp,gcc,gcov}$(pkg_ver).1
+ endif
+
+ ifeq ($(biarch64),yes)
+ files_gcj += $(gcc_lib_dir)/$(biarch64subdir)/{libgcc*,libgcov.a,*.o}
+ endif
+ ifeq ($(biarch32),yes)
+ files_gcj += $(gcc_lib_dir)/$(biarch32subdir)/{libgcc*,*.o}
+ endif
+ ifeq ($(biarchn32),yes)
+ files_gcj += $(gcc_lib_dir)/$(biarchn32subdir)/{libgcc*,libgcov.a,*.o}
+ endif
+
+ ifeq ($(DEB_HOST_ARCH),ia64)
+ files_gcj += $(gcc_lib_dir)/include/ia64intrin.h
+ endif
+
+ ifeq ($(DEB_HOST_ARCH),m68k)
+ files_gcj += $(gcc_lib_dir)/include/math-68881.h
+ endif
+
+ ifeq ($(DEB_TARGET_ARCH),$(findstring $(DEB_TARGET_ARCH),powerpc ppc64 powerpcspe))
+ files_gcj += $(gcc_lib_dir)/include/{altivec.h,ppc-asm.h,spe.h}
+ endif
+
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-jbase: $(install_dependencies)
+ dh_testdir
+ dh_testroot
+ rm -rf $(d_jbase)
+ dh_installdirs -p$(p_jbase)
+ dh_installdocs -p$(p_jbase)
+ dh_installchangelogs -p$(p_jbase)
+ dh_compress -p$(p_jbase)
+ dh_fixperms -p$(p_jbase)
+ dh_gencontrol -p$(p_jbase) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_jbase)
+ dh_md5sums -p$(p_jbase)
+ dh_builddeb -p$(p_jbase)
+ touch $@
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgcjjar: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ dh_installdirs -p$(p_jar) $(dirs_jar)
+ DH_COMPAT=2 dh_movefiles -p$(p_jar) $(files_jar)
+
+ ln -sf libgcj-$(BASE_VERSION).jar \
+ $(d_jar)/$(PF)/share/java/libgcj-$(GCC_VERSION).jar
+ ln -sf libgcj-tools-$(BASE_VERSION).jar \
+ $(d_jar)/$(PF)/share/java/libgcj-tools-$(GCC_VERSION).jar
+ debian/dh_doclink -p$(p_jar) $(p_jbase)
+ debian/dh_rmemptydirs -p$(p_jar)
+ dh_compress -p$(p_jar)
+ dh_fixperms -p$(p_jar)
+ dh_gencontrol -p$(p_jar) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_jar)
+ dh_md5sums -p$(p_jar)
+ dh_builddeb -p$(p_jar)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(build_javasrc_stamp): $(build_stamp)
+ PATH=$(PWD)/bin:$$PATH \
+ $(MAKE) -C $(buildlibdir)/libjava src.zip
+ touch $@
+
+$(binary_stamp)-libgcjsrc: $(install_stamp) $(build_javasrc_stamp)
+ dh_testdir
+ dh_testroot
+
+ dh_installdirs -p$(p_jsrc) $(PF)/share/java $(jvm_dir)
+ cp -p $(buildlibdir)/libjava/src.zip \
+ $(d_jsrc)/$(PF)/share/java/libgcj-src-$(BASE_VERSION).zip
+ dh_link -p$(p_jsrc) \
+ $(PF)/share/java/libgcj-src-$(BASE_VERSION).zip \
+ $(jvm_dir)/src.zip
+ debian/dh_doclink -p$(p_jsrc) $(p_jbase)
+ debian/dh_rmemptydirs -p$(p_jsrc)
+ dh_compress -p$(p_jsrc)
+ dh_fixperms -p$(p_jsrc)
+ dh_gencontrol -p$(p_jsrc) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_jsrc)
+ dh_md5sums -p$(p_jsrc)
+ dh_builddeb -p$(p_jsrc)
+
+ touch $@
+
+# ----------------------------------------------------------------------
+libgcj_version = $$($(builddir)/gcc/xgcc -B$(builddir)/gcc/ --version \
+ | sed -n '/^xgcc/s/[^)]*) *\(.*\)/\1/p' | sed 's/ \[[^[]*$$//')
+libgcj_title = LibGCJ Classpath
+libgcjhbox_href = http://gcc.gnu.org/java
+libgcjhbox = <span class='logo'><a href='$(libgcjhbox_href)' target='_top'>$(title)</a> ($(libgcj_version))
+
+$(build_javadoc_stamp): $(build_stamp) $(build_javasrc_stamp)
+ mkdir -p $(builddir)/java-src
+ cd $(builddir)/java-src && fastjar -xf $(buildlibdir)/libjava/src.zip
+
+ mkdir -p $(builddir)/html
+ $(buildlibdir)/libjava/gjdoc \
+ -licensetext \
+ -use \
+ -sourcepath "$(builddir)/java-src" \
+ -encoding UTF-8 \
+ -breakiterator \
+ -linksource \
+ -splitindex \
+ -d $(builddir)/html \
+ -doctitle "$(libgcj_title) $(libgcj_version)" \
+ -windowtitle "$(libgcj_title) $(libgcj_version) Documentation" \
+ -header "$(classpathbox)" \
+ -footer "$(classpathbox)" \
+ -subpackages gnu:java:javax:org
+
+ touch $@
+
+$(binary_stamp)-libgcjdoc: $(install_stamp) $(build_javadoc_stamp)
+ dh_testdir
+ dh_testroot
+
+ dh_installdocs -p$(p_jdoc)
+ dh_installchangelogs -p$(p_jdoc)
+ mkdir -p $(d_jdoc)/usr/share/doc/$(p_jbase)
+ cp -al $(builddir)/html $(d_jdoc)/usr/share/doc/$(p_jbase)/api
+ ln -sf api $(d_jdoc)/usr/share/doc/$(p_jbase)/html
+ ln -sf ../$(p_jbase)/api $(d_jdoc)/usr/share/doc/$(p_jdoc)/api
+ ln -sf ../$(p_jbase)/html $(d_jdoc)/usr/share/doc/$(p_jdoc)/html
+ dh_compress -p$(p_jdoc) -X.java -X.c
+ dh_fixperms -p$(p_jdoc)
+ dh_gencontrol -p$(p_jdoc) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_jdoc)
+ dh_md5sums -p$(p_jdoc)
+ dh_builddeb -p$(p_jdoc)
+
+ touch $@
+
+# ----------------------------------------------------------------------
+
+#peer_pkgs =
+#ifneq (,$(findstring gtk, $(java_awt_peers)))
+# peer_pkgs += -p$(p_jgtk)
+#endif
+#ifneq (,$(findstring qt, $(java_awt_peers)))
+# peer_pkgs += -p$(p_jqt)
+#endif
+
+$(binary_stamp)-java: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ dh_installdirs -p$(p_jrehl) $(dirs_jrehl)
+ dh_installdirs -p$(p_jlib) $(dirs_jlib)
+ dh_installdirs -p$(p_jlibx) $(dirs_jlibx)
+
+ DH_COMPAT=2 dh_movefiles -p$(p_jrehl) $(files_jrehl)
+ rm -f $(d_jrehl)/$(jvm_dir)/jre/lib/rt.jar
+ DH_COMPAT=2 dh_movefiles -p$(p_jlib) $(files_jlib)
+ DH_COMPAT=2 dh_movefiles -p$(p_jlibx) $(files_jlibx)
+#ifneq (,$(findstring gtk, $(java_awt_peers)))
+# DH_COMPAT=2 dh_movefiles -p$(p_jgtk) $(files_jgtk)
+#endif
+#ifneq (,$(findstring qt, $(java_awt_peers)))
+# DH_COMPAT=2 dh_movefiles -p$(p_jqt) $(files_jqt)
+#endif
+
+# FIXME
+# $(jvm_dir) $(PF)/lib/jvm/$(jvm_name_long) \
+
+ dh_link -p$(p_jrehl) \
+ $(jvm_dir) $(PF)/lib/jvm/java-gcj$(pkg_ver) \
+ $(PF)/bin/gij$(pkg_ver) $(jvm_dir)/bin/gij \
+ $(PF)/bin/gij$(pkg_ver) $(jvm_dir)/jre/bin/gij \
+ $(PF)/bin/gcj-dbtool$(pkg_ver) $(jvm_dir)/bin/gcj-dbtool \
+ $(PF)/bin/gcj-dbtool$(pkg_ver) $(jvm_dir)/jre/bin/gcj-dbtool \
+ $(PF)/share/man/man1/gkeytool$(pkg_ver).1 $(jvm_dir)/man/man1/keytool.1 \
+ $(PF)/share/man/man1/gorbd$(pkg_ver).1 $(jvm_dir)/man/man1/orbd.1 \
+ $(PF)/share/man/man1/grmid$(pkg_ver).1 $(jvm_dir)/man/man1/rmid.1 \
+ $(PF)/share/man/man1/grmiregistry$(pkg_ver).1 $(jvm_dir)/man/man1/rmiregistry.1 \
+ $(PF)/share/man/man1/gtnameserv$(pkg_ver).1 $(jvm_dir)/man/man1/tnameserv.1 \
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ dh_link -p$(p_jrehl) \
+ $(PF)/share/man/man1/gij$(pkg_ver).1 $(jvm_dir)/man/man1/java.1 \
+ $(PF)/share/man/man1/grmic$(pkg_ver).1 $(jvm_dir)/man/man1/rmiregistry.1
+endif
+
+ifneq ($(DEB_TARGET_ARCH_CPU),$(java_cpu))
+ ln -sf $(java_cpu) $(d_jlib)/$(jvm_dir)/jre/lib/$(DEB_TARGET_ARCH_CPU)
+endif
+
+ dh_link -p$(p_jlib) \
+ etc/java/cacerts-gcj $(jvm_dir)/jre/lib/cacerts \
+ $(foreach i, jvm javamath, \
+ $(gcj_vlibdir)/lib$(i).so $(jvm_dir)/lib/lib$(i).so)
+
+ dh_link -p$(p_jlibx) \
+ $(foreach i, jawt, $(gcj_vlibdir)/lib$(i).so $(jvm_dir)/lib/lib$(i).so)
+
+ifeq ($(DEB_HOST_ARCH),hppa)
+ mv $(d_jrehl)/$(PF)/bin/gij$(pkg_ver) \
+ $(d_jrehl)/$(PF)/bin/gij$(pkg_ver).bin
+ install -m755 debian/gij-hppa $(d_jrehl)/$(PF)/bin/gij$(pkg_ver)
+endif
+
+ ln -s ../libgcj.so.$(GCJ_SONAME) \
+ $(d_jlib)/$(gcj_vlibdir)/libgcj_bc.so.1
+
+ : # provide .jinfo file
+ ( \
+ echo 'name=$(jvm_name_short)'; \
+ echo 'alias=java-gcj$(pkg_ver)'; \
+ echo 'priority=$(priority)'; \
+ echo 'section=main'; \
+ echo ''; \
+ for i in $(jre_tools); do \
+ echo "jre $$i /$(jvm_dir)/jre/bin/$$i"; \
+ done; \
+ for i in $(jdk_tools); do \
+ echo "jdk $$i /$(jvm_dir)/bin/$$i"; \
+ done; \
+ ) > $(d_jrehl)/$(jvm_dir)/.java-gcj$(pkg_ver).jinfo
+
+ cp -p $(srcdir)/libjava/{NEWS,README,THANKS} \
+ $(d_jrehl)/usr/share/doc/$(p_jbase)/
+
+ debian/dh_doclink -p$(p_jrehl) $(p_jbase)
+ debian/dh_doclink -p$(p_jlib) $(p_jbase)
+ debian/dh_doclink -p$(p_jlibx) $(p_jbase)
+
+#ifneq (,$(findstring gtk, $(java_awt_peers)))
+# debian/dh_doclink -p$(p_jgtk) $(p_jbase)
+#endif
+#ifneq (,$(findstring qt, $(java_awt_peers)))
+# debian/dh_doclink -p$(p_jqt) $(p_jbase)
+#endif
+
+ifeq ($(with_separate_libgcj),yes)
+ ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+ ifeq ($(with_check),yes)
+ cp -p test-summary $(d_jrehl)/usr/share/doc/$(p_jbase)/test-summary
+ endif
+ endif
+endif
+ debian/dh_rmemptydirs -p$(p_jrehl)
+ debian/dh_rmemptydirs -p$(p_jlib)
+ debian/dh_rmemptydirs -p$(p_jlibx)
+
+ mkdir -p $(d_jrehl)/var/lib/gcj$(pkg_ver)
+
+ dh_makeshlibs -p$(p_jlib) -V '$(p_jlib) (>= $(DEB_GCJ_SOVERSION))'
+ echo "libgcj_bc 1 libgcj-bc (>= 4.2.2-1)" >> debian/$(p_jlib)/DEBIAN/shlibs
+ cat debian/$(p_jlib)/DEBIAN/shlibs >> debian/shlibs.local
+
+ dh_makeshlibs -p$(p_jlibx) -V '$(p_jlibx) (>= $(DEB_GCJ_SOVERSION))'
+
+#ifneq (,$(findstring gtk, $(java_awt_peers)))
+# dh_makeshlibs -p$(p_jgtk) -V '$(p_jgtk) (>= $(DEB_GCJ_SOVERSION))'
+#endif
+#ifneq (,$(findstring qt, $(java_awt_peers)))
+# dh_makeshlibs -p$(p_jqt) -V '$(p_jqt) (>= $(DEB_GCJ_SOVERSION))'
+#endif
+
+ dh_strip --dbg-package=$(p_jdbg) \
+ -p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+ rm -f $(d_jdbg)/$(gcc_lib_dir)/libgcj_bc.so
+
+ dh_compress -p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+ dh_fixperms -p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+# the libstdc++ binary packages aren't built yet ...
+ echo 'libstdc++ $(CXX_SONAME) libstdc++$(CXX_SONAME) (>= $(DEB_STDCXX_SOVERSION))' \
+ >> debian/shlibs.local
+ -[ -d $(d_l64gcc) ] && mv $(d_l64gcc) $(d_l64gcc).saved
+ifeq ($(with_separate_libgcj)-$(with_standalone_gcj),yes-no)
+ dh_shlibdeps \
+ -L$(p_jlib) \
+ -l$(d_lib)/$(PF)/$(libdir):$(d_jlib)/$(PF)/$(libdir) \
+ -p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+else
+ 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_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+endif
+ -[ -d $(d_l64gcc).saved ] && mv $(d_l64gcc).saved $(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
+ rm -f debian/shlibs.local
+
+ dh_gencontrol \
+ -p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs) \
+ -- -v$(DEB_VERSION) $(common_substvars)
+
+ mkdir -p $(d_jlib)/usr/share/lintian/overrides
+ cp -p debian/$(p_jlib).overrides \
+ $(d_jlib)/usr/share/lintian/overrides/$(p_jlib)
+ mkdir -p $(d_jlibx)/usr/share/lintian/overrides
+ cp -p debian/$(p_jlibx).overrides \
+ $(d_jlibx)/usr/share/lintian/overrides/$(p_jlibx)
+ mkdir -p $(d_jrehl)/usr/share/lintian/overrides
+ cp -p debian/$(p_jrehl).overrides \
+ $(d_jrehl)/usr/share/lintian/overrides/$(p_jrehl)
+
+ dh_installdeb -p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+ dh_md5sums -p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+ dh_builddeb -p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcj: $(build_html_stamp) $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_jdk)
+ dh_installdirs -p$(p_jdk) $(dirs_jdk)
+
+# mkdir -p $(d_jdk)/usr/share/lintian/overrides
+# cp -p debian/$(p_jdk).overrides \
+# $(d_jdk)/usr/share/lintian/overrides/$(p_jdk)
+ cp -p $(srcdir)/gcc/java/ChangeLog \
+ $(d_jdk)/usr/share/doc/$(p_jbase)/changelog.gcj
+ cp -p $(srcdir)/libjava/ChangeLog \
+ $(d_jdk)/usr/share/doc/$(p_jbase)/changelog.libjava
+
+ifeq ($(with_standalone_gcj),yes)
+ rm -f $(d)/$(PF)/$(libdir)/libgcc_s.so
+ ln -sf /$(libdir)/libgcc_s.so.$(GCC_SONAME) $(d)/$(gcc_lib_dir)/libgcc_s.so
+endif
+ DH_COMPAT=2 dh_movefiles -p$(p_jdk) $(files_jdk)
+
+ for i in libgij libgcj libgcj-tools; do \
+ dh_link -p$(p_jdk) \
+ /$(PF)/$(libdir)/$$i.so.$(GCJ_SONAME) /$(gcc_lib_dir)/$$i.so \
+ /$(PF)/$(libdir)/$$i.so.$(GCJ_SONAME) /$(jvm_dir)/lib/$$i.so; \
+ rm -f $(d_jdk)/$(PF)/$(libdir)/$$i.{la,so}; \
+ done
+
+ ln -sf gcj$(pkg_ver) \
+ $(d_jdk)/$(PF)/bin/$(TARGET_ALIAS)-gcj$(pkg_ver)
+
+ install -m755 debian/jdb.sh $(d_jdk)/$(jvm_dir)/bin/jdb
+
+ mv $(d_jdk)/$(PF)/$(libdir)/libgcj.spec $(d_jdk)/$(gcc_lib_dir)/
+
+ install -m 755 $(d)/$(PF)/$(libdir)/libgcj_bc.so.1 \
+ $(d_jdk)/$(gcc_lib_dir)/libgcj_bc.so
+ $(builddir)/gcc/xgcc -B$(builddir)/gcc/ -shared -fpic -xc /dev/null \
+ -o build/libgcj.so -Wl,-soname,libgcj.so.$(GCJ_SONAME) -nostdlib
+ $(builddir)/gcc/xgcc -B$(builddir)/gcc/ -shared -fpic \
+ $(srcdir)/libjava/libgcj_bc.c \
+ -o $(d_jdk)/$(gcc_lib_dir)/libgcj_bc.so \
+ -Wl,-soname,libgcj_bc.so.1 $(builddir)/libgcj.so -shared-libgcc
+
+ dh_link -p$(p_jdk) \
+ $(gcc_lib_dir)/include/gcj $(jvm_dir)/include/gcj \
+ usr/bin/ecj $(jvm_dir)/bin/javac \
+ usr/bin/fastjar $(jvm_dir)/bin/jar \
+ $(PF)/share/man/man1/ecj.1 $(jvm_dir)/man/man1/javac.1 \
+ $(PF)/share/man/man1/fastjar.1 $(jvm_dir)/man/man1/jar.1
+
+ dh_link -p$(p_jdk) \
+ $(PF)/bin/gcj$(pkg_ver) $(jvm_dir)/bin/gcj \
+ $(PF)/share/man/man1/gjarsigner$(pkg_ver).1 $(jvm_dir)/man/man1/jarsigner.1 \
+ $(PF)/share/man/man1/gjdoc$(pkg_ver).1 $(jvm_dir)/man/man1/javadoc.1 \
+ $(PF)/share/man/man1/gjavah$(pkg_ver).1 $(jvm_dir)/man/man1/javah.1 \
+ $(PF)/share/man/man1/gserialver$(pkg_ver).1 $(jvm_dir)/man/man1/serialver.1 \
+ $(PF)/share/man/man1/gappletviewer$(pkg_ver).1 $(jvm_dir)/man/man1/appletviewer.1
+
+ifneq (,$(filter $(DEB_HOST_ARCH), arm armel))
+ ln -sf ../../ecj1 $(d_jdk)/$(gcc_lexec_dir)/ecj1
+endif
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ ln -sf gcj$(pkg_ver).1 \
+ $(d_jdk)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gcj$(pkg_ver).1
+ cp -p html/gcj.html $(d_jdk)/$(docdir)/$(p_jbase)/
+endif
+
+ debian/dh_doclink -p$(p_jdk) $(p_jbase)
+
+ cp -p debian/FAQ.gcj $(d_jdk)/$(docdir)/$(p_jbase)/
+
+ cp -p debian/gcj-wrapper$(pkg_ver) $(d_jdk)/$(PF)/bin/
+ chmod 755 $(d_jdk)/$(PF)/bin/gcj-wrapper$(pkg_ver)
+ cp -p debian/gcj-wrapper$(pkg_ver).1 $(d_jdk)/$(PF)/share/man/man1/
+
+ debian/dh_rmemptydirs -p$(p_jdk)
+
+ dh_strip -p$(p_jdk)
+ dh_compress -p$(p_jdk) -X.java
+ dh_fixperms -p$(p_jdk)
+ dh_shlibdeps -p$(p_jdk) -l$(d_lib)/$(PF)/$(libdir):$(d_jlib)/$(PF)/lib -Xecj1
+ dh_gencontrol -p$(p_jdk) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_jdk)
+ dh_md5sums -p$(p_jdk)
+ dh_builddeb -p$(p_jdk)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgcjdev: $(build_html_stamp) $(install_stamp) $(binary_stamp)-java
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ dh_installdirs -p$(p_jdev) $(dirs_jdev)
+
+ DH_COMPAT=2 dh_movefiles -p$(p_jdev) $(files_jdev)
+
+ifeq ($(with_static_java),yes)
+ for i in libgij libgcj libgcj-tools; do \
+ mv $(d_jdev)/$(PF)/$(libdir)/$$i.a $(d_jdev)/$(gcc_lib_dir)/; \
+ done
+endif
+
+ ln -sf libgcj-$(BASE_VERSION).pc \
+ $(d_jdev)/$(PF)/$(libdir)/pkgconfig/libgcj$(PKG_GCJ_EXT).pc
+ sed -i -e 's,-[IL][^ ]* *,,' \
+ $(d_jdev)/$(PF)/$(libdir)/pkgconfig/libgcj-$(BASE_VERSION).pc
+
+ debian/dh_doclink -p$(p_jdev) $(p_jbase)
+
+ debian/dh_rmemptydirs -p$(p_jdev)
+
+# mkdir -p $(d_jdev)/usr/share/lintian/overrides
+# cp -p debian/libgcj$(PKG_GCJ_EXT)-dev.overrides \
+# $(d_jdev)/usr/share/lintian/overrides/$(p_jdev)
+
+ DH_COMPAT=5 dh_strip -p$(p_jdev) --dbg-package=$(p_jdbg)
+ dh_compress -p$(p_jdev) -X.java
+ dh_fixperms -p$(p_jdev)
+ifeq ($(with_separate_libgcj)-$(with_standalone_gcj),yes-no)
+ dh_shlibdeps \
+ -l$(d_lib)/$(PF)/$(libdir):$(d_jlib)/$(PF)/$(libdir) \
+ -p$(p_jdev)
+else
+ dh_shlibdeps \
+ -L$(p_lgcc) \
+ -l:$(d)/$(PF)/$(libdir):$(d_lib)/$(PF)/$(libdir):$(d_jlib)/$(PF)/$(libdir):$(d_lgcc)/lib \
+ -p$(p_jdev)
+endif
+ dh_gencontrol -p$(p_jdev) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_jdev)
+ dh_md5sums -p$(p_jdev)
+ dh_builddeb -p$(p_jdev)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgcjdbg: $(install_stamp) $(binary_stamp)-java $(binary_stamp)-libgcjdev $(binary_stamp)-gcjjre
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ debian/dh_doclink -p$(p_jdbg) $(p_jbase)
+
+ for i in libgij libgcj libgcj-tools; do \
+ if [ -f $(d_jdbg)/usr/lib/debug/usr/lib/$$i.so.$(GCJ_SONAME).0.0 ]; then \
+ ln -sf $$i.so.$(GCJ_SONAME).0.0 \
+ $(d_jdbg)/usr/lib/debug/usr/lib/$$i.so.$(GCJ_SONAME); \
+ fi; \
+ done
+# ln -sf libgconfpeer.so.0.0.0 \
+# $(d_jdbg)/usr/lib/debug/$(gcj_vlibdir)/libgconfpeer.so.0
+
+ dh_compress -p$(p_jdbg)
+ dh_fixperms -p$(p_jdbg)
+ dh_gencontrol -p$(p_jdbg) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_jdbg)
+ dh_md5sums -p$(p_jdbg)
+ dh_builddeb -p$(p_jdbg)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcjjre: $(install_stamp) $(binary_stamp)-java
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+# dh_installdirs -p$(p_jre) \
+# $(PF)/bin \
+# $(PF)/share/man/man1 \
+# $(jvm_dir)/bin
+
+ debian/dh_doclink -p$(p_jre) $(p_jbase)
+ DH_COMPAT=5 dh_strip -p$(p_jre) --dbg-package=$(p_jdbg)
+ dh_compress -p$(p_jre)
+ dh_fixperms -p$(p_jre)
+ dh_gencontrol -p$(p_jre) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_jre)
+ dh_md5sums -p$(p_jre)
+ dh_builddeb -p$(p_jre)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
diff --git a/debian/rules.d/binary-libgcc.mk b/debian/rules.d/binary-libgcc.mk
new file mode 100644
index 0000000..e9c255f
--- /dev/null
+++ b/debian/rules.d/binary-libgcc.mk
@@ -0,0 +1,134 @@
+ifeq ($(with_libgcc),yes)
+ $(lib_binaries) += libgcc
+
+ ifeq ($(with_lib64gcc),yes)
+ $(lib_binaries) += lib64gcc
+ endif
+ ifeq ($(biarch32),yes)
+ $(lib_binaries) += lib32gcc
+ endif
+ ifeq ($(biarchn32),yes)
+ $(lib_binaries) += libn32gcc
+ endif
+ ifeq ($(biarchhf),yes)
+ $(lib_binaries) += libhfgcc
+ endif
+ ifeq ($(biarchsf),yes)
+ $(lib_binaries) += libsfgcc
+ endif
+endif
+
+p_lgcc = libgcc$(GCC_SONAME)$(cross_lib_arch)
+p_lgccdbg = libgcc$(GCC_SONAME)-dbg$(cross_lib_arch)
+d_lgcc = debian/$(p_lgcc)
+d_lgccdbg = debian/$(p_lgccdbg)
+
+p_l32gcc = lib32gcc$(GCC_SONAME)$(cross_lib_arch)
+p_l32gccdbg = lib32gcc$(GCC_SONAME)-dbg$(cross_lib_arch)
+d_l32gcc = debian/$(p_l32gcc)
+d_l32gccdbg = debian/$(p_l32gccdbg)
+
+p_l64gcc = lib64gcc$(GCC_SONAME)$(cross_lib_arch)
+p_l64gccdbg = lib64gcc$(GCC_SONAME)-dbg$(cross_lib_arch)
+d_l64gcc = debian/$(p_l64gcc)
+d_l64gccdbg = debian/$(p_l64gccdbg)
+
+p_ln32gcc = libn32gcc$(GCC_SONAME)$(cross_lib_arch)
+p_ln32gccdbg = libn32gcc$(GCC_SONAME)-dbg$(cross_lib_arch)
+d_ln32gcc = debian/$(p_ln32gcc)
+d_ln32gccdbg = debian/$(p_ln32gccdbg)
+
+p_lhfgcc = libhfgcc$(GCC_SONAME)$(cross_lib_arch)
+p_lhfgccdbg = libhfgcc$(GCC_SONAME)-dbg$(cross_lib_arch)
+d_lhfgcc = debian/$(p_lhfgcc)
+d_lhfgccdbg = debian/$(p_lhfgccdbg)
+
+p_lsfgcc = libsfgcc$(GCC_SONAME)$(cross_lib_arch)
+p_lsfgccdbg = libsfgcc$(GCC_SONAME)-dbg$(cross_lib_arch)
+d_lsfgcc = debian/$(p_lsfgcc)
+d_lsfgccdbg = debian/$(p_lsfgccdbg)
+
+define __do_libgcc
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_l) $(d_d)
+
+ dh_installdirs -p$(p_l) \
+ $(docdir)/$(p_l) \
+ $(libgcc_dir$(2))
+
+ $(if $(filter yes,$(with_shared_libgcc)),
+ mv $(d)/$(usr_lib$(2))/libgcc_s.so.$(GCC_SONAME) \
+ $(d_l)/$(libgcc_dir$(2))/.
+ )
+
+ debian/dh_doclink -p$(p_l) $(if $(3),$(3),$(p_base))
+ debian/dh_doclink -p$(p_d) $(if $(3),$(3),$(p_base))
+ debian/dh_rmemptydirs -p$(p_l)
+ debian/dh_rmemptydirs -p$(p_d)
+ dh_strip -p$(p_l) --dbg-package=$(p_d)
+
+ # see Debian #533843 for the __aeabi symbol handling; this construct is
+ # just to include the symbols for dpkg versions older than 1.15.3 which
+ # didn't allow bypassing the symbol blacklist
+ $(if $(filter yes,$(with_shared_libgcc)),
+ dh_makeshlibs -p$(p_l) -p$(p_d) \
+ -- -v$(DEB_LIBGCC_VERSION)
+ $(call cross_mangle_shlibs,$(p_l))
+ $(if $(filter arm-linux-gnueabi%,$(DEB_TARGET_GNU_TYPE)),
+ if head -1 $(d_l)/DEBIAN/symbols | grep -q '^lib'; then \
+ grep -q '^ __aeabi' $(d_l)/DEBIAN/symbols \
+ || cat debian/libgcc1.symbols.aeabi \
+ >> $(d_l)/DEBIAN/symbols; \
+ fi
+ )
+ )
+
+ DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_l)
+ $(call cross_mangle_substvars,$(p_l))
+
+ dh_compress -p$(p_l) -p$(p_d)
+ dh_fixperms -p$(p_l) -p$(p_d)
+ dh_gencontrol -p$(p_l) -p$(p_d) \
+ -- -v$(DEB_LIBGCC_VERSION) $(common_substvars)
+ $(call cross_mangle_control,$(p_l))
+
+ $(if $(2),, # only for native
+ mkdir -p $(d_l)/usr/share/lintian/overrides
+ echo '$(p_l): package-name-doesnt-match-sonames' \
+ > $(d_l)/usr/share/lintian/overrides/$(p_l)
+ )
+
+ dh_installdeb -p$(p_l) -p$(p_d)
+ dh_md5sums -p$(p_l) -p$(p_d)
+ dh_builddeb -p$(p_l) -p$(p_d)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+do_libgcc = $(call __do_libgcc,lib$(1)gcc$(GCC_SONAME),$(1),$(2))
+# ----------------------------------------------------------------------
+
+$(binary_stamp)-libgcc: $(install_dependencies)
+ifeq ($(with_standalone_gcj),yes)
+ $(call do_libgcc,,$(p_jbase))
+else
+ $(call do_libgcc,,)
+endif
+
+$(binary_stamp)-lib64gcc: $(install_dependencies)
+ $(call do_libgcc,64,)
+
+$(binary_stamp)-lib32gcc: $(install_dependencies)
+ $(call do_libgcc,32,)
+
+$(binary_stamp)-libn32gcc: $(install_dependencies)
+ $(call do_libgcc,n32,)
+
+$(binary_stamp)-libhfgcc: $(install_dependencies)
+ $(call do_libgcc,hf)
+
+$(binary_stamp)-libsfgcc: $(install_dependencies)
+ $(call do_libgcc,sf)
diff --git a/debian/rules.d/binary-libgccmath.mk b/debian/rules.d/binary-libgccmath.mk
new file mode 100644
index 0000000..38aa697
--- /dev/null
+++ b/debian/rules.d/binary-libgccmath.mk
@@ -0,0 +1,141 @@
+ifeq ($(with_libgmath),yes)
+ arch_binaries := $(arch_binaries) libgmath
+endif
+#ifeq ($(with_libgmathdev),yes)
+# arch_binaries := $(arch_binaries) libgmathdev
+#endif
+ifeq ($(with_lib64gmath),yes)
+ arch_binaries := $(arch_binaries) lib64gmath
+endif
+ifeq ($(with_lib32gmath),yes)
+ arch_binaries := $(arch_binaries) lib32gmath
+endif
+
+p_gmath = libgccmath$(GCCMATH_SONAME)
+p_l32gmath = lib32gccmath$(GCCMATH_SONAME)
+p_l64gmath = lib64gccmath$(GCCMATH_SONAME)
+p_gmathd = libgccmath$(GCCMATH_SONAME)-dev
+
+d_gmath = debian/$(p_gmath)
+d_l32gmath = debian/$(p_l32gmath)
+d_l64gmath = debian/$(p_l64gmath)
+d_gmathd = debian/$(p_gmathd)
+
+dirs_gmath = \
+ $(docdir) \
+ $(PF)/$(libdir)
+files_gmath = \
+ $(PF)/$(libdir)/libgcc-math.so.*
+
+dirs_gmathd = \
+ $(docdir)/$(p_base)
+ifeq ($(with_libgmath),yes)
+files_gmathd = \
+ $(PF)/$(libdir)/libgcc-math.{a,so}
+endif
+
+ifeq ($(with_lib32gmath),yes)
+ dirs_gmathd += $(lib32)
+ files_gmathd += $(lib32)/libgcc-math.{a,so}
+endif
+ifeq ($(with_lib64gmath),yes)
+ dirs_gmathd += $(PF)/lib64
+ files_gmathd += $(PF)/lib64/libgcc-math.{a,so}
+endif
+
+$(binary_stamp)-libgmath: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+ rm -rf $(d_gmath)
+ dh_installdirs -p$(p_gmath) $(dirs_gmath)
+ DH_COMPAT=2 dh_movefiles -p$(p_gmath) $(files_gmath)
+ debian/dh_doclink -p$(p_gmath) $(p_base)
+ debian/dh_rmemptydirs -p$(p_gmath)
+ dh_strip -p$(p_gmath)
+ dh_compress -p$(p_gmath)
+ dh_fixperms -p$(p_gmath)
+ dh_makeshlibs -p$(p_gmath) -V '$(p_gmath) (>= $(DEB_GCCMATH_SOVERSION))'
+ dh_shlibdeps -p$(p_gmath)
+ dh_gencontrol -p$(p_gmath) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_gmath)
+ dh_md5sums -p$(p_gmath)
+ dh_builddeb -p$(p_gmath)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgmathdev: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_gmathd)
+ dh_installdirs -p$(p_gmathd) $(dirs_gmathd)
+ DH_COMPAT=2 dh_movefiles -p$(p_gmathd) $(files_gmathd)
+ debian/dh_doclink -p$(p_gmathd) $(p_base)
+ cp -p $(srcdir)/libgcc-math/ChangeLog \
+ $(d_gmathd)/$(docdir)/$(p_base)/changelog.libgcc-math
+ debian/dh_rmemptydirs -p$(p_gmathd)
+ dh_strip -p$(p_gmathd)
+ dh_compress -p$(p_gmathd)
+ dh_fixperms -p$(p_gmathd)
+ dh_shlibdeps -p$(p_gmathd)
+ dh_gencontrol -p$(p_gmathd) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_gmathd)
+ dh_md5sums -p$(p_gmathd)
+ dh_builddeb -p$(p_gmathd)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib64gmath: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_l64gmath)
+ dh_installdirs -p$(p_l64gmath) \
+ $(PF)/lib64
+ DH_COMPAT=2 dh_movefiles -p$(p_l64gmath) \
+ $(PF)/lib64/libgcc-math.so.*
+
+ debian/dh_doclink -p$(p_l64gmath) $(p_base)
+
+ dh_strip -p$(p_l64gmath)
+ dh_compress -p$(p_l64gmath)
+ dh_fixperms -p$(p_l64gmath)
+ dh_makeshlibs -p$(p_l64gmath) -V '$(p_l64gmath) (>= $(DEB_GCCMATH_SOVERSION))'
+# dh_shlibdeps -p$(p_l64gmath)
+ dh_gencontrol -p$(p_l64gmath) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_l64gmath)
+ dh_md5sums -p$(p_l64gmath)
+ dh_builddeb -p$(p_l64gmath)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib32gmath: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_l32gmath)
+ dh_installdirs -p$(p_l32gmath) \
+ $(lib32)
+ DH_COMPAT=2 dh_movefiles -p$(p_l32gmath) \
+ $(lib32)/libgcc-math.so.*
+
+ debian/dh_doclink -p$(p_l32gmath) $(p_base)
+
+ dh_strip -p$(p_l32gmath)
+ dh_compress -p$(p_l32gmath)
+ dh_fixperms -p$(p_l32gmath)
+ dh_makeshlibs -p$(p_l32gmath) -V '$(p_l32gmath) (>= $(DEB_GCCMATH_SOVERSION))'
+ dh_shlibdeps -p$(p_l32gmath)
+ dh_gencontrol -p$(p_l32gmath) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_l32gmath)
+ dh_md5sums -p$(p_l32gmath)
+ dh_builddeb -p$(p_l32gmath)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
diff --git a/debian/rules.d/binary-libgomp.mk b/debian/rules.d/binary-libgomp.mk
new file mode 100644
index 0000000..0196030
--- /dev/null
+++ b/debian/rules.d/binary-libgomp.mk
@@ -0,0 +1,67 @@
+$(lib_binaries) += libgomp
+ifeq ($(with_lib64gomp),yes)
+ $(lib_binaries) += lib64gomp
+endif
+ifeq ($(with_lib32gomp),yes)
+ $(lib_binaries) += lib32gomp
+endif
+ifeq ($(with_libn32gomp),yes)
+ $(lib_binaries) += libn32gomp
+endif
+ifeq ($(with_libhfgomp),yes)
+ $(lib_binaries) += libhfgomp
+endif
+ifeq ($(with_libsfgomp),yes)
+ $(lib_binaries) += libsfgomp
+endif
+
+define __do_gomp
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_l) $(d_d)
+ dh_installdirs -p$(p_l) $(usr_lib$(2))
+ DH_COMPAT=2 dh_movefiles -p$(p_l) $(usr_lib$(2))/libgomp.so.*
+
+ debian/dh_doclink -p$(p_l) $(p_base)
+ debian/dh_doclink -p$(p_d) $(p_base)
+
+ dh_strip -p$(p_l) --dbg-package=$(p_d)
+ dh_compress -p$(p_l) -p$(p_d)
+ dh_fixperms -p$(p_l) -p$(p_d)
+ dh_makeshlibs -p$(p_l)
+ $(call cross_mangle_shlibs,$(p_l))
+ DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_l)
+ $(call cross_mangle_substvars,$(p_l))
+ dh_gencontrol -p$(p_l) -p$(p_d) \
+ -- -v$(DEB_VERSION) $(common_substvars)
+ $(call cross_mangle_control,$(p_l))
+ dh_installdeb -p$(p_l) -p$(p_d)
+ dh_md5sums -p$(p_l) -p$(p_d)
+ dh_builddeb -p$(p_l) -p$(p_d)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+# ----------------------------------------------------------------------
+
+do_gomp = $(call __do_gomp,lib$(1)gomp$(GOMP_SONAME),$(1))
+
+$(binary_stamp)-libgomp: $(install_stamp)
+ $(call do_gomp,)
+
+$(binary_stamp)-lib64gomp: $(install_stamp)
+ $(call do_gomp,64)
+
+$(binary_stamp)-lib32gomp: $(install_stamp)
+ $(call do_gomp,32)
+
+$(binary_stamp)-libn32gomp: $(install_stamp)
+ $(call do_gomp,n32)
+
+$(binary_stamp)-libhfgomp: $(install_dependencies)
+ $(call do_gomp,hf)
+
+$(binary_stamp)-libsfgomp: $(install_dependencies)
+ $(call do_gomp,sf)
diff --git a/debian/rules.d/binary-libmudflap.mk b/debian/rules.d/binary-libmudflap.mk
new file mode 100644
index 0000000..4867181
--- /dev/null
+++ b/debian/rules.d/binary-libmudflap.mk
@@ -0,0 +1,135 @@
+ifeq ($(with_dev),yes)
+ $(lib_binaries) += libmudflapdev
+endif
+
+ifeq ($(with_libmudflap),yes)
+ $(lib_binaries) += libmudflap
+ ifeq ($(with_lib64mudflap),yes)
+ $(lib_binaries) += lib64mudflap
+ endif
+ ifeq ($(with_lib32mudflap),yes)
+ $(lib_binaries) += lib32mudflap
+ endif
+ ifeq ($(with_libn32mudflap),yes)
+ $(lib_binaries) += libn32mudflap
+ endif
+ ifeq ($(with_libhfmudflap),yes)
+ $(lib_binaries) += libhfmudflap
+ endif
+ ifeq ($(with_libsfmudflap),yes)
+ $(lib_binaries) += libsfmudflap
+ endif
+endif
+
+p_mfd = libmudflap$(MUDFLAP_SONAME)$(pkg_ver)-dev$(cross_lib_arch)
+d_mfd = debian/$(p_mfd)
+
+define __do_mudflap
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_l) $(d_d)
+ dh_installdirs -p$(p_l) $(usr_lib$(2))
+ DH_COMPAT=2 dh_movefiles -p$(p_l) $(usr_lib$(2))/libmudflap*.so.*
+
+ debian/dh_doclink -p$(p_l) $(p_base)
+ debian/dh_doclink -p$(p_d) $(p_base)
+
+ debian/dh_rmemptydirs -p$(p_l)
+
+ dh_strip -p$(p_l) --dbg-package=$(p_d)
+ dh_compress -p$(p_l) -p$(p_d)
+ dh_fixperms -p$(p_l) -p$(p_d)
+ dh_makeshlibs -p$(p_l) -V '$(p_l) (>= $(DEB_SOVERSION))'
+ $(call cross_mangle_shlibs,$(p_l))
+ DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_l)
+ $(call cross_mangle_substvars,$(p_l))
+ dh_gencontrol -p$(p_l) -p$(p_d) \
+ -- -v$(DEB_VERSION) $(common_substvars)
+ $(call cross_mangle_control,$(p_l))
+ dh_installdeb -p$(p_l) -p$(p_d)
+ dh_md5sums -p$(p_l) -p$(p_d)
+ dh_builddeb -p$(p_l) -p$(p_d)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+do_mudflap = $(call __do_mudflap,lib$(1)mudflap$(MUDFLAP_SONAME),$(1))
+
+define __do_mudflap_dev
+ dh_installdirs -p$(p_mfd) $(1)
+ DH_COMPAT=2 dh_movefiles -p$(p_mfd) $(1)/libmudflap*.a
+ rm -f $(d)/$(2)/libmudflap*.so
+ mv $(d)/$(2)/libmudflap*.a $(d_mfd)/$(1)/
+ dh_link -p$(p_mfd) \
+ /$(2)/libmudflap.so.$(MUDFLAP_SONAME) /$(1)/libmudflap.so \
+ /$(2)/libmudflapth.so.$(MUDFLAP_SONAME) /$(1)/libmudflapth.so
+endef
+
+do_mudflap_dev = $(call __do_mudflap_dev,$(gcc_lib_dir$(1)),$(usr_lib$(1)))
+
+# ----------------------------------------------------------------------
+
+$(binary_stamp)-libmudflap: $(install_stamp)
+ $(call do_mudflap,)
+
+$(binary_stamp)-lib64mudflap: $(install_stamp)
+ $(call do_mudflap,64)
+
+$(binary_stamp)-lib32mudflap: $(install_stamp)
+ $(call do_mudflap,32)
+
+$(binary_stamp)-libn32mudflap: $(install_stamp)
+ $(call do_mudflap,n32)
+
+$(binary_stamp)-libhfmudflap: $(install_stamp)
+ $(call do_mudflap,hf)
+
+$(binary_stamp)-libsfmudflap: $(install_stamp)
+ $(call do_mudflap,sf)
+
+$(binary_stamp)-libmudflapdev: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_mfd)
+ dh_installdirs -p$(p_mfd) $(docdir)/$(p_base)/mudflap
+
+ DH_COMPAT=2 dh_movefiles -p$(p_mfd) $(gcc_lib_dir)/include/mf-runtime.h
+
+ $(call do_mudflap_dev,)
+ifeq ($(with_lib32mudflap),yes)
+ $(call do_mudflap_dev,32)
+endif
+ifeq ($(with_lib64mudflap),yes)
+ $(call do_mudflap_dev,64)
+endif
+ifeq ($(with_libn32mudflap),yes)
+ $(call do_mudflap_dev,n32)
+endif
+ifeq ($(with_libhfmudflap),yes)
+ $(call do_mudflap_dev,hf)
+endif
+ifeq ($(with_libsfmudflap),yes)
+ $(call do_mudflap_dev,sf)
+endif
+
+ cp -p $(srcdir)/libmudflap/ChangeLog \
+ $(d_mfd)/$(docdir)/$(p_base)/mudflap/changelog
+
+ debian/dh_doclink -p$(p_mfd) $(p_base)
+ debian/dh_rmemptydirs -p$(p_mfd)
+
+ dh_strip -p$(p_mfd)
+ dh_compress -p$(p_mfd)
+ dh_fixperms -p$(p_mfd)
+ dh_shlibdeps -p$(p_mfd)
+ dh_gencontrol -p$(p_mfd) \
+ -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_mfd)
+ dh_md5sums -p$(p_mfd)
+ dh_builddeb -p$(p_mfd)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
diff --git a/debian/rules.d/binary-libobjc.mk b/debian/rules.d/binary-libobjc.mk
new file mode 100644
index 0000000..661463c
--- /dev/null
+++ b/debian/rules.d/binary-libobjc.mk
@@ -0,0 +1,78 @@
+ifeq ($(with_objcdev),yes)
+ $(lib_binaries) += libobjc
+endif
+ifeq ($(with_lib64objc),yes)
+ $(lib_binaries) += lib64objc
+endif
+ifeq ($(with_lib32objc),yes)
+ $(lib_binaries) += lib32objc
+endif
+ifeq ($(with_libn32objc),yes)
+ $(lib_binaries) += libn32objc
+endif
+ifeq ($(with_libhfobjc),yes)
+ $(lib_binaries) += libhfobjc
+endif
+ifeq ($(with_libsfobjc),yes)
+ $(lib_binaries) += libsfobjc
+endif
+
+files_lobjc = \
+ $(usr_lib$(2))/libobjc.so.*
+ifeq ($(with_objc_gc),yes)
+ files_lobjc += \
+ $(usr_lib$(2))/libobjc_gc.so.*
+endif
+
+define __do_libobjc
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_l) $(d_d)
+ dh_installdirs -p$(p_l) \
+ $(usr_lib$(2))
+ DH_COMPAT=2 dh_movefiles -p$(p_l) \
+ $(files_lobjc)
+
+ debian/dh_doclink -p$(p_l) $(p_base)
+ debian/dh_doclink -p$(p_d) $(p_base)
+
+ dh_strip -p$(p_l) --dbg-package=$(p_d)
+ dh_compress -p$(p_l) -p$(p_d)
+ dh_fixperms -p$(p_l) -p$(p_d)
+ dh_makeshlibs -p$(p_l) -Xlibobjc_gc.so
+ $(call cross_mangle_shlibs,$(p_l))
+ DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_l)
+ $(call cross_mangle_substvars,$(p_l))
+ dh_gencontrol -p$(p_l) -p$(p_d) \
+ -- -v$(DEB_VERSION) $(common_substvars)
+ $(call cross_mangle_control,$(p_l))
+ dh_installdeb -p$(p_l) -p$(p_d)
+ dh_md5sums -p$(p_l) -p$(p_d)
+ dh_builddeb -p$(p_l) -p$(p_d)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+# ----------------------------------------------------------------------
+
+do_libobjc = $(call __do_libobjc,lib$(1)objc$(OBJC_SONAME),$(1))
+
+$(binary_stamp)-libobjc: $(install_stamp)
+ $(call do_libobjc,)
+
+$(binary_stamp)-lib64objc: $(install_stamp)
+ $(call do_libobjc,64)
+
+$(binary_stamp)-lib32objc: $(install_stamp)
+ $(call do_libobjc,32)
+
+$(binary_stamp)-libn32objc: $(install_stamp)
+ $(call do_libobjc,n32)
+
+$(binary_stamp)-libhfobjc: $(install_stamp)
+ $(call do_libobjc,hf)
+
+$(binary_stamp)-libsfobjc: $(install_stamp)
+ $(call do_libobjc,sf)
diff --git a/debian/rules.d/binary-libquadmath.mk b/debian/rules.d/binary-libquadmath.mk
new file mode 100644
index 0000000..2313c00
--- /dev/null
+++ b/debian/rules.d/binary-libquadmath.mk
@@ -0,0 +1,67 @@
+$(lib_binaries) += libqmath
+ifeq ($(with_lib64qmath),yes)
+ $(lib_binaries) += lib64qmath
+endif
+ifeq ($(with_lib32qmath),yes)
+ $(lib_binaries) += lib32qmath
+endif
+ifeq ($(with_libn32qmath),yes)
+ $(lib_binaries) += libn32qmath
+endif
+ifeq ($(with_libhfqmath),yes)
+ $(lib_binaries) += libhfqmath
+endif
+ifeq ($(with_libsfqmath),yes)
+ $(lib_binaries) += libsfqmath
+endif
+
+define __do_qmath
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_l) $(d_d)
+ dh_installdirs -p$(p_l) $(2)
+ DH_COMPAT=2 dh_movefiles -p$(p_l) $(2)/libquadmath.so.*
+
+ debian/dh_doclink -p$(p_l) $(p_base)
+ debian/dh_doclink -p$(p_d) $(p_base)
+
+ dh_strip -p$(p_l) --dbg-package=$(p_d)
+ dh_compress -p$(p_l) -p$(p_d)
+ dh_fixperms -p$(p_l) -p$(p_d)
+ dh_makeshlibs -p$(p_l)
+ $(call cross_mangle_shlibs,$(p_l))
+ $(cross_shlibdeps) dh_shlibdeps -p$(p_l)
+ $(call cross_mangle_substvars,$(p_l))
+ dh_gencontrol -p$(p_l) -p$(p_d) \
+ -- -v$(DEB_VERSION) $(common_substvars)
+ $(call cross_mangle_control,$(p_l))
+ dh_installdeb -p$(p_l) -p$(p_d)
+ dh_md5sums -p$(p_l) -p$(p_d)
+ dh_builddeb -p$(p_l) -p$(p_d)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+# ----------------------------------------------------------------------
+
+do_qmath = $(call __do_qmath,lib$(1)quadmath$(QMATH_SONAME),$(usr_lib$(1)))
+
+$(binary_stamp)-libqmath: $(install_stamp)
+ $(call do_qmath,)
+
+$(binary_stamp)-lib64qmath: $(install_stamp)
+ $(call do_qmath,64)
+
+$(binary_stamp)-lib32qmath: $(install_stamp)
+ $(call do_qmath,32)
+
+$(binary_stamp)-libn32qmath: $(install_stamp)
+ $(call do_qmath,n32)
+
+$(binary_stamp)-libhfqmath: $(install_stamp)
+ $(call do_qmath,hf)
+
+$(binary_stamp)-libsfqmath: $(install_stamp)
+ $(call do_qmath,sf)
diff --git a/debian/rules.d/binary-libssp.mk b/debian/rules.d/binary-libssp.mk
new file mode 100644
index 0000000..3ecf76e
--- /dev/null
+++ b/debian/rules.d/binary-libssp.mk
@@ -0,0 +1,150 @@
+arch_binaries := $(arch_binaries) libssp
+ifeq ($(with_lib64ssp),yes)
+ arch_binaries := $(arch_binaries) lib64ssp
+endif
+ifeq ($(with_lib32ssp),yes)
+ arch_binaries := $(arch_binaries) lib32ssp
+endif
+ifeq ($(with_libn32ssp),yes)
+ arch_binaries := $(arch_binaries) libn32ssp
+endif
+
+p_ssp = libssp$(SSP_SONAME)
+p_ssp32 = lib32ssp$(SSP_SONAME)
+p_ssp64 = lib64ssp$(SSP_SONAME)
+p_sspd = libssp$(SSP_SONAME)-dev
+
+d_ssp = debian/$(p_ssp)
+d_ssp32 = debian/$(p_ssp32)
+d_ssp64 = debian/$(p_ssp64)
+d_sspd = debian/$(p_sspd)
+
+dirs_ssp = \
+ $(docdir)/$(p_base) \
+ $(PF)/$(libdir)
+files_ssp = \
+ $(PF)/$(libdir)/libssp.so.*
+
+dirs_sspd = \
+ $(docdir) \
+ $(PF)/include \
+ $(PF)/$(libdir)
+files_sspd = \
+ $(gcc_lib_dir)/include/ssp \
+ $(PF)/$(libdir)/libssp.{a,so} \
+ $(PF)/$(libdir)/libssp_nonshared.a
+
+ifeq ($(with_lib32ssp),yes)
+ dirs_sspd += $(lib32)
+ files_sspd += $(lib32)/libssp.{a,so}
+ files_sspd += $(lib32)/libssp_nonshared.a
+endif
+ifeq ($(with_lib64ssp),yes)
+ dirs_sspd += $(PF)/lib64
+ files_sspd += $(PF)/lib64/libssp.{a,so}
+ files_sspd += $(PF)/lib64/libssp_nonshared.a
+endif
+
+$(binary_stamp)-libssp: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_ssp)
+ dh_installdirs -p$(p_ssp)
+
+ DH_COMPAT=2 dh_movefiles -p$(p_ssp) $(files_ssp)
+ debian/dh_doclink -p$(p_ssp) $(p_base)
+
+ debian/dh_rmemptydirs -p$(p_ssp)
+
+ dh_strip -p$(p_ssp)
+ dh_compress -p$(p_ssp)
+ dh_fixperms -p$(p_ssp)
+ dh_makeshlibs -p$(p_ssp) -V '$(p_ssp) (>= $(DEB_SOVERSION))'
+ dh_shlibdeps -p$(p_ssp)
+ dh_gencontrol -p$(p_ssp) \
+ -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_ssp)
+ dh_md5sums -p$(p_ssp)
+ dh_builddeb -p$(p_ssp)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib64ssp: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_ssp64)
+ dh_installdirs -p$(p_ssp64) \
+ $(PF)/lib64
+ DH_COMPAT=2 dh_movefiles -p$(p_ssp64) \
+ $(PF)/lib64/libssp.so.*
+
+ debian/dh_doclink -p$(p_ssp64) $(p_base)
+
+ dh_strip -p$(p_ssp64)
+ dh_compress -p$(p_ssp64)
+ dh_fixperms -p$(p_ssp64)
+ dh_makeshlibs -p$(p_ssp64) -V '$(p_ssp64) (>= $(DEB_SOVERSION))'
+# dh_shlibdeps -p$(p_ssp64)
+ dh_gencontrol -p$(p_ssp64) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_ssp64)
+ dh_md5sums -p$(p_ssp64)
+ dh_builddeb -p$(p_ssp64)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib32ssp: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_ssp32)
+ dh_installdirs -p$(p_ssp32) \
+ $(lib32)
+ DH_COMPAT=2 dh_movefiles -p$(p_ssp32) \
+ $(lib32)/libssp.so.*
+
+ debian/dh_doclink -p$(p_ssp32) $(p_base)
+
+ dh_strip -p$(p_ssp32)
+ dh_compress -p$(p_ssp32)
+ dh_fixperms -p$(p_ssp32)
+ dh_makeshlibs -p$(p_ssp32) -V '$(p_ssp32) (>= $(DEB_SOVERSION))'
+# dh_shlibdeps -p$(p_ssp32)
+ dh_gencontrol -p$(p_ssp32) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_ssp32)
+ dh_md5sums -p$(p_ssp32)
+ dh_builddeb -p$(p_ssp32)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libn32ssp: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_sspn32)
+ dh_installdirs -p$(p_sspn32) \
+ $(PF)/$(libn32)
+ DH_COMPAT=2 dh_movefiles -p$(p_sspn32) \
+ $(PF)/$(libn32)/libssp.so.*
+
+ debian/dh_doclink -p$(p_sspn32) $(p_base)
+
+ dh_strip -p$(p_sspn32)
+ dh_compress -p$(p_sspn32)
+ dh_fixperms -p$(p_sspn32)
+ dh_makeshlibs -p$(p_sspn32) -V '$(p_sspn32) (>= $(DEB_SOVERSION))'
+# dh_shlibdeps -p$(p_sspn32)
+ dh_gencontrol -p$(p_sspn32) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_sspn32)
+ dh_md5sums -p$(p_sspn32)
+ dh_builddeb -p$(p_sspn32)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
diff --git a/debian/rules.d/binary-libstdcxx.mk b/debian/rules.d/binary-libstdcxx.mk
new file mode 100644
index 0000000..0000dfe
--- /dev/null
+++ b/debian/rules.d/binary-libstdcxx.mk
@@ -0,0 +1,431 @@
+
+ifeq ($(with_libcxx),yes)
+ $(lib_binaries) += libstdcxx
+endif
+ifeq ($(with_lib64cxx),yes)
+ $(lib_binaries) += lib64stdcxx
+endif
+ifeq ($(with_lib64cxxdbg),yes)
+ $(lib_binaries) += lib64stdcxxdbg
+endif
+ifeq ($(with_lib32cxx),yes)
+ $(lib_binaries) += lib32stdcxx
+endif
+ifeq ($(with_lib32cxxdbg),yes)
+ $(lib_binaries) += lib32stdcxxdbg
+endif
+ifeq ($(with_libn32cxx),yes)
+ $(lib_binaries) += libn32stdcxx
+endif
+ifeq ($(with_libn32cxxdbg),yes)
+ $(lib_binaries) += libn32stdcxxdbg
+endif
+ifeq ($(with_libhfcxx),yes)
+ $(lib_binaries) += libhfstdcxx
+endif
+ifeq ($(with_libhfcxxdbg),yes)
+ $(lib_binaries) += libhfstdcxxdbg
+endif
+ifeq ($(with_libsfcxx),yes)
+ $(lib_binaries) += libsfstdcxx
+endif
+ifeq ($(with_libsfcxxdbg),yes)
+ $(lib_binaries) += libsfstdcxxdbg
+endif
+
+ifeq ($(with_cxxdev),yes)
+ $(lib_binaries) += libstdcxx-dev
+ ifneq ($(DEB_CROSS),yes)
+ indep_binaries := $(indep_binaries) libstdcxx-doc
+ endif
+endif
+
+libstdc_ext = -$(BASE_VERSION)
+
+p_lib = libstdc++$(CXX_SONAME)$(cross_lib_arch)
+p_lib64 = lib64stdc++$(CXX_SONAME)$(cross_lib_arch)
+p_lib32 = lib32stdc++$(CXX_SONAME)$(cross_lib_arch)
+p_libn32= libn32stdc++$(CXX_SONAME)$(cross_lib_arch)
+p_libhf = libhfstdc++$(CXX_SONAME)$(cross_lib_arch)
+p_libsf = libsfstdc++$(CXX_SONAME)$(cross_lib_arch)
+p_dev = libstdc++$(CXX_SONAME)$(libstdc_ext)-dev$(cross_lib_arch)
+p_pic = libstdc++$(CXX_SONAME)$(libstdc_ext)-pic$(cross_lib_arch)
+p_dbg = libstdc++$(CXX_SONAME)$(libstdc_ext)-dbg$(cross_lib_arch)
+p_dbg64 = lib64stdc++$(CXX_SONAME)$(libstdc_ext)-dbg$(cross_lib_arch)
+p_dbg32 = lib32stdc++$(CXX_SONAME)$(libstdc_ext)-dbg$(cross_lib_arch)
+p_dbgn32= libn32stdc++$(CXX_SONAME)$(libstdc_ext)-dbg$(cross_lib_arch)
+p_dbghf = libhfstdc++$(CXX_SONAME)$(libstdc_ext)-dbg$(cross_lib_arch)
+p_dbgsf = libsfstdc++$(CXX_SONAME)$(libstdc_ext)-dbg$(cross_lib_arch)
+p_libd = libstdc++$(CXX_SONAME)$(libstdc_ext)-doc
+
+d_lib = debian/$(p_lib)
+d_lib64 = debian/$(p_lib64)
+d_lib32 = debian/$(p_lib32)
+d_libn32= debian/$(p_libn32)
+d_libhf = debian/$(p_libhf)
+d_libsf = debian/$(p_libsf)
+d_dev = debian/$(p_dev)
+d_pic = debian/$(p_pic)
+d_dbg = debian/$(p_dbg)
+d_dbg64 = debian/$(p_dbg64)
+d_dbg32 = debian/$(p_dbg32)
+d_dbghf = debian/$(p_dbghf)
+d_dbgsf = debian/$(p_dbgsf)
+d_libd = debian/$(p_libd)
+
+dirs_dev = \
+ $(docdir)/$(p_base)/C++ \
+ $(usr_lib) \
+ $(gcc_lib_dir)/include \
+ $(cxx_inc_dir)
+
+files_dev = \
+ $(cxx_inc_dir)/ \
+ $(gcc_lib_dir)/libstdc++.{a,so} \
+ $(gcc_lib_dir)/libsupc++.a
+
+dirs_dbg = \
+ $(docdir) \
+ $(usr_lib)/debug \
+ $(gcc_lib_dir)
+files_dbg = \
+ $(usr_lib)/debug/libstdc++.{a,so*}
+
+ifneq ($(DEB_CROSS),yes)
+ dirs_dbg += $(PF)/share/gcc-$(BASE_VERSION)/python
+ files_dbg += $(PF)/share/gcc-$(BASE_VERSION)/python/libstdcxx
+endif
+
+dirs_pic = \
+ $(docdir) \
+ $(gcc_lib_dir)
+files_pic = \
+ $(gcc_lib_dir)/libstdc++_pic.a
+
+# ----------------------------------------------------------------------
+
+gxx_baseline_dir = $(shell \
+ sed -n '/^baseline_dir *=/s,.*= *\(.*\)$$,\1,p' \
+ $(buildlibdir)/libstdc++-v3/testsuite/Makefile)
+gxx_baseline_file = $(gxx_baseline_dir)/baseline_symbols.txt
+
+debian/README.libstdc++-baseline:
+ cat debian/README.libstdc++-baseline.in \
+ > debian/README.libstdc++-baseline
+
+ baseline_name=`basename $(gxx_baseline_dir)`; \
+ baseline_parentdir=`dirname $(gxx_baseline_dir)`; \
+ compat_baseline_name=""; \
+ if [ -f "$(gxx_baseline_file)" ]; then \
+ ( \
+ echo "A baseline file for $$baseline_name was found."; \
+ echo "Running the check-abi script ..."; \
+ echo ""; \
+ $(MAKE) -C $(buildlibdir)/libstdc++-v3/testsuite \
+ check-abi; \
+ ) >> debian/README.libstdc++-baseline; \
+ else \
+ ( \
+ echo "No baseline file found for $$baseline_name."; \
+ echo "Generating a new baseline file ..."; \
+ echo ""; \
+ ) >> debian/README.libstdc++-baseline; \
+ mkdir -p $(gxx_baseline_dir); \
+ $(MAKE) -C $(buildlibdir)/libstdc++-v3/testsuite new-abi-baseline; \
+ if [ -f $(gxx_baseline_file) ]; then \
+ cat $(gxx_baseline_file); \
+ else \
+ cat $$(find $(buildlibdir)/libstdc++-v3 $(srcdir)/libstdc++-v3 -name '.new') || true; \
+ fi >> debian/README.libstdc++-baseline; \
+ fi
+
+# ----------------------------------------------------------------------
+define __do_libstdcxx
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_l)
+
+ dh_installdirs -p$(p_l) \
+ $(docdir) \
+ $(usr_lib$(2))
+
+ cp -a $(d)/$(usr_lib$(2))/libstdc++.so.*[0-9] \
+ $(d_l)/$(usr_lib$(2))/.
+
+ debian/dh_doclink -p$(p_l) $(p_base)
+ debian/dh_rmemptydirs -p$(p_l)
+
+ dh_strip -p$(p_l)
+ dh_compress -p$(p_l)
+ dh_fixperms -p$(p_l)
+
+ dh_makeshlibs -p$(p_l) || echo FIXME: libstdc++ symbols
+ $(call cross_mangle_shlibs,$(p_l))
+ DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_l) \
+ -L$(p_l$(2)gcc) -l:$(d)/$(usr_lib$(2)):
+ $(call cross_mangle_substvars,$(p_l))
+
+ dh_gencontrol -p$(p_l) -- -v$(DEB_VERSION) $(common_substvars)
+ $(call cross_mangle_control,$(p_l))
+ dh_installdeb -p$(p_l)
+ dh_md5sums -p$(p_l)
+ dh_builddeb -p$(p_l)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+define __do_libstdcxx_dbg
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_d)
+ dh_installdirs -p$(p_d) \
+ $(usr_lib$(2))
+
+ cp -p $(d)/$(usr_lib$(2))/libstdc++.so.*.py \
+ $(d_d)/$(usr_lib$(2))/.;
+ $(if $(filter yes,$(with_lib$(2)cxx)),
+ cp -p $(d)/$(usr_lib$(2))/libstdc++.so.*[0-9] \
+ $(d_d)/$(usr_lib$(2))/.;
+ dh_strip -p$(p_d) --keep-debug;
+ $(if $(filter yes,$(with_common_libs)),, # if !with_common_libs
+ # remove the debug symbols for libstdc++
+ # built by a newer version of GCC
+ rm -rf $(d_d)/usr/lib/debug/$(PF);
+ )
+ rm -f $(d_d)/$(usr_lib$(2))/libstdc++.so.*[0-9]
+ )
+
+ $(if $(filter yes,$(with_debug)),
+ mv $(d)/$(usr_lib$(2))/debug $(d_d)/$(usr_lib$(2))/.;
+ rm -f $(d_d)/$(usr_lib$(2))/debug/libstdc++_pic.a
+ )
+
+ DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_d) \
+ -L$(p_l$(2)gcc) -l:$(d)/$(usr_lib$(2)):
+ $(call cross_mangle_substvars,$(p_d))
+
+ debian/dh_doclink -p$(p_d) $(p_base)
+ debian/dh_rmemptydirs -p$(p_d)
+
+ dh_compress -p$(p_d)
+ dh_fixperms -p$(p_d)
+ dh_gencontrol -p$(p_d) -- -v$(DEB_VERSION) $(common_substvars)
+ $(call cross_mangle_control,$(p_d))
+
+ dh_installdeb -p$(p_d)
+ dh_md5sums -p$(p_d)
+ dh_builddeb -p$(p_d)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+do_libstdcxx = $(call __do_libstdcxx,lib$(1)stdc++$(CXX_SONAME),$(1))
+do_libstdcxx_dbg = $(call __do_libstdcxx_dbg,lib$(1)stdc++$(CXX_SONAME)$(libstdc_ext),$(1))
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libstdcxx: $(install_stamp)
+ $(call do_libstdcxx,)
+
+$(binary_stamp)-lib64stdcxx: $(install_stamp)
+ $(call do_libstdcxx,64)
+
+$(binary_stamp)-lib32stdcxx: $(install_stamp)
+ $(call do_libstdcxx,32)
+
+$(binary_stamp)-libn32stdcxx: $(install_stamp)
+ $(call do_libstdcxx,n32)
+
+$(binary_stamp)-libhfstdcxx: $(install_stamp)
+ $(call do_libstdcxx,hf)
+
+$(binary_stamp)-libsfstdcxx: $(install_stamp)
+ $(call do_libstdcxx,sf)
+
+$(binary_stamp)-lib64stdcxxdbg: $(install_stamp)
+ $(call do_libstdcxx_dbg,64)
+
+$(binary_stamp)-lib32stdcxxdbg: $(install_stamp)
+ $(call do_libstdcxx_dbg,32)
+
+$(binary_stamp)-libn32stdcxxdbg: $(install_stamp)
+ $(call do_libstdcxx_dbg,n32)
+
+$(binary_stamp)-libhfstdcxxdbg: $(install_stamp)
+ $(call do_libstdcxx_dbg,hf)
+
+$(binary_stamp)-libsfstdcxxdbg: $(install_stamp)
+ $(call do_libstdcxx_dbg,sf)
+
+# ----------------------------------------------------------------------
+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)/$(usr_lib)/libsupc++.a $(d)/$(gcc_lib_dir)/
+ mv $(d)/$(usr_lib)/libstdc++.{a,so} $(d)/$(gcc_lib_dir)/
+ ln -sf ../../../$(DEB_TARGET_GNU_TYPE)/libstdc++.so.$(CXX_SONAME) \
+ $(d)/$(gcc_lib_dir)/libstdc++.so
+ mv $(d)/$(usr_lib)/libstdc++_pic.a $(d)/$(gcc_lib_dir)/
+
+ rm -f $(d)/$(usr_lib)/debug/libstdc++_pic.a
+ rm -f $(d)/$(usr_lib64)/debug/libstdc++_pic.a
+
+ : # remove precompiled headers
+ -find $(d) -type d -name '*.gch' | xargs rm -rf
+
+ for i in $(d)/$(PF)/include/c++/$(GCC_VERSION)/*-linux; do \
+ if [ -d $$i ]; then mv $$i $$i-gnu; fi; \
+ done
+
+ DH_COMPAT=2 dh_movefiles -p$(p_dev) $(files_dev)
+ DH_COMPAT=2 dh_movefiles -p$(p_pic) $(files_pic)
+ifeq ($(with_debug),yes)
+ DH_COMPAT=2 dh_movefiles -p$(p_dbg) $(files_dbg)
+endif
+
+ dh_link -p$(p_dev) \
+ /$(usr_lib)/libstdc++.so.$(CXX_SONAME) \
+ /$(gcc_lib_dir)/libstdc++.so \
+ /$(cxx_inc_dir) /$(PFL)/include/c++/$(GCC_VERSION)
+
+ debian/dh_doclink -p$(p_dev) $(p_base)
+ debian/dh_doclink -p$(p_pic) $(p_base)
+ debian/dh_doclink -p$(p_dbg) $(p_base)
+ cp -p $(srcdir)/libstdc++-v3/ChangeLog \
+ $(d_dev)/$(docdir)/$(p_base)/C++/changelog.libstdc++
+ifeq ($(with_check),yes)
+ cp -p debian/README.libstdc++-baseline \
+ $(d_dev)/$(docdir)/$(p_base)/C++/README.libstdc++-baseline
+ if [ -f $(buildlibdir)/libstdc++-v3/testsuite/current_symbols.txt ]; \
+ then \
+ cp -p $(buildlibdir)/libstdc++-v3/testsuite/current_symbols.txt \
+ $(d_dev)/$(docdir)/$(p_base)/C++/libstdc++_symbols.txt; \
+ fi
+endif
+ cp -p $(buildlibdir)/libstdc++-v3/src/libstdc++-symbols.ver \
+ $(d_pic)/$(gcc_lib_dir)/libstdc++_pic.map
+
+ cp -p $(d)/$(usr_lib)/libstdc++.so.*.py \
+ $(d_dbg)/$(usr_lib)/
+ifeq ($(with_libcxx),yes)
+ cp -p $(d)/$(usr_lib)/libstdc++.so.*[0-9] \
+ $(d_dbg)/$(usr_lib)/
+ dh_strip -p$(p_dbg) --keep-debug
+ rm -f $(d_dbg)/$(usr_lib)/libstdc++.so.*[0-9]
+endif
+
+ dh_strip -p$(p_dev) --dbg-package=$(p_dbg)
+ifneq ($(with_common_libs),yes)
+ : # remove the debug symbols for libstdc++ built by a newer version of GCC
+ rm -rf $(d_dbg)/usr/lib/debug/$(PF)
+endif
+ dh_strip -p$(p_pic)
+
+ifeq ($(with_cxxdev),yes)
+ debian/dh_rmemptydirs -p$(p_dev)
+ debian/dh_rmemptydirs -p$(p_pic)
+ debian/dh_rmemptydirs -p$(p_dbg)
+endif
+
+ dh_compress -p$(p_dev) -p$(p_pic) -p$(p_dbg) -X.txt
+ dh_fixperms -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+# XXX: what about biarchn32?
+#ifeq ($(biarch64),yes)
+# DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_dev) -p$(p_pic) -p$(p_dbg) -Xlib64
+#else
+# DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_dev) -p$(p_pic) -p$(p_dbg) -Xlib32/debug
+#endif
+ DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+ $(call cross_mangle_substvars,$(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)
+
+# ----------------------------------------------------------------------
+
+doxygen_doc_dir = $(buildlibdir)/libstdc++-v3/doc
+
+doxygen-docs: $(build_doxygen_stamp)
+$(build_doxygen_stamp):
+ $(MAKE) -C $(buildlibdir)/libstdc++-v3/doc SHELL=/bin/bash doc-html-doxygen
+ $(MAKE) -C $(buildlibdir)/libstdc++-v3/doc SHELL=/bin/bash doc-man-doxygen
+ -find $(doxygen_doc_dir)/doxygen/html -name 'struct*' -empty | xargs rm -f
+
+ touch $@
+
+$(binary_stamp)-libstdcxx-doc: $(install_stamp) doxygen-docs
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_libd)
+ dh_installdirs -p$(p_libd) \
+ $(docdir)/$(p_base)/libstdc++ \
+ $(PF)/share/man
+
+# debian/dh_doclink -p$(p_libd) $(p_base)
+ dh_link -p$(p_libd) /usr/share/doc/$(p_base) /usr/share/doc/$(p_libd)
+ dh_installdocs -p$(p_libd)
+ rm -f $(d_libd)/$(docdir)/$(p_base)/copyright
+
+ cp -a $(srcdir)/libstdc++-v3/doc/html \
+ $(d_libd)/$(docdir)/$(p_base)/libstdc++/.
+
+ cp -a $(doxygen_doc_dir)/doxygen/html \
+ $(d_libd)/$(docdir)/$(p_base)/libstdc++/.
+
+ : FIXME: depending on the doxygen version
+ if [ -d $(doxygen_doc_dir)/doxygen/man/man3cxx ]; then \
+ cp -a $(doxygen_doc_dir)/doxygen/man/man3cxx \
+ $(d_libd)/$(PF)/share/man/man3; \
+ if [ -d $(doxygen_doc_dir)/doxygen/man/man3 ]; then \
+ cp -a $(doxygen_doc_dir)/doxygen/man/man3/* \
+ $(d_libd)/$(PF)/share/man/man3/; \
+ fi; \
+ elif [ -d $(doxygen_doc_dir)/doxygen/man/man3 ]; then \
+ cp -a $(doxygen_doc_dir)/doxygen/man/man3 \
+ $(d_libd)/$(PF)/share/man/man3; \
+ fi
+
+ for i in $(d_libd)/$(PF)/share/man/man3/*.3; do \
+ [ -f $${i} ] || continue; \
+ mv $${i} $${i}cxx; \
+ done
+ rm -f $(d_libd)/$(PF)/share/man/man3/todo.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 -X.map
+ 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)
diff --git a/debian/rules.d/binary-neon.mk b/debian/rules.d/binary-neon.mk
new file mode 100644
index 0000000..b7b3f38
--- /dev/null
+++ b/debian/rules.d/binary-neon.mk
@@ -0,0 +1,53 @@
+arch_binaries := $(arch_binaries) neon
+
+p_nlgcc = libgcc$(GCC_SONAME)-neon
+p_ngomp = libgomp$(GOMP_SONAME)-neon
+p_nlobjc = libobjc$(OBJC_SONAME)-neon
+p_nflib = libgfortran$(FORTRAN_SONAME)-neon
+p_nlcxx = libstdc++$(CXX_SONAME)-neon
+
+d_nlgcc = debian/$(p_nlgcc)
+d_ngomp = debian/$(p_ngomp)
+d_nlobjc = debian/$(p_nlobjc)
+d_nflib = debian/$(p_nflib)
+d_nlcxx = debian/$(p_nlcxx)
+
+neon_pkgs = -p$(p_nlgcc) -p$(p_ngomp) -p$(p_nlobjc) -p$(p_nflib) -p$(p_nlcxx)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-neon: $(install_neon_stamp)
+ dh_testdir
+ dh_testroot
+
+ dh_installdirs -p$(p_nlgcc) \
+ $(PF)/share/doc \
+ lib/neon
+ dh_installdirs -A -p$(p_ngomp) -p$(p_nlobjc) -p$(p_nflib) -p$(p_nlcxx) \
+ $(PF)/share/doc \
+ $(PF)/lib/neon
+
+ cp -a $(d_neon)/$(PF)/lib/libgcc*.so.* \
+ $(d_nlgcc)/lib/neon/
+ cp -a $(d_neon)/$(PF)/lib/libgomp*.so.* \
+ $(d_ngomp)/$(PF)/lib/neon/
+ cp -a $(d_neon)/$(PF)/lib/libobjc*.so.* \
+ $(d_nlobjc)/$(PF)/lib/neon/
+ cp -a $(d_neon)/$(PF)/lib/libgfortran*.so.* \
+ $(d_nflib)/$(PF)/lib/neon/
+ cp -a $(d_neon)/$(PF)/lib/libstdc++*.so.* \
+ $(d_nlcxx)/$(PF)/lib/neon/
+
+ for p in $(p_nlgcc) $(p_ngomp) $(p_nlobjc) $(p_nflib) $(p_nlcxx); do \
+ ln -s ../$(p_base) debian/$$p/usr/share/doc/$$p; \
+ done
+
+ dh_strip $(neon_pkgs)
+ dh_compress $(neon_pkgs)
+ dh_fixperms $(neon_pkgs)
+ dh_shlibdeps $(neon_pkgs)
+ dh_gencontrol $(neon_pkgs) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb $(neon_pkgs)
+ dh_md5sums $(neon_pkgs)
+ dh_builddeb $(neon_pkgs)
+
+ touch $@
diff --git a/debian/rules.d/binary-nof.mk b/debian/rules.d/binary-nof.mk
new file mode 100644
index 0000000..417dc86
--- /dev/null
+++ b/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) \
+ $(usr_lib)/nof
+ifeq ($(with_cdev),yes)
+ dirs_nof += \
+ $(gcc_lib_dir)/nof
+endif
+
+ifeq ($(with_cdev),yes)
+ files_nof = \
+ $(libgcc_dir)/libgcc_s_nof.so.$(GCC_SONAME) \
+ $(gcc_lib_dir)/libgcc_s_nof.so \
+ $(usr_lib)/nof \
+ $(gcc_lib_dir)/nof
+else
+ files_nof = \
+ $(usr_lib)/libgcc_s_nof.so.$(GCC_SONAME)
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-nof: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ mv $(d)/$(usr_lib)/libgcc_s_nof.so.$(GCC_SONAME) $(d)/$(libgcc_dir)/.
+ rm -f $(d)/$(usr_lib)/libgcc_s_nof.so
+ ln -sf $(libgcc_dir)/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)
diff --git a/debian/rules.d/binary-objc.mk b/debian/rules.d/binary-objc.mk
new file mode 100644
index 0000000..85de1b9
--- /dev/null
+++ b/debian/rules.d/binary-objc.mk
@@ -0,0 +1,88 @@
+ifneq (,$(filter yes, $(biarch64) $(biarch32) $(biarchn32) $(biarchhf) $(biarchsf)))
+ arch_binaries := $(arch_binaries) objc-multi
+endif
+arch_binaries := $(arch_binaries) objc
+
+p_objc = gobjc$(pkg_ver)$(cross_bin_arch)
+d_objc = debian/$(p_objc)
+
+p_objc_m= gobjc$(pkg_ver)-multilib$(cross_bin_arch)
+d_objc_m= debian/$(p_objc_m)
+
+dirs_objc = \
+ $(docdir)/$(p_base)/ObjC \
+ $(gcc_lexec_dir) \
+ $(gcc_lib_dir)/include
+
+files_objc = \
+ $(gcc_lexec_dir)/cc1obj \
+ $(gcc_lib_dir)/include/objc
+
+define do_objc
+ dh_installdirs -p$(2) $(gcc_lib_dir$(1))
+ $(call install_gcc_lib,libobjc,$(OBJC_SONAME),$(1),$(2))
+ $(if $(filter yes,$(with_objc_gc)),
+ dh_link -p$(2) \
+ /$(usr_lib$(1))/libobjc_gc.so.$(OBJC_SONAME) \
+ /$(gcc_lib_dir$(1))/libobjc_gc.so
+ )
+
+endef
+
+$(binary_stamp)-objc: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_objc)
+ dh_installdirs -p$(p_objc) $(dirs_objc)
+ DH_COMPAT=2 dh_movefiles -p$(p_objc) $(files_objc)
+
+ $(call do_objc,,$(p_objc))
+
+ cp -p $(srcdir)/libobjc/{README*,THREADS*} \
+ $(d_objc)/$(docdir)/$(p_base)/ObjC/.
+
+ cp -p $(srcdir)/libobjc/ChangeLog \
+ $(d_objc)/$(docdir)/$(p_base)/ObjC/changelog.libobjc
+
+ debian/dh_doclink -p$(p_objc) $(p_base)
+
+ debian/dh_rmemptydirs -p$(p_objc)
+
+ dh_strip -p$(p_objc)
+ dh_compress -p$(p_objc)
+
+ dh_fixperms -p$(p_objc)
+ dh_shlibdeps -p$(p_objc)
+ dh_gencontrol -p$(p_objc) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_objc)
+ dh_md5sums -p$(p_objc)
+ dh_builddeb -p$(p_objc)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+$(binary_stamp)-objc-multi: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_objc_m)
+ dh_installdirs -p$(p_objc_m) $(docdir)
+
+ $(foreach flavour,$(flavours), \
+ $(call do_objc,$(flavour),$(p_objc_m)))
+
+ debian/dh_doclink -p$(p_objc_m) $(p_base)
+
+ dh_strip -p$(p_objc_m)
+ dh_compress -p$(p_objc_m)
+
+ dh_fixperms -p$(p_objc_m)
+ dh_shlibdeps -p$(p_objc_m)
+ dh_gencontrol -p$(p_objc_m) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_objc_m)
+ dh_md5sums -p$(p_objc_m)
+ dh_builddeb -p$(p_objc_m)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
diff --git a/debian/rules.d/binary-objcxx.mk b/debian/rules.d/binary-objcxx.mk
new file mode 100644
index 0000000..c0d3ad8
--- /dev/null
+++ b/debian/rules.d/binary-objcxx.mk
@@ -0,0 +1,65 @@
+ifneq (,$(filter yes, $(biarch64) $(biarch32) $(biarchn32) $(biarchhf) $(biarchsf)))
+ arch_binaries := $(arch_binaries) objcxx-multi
+endif
+arch_binaries := $(arch_binaries) objcxx
+
+p_objcx = gobjc++$(pkg_ver)$(cross_bin_arch)
+d_objcx = debian/$(p_objcx)
+
+p_objcx_m = gobjc++$(pkg_ver)-multilib$(cross_bin_arch)
+d_objcx_m = debian/$(p_objcx_m)
+
+dirs_objcx = \
+ $(docdir)/$(p_base)/Obj-C++ \
+ $(gcc_lexec_dir)
+
+files_objcx = \
+ $(gcc_lexec_dir)/cc1objplus
+
+$(binary_stamp)-objcxx: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_objcx)
+ dh_installdirs -p$(p_objcx) $(dirs_objcx)
+ DH_COMPAT=2 dh_movefiles -p$(p_objcx) $(files_objcx)
+
+ debian/dh_doclink -p$(p_objcx) $(p_base)
+ cp -p $(srcdir)/gcc/objcp/ChangeLog \
+ $(d_objcx)/$(docdir)/$(p_base)/Obj-C++/changelog
+
+ debian/dh_rmemptydirs -p$(p_objcx)
+
+ dh_strip -p$(p_objcx)
+ dh_compress -p$(p_objcx)
+
+ dh_fixperms -p$(p_objcx)
+ dh_shlibdeps -p$(p_objcx)
+ dh_gencontrol -p$(p_objcx) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_objcx)
+ dh_md5sums -p$(p_objcx)
+ dh_builddeb -p$(p_objcx)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+$(binary_stamp)-objcxx-multi: $(install_stamp)
+ dh_testdir
+ dh_testroot
+ mv $(install_stamp) $(install_stamp)-tmp
+
+ rm -rf $(d_objcx_m)
+
+ debian/dh_doclink -p$(p_objcx_m) $(p_base)
+ debian/dh_rmemptydirs -p$(p_objcx_m)
+ dh_strip -p$(p_objcx_m)
+ dh_compress -p$(p_objcx_m)
+
+ dh_fixperms -p$(p_objcx_m)
+ dh_shlibdeps -p$(p_objcx_m)
+ dh_gencontrol -p$(p_objcx_m) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_objcx_m)
+ dh_md5sums -p$(p_objcx_m)
+ dh_builddeb -p$(p_objcx_m)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
diff --git a/debian/rules.d/binary-snapshot.mk b/debian/rules.d/binary-snapshot.mk
new file mode 100644
index 0000000..d02217f
--- /dev/null
+++ b/debian/rules.d/binary-snapshot.mk
@@ -0,0 +1,202 @@
+arch_binaries := $(arch_binaries) snapshot
+
+ifneq (,$(findstring gcc-snapshot, $(PKGSOURCE)))
+ p_snap = gcc-snapshot
+else ifneq (,$(findstring gcc-linaro, $(PKGSOURCE)))
+ p_snap = gcc-linaro
+else
+ $(error unknown build for single gcc package)
+endif
+
+ifeq ($(DEB_CROSS),yes)
+ p_snap := $(p_snap)$(cross_bin_arch)
+endif
+d_snap = debian/$(p_snap)
+
+dirs_snap = \
+ $(docdir)/$(p_snap) \
+ usr/lib
+
+ifeq ($(with_spu),yes)
+ snapshot_depends = binutils-spu
+ snapshot_recommends = newlib-spu
+endif
+ifeq ($(with_hppa64),yes)
+ snapshot_depends = binutils-hppa64
+endif
+
+$(stampdir)/ecj_binaries: $(install_snap_stamp)
+ mkdir -p $(builddir)/aot/jar $(builddir)/aot/bin
+ cp $(ecj_jar) $(builddir)/aot/jar/ecj-standalone.jar
+ zip -d $(builddir)/aot/jar/ecj-standalone.jar \
+ 'org/eclipse/jdt/core/JDTCompilerAdapter*'
+
+ cd $(builddir)/aot/jar \
+ && fastjar xf ecj-standalone.jar \
+ && find -name '*.rsc' -o -name '*.properties' \
+ | fastjar -c -@ - -f ../resources.jar
+ rm -rf $(builddir)/aot/jar/META-INF $(builddir)/aot/jar/org
+ $(d)/$(PF)/bin/gcj \
+ -c -O2 -g -fPIC -fjni -findirect-dispatch \
+ -o $(builddir)/aot/bin/resources.o $(builddir)/aot/resources.jar
+
+ cp $(srcdir)/libjava/contrib/classfile.py $(builddir)/aot/
+ cp $(buildlibdir)/libjava/contrib/*.py $(builddir)/aot/
+ grep -v '^sys.path.insert' $(buildlibdir)/libjava/contrib/aot-compile \
+ > $(builddir)/aot/aot-compile
+ chmod 755 $(builddir)/aot/aot-compile
+ patch -p1 < debian/patches/aotcompile.diff
+ LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}$(CURDIR)/$(d)/$(PF)/lib \
+ RPATH=-Wl,-rpath,/$(PF)/lib \
+ PYTHONPATH=$(builddir)/aot \
+ python $(builddir)/aot/aot-compile \
+ --gcj=$(CURDIR)/$(d)/$(PF)/bin/gcj \
+ --dbtool=$(CURDIR)/$(d)/$(PF)/bin/gcj-dbtool \
+ $(builddir)/aot/jar $(builddir)/aot/bin
+ touch $@
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-snapshot: $(install_snap_stamp) \
+ $(if $(filter $(with_ecj),yes),$(stampdir)/ecj_binaries)
+ dh_testdir
+ dh_testroot
+ mv $(install_snap_stamp) $(install_snap_stamp)-tmp
+
+ rm -rf $(d_snap)
+ dh_installdirs -p$(p_snap) $(dirs_snap)
+
+ mv $(d)/$(PF) $(d_snap)/usr/lib/
+
+ find $(d_snap) -name '*.gch' -type d | xargs -r rm -rf
+ find $(d_snap) -name '*.la' -o -name '*.lai' | xargs -r rm -f
+
+ rm -rf $(d_snap)/$(PF)/lib/nof
+ifeq ($(with_java),yes)
+ mv $(d)/usr/lib/jvm $(d_snap)/usr/lib/
+
+ dh_link -p$(p_snap) \
+ $(gcc_lib_dir)/include/gcj $(jvm_dir)/include/gcj \
+ usr/bin/ecj $(jvm_dir)/bin/javac
+
+ ifneq ($(DEB_TARGET_ARCH_CPU),$(java_cpu))
+ ln -sf $(java_cpu) $(d_snap)/$(jvm_dir)/jre/lib/$(DEB_TARGET_ARCH_CPU)
+ endif
+ ifeq ($(with_ecj),yes)
+ install -m755 $(builddir)/aot/bin/javac $(d_snap)/$(jvm_dir)/bin/javac
+ install -m755 $(builddir)/aot/bin/ecj1 $(d_snap)/$(gcc_lexec_dir)/ecj1
+
+ ifeq (./,$(dir $(ecj_jar)))
+ install -m 644 $(ecj_jar) $(d_snap)/$(jvm_dir)/lib/ecj.jar
+ else
+ dh_link -p$(p_snap) \
+ $(ecj_jar) $(jvm_dir)/lib/ecj.jar
+ endif
+ endif
+endif
+
+ifeq ($(with_ada),yes FIXME: apply our ada patches)
+ dh_link -p$(p_snap) \
+ $(gcc_lib_dir)/rts-sjlj/adalib/libgnat.a \
+ $(gcc_lib_dir)/rts-sjlj/adalib/libgnat-$(GNAT_VERSION).a
+ dh_link -p$(p_snap) \
+ $(gcc_lib_dir)/rts-sjlj/adalib/libgnarl.a \
+ $(gcc_lib_dir)/rts-sjlj/adalib/libgnarl-$(GNAT_VERSION).a
+
+ set -e; \
+ for lib in lib{gnat,gnarl}; do \
+ vlib=$$lib-$(GNAT_SONAME); \
+ mv $(d_snap)/$(gcc_lib_dir)/adalib/$$vlib.so.1 $(d_snap)/$(PF)/$(libdir)/. ; \
+ rm -f $(d_snap)/$(gcc_lib_dir)/adalib/$$lib.so.1; \
+ dh_link -p$(p_snap) \
+ /$(PF)/$(libdir)/$$vlib.so.1 /$(PF)/$(libdir)/$$vlib.so \
+ /$(PF)/$(libdir)/$$vlib.so.1 /$(PF)/$(libdir)/$$lib.so \
+ /$(PF)/$(libdir)/$$vlib.so.1 /$(gcc_lib_dir)/rts-native/adalib/$$lib.so; \
+ done
+endif
+ifeq ($(with_ada),yes)
+ ln -sf gcc $(d_snap)/$(PF)/bin/gnatgcc
+endif
+
+ifeq ($(with_hppa64),yes)
+ : # provide as and ld links
+ dh_link -p $(p_snap) \
+ /usr/bin/hppa64-linux-gnu-as \
+ /$(PF)/libexec/gcc/hppa64-linux-gnu/$(GCC_VERSION)/as \
+ /usr/bin/hppa64-linux-gnu-ld \
+ /$(PF)/libexec/gcc/hppa64-linux-gnu/$(GCC_VERSION)/ld
+endif
+
+# don't do this; would create a b-d on gcc-snapshot
+#ifeq ($(with_spu),yes)
+# dh_link -p $(p_snap) /usr/spu /$(PF)/spu
+#endif
+
+ifeq ($(with_check),yes)
+ dh_installdocs -p$(p_snap) test-summary
+ ifeq ($(with_pascal),yes)
+ cp -p gpc-test-summary $(d_snap)/$(docdir)/$(p_snap)/
+ endif
+else
+ dh_installdocs -p$(p_snap)
+endif
+ if [ -f $(buildlibdir)/libstdc++-v3/testsuite/current_symbols.txt ]; \
+ then \
+ cp -p $(buildlibdir)/libstdc++-v3/testsuite/current_symbols.txt \
+ $(d_snap)/$(docdir)/$(p_snap)/libstdc++6_symbols.txt; \
+ fi
+ cp -p debian/README.snapshot \
+ $(d_snap)/$(docdir)/$(p_snap)/README.Debian
+ cp -p debian/README.Bugs \
+ $(d_snap)/$(docdir)/$(p_snap)/
+ dh_installchangelogs -p$(p_snap)
+ifeq ($(DEB_TARGET_ARCH),hppa)
+ dh_strip -p$(p_snap) -Xdebug -X.o -X.a
+else
+ dh_strip -p$(p_snap) -Xdebug
+endif
+ dh_compress -p$(p_snap) -X README.Bugs
+ -find $(d_snap) -type d ! -perm 755 -exec chmod 755 {} \;
+ dh_fixperms -p$(p_snap)
+ifeq ($(with_ada),yes)
+ find $(d_snap)/$(gcc_lib_dir) -name '*.ali' | xargs -r chmod 444
+endif
+
+ mkdir -p $(d_snap)/usr/share/lintian/overrides
+ cp -p debian/gcc-snapshot.overrides \
+ $(d_snap)/usr/share/lintian/overrides/$(p_snap)
+
+ ( \
+ echo 'libgcc_s $(GCC_SONAME) ${p_snap} (>= $(DEB_VERSION))'; \
+ echo 'libobjc $(OBJC_SONAME) ${p_snap} (>= $(DEB_VERSION))'; \
+ echo 'libgfortran $(FORTRAN_SONAME) ${p_snap} (>= $(DEB_VERSION))'; \
+ echo 'libmudflap $(MUDFLAP_SONAME) ${p_snap} (>= $(DEB_VERSION))'; \
+ echo 'libmudflapth $(MUDFLAP_SONAME) ${p_snap} (>= $(DEB_VERSION))'; \
+ echo 'libffi $(FFI_SONAME) ${p_snap} (>= $(DEB_VERSION))'; \
+ echo 'libgcj $(GCJ_SONAME) ${p_snap} (>= $(DEB_VERSION))'; \
+ echo 'libgcj-tools $(GCJ_SONAME) ${p_snap} (>= $(DEB_VERSION))'; \
+ echo 'libgij $(GCJ_SONAME) ${p_snap} (>= $(DEB_VERSION))'; \
+ echo 'libgcj_bc 1 ${p_snap} (>= $(DEB_VERSION))'; \
+ echo 'libgomp $(GOMP_SONAME) ${p_snap} (>= $(DEB_VERSION))'; \
+ echo 'libgnat-$(GNAT_SONAME) 1 ${p_snap} (>= $(DEB_VERSION))'; \
+ echo 'libgnarl-$(GNAT_SONAME) 1 ${p_snap} (>= $(DEB_VERSION))'; \
+ ) > debian/shlibs.local
+
+ DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) \
+ dh_shlibdeps -p$(p_snap) -l$(CURDIR)/$(d_snap)/$(PF)/lib:$(CURDIR)/$(d_snap)/$(PF)/$(if $(filter $(DEB_TARGET_ARCH),amd64 ppc64),lib32,lib64):/usr/$(DEB_TARGET_GNU_TYPE)/lib -Xlibgcj-tools -Xlibmudflap
+ -sed -i -e 's/$(p_snap)[^,]*, //g' debian/$(p_snap).substvars
+
+ifeq ($(with_multiarch_lib),yes)
+ : # paths needed for relative lookups from startfile_prefixes
+ for ma in $(xarch_multiarch_names); do \
+ mkdir -p $(d_snap)/lib/$$ma; \
+ mkdir -p $(d_snap)/usr/lib/$$ma; \
+ done
+endif
+
+ dh_gencontrol -p$(p_snap) -- $(common_substvars) \
+ '-Vsnap:depends=$(snapshot_depends)' '-Vsnap:recommends=$(snapshot_recommends)'
+ dh_installdeb -p$(p_snap)
+ dh_md5sums -p$(p_snap)
+ dh_builddeb -p$(p_snap)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_snap_stamp)-tmp $(install_snap_stamp)
diff --git a/debian/rules.d/binary-softfloat.mk b/debian/rules.d/binary-softfloat.mk
new file mode 100644
index 0000000..e572914
--- /dev/null
+++ b/debian/rules.d/binary-softfloat.mk
@@ -0,0 +1,36 @@
+arch_binaries := $(arch_binaries) softfloat
+
+p_softfloat = gcc$(pkg_ver)-soft-float
+d_softfloat = debian/$(p_softfloat)
+
+dirs_softfloat = \
+ $(PFL)/$(libdir) \
+ $(gcc_lib_dir)
+
+files_softfloat = \
+ $(PFL)/$(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)
+ rm -rf $(d_softfloat)/$(PFL)/$(libdir)/soft-float/libssp.so*
+ mv $(d_softfloat)/$(PFL)/$(libdir)/soft-float/libssp.a \
+ $(d_softfloat)/$(PFL)/$(libdir)/soft-float/libssp_nonshared.a
+ 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)
diff --git a/debian/rules.d/binary-source.mk b/debian/rules.d/binary-source.mk
new file mode 100644
index 0000000..61307c2
--- /dev/null
+++ b/debian/rules.d/binary-source.mk
@@ -0,0 +1,53 @@
+indep_binaries := $(indep_binaries) gcc-source
+
+ifeq ($(BACKPORT),true)
+ p_source = gcc$(pkg_ver)-$(GCC_VERSION)-source
+else
+ p_source = gcc$(pkg_ver)-source
+endif
+d_source= debian/$(p_source)
+
+$(binary_stamp)-gcc-source:
+ dh_testdir
+ dh_testroot
+
+ dh_installdocs -p$(p_source)
+ dh_installchangelogs -p$(p_source)
+
+ dh_install -p$(p_source) $(gcc_tarball) usr/src/gcc$(pkg_ver)
+# dh_install -p$(p_source) $(gcj_tarball) usr/src/gcc$(pkg_ver)
+ tar cf - $$(find './debian' -mindepth 1 \( \
+ -name .svn -prune -o \
+ -path './debian/gcc-*' -type d -prune -o \
+ -path './debian/cpp-*' -type d -prune -o \
+ -path './debian/*fortran*' -type d -prune -o \
+ -path './debian/lib*' -type d -prune -o \
+ -path './debian/patches/*' -prune -o \
+ -path './debian/tmp*' -prune -o \
+ -path './debian/files' -prune -o \
+ -path './debian/rules.d/*' -prune -o \
+ -path './debian/soname-cache' -prune -o \
+ -path './debian/*substvars*' -prune -o \
+ -path './debian/gcc-snapshot*' -prune -o \
+ -path './debian/*[0-9]*.p*' -prune -o \
+ -path './debian/*$(pkg_ver)[.-]*' -prune -o \
+ -print \) ) \
+ | tar -x -C $(d_source)/usr/src/gcc$(pkg_ver) -f -
+ # FIXME: Remove generated files
+ find $(d_source)/usr/src/gcc$(pkg_ver) -name '*.debhelper.log' -o -name .svn | xargs rm -rf
+
+ dh_link -p$(p_source) \
+ /usr/src/gcc$(pkg_ver)/debian/patches /usr/src/gcc$(pkg_ver)/patches
+
+ mkdir -p $(d_source)/usr/share/lintian/overrides
+ cp -p debian/$(p_source).overrides \
+ $(d_source)/usr/share/lintian/overrides/$(p_source)
+
+ dh_fixperms -p$(p_source)
+ dh_compress -p$(p_source)
+ dh_gencontrol -p$(p_source) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_source)
+ dh_md5sums -p$(p_source)
+ dh_builddeb -p$(p_source)
+
+ touch $@
diff --git a/debian/rules.d/binary-spu.mk b/debian/rules.d/binary-spu.mk
new file mode 100644
index 0000000..3d4c9b6
--- /dev/null
+++ b/debian/rules.d/binary-spu.mk
@@ -0,0 +1,162 @@
+arch_binaries := $(arch_binaries) spu spu-cxx spu-fortran
+
+p_spugcc = gcc$(pkg_ver)-spu
+p_spucxx = g++$(pkg_ver)-spu
+p_spuf95 = gfortran$(pkg_ver)-spu
+
+d_spugcc = debian/$(p_spugcc)
+d_spucxx = debian/$(p_spucxx)
+d_spuf95 = debian/$(p_spuf95)
+
+dirs_spugcc = \
+ $(PF)/bin \
+ $(gcc_spu_lexec_dir) \
+ $(gcc_spu_lib_dir) \
+
+files_spugcc = \
+ $(PF)/bin/spu-{cpp,gcc}$(pkg_ver) \
+ $(gcc_spu_lexec_dir)/{cc1,collect2,lto1,lto-wrapper} \
+ $(gcc_spu_lexec_dir)/liblto_plugin.so{,.0,.0.0.0} \
+ $(gcc_spu_lib_dir)/{include,include-fixed} \
+ $(gcc_spu_lib_dir)/{libgcc.a,libgcov.a,crtbegin.o,crtend.o} \
+
+ifeq ($(with_spucache),yes)
+ files_spugcc += \
+ $(gcc_spu_lib_dir)/libgcc_cache*.a
+ ifeq ($(with_spumea64),yes)
+ files_spugcc += \
+ $(gcc_spu_lib_dir)/mea64/libgcc_cache*.a
+ endif
+endif
+ifeq ($(with_spumea64),yes)
+ files_spugcc += \
+ $(gcc_spu_lib_dir)/mea64/{libgcc.a,libgcov.a,crtbegin.o,crtend.o}
+endif
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ files_spugcc += \
+ $(PF)/share/man/man1/spu-{cpp,gcc}$(pkg_ver).1
+endif
+
+dirs_spucxx = \
+ $(PF)/bin \
+ $(gcc_spu_lexec_dir) \
+ $(gcc_spu_lib_dir) \
+
+files_spucxx = \
+ $(PF)/bin/spu-g++$(pkg_ver) \
+ $(gcc_spu_lexec_dir)/cc1plus \
+ $(PF)/spu/include/c++ \
+ $(PF)/spu/lib/{libsupc++,libstdc++}.a \
+
+ifeq ($(with_spumea64),yes)
+ files_spucxx += \
+ $(PF)/spu/lib/mea64/{libsupc++,libstdc++}.a
+endif
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ files_spucxx += \
+ $(PF)/share/man/man1/spu-g++$(pkg_ver).1
+endif
+
+dirs_spuf95 = \
+ $(PF)/bin \
+ $(gcc_spu_lexec_dir) \
+ $(gcc_spu_lib_dir) \
+
+files_spuf95 = \
+ $(PF)/bin/spu-gfortran$(pkg_ver) \
+ $(gcc_spu_lexec_dir)/f951 \
+ $(gcc_spu_lib_dir)/finclude \
+ $(gcc_spu_lib_dir)/libgfortran.spec \
+ $(gcc_spu_lib_dir)/libgfortranbegin.a \
+ $(PF)/spu/lib/libgfortran.a \
+
+ifeq ($(with_spumea64),yes)
+ files_spuf95 += \
+ $(gcc_spu_lib_dir)/mea64/libgfortranbegin.a \
+ $(PF)/spu/lib/mea64/libgfortran.a
+endif
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ files_spuf95 += \
+ $(PF)/share/man/man1/spu-gfortran$(pkg_ver).1
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-spu: $(install_spu_stamp)
+ dh_testdir
+ dh_testroot
+
+ mv $(install_spu_stamp) $(install_spu_stamp)-tmp
+
+ dh_installdirs -p$(p_spugcc) $(dirs_spugcc)
+ DH_COMPAT=2 dh_movefiles --sourcedir=$(d_spu) -p$(p_spugcc) $(files_spugcc)
+
+ debian/dh_doclink -p$(p_spugcc) $(p_base)
+ debian/dh_rmemptydirs -p$(p_spugcc)
+
+ -dh_strip -p$(p_spugcc) -X.o -Xlibgcc.a -Xlibgcov.a
+ dh_compress -p$(p_spugcc)
+ dh_fixperms -p$(p_spugcc)
+ dh_shlibdeps -p$(p_spugcc)
+ dh_gencontrol -p$(p_spugcc) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_spugcc)
+ dh_md5sums -p$(p_spugcc)
+ dh_builddeb -p$(p_spugcc)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_spu_stamp)-tmp $(install_spu_stamp)
+
+$(binary_stamp)-spu-cxx: $(install_spu_stamp)
+ dh_testdir
+ dh_testroot
+
+ mv $(install_spu_stamp) $(install_spu_stamp)-tmp
+
+ dh_installdirs -p$(p_spucxx) $(dirs_spucxx)
+ DH_COMPAT=2 dh_movefiles --sourcedir=$(d_spu) -p$(p_spucxx) $(files_spucxx)
+
+ ln -sf $(BASE_VERSION) $(d_spucxx)/usr/spu/include/c++/$(GCC_VERSION)
+
+ debian/dh_doclink -p$(p_spucxx) $(p_base)
+ debian/dh_rmemptydirs -p$(p_spucxx)
+
+ -dh_strip -p$(p_spucxx)
+ dh_compress -p$(p_spucxx)
+ dh_fixperms -p$(p_spucxx)
+ dh_shlibdeps -p$(p_spucxx)
+ dh_gencontrol -p$(p_spucxx) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_spucxx)
+ dh_md5sums -p$(p_spucxx)
+ dh_builddeb -p$(p_spucxx)
+
+ trap '' 1 2 3 15; touch $@; mv $(install_spu_stamp)-tmp $(install_spu_stamp)
+
+$(binary_stamp)-spu-fortran: $(install_spu_stamp)
+ dh_testdir
+ dh_testroot
+
+ mv $(install_spu_stamp) $(install_spu_stamp)-tmp
+
+ dh_installdirs -p$(p_spuf95) $(dirs_spuf95)
+ mv $(d_spu)/$(PF)/spu/lib/libgfortran.spec $(d_spu)/$(gcc_spu_lib_dir)/
+
+ DH_COMPAT=2 dh_movefiles --sourcedir=$(d_spu) -p$(p_spuf95) $(files_spuf95)
+
+ debian/dh_doclink -p$(p_spuf95) $(p_base)
+ debian/dh_rmemptydirs -p$(p_spuf95)
+
+ -dh_strip -p$(p_spuf95)
+ dh_compress -p$(p_spuf95)
+ dh_fixperms -p$(p_spuf95)
+ dh_shlibdeps -p$(p_spuf95)
+ dh_gencontrol -p$(p_spuf95) -- -v$(DEB_VERSION) $(common_substvars)
+ dh_installdeb -p$(p_spuf95)
+ dh_md5sums -p$(p_spuf95)
+ dh_builddeb -p$(p_spuf95)
+
+ @echo "Listing installed files not included in any package:"
+ -find $(d_spu) ! -type d
+
+ trap '' 1 2 3 15; touch $@; mv $(install_spu_stamp)-tmp $(install_spu_stamp)
+ touch $@
diff --git a/debian/rules.defs b/debian/rules.defs
new file mode 100644
index 0000000..c37aaa5
--- /dev/null
+++ b/debian/rules.defs
@@ -0,0 +1,1366 @@
+# -*- makefile -*-
+# definitions used in more than one Makefile / rules file
+
+# common vars
+SHELL = /bin/bash -e # brace expansion used in rules file
+PWD := $(shell pwd)
+srcdir = $(PWD)/src
+builddir = $(PWD)/build
+stampdir = stamps
+
+distribution := $(shell lsb_release -is)
+distrelease := $(shell lsb_release -cs)
+
+# On non official archives, "lsb_release -cs" default to "n/a". Assume
+# sid in that case
+ifeq ($(distrelease),n/a)
+distrelease := sid
+endif
+
+on_buildd := $(shell [ -f /CurrentlyBuilding -o "$$LOGNAME" = buildd ] && echo yes)
+
+# creates {srcdir,builddir}_{hppa64,neon,spu}
+$(foreach x,srcdir builddir,$(foreach target,hppa64 spu neon,$(eval \
+ $(x)_$(target) := $($(x))-$(target))))
+
+# for architecture dependent variables and changelog vars
+vafilt = $(subst $(2)=,,$(filter $(2)=%,$(1)))
+# for rules.sonames
+vafilt_defined = 1
+
+DPKG_VARS := $(shell dpkg-architecture)
+DEB_BUILD_GNU_TYPE ?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_GNU_TYPE)
+DEB_HOST_ARCH ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH)
+DEB_HOST_GNU_CPU ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_CPU)
+DEB_HOST_GNU_SYSTEM ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_SYSTEM)
+DEB_HOST_GNU_TYPE ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_TYPE)
+DEB_HOST_MULTIARCH ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_MULTIARCH)
+
+CHANGELOG_VARS := $(shell dpkg-parsechangelog | \
+ sed -n 's/ /_/g;/^[^_]/s/^\([^:]*\):_\(.*\)/\1=\2/p')
+
+# the name of the source package
+PKGSOURCE := $(call vafilt,$(CHANGELOG_VARS),Source)
+# those are required here too
+SOURCE_VERSION := $(call vafilt,$(CHANGELOG_VARS),Version)
+DEB_VERSION := $(strip $(shell echo $(SOURCE_VERSION) | \
+ sed -e 's/.*://' -e 's/ds[0-9]*//'))
+# epoch used for gcc versions up to 3.3.x, now used for some remaining
+# libraries: libgcc1, libobjc1
+EPOCH := 1
+DEB_EVERSION := $(EPOCH):$(DEB_VERSION)
+BASE_VERSION := $(shell echo $(DEB_VERSION) | sed -e 's/\([1-9]\.[0-9]\).*-.*/\1/')
+
+ifneq (,$(findstring gdc,$(PKGSOURCE)))
+ BASE_VERSION := $(shell echo $(DEB_VERSION) | sed -e 's/.*-\([1-9]\.[0-9]\).*-.*/\1/')
+endif
+
+# push glibc stack traces into stderr
+export LIBC_FATAL_STDERR_=1
+
+# ---------------------------------------------------------------------------
+# set target
+# - GNU triplet via DEB_TARGET_GNU_TYPE
+# - Debian arch in debian/target
+# - Debian arch via DEB_GCC_TARGET or GCC_TARGET
+#
+# alias
+ifdef GCC_TARGET
+ DEB_GCC_TARGET := $(GCC_TARGET)
+endif
+ifdef DEB_TARGET_GNU_TYPE
+ TARGET_VARS := $(shell dpkg-architecture -f -t$(DEB_TARGET_GNU_TYPE) 2>/dev/null)
+else
+ # allow debian/target to be used instead of DEB_GCC_TARGET - this was requested
+ # by toolchain-source maintainer
+ DEBIAN_TARGET_FILE := $(strip $(if $(wildcard debian/target),$(shell cat debian/target 2>/dev/null)))
+ ifndef DEB_TARGET_ARCH
+ ifneq (,$(DEBIAN_TARGET_FILE))
+ DEB_TARGET_ARCH := $(DEBIAN_TARGET_FILE)
+ else
+ ifdef DEB_GCC_TARGET
+ DEB_TARGET_ARCH := $(DEB_GCC_TARGET)
+ else
+ DEB_TARGET_ARCH := $(DEB_HOST_ARCH)
+ endif
+ endif
+ endif
+ TARGET_VARS := $(shell dpkg-architecture -f -a$(DEB_TARGET_ARCH) 2>/dev/null)
+endif
+
+DEB_TARGET_ARCH ?= $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH)
+DEB_TARGET_ARCH_OS ?= $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH_OS)
+DEB_TARGET_ARCH_CPU ?= $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH_CPU)
+DEB_TARGET_GNU_CPU ?= $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_CPU)
+DEB_TARGET_GNU_TYPE ?= $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_TYPE)
+DEB_TARGET_GNU_SYSTEM ?= $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_SYSTEM)
+DEB_TARGET_MULTIARCH ?= $(call vafilt,$(TARGET_VARS),DEB_HOST_MULTIARCH)
+
+ifeq ($(DEB_TARGET_ARCH),)
+ $(error Invalid architecure.)
+endif
+
+# including unversiond symlinks for binaries
+#with_unversioned = yes
+
+# ---------------------------------------------------------------------------
+# cross-compiler config
+# - typical cross-compiler
+# - reverse cross (built to run on the target)
+# - full canadian
+# - native
+#
+# build != host && host == target : reverse cross (REVERSE_CROSS == yes)
+# build == host && host != target : typical cross (DEB_CROSS == yes)
+# build != host && host != target : canadian (DEB_CROSS == yes)
+# build == host && host == target : native
+ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
+ ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_TARGET_GNU_TYPE))
+ DEB_CROSS = yes
+ else
+ REVERSE_CROSS = yes
+ endif
+else
+ ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_TARGET_GNU_TYPE))
+ DEB_CROSS = yes
+ else
+ # first ones are squeeze+1 and maverick
+ ifeq (,$(filter $(distrelease),lenny etch squeeze sid dapper hardy jaunty karmic lucid))
+ with_sysroot = /
+ endif
+ endif
+endif
+
+# ---------------------------------------------------------------------------
+# cross compiler support
+ifeq ($(DEB_CROSS),yes)
+ # TARGET: Alias to DEB_TARGET_ARCH (Debian arch name)
+ # TP: Target Prefix. Used primarily as a prefix for cross tool
+ # names (e.g. powerpc-linux-gcc).
+ # TS: Target Suffix. Used primarily at the end of cross compiler
+ # package names (e.g. gcc-powerpc).
+ # LS: Library Suffix. Used primarily at the end of cross compiler
+ # library package names (e.g. libgcc-powerpc-cross).
+ DEB_TARGET_ALIAS ?= $(DEB_TARGET_GNU_TYPE)
+ TARGET := $(DEB_TARGET_ARCH)
+ TP := $(subst _,-,$(DEB_TARGET_GNU_TYPE))-
+ TS := -$(subst _,-,$(DEB_TARGET_ALIAS))
+ LS := -$(subst _,-,$(DEB_TARGET_ARCH))-cross
+
+ cross_bin_arch := -$(subst _,-,$(DEB_TARGET_ALIAS))
+ cross_lib_arch := -$(subst _,-,$(DEB_TARGET_ARCH))-cross
+ cmd_prefix := $(DEB_TARGET_GNU_TYPE)-
+
+ TARGET_ALIAS := $(DEB_TARGET_ALIAS)
+
+ lib_binaries := indep_binaries
+ cross_shlibdeps = $(SET_CROSS_LIB_PATH) ARCH=$(DEB_TARGET_ARCH) MAKEFLAGS="CC=something"
+else
+ TARGET_ALIAS := $(DEB_TARGET_GNU_TYPE)
+
+ ifeq ($(TARGET_ALIAS),i386-gnu)
+ TARGET_ALIAS := i586-gnu
+ endif
+
+ cmd_prefix :=
+
+ #ifeq ($(TARGET_ALIAS),i486-linux-gnu)
+ # TARGET_ALIAS := i686-linux-gnu
+ #endif
+
+ TARGET_ALIAS := $(subst i386,i486,$(TARGET_ALIAS))
+
+ # configure as linux-gnu, not linux
+ #ifeq ($(findstring linux,$(TARGET_ALIAS))/$(findstring linux-gnu,$(TARGET_ALIAS)),linux/)
+ # TARGET_ALIAS := $(TARGET_ALIAS)-gnu
+ #endif
+
+ # configure as linux, not linux-gnu
+ #TARGET_ALIAS := $(subst linux-gnu,linux,$(TARGET_ALIAS))
+
+ lib_binaries := arch_binaries
+ cross_shlibdeps :=
+endif
+
+printarch:
+ @echo DEB_TARGET_ARCH: $(DEB_TARGET_ARCH)
+ @echo DEB_TARGET_ARCH_OS: $(DEB_TARGET_ARCH_OS)
+ @echo DEB_TARGET_ARCH_CPU: $(DEB_TARGET_ARCH_CPU)
+ @echo DEB_TARGET_GNU_SYSTEM: $(DEB_TARGET_GNU_SYSTEM)
+ @echo DEB_TARGET_MULTIARCH: $(DEB_TARGET_MULTIARCH)
+ @echo MULTIARCH_CONFARG: $(MULTIARCH_CONFARG)
+ @echo TARGET_ALIAS: $(TARGET_ALIAS)
+ @echo TP: $(TP)
+ @echo TS: $(TS)
+
+# -------------------------------------------------------------------
+# bootstrap options
+ifdef WITH_BOOTSTRAP
+ # "yes" is the default and causes a 3-stage bootstrap.
+ # "off" runs a complete build with --disable-bootstrap
+ # "no" means to just build the first stage, and not create the stage1
+ # directory.
+ # "lean" means a lean 3-stage bootstrap, i.e. delete each stage when no
+ # longer needed.
+ with_bootstrap = $(WITH_BOOTSTRAP)
+endif
+ifneq ($(findstring nostrap, $(DEB_BUILD_OPTIONS)),)
+ with_bootstrap := off
+endif
+
+# -------------------------------------------------------------------
+# stage options
+ifdef DEB_STAGE
+ with_cdev := yes
+ separate_lang := yes
+ # "stage1" is minimal compiler with static libgcc
+ # "stage2" is minimal compiler with shared libgcc
+ ifeq ($(DEB_STAGE),stage1)
+ with_shared_libgcc := no
+ endif
+ ifeq ($(DEB_STAGE),stage2)
+ with_libgcc := yes
+ with_shared_libgcc := yes
+ endif
+endif
+
+ifeq ($(BACKPORT),true)
+ with_dev := no
+ with_source := yes
+ with_base_only := yes
+endif
+
+# -------------------------------------------------------------------
+# sysroot options
+ifdef WITH_SYSROOT
+ with_sysroot = $(WITH_SYSROOT)
+endif
+ifdef WITH_BUILD_SYSROOT
+ with_build_sysroot = $(WITH_BUILD_SYSROOT)
+endif
+
+# -------------------------------------------------------------------
+# for components configuration
+
+COMMA = ,
+SPACE = $(EMPTY) $(EMPTY)
+
+# lang= overwrites all of nolang=, overwrites all of WITHOUT_LANG
+
+DEB_LANG_OPT := $(filter lang=%,$(DEB_BUILD_OPTIONS))
+DEB_LANG := $(strip $(subst $(COMMA), ,$(patsubst lang=%,%,$(DEB_LANG_OPT))))
+DEB_NOLANG_OPT := $(filter nolang=%,$(DEB_BUILD_OPTIONS))
+DEB_NOLANG := $(strip $(subst $(COMMA), ,$(patsubst nolang=%,%,$(DEB_NOLANG_OPT))))
+lfilt = $(strip $(if $(DEB_LANG), \
+ $(if $(filter $(1) $(2),$(DEB_LANG)),yes),$(3)))
+nlfilt = $(strip $(if $(DEB_NOLANG), \
+ $(if $(filter $(1) $(2),$(DEB_NOLANG)),disabled by $(DEB_NOLANG_OPT),$(3))))
+wlfilt = $(strip $(if $(filter $(1) $(2), $(subst $(COMMA), ,$(WITHOUT_LANG))), \
+ disabled by WITHOUT_LANG=$(WITHOUT_LANG),$(3)))
+envfilt = $(strip $(or $(call lfilt,$(1),$(2)),$(call nlfilt,$(1),$(3)),$(call wlfilt,$(1),$(3)),$(4)))
+
+# -------------------------------------------------------------------
+# architecture specific config
+
+# FIXME: libjava is not ported for thumb, this hack only works for
+# separate gcj builds
+ifeq (,$(findstring gcj,$(PKGSOURCE)))
+ ifeq ($(distribution),Ubuntu)
+ with_arm_thumb := yes
+ endif
+ ifeq ($(DEB_TARGET_ARCH),armhf)
+ with_arm_thumb := yes
+ endif
+endif
+
+# build using fsf or linaro
+ifeq ($(distribution),Ubuntu)
+ ifeq (,$(findstring gnat, $(PKGSOURCE)))
+ ifneq (,$(findstring $(DEB_TARGET_ARCH),armel armhf amd64 i386 powerpc))
+ with_linaro_branch = yes
+ endif
+ endif
+endif
+
+# check if we're building for armel or armhf
+ifeq ($(DEB_TARGET_ARCH),armhf)
+ float_abi := hard
+else ifneq (,$(filter $(distribution)-$(DEB_TARGET_ARCH), Ubuntu-armel))
+ float_abi := softfp
+else ifneq (,$(filter $(DEB_TARGET_ARCH), arm armel))
+ float_abi := soft
+endif
+
+# -------------------------------------------------------------------
+# basic config
+
+# common things ---------------
+# build common packages, where package names don't differ in different
+# gcc versions (fixincludes, libgcj-common) ...
+with_common_pkgs := yes
+# ... and some libraries, which do not change (libgcc1, libmudflap, libssp0).
+with_common_libs := yes
+# XXX: should with_common_libs be "yes" only if this is the default compiler
+# version on the targeted arch?
+
+# is this a multiarch-enabled build?
+ifeq (,$(filter $(distrelease),lenny etch squeeze dapper hardy jaunty karmic lucid maverick))
+ with_multiarch_lib := yes
+endif
+
+ifeq (,$(filter $(distrelease),lenny etch squeeze dapper hardy jaunty karmic lucid maverick))
+ multiarch_stage1 := yes
+endif
+
+# mapping for the non-default biarch multilib / multiarch names
+multiarch_xarch_map = \
+ amd64=i386-linux-gnu \
+ armel=arm-linux-gnueabi \
+ armhf=arm-linux-gnueabihf \
+ i386=x86_64-linux-gnu \
+ powerpc=powerpc64-linux-gnu \
+ ppc64=powerpc-linux-gnu \
+ sparc=sparc64-linux-gnu \
+ sparc64=sparc-linux-gnu \
+ s390=s390x-linux-gnu \
+ s390x=s390-linux-gnu \
+ mips=mips64-linux-gnuabin32,mips64-linux-gnuabi64 \
+ mipsel=mips64el-linux-gnuabin32,mips64el-linux-gnuabi64 \
+ kfreebsd-amd64=i386-kfreebsd-gnu
+xarch_multiarch_names = $(subst $(COMMA),$(SPACE),$(patsubst $(DEB_TARGET_ARCH)=%,%, \
+ $(filter $(DEB_TARGET_ARCH)=%,$(multiarch_xarch_map))))
+
+ifneq ($(DEB_STAGE),stage1)
+ # build a -base package.
+ ifneq ($(DEB_CROSS),yes)
+ with_gccbase := yes
+ else
+ with_gccxbase := yes
+ endif
+endif
+
+# build dev packages.
+with_dev := yes
+
+with_cpp := yes
+
+# set lang when built from a different source package.
+separate_lang := no
+
+ifneq (,$(findstring gcc-snapshot, $(PKGSOURCE)))
+ single_package = yes
+ trunk_build = yes
+else ifneq (,$(findstring gcc-linaro, $(PKGSOURCE)))
+ single_package = yes
+ trunk_build = no
+else
+ # --program-suffix=-$(BASE_VERSION)
+ versioned_packages := yes
+endif
+
+#no_dummy_cpus := ia64 i386 hppa s390 sparc
+#ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(no_dummy_cpus)))
+# with_base_only := no
+# with_common_libs := yes
+# with_common_pkgs := yes
+#else
+# with_base_only := yes
+# with_common_libs := no
+# with_common_pkgs := no
+# with_dev := no
+#endif
+
+ifeq ($(versioned_packages),yes)
+ pkg_ver := -$(BASE_VERSION)
+ PV := $(pkg_ver)
+endif
+
+# -------------------------------------------------------------------
+# configure languages
+
+# C ---------------------------
+enabled_languages := c
+
+# Build all packages needed for C development
+ifneq ($(with_base_only),yes)
+ ifeq ($(with_dev),yes)
+ with_cdev := yes
+ endif
+endif
+
+ifndef DEB_STAGE
+# Ada --------------------
+ada_no_cpus := m32r m68k sh3 sh3eb sh4 sh4eb
+ada_no_systems := gnu knetbsd-gnu
+ada_no_cross := yes
+ada_no_snap := no
+ifneq (,$(filter $(DEB_TARGET_ARCH),armhf m68k powerpcspe sh4 sparc64))
+ ada_no_snap := yes
+endif
+
+ifeq ($(with_dev),yes)
+ ifneq ($(separate_lang),yes)
+ with_ada := yes
+ endif
+endif
+ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(ada_no_cpus)))
+ with_ada := disabled for cpu $(DEB_TARGET_ARCH_CPU)
+endif
+ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(ada_no_systems)))
+ with_ada := disabled for system $(DEB_TARGET_GNU_SYSTEM)
+endif
+ifeq ($(ada_no_cross)-$(DEB_CROSS),yes-yes)
+ with_ada := disabled for cross compiler package
+endif
+ifeq ($(ada_no_snap)-$(single_package),yes-yes)
+ with_ada := disabled for snapshot build
+endif
+with_ada := $(call envfilt, ada, , , $(with_ada))
+
+ifneq ($(single_package),yes)
+ with_separate_gnat := yes
+endif
+ifeq ($(with_ada)-$(with_separate_gnat),yes-yes)
+ ifneq (,$(findstring gnat,$(PKGSOURCE)))
+ languages := c
+ separate_lang := yes
+ else
+ debian_extra_langs += ada
+ with_ada := built from separate source
+ with_libgnat := built from separate source
+ endif
+endif
+
+ifeq ($(with_ada),yes)
+ enabled_languages += ada
+ with_libgnat := yes
+ # There are two exception handling mechanisms: ZCX (Zero-Cost
+ # eXceptions) and SJLJ (setjump/longjump), selected and supported by
+ # libgnat. Thus we build both versions of libgnat on architectures
+ # that support both (see ada-sjlj.diff). Most cpus support both
+ # mechanisms; here, we declare the few that support only one.
+ libgnat_zcx_only_cpus :=
+ libgnat_sjlj_only_cpus := arm armel armhf
+ ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(libgnat_sjlj_only_cpus)))
+ with_gnat_zcx := no
+ else
+ with_gnat_zcx := yes
+ endif
+ ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(libgnat_zcx_only_cpus)))
+ with_gnat_sjlj := no
+ else
+ with_gnat_sjlj := yes
+ endif
+ ifeq ($(with_gnat_zcx)-$(with_gnat_sjlj),no-no)
+ # TODO: support cpus that do not support exceptions at all,
+ # perhaps by building a restricted runtime library? For now, flag
+ # this as a packaging error.
+ $(error this target supports neither ZCX nor SJLJ)
+ endif
+endif
+
+# C++ -------------------------
+cxx_no_cpus := avr
+ifneq ($(with_base_only),yes)
+ ifneq ($(separate_lang),yes)
+ with_cxx := yes
+ endif
+endif
+ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(cxx_no_cpus)))
+ with_cxx := disabled for cpu $(DEB_TARGET_ARCH_CPU)
+endif
+with_cxx := $(call envfilt, c++, obj-c++ java, , $(with_cxx))
+
+# Build all packages needed for C++ development
+ifeq ($(with_cxx),yes)
+ ifeq ($(with_dev),yes)
+ with_cxxdev := yes
+ with_libcxxdbg := yes
+ endif
+ ifeq ($(with_common_pkgs),yes)
+ with_libcxx := yes
+ endif
+
+ # debugging versions of libstdc++
+ ifeq ($(with_cxxdev),yes)
+ with_debug := yes
+ debug_no_cpus :=
+ ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(debug_no_cpus)))
+ with_debug := disabled for cpu $(DEB_TARGET_GNU_CPU)
+ endif
+ endif
+ with_debug := $(call envfilt, debug, , , $(with_debug))
+
+ enabled_languages += c++
+endif
+
+# Java --------------------
+# - To build a standalone gcj package (with no corresponding gcc
+# package): with_separate_libgcj=yes, with_standalone_gcj=yes
+# - To build the java packages from the gcc source package:
+# with_separate_libgcj=no, with_standalone_gcj=no
+# - To build gcc and java from separate sources:
+# with_separate_libgcj=yes, with_standalone_gcj=no
+
+java_no_cpus := # mips mipsel
+java_no_systems := knetbsd-gnu
+java_no_cross := yes
+
+ifneq ($(single_package),yes)
+ with_separate_libgcj := yes
+endif
+with_standalone_gcj := no
+
+ifneq ($(separate_lang),yes)
+ with_java := yes
+endif
+
+# java converted for V3 C++ ABI for some archs
+ifeq ($(with_base_only),yes)
+ with_java := no
+endif
+ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(java_no_cpus)))
+ with_java := disabled for cpu $(DEB_TARGET_ARCH_CPU)
+endif
+ifneq (,$(filter $(DEB_TARGET_GNU_SYSTEM),$(java_no_systems)))
+ with_java := disabled for system $(DEB_TARGET_GNU_SYSTEM)
+endif
+ifeq ($(java_no_cross)-$(DEB_CROSS),yes-yes)
+ with_java := diasbled for cross compiler package
+endif
+with_java := $(call envfilt, java, , c++, $(with_java))
+
+ifeq ($(with_java)-$(with_separate_libgcj),yes-yes)
+ ifneq (,$(findstring gcj, $(PKGSOURCE)))
+ languages := c c++
+ separate_lang := yes
+ else
+ debian_extra_langs += java
+ with_java := built from separate source
+ with_gcj := built from separate source
+ with_libgcj := buit from separate source
+ endif
+endif
+
+with_java_plugin := no
+
+ifeq ($(with_java),yes)
+ # use the same names as OpenJDK
+ java_cpu_map = armel=arm armhf=arm hppa=parisc i686=i386 i586=i386 i486=i386 mipsel=mips powerpc=ppc sh4=sh
+ java_cpu = $(patsubst $(DEB_TARGET_ARCH_CPU)=%,%, \
+ $(filter $(DEB_TARGET_ARCH_CPU)=%,$(java_cpu_map)))
+ ifeq (,$(java_cpu))
+ java_cpu = $(DEB_TARGET_ARCH_CPU)
+ endif
+ java_priority = 10$(subst .,,$(BASE_VERSION))
+
+ with_libgcj := yes
+ with_libgcjbc := no
+
+ ifneq (,$(findstring gcj-4,$(PKGSOURCE)))
+ ifneq (,$(filter $(DEB_TARGET_ARCH), arm))
+ with_gcj_base_only := yes
+ endif
+ endif
+
+ ifeq ($(single_package),yes)
+ with_ecj := yes
+ endif
+
+ #ifneq (,$(filter $(DEB_TARGET_ARCH),hppa))
+ # with_native_ecj := yes
+ #endif
+
+ with_java_maintainer_mode := no
+
+ # used as well in debian/rules.conf to determine the build deps
+ java_awt_peers = gtk # qt # xlib
+
+ ifeq ($(with_common_libs),yes)
+ with_libgcj_doc := yes
+ endif
+
+ # Build all packages needed for Java development (gcj, libgcj-dev)
+ ifeq ($(with_dev),yes)
+ with_javadev := yes
+ with_gcj := yes
+ endif
+
+ with_java_alsa := yes
+ ifeq (,$(filter $(DEB_TARGET_GNU_SYSTEM),linux-gnu))
+ with_java_alsa := no
+ endif
+
+ enabled_languages += java
+endif
+
+# D ---------------------------
+d_no_cross := yes
+d_no_snap := yes
+
+ifneq ($(single_package),yes)
+ with_separate_gdc := yes
+endif
+
+ifneq ($(separate_lang),yes)
+ with_d := yes
+endif
+ifeq ($(d_no_snap)-$(single_package),yes-yes)
+ with_d := disabled for snapshot build
+endif
+
+ifeq ($(with_d)-$(with_separate_gdc),yes-yes)
+ ifneq (,$(findstring gdc,$(PKGSOURCE)))
+ languages := c c++
+ separate_lang := yes
+ else
+ debian_extra_langs += d
+ with_d := built from separate source
+ endif
+endif
+
+ifeq ($(with_base_only),yes)
+ with_d := no
+endif
+
+ifeq ($(with_d),yes)
+ # no suffix for D 1.0
+ #libphobos_version :=
+ # still experimental
+ libphobos_version := 2
+
+ with_libphobos := yes
+
+ libphobos_no_cpus := alpha avr arm hppa ia64 m68k mips mipsel powerpc ppc64 s390 sh4 sparc sparc64
+ libphobos_no_systems := gnu
+ ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(libphobos_no_cpus)))
+ with_libphobos := disabled for cpu $(DEB_TARGET_ARCH_CPU)
+ endif
+ ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(libphobos_no_systems)))
+ with_libphobos := disabled for system $(DEB_TARGET_GNU_SYSTEM)
+ endif
+
+ enabled_languages += d
+endif
+
+# Fortran 95 -------------------
+fortran_no_cross := yes
+fortran_no_cross := no
+
+ifneq ($(with_base_only),yes)
+ ifneq ($(separate_lang),yes)
+ with_fortran := yes
+ endif
+endif
+ifeq ($(fortran_no_cross)-$(DEB_CROSS),yes-yes)
+ with_fortran := diasbled for cross compiler package
+endif
+with_fortran := $(call envfilt, fortran, , , $(with_fortran))
+
+# Build all packages needed for Fortran development
+ifeq ($(with_fortran),yes)
+ ifeq ($(with_dev),yes)
+ with_fdev := yes
+ endif
+ ifeq ($(with_common_libs),yes)
+ with_libgfortran := yes
+ endif
+ enabled_languages += fortran
+endif
+
+# libquadmath -------------------
+
+ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU), ia64 i386 i486 i586 i686 amd64))
+ with_qmath := yes
+ ifneq (,$(findstring gcc-4,$(PKGSOURCE)))
+ ifeq ($(with_common_libs),yes)
+ with_libqmath := yes
+ endif
+ endif
+endif
+
+# ObjC ------------------------
+objc_no_cross := no
+
+ifneq ($(with_base_only),yes)
+ ifneq ($(separate_lang),yes)
+ with_objc := yes
+ endif
+endif
+ifeq ($(objc_no_cross)-$(DEB_CROSS),yes-yes)
+ with_objc := diasbled for cross compiler package
+endif
+with_objc := $(call envfilt, objc, obj-c++, , $(with_objc))
+
+ifeq ($(with_objc),yes)
+ # the ObjC runtime with garbage collection enabled needs the Boehm GC
+ with_objc_gc := yes
+
+ # disable ObjC garbage collection library (needs libgc)
+ libgc_no_cpus := avr mips mipsel # alpha amd64 arm armel armhf hppa i386 ia64 m68k mips mipsel powerpc ppc64 s390 s390x sparc
+ libgc_no_systems := knetbsd-gnu
+ ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(libgc_no_cpus)))
+ with_objc_gc := disabled for cpu $(DEB_TARGET_ARCH_CPU)
+ endif
+ ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(libgc_no_systems)))
+ with_objc_gc := disabled for system $(DEB_TARGET_GNU_SYSTEM)
+ endif
+
+ # Build all packages needed for Objective-C development
+ ifeq ($(with_dev),yes)
+ with_objcdev := yes
+ endif
+ # libobjc soname change in 4.6
+ #ifeq ($(with_common_libs),yes)
+ with_libobjc := yes
+ #endif
+
+ enabled_languages += objc
+endif
+
+# ObjC++ ----------------------
+objcxx_no_cross := no
+
+ifneq ($(with_base_only),yes)
+ ifneq ($(separate_lang),yes)
+ with_objcxx := yes
+ endif
+endif
+ifeq ($(objcxx_no_cross)-$(DEB_CROSS),yes-yes)
+ with_objcxx := diasbled for cross compiler package
+endif
+with_objcxx := $(call envfilt, obj-c++, , c++ objc, $(with_objcxx))
+
+ifeq ($(with_objcxx),yes)
+ enabled_languages += obj-c++
+endif
+
+# Go -------------------
+go_no_cross := yes
+go_no_cross := no
+
+go_no_cpus := avr arm hppa ia64 m68k mips mipsel powerpc ppc64 s390 s390x sh4 sparc sparc64
+ifneq ($(trunk_build),yes)
+ go_no_cpus := := $(go_no_cpus) alpha
+endif
+go_no_systems := gnu kfreebsd-gnu
+
+ifneq ($(with_base_only),yes)
+ ifneq ($(separate_lang),yes)
+ with_go := yes
+ endif
+endif
+ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(go_no_cpus)))
+ with_go := disabled for cpu $(DEB_TARGET_ARCH_CPU)
+endif
+ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(go_no_systems)))
+ with_go := disabled for system $(DEB_TARGET_GNU_SYSTEM)
+endif
+ifeq ($(go_no_cross)-$(DEB_CROSS),yes-yes)
+ with_go := diasbled for cross compiler package
+endif
+with_go := $(call envfilt, go, , , $(with_go))
+
+# Build all packages needed for Go development
+ifeq ($(with_go),yes)
+ ifeq ($(with_common_libs),yes)
+ with_libgo := yes
+ endif
+ enabled_languages += go
+endif
+
+# -------------------------------------------------------------------
+# other config
+
+# not built from the main source package
+ifeq (,$(findstring gcc,$(PKGSOURCE)))
+ extra_package := yes
+endif
+
+with_nls := yes
+ifeq ($(trunk_build),yes)
+ with_nls := no
+endif
+with_nls := $(call envfilt, nls, , , $(with_nls))
+
+# powerpc nof libraries -----
+with_libnof := no
+
+ifneq (,$(findstring gcc-4,$(PKGSOURCE)))
+ with_source := yes
+endif
+with_source := $(call envfilt, source, , , $(with_source))
+
+# ssp & libssp -------------------------
+with_ssp := yes
+ssp_no_archs = alpha hppa ia64 m68k
+ifneq (, $(filter $(DEB_TARGET_ARCH),$(ssp_no_archs) $(ssp_no_archs:%=uclibc-%)))
+ with_ssp := not available on $(DEB_TARGET_ARCH)
+endif
+with_ssp := $(call envfilt, ssp, , , $(with_ssp))
+
+ifeq ($(with_ssp),yes)
+ ifneq ($(distribution),Debian)
+ ifneq (,$(findstring gcc-4, $(PKGSOURCE)))
+ with_ssp_default := yes
+ endif
+ endif
+endif
+
+# mudflap -------------------
+with_mudflap := yes
+with_mudflap := $(call envfilt, mudflap, , , $(with_mudflap))
+
+# gomp --------------------
+with_gomp := yes
+with_gomp := $(call envfilt, gomp, , , $(with_gomp))
+
+# gold --------------------
+# armel with binutils 2.20.51 only
+gold_archs = amd64 armel armhf i386 lpia powerpc ppc64 sparc
+ifneq (,$(filter $(DEB_TARGET_ARCH),$(gold_archs)))
+ with_gold := yes
+endif
+
+# plugins --------------------
+with_plugins := yes
+
+endif # ifndef DEB_STAGE
+
+# Don't include docs with GFDL invariant sections
+GFDL_INVARIANT_FREE := yes
+ifeq ($(distribution),Ubuntu)
+ GFDL_INVARIANT_FREE := no
+endif
+
+# -------------------------------------------------------------------
+# non-extra config
+ifeq ($(extra_package),yes)
+ ifeq ($(with_separate_libgcj)-$(with_standalone_gcj),yes-no)
+ # build stuff
+ with_mudflap :=
+
+ # package stuff
+ with_gccbase := no
+ with_cdev := no
+ with_cxx := no
+ with_cxxdev := no
+ endif
+else
+ # libssp ------------------
+ ifeq ($(with_ssp)-$(with_common_libs),yes-yes)
+ #ifneq ($(DEB_CROSS),yes)
+ with_libssp := $(if $(wildcard $(builddir)/gcc/auto-host.h), \
+ $(shell if grep -qs '^\#define TARGET_LIBC_PROVIDES_SSP 1' $(builddir)/gcc/auto-host.h; then echo 'libc provides ssp'; else echo 'yes'; fi))
+ #endif
+ endif
+
+ # libmudflap --------------
+ ifeq ($(with_mudflap)-$(with_common_libs),yes-yes)
+ with_libmudflap := yes
+ endif
+
+ # libgomp -----------------
+ ifeq ($(with_gomp)-$(with_common_libs),yes-yes)
+ #ifneq ($(DEB_CROSS),yes)
+ with_libgomp := yes
+ #endif
+ endif
+
+ # libquadmath -----------------
+ ifeq ($(with_qmath)-$(with_common_libs),yes-yes)
+ #ifneq ($(DEB_CROSS),yes)
+ with_libqmath := yes
+ #endif
+ endif
+
+ # fixincludes -------
+ ifneq ($(DEB_CROSS),yes)
+ ifeq ($(with_common_pkgs),yes)
+ with_fixincl := yes
+ endif
+ endif
+
+ # Shared libgcc --------------------
+ ifeq ($(with_common_libs),yes)
+ with_libgcc := yes
+ ifneq ($(DEB_STAGE),stage1)
+ with_shared_libgcc := yes
+ endif
+ endif
+
+ # libgcc-math --------------------
+ with_libgmath := no
+ ifneq (,$(findstring i486,$(DEB_TARGET_ARCH)))
+ #with_libgccmath := yes
+ #with_lib64gmath := yes
+ #with_libgmathdev := yes
+ endif
+ ifeq ($(DEB_TARGET_ARCH),amd64)
+ #with_libgccmath := yes
+ #with_lib32gmath := yes
+ #with_libgmathdev := yes
+ endif
+
+ # hppa64 build ----------------
+ hppa64_no_snap := no
+ ifeq ($(DEB_TARGET_ARCH),hppa)
+ with_hppa64 := yes
+ endif
+ ifeq ($(hppa64_no_snap)-$(trunk_build),yes-yes)
+ with_hppa64 := disabled for snapshot build
+ endif
+ with_hppa64 := $(call envfilt, hppa64, , , $(with_hppa64))
+
+ # spu build -------------------
+ spu_no_snap := no
+ # FTBFS on ppc64, PR 48495
+ ifneq (,$(findstring $(DEB_TARGET_ARCH),powerpc))
+ ifneq ($(DEB_CROSS),yes)
+ with_spu := yes
+ endif
+ endif
+ ifeq ($(spu_no_snap)-$(trunk_build),yes-yes)
+ with_spu := disabled for snapshot build
+ endif
+ with_spu := $(call envfilt, spu, , , $(with_spu))
+
+ ifeq ($(with_spu),yes)
+ with_spucache := yes
+ with_spumea64 := yes
+ endif
+
+ # neon build -------------------
+ # FIXME: build as a cross compiler to build on armv4 as well
+ ifneq (,$(findstring gcc-4, $(PKGSOURCE)))
+ ifeq ($(distribution),Ubuntu)
+# neon_archs = armel armhf
+# ifneq (, $(filter $(DEB_TARGET_ARCH),$(neon_archs)))
+# with_neon = yes
+# endif
+ endif
+ endif
+endif
+
+# run testsuite ---------------
+with_check := yes
+# if you don't want to run the gcc testsuite, uncomment the next line
+#with_check := disabled by hand
+ifeq ($(with_base_only),yes)
+ with_check := no
+endif
+ifeq ($(DEB_CROSS),yes)
+ with_check := disabled for cross compiler package
+endif
+ifeq ($(REVERSE_CROSS),yes)
+ with_check := disabled for reverse cross build
+endif
+check_no_cpus := m68k
+check_no_systems := gnu
+ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(check_no_cpus)))
+ with_check := disabled for cpu $(DEB_TARGET_ARCH_CPU)
+endif
+ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(check_no_systems)))
+ with_check := disabled for system $(DEB_TARGET_GNU_SYSTEM)
+endif
+ifeq ($(distribution)-$(DEB_HOST_ARCH),Ubuntu-hppa)
+ ifneq ($(single_package),yes)
+ with_check := disabled, testsuite timeouts with expect
+ endif
+endif
+ifneq (,$(findstring gdc,$(PKGSOURCE)))
+ with_check := disabled for D
+endif
+with_check := $(call envfilt, check, , , $(with_check))
+ifdef WITHOUT_CHECK
+ with_check := disabled by environment
+endif
+ifneq ($(findstring nocheck, $(DEB_BUILD_OPTIONS)),)
+ with_check := disabled by DEB_BUILD_OPTIONS
+endif
+#with_check := disabled for this build
+
+# not a dependency on all archs, but if available, use it for the testsuite
+ifneq (,$(wildcard /usr/bin/localedef))
+ locale_data = generate
+endif
+
+all_enabled_languages := $(enabled_languages)
+languages_without_lang_opt := c++ objc obj-c++
+
+debian_extra_langs := $(subst obj-c++,objcp,$(debian_extra_langs))
+export debian_extra_langs
+
+# multilib
+biarch_map := i686=x86_64 powerpc=powerpc64 sparc=sparc64 s390=s390x s390x=s390 \
+ x86_64=i686 powerpc64=powerpc mips=mips64 mipsel=mips64el
+ifeq (,$(filter $(distrelease),lenny etch squeeze sid dapper hardy jaunty karmic lucid))
+ biarch_map := $(subst i686=,i486=,$(biarch_map))
+endif
+ifeq ($(distribution),Ubuntu)
+ ifeq (,$(filter $(distrelease),dapper hardy jaunty karmic lucid maverick natty))
+ biarch_map += arm=arm
+ endif
+endif
+biarch_cpu := $(strip $(patsubst $(DEB_TARGET_GNU_CPU)=%,%, \
+ $(filter $(DEB_TARGET_GNU_CPU)=%,$(biarch_map))))
+
+biarch64 := no
+biarch32 := no
+biarchn32 := no
+biarchhf := no
+biarchsf := no
+flavours :=
+define gen_biarch
+ ifneq (yes,$$(call envfilt, biarch, , ,yes))
+ biarch$1archs :=
+ endif
+ ifneq (,$$(findstring /$$(DEB_TARGET_ARCH)/,$$(biarch$1archs)))
+ biarch$1 := yes
+ flavours += $1
+ #biarch$1subdir = $$(biarch_cpu)-$$(DEB_TARGET_GNU_SYSTEM)
+ biarch$1subdir = $1
+ ifeq ($$(with_libgcc),yes)
+ with_lib$1gcc := yes
+ endif
+ ifeq ($$(with_libcxx),yes)
+ with_lib$1cxx := yes
+ endif
+ ifeq ($$(with_libcxxdbg),yes)
+ with_lib$1cxxdbg := yes
+ endif
+ ifeq ($$(with_libobjc),yes)
+ with_lib$1objc := yes
+ endif
+ ifeq ($$(with_libgfortran),yes)
+ with_lib$1gfortran := yes
+ endif
+ ifeq ($$(with_libmudflap),yes)
+ with_lib$1mudflap := yes
+ endif
+ ifeq ($$(with_libssp),yes)
+ with_lib$1ssp := yes
+ endif
+ ifeq ($$(with_libgomp),yes)
+ with_lib$1gomp:= yes
+ endif
+ ifeq ($$(with_libqmath),yes)
+ with_lib$1qmath := yes
+ endif
+ ifeq ($$(with_libgo),yes)
+ with_lib$1go := yes
+ endif
+
+ biarch_multidir_names = libiberty libgcc
+ ifneq (,$$(findstring gcc-, $$(PKGSOURCE)))
+ biarch_multidir_names += libstdc++-v3 libobjc libgfortran libssp \
+ libgomp libmudflap zlib libitm
+ ifeq ($$(with_objc_gc),yes)
+ biarch_multidir_names += boehm-gc
+ endif
+ endif
+ ifneq (,$(findstring yes, $(with_java) $(with_go)))
+ biarch_multidir_names += libffi
+ endif
+ ifeq ($(with_fortran),yes)
+ biarch_multidir_names += libquadmath
+ endif
+ ifeq ($(with_go),yes)
+ biarch_multidir_names += libgo
+ endif
+ export biarch_multidir_names
+ ifneq (,$$(findstring 32,$1))
+ TARGET64_MACHINE := $$(strip $$(subst $$(DEB_TARGET_GNU_CPU),$$(biarch_cpu), \
+ $$(TARGET_ALIAS)))
+ TARGET32_MACHINE := $$(TARGET_ALIAS)
+ else
+ TARGET64_MACHINE := $$(TARGET_ALIAS)
+ TARGET64_MACHINE := $$(strip $$(subst $$(DEB_TARGET_GNU_CPU),$$(biarch_cpu), \
+ $$(TARGET_ALIAS)))
+ endif
+ export TARGET32_MACHINE
+ export TARGET64_MACHINE
+ endif
+endef
+biarch32archs := /amd64/ppc64/kfreebsd-amd64/s390x/
+biarch64archs := /i386/powerpc/sparc/s390/mips/mipsel/
+biarchn32archs := /mips/mipsel/
+ifeq ($(distribution),Ubuntu)
+ ifeq (,$(filter $(distrelease),dapper hardy jaunty karmic lucid maverick natty))
+ biarchhfarchs := /armel/
+ biarchsfarchs := /armhf/
+ endif
+endif
+$(foreach x,32 64 n32 hf sf,$(eval $(call gen_biarch,$(x))))
+
+#ifeq ($(DEB_TARGET_ARCH),ia64)
+# biarch32 := yes
+#endif
+
+ifeq ($(trunk_build),yes)
+ no_biarch_libs := yes
+endif
+ifdef DEB_CROSS_NO_BIARCH
+ no_biarch_libs := yes
+endif
+ifeq ($(with_d)-$(with_separate_gdc),yes-yes)
+ no_biarch_libs := yes
+endif
+
+ifeq ($(no_biarch_libs),yes)
+ with_lib64gcc := no
+ with_lib64cxx := no
+ with_lib64cxxdbg := no
+ with_lib64objc := no
+ with_lib64ffi := no
+ with_lib64gcj := no
+ with_lib64gfortran := no
+ with_lib64mudflap := no
+ with_lib64ssp := no
+ with_lib64go := no
+ with_lib64gomp := no
+ with_lib64qmath := no
+
+ with_lib32gcc := no
+ with_lib32cxx := no
+ with_lib32cxxdbg := no
+ with_lib32objc := no
+ with_lib32ffi := no
+ with_lib32gcj := no
+ with_lib32gfortran := no
+ with_lib32mudflap := no
+ with_lib32ssp := no
+ with_lib32go := no
+ with_lib32gomp := no
+ with_lib32qmath := no
+
+ with_libn32gcc := no
+ with_libn32cxx := no
+ with_libn32cxxdbg := no
+ with_libn32objc := no
+ with_libn32ffi := no
+ with_libn32gcj := no
+ with_libn32gfortran := no
+ with_libn32mudflap := no
+ with_libn32ssp := no
+ with_libn32go := no
+ with_libn32gomp := no
+ with_libn32qmath := no
+
+ with_libhfgcc := no
+ with_libhfcxx := no
+ with_libhfcxxdbg := no
+ with_libhfobjc := no
+ with_libhfffi := no
+ with_libhfgcj := no
+ with_libhfgfortran := no
+ with_libhfmudflap := no
+ with_libhfssp := no
+ with_libhfgo := no
+ with_libhfgomp := no
+ with_libhfqmath := no
+
+ with_libsfgcc := no
+ with_libsfcxx := no
+ with_libsfcxxdbg := no
+ with_libsfobjc := no
+ with_libsfffi := no
+ with_libsfgcj := no
+ with_libsfgfortran := no
+ with_libsfmudflap := no
+ with_libsfssp := no
+ with_libsfgo := no
+ with_libsfgomp := no
+ with_libsfqmath := no
+ with_java_plugin := no
+
+ ifdef DEB_CROSS_NO_BIARCH
+ biarch64 := disabled by DEB_CROSS_NO_BIARCH
+ biarch32 := disabled by DEB_CROSS_NO_BIARCH
+ biarchn32 := disabled by DEB_CROSS_NO_BIARCH
+ biarchhf := disabled by DEB_CROSS_NO_BIARCH
+ biarchsf := disabled by DEB_CROSS_NO_BIARCH
+ endif
+
+ ifeq ($(with_d)-$(with_separate_gdc),yes-yes)
+ biarch64 := disabled for D
+ biarch32 := disabled for D
+ biarchn32 := disabled for D
+ biarchhf := disabled for D
+ biarchsf := disabled for D
+ endif
+
+endif
+
+ifneq (,$(filter yes,$(biarch32) $(biarch64) $(biarchn32) $(biarchhf) $(biarchsf)))
+ multilib := yes
+endif
+
+multilib_archs = $(sort $(subst /, , $(biarch64archs) $(biarch32archs) $(biarchn32archs) $(biarchhfarchs) $(biarchsfarchs)))
+
+biarchsubdirs := \
+ $(if $(filter yes,$(biarch64)),$(biarch64subdir),) \
+ $(if $(filter yes,$(biarch32)),$(biarch32subdir),) \
+ $(if $(filter yes,$(biarchn32)),$(biarchn32subdir),) \
+ $(if $(filter yes,$(biarchhf)),$(biarchhfsubdir),) \
+ $(if $(filter yes,$(biarchsf)),$(biarchsfsubdir),)
+biarchsubdirs := {$(strip $(shell echo $(biarchsubdirs) | tr " " ","))}
+
+ifeq ($(biarch32),yes)
+ with_32bit_check := $(strip $(if $(wildcard build/runcheck.out), \
+ $(shell cat build/runcheck.out), \
+ $(shell CC="gcc -m32" bash debian/runcheck.sh)))
+endif
+
+ifeq ($(biarch64),yes)
+ ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),mips mipsel))
+ with_64bit_check := $(strip $(if $(wildcard build/runcheck.out), \
+ $(shell cat build/runcheck.out), \
+ $(shell CC="gcc -mabi=64" bash debian/runcheck.sh)))
+ else
+ with_64bit_check := $(strip $(if $(wildcard build/runcheck.out), \
+ $(shell cat build/runcheck.out), \
+ $(shell CC="gcc -m64" bash debian/runcheck.sh)))
+ endif
+endif
+
+ifeq ($(biarchn32),yes)
+ with_n32bit_check := $(strip $(if $(wildcard build/runcheck.out), \
+ $(shell cat build/runcheck.out), \
+ $(shell CC="gcc -mabi=n32" bash debian/runcheck.sh)))
+endif
+
+# GNU locales
+force_gnu_locales := yes
+locale_no_cpus :=
+locale_no_systems := knetbsd-gnu
+ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(locale_no_systems)))
+ force_gnu_locales := disabled for system $(DEB_TARGET_GNU_SYSTEM)
+endif
+
+gcc_tarpath := $(firstword $(wildcard gcc-*.tar.* /usr/src/gcc-$(BASE_VERSION)/gcc-*.tar.*))
+gcc_tarball := $(notdir $(gcc_tarpath))
+gcc_srcdir := $(subst -dfsg,,$(patsubst %.tar.xz,%,$(patsubst %.tar.lzma,%,$(patsubst %.tar.gz,%,$(gcc_tarball:.tar.bz2=)))))
+
+ifeq ($(with_d),yes)
+ gdc_tarpath := $(firstword $(wildcard gdc-*.tar.* /usr/src/gcc-$(BASE_VERSION)/gdc-*.tar.*))
+ gdc_tarball := $(notdir $(gdc_tarpath))
+ gdc_srcdir := $(patsubst %.tar.xz,%,$(patsubst %.tar.lzma,%,$(patsubst %.tar.gz,%,$(gdc_tarball:.tar.bz2=))))
+endif
+
+ecj_jar := $(firstword $(wildcard ecj.jar /usr/share/java/eclipse-ecj.jar /usr/share/java/ecj.jar))
+
+unpack_stamp := $(stampdir)/01-unpack-stamp
+pre_patch_stamp := $(stampdir)/02-pre-patch-stamp
+patch_stamp := $(stampdir)/02-patch-stamp
+src_spu_stamp := $(stampdir)/02-src-spu-stamp
+control_stamp := $(stampdir)/03-control-stamp
+configure_stamp := $(stampdir)/04-configure-stamp
+build_stamp := $(stampdir)/05-build-stamp
+build_html_stamp := $(stampdir)/05-build-html-stamp
+build_locale_stamp := $(stampdir)/05-build-locale-stamp
+build_doxygen_stamp := $(stampdir)/05-build-doxygen-stamp
+build_javasrc_stamp := $(stampdir)/05-build-javasrc-stamp
+build_javadoc_stamp := $(stampdir)/05-build-javadoc-stamp
+check_stamp := $(stampdir)/06-check-stamp
+check_inst_stamp := $(stampdir)/06-check-inst-stamp
+install_stamp := $(stampdir)/07-install-stamp
+install_snap_stamp := $(stampdir)/07-install-snap-stamp
+binary_stamp := $(stampdir)/08-binary-stamp
+
+configure_dummy_stamp := $(stampdir)/04-configure-dummy-stamp
+build_dummy_stamp := $(stampdir)/05-build-dummy-stamp
+install_dummy_stamp := $(stampdir)/07-install-dummy-stamp
+
+configure_hppa64_stamp := $(stampdir)/04-configure-hppa64-stamp
+build_hppa64_stamp := $(stampdir)/05-build-hppa64-stamp
+install_hppa64_stamp := $(stampdir)/07-install-hppa64-stamp
+
+configure_neon_stamp := $(stampdir)/04-configure-neon-stamp
+build_neon_stamp := $(stampdir)/05-build-neon-stamp
+install_neon_stamp := $(stampdir)/07-install-neon-stamp
+
+configure_spu_stamp := $(stampdir)/04-configure-spu-stamp
+build_spu_stamp := $(stampdir)/05-build-spu-stamp
+install_spu_stamp := $(stampdir)/07-install-spu-stamp
+
+control_dependencies := $(patch_stamp)
+
+ifeq ($(single_package),yes)
+ configure_dependencies = $(configure_stamp)
+ build_dependencies = $(build_stamp)
+ install_dependencies = $(install_snap_stamp)
+ ifeq ($(with_check),yes)
+ check_dependencies += $(check_stamp)
+ endif
+else
+ ifeq ($(with_base_only),yes)
+ configure_dependencies = $(configure_dummy_stamp)
+ build_dependencies = $(build_dummy_stamp)
+ install_dependencies = $(install_dummy_stamp)
+ else
+ configure_dependencies = $(configure_stamp)
+ build_dependencies = $(build_stamp)
+ install_dependencies = $(install_stamp)
+ ifeq ($(with_check),yes)
+ check_dependencies += $(check_stamp)
+ endif
+ endif
+endif
+
+ifneq (,$(findstring gcj-, $(PKGSOURCE)))
+ ifeq ($(with_gcj_base_only),yes)
+ configure_dependencies = $(configure_dummy_stamp)
+ build_dependencies = $(build_dummy_stamp)
+ install_dependencies = $(install_dummy_stamp)
+ endif
+endif
+
+ifeq ($(with_neon),yes)
+ build_dependencies += $(build_neon_stamp)
+ install_dependencies += $(install_neon_stamp)
+endif
+
+ifeq ($(with_hppa64),yes)
+ build_dependencies += $(build_hppa64_stamp)
+ ifneq ($(trunk_build),yes)
+ install_dependencies += $(install_hppa64_stamp)
+ endif
+endif
+
+ifeq ($(with_spu),yes)
+ control_dependencies += $(src_spu_stamp)
+ build_dependencies += $(build_spu_stamp)
+ ifneq ($(trunk_build),yes)
+ install_dependencies += $(install_spu_stamp)
+ endif
+endif
+
+build_dependencies += $(check_dependencies)
+
+stamp-dir:
+ mkdir -p $(stampdir)
+
+ifeq ($(DEB_CROSS),yes)
+ define cross_mangle_shlibs
+ sed -i s/$(cross_lib_arch)//g debian/$(1)/DEBIAN/shlibs
+ endef
+ define cross_mangle_substvars
+ sed -i 's/lib[^ ,(]*/&$(cross_lib_arch)/g' debian/$(1).substvars
+ endef
+else
+ define cross_mangle_shlibs
+ endef
+ define cross_mangle_substvars
+ endef
+endif
+
+ifneq (,$(filter $(DEB_TARGET_ARCH), mips mipsel))
+ define cross_mangle_control
+ $(if $(findstring 64,$(1)),sed -i -r '/^(Dep|Rec|Sug)/s/[a-z0-9-]+32[^$(COMMA)]+($(COMMA) *|$$)//g;/^(Dep|Rec|Sug)/s/$(p_lgcc)/$(p_l64gcc)/;/^(Dep|Rec|Sug)/s/ *$(COMMA) *$$//' debian/$(1)/DEBIAN/control,@:)
+ $(if $(findstring n32,$(1)),sed -i -r '/^(Dep|Rec|Sug)/s/[a-z0-9-]+64[^$(COMMA)]+($(COMMA) *|$$)//g;/^(Dep|Rec|Sug)/s/$(p_lgcc)/$(p_ln32gcc)/;/^(Dep|Rec|Sug)/s/ *$(COMMA) *$$//' debian/$(1)/DEBIAN/control,@:)
+ endef
+else
+ define cross_mangle_control
+ endef
+endif
diff --git a/debian/rules.patch b/debian/rules.patch
new file mode 100644
index 0000000..f4d0e7f
--- /dev/null
+++ b/debian/rules.patch
@@ -0,0 +1,420 @@
+# -*- makefile -*-
+# rules to patch the unpacked files in the source directory
+# ---------------------------------------------------------------------------
+# various rules to unpack addons and (un)apply patches.
+# - patch / apply-patches
+# - unpatch / reverse-patches
+
+.NOTPARALLEL:
+
+patchdir ?= debian/patches
+series_file ?= $(patchdir)/series
+
+# which patches should be applied?
+
+debian_patches = \
+ $(if $(with_linaro_branch),gcc-linaro) \
+ svn-updates$(if $(with_linaro_branch),-linaro) \
+
+ifeq ($(with_java),yes)
+# debian_patches += \
+# svn-class-updates
+endif
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ debian_patches += \
+ rename-info-files \
+ $(if $(with_linaro_branch),gcc-linaro-doc) \
+
+# $(if $(with_linaro_branch),,svn-doc-updates) \
+
+else
+endif
+debian_patches += \
+ gcc-gfdl-build
+
+# boehm-gc-nocheck: seems to work on the buildds \
+
+debian_patches += \
+ gcc-textdomain \
+ gcc-driver-extra-langs
+
+ifeq ($(distribution),Ubuntu)
+ ifneq (,$(filter $(distrelease),dapper hardy intrepid jaunty karmic lucid))
+ debian_patches += gcc-hash-style-both
+ else
+ debian_patches += gcc-hash-style-gnu
+ endif
+else
+ debian_patches += gcc-hash-style-both
+endif
+
+debian_patches += \
+ libstdc++-pic \
+ libstdc++-doclink \
+ libstdc++-man-3cxx \
+ libstdc++-test-installed \
+ libjava-stacktrace \
+ libjava-jnipath \
+ libjava-sjlj \
+ libjava-disable-plugin \
+ alpha-no-ev4-directive \
+ boehm-gc-getnprocs \
+ note-gnu-stack \
+ libgomp-omp_h-multilib \
+ sparc-force-cpu \
+ pr24619 \
+ $(if $(with_linaro_branch),,pr45979) \
+ gccgo-version \
+ no_fpr_in_libgcc \
+ pr48226 \
+ pr47487 \
+ mudflap-varargs \
+ pr45078 \
+ pr43804 \
+ pr47818 \
+ $(if $(with_linaro_branch),,pr48830) \
+ $(if $(with_linaro_branch),,pr49169) \
+ pr49756 \
+ pr49940 \
+ pr49944 \
+ gcc-cloog-dl \
+ libffi-kfreebsd \
+ gcc-base-version \
+ pr49696 \
+ libffi-powerpc-sf \
+ libffi-powerpc-sysv-without-string-ops \
+ $(if $(with_linaro_branch),,pr49030) \
+ $(if $(with_linaro_branch),,pr50193) \
+ pr50114 \
+
+# $(if $(filter yes, $(DEB_CROSS)),,gcc-print-file-name) \
+# libstdc++-nothumb-check \
+# TODO: update ...
+# libjava-rpath \
+
+hardening_patches =
+ifneq ($(distribution),Debian)
+ ifneq (,$(findstring gcc-4, $(PKGSOURCE)))
+ hardening_patches += gcc-default-format-security \
+ gcc-default-fortify-source \
+ gcc-default-relro \
+ testsuite-hardening-format \
+ testsuite-hardening-printf-types
+ endif
+endif
+ifeq ($(with_ssp)-$(with_ssp_default),yes-yes)
+ ifeq ($(distribution),Ubuntu)
+ hardening_patches += gcc-default-ssp$(if $(filter ppc64,$(DEB_TARGET_ARCH)),-ppc64)
+ else
+ hardening_patches += gcc-default-ssp
+ endif
+endif
+
+# FIXME 4.5: Drop and adjust symbols files
+ifneq (,$(findstring 4.4, $(PKGSOURCE)))
+ debian_patches += pr39491
+endif
+
+ifeq ($(with_ada),yes)
+ debian_patches += \
+ ada-driver-check \
+ ada-gcc-name \
+ ada-default-project-path \
+ ada-symbolic-tracebacks \
+ ada-library-project-files-soname
+
+ ifeq ($(biarch64),yes)
+ debian_patches += \
+ ada-nobiarch-check
+ endif
+
+ ifeq ($(with_libgnat),yes)
+ debian_patches += \
+ ada-link-lib \
+ ada-libgnatvsn \
+ ada-libgnatprj \
+ ada-acats
+ ifeq ($(with_gnat_zcx)-$(with_gnat_sjlj),yes-yes)
+ debian_patches += \
+ ada-sjlj
+ endif
+ endif
+
+ ifeq ($(DEB_TARGET_ARCH_OS),kfreebsd)
+ debian_patches += ada-kfreebsd-gnu \
+ ada-bug564232
+ endif
+
+endif
+
+ifeq ($(with_d),yes)
+ debian_patches += \
+ gdc-4.6 \
+ gdc-libphobos-math \
+ gdc-driver-zlib
+
+ ifeq ($(with_libphobos),yes)
+ debian_patches += gdc-libphobos-build
+ else
+ debian_patches += gdc-driver-nophobos
+ endif
+
+else
+ debian_patches += gcc-d-lang
+endif
+
+ifeq ($(DEB_TARGET_ARCH_OS),hurd)
+ debian_patches += hurd-pthread
+endif
+
+ifeq ($(DEB_TARGET_ARCH),alpha)
+ debian_patches += alpha-ieee mudflap-nocheck
+ ifneq ($(GFDL_INVARIANT_FREE),yes)
+ debian_patches += alpha-ieee-doc
+ endif
+endif
+
+ifneq (,$(findstring $(DEB_TARGET_ARCH),arm armel armhf))
+ debian_patches += libjava-armel-unwind
+ debian_patches += $(if $(with_linaro_branch),,gcc-volatile-bitfields)
+endif
+
+ifeq ($(DEB_TARGET_ARCH),m68k)
+ debian_patches +=
+endif
+
+ifeq ($(DEB_TARGET_ARCH),powerpcspe)
+ debian_patches += powerpc_remove_many
+endif
+
+ifeq ($(DEB_TARGET_ARCH_OS),kfreebsd)
+ debian_patches += kbsd-gnu
+endif
+
+ifeq ($(DEB_TARGET_ARCH),ppc64)
+ ifeq ($(distribution),Ubuntu)
+ debian_patches += ibm-branch
+ endif
+endif
+
+#spu_patches = cell-branch
+#ifneq ($(GFDL_INVARIANT_FREE),yes)
+# spu_patches += cell-branch-doc
+#endif
+
+#debian_patches += link-libs
+
+debian_patches += libjava-disable-static
+debian_patches += s390-biarch
+debian_patches += mips-triarch
+
+# all patches below this line are applied for gcc-snapshot builds as well
+
+ifeq ($(trunk_build),yes)
+ spu_patches =
+ debian_patches =
+endif
+
+ifeq ($(trunk_build),yes)
+ debian_patches += arm-dynamic-linker-trunk
+else
+ debian_patches += arm-dynamic-linker
+endif
+ifeq ($(with_softfloat),yes)
+ debian_patches += arm-multilib-soft-float
+else ifeq ($(multilib),yes)
+ debian_patches += arm-multilib
+endif
+
+ifeq ($(DEB_CROSS),yes)
+ ifeq ($(trunk_build),yes)
+ debian_patches += cross-include-trunk cross-fixes-trunk
+ else
+ debian_patches += cross-include cross-fixes
+ endif
+endif
+
+ifeq ($(DEB_TARGET_ARCH_OS),hurd)
+ debian_patches += hurd-changes
+endif
+
+debian_patches += gcc-ice-hack gcc-ice-apport
+#FIXME
+#debian_patches += gold-and-ld
+
+debian_patches += libjava-fixed-symlinks
+debian_patches += libstdc++-arm-wno-abi
+
+ifneq (,$(filter $(DEB_TARGET_ARCH), armel mipsel))
+ # timeouts on the buildd's, both Debian and Ubuntu
+ #debian_patches += libstdc++-no-testsuite
+endif
+debian_patches += ada-mips
+debian_patches += libffi-ro-eh_frame_sect
+
+ifneq ($(trunk_build),yes)
+debian_patches += gcc-multiarch
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+ debian_patches += gcc-multiarch-doc
+endif
+ifeq ($(with_multiarch_lib),yes)
+ debian_patches += libjava-multiarch
+endif
+endif # gcc-snapshot
+debian_patches += libjava-nobiarch-check
+debian_patches += config-ml
+ifeq ($(biarch64),yes)
+ ifeq ($(DEB_CROSS),yes)
+ debian_patches += cross-biarch
+ endif
+endif
+ifeq ($(trunk_build),yes)
+ debian_patches += gcc-powerpc-nof-trunk
+else
+ debian_patches += gcc-powerpc-nof
+endif
+debian_patches += gcc-powerpc-undef
+ifeq ($(biarch32),yes)
+ ifeq ($(with_multiarch_lib),yes)
+ ifeq ($(trunk_build),yes)
+ debian_patches += gcc-multilib64-multiarch-trunk
+ else
+ debian_patches += gcc-multilib64-multiarch
+ endif
+ else
+ debian_patches += gcc-multilib64
+ endif
+endif
+
+ifeq (,$(filter $(distrelease),lenny squeeze dapper hardy intrepid jaunty karmic lucid maverick))
+ debian_patches += gcc-no-add-needed
+endif
+ifeq (,$(filter $(distrelease),lenny squeeze sid experimental dapper hardy intrepid jaunty karmic lucid maverick))
+ debian_patches += gcc-as-needed
+endif
+debian_patches += mips-fix-loongson2f-nop
+ifeq ($(distribution),Ubuntu)
+ ifeq ($(DEB_TARGET_ARCH),ppc64)
+ debian_patches += gcc-ppc64-O3
+ endif
+endif
+debian_patches += gcc-system-root
+debian_patches += libgomp-kfreebsd-testsuite
+
+ifeq ($(trunk_build),yes)
+ debian_patches += armhf-triplet-trunk
+else
+ debian_patches += armhf-triplet
+endif
+
+#debian_patches += address-clauses-timed-entry-calls
+
+series_stamp = $(stampdir)/02-series-stamp
+series: $(series_stamp)
+$(series_stamp):
+ echo $(strip $(addsuffix .diff,$(debian_patches))) \
+ | sed -r 's/ +/ /g' | tr " " "\n" > $(series_file)
+ifneq (,$(strip $(hardening_patches)))
+ ifneq ($(trunk_build),yes)
+ echo $(strip $(addsuffix .diff,$(hardening_patches))) \
+ | sed -r 's/ +/ /g' | tr " " "\n" >> $(series_file)
+ endif
+endif
+ sed -r 's/(.)$$/\1 -p1/' -i $(series_file)
+ touch $@
+
+autotools_files := $(addprefix ./,$(foreach file,$(shell lsdiff --no-filename \
+ $(foreach patch,$(debian_patches),$(patchdir)/$(patch).diff) \
+ | sed -r 's/[ab]\/src\//src\//' | sort | uniq),$(shell echo $(file) \
+ | egrep 'configure\.(ac|in)|Makefile\.(am|in)|acinclude.m4')))
+
+autoconf_version = 2.64
+ifeq ($(trunk_build),yes)
+ # The actual version depends on the build-dependencies set by
+ # variable AUTO_BUILD_DEP in rules.conf. Here, we assume the
+ # correct version is installed.
+ #autoconf_version =
+endif
+
+# FIXME: the auto* stuff is done every time for every subdir, which
+# leads to build errors. Idea: record the auto* calls in the patch
+# files (AUTO <dir> <auto-command with options>) and run them separately,
+# maybe only once per directory).
+$(patch_stamp): $(unpack_stamp) $(series_stamp)
+ QUILT_PATCHES=$(patchdir) \
+ quilt --quiltrc /dev/null push -a || test $$? = 2
+
+ifneq (,$(filter svn-updates, $(debian_patches)))
+ awk '/^EOF/ {exit} p==1 {print} /EOF$$/ {p=1}' \
+ $(patchdir)/svn-updates.diff > src/LAST_UPDATED
+endif
+
+ if ! test -f ./autotools_files ; then touch ./autotools_files ; fi
+
+ cd $(srcdir)/fixincludes && ./genfixes
+
+ for f in $(autotools_files) ; \
+ do case $$f in \
+ */classpath/m4/acinclude.m4) \
+ : ;; \
+ */configure.*|*/acinclude.m4) \
+ if grep ^"$$(md5sum $$f)"$$ ./autotools_files >/dev/null ; \
+ then echo "Skipping already regenerated file $$f." ; \
+ else \
+ echo "Running autoconf$(autoconf_version) in $$(dirname $$f)..." ; \
+ dir="$(CURDIR)"; cd $(CURDIR)/$$(dirname $$f) \
+ && AUTOM4TE=/usr/bin/autom4te$(autoconf_version) autoconf$(autoconf_version) \
+ && cd $$dir \
+ && echo "$$(md5sum $$f)" >> ./autotools_files ; \
+ fi ;; \
+ */Makefile.*) ;; \
+ *) echo "Unknown file: $$f"; false; \
+ esac; \
+ done
+
+ for i in $(debian_patches); do \
+ echo -e "\n$$i:" >> pxxx; \
+ sed -n 's/^# *DP: */ /p' $(patchdir)/$$i.diff >> pxxx; \
+ done
+# -$(srcdir)/move-if-change pxxx $@
+ mv pxxx $@
+
+unpatch:
+ QUILT_PATCHES=$(patchdir) \
+ quilt --quiltrc /dev/null pop -a -R || test $$? = 2
+ rm -rf .pc
+ for f in $(autotools_files); do \
+ rm -f $$(echo $$f | sed -r 's/\.(ac|am|in)$$//'); \
+ done
+
+$(src_spu_stamp): $(patch_stamp)
+ rm -rf src-spu
+ifeq (,$(strip $(hardening_patches)))
+ ln -s src src-spu
+else
+ cp -a src src-spu
+ set -e; \
+ for p in $(hardening_patches); do \
+ list="$$p $$list"; \
+ done; \
+ for p in $$list; do \
+ echo "Revert for spu build: $$p"; \
+ patch -d src-spu -p2 -R < debian/patches/$$p.diff; \
+ done
+endif
+ set -e; \
+ for p in $(spu_patches); do \
+ echo "Apply for spu build: $$p"; \
+ patch -d src-spu -p2 < debian/patches/$$p.diff; \
+ done
+ touch $@
+
+update-patches: $(series_stamp)
+ export QUILT_PATCHES=$(patchdir); \
+ export QUILT_REFRESH_ARGS="--no-timestamps --no-index -pab"; \
+ export QUILT_DIFF_ARGS="--no-timestamps --no-index -pab"; \
+ while quilt push; do quilt refresh; done
+
+patch: $(patch_stamp)
+.PHONY: patch series quilt autotools
diff --git a/debian/rules.sonames b/debian/rules.sonames
new file mode 100644
index 0000000..e69803e
--- /dev/null
+++ b/debian/rules.sonames
@@ -0,0 +1,67 @@
+ifneq ($(vafilt_defined),1)
+ $(error rules.defs must be included before rules.sonames)
+endif
+
+ifeq (,$(wildcard debian/soname-cache))
+ SONAME_VARS := $(shell \
+ cache=debian/soname-cache; \
+ rm -f $$cache; \
+ v=`awk -F= '/^libtool_VERSION/ {split($$2,v,":"); print v[1]}' \
+ $(srcdir)/libstdc++-v3/acinclude.m4`; \
+ echo CXX_SONAME=$$v >> $$cache; \
+ v=`awk -F= '/^VERSION/ {split($$2,v,":"); print v[1]}' \
+ $(srcdir)/libobjc/configure.ac`; \
+ echo OBJC_SONAME=$$v >> $$cache; \
+ v=`tail -1 $(srcdir)/libgfortran/libtool-version | cut -d: -f1`; \
+ echo FORTRAN_SONAME=$$v >> $$cache; \
+ v=`tail -1 $(srcdir)/libmudflap/libtool-version | cut -d: -f1`; \
+ echo MUDFLAP_SONAME=$$v >> $$cache; \
+ v=`tail -1 $(srcdir)/libssp/libtool-version | cut -d: -f1`; \
+ echo SSP_SONAME=$$v >> $$cache; \
+ v=`tail -1 $(srcdir)/libjava/libtool-version | cut -d: -f1`; \
+ echo GCJ_SONAME=$$v >> $$cache; \
+ if [ "$$v" -ge 70 ]; then \
+ echo GCJ_SONAME1=`echo $$v | sed 's/.$$//'` >> $$cache; \
+ echo GCJ_SONAME2=`echo $$v | sed 's/.*\(.\)$$/\1/'` >> $$cache; \
+ else \
+ echo GCJ_SONAME1=$$v >> $$cache; \
+ echo GCJ_SONAME2= >> $$cache; \
+ fi; \
+ v=`tail -1 $(srcdir)/libffi/libtool-version | cut -d: -f1`; \
+ echo FFI_SONAME=$$v >> $$cache; \
+ v=`awk -F= '/^libtool_VERSION/ {split($$2,v,":"); print v[1]}' \
+ $(srcdir)/libgomp/configure.ac`; \
+ echo GOMP_SONAME=$$v >> $$cache; \
+ if [ "$(with_qmath)" = yes ]; then \
+ v=`tail -1 $(srcdir)/libquadmath/libtool-version | cut -d: -f1`; \
+ echo QUADMATH_SONAME=$$v >> $$cache; \
+ fi; \
+ if [ "$(with_libgmath)" = yes ]; then \
+ v=`tail -1 $(srcdir)/libgcc-math/libtool-version | cut -d: -f1`; \
+ echo GCCMATH_SONAME=$$v >> $$cache; \
+ fi; \
+ v=`grep '[^_]Library_Version.*:' $(srcdir)/gcc/ada/gnatvsn.ads \
+ | sed -e 's/.*"\([^"]*\)".*/\1/'`; \
+ echo GNAT_SONAME=$$v >> $$cache; \
+ echo GO_SONAME=0 >> $$cache; \
+ cat $$cache)
+else
+ SONAME_VARS := $(shell cat debian/soname-cache)
+endif
+CXX_SONAME = $(call vafilt,$(SONAME_VARS),CXX_SONAME)
+OBJC_SONAME = $(call vafilt,$(SONAME_VARS),OBJC_SONAME)
+FORTRAN_SONAME = $(call vafilt,$(SONAME_VARS),FORTRAN_SONAME)
+MUDFLAP_SONAME = $(call vafilt,$(SONAME_VARS),MUDFLAP_SONAME)
+SSP_SONAME = $(call vafilt,$(SONAME_VARS),SSP_SONAME)
+GCJ_SONAME = $(call vafilt,$(SONAME_VARS),GCJ_SONAME)
+GCJ_SONAME1 = $(call vafilt,$(SONAME_VARS),GCJ_SONAME1)
+GCJ_SONAME2 = $(call vafilt,$(SONAME_VARS),GCJ_SONAME2)
+FFI_SONAME = $(call vafilt,$(SONAME_VARS),FFI_SONAME)
+GOMP_SONAME = $(call vafilt,$(SONAME_VARS),GOMP_SONAME)
+GCCMATH_SONAME = $(call vafilt,$(SONAME_VARS),GCCMATH_SONAME)
+QUADMATH_SONAME = $(call vafilt,$(SONAME_VARS),QUADMATH_SONAME)
+GNAT_SONAME = $(call vafilt,$(SONAME_VARS),GNAT_SONAME)
+GO_SONAME = $(call vafilt,$(SONAME_VARS),GO_SONAME)
+
+# alias
+GFORTRAN_SONAME = $(FORTRAN_SONAME)
diff --git a/debian/rules.source b/debian/rules.source
new file mode 100644
index 0000000..15aa53e
--- /dev/null
+++ b/debian/rules.source
@@ -0,0 +1,15 @@
+SOURCE_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
+patchdir = $(SOURCE_DIR)/patches
+
+include $(SOURCE_DIR)/debian/rules.defs
+include $(SOURCE_DIR)/debian/rules.patch
+include $(SOURCE_DIR)/debian/rules.unpack
+
+patch-source: $(patch_stamp)
+
+clean-source:
+ rm -rf $(stampdir)
+ rm -rf $(gcc_srcdir) $(gdc_srcdir) d
+ rm -rf bin
+ rm -rf $(srcdir)
+
diff --git a/debian/rules.unpack b/debian/rules.unpack
new file mode 100644
index 0000000..57e02e0
--- /dev/null
+++ b/debian/rules.unpack
@@ -0,0 +1,257 @@
+# -*- makefile -*-
+# rules to unpack the source tarballs in $(srcdir); if the source dir already
+# exists, the rule exits with an error to prevent deletion of modified
+# source files. It has to be deleted manually.
+
+tarballs = $(gcc_tarball) # $(gcj_tarball)
+ifeq ($(with_d),yes)
+ tarballs += $(gdc_tarball)
+endif
+
+unpack_stamps = $(foreach i,$(tarballs),$(unpack_stamp)-$(i))
+
+unpack: stamp-dir $(unpack_stamp) debian-chmod
+$(unpack_stamp): $(unpack_stamps)
+$(unpack_stamp): $(foreach p,$(debian_tarballs),unpacked-$(p))
+ echo -e "\nBuilt from Debian source package $(PKGSOURCE)-$(SOURCE_VERSION)" \
+ > pxxx
+ echo -e "Integrated upstream packages in this version:\n" >> pxxx
+ for i in $(tarballs); do echo " $$i" >> pxxx; done
+ mv -f pxxx $@
+
+debian-chmod:
+ @chmod 755 debian/dh_*
+
+# ---------------------------------------------------------------------------
+
+gfdl_texinfo_files = \
+ gcc/doc/arm-neon-intrinsics.texi \
+ gcc/doc/bugreport.texi \
+ gcc/doc/c-tree.texi \
+ gcc/doc/cfg.texi \
+ gcc/doc/collect2.texi \
+ gcc/doc/compat.texi \
+ gcc/doc/configfiles.texi \
+ gcc/doc/configterms.texi \
+ gcc/doc/contrib.texi \
+ gcc/doc/contribute.texi \
+ gcc/doc/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/gccint.texi \
+ gcc/doc/gcov.texi \
+ gcc/doc/generic.texi \
+ gcc/doc/gimple.texi \
+ gcc/doc/gnu.texi \
+ gcc/doc/gty.texi \
+ gcc/doc/headerdirs.texi \
+ gcc/doc/hostconfig.texi \
+ gcc/doc/implement-c.texi \
+ gcc/doc/implement-cxx.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/loop.texi \
+ gcc/doc/lto.texi \
+ gcc/doc/makefile.texi \
+ gcc/doc/md.texi \
+ gcc/doc/objc.texi \
+ gcc/doc/options.texi \
+ gcc/doc/passes.texi \
+ gcc/doc/plugins.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.in \
+ gcc/doc/tm.texi \
+ gcc/doc/tree-ssa.texi \
+ gcc/doc/trouble.texi \
+ gcc/doc/include/gcc-common.texi \
+ gcc/doc/include/funding.texi \
+ gcc/fortran/gfc-internals.texi \
+ gcc/fortran/invoke.texi \
+ gcc/fortran/intrinsic.texi \
+
+
+gfdl_toplevel_texinfo_files = \
+ gcc/doc/gcc.texi \
+ gcc/java/gcj.texi \
+ gcc/ada/gnat-style.texi \
+ gcc/ada/gnat_rm.texi \
+ gcc/ada/gnat_ugn.texi \
+ gcc/fortran/gfortran.texi \
+ gcc/go/gccgo.texi \
+ libgomp/libgomp.texi \
+ libquadmath/libquadmath.texi \
+
+gfdl_manpages = \
+ gcc/doc/cpp.1 \
+ gcc/doc/g++.1 \
+ gcc/doc/gc-analyze.1 \
+ gcc/doc/gcc.1 \
+ gcc/doc/gccgo.1 \
+ gcc/doc/gcj.1 \
+ gcc/doc/gcj-dbtool.1 \
+ gcc/doc/gcjh.1 \
+ gcc/doc/gcov.1 \
+ gcc/doc/gfortran.1 \
+ gcc/doc/gij.1 \
+ gcc/doc/grmic.1 \
+ gcc/doc/grmiregistry.1 \
+ gcc/doc/jcf-dump.1 \
+ gcc/doc/jv-convert.1 \
+ gcc/doc/fsf-funding.7 \
+
+# ---------------------------------------------------------------------------
+$(unpack_stamp)-$(gcc_tarball): $(gcc_tarpath)
+ : # unpack gcc tarball
+ -mkdir $(stampdir)
+ if [ -d $(srcdir) ]; then \
+ echo >&2 "Source directory $(srcdir) exists. Delete by hand"; \
+ false; \
+ fi
+ rm -rf $(gcc_srcdir)
+ case $(gcc_tarball) in \
+ *.bz2) tar -x --bzip2 -f $(gcc_tarpath);; \
+ *.gz) tar -x --gzip -f $(gcc_tarpath);; \
+ *.lzma) lzcat $(gcc_tarpath) | tar -x -f -;; \
+ *.xz) xzcat $(gcc_tarpath) | tar -x -f -;; \
+ *) false; \
+ esac
+ mv $(gcc_srcdir) $(srcdir)
+ifneq (,$(wildcard java-class-files.tar.xz.uue))
+# work around #533356
+# uudecode -o - java-class-files.tar.xz.uue | tar -C src -xvz
+ uudecode java-class-files.tar.xz.uue
+ xzcat java-class-files.tar.xz | tar -C src -xv -f -
+ rm -f java-class-files.tar.xz
+endif
+#ifeq ($(with_java),yes)
+# tar -x -C $(srcdir)/libjava/testsuite/libmauve.exp \
+# $(wildcard /usr/src/mauve*.tar.*)
+#endif
+ifeq (0,1)
+ cd $(srcdir) && tar cfj ../gcc-4.1.1-doc.tar.bz2 \
+ $(gfdl_texinfo_files) \
+ $(gfdl_toplevel_texinfo_files) \
+ $(gfdl_manpages)
+endif
+ifeq ($(GFDL_INVARIANT_FREE),yes)
+ ifneq ($(single_package),yes)
+ rm -f $(srcdir)/gcc/doc/*.1
+ rm -f $(srcdir)/gcc/doc/fsf-funding.7
+ rm -f $(srcdir)/gcc/doc/*.info
+ rm -f $(srcdir)/gcc/fortran/*.info
+ rm -f $(srcdir)/libgomp/*.info
+ rm -f $(srcdir)/gcc/java/*.1
+ rm -f $(srcdir)/gcc/java/*.info
+ for i in $(gfdl_texinfo_files); do \
+ if [ -f $(srcdir)/$$i ]; then \
+ cp $(SOURCE_DIR)debian/dummy.texi $(srcdir)/$$i; \
+ else \
+ echo >&2 "$$i does not exist, fix debian/rules.unpack"; \
+ fi; \
+ done
+ for i in $(gfdl_toplevel_texinfo_files); do \
+ n=$$(basename $$i .texi); \
+ if [ -f $(srcdir)/$$i ]; then \
+ sed "s/@name@/$$n/g" $(SOURCE_DIR)debian/gcc-dummy.texi \
+ > $(srcdir)/$$i; \
+ else \
+ echo >&2 "$$i does not exist, fix debian/rules.unpack"; \
+ fi; \
+ done
+ for i in $(gfdl_manpages); do \
+ touch $(srcdir)/$$i; \
+ done
+ rm -f $(srcdir)/INSTALL/*.html
+ endif
+endif
+ echo "$(gcc_tarball) unpacked." > $@
+
+# ---------------------------------------------------------------------------
+ifneq (,$(gcj_tarball))
+$(unpack_stamp)-$(gcj_tarball): $(gcj_tarpath) $(unpack_stamp)-$(gcc_tarball)
+ : # unpack gcj tarball
+ rm -rf $(srcdir)/gcc/java $(srcdir)/libjava
+ tar -x -C $(srcdir) -f $(gcj_tarpath)
+ifeq ($(GFDL_INVARIANT_FREE),yes)
+ ifneq ($(single_package),yes)
+ rm -f $(srcdir)/gcc/java/*.1
+ rm -f $(srcdir)/gcc/java/*.info
+ for i in $(gfdl_texinfo_files); do \
+ if [ -f $(srcdir)/$$i ]; then \
+ cp $(SOURCE_DIR)debian/dummy.texi $(srcdir)/$$i; \
+ else \
+ echo >&2 "$$i does not exist, fix debian/rules.unpack"; \
+ fi; \
+ done
+ for i in $(gfdl_toplevel_texinfo_files); do \
+ n=$$(basename $$i .texi); \
+ if [ -f $(srcdir)/$$i ]; then \
+ sed "s/@name@/$$n/g" $(SOURCE_DIR)debian/gcc-dummy.texi \
+ > $(srcdir)/$$i; \
+ else \
+ echo >&2 "$$i does not exist, fix debian/rules.unpack"; \
+ fi; \
+ done
+ endif
+endif
+ echo "$(gcj_tarball) unpacked." > $@
+endif
+
+# ---------------------------------------------------------------------------
+ifneq (,$(gdc_tarball))
+$(unpack_stamp)-$(gdc_tarball): $(gdc_tarpath)
+ ifneq ($(with_libphobos),yes)
+ echo >&2 "libphobos v2 needs porting: $(with_libphobos)"
+ false
+ endif
+ : # unpack gdc tarball
+ -mkdir $(stampdir)
+ if [ -d $(srcdir)/gcc/d ]; then \
+ echo >&2 "Source directory $(srcdir)/gcc/d exists. Delete by hand";\
+ false; \
+ fi
+ #rm -rf $(gdc_srcdir)
+ rm -rf d
+ case $(gdc_tarball) in \
+ *.bz2) tar -x --bzip2 -f $(gdc_tarpath);; \
+ *.gz) tar -x --gzip -f $(gdc_tarpath);; \
+ *.lzma) lzcat $(gdc_tarpath) | tar -x -f -;; \
+ *.xz) xzcat $(gdc_tarpath) | tar -x -f -;; \
+ *) false; \
+ esac
+ if [ -d d ]; then \
+ mv d $(srcdir)/gcc/. ; \
+ else \
+ mv $(gdc_srcdir)/d $(srcdir)/gcc/. ; \
+ rm -rf $(gdc_srcdir)/CVS; \
+ rmdir $(gdc_srcdir); \
+ fi
+ ifeq ($(with_libphobos),yes)
+ [ -d $(srcdir)/libphobos ] && rm -rf $(srcdir)/libphobos || true
+ mkdir $(srcdir)/libphobos && \
+ cd $(srcdir)/libphobos && \
+ ../symlink-tree ../gcc/d/phobos$(libphobos_version) 2>&1 && \
+ cd $(srcdir)
+ endif
+ ifeq ($(libphobos_version),2)
+ cd $(srcdir)/libphobos && \
+ ../symlink-tree ../gcc/d/druntime 2>&1 && \
+ cd $(srcdir)
+ echo "D_LANGUAGE_VERSION=2" > $(srcdir)/gcc/d/d-make-include
+ else
+ echo "D_LANGUAGE_VERSION=1" > $(srcdir)/gcc/d/d-make-include
+ endif
+ echo "$(gdc_tarball) unpacked." > $@
+endif
diff --git a/debian/rules2 b/debian/rules2
new file mode 100644
index 0000000..1ad5c97
--- /dev/null
+++ b/debian/rules2
@@ -0,0 +1,2152 @@
+#! /usr/bin/make -f
+# -*- makefile -*-
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+.SUFFIXES:
+
+include debian/rules.defs
+include debian/rules.parameters
+
+# some tools
+SHELL = /bin/bash -e # brace expansion in rules file
+IR = install -m 644 # Install regular file
+IP = install -m 755 # Install program
+IS = install -m 755 # Install script
+
+#number of jobs to run for build
+ifeq ($(USE_NJOBS),no)
+ NJOBS :=
+ USE_CPUS := 1
+else
+ ifeq ($(with_java),yes)
+ MEM_PER_CPU = 192
+ else
+ MEM_PER_CPU = 128
+ endif
+ NUM_CPUS := $(shell if echo $(USE_NJOBS) | grep -q -E '^[0-9]+$$'; \
+ then echo $(USE_NJOBS); \
+ else getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1; fi)
+ USE_CPUS := $(shell mt=`awk '/^MemTotal/ { print $$2 }' /proc/meminfo`; \
+ awk -vn=$(NUM_CPUS) -vmt=$$mt -vm=$(MEM_PER_CPU) \
+ 'END { mt/=1024; n2 = int(mt/m); print n==1 ? 1 : n2<n+1 ? n2 : n+1}' < /dev/null)
+ ifneq (,$(strip $(USE_CPUS)))
+ NJOBS := -j $(USE_CPUS)
+ endif
+endif
+
+# Support parallel=<n> in DEB_BUILD_OPTIONS (see #209008)
+ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
+ NJOBS := -j $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
+endif
+
+# On kfreebsd-*, disable parallel builds due to #637236. Note that we
+# override even DEB_BUILD_OPTIONS.
+ifneq (,$(filter $(DEB_TARGET_ARCH), kfreebsd-amd64 kfreebsd-i386))
+ USE_NJOBS := no
+ NJOBS :=
+ USE_CPUS := 1
+endif
+
+# kernel-specific ulimit hack
+ifeq ($(findstring linux,$(DEB_HOST_GNU_SYSTEM)),linux)
+ ULIMIT_M = if [ -e /proc/meminfo ]; then \
+ m=`awk '/^((Mem|Swap)Free|Cached)/{m+=$$2}END{print int(m*.9)}' \
+ /proc/meminfo`; \
+ else \
+ m=`vmstat --free --swap-free --kilobytes|awk '{m+=$$2}END{print int(m*.9)}'`; \
+ fi; \
+ ulimit -m $$m; \
+ echo "Limited memory for test runs to `ulimit -m`kB"
+else
+ ULIMIT_M = true
+endif
+
+ifeq ($(locale_data),generate)
+ SET_LOCPATH = LOCPATH=$(PWD)/locales
+endif
+
+SET_PATH = PATH=$(PWD)/bin:/usr/$(libdir)/gcc/bin:$$PATH
+ifeq ($(trunk_build),yes)
+ ifneq (,$(findstring sparc64-linux,$(DEB_TARGET_GNU_TYPE)))
+ SET_PATH = PATH=/usr/lib/gcc-snapshot/bin:$(PWD)/bin:/usr/$(libdir)/gcc/bin:$$PATH
+ endif
+ ifneq (,$(findstring ppc64-linux,$(DEB_TARGET_GNU_TYPE)))
+ SET_PATH = PATH=/usr/lib/gcc-snapshot/bin:$(PWD)/bin:/usr/$(libdir)/gcc/bin:$$PATH
+ endif
+endif
+
+# the recipient for the test summaries. Send with: debian/rules mail-summary
+S_EMAIL = gcc@packages.debian.org gcc-testresults@gcc.gnu.org
+
+# build not yet prepared to take variables from the environment
+define unsetenv
+ unexport $(1)
+ $(1) =
+endef
+$(foreach v, CPPFLAGS CFLAGS CXXFLAGS FFLAGS LDFLAGS, $(if $(filter environment,$(origin $(v))),$(eval $(call unsetenv, $(v)))))
+
+ifeq ($(REVERSE_CROSS),yes)
+ CC =
+else
+ CC = $(if $(filter yes,$(with_ada)),gnatgcc,gcc)
+endif
+
+ifneq ($(distribution),Ubuntu)
+ ifneq (,$(filter $(DEB_TARGET_ARCH), arm armel mips mipsel))
+ STAGE1_CFLAGS = -g -O2
+ endif
+endif
+
+ifeq ($(with_d),yes)
+ CFLAGS += -std=gnu99
+ LDFLAGS += -lm
+endif
+
+ifeq ($(with_ssp_default),yes)
+ STAGE1_CFLAGS = -g
+ BOOT_CFLAGS = -g -O2
+ LIBCFLAGS = -g -O2
+ LIBCXXFLAGS = -g -O2 -fno-implicit-templates
+ # Only use -fno-stack-protector when known to the stage1 compiler.
+ cc-fno-stack-protector := $(shell if $(CC) $(CFLAGS) -fno-stack-protector \
+ -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \
+ then echo "-fno-stack-protector"; fi;)
+ $(foreach var,STAGE1_CFLAGS BOOT_CFLAGS LIBCFLAGS LIBCXXFLAGS,$(eval \
+ $(var) += $(cc-fno-stack-protector)))
+endif
+
+ifeq ($(DEB_CROSS),yes)
+ CFLAGS = -g -O2
+endif
+
+ifneq (,$(findstring static,$(DEB_BUILD_OPTIONS)))
+ LDFLAGS += -static
+endif
+
+CFLAGS_TO_PASS = \
+ $(if $(CFLAGS),CFLAGS="$(CFLAGS)") \
+ $(if $(BOOT_CFLAGS),BOOT_CFLAGS="$(BOOT_CFLAGS)") \
+ $(if $(LIBCFLAGS),LIBCFLAGS="$(LIBCFLAGS)") \
+ $(if $(LIBCXXFLAGS),LIBCXXFLAGS="$(LIBCXXFLAGS)")
+LDFLAGS_TO_PASS = \
+ $(if $(LDFLAGS),LDFLAGS="$(LDFLAGS)")
+STAGE1_CFLAGS_TO_PASS = \
+ $(if $(STAGE1_CFLAGS),STAGE1_CFLAGS="$(STAGE1_CFLAGS)")
+
+docdir = usr/share/doc
+
+CONFARGS = -v \
+ --with-pkgversion='$(distribution)$(if $(with_linaro_branch),/Linaro)___$(DEB_VERSION)' \
+ --with-bugurl='file:///usr/share/doc/$(PKGSOURCE)/README.Bugs'
+
+CONFARGS += \
+ --enable-languages=$(subst $(SPACE),$(COMMA),$(enabled_languages)) \
+ --prefix=/$(PF)
+
+ifeq ($(versioned_packages),yes)
+ CONFARGS += --program-suffix=-$(BASE_VERSION)
+endif
+
+ifdef DEB_STAGE
+ CONFARGS += \
+ --disable-libgomp \
+ --disable-libmudflap \
+ --disable-libssp \
+ --disable-multiarch \
+ --disable-multilib \
+ --disable-libquadmath \
+ --disable-threads \
+ --libexecdir=/$(libexecdir) \
+ --libdir=/$(PF)/$(configured_libdir) \
+ --with-build-sysroot=$(with_build_sysroot) \
+ --with-sysroot=$(with_sysroot)
+
+ ifeq ($(DEB_STAGE),stage1)
+ CONFARGS += \
+ --disable-shared \
+ --with-newlib \
+ --without-headers
+ else
+ # stage2
+ CONFARGS += \
+ --enable-shared
+ endif
+else
+ CONFARGS += \
+ --enable-shared \
+ --enable-linker-build-id \
+ --with-system-zlib \
+
+ifneq ($(single_package),yes)
+ CONFARGS += \
+ --libexecdir=/$(libexecdir) \
+ --without-included-gettext \
+ --enable-threads=posix \
+ --with-gxx-include-dir=/$(cxx_inc_dir) \
+ --libdir=/$(PF)/$(configured_libdir)
+endif
+
+ifneq ($(with_cpp),yes)
+ CONFARGS += --disable-cpp
+endif
+
+ifeq ($(with_nls),yes)
+ CONFARGS += --enable-nls
+else
+ CONFARGS += --disable-nls
+endif
+
+ifeq ($(with_bootstrap),off)
+ CONFARGS += --disable-bootstrap
+else ifneq ($(with_bootstrap),)
+ CONFARGS += --enable-bootstrap=$(with_bootstrap)
+endif
+
+ifneq ($(with_sysroot),)
+ CONFARGS += --with-sysroot=$(with_sysroot)
+endif
+ifneq ($(with_build_sysroot),)
+ CONFARGS += --with-build-sysroot=$(with_build_sysroot)
+endif
+
+ifeq ($(force_gnu_locales),yes)
+ CONFARGS += --enable-clocale=gnu
+endif
+
+ifeq ($(with_cxx)-$(with_debug),yes-yes)
+ CONFARGS += --enable-libstdcxx-debug
+endif
+ CONFARGS += --enable-libstdcxx-time=yes
+
+ifneq ($(with_ssp),yes)
+ CONFARGS += --disable-libssp
+endif
+
+ifneq ($(with_mudflap),yes)
+ CONFARGS += --disable-libmudflap
+endif
+
+ifneq ($(with_gomp),yes)
+ CONFARGS += --disable-libgomp
+endif
+
+ifeq ($(with_plugins),yes)
+ CONFARGS += --enable-plugin
+endif
+
+#ifeq ($(with_gold),yes)
+# CONFARGS += --enable-gold --enable-ld=default
+#endif
+
+#CONFARGS += --with-plugin-ld=ld.gold
+#CONFARGS += --with-plugin-ld
+
+jvm_name_short = java-1.5.0-gcj-$(BASE_VERSION)$(if $(findstring snap,$(PKGSOURCE)),-snap)
+jvm_name_long = $(jvm_name_short)-1.5.0.0
+
+ifeq ($(with_java),yes)
+ CONFARGS += --disable-browser-plugin
+ ifeq ($(with_java_maintainer_mode),yes)
+ CONFARGS += --enable-java-maintainer-mode
+ endif
+ ifeq ($(with_java_biarch_awt),yes)
+ CONFARGS += --enable-java-awt=$(subst $(SPACE),$(COMMA),$(foreach p,$(java_awt_peers),$(p)-default))
+ else
+ CONFARGS += --enable-java-awt=$(subst $(SPACE),$(COMMA),$(foreach p,$(java_awt_peers),$(p)))
+ endif
+ ifneq (,$(findstring gtk,$(java_awt_peers)))
+ CONFARGS += --enable-gtk-cairo
+ endif
+ jvm_dir = /usr/lib/jvm/$(jvm_name_short)
+ CONFARGS += --with-java-home=$(jvm_dir)/jre
+ CONFARGS += --enable-java-home \
+ --with-jvm-root-dir=$(jvm_dir) \
+ --with-jvm-jar-dir=/usr/lib/jvm-exports/$(jvm_name_short)
+ CONFARGS += --with-arch-directory=$(java_cpu)
+ ifeq (./,$(dir $(ecj_jar)))
+ CONFARGS += --with-ecj-jar=$(jvm_dir)/lib/ecj.jar
+ else
+ CONFARGS += --with-ecj-jar=$(ecj_jar)
+ endif
+endif
+
+ifeq ($(with_gcj),yes)
+ ifeq ($(DEB_HOST_GNU_CPU),m32r)
+ CONFARGS += --enable-libgcj
+ endif
+endif
+
+ifeq ($(with_objc)-$(with_objc_gc),yes-yes)
+ CONFARGS += --enable-objc-gc
+endif
+
+ifneq (,$(filter $(DEB_TARGET_GNU_TYPE), i486-linux-gnu i586-linux-gnu i686-linux-gnu))
+ ifeq ($(biarch64),yes)
+ CONFARGS += --enable-targets=all
+ endif
+endif
+
+ifneq (,$(filter $(DEB_TARGET_GNU_TYPE), x86_64-linux-gnu x86_64-kfreebsd-gnu s390x-linux-gnu))
+ ifneq ($(biarch32),yes)
+ CONFARGS += --disable-multilib
+ endif
+endif
+
+ifneq (,$(filter $(DEB_TARGET_GNU_TYPE), powerpc-linux-gnu powerpc-linux-gnuspe))
+ CONFARGS += --enable-secureplt
+ ifeq ($(biarch64),yes)
+ CONFARGS += --disable-softfloat \
+ --enable-targets=powerpc-linux,powerpc64-linux --with-cpu=default32
+ else
+ CONFARGS += --disable-multilib
+ endif
+endif
+
+ifneq (,$(findstring powerpc64-linux,$(DEB_TARGET_GNU_TYPE)))
+ CONFARGS += --enable-secureplt
+ ifeq ($(biarch32),yes)
+ CONFARGS += --disable-softfloat --enable-targets=powerpc64-linux,powerpc-linux
+ else
+ CONFARGS += --disable-multilib
+ endif
+ ifeq ($(distribution),Ubuntu)
+ CONFARGS += --with-cpu-32=power7 --with-cpu-64=power7
+ endif
+endif
+
+ifeq ($(REVERSE_CROSS),yes)
+ # FIXME: requires ppl and cloog headers for the target
+ CONFARGS += --without-ppl
+ # FIXME: build currently fails build the precompiled headers
+ CONFARGS += --disable-libstdcxx-pch
+endif
+endif # !DEB_STAGE
+
+ifeq ($(findstring powerpcspe,$(DEB_TARGET_ARCH)),powerpcspe)
+ CONFARGS += --with-cpu=8548 --enable-e500_double --with-long-double-128
+endif
+
+ifneq (,$(findstring softfloat,$(DEB_TARGET_GNU_CPU)))
+ CONFARGS += --with-float=soft
+endif
+
+ifneq (,$(findstring arm-vfp,$(DEB_TARGET_GNU_CPU)))
+ CONFARGS += --with-fpu=vfp
+endif
+
+ifneq (,$(findstring arm, $(DEB_TARGET_GNU_CPU)))
+ ifeq ($(multilib),yes)
+ CONFARGS += --enable-multilib
+ endif
+ CONFARGS += --disable-sjlj-exceptions
+ # FIXME: libjava is not ported for thumb, this hack only works for
+ # separate gcj builds
+ # any Ubuntu arch or Debian armhf arch
+ ifneq (,$(filter Ubuntu-% Debian-armhf,$(distribution)-$(DEB_TARGET_ARCH)))
+ ifneq (,$(findstring gcj,$(PKGSOURCE)))
+ CONFARGS += --with-arch=armv6
+ else
+ CONFARGS += --with-arch=armv7-a
+ endif
+ CONFARGS += --with-float=$(float_abi) --with-fpu=vfpv3-d16
+ else
+ # Debian armel
+ CONFARGS += --with-arch=armv4t --with-float=$(float_abi)
+ endif
+ ifeq ($(with_arm_thumb),yes)
+ CONFARGS += --with-mode=thumb
+ endif
+endif
+
+ifeq ($(DEB_TARGET_GNU_CPU),$(findstring $(DEB_TARGET_GNU_CPU),m68k))
+ CONFARGS += --disable-werror
+endif
+# FIXME: correct fix-warnings.dpatch
+ifeq ($(distribution),Ubuntu)
+ CONFARGS += --disable-werror
+endif
+
+ifneq (,$(findstring sparc-linux,$(DEB_TARGET_GNU_TYPE)))
+ ifeq ($(biarch64),yes)
+ CONFARGS += --enable-targets=all
+ endif
+endif
+
+ifneq (,$(findstring sparc64-linux,$(DEB_TARGET_GNU_TYPE)))
+ ifneq ($(biarch32),yes)
+ CONFARGS += --disable-multilib
+ endif
+endif
+
+ifneq (,$(findstring ia64-linux,$(DEB_TARGET_GNU_TYPE)))
+ CONFARGS += --with-system-libunwind
+endif
+
+ifneq (,$(findstring sh4-linux,$(DEB_TARGET_GNU_TYPE)))
+ CONFARGS += --with-multilib-list=m4,m4-nofpu --with-cpu=sh4
+endif
+
+ifneq (,$(findstring m68k-linux,$(DEB_TARGET_GNU_TYPE)))
+ CONFARGS += --disable-multilib
+endif
+
+ifeq ($(DEB_TARGET_ARCH_OS),linux)
+ ifneq (,$(findstring $(DEB_TARGET_ARCH), alpha powerpc ppc64 s390 s390x sparc sparc64))
+ ifeq ($(DEB_TARGET_ARCH),alpha)
+ glibc_version := $(shell dpkg -s libc6.1 | awk '/^Version:/ {print $$2}')
+ else
+ glibc_version := $(shell dpkg -s libc6 | awk '/^Version:/ {print $$2}')
+ endif
+ with_ldbl128 := $(shell dpkg --compare-versions $(glibc_version) gt 2.3.99 && echo yes)
+ ifeq ($(with_ldbl128),yes)
+ CONFARGS += --with-long-double-128
+ endif
+ endif
+endif
+
+ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 i386 kfreebsd-i386 kfreebsd-amd64))
+ ifneq (,$(filter $(distrelease),etch lenny dapper hardy))
+ CONFARGS += --with-arch-32=i486
+ else ifneq (,$(filter $(distrelease),squeeze wheezy sid jaunty karmic lucid))
+ CONFARGS += --with-arch-32=i586
+ else
+ CONFARGS += --with-arch-32=i686
+ endif
+endif
+
+ifneq (,$(filter $(DEB_TARGET_ARCH), hurd-i386))
+ CONFARGS += --with-arch=i586
+endif
+
+ifeq ($(DEB_TARGET_ARCH),lpia)
+ CONFARGS += --with-arch=pentium-m --with-tune=i586
+endif
+
+ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 i386 hurd-i386 kfreebsd-i386 kfreebsd-amd64))
+ CONFARGS += --with-tune=generic
+endif
+
+ifneq (,$(findstring mips-linux,$(DEB_TARGET_GNU_TYPE)))
+ CONFARGS += --with-mips-plt
+ CONFARGS += --with-arch-32=mips2 --with-tune-32=mips32
+ ifeq ($(biarchn32)-$(biarch64),yes-yes)
+ CONFARGS += --enable-targets=all
+ CONFARGS += --with-arch-64=mips3 --with-tune-64=mips64
+ endif
+endif
+
+ifneq (,$(findstring mipsel-linux,$(DEB_TARGET_GNU_TYPE)))
+ CONFARGS += --with-mips-plt
+ CONFARGS += --with-arch-32=mips2 --with-tune-32=mips32
+ ifeq ($(biarchn32)-$(biarch64),yes-yes)
+ CONFARGS += --enable-targets=all
+ CONFARGS += --with-arch-64=mips3 --with-tune-64=mips64
+ endif
+endif
+
+ifneq (,$(findstring s390-linux,$(DEB_TARGET_GNU_TYPE)))
+ ifeq ($(biarch64),yes)
+ CONFARGS += --enable-targets=all
+ endif
+endif
+
+ifneq (,$(findstring hppa-linux,$(DEB_TARGET_GNU_TYPE)))
+ CONFARGS += --disable-libstdcxx-pch
+endif
+
+ifneq (,$(findstring gdc, $(PKGSOURCE)))
+ CONFARGS += --disable-libquadmath
+endif
+
+ifeq ($(trunk_build),yes)
+ ifeq ($(findstring --disable-werror, $(CONFARGS)),)
+ CONFARGS += --disable-werror
+ endif
+ CONFARGS += --enable-checking=yes
+else
+ CONFARGS += --enable-checking=release
+endif
+
+CONFARGS += \
+ --build=$(DEB_BUILD_GNU_TYPE) \
+ --host=$(DEB_HOST_GNU_TYPE) \
+ --target=$(TARGET_ALIAS)
+
+ifeq ($(DEB_CROSS),yes)
+ CONFARGS += \
+ --program-prefix=$(TARGET_ALIAS)- \
+ --includedir=/$(PFL)/include
+ ifndef DEB_STAGE
+ CONFARGS += \
+ --with-headers=/$(PFL)/include \
+ --with-libs=/$(PFL)/lib
+ endif
+ SET_CROSS_LIB_PATH = LD_LIBRARY_PATH=/lib:/usr/lib:$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib$${DIRNAME}
+endif
+
+ifeq ($(with_bootstrap),off)
+ bootstrap_target =
+else ifeq ($(with_bootstrap),)
+ bootstrap_target = bootstrap-lean
+ # no profiledbootstrap on the following architectures
+ # - m68k: we're happy that it builds at all
+ no_profiled_bs_archs := alpha arm hppa m68k
+ ifeq (,$(findstring $(DEB_TARGET_GNU_CPU),$(no_profiled_bs_archs)))
+ bootstrap_target = profiledbootstrap
+ endif
+ ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+ bootstrap_target = bootstrap-lean
+ endif
+ ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+ bootstrap_target = bootstrap-lean
+ endif
+
+ # disable profiled bootstrap on slow archs, get to testing first ...
+ ifeq ($(distribution),Debian)
+ ifneq (,$(filter $(DEB_TARGET_ARCH), arm armel armhf mips mipsel sparc))
+ bootstrap_target = bootstrap-lean
+ endif
+ endif
+ ifeq ($(distribution),Ubuntu)
+ ifneq (,$(filter $(DEB_TARGET_ARCH), sparc))
+ bootstrap_target = bootstrap-lean
+ endif
+ endif
+endif
+ bootstrap_target = bootstrap-lean
+
+DEJAGNU_TIMEOUT=300
+# Increase the timeout for one testrun on slow architectures
+ifeq ($(distribution),Debian)
+ ifneq (,$(findstring $(DEB_TARGET_ARCH),arm armel armhf hppa m68k sparc))
+ DEJAGNU_TIMEOUT=600
+ else ifneq (,$(findstring $(DEB_TARGET_GNU_CPU),amd64 i386 i486 i686 lpia))
+ DEJAGNU_TIMEOUT=180
+ endif
+ ifeq ($(DEB_TARGET_GNU_SYSTEM),gnu)
+ DEJAGNU_TIMEOUT=900
+ endif
+else ifeq ($(distribution),Ubuntu)
+ ifneq (,$(findstring $(DEB_TARGET_ARCH),armel armhf hppa ia64 sparc))
+ DEJAGNU_TIMEOUT=600
+ else ifneq (,$(findstring $(DEB_TARGET_GNU_CPU),amd64 i386 i486 i686 lpia))
+ DEJAGNU_TIMEOUT=180
+ endif
+endif
+
+DEJAGNU_RUNS =
+ifneq ($(trunk_build),yes)
+ifeq ($(with_ssp),yes)
+ ifneq ($(single_package),yes)
+ DEJAGNU_RUNS += $(if $(filter yes,$(with_ssp_default)),-fno-stack-protector,-fstack-protector)
+ endif
+ # FIXME Ubuntu armel buildd hangs
+ ifneq (,$(findstring arm, $(DEB_TARGET_GNU_CPU)))
+ DEJAGNU_RUNS =
+ endif
+ ifeq ($(distribution),Ubuntu)
+ # the buildds are just slow ... don't check the non-default
+ ifneq (,$(findstring $(DEB_TARGET_GNU_CPU),ia64 powerpc sparc))
+ DEJAGNU_RUNS =
+ endif
+ endif
+endif
+endif
+
+ifeq ($(distribution),Ubuntu)
+ ifneq (,$(findstring arm, $(DEB_TARGET_GNU_CPU)))
+ ifeq ($(with_arm_thumb),yes)
+ #DEJAGNU_RUNS += -marm
+ else
+ DEJAGNU_RUNS += -mthumb
+ endif
+ endif
+endif
+
+ifeq ($(with_32bit_check),yes)
+ DEJAGNU_RUNS += -m32
+endif
+ifeq ($(with_64bit_check),yes)
+ ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),mips mipsel))
+ DEJAGNU_RUNS += -mabi=64
+ else
+ DEJAGNU_RUNS += -m64
+ endif
+endif
+ifeq ($(with_n32bit_check),yes)
+ DEJAGNU_RUNS += -mabi=n32
+endif
+
+# gdc is not multilib'd
+ifneq (,$(findstring gdc, $(PKGSOURCE)))
+ DEJAGNU_RUNS =
+endif
+
+# neither is gnat
+ifneq (,$(findstring gnat, $(PKGSOURCE)))
+ DEJAGNU_RUNS =
+endif
+
+ifneq (,$(DEJAGNU_RUNS))
+ RUNTESTFLAGS = RUNTESTFLAGS="--target_board=unix\{,$(subst $(SPACE),$(COMMA),$(strip $(DEJAGNU_RUNS)))\}"
+endif
+
+# PF is the installation prefix for the package without the leading slash.
+# It's "usr" for gcc releases.
+ifneq (,$(PF))
+ # use value set in the environment
+else ifeq ($(trunk_build),yes)
+ PF = usr/lib/gcc-snapshot
+else ifeq ($(PKGSOURCE),gcc-linaro)
+ PF = usr/lib/gcc-linaro
+else
+ PF = usr
+endif
+
+# PFL is the installation prefix with DEB_TARGET_GNU_TYPE attached for cross builds
+ifeq ($(DEB_CROSS),yes)
+ PFL = $(PF)/$(DEB_TARGET_GNU_TYPE)
+else
+ PFL = $(PF)
+endif
+
+# RPF is the base prefix or installation prefix with DEB_TARGET_GNU_TYPE attached for cross builds
+ifeq ($(DEB_CROSS),yes)
+ RPF = $(PF)/$(DEB_TARGET_GNU_TYPE)
+else
+ RPF =
+endif
+
+ifeq ($(with_multiarch_lib),yes)
+ ifeq ($(DEB_CROSS),yes)
+ libdir = lib
+ else
+ libdir = lib/$(DEB_TARGET_MULTIARCH)
+ endif
+else
+ libdir = lib
+endif
+configured_libdir = lib
+
+spulibexecdir = $(PF)/lib
+hppa64libexecdir= $(PF)/lib
+
+# /usr/libexec doesn't follow the FHS
+ifeq ($(single_package),yes)
+ libdir = lib
+ libexecdir = $(PF)/libexec
+ versiondir = $(GCC_VERSION)
+else
+ libexecdir = $(PF)/$(configured_libdir)
+ versiondir = $(BASE_VERSION)
+endif
+buildlibdir = $(builddir)/$(TARGET_ALIAS)
+
+gcc_lib_dir = $(PF)/$(configured_libdir)/gcc/$(TARGET_ALIAS)/$(versiondir)
+gcc_lexec_dir = $(libexecdir)/gcc/$(TARGET_ALIAS)/$(versiondir)
+gcc_spu_lib_dir = $(PF)/spu/lib/gcc/spu/$(versiondir)
+gcc_spu_lexec_dir = $(spulibexecdir)/gcc/spu/$(versiondir)
+
+lib32 = $(PF)/lib32
+lib64 = lib64
+libn32 = lib32
+
+p_l= $(1)$(cross_lib_arch)
+p_d= $(1)-dbg$(cross_lib_arch)
+d_l= debian/$(p_l)
+d_d= debian/$(p_d)
+
+ifeq ($(DEB_CROSS),yes)
+ usr_lib = $(PFL)/lib
+else
+ usr_lib = $(PFL)/$(libdir)
+endif
+usr_lib32 = $(PFL)/lib32
+usr_libn32 = $(PFL)/lib32
+usr_lib64 = $(PFL)/lib64
+# FIXME: Don't hard code
+usr_libhf = $(PFL)/lib/arm-linux-gnueabihf
+usr_libsf = $(PFL)/lib/arm-linux-gnueabi
+
+gcc_lib_dir32 = $(gcc_lib_dir)/$(biarch32subdir)
+gcc_lib_dirn32 = $(gcc_lib_dir)/$(biarchn32subdir)
+gcc_lib_dir64 = $(gcc_lib_dir)/$(biarch64subdir)
+# FIXME: Don't hard code
+gcc_lib_dirhf = $(gcc_lib_dir)/$(biarchhfsubdir)
+gcc_lib_dirsf = $(gcc_lib_dir)/$(biarchsfsubdir)
+
+libgcc_dir = $(RPF)/$(libdir)
+# yes, really; lib32gcc_s ends up in usr
+libgcc_dir32 = $(PFL)/lib32
+libgcc_dirn32 = $(RPF)/lib32
+libgcc_dir64 = $(RPF)/lib64
+libgcc_dirhf = $(RPF)/lib/arm-linux-gnueabihf
+libgcc_dirsf = $(RPF)/lib/arm-linux-gnueabi
+
+# install_gcc_lib(lib,soname,flavour,package)
+define install_gcc_lib
+ mv $(d)/$(usr_lib$(3))/$(1)*.a debian/$(4)/$(gcc_lib_dir$(3))/
+ rm -f $(d)/$(usr_lib$(3))/$(1)*.{la,so}
+ dh_link -p$(4) \
+ /$(usr_lib$(3))/$(1).so.$(2) /$(gcc_lib_dir$(3))/$(1).so
+
+endef
+
+checkdirs = $(builddir)
+ifeq ($(with_separate_libgcj),yes)
+ ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+ ifneq ($(with_standalone_gcj),yes)
+ checkdirs = $(buildlibdir)/libffi $(buildlibdir)/libjava
+ endif
+ endif
+endif
+ifeq ($(with_separate_gnat),yes)
+ ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+ checkdirs = $(builddir)/gcc
+ endif
+endif
+
+ifneq ($(DEB_CROSS),yes)
+ ifneq ($(single_package),yes)
+ cxx_inc_dir = $(PF)/include/c++/$(BASE_VERSION)
+ else
+ cxx_inc_dir = $(PF)/include/c++/$(GCC_VERSION)
+ endif
+else
+ cxx_inc_dir = $(PF)/$(TARGET_ALIAS)/include/c++/$(GCC_VERSION)
+endif
+
+default: build
+
+configure: $(configure_dependencies)
+
+$(configure_dummy_stamp):
+ touch $(configure_dummy_stamp)
+
+$(configure_stamp):
+ dh_testdir
+ : # give information about the build process
+ @echo "------------------------ Build process variables ------------------------"
+ @echo "Number of parallel processes used for the build: $(USE_CPUS)"
+ @echo "Package source: $(PKGSOURCE)"
+ @echo "GCC version: $(GCC_VERSION)"
+ @echo "Base Debian version: $(BASE_VERSION)"
+ @echo -e "Configured with: $(subst ___, ,$(foreach i,$(CONFARGS),$(i)\n\t))"
+ifeq ($(DEB_CROSS),yes)
+ @echo "Building cross compiler for $(DEB_TARGET_ARCH)"
+endif
+ @echo "Using shell $(SHELL)"
+ @echo "Architecture: $(DEB_TARGET_ARCH) (GNU: $(TARGET_ALIAS))"
+ @echo "CPPFLAGS: $(CPPFLAGS)"
+ @echo "CFLAGS: $(CFLAGS)"
+ @echo "LDFLAGS: $(LDFLAGS)"
+ @echo "BOOT_CFLAGS: $(BOOT_CFLAGS)"
+ @echo "DEBIAN_BUILDARCH: $(DEBIAN_BUILDARCH)"
+ @echo "Install prefix: /$(PF)"
+ifeq ($(biarchn32)-$(biarch64),yes-yes)
+ @echo "Will build the triarch compilers (o32/n32/64, defaulting to o32)"
+else
+ ifeq ($(biarch64),yes)
+ @echo "Will build the biarch compilers (32/64, defaulting to 32bit)"
+ else
+ ifeq ($(biarch32),yes)
+ @echo "Will build the biarch compilers (64/32, defaulting to 64bit)"
+ else
+ @echo "Will not build the biarch compilers"
+ endif
+ endif
+endif
+
+ifeq ($(with_cxx),yes)
+ @echo "Will build the C++ compiler"
+else
+ @echo "Will not build the C++ compiler: $(with_cxx)"
+endif
+ifeq ($(with_objc),yes)
+ @echo "Will build the ObjC compiler."
+ ifeq ($(with_objc_gc),yes)
+ @echo "Will build the extra ObjC runtime for garbage collection."
+ else
+ @echo "Will not build the extra ObjC runtime for garbage collection."
+ endif
+else
+ @echo "Will not build the ObjC compiler: $(with_objc)"
+endif
+ifeq ($(with_objcxx),yes)
+ @echo "Will build the Obj-C++ compiler"
+else
+ @echo "Will not build the Obj-C++ compiler: $(with_objcxx)"
+endif
+ifeq ($(with_fortran),yes)
+ @echo "Will build the Fortran 95 compiler."
+else
+ @echo "Will not build the Fortran 95 compiler: $(with_fortran)"
+endif
+ifeq ($(with_java),yes)
+ @echo "Will build the Java compiler."
+else
+ @echo "Will not build the Java compiler: $(with_java)"
+endif
+ifeq ($(with_ada),yes)
+ @echo "Will build the Ada compiler."
+ ifeq ($(with_libgnat),yes)
+ @echo "Will build the shared Ada libraries."
+ else
+ @echo "Will not build the shared Ada libraries."
+ endif
+else
+ @echo "Will not build the Ada compiler: $(with_ada)"
+endif
+ifeq ($(with_go),yes)
+ @echo "Will build the Go compiler."
+else
+ @echo "Will not build the Go compiler: $(with_go)"
+endif
+ifeq ($(with_d),yes)
+ @echo "Will build the D compiler"
+ ifeq ($(with_libphobos),yes)
+ @echo "Will build the phobos D runtime library."
+ else
+ @echo "Will not build the phobos D runtime library: $(with_libphobos)"
+ endif
+else
+ @echo "Will not build the D compiler: $(with_d)"
+endif
+ifeq ($(with_ssp),yes)
+ @echo "Will build with SSP support."
+else
+ @echo "Will build without SSP support: $(with_ssp)"
+endif
+ifeq ($(with_check),yes)
+ @echo "Will run the testsuite."
+ ifeq ($(biarch64),yes)
+ ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),mips mipsel))
+ @echo 'Will run the testsuite with -mabi=64: $(with_64bit_check)'
+ else
+ @echo 'Will run the testsuite with -m64: $(with_64bit_check)'
+ endif
+ endif
+ ifeq ($(biarch32),yes)
+ @echo 'Will run the testsuite with -m32: $(with_32bit_check)'
+ endif
+ ifeq ($(biarchn32),yes)
+ @echo 'Will run the testsuite with -mabi=n32: $(with_n32bit_check)'
+ endif
+else
+ @echo "Will not run the testsuite: $(with_check)"
+endif
+ifeq ($(with_nls),yes)
+ @echo "Will enable national language support."
+else
+ @echo "Will disable national language support: $(with_nls)"
+endif
+ @echo "-----------------------------------------------------------------------------"
+ @echo ""
+ifeq ($(with_check),yes)
+ @if echo "spawn true" | /usr/bin/expect -f - >/dev/null; then \
+ : ; \
+ else \
+ echo "expect is failing on your system with the above error, which means the GCC"; \
+ echo "testsuite will fail. Please resolve the above issues and retry the build."; \
+ echo "-----------------------------------------------------------------------------"; \
+ exit 1; \
+ fi
+endif
+ rm -f $(configure_stamp) $(build_stamp)
+ cp $(patch_stamp) debian/README.Debian.$(DEB_TARGET_ARCH)
+
+ rm -rf $(builddir)
+ mkdir $(builddir)
+
+ : # configure
+ cd $(builddir) \
+ && $(SET_PATH) \
+ CC="$(CC)" \
+ $(SET_SHELL) \
+ LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}$(builddir)/gcc/ada/rts \
+ ../src/configure $(subst ___, ,$(CONFARGS))
+
+ touch $(configure_stamp)
+
+build: $(build_dependencies)
+
+$(build_dummy_stamp):
+ touch $(build_dummy_stamp)
+
+$(build_locale_stamp):
+ifeq ($(locale_data)-$(with_cxx),generate-yes)
+ : # build locales needed by libstdc++ testsuite
+ rm -rf locales
+ mkdir locales
+ - sh debian/locale-gen
+endif
+ touch $(build_locale_stamp)
+
+
+$(build_stamp): $(configure_stamp) $(build_locale_stamp)
+ dh_testdir
+ rm -f bootstrap-protocol
+# DEB_CROSS is never set if REVERSE_CROSS is set and vice-versa.
+# DEB_CROSS build
+ifeq ($(DEB_CROSS),yes)
+ : # build cross compiler for $(TARGET_ALIAS)
+ ( \
+ set +e; \
+ $(SET_PATH) \
+ $(SET_LOCPATH) \
+ $(MAKE) -C $(builddir) $(NJOBS) \
+ CC="$(CC)" \
+ $(CFLAGS_TO_PASS) \
+ $(LDFLAGS_TO_PASS) \
+ ; \
+ echo $$? > status; \
+ ) 2>&1 | tee bootstrap-protocol
+ s=`cat status`; rm -f status; test $$s -eq 0
+else
+ # REVERSE_CROSS build
+ ifeq ($(REVERSE_CROSS),yes)
+ : # build cross compiler for $(TARGET_ALIAS)
+ ( \
+ set +e; \
+ $(SET_PATH) \
+ $(SET_LOCPATH) \
+ $(MAKE) -C $(builddir) $(NJOBS) \
+ CC="$(CC)" \
+ $(CFLAGS_TO_PASS) \
+ $(LDFLAGS_TO_PASS) \
+ ; \
+ echo $$? > status; \
+ ) 2>&1 | tee bootstrap-protocol
+ s=`cat status`; rm -f status; test $$s -eq 0
+else
+ # Native build
+ ifeq ($(with_java),yes)
+ mkdir -p bin
+ ln -sf /usr/bin/fastjar bin/jar
+ ifeq ($(with_native_ecj),yes)
+ : # prepare the standalone ecj jar
+ cp /usr/share/java/ecj.jar $(srcdir)/ecj-standalone.jar
+ zip -d $(srcdir)/ecj-standalone.jar 'org/eclipse/jdt/core/JDTCompilerAdapter*'
+ endif
+ ifeq ($(with_java_maintainer_mode),yes)
+ ( \
+ echo '#!/bin/sh'; \
+ echo 'exec gij-4.3 -cp /usr/share/java/ecj.jar org.eclipse.jdt.internal.compiler.batch.GCCMain "$$@"'; \
+ ) > bin/ecj1
+ chmod +x bin/ecj1
+ : # If we don't have gjavah in PATH, try to build it with the old gij
+ mkdir -p bin
+ if [ -x /usr/bin/gjavah-4.3 ]; then \
+ ln -sf /usr/bin/gjavah-4.3 bin/gjavah; \
+ elif [ -x bin/gjavah ]; then \
+ : ; \
+ else \
+ mkdir -p $(builddir)/java_hacks; \
+ cd $(builddir)/java_hacks; \
+ cp -a $(srcdir)/libjava/classpath/tools/external external; \
+ mkdir -p gnu/classpath/tools; \
+ cp -a $(srcdir)/libjava/classpath/tools/gnu/classpath/tools/{common,javah,getopt} \
+ gnu/classpath/tools/; \
+ cp -a $(srcdir)/libjava/classpath/resource/gnu/classpath/tools/common/Messages.properties \
+ gnu/classpath/tools/common; \
+ cd external/asm; \
+ for i in `find . -name \*.java`; do gcj-4.3 --encoding ISO-8859-1 -C $$i -I.; done; \
+ cd ../..; \
+ for i in `find gnu -name \*.java`; do gcj-4.3 -C $$i -I. -Iexternal/asm/; done; \
+ gcj-4.3 -findirect-dispatch -O2 -fmain=gnu.classpath.tools.javah.Main \
+ -I. -Iexternal/asm/ `find . -name \*.class` -o $(PWD)/bin/gjavah.real; \
+ ( \
+ echo '#!/bin/sh'; \
+ echo 'export CLASSPATH='`pwd`'$${CLASSPATH:+:$$CLASSPATH}'; \
+ echo 'exec $(PWD)/bin/gjavah.real "$$@"'; \
+ ) > $(PWD)/bin/gjavah; \
+ chmod +x $(PWD)/bin/gjavah; \
+ fi
+ endif
+ endif
+ : # build native compiler
+ ( \
+ set +e; \
+ $(SET_PATH) \
+ $(SET_SHELL) \
+ $(SET_LOCPATH) \
+ $(MAKE) -C $(builddir) $(NJOBS) $(bootstrap_target) \
+ CC="$(CC)" \
+ $(CFLAGS_TO_PASS) \
+ $(STAGE1_CFLAGS_TO_PASS) \
+ $(LDFLAGS_TO_PASS) \
+ ; \
+ echo $$? > status; \
+ ) 2>&1 | tee bootstrap-protocol
+ s=`cat status`; rm -f status; test $$s -eq 0
+endif
+endif
+ -chmod 755 $(srcdir)/contrib/warn_summary
+ if [ -x $(srcdir)/contrib/warn_summary ]; then \
+ rm -f bootstrap-summary; \
+ $(srcdir)/contrib/warn_summary bootstrap-protocol \
+ > bootstrap-summary; \
+ fi
+
+ touch $(build_stamp)
+
+ifeq ($(versioned_packages),yes)
+ hppa64_configure_flags += --program-suffix=-$(BASE_VERSION)
+endif
+
+ifeq ($(DEB_CROSS),yes)
+ CC_for_hppa64_cross = $(CC)
+else
+ CC_for_hppa64_cross = $(builddir)/gcc/xgcc -B$(builddir)/gcc/
+endif
+
+$(configure_hppa64_stamp): $(build_stamp)
+ dh_testdir
+ rm -f $(configure_hppa64_stamp) $(build_hppa64_stamp)
+ rm -rf $(builddir_hppa64)
+ mkdir $(builddir_hppa64)
+ : # configure
+ cd $(builddir_hppa64) && \
+ $(SET_PATH) \
+ $(SET_SHELL) \
+ CC="$(CC_for_hppa64_cross)" \
+ ../src/configure \
+ --enable-languages=c \
+ --prefix=/$(PF) \
+ --libexecdir=/$(hppa64libexecdir) \
+ --disable-shared \
+ --disable-nls \
+ --disable-threads \
+ --disable-libgomp \
+ --disable-libmudflap \
+ --disable-libssp \
+ --disable-libquadmath \
+ --enable-plugin \
+ --with-system-zlib \
+ --with-as=/usr/bin/hppa64-linux-gnu-as \
+ --with-ld=/usr/bin/hppa64-linux-gnu-ld \
+ --includedir=/usr/hppa64-linux-gnu/include \
+ --build=$(DEB_BUILD_GNU_TYPE) \
+ --host=$(DEB_HOST_GNU_TYPE) \
+ --target=hppa64-linux-gnu
+ touch $(configure_hppa64_stamp)
+
+$(build_hppa64_stamp): $(configure_hppa64_stamp)
+ $(SET_PATH) \
+ $(SET_SHELL) \
+ $(SET_LOCPATH) \
+ LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}$(builddir)/gcc \
+ $(MAKE) -C $(builddir_hppa64) $(NJOBS) \
+ CC="$(CC_for_hppa64_cross)" \
+ $(CFLAGS_TO_PASS) \
+ $(LDFLAGS_TO_PASS)
+ touch $(build_hppa64_stamp)
+
+$(configure_neon_stamp): $(build_stamp)
+ dh_testdir
+ rm -f $(configure_neon_stamp) $(build_neon_stamp)
+ rm -rf $(builddir_neon)
+ mkdir $(builddir_neon)
+ : # configure
+ cd $(builddir_neon) && \
+ $(SET_PATH) \
+ $(SET_SHELL) \
+ CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" \
+ ../src/configure \
+ --disable-bootstrap \
+ --enable-languages=c,c++,objc,fortran \
+ --prefix=/$(PF) \
+ --libexecdir=/$(libexecdir) \
+ --program-suffix=-$(BASE_VERSION) \
+ --disable-nls \
+ --enable-plugin \
+ --disable-libmudflap \
+ --with-arch=armv7-a --with-tune=cortex-a8 \
+ --with-float=$(float_abi) --with-fpu=neon \
+ --host=arm-linux-gnueabi \
+ --build=arm-linux-gnueabi \
+ --target=arm-linux-gnueabi
+ touch $(configure_neon_stamp)
+
+$(build_neon_stamp): $(configure_neon_stamp)
+ $(SET_PATH) \
+ $(SET_SHELL) \
+ $(SET_LOCPATH) \
+ $(MAKE) -C $(builddir_neon) $(NJOBS) \
+ CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" \
+ $(CFLAGS_TO_PASS) \
+ $(LDFLAGS_TO_PASS)
+ touch $(build_neon_stamp)
+
+spu_configure_args = \
+ --enable-languages=c,c++,fortran \
+ --prefix=/$(PF) \
+ --libexecdir=/$(spulibexecdir) \
+ --disable-shared \
+ --disable-nls \
+ --disable-threads \
+ --enable-checking=release \
+ --disable-libssp \
+ --with-system-zlib \
+ --with-newlib \
+ --enable-plugin \
+ --program-prefix=spu- \
+ --with-as=/usr/bin/spu-as \
+ --with-ar=/usr/bin/spu-ar \
+ --with-ld=/usr/bin/spu-ld
+
+# FIXME: --with-sysroot=/usr/spu breaks libgfortran build
+#ifeq ($(single_package),yes)
+# spu_configure_args += \
+# --with-sysroot=/usr/spu
+#else
+ spu_configure_args += \
+ --includedir=/usr/spu/include \
+ --libdir=/usr/spu/lib
+#endif
+
+spu_configure_args += \
+ --host=$(DEB_HOST_GNU_TYPE) \
+ --build=$(DEB_BUILD_GNU_TYPE) \
+ --target=spu
+
+$(configure_spu_stamp): $(src_spu_stamp) $(build_stamp)
+ dh_testdir
+ rm -f $(configure_spu_stamp) $(build_spu_stamp)
+ rm -rf $(builddir_spu)
+ mkdir $(builddir_spu)
+ : # configure
+ cd $(builddir_spu) && \
+ $(SET_PATH) \
+ $(SET_SHELL) \
+ CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" \
+ ../src-spu/configure $(spu_configure_args)
+ touch $(configure_spu_stamp)
+
+$(build_spu_stamp): $(configure_spu_stamp)
+ $(SET_PATH) \
+ $(SET_SHELL) \
+ $(SET_LOCPATH) \
+ $(MAKE) -C $(builddir_spu) $(NJOBS) \
+ CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" \
+ $(CFLAGS_TO_PASS) \
+ $(LDFLAGS_TO_PASS)
+ touch $(build_spu_stamp)
+
+
+MANUALS = \
+ $(srcdir)/gcc/doc/cpp.texi \
+ $(srcdir)/gcc/doc/cppinternals.texi \
+ $(srcdir)/gcc/doc/gcc.texi \
+ $(srcdir)/gcc/doc/gccint.texi
+ifeq ($(with_fortran),yes)
+ MANUALS += $(srcdir)/gcc/fortran/gfortran.texi
+endif
+ifeq ($(with_java),yes)
+ MANUALS += $(srcdir)/gcc/java/gcj.texi
+endif
+ifeq ($(with_ada),yes)
+ MANUALS += \
+ $(builddir)/gcc/doc/gnat_ugn.texi \
+ $(srcdir)/gcc/ada/gnat_rm.texi \
+ $(srcdir)/gcc/ada/gnat-style.texi
+endif
+ifeq ($(with_gomp),yes)
+ MANUALS += $(srcdir)/libgomp/libgomp.texi
+endif
+
+html-docs: $(build_html_stamp)
+#$(build_html_stamp): html-texi2html
+#$(build_html_stamp): html-makeinfo
+$(build_html_stamp): html-makeinfo-nosplit
+
+html-texi2html:
+ rm -rf html $(builddir)/gcc/html
+ mkdir $(builddir)/gcc/html
+ ln -s $(builddir)/gcc/html html
+ cd $(builddir)/gcc; \
+ for manual in $(MANUALS); do \
+ outname=`basename $${manual} .texi`; \
+ echo "generating $$outname ..."; \
+ texi2html -number -split chapter \
+ -I $(srcdir)/gcc/doc/include \
+ -I $(srcdir)/gcc/p/doc \
+ -I $(srcdir)/gcc/p/doc/generated \
+ -I `dirname $${manual}` \
+ -I $(builddir)/gcc \
+ -subdir html \
+ $${manual}; \
+ done
+
+html-makeinfo:
+ rm -rf html
+ mkdir html
+ cd $(builddir)/gcc; \
+ for manual in $(MANUALS); do \
+ manual=`find $(srcdir) -name $${file}.texi`; \
+ outname=`basename $${manual} .texi`; \
+ echo "generating $$outname ..."; \
+ if [ "$${manual}" ]; then \
+ makeinfo --html --number-sections \
+ -I $(srcdir)/gcc/doc/include -I `dirname $${manual}` \
+ -I $(srcdir)/gcc/p/doc \
+ -I $(srcdir)/gcc/p/doc/generated \
+ -I $(builddir)/gcc \
+ -o $${outname} \
+ $${manual}; \
+ fi; \
+ done
+
+html-makeinfo-nosplit:
+ rm -rf html
+ mkdir html
+ cd $(builddir)/gcc; \
+ for manual in $(MANUALS); do \
+ outname=`basename $${manual} .texi`.html; \
+ echo "generating $$outname ..."; \
+ makeinfo --html --number-sections --no-split \
+ -I $(srcdir)/gcc/doc/include -I `dirname $${manual}` \
+ -I $(srcdir)/gcc/p/doc \
+ -I $(srcdir)/gcc/p/doc/generated \
+ -I $(builddir)/gcc \
+ -o $(PWD)/html/$${outname} \
+ $${manual}; \
+ done
+
+# start the script only on architectures known to have slow autobuilders ...
+logwatch_archs := alpha arm m68k mips mipsel sparc
+ifeq ($(DEB_HOST_GNU_CPU), $(findstring $(DEB_HOST_GNU_CPU),$(logwatch_archs)))
+ start_logwatch = yes
+endif
+ifeq ($(DEB_HOST_GNU_SYSTEM),gnu)
+ start_logwatch = yes
+endif
+
+stamps/mauve-build: stamps/build
+ rm -rf mauve
+ mkdir -p mauve
+ifeq ($(with_mauve_check),yes)
+ tar xf $(wildcard /usr/src/mauve*.tar.*)
+ cd mauve \
+ && aclocal \
+ && automake \
+ && autoconf2.59 \
+ && PATH=$(CURDIR)/$(sdkimg)/bin:$$PATH ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE)
+ PATH=$(CURDIR)/$(sdkimg)/bin:$$PATH $(MAKE) -C mauve
+endif
+ touch $@
+
+stamps/mauve-check: stamps/build stamps/mauve-build
+ifeq ($(with_mauve_check),yes)
+ -cd mauve && \
+ JAVA_HOME=$(CURDIR)/$(sdkimg) \
+ PATH=$(CURDIR)/$(sdkimg)/bin:$$PATH \
+ xvfb-run -s "-extension GLX" java Harness \
+ -vm $(CURDIR)/$(sdkimg)/bin/java \
+ -file $(CURDIR)/debian/mauve_tests \
+ -timeout 30000 2>&1 \
+ | tee mauve_output
+ @sleep 5
+else
+ echo "mauve testsuite not run for this build" > mauve/mauve_output
+endif
+ touch $@
+
+check: $(check_stamp) # $(if $(filter yes, $(with_java)),stamps/05-build-mauve-stamp) #$(check_inst_stamp)
+$(check_stamp): $(build_stamp) $(build_locale_stamp)
+ rm -f test-protocol
+
+ -chmod 755 $(srcdir)/contrib/test_summary
+ifneq ($(with_common_libs),yes)
+ : # libstdc++6 built from newer gcc-4.x source, run testsuite against the installed lib
+
+ sed 's/-L[^ ]*//g' $(buildlibdir)/libstdc++-v3/scripts/testsuite_flags \
+ > $(buildlibdir)/libstdc++-v3/scripts/testsuite_flags.installed
+ -$(ULIMIT_M); \
+ set +e; \
+ for d in $(buildlibdir)/libstdc++-v3/testsuite; do \
+ echo "Running testsuite in $$d ..."; \
+ TEST_INSTALLED=1 \
+ $(SET_SHELL) \
+ $(SET_LOCPATH) \
+ $(SET_PATH) \
+ DEJAGNU_TIMEOUT=$(DEJAGNU_TIMEOUT) \
+ DEB_GCC_NO_O3=1 \
+ $(MAKE) -k -C $$d $(NJOBS) check $(RUNTESTFLAGS); \
+ done 2>&1 | tee test-protocol2
+
+ BOOT_CFLAGS="$(BOOT_CFLAGS)" \
+ $(srcdir)/contrib/test_summary -m "$(S_EMAIL)" > raw-test-summary
+ -( \
+ sed -n '/^Mail/s/.*"\([^"][^"]*\)".*/\1/p' raw-test-summary; \
+ awk '/^cat/, /^EOF/' raw-test-summary | grep -v EOF; \
+ ) > libstdc++-test-summary
+ echo 'BEGIN installed libstdc++-v3 test-summary'
+ cat libstdc++-test-summary
+ echo 'END installed libstdc++-v3 test-summary'
+ find $(buildlibdir)/libstdc++-v3/testsuite -name '*.log' -o -name '*.sum' \
+ | xargs -r rm -f
+endif
+
+ifeq ($(start_logwatch),yes)
+ : # start logwatch script for regular output during test runs
+ chmod +x debian/logwatch.sh
+ -debian/logwatch.sh -t 900 -p $(builddir)/logwatch.pid \
+ -m '\ntestsuite still running ...\n' \
+ test-protocol \
+ $(builddir)/gcc/testsuite/gcc/gcc.log \
+ $(builddir)/gcc/testsuite/g++/g++.log \
+ $(builddir)/gcc/testsuite/gfortran/gfortran.log \
+ $(builddir)/gcc/testsuite/objc/objc.log \
+ $(builddir)/gcc/testsuite/obj-c++/obj-c++.log \
+ $(builddir)/gcc/testsuite/gnat/gnat.log \
+ $(builddir)/gcc/testsuite/ada/acats/acats.log \
+ $(builddir)/gcc/testsuite/gfortran/gfortran.log \
+ $(builddir)/gcc/p/test/test_log \
+ $(buildlibdir)/libstdc++-v3/testsuite/libstdc++-v3.log \
+ $(buildlibdir)/libjava/testsuite/libjava.log \
+ $(buildlibdir)/libmudflap/testsuite/libmudflap.log \
+ $(buildlibdir)/libgomp/testsuite/libgomp.log \
+ $(buildlibdir)/libffi/testsuite/libffi.log \
+ &
+endif
+
+ifeq ($(with_ada),yes)
+ chmod +x debian/acats-killer.sh
+ -debian/acats-killer.sh -p $(builddir)/acats-killer.pid \
+ $(builddir)/gcc/testsuite/ada/acats/acats.log \
+ $(builddir)/gcc/testsuite/g++.log \
+ &
+endif
+
+ -$(ULIMIT_M); \
+ set +e; \
+ for d in $(checkdirs); do \
+ echo "Running testsuite in $$d ..."; \
+ $(SET_SHELL) \
+ $(SET_LOCPATH) \
+ $(SET_PATH) \
+ EXTRA_TEST_PFLAGS=-g0 \
+ DEJAGNU_TIMEOUT=$(DEJAGNU_TIMEOUT) \
+ DEB_GCC_NO_O3=1 \
+ $(MAKE) -k -C $$d $(NJOBS) check $(RUNTESTFLAGS); \
+ done 2>&1 | tee test-protocol
+
+ -ps aux | fgrep logwatch | fgrep -v fgrep
+ -if [ -f $(builddir)/logwatch.pid ]; then \
+ kill -1 `cat $(builddir)/logwatch.pid`; \
+ sleep 1; \
+ kill -9 `cat $(builddir)/logwatch.pid`; \
+ rm -f $(builddir)/logwatch.pid; \
+ fi
+ -ps aux | fgrep logwatch | fgrep -v fgrep
+
+ifeq ($(with_ada),yes)
+ -if [ -f $(builddir)/acats-killer.pid ]; then \
+ kill -1 `cat $(builddir)/acats-killer.pid`; \
+ sleep 1; \
+ kill -9 `cat $(builddir)/acats-killer.pid`; \
+ rm -f $(builddir)/acats-killer.pid; \
+ fi
+endif
+
+ : # running the libjava testsuite alone is missing this information
+ $(builddir)/gcc/xgcc -B$(builddir)/gcc/ -v > $(builddir)/compiler_version.sum 2>&1
+
+ if [ -x $(srcdir)/contrib/test_summary ]; then \
+ rm -f test-summary; \
+ ( \
+ cd $(builddir); \
+ echo '' > ts-include; \
+ echo '' >> ts-include; \
+ if [ -f $(builddir)/gcc/.bad_compare ]; then \
+ echo 'Bootstrap comparison failure:' >> ts-include; \
+ cat $(builddir)/gcc/.bad_compare >> ts-include; \
+ echo '' >> ts-include; \
+ echo '' >> ts-include; \
+ fi; \
+ echo "Build Dependencies:" >> ts-include; \
+ dpkg -l g++-* binutils* `echo '$(LIBC_DEP)' | awk '{print $$1}'` \
+ libgmp*-dev libmpfr-dev libmpc-dev libppl*-dev libcloog-ppl-dev \
+ | fgrep -v '<none>' >> ts-include; \
+ echo '' >> ts-include; \
+ cat ../$(patch_stamp) >> ts-include; \
+ BOOT_CFLAGS="$(BOOT_CFLAGS)" \
+ $(srcdir)/contrib/test_summary \
+ -i ts-include -m "$(S_EMAIL)" \
+ ) > raw-test-summary; \
+ if [ -n "$(testsuite_tarball)" ]; then \
+ echo "Test suite used: $(testsuite_srcdir)" > test-summary; \
+ echo " Do not interpret the results on its own" >> test-summary; \
+ echo " but compare them with the results from" >> test-summary; \
+ echo " the gcc-snapshot package." >> test-summary; \
+ fi; \
+ sed -n '/^Mail/s/.*"\([^"][^"]*\)".*/\1/p' raw-test-summary \
+ >> test-summary; \
+ awk '/^cat/, /^EOF/' raw-test-summary | grep -v EOF >> test-summary; \
+ if [ -f bootstrap-summary -a "$(bootstrap_target)" != profiledbootstrap ]; then \
+ echo '' >> test-summary; \
+ cat bootstrap-summary >> test-summary; \
+ fi; \
+ echo 'BEGIN test-summary'; \
+ cat test-summary; \
+ echo 'END test-summary'; \
+ fi
+
+ touch $(check_stamp)
+
+$(check_inst_stamp): $(check_stamp)
+ rm -f test-inst-protocol
+
+ifeq ($(start_logwatch),yes)
+ : # start logwatch script for regular output during test runs
+ chmod +x debian/logwatch.sh
+ -debian/logwatch.sh -t 900 -p $(builddir)/logwatch-inst.pid \
+ -m '\ntestsuite (3.3) still running ...\n' \
+ test-inst-protocol \
+ check-inst/{gcc,g++,g77,objc}.log \
+ &
+endif
+
+ rm -rf check-inst
+ mkdir check-inst
+
+ echo "Running testsuite ..."
+ -$(ULIMIT_M) ; \
+ $(SET_SHELL) \
+ $(SET_LOCPATH) \
+ EXTRA_TEST_PFLAGS=-g0 \
+ DEJAGNU_TIMEOUT=$(DEJAGNU_TIMEOUT) \
+ cd check-inst && $(srcdir)/contrib/test_installed \
+ --with-gcc=gcc-3.3 --with-g++=g++-3.3 --with-g77=g77-3.3 \
+ 2>&1 | tee test-inst-protocol
+
+ -ps aux | fgrep logwatch | fgrep -v fgrep
+ if [ -f $(builddir)/logwatch-inst.pid ]; then \
+ kill -1 `cat $(builddir)/logwatch-inst.pid`; \
+ else \
+ true; \
+ fi
+ -ps aux | fgrep logwatch | fgrep -v fgrep
+
+ -chmod 755 $(srcdir)/contrib/test_summary
+ if [ -x $(srcdir)/contrib/test_summary ]; then \
+ rm -f test-inst-summary; \
+ ( \
+ cd check-inst; \
+ echo '' > ts-include; \
+ echo '' >> ts-include; \
+ echo "Build Dependencies:" >> ts-include; \
+ dpkg -l g++-* binutils* `echo '$(LIBC_DEP)' | awk '{print $$1}'` \
+ libgmp*-dev libmpfr-dev libmpc-dev libppl*-dev libcloog-ppl-dev \
+ | fgrep -v '<none>' >> ts-include; \
+ echo '' >> ts-include; \
+ echo 'Results for the installed GCC-3.3 compilers' >> ts-include; \
+ $(srcdir)/contrib/test_summary \
+ -i ts-include -m "$(S_EMAIL)" \
+ ) > raw-test-inst-summary; \
+ sed -n '/^Mail/s/.*"\([^"][^"]*\)".*/\1/p' raw-test-inst-summary \
+ >> test-inst-summary; \
+ awk '/^cat/, /^EOF/' raw-test-inst-summary \
+ | grep -v EOF >> test-inst-summary; \
+ echo 'BEGIN test-installed-summary'; \
+ cat test-inst-summary; \
+ echo 'END test-installed-summary'; \
+ fi
+
+ chmod 755 debian/reduce-test-diff.awk
+ if diff -u test-inst-summary test-summary \
+ | debian/reduce-test-diff.awk > diff-summary; \
+ then \
+ mv -f diff-summary testsuite-comparision; \
+ else \
+ ( \
+ echo "WARNING: New failures in gcc-3.4 compared to gcc-3.3"; \
+ echo ''; \
+ cat diff-summary; \
+ ) > testsuite-comparision; \
+ rm -f diff-summary; \
+ fi
+ touch $(check_inst_stamp)
+
+clean: debian/control
+ dh_testdir
+ rm -f pxxx status
+ rm -f *-summary *-protocol testsuite-comparision summary-diff
+ if [ -f $(srcdir)/gcc/p/config-lang.in.debian ]; then \
+ mv -f $(srcdir)/gcc/p/config-lang.in.debian $(srcdir)/gcc/p/config-lang.in; \
+ else true; fi
+ rm -f $(srcdir)/gcc/po/*.gmo
+ rm -f debian/lib{gcc,gcj,objc,stdc++}{-v3,[0-9]}*.{{pre,post}{inst,rm},shlibs}
+ fs=`echo debian/*BV* debian/*GCJ* debian/*CXX* debian/*LC* debian/*MF* | sort -u`; \
+ for f in $$fs; do \
+ [ -f $$f ] || continue; \
+ f2=$$(echo $$f \
+ | sed 's/BV/$(BASE_VERSION)/;s/CXX/$(CXX_SONAME)/;s/LGCJ/$(PKG_LIBGCJ_EXT)/;s/GCJ/$(PKG_GCJ_EXT)/;s/LC/$(GCC_SONAME)/;s/MF/$(MUDFLAP_SONAME)/;s/-CRB/$(cross_bin_arch)/;s/\.in$$//'); \
+ rm -f $$f2; \
+ done
+ rm -f debian/shlibs.local debian/substvars.local
+ rm -f debian/*.debhelper
+ -[ -d debian/bugs ] && $(MAKE) -C debian/bugs clean
+ rm -f debian/README.libstdc++-baseline debian/README.Bugs debian/README.Debian.$(DEB_TARGET_ARCH)
+ rm -f debian/lib*gcj-bc.shlibs
+ rm -rf bin locales share
+ rm -rf check-inst
+ rm -rf .pc
+ dh_clean
+
+# -----------------------------------------------------------------------------
+# some abbrevations for the package names and directories;
+# p_XXX is the package name, d_XXX is the package directory
+# these macros are only used in the binary-* targets.
+
+ifeq ($(versioned_packages),yes)
+ pkg_ver := -$(BASE_VERSION)
+endif
+
+ifneq ($(DEB_CROSS),yes)
+ p_base = gcc$(pkg_ver)-base
+ p_gcc = gcc$(pkg_ver)
+ p_cpp = cpp$(pkg_ver)
+ p_cppd = cpp$(pkg_ver)-doc
+ p_cxx = g++$(pkg_ver)
+ p_doc = gcc$(pkg_ver)-doc
+ p_lgcc = libgcc$(GCC_SONAME)
+else
+ # only triggered if DEB_CROSS set
+ p_base = gcc$(pkg_ver)$(cross_bin_arch)-base
+ p_cpp = cpp$(pkg_ver)$(cross_bin_arch)
+ p_gcc = gcc$(pkg_ver)$(cross_bin_arch)
+ p_cxx = g++$(pkg_ver)$(cross_bin_arch)
+endif
+p_hppa64 = gcc$(pkg_ver)-hppa64
+
+d = debian/tmp
+d_base = debian/$(p_base)
+d_gcc = debian/$(p_gcc)
+d_cpp = debian/$(p_cpp)
+d_cppd = debian/$(p_cppd)
+d_cxx = debian/$(p_cxx)
+d_doc = debian/$(p_doc)
+d_lgcc = debian/$(p_lgcc)
+d_hppa64= debian/$(p_hppa64)
+
+d_spu = debian/tmp-spu
+d_neon = debian/tmp-neon
+
+common_substvars = \
+ $(shell awk "{printf \"'-V%s' \", \$$0}" debian/substvars.local)
+
+ifeq ($(DEB_CROSS),yes)
+ lib_binaries := indep_binaries
+else
+ lib_binaries := arch_binaries
+endif
+
+# ---------------------------------------------------------------------------
+
+ifeq ($(single_package),yes)
+ include debian/rules.d/binary-snapshot.mk
+else
+
+ifneq ($(DEB_CROSS),yes)
+ifeq ($(with_source),yes)
+ include debian/rules.d/binary-source.mk
+endif
+endif
+
+ifneq ($(BACKPORT),true)
+ifeq ($(with_gccxbase),yes)
+ include debian/rules.d/binary-base.mk
+endif
+
+ifeq ($(with_gccbase),yes)
+ include debian/rules.d/binary-base.mk
+endif
+
+ifneq ($(DEB_STAGE),stage1)
+ include debian/rules.d/binary-libgcc.mk
+endif
+
+ifeq ($(with_libqmath),yes)
+ include debian/rules.d/binary-libquadmath.mk
+endif
+
+ifeq ($(with_libgmath),yes)
+ include debian/rules.d/binary-libgccmath.mk
+endif
+
+ifeq ($(with_libgomp),yes)
+ include debian/rules.d/binary-libgomp.mk
+endif
+
+ifeq ($(with_cdev),yes)
+ include debian/rules.d/binary-cpp.mk
+endif
+
+ifeq ($(with_fixincl),yes)
+ include debian/rules.d/binary-fixincl.mk
+endif
+
+ifeq ($(with_mudflap),yes)
+ include debian/rules.d/binary-libmudflap.mk
+endif
+
+ifeq ($(with_libssp),yes)
+ include debian/rules.d/binary-libssp.mk
+endif
+
+ifeq ($(with_objcxx),yes)
+ include debian/rules.d/binary-objcxx.mk
+endif
+
+ifeq ($(with_objc),yes)
+ include debian/rules.d/binary-objc.mk
+endif
+ifeq ($(with_libobjc),yes)
+ include debian/rules.d/binary-libobjc.mk
+endif
+
+ifeq ($(with_go),yes)
+ include debian/rules.d/binary-go.mk
+endif
+
+# include before cxx
+ifeq ($(with_java),yes)
+ include debian/rules.d/binary-java.mk
+endif
+
+ifeq ($(with_cxxdev),yes)
+ include debian/rules.d/binary-cxx.mk
+endif
+ifeq ($(with_cxx),yes)
+ include debian/rules.d/binary-libstdcxx.mk
+endif
+
+ifeq ($(with_f77),yes)
+ include debian/rules.d/binary-f77.mk
+endif
+
+ifeq ($(with_fortran),yes)
+ include debian/rules.d/binary-fortran.mk
+endif
+
+ifeq ($(with_ada),yes)
+ include debian/rules.d/binary-ada.mk
+endif
+
+ifeq ($(with_d),yes)
+ include debian/rules.d/binary-d.mk
+endif
+
+ifeq ($(with_libnof),yes)
+ ifeq ($(DEB_TARGET_GNU_CPU),powerpc)
+ include debian/rules.d/binary-nof.mk
+ endif
+endif
+
+ifeq ($(with_softfloat),yes)
+ include debian/rules.d/binary-softfloat.mk
+endif
+
+# gcc must be moved/built after g77 and g++
+ifeq ($(with_cdev),yes)
+ include debian/rules.d/binary-gcc.mk
+endif
+
+ifeq ($(with_hppa64),yes)
+ include debian/rules.d/binary-hppa64.mk
+endif
+
+ifeq ($(with_neon),yes)
+ include debian/rules.d/binary-neon.mk
+endif
+
+ifeq ($(with_spu),yes)
+ include debian/rules.d/binary-spu.mk
+endif
+endif
+
+endif # ($(single_package),yes)
+
+# ----------------------------------------------------------------------
+install: $(install_dependencies)
+
+$(install_dummy_stamp): $(build_dummy_stamp)
+ touch $(install_dummy_stamp)
+
+$(install_snap_stamp): $(build_dependencies)
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+
+ : # Install directories
+ rm -rf $(d)
+ mkdir -p $(d)/$(PF)
+
+ifeq ($(with_hppa64),yes)
+ : # Install hppa64
+ $(SET_PATH) \
+ $(MAKE) -C $(builddir_hppa64) \
+ CC="$(CC)" \
+ $(CFLAGS_TO_PASS) \
+ $(LDFLAGS_TO_PASS) \
+ DESTDIR=$(PWD)/$(d) \
+ install
+
+ ls -l $(d)/$(PF)/bin
+ if [ ! -x $(d)/$(PF)/bin/hppa64-linux-gnu-gcc ]; then \
+ mv $(d)/$(PF)/bin/hppa64-linux-gnu-gcc-4* $(d)/$(PF)/bin/hppa64-linux-gnu-gcc; \
+ else \
+ rm -f $(d)/$(PF)/bin/hppa64-linux-gnu-gcc-4*; \
+ fi
+
+ : # remove files not needed from the hppa64 build
+ rm -rf $(d)/$(PF)/share/info
+ rm -rf $(d)/$(PF)/share/man
+ rm -f $(d)/$(PF)/$(libdir)/libiberty.a
+ rm -f $(d)/$(PF)/bin/*{gcov,gccbug,gcc}
+
+ rm -rf $(d)/$(PF)/hppa64-linux-gnu/include
+ rm -rf $(d)/$(PF)/hppa64-linux-gnu/lib
+ set -e; \
+ cd $(d)/$(PF)/$(libdir)/gcc/hppa64-linux-gnu/$(versiondir)/include-fixed; \
+ for i in *; do \
+ case "$$i" in \
+ README|features.h|syslimits.h|limits.h) ;; \
+ linux|$(TARGET_ALIAS)) ;; \
+ $(subst $(DEB_TARGET_GNU_CPU),$(biarch_cpu),$(TARGET_ALIAS))) ;; \
+ *) echo "remove include-fixed/$$i"; rm -rf $$i; \
+ esac; \
+ done
+endif
+
+ifeq ($(with_spu),yes)
+ : # Install spu
+ $(SET_PATH) \
+ $(MAKE) -C $(builddir_spu) \
+ CC="$(CC)" \
+ $(CFLAGS_TO_PASS) \
+ $(LDFLAGS_TO_PASS) \
+ DESTDIR=$(PWD)/$(d) \
+ install
+
+ ls -l $(d)/$(PF)/bin
+ if [ ! -x $(d)/$(PF)/bin/spu-gcc ]; then \
+ mv $(d)/$(PF)/bin/spu-gcc-4* $(d)/$(PF)/bin/spu-gcc; \
+ else \
+ rm -f $(d)/$(PF)/bin/spu-gcc-4*; \
+ fi
+ if [ ! -x $(d)/$(PF)/bin/spu-g++ ]; then \
+ mv $(d)/$(PF)/bin/spu-g++-4* $(d)/$(PF)/bin/spu-g++; \
+ else \
+ rm -f $(d)/$(PF)/bin/spu-g++-4*; \
+ fi
+ifneq (,$(findstring fortran, $(spu_configure_args)))
+ if [ ! -x $(d)/$(PF)/bin/spu-gfortran ]; then \
+ mv $(d)/$(PF)/bin/spu-gfortran-4* $(d)/$(PF)/bin/spu-gfortran; \
+ else \
+ rm -f $(d)/$(PF)/bin/spu-gfortran-4*; \
+ fi
+endif
+ rm -f $(d)/$(PF)/bin/spu-c++*
+
+ : # remove files not needed from the spu build
+ rm -rf $(d)/$(PF)/info $(d)/$(PF)/share/info
+ rm -rf $(d)/$(PF)/man $(d)/$(PF)/share/man
+ rm -rf $(d)/$(PF)/$(libdir)/gcc/spu/$(GCC_VERSION)/plugin
+ rm -f $(d)/$(PF)/$(libdir)/libiberty.a
+ rm -f $(d)/$(PF)/bin/*{gcov,gccbug,gcc}
+
+# FIXME
+# rm -rf $(d)/$(PF)/spu/include
+# rm -rf $(d)/$(PF)/spu/lib
+ -set -e; \
+ cd $(d)/$(PF)/$(libdir)/gcc/spu/$(versiondir)/include-fixed; \
+ for i in *; do \
+ case "$$i" in \
+ README|features.h|syslimits.h|limits.h) ;; \
+ linux|$(TARGET_ALIAS)) ;; \
+ $(subst $(DEB_TARGET_GNU_CPU),$(biarch_cpu),$(TARGET_ALIAS))) ;; \
+ *) echo "remove include-fixed/$$i"; rm -rf $$i; \
+ esac; \
+ done
+endif
+
+ : # Work around PR lto/41569
+ ln -sf gcc $(builddir)/prev-gcc
+
+ : # Install everything
+ $(SET_PATH) \
+ $(SET_SHELL) \
+ $(MAKE) -C $(builddir) \
+ $(CFLAGS_TO_PASS) \
+ $(LDFLAGS_TO_PASS) \
+ DESTDIR=$(PWD)/$(d) \
+ infodir=/$(PF)/share/info \
+ mandir=/$(PF)/share/man \
+ install
+
+ ls -l $(d)/$(PF)/bin
+ if [ ! -x $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc ]; then \
+ mv $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc-4* $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc; \
+ else \
+ rm -f $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc-4*; \
+ fi
+ set -e; \
+ cd $(d)/$(gcc_lib_dir)/include-fixed; \
+ for i in *; do \
+ case "$$i" in \
+ README|features.h|syslimits.h|limits.h) ;; \
+ linux|$(TARGET_ALIAS)) ;; \
+ $(subst $(DEB_TARGET_GNU_CPU),$(biarch_cpu),$(TARGET_ALIAS))) ;; \
+ *) echo "remove include-fixed/$$i"; rm -rf $$i; \
+ esac; \
+ done
+
+ifneq ($(configured_libdir),$(libdir))
+ for i in debug go pkgconfig '*.so' '*.so.*' '*.a' '*.la' '*.py' '*.spec'; do \
+ mv $(d)/$(PF)/$(configured_libdir)/$$i \
+ $(d)/$(PF)/$(libdir)/. || true; \
+ done
+endif
+
+ifeq ($(biarch64)-$(with_cxx),yes-yes)
+ ifneq (,$(filter libstdc++-v3, $(biarch_multidir_names)))
+ : # fix biarch C++ header installation
+ ifeq ($(DEB_TARGET_ARCH),i386)
+ mv $(d)/$(cxx_inc_dir)/x86_64-linux-gnu/64 \
+ $(d)/$(cxx_inc_dir)/$(DEB_TARGET_GNU_TYPE)/
+ rmdir $(d)/$(cxx_inc_dir)/x86_64-linux-gnu
+ endif
+ ifeq ($(DEB_TARGET_ARCH),powerpc)
+ mv $(d)/$(cxx_inc_dir)/powerpc64-linux-gnu/64 \
+ $(d)/$(cxx_inc_dir)/powerpc-linux-gnu/
+ rmdir $(d)/$(cxx_inc_dir)/powerpc64-linux-gnu
+ endif
+ ifeq ($(DEB_TARGET_ARCH),s390)
+ mv $(d)/$(cxx_inc_dir)/s390x-linux-gnu/64 \
+ $(d)/$(cxx_inc_dir)/s390-linux-gnu/
+ rmdir $(d)/$(cxx_inc_dir)/s390x-linux-gnu
+ endif
+ endif
+endif
+
+# FIXME: libjava/classpath not correctly patched
+ifeq ($(with_java),yes)
+ -if [ -d $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME) ]; then \
+ ls -l $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME); \
+ mv $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME)/* \
+ $(d)/$(PF)/lib/gcj-$(BASE_VERSION)-$(GCJ_SONAME)/; \
+ rmdir $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME); \
+ fi
+
+ ln -sf libgcj.so.$(GCJ_SONAME).0.0 $(d)/$(PF)/lib/libgcj_bc.so.1.0.0
+
+ install -m 755 $(d)/$(PF)/lib/libgcj_bc.so.1 \
+ $(d)/$(gcc_lib_dir)/libgcj_bc.so
+ $(builddir)/gcc/xgcc -B$(builddir)/gcc/ -shared -fpic -xc /dev/null \
+ -o build/libgcj.so -Wl,-soname,libgcj.so.$(GCJ_SONAME) -nostdlib
+ $(builddir)/gcc/xgcc -B$(builddir)/gcc/ -shared -fpic \
+ $(srcdir)/libjava/libgcj_bc.c \
+ -o $(d)/$(gcc_lib_dir)/libgcj_bc.so \
+ -Wl,-soname,libgcj_bc.so.1 $(builddir)/libgcj.so -shared-libgcc
+endif
+
+ -ls -l $(d)/usr
+ if [ -d $(d)/usr/man/man1 ]; then \
+ mv $(d)/usr/man/man1/* $(d)/usr/share/man/man1/; \
+ fi
+
+ chmod 755 debian/dh_*
+ touch $(install_snap_stamp)
+
+$(install_stamp): $(build_stamp)
+ dh_testdir
+ dh_testroot
+ dh_clean -k -N$(p_hppa64)
+
+ if [ -f $(binary_stamp)-hppa64 ]; then \
+ mv $(binary_stamp)-hppa64 saved-stamp-hppa64; \
+ fi
+ if [ -f $(binary_stamp)-spu ]; then \
+ mv $(binary_stamp)-spu saved-stamp-spu; \
+ fi
+ rm -f $(binary_stamp)*
+ if [ -f saved-stamp-hppa64 ]; then \
+ mv saved-stamp-hppa64 $(binary_stamp)-hppa64; \
+ fi
+ if [ -f saved-stamp-spu ]; then \
+ mv saved-stamp-spu $(binary_stamp)-spu; \
+ fi
+
+ : # Install directories
+ rm -rf $(d)
+ mkdir -p $(d)/$(libdir) $(d)/$(PF) $(d)/$(PF)/$(libdir)/debug
+ifeq ($(biarch32),yes)
+ mkdir -p $(d)/$(PF)/lib32/debug
+endif
+ifeq ($(biarch64),yes)
+ mkdir -p $(d)/$(PF)/lib64/debug
+endif
+ifeq ($(biarchn32),yes)
+ mkdir -p $(d)/$(PF)/$(libn32)/debug
+endif
+
+ifneq (,$(filter $(DEB_TARGET_GNU_CPU),x86_64 sparc64 s390x))
+ : # link lib to lib64 and $(PF)/lib to $(PF)/lib64
+ : # (this works when CONFARGS contains '--disable-multilib')
+ ln -s $(configured_libdir) $(d)/lib64
+ mkdir -p $(d)/$(PF)/$(configured_libdir)
+ ln -s $(configured_libdir) $(d)/$(PF)/lib64
+endif
+
+ : # Work around PR lto/41569
+ ln -sf gcc $(builddir)/prev-gcc
+
+ : # Install everything
+ $(SET_PATH) \
+ $(SET_SHELL) \
+ $(MAKE) -C $(builddir) \
+ $(CFLAGS_TO_PASS) \
+ $(LDFLAGS_TO_PASS) \
+ DESTDIR=$(PWD)/$(d) \
+ infodir=/$(PF)/share/info \
+ mandir=/$(PF)/share/man \
+ install
+
+ifneq ($(configured_libdir),$(libdir))
+ for i in debug go pkgconfig '*.so' '*.so.*' '*.a' '*.la' '*.py' '*.spec'; do \
+ mv $(d)/$(PF)/$(configured_libdir)/$$i \
+ $(d)/$(PF)/$(libdir)/. || true; \
+ done
+endif
+
+ifeq ($(with_libcxxdbg),yes)
+ : # FIXME: the libstdc++ gdb.py file is installed with a wrong name
+ for i in $$(find $(d)/$(PF) -name libstdc++_pic.a-gdb.py); do \
+ [ -f $$i ] || continue; \
+ d=$$(dirname $$i); \
+ b=$$(basename $$i); \
+ t=$$(cd $$d; echo libstdc++.so.*.*.*)-gdb.py; \
+ mv $$i $$d/$$t; \
+ done
+endif
+
+ifeq ($(biarch64)-$(with_cxx),yes-yes)
+ ifneq (,$(filter libstdc++-v3, $(biarch_multidir_names)))
+ ifeq ($(DEB_TARGET_ARCH),i386)
+ : # fix biarch C++ header installation
+ mv $(d)/$(cxx_inc_dir)/x86_64-linux-gnu/64 \
+ $(d)/$(cxx_inc_dir)/$(DEB_TARGET_GNU_TYPE)/
+ rmdir $(d)/$(cxx_inc_dir)/x86_64-linux-gnu
+ endif
+ ifeq ($(DEB_TARGET_ARCH),powerpc)
+ : # fix biarch C++ header installation
+ mv $(d)/$(cxx_inc_dir)/powerpc64-linux-gnu/64 \
+ $(d)/$(cxx_inc_dir)/powerpc-linux-gnu/
+ rmdir $(d)/$(cxx_inc_dir)/powerpc64-linux-gnu
+ endif
+ endif
+endif
+
+# FIXME: libjava/classpath not correctly patched
+ifeq ($(with_java),yes)
+ -if [ -d $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME) ]; then \
+ ls -l $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME); \
+ mv $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME)/* \
+ $(d)/$(PF)/lib/gcj-$(BASE_VERSION)-$(GCJ_SONAME)/; \
+ rmdir $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME); \
+ fi
+endif
+
+ : # remove rpath settings from binaries and shared libs
+ for i in $$(chrpath -k $(d)/$(PF)/bin/* $(d)/$(PF)/lib*/lib*.so.* \
+ $(if $(filter $(with_multiarch_lib),yes), \
+ $(d)/$(PF)/lib/$(DEB_HOST_MULTIARCH)/lib*.so.*) \
+ $(d)/$(PF)/lib*/gcj$(pkg_ver)*/lib*.so.* \
+ 2>/dev/null | awk -F: '/RPATH=/ {print $$1}'); \
+ do \
+ case "$$i" in ecj1|*gij-*|*libjawt*|*libjvm*) continue; esac; \
+ [ -h $$i ] && continue; \
+ chrpath --delete $$i; \
+ echo "removed RPATH: $$i"; \
+ done
+
+ : # remove '*.la' and '*.lai' files, not shipped in any package.
+ find $(d) -name '*.la' -o -name '*.lai' | xargs -r rm -f
+
+ifneq ($(with_libgnat),yes)
+ rm -f $(d)/$(gcc_lib_dir)/adalib/lib*.so*
+endif
+
+ifeq ($(GFDL_INVARIANT_FREE),yes)
+ for i in gcc gcov; do \
+ I=`echo $$i | tr a-z A-Z`; \
+ sed -e "s/@NAME@/$$I$(pkg_ver)/g" -e "s/@name@/$$i$(pkg_ver)/g" \
+ debian/dummy-man.1 > $(d)/$(PF)/share/man/man1/$$i.1; \
+ done
+
+ ifeq ($(with_fortran),yes)
+ for i in g77; do \
+ I=`echo $$i | tr a-z A-Z`; \
+ sed -e "s/@NAME@/$$I$(pkg_ver)/g" -e "s/@name@/$$i$(pkg_ver)/g" \
+ debian/dummy-man.1 > $(d)/$(PF)/share/man/man1/$$i.1; \
+ done
+ endif
+ ifeq ($(with_java),yes)
+ for i in gcj gcjh gij jv-convert jv-scan jcf-dump grmic grmiregistry; \
+ do \
+ I=`echo $$i | tr a-z A-Z`; \
+ sed -e "s/@NAME@/$$I$(pkg_ver)/g" -e "s/@name@/$$i$(pkg_ver)/g" \
+ debian/dummy-man.1 > $(d)/$(PF)/share/man/man1/$$i.1; \
+ done
+ endif
+endif
+
+# ifeq ($(with_ada),yes)
+# : # rename files (versioned ada binaries)
+# for i in ; do \
+# mv $(d)/$(PF)/bin/$$i $(d)/$(PF)/bin/$$i-$(GNAT_VERSION); \
+# mv $(d)/$(PF)/share/man/man1/$$i.1 \
+# $(d)/$(PF)/share/man/man1/$$i-$(GNAT_VERSION).1; \
+# done
+# for i in $(GNAT_TOOLS); do \
+# mv $(d)/$(PF)/bin/$$i $(d)/$(PF)/bin/$$i-$(GNAT_VERSION); \
+# done
+# endif
+
+ifeq ($(DEB_CROSS),yes)
+ ifeq ($(DEB_TARGET_ARCH)-$(biarch64),s390-yes)
+ : # s390 64bit stuff happens to be in s390x-linux-gnu/lib64/
+ mkdir -p $(d)/$(PF)/s390-linux-gnu/lib64
+ cp -a $(d)/$(PF)/s390x-linux-gnu/lib64/* $(d)/$(PF)/s390-linux-gnu/lib64/
+ endif
+ ifeq ($(DEB_TARGET_ARCH)-$(biarch64),powerpc-yes)
+ : # ppc 64bit build slaps libgcc and libstdc++ to powerpc64-linux-gnu
+ cp -a $(d)/$(PF)/powerpc64-linux-gnu/lib64/* $(d)/$(PF)/powerpc-linux-gnu/lib64/
+ endif
+endif
+
+ chmod 755 debian/dh_*
+
+# tar cf tmp.tar debian/tmp
+
+ touch $(install_stamp)
+
+$(install_hppa64_stamp): $(build_hppa64_stamp)
+ dh_testdir
+ dh_testroot
+ rm -rf $(d_hppa64)
+ mkdir -p $(d_hppa64)/$(PF)
+
+ $(SET_PATH) \
+ $(MAKE) -C $(builddir_hppa64) \
+ CC="$(CC)" \
+ $(CFLAGS_TO_PASS) \
+ $(LDFLAGS_TO_PASS) \
+ DESTDIR=$(PWD)/$(d_hppa64) \
+ install
+
+ifeq ($(versioned_packages),yes)
+ mv $(d_hppa64)/$(PF)/bin/hppa64-linux-gnu-cpp \
+ $(d_hppa64)/$(PF)/bin/hppa64-linux-gnu-cpp$(pkg_ver)
+endif
+
+ifneq ($(single_package),yes)
+ : # remove files not needed
+ rm -rf $(d_hppa64)/$(PF)/info $(d_hppa64)/$(PF)/share/info
+ rm -rf $(d_hppa64)/$(PF)/man $(d_hppa64)/$(PF)/share/man
+ rm -rf $(d_hppa64)/$(PF)/$(libdir)/gcc/spu/$(GCC_VERSION)/plugin
+ rm -f $(d_hppa64)/$(PF)/$(libdir)/libiberty.a
+ rm -f $(d_hppa64)/$(PF)/bin/*{gcov,gccbug,gcc}
+
+ rm -rf $(d_hppa64)/$(PF)/hppa64-linux-gnu/include
+ rm -rf $(d_hppa64)/$(PF)/hppa64-linux-gnu/lib
+ rm -rf $(d_hppa64)/$(hppa64libexecdir)/gcc/hppa64-linux-gnu/$(GCC_VERSION)/install-tools
+endif
+
+ touch $(install_hppa64_stamp)
+
+$(install_neon_stamp): $(build_neon_stamp)
+ dh_testdir
+ dh_testroot
+ rm -rf $(d_neon)
+ mkdir -p $(d_neon)/$(PF)
+
+ $(SET_PATH) \
+ $(MAKE) -C $(builddir_neon) \
+ CC="$(CC)" \
+ $(CFLAGS_TO_PASS) \
+ $(LDFLAGS_TO_PASS) \
+ DESTDIR=$(PWD)/$(d_neon) \
+ install
+ touch $(install_neon_stamp)
+
+$(install_spu_stamp): $(build_spu_stamp)
+ dh_testdir
+ dh_testroot
+ rm -rf $(d_spu)
+ mkdir -p $(d_spu)/$(PF)
+
+ $(SET_PATH) \
+ $(MAKE) -C $(builddir_spu) \
+ CC="$(CC)" \
+ $(CFLAGS_TO_PASS) \
+ $(LDFLAGS_TO_PASS) \
+ DESTDIR=$(PWD)/$(d_spu) \
+ install
+
+ifeq ($(versioned_packages),yes)
+ mv $(d_spu)/$(PF)/bin/spu-cpp \
+ $(d_spu)/$(PF)/bin/spu-cpp$(pkg_ver)
+ mv $(d_spu)/$(PF)/bin/spu-g++ \
+ $(d_spu)/$(PF)/bin/spu-g++$(pkg_ver)
+ ifneq (,$(findstring fortran, $(spu_configure_args)))
+ mv $(d_spu)/$(PF)/bin/spu-gfortran \
+ $(d_spu)/$(PF)/bin/spu-gfortran$(pkg_ver)
+ endif
+ rm -f $(d_spu)/$(PF)/bin/spu-c++*
+
+ ifneq ($(GFDL_INVARIANT_FREE),yes)
+ for i in spu-cpp spu-gcc spu-g++ spu-gcov spu-gfortran; do \
+ mv $(d_spu)/$(PF)/share/man/man1/$$i.1 $(d_spu)/$(PF)/share/man/man1/$$i-$(BASE_VERSION).1; \
+ done
+ endif
+endif
+
+ifneq ($(single_package),yes)
+ : # remove files not needed
+ rm -rf $(d_spu)/$(PF)/info
+# rm -rf $(d_spu)/$(PF)/man
+ rm -f $(d_spu)/$(PF)/$(libdir)/libiberty.a
+ rm -f $(d_spu)/$(PF)/bin/*{gcov,gccbug,gcc}
+
+# rm -rf $(d_spu)/$(PF)/spu/include
+# rm -rf $(d_spu)/$(PF)/spu/lib
+endif
+
+ touch $(install_spu_stamp)
+
+# ----------------------------------------------------------------------
+# Build architecture-dependent files here.
+#binary-arch: build install $(foreach i,$(arch_binaries),$(binary_stamp)-$(i))
+binary-arch: $(foreach i,$(arch_binaries),$(binary_stamp)-$(i))
+ifeq ($(with_check),yes)
+ @echo Done
+# : # Send Email about sucessfull build.
+# # cat raw-test-summary | sh; echo "Sent mail to $(S_EMAIL)"
+endif
+
+# ----------------------------------------------------------------------
+# Build architecture-independent files here.
+#binary-indep: build install $(foreach i,$(indep_binaries),$(binary_stamp)-$(i))
+binary-indep: $(foreach i,$(indep_binaries),$(binary_stamp)-$(i))
+
+source diff:
+ @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary
diff --git a/debian/runcheck.sh b/debian/runcheck.sh
new file mode 100644
index 0000000..d43997c
--- /dev/null
+++ b/debian/runcheck.sh
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+mkdir -p build
+
+cat >build/runcheck.c <<EOF
+#include <stdio.h>
+int main()
+{
+ return printf("yes\n") != 4;
+}
+EOF
+
+if m=$(${CC:-gcc} -o build/runcheck build/runcheck.c 2>&1); then
+ m=$(build/runcheck 2>&1)
+ echo ${m#* } > build/runcheck.out
+ echo ${m#* }
+else
+ echo ${m##*:} > build/runcheck.out
+ echo ${m##*:}
+fi
diff --git a/debian/source.lintian-overrides b/debian/source.lintian-overrides
new file mode 100644
index 0000000..5ab3796
--- /dev/null
+++ b/debian/source.lintian-overrides
@@ -0,0 +1,5 @@
+gcj-4.6: invalid-arch-string-in-source-relation
+gcj-4.6: quilt-build-dep-but-no-series-file
+gcj-4.6: weak-library-dev-dependency libgnatvsn4.6-dev on libgnatvsn4.6 (= ${gnat:Version})
+gcj-4.6: weak-library-dev-dependency libgnatprj4.6-dev on libgnatprj4.6 (= ${gnat:Version})
+gcj-4.6: weak-library-dev-dependency libgcj12-dev on libgcj12-awt (= ${gcj:Version})
diff --git a/debian/source.lintian-overrides.in b/debian/source.lintian-overrides.in
new file mode 100644
index 0000000..14ab071
--- /dev/null
+++ b/debian/source.lintian-overrides.in
@@ -0,0 +1,5 @@
+@SRC@: invalid-arch-string-in-source-relation
+@SRC@: quilt-build-dep-but-no-series-file
+@SRC@: weak-library-dev-dependency libgnatvsn@BV@-dev on libgnatvsn@BV@ (= ${gnat:Version})
+@SRC@: weak-library-dev-dependency libgnatprj@BV@-dev on libgnatprj@BV@ (= ${gnat:Version})
+@SRC@: weak-library-dev-dependency libgcj@LGCJ@-dev on libgcj@LGCJ@-awt (= ${gcj:Version})
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..d3827e7
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+1.0
diff --git a/debian/watch b/debian/watch
new file mode 100644
index 0000000..239d846
--- /dev/null
+++ b/debian/watch
@@ -0,0 +1,2 @@
+version=2
+ftp://gcc.gnu.org/pub/gcc/releases/gcc-(4\.6[\d\.]*) debian uupdate