aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Christopher <echristo@redhat.com>2002-10-23 01:14:10 +0000
committerEric Christopher <echristo@redhat.com>2002-10-23 01:14:10 +0000
commitb411ca57218adfeeb42aa5cd612185a1ccdc57ef (patch)
treec9309bcba890469c1ee313f077041feb715fd817
parent0291f1f2ee11b6fceee0f3ea6b4b51b2bd10c22e (diff)
Merge from basic-improvements-branch
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/mips-3_4-rewrite-branch@58434 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--ChangeLog46
-rw-r--r--MAINTAINERS11
-rw-r--r--Makefile.def2
-rw-r--r--Makefile.in316
-rw-r--r--Makefile.tpl316
-rw-r--r--boehm-gc/ChangeLog45
-rw-r--r--boehm-gc/include/private/gcconfig.h1
-rw-r--r--configure.in31
-rw-r--r--contrib/ChangeLog10
-rw-r--r--contrib/paranoia.cc157
-rw-r--r--contrib/regression/ChangeLog13
-rwxr-xr-xcontrib/regression/btest-gcc.sh9
-rwxr-xr-xcontrib/regression/objs-gcc.sh24
-rw-r--r--fastjar/ChangeLog11
-rw-r--r--fastjar/config.h.in4
-rwxr-xr-xfastjar/configure236
-rw-r--r--fastjar/configure.in3
-rw-r--r--fastjar/jartool.c3
-rw-r--r--gcc/ChangeLog1600
-rw-r--r--gcc/Makefile.in67
-rw-r--r--gcc/alias.c6
-rw-r--r--gcc/bitmap.c2
-rw-r--r--gcc/c-common.c25
-rw-r--r--gcc/c-decl.c23
-rw-r--r--gcc/c-opts.c14
-rw-r--r--gcc/c-pretty-print.c3
-rw-r--r--gcc/c-typeck.c17
-rw-r--r--gcc/calls.c45
-rw-r--r--gcc/cfganal.c2
-rw-r--r--gcc/cfgbuild.c2
-rw-r--r--gcc/cfgcleanup.c5
-rw-r--r--gcc/combine.c8
-rw-r--r--gcc/config.gcc30
-rw-r--r--gcc/config/alpha/alpha-protos.h2
-rw-r--r--gcc/config/alpha/alpha.c27
-rw-r--r--gcc/config/alpha/alpha.h5
-rw-r--r--gcc/config/alpha/alpha.md14
-rw-r--r--gcc/config/alpha/netbsd.h5
-rw-r--r--gcc/config/alpha/vms.h2
-rw-r--r--gcc/config/arc/arc.c5
-rw-r--r--gcc/config/arm/arm-protos.h2
-rw-r--r--gcc/config/arm/arm.c42
-rw-r--r--gcc/config/arm/arm.h33
-rw-r--r--gcc/config/c4x/c4x.c7
-rw-r--r--gcc/config/cris/cris-protos.h6
-rw-r--r--gcc/config/cris/cris.c29
-rw-r--r--gcc/config/cris/cris.h4
-rw-r--r--gcc/config/d30v/d30v.h31
-rw-r--r--gcc/config/elfos.h2
-rw-r--r--gcc/config/fp-bit.c68
-rw-r--r--gcc/config/fr30/fr30.c5
-rw-r--r--gcc/config/frv/frv-protos.h6
-rw-r--r--gcc/config/frv/frv.c18
-rw-r--r--gcc/config/frv/frv.h45
-rw-r--r--gcc/config/i370/i370.h24
-rw-r--r--gcc/config/i386/athlon.md573
-rw-r--r--gcc/config/i386/i386-protos.h2
-rw-r--r--gcc/config/i386/i386.c589
-rw-r--r--gcc/config/i386/i386.h112
-rw-r--r--gcc/config/i386/i386.md1161
-rw-r--r--gcc/config/i386/linux64.h4
-rw-r--r--gcc/config/i386/mmintrin.h50
-rw-r--r--gcc/config/i386/netbsd-elf.h3
-rw-r--r--gcc/config/i386/netbsd.h3
-rw-r--r--gcc/config/i386/netbsd64.h2
-rw-r--r--gcc/config/i386/openbsd.h3
-rw-r--r--gcc/config/i386/t-linux643
-rw-r--r--gcc/config/i386/unix.h7
-rw-r--r--gcc/config/i386/xmmintrin.h245
-rw-r--r--gcc/config/i960/i960.c80
-rw-r--r--gcc/config/i960/i960.h53
-rw-r--r--gcc/config/i960/i960.md113
-rw-r--r--gcc/config/ia64/ia64-protos.h2
-rw-r--r--gcc/config/ia64/ia64.c40
-rw-r--r--gcc/config/ia64/ia64.h33
-rw-r--r--gcc/config/interix.h13
-rw-r--r--gcc/config/ip2k/ip2k.c97
-rw-r--r--gcc/config/ip2k/libgcc.S42
-rw-r--r--gcc/config/ip2k/t-ip2k3
-rw-r--r--gcc/config/m32r/m32r.c5
-rw-r--r--gcc/config/m68hc11/m68hc11.c5
-rw-r--r--gcc/config/m68k/hp320.h20
-rw-r--r--gcc/config/m68k/linux.h34
-rw-r--r--gcc/config/m68k/m68k-protos.h2
-rw-r--r--gcc/config/m68k/m68k.c90
-rw-r--r--gcc/config/m68k/m68k.h16
-rw-r--r--gcc/config/m68k/m68kelf.h14
-rw-r--r--gcc/config/m68k/m68kv4.h13
-rw-r--r--gcc/config/m68k/netbsd-elf.h41
-rw-r--r--gcc/config/m68k/openbsd.h37
-rw-r--r--gcc/config/m68k/sun2o4.h4
-rw-r--r--gcc/config/m68k/sun3.h4
-rw-r--r--gcc/config/mips/elf.h1
-rw-r--r--gcc/config/mips/elf64.h1
-rw-r--r--gcc/config/mips/linux.h6
-rw-r--r--gcc/config/mips/mips-protos.h2
-rw-r--r--gcc/config/mips/mips.c21
-rw-r--r--gcc/config/mips/mips.h3
-rw-r--r--gcc/config/mips/mips.md16
-rw-r--r--gcc/config/mips/t-iris63
-rw-r--r--gcc/config/mmix/mmix-protos.h1
-rw-r--r--gcc/config/mmix/mmix.c15
-rw-r--r--gcc/config/mmix/mmix.h4
-rw-r--r--gcc/config/netbsd.h48
-rw-r--r--gcc/config/ns32k/ns32k.c8
-rw-r--r--gcc/config/pa/pa-protos.h5
-rw-r--r--gcc/config/pa/pa.c19
-rw-r--r--gcc/config/pa/pa.h20
-rw-r--r--gcc/config/pa/pa32-linux.h8
-rw-r--r--gcc/config/pa/pa64-hpux.h23
-rw-r--r--gcc/config/pdp11/pdp11.c45
-rw-r--r--gcc/config/pdp11/pdp11.h40
-rw-r--r--gcc/config/pdp11/pdp11.md165
-rw-r--r--gcc/config/pdp11/t-pdp1114
-rw-r--r--gcc/config/rs6000/rs6000-protos.h3
-rw-r--r--gcc/config/rs6000/rs6000.c131
-rw-r--r--gcc/config/rs6000/rs6000.h8
-rw-r--r--gcc/config/rs6000/rs6000.md248
-rw-r--r--gcc/config/rs6000/spe.h12
-rw-r--r--gcc/config/rs6000/spe.md2
-rw-r--r--gcc/config/rs6000/sysv4.h3
-rw-r--r--gcc/config/s390/linux.h146
-rw-r--r--gcc/config/s390/s390-protos.h2
-rw-r--r--gcc/config/s390/s390.c872
-rw-r--r--gcc/config/s390/s390.h74
-rw-r--r--gcc/config/s390/s390.md41
-rw-r--r--gcc/config/sh/linux.h1
-rw-r--r--gcc/config/sh/sh.md23
-rw-r--r--gcc/config/sparc/linux64.h68
-rw-r--r--gcc/config/sparc/netbsd-elf.h3
-rw-r--r--gcc/config/sparc/netbsd.h3
-rw-r--r--gcc/config/sparc/openbsd.h4
-rw-r--r--gcc/config/sparc/sol2-bi.h18
-rw-r--r--gcc/config/sparc/sparc-protos.h2
-rw-r--r--gcc/config/sparc/sparc.c7
-rw-r--r--gcc/config/sparc/sparc.h5
-rw-r--r--gcc/config/sparc/sparc.md25
-rw-r--r--gcc/config/sparc/t-linux6414
-rw-r--r--gcc/config/sparc/t-sol2-643
-rw-r--r--gcc/config/stormy16/stormy16-protos.h1
-rw-r--r--gcc/config/stormy16/stormy16.c11
-rw-r--r--gcc/config/stormy16/stormy16.h34
-rw-r--r--gcc/config/t-libunwind1
-rw-r--r--gcc/config/v850/v850.h6
-rw-r--r--gcc/config/vax/vax-protos.h5
-rw-r--r--gcc/config/vax/vax.c342
-rw-r--r--gcc/config/vax/vax.h105
-rw-r--r--gcc/config/vax/vax.md94
-rw-r--r--gcc/config/vax/vms.h274
-rw-r--r--gcc/config/vax/xm-vms.h174
-rw-r--r--gcc/config/xtensa/xtensa-protos.h4
-rw-r--r--gcc/config/xtensa/xtensa.c32
-rw-r--r--gcc/config/xtensa/xtensa.h9
-rwxr-xr-xgcc/configure774
-rw-r--r--gcc/configure.in63
-rw-r--r--gcc/conflict.c4
-rw-r--r--gcc/cp/ChangeLog331
-rw-r--r--gcc/cp/Make-lang.in2
-rw-r--r--gcc/cp/NEWS4
-rw-r--r--gcc/cp/call.c26
-rw-r--r--gcc/cp/class.c317
-rw-r--r--gcc/cp/cp-tree.def2
-rw-r--r--gcc/cp/cp-tree.h56
-rw-r--r--gcc/cp/cvt.c10
-rw-r--r--gcc/cp/decl.c511
-rw-r--r--gcc/cp/decl2.c73
-rw-r--r--gcc/cp/error.c9
-rw-r--r--gcc/cp/init.c704
-rw-r--r--gcc/cp/lex.c7
-rw-r--r--gcc/cp/mangle.c255
-rw-r--r--gcc/cp/method.c56
-rw-r--r--gcc/cp/optimize.c4
-rw-r--r--gcc/cp/parse.y39
-rw-r--r--gcc/cp/pt.c86
-rw-r--r--gcc/cp/rtti.c4
-rw-r--r--gcc/cp/semantics.c74
-rw-r--r--gcc/cp/tree.c73
-rw-r--r--gcc/cp/typeck2.c20
-rw-r--r--gcc/cppinit.c6
-rw-r--r--gcc/cppmacro.c3
-rw-r--r--gcc/cse.c173
-rw-r--r--gcc/cselib.c4
-rw-r--r--gcc/dependence.c1463
-rw-r--r--gcc/diagnostic.c4
-rw-r--r--gcc/doc/c-tree.texi34
-rw-r--r--gcc/doc/compat.texi41
-rw-r--r--gcc/doc/cpp.texi4
-rw-r--r--gcc/doc/extend.texi81
-rw-r--r--gcc/doc/install.texi262
-rw-r--r--gcc/doc/invoke.texi146
-rw-r--r--gcc/doc/tm.texi54
-rw-r--r--gcc/doc/vms.texi106
-rw-r--r--gcc/doloop.c1
-rw-r--r--gcc/dwarf2out.c50
-rw-r--r--gcc/emit-rtl.c4
-rw-r--r--gcc/expr.c20
-rw-r--r--gcc/f/ChangeLog5
-rw-r--r--gcc/f/target.h6
-rw-r--r--gcc/final.c2
-rw-r--r--gcc/fixinc/fixincl.x126
-rw-r--r--gcc/fixinc/inclhack.def16
-rw-r--r--gcc/fixinc/tests/base/stdlib.h5
-rw-r--r--gcc/fixinc/tests/base/testing.h2
-rw-r--r--gcc/flags.h24
-rw-r--r--gcc/flow.c4
-rw-r--r--gcc/fold-const.c19
-rw-r--r--gcc/function.c7
-rw-r--r--gcc/function.h4
-rw-r--r--gcc/gcc.c504
-rw-r--r--gcc/gcov-io.h2
-rw-r--r--gcc/gcov.c2
-rw-r--r--gcc/gcse.c7
-rw-r--r--gcc/genautomata.c22
-rw-r--r--gcc/gengtype.c15
-rw-r--r--gcc/genmultilib70
-rw-r--r--gcc/ginclude/stddef.h33
-rw-r--r--gcc/java/ChangeLog81
-rw-r--r--gcc/java/class.c2
-rw-r--r--gcc/java/gcj.texi45
-rw-r--r--gcc/java/gjavah.c2
-rw-r--r--gcc/java/java-tree.h2
-rw-r--r--gcc/java/jcf-dump.c16
-rw-r--r--gcc/java/jcf-parse.c2
-rw-r--r--gcc/java/jv-scan.c2
-rw-r--r--gcc/java/lang.c132
-rw-r--r--gcc/java/parse.y37
-rw-r--r--gcc/jump.c12
-rw-r--r--gcc/libgcc2.c5
-rw-r--r--gcc/longlong.h55
-rw-r--r--gcc/loop.c34
-rw-r--r--gcc/mklibgcc.in70
-rw-r--r--gcc/output.h1
-rw-r--r--gcc/predict.c31
-rw-r--r--gcc/print-rtl.c16
-rw-r--r--gcc/print-tree.c10
-rw-r--r--gcc/profile.c18
-rw-r--r--gcc/read-rtl.c4
-rw-r--r--gcc/real.c470
-rw-r--r--gcc/real.h23
-rw-r--r--gcc/reload.c26
-rw-r--r--gcc/reload1.c32
-rw-r--r--gcc/rtl.c15
-rw-r--r--gcc/rtl.h37
-rw-r--r--gcc/rtlanal.c92
-rw-r--r--gcc/sched-vis.c7
-rw-r--r--gcc/simplify-rtx.c74
-rw-r--r--gcc/stmt.c3
-rw-r--r--gcc/stor-layout.c264
-rw-r--r--gcc/system.h5
-rw-r--r--gcc/target-def.h17
-rw-r--r--gcc/target.h8
-rw-r--r--gcc/testsuite/ChangeLog328
-rw-r--r--gcc/testsuite/g++.dg/README2
-rw-r--r--gcc/testsuite/g++.dg/dg.exp1
-rw-r--r--gcc/testsuite/g++.dg/inherit/override1.C2
-rw-r--r--gcc/testsuite/g++.dg/init/array1.C6
-rw-r--r--gcc/testsuite/g++.dg/init/array6.C4
-rw-r--r--gcc/testsuite/g++.dg/tls/init-2.C6
-rw-r--r--gcc/testsuite/g++.old-deja/g++.ext/arrnew.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/p9129.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/warn3.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/asm3.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/asm1.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/memtemp64.C2
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20020720-1.x15
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c73
-rw-r--r--gcc/testsuite/gcc.dg/20000614-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/20020103-1.c5
-rw-r--r--gcc/testsuite/gcc.dg/20020219-1.c9
-rw-r--r--gcc/testsuite/gcc.dg/20020411-1.c4
-rw-r--r--gcc/testsuite/gcc.dg/20020919-1.c5
-rw-r--r--gcc/testsuite/gcc.dg/980211-1.c4
-rw-r--r--gcc/testsuite/gcc.dg/cpp/assembler.S1
-rw-r--r--gcc/testsuite/gcc.dg/cpp/c++98-pedantic.C10
-rw-r--r--gcc/testsuite/gcc.dg/cpp/c++98.C10
-rw-r--r--gcc/testsuite/gcc.dg/i386-sse-3.c14
-rw-r--r--gcc/testsuite/gcc.dg/inline-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/noncompile/920923-1.c78
-rw-r--r--gcc/testsuite/gcc.dg/sibcall-5.c41
-rw-r--r--gcc/testsuite/gcc.dg/weak/typeof-2.c7
-rw-r--r--gcc/testsuite/lib/prune.exp4
-rw-r--r--gcc/timevar.c2
-rw-r--r--gcc/toplev.c39
-rw-r--r--gcc/tree-inline.c35
-rw-r--r--gcc/tree.c58
-rw-r--r--gcc/tree.h33
-rw-r--r--gcc/unroll.c16
-rw-r--r--gcc/unwind-libunwind.c157
-rw-r--r--gcc/unwind.h2
-rw-r--r--gcc/varasm.c13
-rw-r--r--gcc/version.c16
-rw-r--r--gcc/version.h1
-rw-r--r--include/ChangeLog4
-rw-r--r--include/getopt.h2
-rw-r--r--libffi/ChangeLog24
-rw-r--r--libffi/include/ffi.h.in2
-rw-r--r--libffi/src/ffitest.c2
-rw-r--r--libffi/src/java_raw_api.c91
-rw-r--r--libffi/src/s390/ffi.c22
-rw-r--r--libffi/src/x86/ffi64.c2
-rw-r--r--libiberty/ChangeLog24
-rw-r--r--libiberty/config.table1
-rw-r--r--libiberty/cplus-dem.c18
-rw-r--r--libjava/ChangeLog368
-rw-r--r--libjava/Makefile.am38
-rw-r--r--libjava/Makefile.in86
-rw-r--r--libjava/aclocal.m423
-rwxr-xr-xlibjava/configure524
-rw-r--r--libjava/configure.host5
-rw-r--r--libjava/configure.in3
-rw-r--r--libjava/gcj/Makefile.in4
-rw-r--r--libjava/gnu/java/rmi/dgc/DGCImpl.java6
-rw-r--r--libjava/gnu/java/rmi/dgc/DGCImpl_Skel.java38
-rw-r--r--libjava/gnu/java/rmi/dgc/DGCImpl_Stub.java38
-rw-r--r--libjava/gnu/java/rmi/registry/RegistryImpl_Skel.java38
-rw-r--r--libjava/gnu/java/rmi/registry/RegistryImpl_Stub.java38
-rw-r--r--libjava/gnu/java/rmi/server/RMIHashes.java48
-rw-r--r--libjava/gnu/java/rmi/server/RMIObjectInputStream.java84
-rw-r--r--libjava/gnu/java/rmi/server/RMIObjectOutputStream.java61
-rw-r--r--libjava/gnu/java/rmi/server/UnicastConnection.java30
-rw-r--r--libjava/gnu/java/rmi/server/UnicastConnectionManager.java40
-rw-r--r--libjava/gnu/java/rmi/server/UnicastRef.java28
-rw-r--r--libjava/gnu/java/rmi/server/UnicastServer.java16
-rw-r--r--libjava/gnu/java/rmi/server/UnicastServerRef.java53
-rw-r--r--libjava/include/Makefile.in4
-rw-r--r--libjava/include/config.h.in11
-rw-r--r--libjava/include/win32-threads.h8
-rw-r--r--libjava/interpret.cc2
-rw-r--r--libjava/java/awt/dnd/DragSourceAdapter.java4
-rw-r--r--libjava/java/awt/dnd/DropTarget.java182
-rw-r--r--libjava/java/beans/beancontext/BeanContextChildSupport.java6
-rw-r--r--libjava/java/io/ObjectInputStream.java29
-rw-r--r--libjava/java/lang/Thread.java2
-rw-r--r--libjava/java/lang/Throwable.java22
-rw-r--r--libjava/java/lang/natClassLoader.cc9
-rw-r--r--libjava/java/lang/natObject.cc36
-rw-r--r--libjava/java/lang/natRuntime.cc3
-rw-r--r--libjava/java/net/DatagramPacket.java4
-rw-r--r--libjava/java/net/DatagramSocket.java39
-rw-r--r--libjava/java/net/HttpURLConnection.java36
-rw-r--r--libjava/java/net/InetAddress.java192
-rw-r--r--libjava/java/net/InetSocketAddress.java250
-rw-r--r--libjava/java/net/MulticastSocket.java75
-rw-r--r--libjava/java/net/NetworkInterface.java5
-rw-r--r--libjava/java/net/ServerSocket.java18
-rw-r--r--libjava/java/net/Socket.java53
-rw-r--r--libjava/java/net/SocketOptions.java10
-rw-r--r--libjava/java/net/SocketPermission.java2
-rw-r--r--libjava/java/net/URL.java91
-rw-r--r--libjava/java/net/URLConnection.java13
-rw-r--r--libjava/java/net/URLStreamHandler.java114
-rw-r--r--libjava/java/net/natNetworkInterface.cc10
-rw-r--r--libjava/java/net/natPlainDatagramSocketImpl.cc11
-rw-r--r--libjava/java/rmi/MarshalledObject.java83
-rw-r--r--libjava/java/rmi/activation/ActivationDesc.java5
-rw-r--r--libjava/java/rmi/activation/ActivationGroupDesc.java5
-rw-r--r--libjava/java/rmi/activation/ActivationGroupID.java5
-rw-r--r--libjava/java/rmi/activation/ActivationID.java5
-rw-r--r--libjava/java/rmi/server/RMIClassLoader.java149
-rw-r--r--libjava/java/rmi/server/RemoteObject.java84
-rw-r--r--libjava/java/rmi/server/UnicastRemoteObject.java71
-rw-r--r--libjava/java/security/Identity.java2
-rw-r--r--libjava/java/security/KeyPair.java2
-rw-r--r--libjava/java/security/ProtectionDomain.java3
-rw-r--r--libjava/java/security/Provider.java2
-rw-r--r--libjava/java/security/SecureClassLoader.java16
-rw-r--r--libjava/java/security/SecureRandom.java2
-rw-r--r--libjava/java/security/SecureRandomSpi.java2
-rw-r--r--libjava/java/security/Security.java17
-rw-r--r--libjava/java/security/SignedObject.java2
-rw-r--r--libjava/java/security/cert/Certificate.java3
-rw-r--r--libjava/java/text/Collator.java8
-rw-r--r--libjava/java/util/zip/natDeflater.cc1
-rw-r--r--libjava/java/util/zip/natInflater.cc1
-rw-r--r--libjava/javax/naming/BinaryRefAddr.java1
-rw-r--r--libjava/javax/naming/Name.java2
-rw-r--r--libjava/javax/swing/AbstractListModel.java9
-rw-r--r--libjava/javax/swing/DefaultBoundedRangeModel.java9
-rw-r--r--libjava/javax/swing/DefaultSingleSelectionModel.java9
-rw-r--r--libjava/mauve-libgcj21
-rw-r--r--libjava/sysdep/x86-64/locks.h7
-rw-r--r--libjava/testsuite/ChangeLog19
-rw-r--r--libjava/testsuite/Makefile.in4
-rw-r--r--libjava/testsuite/libjava.lang/Array_3.java19
-rw-r--r--libjava/testsuite/libjava.mauve/xfails3
-rw-r--r--libstdc++-v3/ChangeLog260
-rw-r--r--libstdc++-v3/Makefile.am2
-rw-r--r--libstdc++-v3/Makefile.in2
-rw-r--r--libstdc++-v3/acconfig.h14
-rw-r--r--libstdc++-v3/acinclude.m41
-rw-r--r--libstdc++-v3/aclocal.m41
-rw-r--r--libstdc++-v3/config.h.in14
-rw-r--r--libstdc++-v3/config/abi/i386-unknown-freebsd4.6/baseline_symbols.txt2008
-rw-r--r--libstdc++-v3/config/cpu/arm/atomicity.h187
-rw-r--r--libstdc++-v3/config/linker-map.gnu64
-rw-r--r--libstdc++-v3/config/locale/generic/c_locale.cc11
-rw-r--r--libstdc++-v3/config/locale/generic/c_locale.h2
-rw-r--r--libstdc++-v3/config/locale/generic/time_members.cc14
-rw-r--r--libstdc++-v3/config/locale/gnu/c_locale.cc22
-rw-r--r--libstdc++-v3/config/locale/gnu/c_locale.h2
-rw-r--r--libstdc++-v3/config/locale/gnu/ctype_members.cc3
-rw-r--r--libstdc++-v3/config/locale/gnu/monetary_members.cc19
-rw-r--r--libstdc++-v3/config/locale/gnu/numeric_members.cc4
-rw-r--r--libstdc++-v3/config/locale/gnu/time_members.cc24
-rw-r--r--libstdc++-v3/config/os/gnu-linux/ctype_noninline.h5
-rwxr-xr-xlibstdc++-v3/configure2847
-rw-r--r--libstdc++-v3/configure.in67
-rw-r--r--libstdc++-v3/configure.target8
-rw-r--r--libstdc++-v3/docs/html/17_intro/contribute.html7
-rw-r--r--libstdc++-v3/docs/html/17_intro/howto.html7
-rw-r--r--libstdc++-v3/docs/html/17_intro/license.html7
-rw-r--r--libstdc++-v3/docs/html/17_intro/porting.html13
-rw-r--r--libstdc++-v3/docs/html/17_intro/porting.texi13
-rw-r--r--libstdc++-v3/docs/html/18_support/howto.html7
-rw-r--r--libstdc++-v3/docs/html/19_diagnostics/howto.html7
-rw-r--r--libstdc++-v3/docs/html/20_util/howto.html7
-rw-r--r--libstdc++-v3/docs/html/21_strings/howto.html76
-rw-r--r--libstdc++-v3/docs/html/22_locale/codecvt.html7
-rw-r--r--libstdc++-v3/docs/html/22_locale/ctype.html7
-rw-r--r--libstdc++-v3/docs/html/22_locale/howto.html7
-rw-r--r--libstdc++-v3/docs/html/22_locale/locale.html466
-rw-r--r--libstdc++-v3/docs/html/22_locale/messages.html6
-rw-r--r--libstdc++-v3/docs/html/23_containers/howto.html44
-rw-r--r--libstdc++-v3/docs/html/24_iterators/howto.html6
-rw-r--r--libstdc++-v3/docs/html/25_algorithms/howto.html6
-rw-r--r--libstdc++-v3/docs/html/26_numerics/howto.html6
-rw-r--r--libstdc++-v3/docs/html/27_io/howto.html6
-rw-r--r--libstdc++-v3/docs/html/abi.txt37
-rw-r--r--libstdc++-v3/docs/html/configopts.html7
-rw-r--r--libstdc++-v3/docs/html/documentation.html7
-rw-r--r--libstdc++-v3/docs/html/explanations.html7
-rw-r--r--libstdc++-v3/docs/html/ext/howto.html43
-rw-r--r--libstdc++-v3/docs/html/ext/sgiexts.html9
-rw-r--r--libstdc++-v3/docs/html/faq/index.html6
-rw-r--r--libstdc++-v3/docs/html/install.html11
-rw-r--r--libstdc++-v3/include/backward/alloc.h4
-rw-r--r--libstdc++-v3/include/bits/c++config12
-rw-r--r--libstdc++-v3/include/bits/locale_facets.h70
-rw-r--r--libstdc++-v3/include/bits/localefwd.h45
-rw-r--r--libstdc++-v3/include/bits/stl_alloc.h141
-rw-r--r--libstdc++-v3/include/bits/stl_threads.h20
-rw-r--r--libstdc++-v3/include/bits/streambuf.tcc29
-rw-r--r--libstdc++-v3/src/codecvt.cc12
-rw-r--r--libstdc++-v3/src/ctype.cc11
-rw-r--r--libstdc++-v3/src/globals.cc129
-rw-r--r--libstdc++-v3/src/ios.cc26
-rw-r--r--libstdc++-v3/src/locale-inst.cc4
-rw-r--r--libstdc++-v3/src/locale.cc207
-rw-r--r--libstdc++-v3/src/localename.cc157
-rw-r--r--libstdc++-v3/src/stl-inst.cc4
-rw-r--r--libstdc++-v3/testsuite/21_strings/capacity.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc176
-rw-r--r--libstdc++-v3/testsuite/22_locale/facet.cc63
-rw-r--r--libstdc++-v3/testsuite/22_locale/static_members.cc144
-rw-r--r--libstdc++-v3/testsuite/27_io/ostream_inserter_other.cc96
-rw-r--r--libstdc++-v3/testsuite/abi_check.cc121
-rw-r--r--libstdc++-v3/testsuite/ext/allocators.cc1
-rw-r--r--libstdc++-v3/testsuite/thread/pthread1.cc2
458 files changed, 18653 insertions, 12576 deletions
diff --git a/ChangeLog b/ChangeLog
index b0f40c43d83..5f613d37dbc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,47 @@
+2002-10-07 Svein E. Seldal <Svein.Seldal@solidas.com>
+
+ * configure.in: Add tic4x target.
+
+2002-10-03 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * Makefile.tpl: Make SET_LIB_PATH substitution more autoconfy.
+ * configure.in: Make SET_LIB_PATH substitution more autoconfy.
+ * Makefile.in: Regenerate.
+
+ * Makefile.tpl: Make RPATH_ENVVAR substitution more autoconfy.
+ * configure.in: Make RPATH_ENVVAR substitution more autoconfy.
+ * Makefile.in: Regenerate.
+
+2002-10-02 Janis Johnson <janis187@us.ibm.com>
+
+ * MAINTAINERS: Add myself as web pages co-maintainer.
+
+2002-10-02 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * Makefile.tpl: Eliminate reference to all-gui, all-libproc.
+ * Makefile.in: Regenerate.
+
+2002-10-02 Zack Weinberg <zack@codesourcery.com>
+
+ * MAINTAINERS: Add myself and Nathan Sidwell
+ <nathan@codesourcery.com> as VxWorks maintainers.
+
+2002-10-02 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * Makefile.def: Remove order dependency comments.
+ * Makefile.tpl: Add explicit install-install dependencies.
+ * Makefile.in: Regenerate.
+
+ * Makefile.tpl: Remove material now in src-release. (Finally!)
+ * Makefile.in: Regenerate.
+
+ * Makefile.tpl: Add configure-target (for src-release in src)
+ * Makefile.in: Regenerate.
+
+2002-09-30 Nick Clifton <nickc@redhat.com>
+
+ * Makefile.in (BINUTILS_SUPPORT_DIRS): Add cpu directory.
+
2002-09-30 Ulrich Weigand <uweigand@de.ibm.com>
* configure.in (s390*-*-linux*): Enable libgcj.
@@ -85,7 +129,7 @@
2002-08-21 Paolo Carlini <pcarlini@unitus.it>
* MAINTAINERS (Write After Approval): Remove myself.
- (Various Maintainers: c++ runtime libs): Add myself.
+ (Various Maintainers: c++ runtime libs): Add myself.
2002-08-20 Loren J. Rittle <ljrittle@acm.org>
diff --git a/MAINTAINERS b/MAINTAINERS
index ae8f108fa93..664f18b2215 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -119,7 +119,7 @@ caller-save.c Jeff Law law@redhat.com
debugging code Jim Wilson wilson@redhat.com
dwarf debugging code Jason Merrill jason@redhat.com
c++ runtime libs Paolo Carlini pcarlini@unitus.it
-c++ runtime libs Gabriel Dos Reis dosreis@cmla.ens-cachan.fr
+c++ runtime libs Gabriel Dos Reis gdr@integrable-solutions.net
c++ runtime libs Ulrich Drepper drepper@redhat.com
c++ runtime libs Phil Edwards pme@gcc.gnu.org
c++ runtime libs Benjamin Kosnik bkoz@redhat.com
@@ -130,7 +130,8 @@ fixincludes Bruce Korb bkorb@gnu.org
gcse.c Jeff Law law@redhat.com
global opt framework Jeff Law law@redhat.com
jump.c David S. Miller davem@redhat.com
-web pages Gerald Pfeifer pfeifer@dbai.tuwien.ac.at
+web pages co-maintainer Gerald Pfeifer pfeifer@dbai.tuwien.ac.at
+web pages co-maintainer Janis Johnson janis187@us.ibm.com
config.sub/config.guess Ben Elliston config-patches@gnu.org
basic block reordering Jason Eckhardt jle@rice.edu
i18n Philipp Thomas pthomas@suse.de
@@ -145,6 +146,8 @@ docs co-maintainer Gerald Pfeifer pfeifer@dbai.tuwien.ac.at
docs co-maintainer Joseph Myers jsm28@cam.ac.uk
Pico-Java port Steve Chamberlain sac@transmeta.com
RTEMS Ports Joel Sherrill
+VxWorks ports Zack Weinberg zack@codesourcery.com
+VxWorks ports Nathan Sidwell nathan@codesourcery.com
predict.def Jan Hubicka jh@suse.cz
contrib/regression Geoff Keating geoffk@geoffk.org
treelang Tim Josling tej@melbpc.org.au
@@ -168,6 +171,7 @@ Andrew Cagney cagney@redhat.com
Chandra Chavva cchavva@redhat.com
William Cohen wcohen@redhat.com
Chris Demetriou cgd@broadcom.com
+Gabriel Dos Reis gdr@integrable-solutions.net
*Paul Eggert eggert@twinsun.com
Steve Ellcey sje@cup.hp.com
Ben Elliston bje@redhat.com
@@ -185,7 +189,6 @@ Manfred Hollstein mhollstein@redhat.com
Andreas Jaeger aj@suse.de
Jakub Jelinek jakub@redhat.com
Dale Johannesen dalej@apple.com
-Janis Johnson janis187@us.ibm.com
Klaus Kaempf kkaempf@progis.de
Brendan Kehoe brendan@zen.org
Mumit Khan khan@xraylith.wisc.edu
@@ -220,10 +223,10 @@ Rainer Orth ro@TechFak.Uni-Bielefeld.DE
Devang Patel dpatel@apple.com
Nicola Pero n.pero@mi.flashnet.it
Alexandre Petit-Bianco apbianco@redhat.com
+Sebastian Pop s.pop@laposte.net
Clinton Popetz cpopetz@cpopetz.com
Ken Raeburn raeburn@redhat.com
Rolf Rasmussen rolfwr@gcc.gnu.org
-Gabriel Dos Reis dosreis@cmla.ens-cachan.fr
Tom Rix trix@redhat.com
Craig Rodrigues rodrigc@gcc.gnu.org
Gavin Romig-Koch gavin@redhat.com
diff --git a/Makefile.def b/Makefile.def
index f1d9878475f..754b79ee08a 100644
--- a/Makefile.def
+++ b/Makefile.def
@@ -6,7 +6,6 @@ host_modules= { module= autoconf; };
host_modules= { module= automake; };
host_modules= { module= bash; };
host_modules= { module= bfd; };
-// Put install-opcodes before install-binutils: should be Makefile dependency.
host_modules= { module= opcodes; };
host_modules= { module= binutils; };
host_modules= { module= bison; no_check_cross= true; };
@@ -32,7 +31,6 @@ host_modules= { module= gzip; };
host_modules= { module= hello; };
host_modules= { module= indent; };
host_modules= { module= intl; };
-// Put install-tcl before install-itcl: should be Makefile dependency.
host_modules= { module= tcl; };
host_modules= { module= itcl; };
host_modules= { module= ld; };
diff --git a/Makefile.in b/Makefile.in
index 81c65f986ea..ce4bffa88a4 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -124,9 +124,6 @@ NM = nm
LD = ld
-BZIPPROG = bzip2
-MD5PROG = md5sum
-
# These values are substituted by configure.
DEFAULT_YACC = @DEFAULT_YACC@
DEFAULT_LEX = @DEFAULT_LEX@
@@ -204,11 +201,11 @@ BUILD_CONFIGARGS = @build_configargs@
# This is set by configure to REALLY_SET_LIB_PATH if --enable-shared
# was used.
-SET_LIB_PATH =
+SET_LIB_PATH = @SET_LIB_PATH@
# This is the name of the environment variable used for the path to
# the libraries. This may be changed by configure.in.
-RPATH_ENVVAR = LD_LIBRARY_PATH
+RPATH_ENVVAR = @RPATH_ENVVAR@
# This is the list of directories that may be needed in RPATH_ENVVAR
# so that programs built for the host machine work.
@@ -656,11 +653,6 @@ CHECK_MODULES=$(NATIVE_CHECK_MODULES) $(CROSS_CHECK_MODULES)
# This is a list of the install targets for all of the modules which are
# compiled using $(FLAGS_TO_PASS).
-# We put install-opcodes before install-binutils because the installed
-# binutils might be on PATH, and they might need the shared opcodes
-# library.
-# We put install-tcl before install-itcl because itcl wants to run a
-# program on installation which uses the Tcl libraries.
INSTALL_MODULES = \
install-ash \
install-autoconf \
@@ -1261,12 +1253,8 @@ $(CONFIGURE_BUILD_MODULES):
# This rule is used to build the modules which use FLAGS_TO_PASS. To
# build a target all-X means to cd to X and make all.
-#
-# all-gui, and all-libproc are handled specially because
-# they are still experimental, and if they fail to build, that
-# shouldn't stop "make all".
-.PHONY: $(ALL_MODULES) all-gui all-libproc
-$(ALL_MODULES) all-gui all-libproc:
+.PHONY: $(ALL_MODULES)
+$(ALL_MODULES):
@dir=`echo $@ | sed -e 's/all-//'`; \
if [ -f ./$${dir}/Makefile ] ; then \
r=`${PWD}`; export r; \
@@ -1680,7 +1668,6 @@ configure-target-gperf: $(ALL_GCC_CXX)
all-target-gperf: all-target-libiberty all-target-libstdc++-v3
all-gprof: all-libiberty all-bfd all-opcodes all-intl
all-grep: all-libiberty
-all-gui: all-gdb all-libproc
all-guile:
all-gzip: all-libiberty
all-hello: all-libiberty
@@ -1743,11 +1730,22 @@ all-fastjar: all-zlib all-libiberty
configure-target-fastjar: configure-target-zlib
all-target-fastjar: configure-target-fastjar all-target-zlib all-target-libiberty
configure-target-libiberty: $(ALL_GCC_C)
+configure-target: $(CONFIGURE_TARGET_MODULES)
all-target: $(ALL_TARGET_MODULES)
install-target: $(INSTALL_TARGET_MODULES)
install-gdb: install-tcl install-tk install-itcl install-tix install-libgui
install-sid: install-tcl install-tk
+# We put install-opcodes before install-binutils because the installed
+# binutils might be on PATH, and they might need the shared opcodes
+# library.
+install-binutils: install-opcodes
+
+# We put install-tcl before install-itcl because itcl wants to run a
+# program on installation which uses the Tcl libraries.
+install-itcl: install-tcl
+
+
# Dependencies of all-target-foo on configure-target-foo.
all-target-libstdc++-v3: configure-target-libstdc++-v3
all-target-newlib: configure-target-newlib
@@ -1806,290 +1804,6 @@ Makefile: Makefile.in configure.in $(host_makefile_frag) $(target_makefile_frag)
$(SHELL) ./config.status
#
-# Support for building net releases
-
-# Files in devo used in any net release.
-# ChangeLog omitted because it may refer to files which are not in this
-# distribution (perhaps it would be better to include it anyway).
-DEVO_SUPPORT= README Makefile.in configure configure.in \
- config.guess config.if config.sub config move-if-change \
- mpw-README mpw-build.in mpw-config.in mpw-configure mpw-install \
- COPYING COPYING.LIB install-sh config-ml.in symlink-tree \
- mkinstalldirs ltconfig ltmain.sh missing ylwrap \
- libtool.m4 gettext.m4 ltcf-c.sh ltcf-cxx.sh ltcf-gcj.sh
-
-# Files in devo/etc used in any net release.
-# ChangeLog omitted because it may refer to files which are not in this
-# distribution (perhaps it would be better to include it anyway).
-ETC_SUPPORT= Makefile.in configure configure.in standards.texi \
- make-stds.texi standards.info* configure.texi configure.info* \
- configbuild.* configdev.*
-
-
-# When you use `make setup-dirs' or `make taz' you should always redefine
-# this macro.
-SUPPORT_FILES = list-of-support-files-for-tool-in-question
-
-# NOTE: No double quotes in the below. It is used within shell script
-# as VER="$(VER)"
-VER = ` if grep 'AM_INIT_AUTOMAKE.*BFD_VERSION' $(TOOL)/configure.in >/dev/null 2>&1; then \
- sed < bfd/configure.in -n 's/AM_INIT_AUTOMAKE[^,]*, *\([^)]*\))/\1/p'; \
- elif grep AM_INIT_AUTOMAKE $(TOOL)/configure.in >/dev/null 2>&1; then \
- sed < $(TOOL)/configure.in -n 's/AM_INIT_AUTOMAKE[^,]*, *\([^)]*\))/\1/p'; \
- elif test -f $(TOOL)/version.in; then \
- head -1 $(TOOL)/version.in; \
- elif grep VERSION $(TOOL)/Makefile.in > /dev/null 2>&1; then \
- sed < $(TOOL)/Makefile.in -n 's/^VERSION *= *//p'; \
- else \
- echo VERSION; \
- fi`
-PACKAGE = $(TOOL)
-
-.PHONY: taz
-taz: $(DEVO_SUPPORT) $(SUPPORT_FILES) texinfo/texinfo.tex
- $(MAKE) -f Makefile.in do-proto-toplev \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
- $(MAKE) -f Makefile.in do-md5sum \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
- $(MAKE) -f Makefile.in do-tar \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
- $(MAKE) -f Makefile.in do-bz2 \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
-
-.PHONY: gdb-tar
-gdb-tar: $(DEVO_SUPPORT) $(SUPPORT_FILES) texinfo/texinfo.tex
- $(MAKE) -f Makefile.in do-proto-toplev \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
- $(MAKE) -f Makefile.in do-md5sum \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
- $(MAKE) -f Makefile.in do-djunpack \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
- $(MAKE) -f Makefile.in do-tar \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
-
-.PHONY: gdb-taz
-gdb-taz: gdb-tar $(DEVO_SUPPORT) $(SUPPORT_FILES) texinfo/texinfo.tex
- $(MAKE) -f Makefile.in gdb-tar \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
- $(MAKE) -f Makefile.in do-bz2 \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
-
-.PHONY: do-proto-toplev
-do-proto-toplev: $(DEVO_SUPPORT) $(SUPPORT_FILES) texinfo/texinfo.tex
- echo "==> Making $(PACKAGE)-$(VER)/"
- # Take out texinfo from a few places.
- sed -e '/^all\.normal: /s/\all-texinfo //' \
- -e '/^ install-texinfo /d' \
- <Makefile.in >tmp
- mv -f tmp Makefile.in
- #
- ./configure sun4
- [ -z "$(CONFIGURE_TARGET_MODULES)" ] \
- || $(MAKE) $(CONFIGURE_TARGET_MODULES) \
- ALL_GCC="" ALL_GCC_C="" ALL_GCC_CXX="" \
- CC_FOR_TARGET="$(CC)" CXX_FOR_TARGET="$(CXX)"
- # Make links, and run "make diststuff" or "make info" when needed.
- rm -rf proto-toplev ; mkdir proto-toplev
- set -e ; dirs="$(TOOL) $(DEVO_SUPPORT) $(SUPPORT_FILES)" ; \
- for d in $$dirs ; do \
- if [ -d $$d ]; then \
- if [ ! -f $$d/Makefile ] ; then true ; \
- elif grep '^diststuff:' $$d/Makefile >/dev/null ; then \
- (cd $$d ; $(MAKE) diststuff ) || exit 1 ; \
- elif grep '^info:' $$d/Makefile >/dev/null ; then \
- (cd $$d ; $(MAKE) info ) || exit 1 ; \
- fi ; \
- if [ -d $$d/proto-$$d.dir ]; then \
- ln -s ../$$d/proto-$$d.dir proto-toplev/$$d ; \
- else \
- ln -s ../$$d proto-toplev/$$d ; \
- fi ; \
- else ln -s ../$$d proto-toplev/$$d ; fi ; \
- done
- cd etc && $(MAKE) info
- $(MAKE) distclean
- #
- mkdir proto-toplev/etc
- (cd proto-toplev/etc; \
- for i in $(ETC_SUPPORT); do \
- ln -s ../../etc/$$i . ; \
- done)
- #
- # Take out texinfo from configurable dirs
- rm proto-toplev/configure.in
- sed -e '/^host_tools=/s/texinfo //' \
- <configure.in >proto-toplev/configure.in
- #
- mkdir proto-toplev/texinfo
- ln -s ../../texinfo/texinfo.tex proto-toplev/texinfo/
- if test -r texinfo/util/tex3patch ; then \
- mkdir proto-toplev/texinfo/util && \
- ln -s ../../../texinfo/util/tex3patch proto-toplev/texinfo/util ; \
- else true; fi
- chmod -R og=u . || chmod og=u `find . -print`
- #
- # Create .gmo files from .po files.
- for f in `find . -name '*.po' -type f -print`; do \
- msgfmt -o `echo $$f | sed -e 's/\.po$$/.gmo/'` $$f ; \
- done
- #
- -rm -f $(PACKAGE)-$(VER)
- ln -s proto-toplev $(PACKAGE)-$(VER)
-
-.PHONY: do-tar
-do-tar:
- echo "==> Making $(PACKAGE)-$(VER).tar"
- -rm -f $(PACKAGE)-$(VER).tar
- find $(PACKAGE)-$(VER) -follow -name CVS -prune -o -type f -print \
- | tar cTfh - $(PACKAGE)-$(VER).tar
-
-.PHONY: do-bz2
-do-bz2:
- echo "==> Bzipping $(PACKAGE)-$(VER).tar.bz2"
- -rm -f $(PACKAGE)-$(VER).tar.bz2
- $(BZIPPROG) -v -9 $(PACKAGE)-$(VER).tar
-
-.PHONY: do-md5sum
-do-md5sum:
- echo "==> Adding md5 checksum to top-level directory"
- cd proto-toplev && find * -follow -name CVS -prune -o -type f -print \
- | xargs $(MD5PROG) > ../md5.sum
- mv md5.sum proto-toplev
-
-.PHONY: do-djunpack
-do-djunpack:
- echo "==> Adding updated djunpack.bat to top-level directory"
- echo - 's /gdb-[0-9\.]*/gdb-'"$(VER)"'/'
- sed < djunpack.bat > djunpack.new \
- -e 's/gdb-[0-9][0-9\.]*/gdb-'"$(VER)"'/'
- mv djunpack.new djunpack.bat
- -rm -f proto-toplev/djunpack.bat
- ln -s ../djunpack.bat proto-toplev/djunpack.bat
-
-TEXINFO_SUPPORT= texinfo/texinfo.tex
-DIST_SUPPORT= $(DEVO_SUPPORT) $(TEXINFO_SUPPORT)
-
-.PHONY: gas.tar.bz2
-GAS_SUPPORT_DIRS= bfd include libiberty opcodes intl setup.com makefile.vms mkdep
-gas.tar.bz2: $(DIST_SUPPORT) $(GAS_SUPPORT_DIRS) gas
- $(MAKE) -f Makefile.in taz TOOL=gas \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(GAS_SUPPORT_DIRS)"
-
-# The FSF "binutils" release includes gprof and ld.
-.PHONY: binutils.tar.bz2
-BINUTILS_SUPPORT_DIRS= bfd gas include libiberty opcodes ld gprof intl setup.com makefile.vms mkdep
-binutils.tar.bz2: $(DIST_SUPPORT) $(BINUTILS_SUPPORT_DIRS) binutils
- $(MAKE) -f Makefile.in taz TOOL=binutils \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(BINUTILS_SUPPORT_DIRS)"
-
-.PHONY: gas+binutils.tar.bz2
-GASB_SUPPORT_DIRS= $(GAS_SUPPORT_DIRS) binutils ld gprof
-gas+binutils.tar.bz2: $(DIST_SUPPORT) $(GASB_SUPPORT_DIRS) gas
- $(MAKE) -f Makefile.in taz TOOL=gas \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(GASB_SUPPORT_DIRS)"
-
-GNATS_SUPPORT_DIRS=include libiberty send-pr
-gnats.tar.bz2: $(DIST_SUPPORT) $(GNATS_SUPPORT_DIRS) gnats
- $(MAKE) -f Makefile.in taz TOOL=gnats \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(GNATS_SUPPORT_DIRS)"
-
-.PHONY: gdb.tar.bz2
-GDB_SUPPORT_DIRS= bfd include libiberty mmalloc opcodes readline sim utils intl
-gdb.tar.bz2: $(DIST_SUPPORT) $(GDB_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-taz TOOL=gdb \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(GDB_SUPPORT_DIRS)"
-.PHONY: gdb.tar
-gdb.tar: $(DIST_SUPPORT) $(GDB_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-tar TOOL=gdb \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(GDB_SUPPORT_DIRS)"
-
-DEJAGNU_SUPPORT_DIRS= tcl expect libiberty
-.PHONY: dejagnu.tar.bz2
-dejagnu.tar.bz2: $(DIST_SUPPORT) $(DEJAGNU_SUPPORT_DIRS) dejagnu
- $(MAKE) -f Makefile.in taz TOOL=dejagnu \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(DEJAGNU_SUPPORT_DIRS)"
-
-.PHONY: gdb+dejagnu.tar.bz2
-GDBD_SUPPORT_DIRS= $(GDB_SUPPORT_DIRS) tcl expect dejagnu
-gdb+dejagnu.tar.bz2: $(DIST_SUPPORT) $(GDBD_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-taz TOOL=gdb PACKAGE=gdb+dejagnu \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(GDBD_SUPPORT_DIRS)"
-.PHONY: gdb+dejagnu.tar
-gdb+dejagnu.tar: $(DIST_SUPPORT) $(GDBD_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-tar TOOL=gdb PACKAGE=gdb+dejagnu \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(GDBD_SUPPORT_DIRS)"
-
-.PHONY: insight.tar.bz2
-INSIGHT_SUPPORT_DIRS= $(GDB_SUPPORT_DIRS) tcl tk itcl tix libgui
-insight.tar.bz2: $(DIST_SUPPORT) $(GDB_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-taz TOOL=gdb PACKAGE=insight \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(INSIGHT_SUPPORT_DIRS)"
-.PHONY: insight.tar
-insight.tar: $(DIST_SUPPORT) $(GDB_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-tar TOOL=gdb PACKAGE=insight \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(INSIGHT_SUPPORT_DIRS)"
-
-.PHONY: insight+dejagnu.tar.bz2
-INSIGHTD_SUPPORT_DIRS= $(INSIGHT_SUPPORT_DIRS) expect dejagnu
-insight+dejagnu.tar.bz2: $(DIST_SUPPORT) $(INSIGHTD_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-taz TOOL=gdb PACKAGE="insight+dejagnu" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(INSIGHTD_SUPPORT_DIRS)"
-.PHONY: insight+dejagnu.tar
-insight+dejagnu.tar: $(DIST_SUPPORT) $(INSIGHTD_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-tar TOOL=gdb PACKAGE="insight+dejagnu" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(INSIGHTD_SUPPORT_DIRS)"
-
-.PHONY: newlib.tar.bz2
-NEWLIB_SUPPORT_DIRS=libgloss
-# taz configures for the sun4 target which won't configure newlib.
-# We need newlib configured so that the .info files are made.
-# Unfortunately, it is not enough to just configure newlib separately:
-# taz will build the .info files but since SUBDIRS won't contain newlib,
-# distclean won't be run (leaving Makefile, config.status, and the tmp files
-# used in building the .info files, eg: *.def, *.ref).
-# The problem isn't solvable however without a lot of extra work because
-# target libraries are built in subdir $(target_alias) which gets nuked during
-# the make distclean. For now punt on the issue of shipping newlib info files
-# with newlib net releases and wait for a day when some native target (sun4?)
-# supports newlib (if only minimally).
-newlib.tar.bz2: $(DIST_SUPPORT) $(NEWLIB_SUPPORT_DIRS) newlib
- $(MAKE) -f Makefile.in taz TOOL=newlib \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(NEWLIB_SUPPORT_DIRS)" \
- DEVO_SUPPORT="$(DEVO_SUPPORT) COPYING.NEWLIB" newlib
.NOEXPORT:
MAKEOVERRIDES=
diff --git a/Makefile.tpl b/Makefile.tpl
index 2a423508771..5ef7d55fa3f 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -127,9 +127,6 @@ NM = nm
LD = ld
-BZIPPROG = bzip2
-MD5PROG = md5sum
-
# These values are substituted by configure.
DEFAULT_YACC = @DEFAULT_YACC@
DEFAULT_LEX = @DEFAULT_LEX@
@@ -207,11 +204,11 @@ BUILD_CONFIGARGS = @build_configargs@
# This is set by configure to REALLY_SET_LIB_PATH if --enable-shared
# was used.
-SET_LIB_PATH =
+SET_LIB_PATH = @SET_LIB_PATH@
# This is the name of the environment variable used for the path to
# the libraries. This may be changed by configure.in.
-RPATH_ENVVAR = LD_LIBRARY_PATH
+RPATH_ENVVAR = @RPATH_ENVVAR@
# This is the list of directories that may be needed in RPATH_ENVVAR
# so that programs built for the host machine work.
@@ -550,11 +547,6 @@ CHECK_MODULES=$(NATIVE_CHECK_MODULES) $(CROSS_CHECK_MODULES)
# This is a list of the install targets for all of the modules which are
# compiled using $(FLAGS_TO_PASS).
-# We put install-opcodes before install-binutils because the installed
-# binutils might be on PATH, and they might need the shared opcodes
-# library.
-# We put install-tcl before install-itcl because itcl wants to run a
-# program on installation which uses the Tcl libraries.
INSTALL_MODULES = [+ FOR host_modules+][+ IF no_install +][+ ELSE no_install +]\
install-[+module+] [+ ENDIF no_install +][+ ENDFOR host_modules +]\
$(EXTRA_TARGET_HOST_INSTALL_MODULES)
@@ -976,12 +968,8 @@ $(CONFIGURE_BUILD_MODULES):
# This rule is used to build the modules which use FLAGS_TO_PASS. To
# build a target all-X means to cd to X and make all.
-#
-# all-gui, and all-libproc are handled specially because
-# they are still experimental, and if they fail to build, that
-# shouldn't stop "make all".
-.PHONY: $(ALL_MODULES) all-gui all-libproc
-$(ALL_MODULES) all-gui all-libproc:
+.PHONY: $(ALL_MODULES)
+$(ALL_MODULES):
@dir=`echo $@ | sed -e 's/all-//'`; \
if [ -f ./$${dir}/Makefile ] ; then \
r=`${PWD}`; export r; \
@@ -1395,7 +1383,6 @@ configure-target-gperf: $(ALL_GCC_CXX)
all-target-gperf: all-target-libiberty all-target-libstdc++-v3
all-gprof: all-libiberty all-bfd all-opcodes all-intl
all-grep: all-libiberty
-all-gui: all-gdb all-libproc
all-guile:
all-gzip: all-libiberty
all-hello: all-libiberty
@@ -1458,11 +1445,22 @@ all-fastjar: all-zlib all-libiberty
configure-target-fastjar: configure-target-zlib
all-target-fastjar: configure-target-fastjar all-target-zlib all-target-libiberty
configure-target-libiberty: $(ALL_GCC_C)
+configure-target: $(CONFIGURE_TARGET_MODULES)
all-target: $(ALL_TARGET_MODULES)
install-target: $(INSTALL_TARGET_MODULES)
install-gdb: install-tcl install-tk install-itcl install-tix install-libgui
install-sid: install-tcl install-tk
+# We put install-opcodes before install-binutils because the installed
+# binutils might be on PATH, and they might need the shared opcodes
+# library.
+install-binutils: install-opcodes
+
+# We put install-tcl before install-itcl because itcl wants to run a
+# program on installation which uses the Tcl libraries.
+install-itcl: install-tcl
+
+
# Dependencies of all-target-foo on configure-target-foo.
[+ FOR target_modules +]all-target-[+module+]: configure-target-[+module+]
[+ ENDFOR target_modules +]
@@ -1507,290 +1505,6 @@ Makefile: Makefile.in configure.in $(host_makefile_frag) $(target_makefile_frag)
$(SHELL) ./config.status
#
-# Support for building net releases
-
-# Files in devo used in any net release.
-# ChangeLog omitted because it may refer to files which are not in this
-# distribution (perhaps it would be better to include it anyway).
-DEVO_SUPPORT= README Makefile.in configure configure.in \
- config.guess config.if config.sub config move-if-change \
- mpw-README mpw-build.in mpw-config.in mpw-configure mpw-install \
- COPYING COPYING.LIB install-sh config-ml.in symlink-tree \
- mkinstalldirs ltconfig ltmain.sh missing ylwrap \
- libtool.m4 gettext.m4 ltcf-c.sh ltcf-cxx.sh ltcf-gcj.sh
-
-# Files in devo/etc used in any net release.
-# ChangeLog omitted because it may refer to files which are not in this
-# distribution (perhaps it would be better to include it anyway).
-ETC_SUPPORT= Makefile.in configure configure.in standards.texi \
- make-stds.texi standards.info* configure.texi configure.info* \
- configbuild.* configdev.*
-
-
-# When you use `make setup-dirs' or `make taz' you should always redefine
-# this macro.
-SUPPORT_FILES = list-of-support-files-for-tool-in-question
-
-# NOTE: No double quotes in the below. It is used within shell script
-# as VER="$(VER)"
-VER = ` if grep 'AM_INIT_AUTOMAKE.*BFD_VERSION' $(TOOL)/configure.in >/dev/null 2>&1; then \
- sed < bfd/configure.in -n 's/AM_INIT_AUTOMAKE[^,]*, *\([^)]*\))/\1/p'; \
- elif grep AM_INIT_AUTOMAKE $(TOOL)/configure.in >/dev/null 2>&1; then \
- sed < $(TOOL)/configure.in -n 's/AM_INIT_AUTOMAKE[^,]*, *\([^)]*\))/\1/p'; \
- elif test -f $(TOOL)/version.in; then \
- head -1 $(TOOL)/version.in; \
- elif grep VERSION $(TOOL)/Makefile.in > /dev/null 2>&1; then \
- sed < $(TOOL)/Makefile.in -n 's/^VERSION *= *//p'; \
- else \
- echo VERSION; \
- fi`
-PACKAGE = $(TOOL)
-
-.PHONY: taz
-taz: $(DEVO_SUPPORT) $(SUPPORT_FILES) texinfo/texinfo.tex
- $(MAKE) -f Makefile.in do-proto-toplev \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
- $(MAKE) -f Makefile.in do-md5sum \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
- $(MAKE) -f Makefile.in do-tar \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
- $(MAKE) -f Makefile.in do-bz2 \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
-
-.PHONY: gdb-tar
-gdb-tar: $(DEVO_SUPPORT) $(SUPPORT_FILES) texinfo/texinfo.tex
- $(MAKE) -f Makefile.in do-proto-toplev \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
- $(MAKE) -f Makefile.in do-md5sum \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
- $(MAKE) -f Makefile.in do-djunpack \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
- $(MAKE) -f Makefile.in do-tar \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
-
-.PHONY: gdb-taz
-gdb-taz: gdb-tar $(DEVO_SUPPORT) $(SUPPORT_FILES) texinfo/texinfo.tex
- $(MAKE) -f Makefile.in gdb-tar \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
- $(MAKE) -f Makefile.in do-bz2 \
- TOOL=$(TOOL) PACKAGE="$(PACKAGE)" VER="$(VER)" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(SUPPORT_FILES)"
-
-.PHONY: do-proto-toplev
-do-proto-toplev: $(DEVO_SUPPORT) $(SUPPORT_FILES) texinfo/texinfo.tex
- echo "==> Making $(PACKAGE)-$(VER)/"
- # Take out texinfo from a few places.
- sed -e '/^all\.normal: /s/\all-texinfo //' \
- -e '/^ install-texinfo /d' \
- <Makefile.in >tmp
- mv -f tmp Makefile.in
- #
- ./configure sun4
- [ -z "$(CONFIGURE_TARGET_MODULES)" ] \
- || $(MAKE) $(CONFIGURE_TARGET_MODULES) \
- ALL_GCC="" ALL_GCC_C="" ALL_GCC_CXX="" \
- CC_FOR_TARGET="$(CC)" CXX_FOR_TARGET="$(CXX)"
- # Make links, and run "make diststuff" or "make info" when needed.
- rm -rf proto-toplev ; mkdir proto-toplev
- set -e ; dirs="$(TOOL) $(DEVO_SUPPORT) $(SUPPORT_FILES)" ; \
- for d in $$dirs ; do \
- if [ -d $$d ]; then \
- if [ ! -f $$d/Makefile ] ; then true ; \
- elif grep '^diststuff:' $$d/Makefile >/dev/null ; then \
- (cd $$d ; $(MAKE) diststuff ) || exit 1 ; \
- elif grep '^info:' $$d/Makefile >/dev/null ; then \
- (cd $$d ; $(MAKE) info ) || exit 1 ; \
- fi ; \
- if [ -d $$d/proto-$$d.dir ]; then \
- ln -s ../$$d/proto-$$d.dir proto-toplev/$$d ; \
- else \
- ln -s ../$$d proto-toplev/$$d ; \
- fi ; \
- else ln -s ../$$d proto-toplev/$$d ; fi ; \
- done
- cd etc && $(MAKE) info
- $(MAKE) distclean
- #
- mkdir proto-toplev/etc
- (cd proto-toplev/etc; \
- for i in $(ETC_SUPPORT); do \
- ln -s ../../etc/$$i . ; \
- done)
- #
- # Take out texinfo from configurable dirs
- rm proto-toplev/configure.in
- sed -e '/^host_tools=/s/texinfo //' \
- <configure.in >proto-toplev/configure.in
- #
- mkdir proto-toplev/texinfo
- ln -s ../../texinfo/texinfo.tex proto-toplev/texinfo/
- if test -r texinfo/util/tex3patch ; then \
- mkdir proto-toplev/texinfo/util && \
- ln -s ../../../texinfo/util/tex3patch proto-toplev/texinfo/util ; \
- else true; fi
- chmod -R og=u . || chmod og=u `find . -print`
- #
- # Create .gmo files from .po files.
- for f in `find . -name '*.po' -type f -print`; do \
- msgfmt -o `echo $$f | sed -e 's/\.po$$/.gmo/'` $$f ; \
- done
- #
- -rm -f $(PACKAGE)-$(VER)
- ln -s proto-toplev $(PACKAGE)-$(VER)
-
-.PHONY: do-tar
-do-tar:
- echo "==> Making $(PACKAGE)-$(VER).tar"
- -rm -f $(PACKAGE)-$(VER).tar
- find $(PACKAGE)-$(VER) -follow -name CVS -prune -o -type f -print \
- | tar cTfh - $(PACKAGE)-$(VER).tar
-
-.PHONY: do-bz2
-do-bz2:
- echo "==> Bzipping $(PACKAGE)-$(VER).tar.bz2"
- -rm -f $(PACKAGE)-$(VER).tar.bz2
- $(BZIPPROG) -v -9 $(PACKAGE)-$(VER).tar
-
-.PHONY: do-md5sum
-do-md5sum:
- echo "==> Adding md5 checksum to top-level directory"
- cd proto-toplev && find * -follow -name CVS -prune -o -type f -print \
- | xargs $(MD5PROG) > ../md5.sum
- mv md5.sum proto-toplev
-
-.PHONY: do-djunpack
-do-djunpack:
- echo "==> Adding updated djunpack.bat to top-level directory"
- echo - 's /gdb-[0-9\.]*/gdb-'"$(VER)"'/'
- sed < djunpack.bat > djunpack.new \
- -e 's/gdb-[0-9][0-9\.]*/gdb-'"$(VER)"'/'
- mv djunpack.new djunpack.bat
- -rm -f proto-toplev/djunpack.bat
- ln -s ../djunpack.bat proto-toplev/djunpack.bat
-
-TEXINFO_SUPPORT= texinfo/texinfo.tex
-DIST_SUPPORT= $(DEVO_SUPPORT) $(TEXINFO_SUPPORT)
-
-.PHONY: gas.tar.bz2
-GAS_SUPPORT_DIRS= bfd include libiberty opcodes intl setup.com makefile.vms mkdep
-gas.tar.bz2: $(DIST_SUPPORT) $(GAS_SUPPORT_DIRS) gas
- $(MAKE) -f Makefile.in taz TOOL=gas \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(GAS_SUPPORT_DIRS)"
-
-# The FSF "binutils" release includes gprof and ld.
-.PHONY: binutils.tar.bz2
-BINUTILS_SUPPORT_DIRS= bfd gas include libiberty opcodes ld gprof intl setup.com makefile.vms mkdep
-binutils.tar.bz2: $(DIST_SUPPORT) $(BINUTILS_SUPPORT_DIRS) binutils
- $(MAKE) -f Makefile.in taz TOOL=binutils \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(BINUTILS_SUPPORT_DIRS)"
-
-.PHONY: gas+binutils.tar.bz2
-GASB_SUPPORT_DIRS= $(GAS_SUPPORT_DIRS) binutils ld gprof
-gas+binutils.tar.bz2: $(DIST_SUPPORT) $(GASB_SUPPORT_DIRS) gas
- $(MAKE) -f Makefile.in taz TOOL=gas \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(GASB_SUPPORT_DIRS)"
-
-GNATS_SUPPORT_DIRS=include libiberty send-pr
-gnats.tar.bz2: $(DIST_SUPPORT) $(GNATS_SUPPORT_DIRS) gnats
- $(MAKE) -f Makefile.in taz TOOL=gnats \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(GNATS_SUPPORT_DIRS)"
-
-.PHONY: gdb.tar.bz2
-GDB_SUPPORT_DIRS= bfd include libiberty mmalloc opcodes readline sim utils intl
-gdb.tar.bz2: $(DIST_SUPPORT) $(GDB_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-taz TOOL=gdb \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(GDB_SUPPORT_DIRS)"
-.PHONY: gdb.tar
-gdb.tar: $(DIST_SUPPORT) $(GDB_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-tar TOOL=gdb \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(GDB_SUPPORT_DIRS)"
-
-DEJAGNU_SUPPORT_DIRS= tcl expect libiberty
-.PHONY: dejagnu.tar.bz2
-dejagnu.tar.bz2: $(DIST_SUPPORT) $(DEJAGNU_SUPPORT_DIRS) dejagnu
- $(MAKE) -f Makefile.in taz TOOL=dejagnu \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(DEJAGNU_SUPPORT_DIRS)"
-
-.PHONY: gdb+dejagnu.tar.bz2
-GDBD_SUPPORT_DIRS= $(GDB_SUPPORT_DIRS) tcl expect dejagnu
-gdb+dejagnu.tar.bz2: $(DIST_SUPPORT) $(GDBD_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-taz TOOL=gdb PACKAGE=gdb+dejagnu \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(GDBD_SUPPORT_DIRS)"
-.PHONY: gdb+dejagnu.tar
-gdb+dejagnu.tar: $(DIST_SUPPORT) $(GDBD_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-tar TOOL=gdb PACKAGE=gdb+dejagnu \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(GDBD_SUPPORT_DIRS)"
-
-.PHONY: insight.tar.bz2
-INSIGHT_SUPPORT_DIRS= $(GDB_SUPPORT_DIRS) tcl tk itcl tix libgui
-insight.tar.bz2: $(DIST_SUPPORT) $(GDB_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-taz TOOL=gdb PACKAGE=insight \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(INSIGHT_SUPPORT_DIRS)"
-.PHONY: insight.tar
-insight.tar: $(DIST_SUPPORT) $(GDB_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-tar TOOL=gdb PACKAGE=insight \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(INSIGHT_SUPPORT_DIRS)"
-
-.PHONY: insight+dejagnu.tar.bz2
-INSIGHTD_SUPPORT_DIRS= $(INSIGHT_SUPPORT_DIRS) expect dejagnu
-insight+dejagnu.tar.bz2: $(DIST_SUPPORT) $(INSIGHTD_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-taz TOOL=gdb PACKAGE="insight+dejagnu" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(INSIGHTD_SUPPORT_DIRS)"
-.PHONY: insight+dejagnu.tar
-insight+dejagnu.tar: $(DIST_SUPPORT) $(INSIGHTD_SUPPORT_DIRS) gdb
- $(MAKE) -f Makefile.in gdb-tar TOOL=gdb PACKAGE="insight+dejagnu" \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(INSIGHTD_SUPPORT_DIRS)"
-
-.PHONY: newlib.tar.bz2
-NEWLIB_SUPPORT_DIRS=libgloss
-# taz configures for the sun4 target which won't configure newlib.
-# We need newlib configured so that the .info files are made.
-# Unfortunately, it is not enough to just configure newlib separately:
-# taz will build the .info files but since SUBDIRS won't contain newlib,
-# distclean won't be run (leaving Makefile, config.status, and the tmp files
-# used in building the .info files, eg: *.def, *.ref).
-# The problem isn't solvable however without a lot of extra work because
-# target libraries are built in subdir $(target_alias) which gets nuked during
-# the make distclean. For now punt on the issue of shipping newlib info files
-# with newlib net releases and wait for a day when some native target (sun4?)
-# supports newlib (if only minimally).
-newlib.tar.bz2: $(DIST_SUPPORT) $(NEWLIB_SUPPORT_DIRS) newlib
- $(MAKE) -f Makefile.in taz TOOL=newlib \
- MD5PROG="$(MD5PROG)" \
- SUPPORT_FILES="$(NEWLIB_SUPPORT_DIRS)" \
- DEVO_SUPPORT="$(DEVO_SUPPORT) COPYING.NEWLIB" newlib
.NOEXPORT:
MAKEOVERRIDES=
diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index 2114ef3d98e..a0d5917e56a 100644
--- a/boehm-gc/ChangeLog
+++ b/boehm-gc/ChangeLog
@@ -1,6 +1,10 @@
+2002-10-02 Andreas Jaeger <aj@suse.de>
+
+ * include/private/gcconfig.h (HBLKSIZE): Define for x86-64.
+
2002-09-28 Richard Earnshaw <rearnsha@arm.com>
- * include/private/gcconfig.h: Don't check for __XSCALE__. Instead
+ * include/private/gcconfig.h: Don't check for __XSCALE__. Instead
check for __arm__ or __thumb__.
2002-09-27 Ulrich Weigand <uweigand@de.ibm.com>
@@ -62,7 +66,7 @@ Sun May 19 11:32:03 2002 Mark P Mitchell <mark@codesourcery.com>
* include/private/gc_locks.h (GC_test_and_set): Only take one
one argument.
(LOCK): Adjust appropriately.
- * include/private/gc_priv.h (SIG_SUSPEND): Use SIGRTMIN if
+ * include/private/gc_priv.h (SIG_SUSPEND): Use SIGRTMIN if
_SIGRTMIN is unavailable.
2002-05-16 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
@@ -109,7 +113,7 @@ Sun May 19 11:32:03 2002 Mark P Mitchell <mark@codesourcery.com>
* include/private/gcconfig.h (DATAEND): Clarify comment.
2002-04-08 Hans Boehm <Hans_Boehm@hp.com>
-
+
* include/private/gc_priv.h (WARN macro): Add "GC warning:" prefix.
(GC_large_alloc_warn_interval, GC_large_alloc_warn_suppressed):
declare.
@@ -117,7 +121,7 @@ Sun May 19 11:32:03 2002 Mark P Mitchell <mark@codesourcery.com>
frequency for blacklist warning message.
* misc.c (GC_large_alloc_warn_interval,
GC_large_alloc_warn_suppressed): define.
- (GC_init_inner): Check GC_NO_BLACKLIST_WARNING and
+ (GC_init_inner): Check GC_NO_BLACKLIST_WARNING and
GC_LARGE_ALLOC_WARN_INTERVAL environment variables.
* doc/README.environment (GC_NO_BLACKLIST_WARNING): Deprecate.
(GC_LARGE_ALLOC_WARN_INTERVAL): Add documentation.
@@ -191,10 +195,10 @@ Sun May 19 11:32:03 2002 Mark P Mitchell <mark@codesourcery.com>
compiling with GCC.
* mark.c (GC_mark_some): We no longer use SEH if
compiling with GCC.
-
+
2002-03-09 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
- * include/gc_priv.h: Define ALIGN_DOUBLE on 32 bit targets if GCJ
+ * include/gc_priv.h: Define ALIGN_DOUBLE on 32 bit targets if GCJ
support is enabled, for hash synchronization.
2002-02-24 Adam Megacz <adam@xwt.org>
@@ -210,8 +214,8 @@ Sun May 19 11:32:03 2002 Mark P Mitchell <mark@codesourcery.com>
2002-02-13 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
* dbg_mlc.c (GC_debug_generic_malloc): Removed.
-
- * sparc_mach_dep.S: Rename from sparc_mach_dep.s as it is a
+
+ * sparc_mach_dep.S: Rename from sparc_mach_dep.s as it is a
preprocessor file.
* mips_sgi_mach_dep.S: Likewise.
* Makefile.am: Update for above changes.
@@ -258,7 +262,7 @@ Sun May 19 11:32:03 2002 Mark P Mitchell <mark@codesourcery.com>
* boehm-gc on win32 now automatically detects if it is being built
as a DLL; see http://gcc.gnu.org/ml/java/2001-12/msg00240.html
-
+
2002-01-25 David Edelsohn <edelsohn@gnu.org>
* include/gc.h (GC_INIT): Add DATASTART and DATAEND roots on AIX.
@@ -279,7 +283,7 @@ Sun May 19 11:32:03 2002 Mark P Mitchell <mark@codesourcery.com>
2001-12-16 Craig Rodrigues <rodrigc@gcc.gnu.org>
PR other/3725
- * configure.in: Add AC_SUBST(target_alias).
+ * configure.in: Add AC_SUBST(target_alias).
* configure: Regenerated.
2001-11-26 Loren J. Rittle <ljrittle@acm.org>
@@ -327,7 +331,7 @@ Sun May 19 11:32:03 2002 Mark P Mitchell <mark@codesourcery.com>
* solaris_threads.c (MAX_ORIG_STACK_SIZE) [I386]: Provide special
Solaris 2/Intel definition.
-
+
* configure.in (i?86-*-solaris2.[89]*): Define
SOLARIS25_PROC_VDB_BUG_FIXED.
* include/private/gcconfig.h [I386 && SUNOS5]: Use it.
@@ -512,8 +516,8 @@ Sun May 19 11:32:03 2002 Mark P Mitchell <mark@codesourcery.com>
functions.
* Makefile.in: Rebuilt.
* configure: Rebuilt.
-
- * linux_thread.c (GC_thr_init, GC_suspend_handler): Add SIGABRT to the
+
+ * linux_thread.c (GC_thr_init, GC_suspend_handler): Add SIGABRT to the
list of signals which are not blocked during suspend in the NO_SIGNALS
case.
@@ -540,7 +544,7 @@ Sun May 19 11:32:03 2002 Mark P Mitchell <mark@codesourcery.com>
2000-09-30 Bryce McKinlay <bryce@albatross.co.nz>
- * configure.in: Define GC_GCJ_SUPPORT. Define NO_DEBUGGING in
+ * configure.in: Define GC_GCJ_SUPPORT. Define NO_DEBUGGING in
cross-compile configuration only.
* Makefile.am: Build gcj_mlc.c.
* configure, Makefile.in: Rebuilt.
@@ -623,7 +627,7 @@ Sun May 19 11:32:03 2002 Mark P Mitchell <mark@codesourcery.com>
Imported version version 5.0alpha6.
* acinclude.m4: Bump version to 5.0a6.
* configure.in: Don't use alpha_mach_dep.s.
- * include/private/config.h, irix_threads.c gc_watcom.asm: Delete
+ * include/private/config.h, irix_threads.c gc_watcom.asm: Delete
obsolete files.
* Makefile.am, Makefile.in: irix_threads.c is now
hpux_irix_threads.c.
@@ -655,7 +659,7 @@ Fri Jan 28 17:13:20 2000 Anthony Green <green@cygnus.com>
1999-12-19 Anthony Green <green@cygnus.com>
- * gcconfig.h: Use libgcj hack for Alpha Linux.
+ * gcconfig.h: Use libgcj hack for Alpha Linux.
Undefine MPROTEXT_VDB (from Jeff Sturm).
* os_dep.c: Remove Alpha Linux hacks.
* misc.c: Ditto.
@@ -852,7 +856,7 @@ Mon Aug 2 23:09:41 1999 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
(LTCOMPILE): Renamed; added libtool invocation.
(LINK): Added libtool invocation.
(.s.o): use LTCOMPILE.
- * configure.in: Call AM_PROG_LIBTOOL.
+ * configure.in: Call AM_PROG_LIBTOOL.
(target_all): Set to libgcjgc.la.
Mention `.lo' forms of object files.
@@ -936,7 +940,7 @@ Mon Aug 2 23:09:41 1999 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* configure.in: likewise
* misc.c (GC_write): add eCos support.
* os_dep.c (tiny_sbrk): add eCos support.
-
+
Thu Dec 10 18:24:34 1998 Warren Levy <warrenl@cygnus.com>
* misc.c (GC_init_inner): Moved STACKBASE code to os_dep.c.
@@ -948,9 +952,9 @@ Thu Dec 10 18:24:34 1998 Warren Levy <warrenl@cygnus.com>
1998-11-20 Andrew Haley <aph@viagra.cygnus.co.uk>
- * Makefile.am, Makefile.in, configure.host: tx39 build option
+ * Makefile.am, Makefile.in, configure.host: tx39 build option
"-G 0" added.
-
+
1998-11-17 Tom Tromey <tromey@cygnus.com>
* configure: Rebuilt.
@@ -1137,4 +1141,3 @@ Wed Apr 15 11:40:56 1998 Tom Tromey <tromey@sanguine.cygnus.com>
* Makefile.am, Makefile.in, configure.in, configure, aclocal.m4:
New files.
* Makefile.orig: Renamed from Makefile.
-
diff --git a/boehm-gc/include/private/gcconfig.h b/boehm-gc/include/private/gcconfig.h
index 00ff9ef6a87..33d80d2c8ba 100644
--- a/boehm-gc/include/private/gcconfig.h
+++ b/boehm-gc/include/private/gcconfig.h
@@ -1642,6 +1642,7 @@
# define MACH_TYPE "X86_64"
# define ALIGNMENT 8
# define CPP_WORDSZ 64
+# define HBLKSIZE 4096
# define CACHE_LINE_SIZE 64
# define USE_GENERIC_PUSH_REGS
# ifdef LINUX
diff --git a/configure.in b/configure.in
index bee4c2998a6..87dd2c6dc41 100644
--- a/configure.in
+++ b/configure.in
@@ -361,7 +361,7 @@ case "${target}" in
avr-*-*)
noconfigdirs="$noconfigdirs target-libiberty ${libstdcxx_version} ${libgcj}"
;;
- c4x-*-*)
+ c4x-*-* | tic4x-*-*)
noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss ${libgcj}"
;;
c54x*-*-* | tic54x-*-*)
@@ -1321,20 +1321,23 @@ esac
# If --enable-shared was set, we must set LD_LIBRARY_PATH so that the
# binutils tools will find libbfd.so.
if test "${shared}" = "yes" ; then
- sed -e 's/^SET_LIB_PATH[ ]*=.*$/SET_LIB_PATH = $(REALLY_SET_LIB_PATH)/' \
- Makefile > Makefile.tem
- rm -f Makefile
- mv -f Makefile.tem Makefile
-
- case "${host}" in
- *-*-hpux*)
- sed -e 's/^RPATH_ENVVAR[ ]*=.*$/RPATH_ENVVAR = SHLIB_PATH/' \
- Makefile > Makefile.tem
- rm -f Makefile
- mv -f Makefile.tem Makefile
- ;;
- esac
+ SET_LIB_PATH="\$(REALLY_SET_LIB_PATH)"
+else
+ SET_LIB_PATH=
fi
+sed -e "s/@SET_LIB_PATH@/${SET_LIB_PATH}/" Makefile > Makefile.tem
+rm -f Makefile
+mv -f Makefile.tem Makefile
+
+
+case "${host}" in
+ *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;;
+ *) RPATH_ENVVAR=LD_LIBRARY_PATH ;;
+esac
+sed -e "s/@RPATH_ENVVAR@/${RPATH_ENVVAR}/" Makefile > Makefile.tem
+rm -f Makefile
+mv -f Makefile.tem Makefile
+
# Base args. Strip norecursion, cache-file, srcdir, host, build, target.
# These are the ones we might not want to pass down to subconfigures.
diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index 27ad70c2e09..c28fd46ad55 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,13 @@
+2002-10-16 Richard Henderson <rth@redhat.com>
+
+ * paranoia.cc (ENUM_BITFIELD): New.
+ (class): Define as klass around real.h.
+ (real_c_float): Not a template any longer; define MODE as a
+ class static constant; use real_format elements for SIZE.
+ Update uses of real_to_decimal and real_to_hexadecimal.
+ (main): Change -g argument to use a format name.
+ (mode_for_size): Remove.
+
2002-09-16 Richard Henderson <rth@redhat.com>
* paranoia.cc: New file.
diff --git a/contrib/paranoia.cc b/contrib/paranoia.cc
index 0b87da9d690..fafb92b708f 100644
--- a/contrib/paranoia.cc
+++ b/contrib/paranoia.cc
@@ -169,7 +169,12 @@ lines
};
#undef DEFTREECODE
+#define ENUM_BITFIELD(X) enum X
+#define class klass
+
#include "real.h"
+
+#undef class
}
/* We never produce signals from the library. Thus setjmp need do nothing. */
@@ -184,11 +189,13 @@ static int verbose_index = 0;
real.c. I.e. the object of this excersize. Templated so that we can
all fp sizes. */
-template<int SIZE, enum machine_mode MODE>
class real_c_float
{
+ public:
+ static const enum machine_mode MODE = SFmode;
+
private:
- long image[SIZE / 32];
+ long image[128 / 32];
void from_long(long);
void from_str(const char *);
@@ -241,9 +248,8 @@ class real_c_float
void ldexp (int);
};
-template<int SIZE, enum machine_mode MODE>
void
-real_c_float<SIZE, MODE>::from_long (long l)
+real_c_float::from_long (long l)
{
REAL_VALUE_TYPE f;
@@ -251,12 +257,11 @@ real_c_float<SIZE, MODE>::from_long (long l)
real_to_target (image, &f, MODE);
}
-template<int SIZE, enum machine_mode MODE>
void
-real_c_float<SIZE, MODE>::from_str (const char *s)
+real_c_float::from_str (const char *s)
{
REAL_VALUE_TYPE f;
- char *p = s;
+ const char *p = s;
if (*p == '-' || *p == '+')
p++;
@@ -274,9 +279,8 @@ real_c_float<SIZE, MODE>::from_str (const char *s)
real_to_target (image, &f, MODE);
}
-template<int SIZE, enum machine_mode MODE>
void
-real_c_float<SIZE, MODE>::binop (int code, const real_c_float &b)
+real_c_float::binop (int code, const real_c_float &b)
{
REAL_VALUE_TYPE ai, bi, ri;
@@ -288,13 +292,14 @@ real_c_float<SIZE, MODE>::binop (int code, const real_c_float &b)
if (verbose)
{
char ab[64], bb[64], rb[64];
- const int digits = int(SIZE / 4);
+ const real_format *fmt = real_format_for_mode[MODE - QFmode];
+ const int digits = (fmt->p * fmt->log2_b + 3) / 4;
char symbol_for_code;
real_from_target (&ri, image, MODE);
- real_to_hexadecimal (ab, &ai, digits);
- real_to_hexadecimal (bb, &bi, digits);
- real_to_hexadecimal (rb, &ri, digits);
+ real_to_hexadecimal (ab, &ai, sizeof(ab), digits, 0);
+ real_to_hexadecimal (bb, &bi, sizeof(bb), digits, 0);
+ real_to_hexadecimal (rb, &ri, sizeof(rb), digits, 0);
switch (code)
{
@@ -319,9 +324,8 @@ real_c_float<SIZE, MODE>::binop (int code, const real_c_float &b)
}
}
-template<int SIZE, enum machine_mode MODE>
void
-real_c_float<SIZE, MODE>::unop (int code)
+real_c_float::unop (int code)
{
REAL_VALUE_TYPE ai, ri;
@@ -332,12 +336,13 @@ real_c_float<SIZE, MODE>::unop (int code)
if (verbose)
{
char ab[64], rb[64];
- const int digits = int(SIZE / 4);
+ const real_format *fmt = real_format_for_mode[MODE - QFmode];
+ const int digits = (fmt->p * fmt->log2_b + 3) / 4;
const char *symbol_for_code;
real_from_target (&ri, image, MODE);
- real_to_hexadecimal (ab, &ai, digits);
- real_to_hexadecimal (rb, &ri, digits);
+ real_to_hexadecimal (ab, &ai, sizeof(ab), digits, 0);
+ real_to_hexadecimal (rb, &ri, sizeof(rb), digits, 0);
switch (code)
{
@@ -356,9 +361,8 @@ real_c_float<SIZE, MODE>::unop (int code)
}
}
-template<int SIZE, enum machine_mode MODE>
bool
-real_c_float<SIZE, MODE>::cmp (int code, const real_c_float &b) const
+real_c_float::cmp (int code, const real_c_float &b) const
{
REAL_VALUE_TYPE ai, bi;
bool ret;
@@ -370,11 +374,12 @@ real_c_float<SIZE, MODE>::cmp (int code, const real_c_float &b) const
if (verbose)
{
char ab[64], bb[64];
- const int digits = int(SIZE / 4);
+ const real_format *fmt = real_format_for_mode[MODE - QFmode];
+ const int digits = (fmt->p * fmt->log2_b + 3) / 4;
const char *symbol_for_code;
- real_to_hexadecimal (ab, &ai, digits);
- real_to_hexadecimal (bb, &bi, digits);
+ real_to_hexadecimal (ab, &ai, sizeof(ab), digits, 0);
+ real_to_hexadecimal (bb, &bi, sizeof(bb), digits, 0);
switch (code)
{
@@ -407,55 +412,52 @@ real_c_float<SIZE, MODE>::cmp (int code, const real_c_float &b) const
return ret;
}
-template<int SIZE, enum machine_mode MODE>
const char *
-real_c_float<SIZE, MODE>::str() const
+real_c_float::str() const
{
REAL_VALUE_TYPE f;
- const int digits = int(SIZE * .30102999566398119521 + 1);
+ const real_format *fmt = real_format_for_mode[MODE - QFmode];
+ const int digits = int(fmt->p * fmt->log2_b * .30102999566398119521 + 1);
real_from_target (&f, image, MODE);
char *buf = new char[digits + 10];
- real_to_decimal (buf, &f, digits);
+ real_to_decimal (buf, &f, digits+10, digits, 0);
return buf;
}
-template<int SIZE, enum machine_mode MODE>
const char *
-real_c_float<SIZE, MODE>::hex() const
+real_c_float::hex() const
{
REAL_VALUE_TYPE f;
- const int digits = int(SIZE / 4);
+ const real_format *fmt = real_format_for_mode[MODE - QFmode];
+ const int digits = (fmt->p * fmt->log2_b + 3) / 4;
real_from_target (&f, image, MODE);
char *buf = new char[digits + 10];
- real_to_hexadecimal (buf, &f, digits);
+ real_to_hexadecimal (buf, &f, digits+10, digits, 0);
return buf;
}
-template<int SIZE, enum machine_mode MODE>
long
-real_c_float<SIZE, MODE>::integer() const
+real_c_float::integer() const
{
REAL_VALUE_TYPE f;
real_from_target (&f, image, MODE);
return real_to_integer (&f);
}
-template<int SIZE, enum machine_mode MODE>
int
-real_c_float<SIZE, MODE>::exp() const
+real_c_float::exp() const
{
REAL_VALUE_TYPE f;
real_from_target (&f, image, MODE);
return real_exponent (&f);
}
-template<int SIZE, enum machine_mode MODE>
void
-real_c_float<SIZE, MODE>::ldexp (int exp)
+real_c_float::ldexp (int exp)
{
REAL_VALUE_TYPE ai;
@@ -2605,8 +2607,6 @@ Paranoia<FLOAT>::notify (const char *s)
int main(int ac, char **av)
{
- init_real_once ();
-
while (1)
switch (getopt (ac, av, "pvg:fdl"))
{
@@ -2620,30 +2620,49 @@ int main(int ac, char **av)
break;
case 'g':
{
- int size = strtol (optarg, 0, 0);
-
- switch (size)
- {
- case 32:
- Paranoia< real_c_float<32, SFmode> >().main();
- break;
-
- case 64:
- Paranoia< real_c_float<64, DFmode> >().main();
- break;
-
- case 96:
- Paranoia< real_c_float<96, XFmode> >().main();
+ static const struct {
+ const char *name;
+ const struct real_format *fmt;
+ } fmts[] = {
+#define F(x) { #x, &x##_format }
+ F(ieee_single),
+ F(ieee_double),
+ F(ieee_extended_motorola),
+ F(ieee_extended_intel_96),
+ F(ieee_extended_intel_128),
+ F(ibm_extended),
+ F(ieee_quad),
+ F(vax_f),
+ F(vax_d),
+ F(vax_g),
+ F(i370_single),
+ F(i370_double),
+ F(c4x_single),
+ F(c4x_extended),
+#undef F
+ };
+
+ int i, n = sizeof (fmts)/sizeof(*fmts);
+
+ for (i = 0; i < n; ++i)
+ if (strcmp (fmts[i].name, optarg) == 0)
break;
- case 128:
- Paranoia< real_c_float<128, TFmode> >().main();
- break;
-
- default:
- puts ("Invalid gcc implementation size.");
+ if (i == n)
+ {
+ printf ("Unknown implementation \"%s\"; "
+ "available implementations:\n", optarg);
+ for (i = 0; i < n; ++i)
+ printf ("\t%s\n", fmts[i].name);
return 1;
}
+
+ // We cheat and use the same mode all the time, but vary
+ // the format used for that mode.
+ real_format_for_mode[int(real_c_float::MODE) - int(QFmode)]
+ = fmts[i].fmt;
+
+ Paranoia<real_c_float>().main();
break;
}
@@ -2661,7 +2680,7 @@ int main(int ac, char **av)
case '?':
puts ("-p\tpause between pages");
- puts ("-g<N>\treal.c implementation size N");
+ puts ("-g<FMT>\treal.c implementation FMT");
puts ("-f\tnative float");
puts ("-d\tnative double");
puts ("-l\tnative long double");
@@ -2678,21 +2697,3 @@ fancy_abort ()
}
int target_flags = 0;
-
-extern "C"
-enum machine_mode
-mode_for_size (unsigned int size, enum mode_class, int)
-{
- switch (size)
- {
- case 32:
- return SFmode;
- case 64:
- return DFmode;
- case 96:
- return XFmode;
- case 128:
- return TFmode;
- }
- abort ();
-}
diff --git a/contrib/regression/ChangeLog b/contrib/regression/ChangeLog
index e5239c5a8f9..9b3406a71c2 100644
--- a/contrib/regression/ChangeLog
+++ b/contrib/regression/ChangeLog
@@ -1,3 +1,16 @@
+2002-10-11 Geoffrey Keating <geoffk@apple.com>
+
+ * objs-gcc.sh: Don't install GDB testsuite if GDB was not built.
+ * btest-gcc.sh: Don't run GDB testsuite if it doesn't exist.
+
+2002-10-09 Phil Edwards <pme@gcc.gnu.org>
+
+ * btest-gcc.sh, objs-gcc.sh: Update TARGET comments.
+
+2002-10-09 Geoffrey Keating <geoffk@apple.com>
+
+ * objs-gcc.sh: On (non-linux) native hosts, use 'make bootstrap'.
+
2002-03-09 Geoffrey Keating <geoffk@redhat.com>
* btest-gcc.sh: For crosses, assume newlib and GNU binutils.
diff --git a/contrib/regression/btest-gcc.sh b/contrib/regression/btest-gcc.sh
index dbdd6697c21..7dfddb86ed6 100755
--- a/contrib/regression/btest-gcc.sh
+++ b/contrib/regression/btest-gcc.sh
@@ -19,8 +19,9 @@
# INPUT:
# btest <target> <source> <prefix> <state> <build>
-# TARGET is the target triplet. It should be the same one
-# as used in constructing PREFIX.
+# TARGET is the target triplet. It should be the same one as used in
+# constructing PREFIX. Or it can be the keyword 'native', indicating
+# a target of whatever platform the script is running on.
TARGET=$1
# SOURCE is the directory containing the toplevel configure.
SOURCE=$2
@@ -126,6 +127,7 @@ make check-target-libstdc++-v3
# Test the just-built GCC with the GDB testsuite.
mkdir test-gdb || exit 1
+if [ -d $GDB_TESTSUITE ] ; then
cd $GDB_TESTSUITE || exit 1
for i in gdb.* ; do
if [ -d $i ] ; then
@@ -141,6 +143,9 @@ echo "set build_alias $H_BUILD" >> site.exp
echo "set build_triplet $H_BUILD" >> site.exp
echo "set srcdir $GDB_TESTSUITE" >> site.exp
runtest --tool gdb
+else
+ echo 'gdb tests not run' > $BUILD/test-gdb/gdb.sum
+fi
# Sanity-check the testlogs. They should contain at least one PASS.
cd $BUILD || exit 1
diff --git a/contrib/regression/objs-gcc.sh b/contrib/regression/objs-gcc.sh
index 839fcffb612..cc152d1f80c 100755
--- a/contrib/regression/objs-gcc.sh
+++ b/contrib/regression/objs-gcc.sh
@@ -19,8 +19,9 @@
# INPUT:
# btest <target> <source> <prefix> <state> <build>
-# TARGET is the target triplet. It should be the same one
-# as used in constructing PREFIX.
+# TARGET is the target triplet. It should be the same one as used in
+# constructing PREFIX. Or it can be the keyword 'native', indicating
+# a target of whatever platform the script is running on.
TARGET=$1
# SOURCE is the directory containing the toplevel configure.
SOURCE=$2
@@ -104,18 +105,23 @@ if [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-gnu ]
then
make all-gdb all-dejagnu all-ld || exit 1
make install-gdb install-dejagnu install-ld || exit 1
+elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then
+ make bootstrap || exit 1
+ make install || exit 1
else
make || exit 1
make install || exit 1
fi
-mkdir -p $PREFIX/share/gdb-testsuite || exit 1
-cd $SOURCE/gdb/testsuite || exit 1
-find . -print | cpio -pdmu $PREFIX/share/gdb-testsuite || exit 1
-# selftest.exp requires keeping old sources around, which is impractical
-rm $PREFIX/share/gdb-testsuite/gdb.base/selftest.exp
-# these tests seem to be broken and randomly failing
-rm -r $PREFIX/share/gdb-testsuite/gdb.mi
+if [ -x $PREFIX/bin/$TARGET-gdb ] ; then
+ mkdir -p $PREFIX/share/gdb-testsuite || exit 1
+ cd $SOURCE/gdb/testsuite || exit 1
+ find . -print | cpio -pdmu $PREFIX/share/gdb-testsuite || exit 1
+ # selftest.exp requires keeping old sources around, which is impractical
+ rm $PREFIX/share/gdb-testsuite/gdb.base/selftest.exp
+ # these tests seem to be broken and randomly failing
+ rm -r $PREFIX/share/gdb-testsuite/gdb.mi
+fi
echo pass > $RESULT
exit 0
diff --git a/fastjar/ChangeLog b/fastjar/ChangeLog
index c23427b90c9..c85058ed47c 100644
--- a/fastjar/ChangeLog
+++ b/fastjar/ChangeLog
@@ -1,8 +1,17 @@
+2002-10-20 Tom Tromey <tromey@redhat.com>
+
+ * jartool.c: Use mode 0666 when opening new file.
+
2002-09-16 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
* jargrep.c (chk_wrd): Remove unused variable(s).
* jartool.c (main, create_central_header, list_jar): Likewise.
+2002-10-15 Ranjit Mathew <rmathew@hotmail.com>
+
+ * configure, config.h.in: Rebuilt.
+ * configure.in: Call gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG.
+
2002-09-11 Tom Tromey <tromey@redhat.com>
* Makefile.in: Rebuilt.
@@ -120,7 +129,7 @@
* aclocal.m4: Regenerated.
* stamp-h.in: Regenerated.
* jargrep.c: Eliminate some signed/unsigned and default
- uninitialized warnings. Use HAVE_STDLIB_H instead of
+ uninitialized warnings. Use HAVE_STDLIB_H instead of
STDC_HEADERS macro.
* jartool.c: Likewise.
* compress.c: Likewise.
diff --git a/fastjar/config.h.in b/fastjar/config.h.in
index 5d8f6d65eb5..ae4fb96c5cb 100644
--- a/fastjar/config.h.in
+++ b/fastjar/config.h.in
@@ -39,6 +39,10 @@
/* Version number of package */
#undef VERSION
+/* Define if host mkdir takes a
+single argument. */
+#undef MKDIR_TAKES_ONE_ARG
+
/* The number of bytes in type char */
#undef SIZEOF_CHAR
diff --git a/fastjar/configure b/fastjar/configure
index 8111cf235e1..719d3e32b05 100755
--- a/fastjar/configure
+++ b/fastjar/configure
@@ -33,6 +33,7 @@ program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
+sitefile=
srcdir=
target=NONE
verbose=
@@ -147,6 +148,7 @@ Configuration:
--help print this message
--no-create do not create output files
--quiet, --silent do not print \`checking...' messages
+ --site-file=FILE use FILE as the site file
--version print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
@@ -317,6 +319,11 @@ EOF
-site=* | --site=* | --sit=*)
site="$ac_optarg" ;;
+ -site-file | --site-file | --site-fil | --site-fi | --site-f)
+ ac_prev=sitefile ;;
+ -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
+ sitefile="$ac_optarg" ;;
+
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
@@ -482,12 +489,16 @@ fi
srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
+if test -z "$sitefile"; then
+ if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
else
CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
+ fi
+else
+ CONFIG_SITE="$sitefile"
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
@@ -557,7 +568,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:561: checking for a BSD compatible install" >&5
+echo "configure:572: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -610,7 +621,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:614: checking whether build environment is sane" >&5
+echo "configure:625: checking whether build environment is sane" >&5
# Just in case
sleep 1
echo timestamp > conftestfile
@@ -667,7 +678,7 @@ test "$program_suffix" != NONE &&
test "$program_transform_name" = "" && program_transform_name="s,x,x,"
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:671: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:682: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -713,7 +724,7 @@ EOF
missing_dir=`cd $ac_aux_dir && pwd`
echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:717: checking for working aclocal" >&5
+echo "configure:728: checking for working aclocal" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -726,7 +737,7 @@ else
fi
echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:730: checking for working autoconf" >&5
+echo "configure:741: checking for working autoconf" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -739,7 +750,7 @@ else
fi
echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:743: checking for working automake" >&5
+echo "configure:754: checking for working automake" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -752,7 +763,7 @@ else
fi
echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:756: checking for working autoheader" >&5
+echo "configure:767: checking for working autoheader" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -765,7 +776,7 @@ else
fi
echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:769: checking for working makeinfo" >&5
+echo "configure:780: checking for working makeinfo" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -785,7 +796,7 @@ fi
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:789: checking for $ac_word" >&5
+echo "configure:800: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -815,7 +826,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:819: checking for $ac_word" >&5
+echo "configure:830: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -866,7 +877,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:870: checking for $ac_word" >&5
+echo "configure:881: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -898,7 +909,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:902: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:913: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -909,12 +920,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 913 "configure"
+#line 924 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -940,12 +951,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:944: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:955: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:949: checking whether we are using GNU C" >&5
+echo "configure:960: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -954,7 +965,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:958: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:969: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@@ -973,7 +984,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:977: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:988: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1016,7 +1027,7 @@ fi
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1020: checking for a BSD compatible install" >&5
+echo "configure:1031: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1071,7 +1082,7 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
# Extract the first word of "rm", so it can be a program name with args.
set dummy rm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1075: checking for $ac_word" >&5
+echo "configure:1086: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_RM'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1107,7 +1118,7 @@ fi
# Extract the first word of "cp", so it can be a program name with args.
set dummy cp; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1111: checking for $ac_word" >&5
+echo "configure:1122: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_CP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1143,7 +1154,7 @@ fi
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1147: checking for $ac_word" >&5
+echo "configure:1158: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_STRIP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1179,7 +1190,7 @@ fi
# Extract the first word of "chmod", so it can be a program name with args.
set dummy chmod; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1183: checking for $ac_word" >&5
+echo "configure:1194: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_CHMOD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1213,12 +1224,12 @@ else
fi
echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-echo "configure:1217: checking for Cygwin environment" >&5
+echo "configure:1228: checking for Cygwin environment" >&5
if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1222 "configure"
+#line 1233 "configure"
#include "confdefs.h"
int main() {
@@ -1229,7 +1240,7 @@ int main() {
return __CYGWIN__;
; return 0; }
EOF
-if { (eval echo configure:1233: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1244: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_cygwin=yes
else
@@ -1246,19 +1257,19 @@ echo "$ac_t""$ac_cv_cygwin" 1>&6
CYGWIN=
test "$ac_cv_cygwin" = yes && CYGWIN=yes
echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-echo "configure:1250: checking for mingw32 environment" >&5
+echo "configure:1261: checking for mingw32 environment" >&5
if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1255 "configure"
+#line 1266 "configure"
#include "confdefs.h"
int main() {
return __MINGW32__;
; return 0; }
EOF
-if { (eval echo configure:1262: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_mingw32=yes
else
@@ -1277,7 +1288,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=yes
echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1281: checking for executable suffix" >&5
+echo "configure:1292: checking for executable suffix" >&5
if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1287,10 +1298,10 @@ else
rm -f conftest*
echo 'int main () { return 0; }' > conftest.$ac_ext
ac_cv_exeext=
- if { (eval echo configure:1291: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+ if { (eval echo configure:1302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
for file in conftest.*; do
case $file in
- *.$ac_ext | *.c | *.o | *.obj) ;;
+ *.c | *.o | *.obj | *.ilk | *.pdb) ;;
*) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
esac
done
@@ -1309,7 +1320,7 @@ ac_exeext=$EXEEXT
echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:1313: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:1324: checking whether to enable maintainer-specific portions of Makefiles" >&5
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then
enableval="$enable_maintainer_mode"
@@ -1342,12 +1353,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:1346: checking for $ac_hdr that defines DIR" >&5
+echo "configure:1357: checking for $ac_hdr that defines DIR" >&5
if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1351 "configure"
+#line 1362 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <$ac_hdr>
@@ -1355,7 +1366,7 @@ int main() {
DIR *dirp = 0;
; return 0; }
EOF
-if { (eval echo configure:1359: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1370: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval "ac_cv_header_dirent_$ac_safe=yes"
else
@@ -1380,7 +1391,7 @@ done
# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
if test $ac_header_dirent = dirent.h; then
echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:1384: checking for opendir in -ldir" >&5
+echo "configure:1395: checking for opendir in -ldir" >&5
ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1388,7 +1399,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldir $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 1392 "configure"
+#line 1403 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -1399,7 +1410,7 @@ int main() {
opendir()
; return 0; }
EOF
-if { (eval echo configure:1403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1414: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -1421,7 +1432,7 @@ fi
else
echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:1425: checking for opendir in -lx" >&5
+echo "configure:1436: checking for opendir in -lx" >&5
ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1429,7 +1440,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lx $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 1433 "configure"
+#line 1444 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -1440,7 +1451,7 @@ int main() {
opendir()
; return 0; }
EOF
-if { (eval echo configure:1444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -1463,7 +1474,7 @@ fi
fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1467: checking how to run the C preprocessor" >&5
+echo "configure:1478: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -1478,13 +1489,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 1482 "configure"
+#line 1493 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1488: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1499: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1495,13 +1506,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 1499 "configure"
+#line 1510 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1505: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1516: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1512,13 +1523,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 1516 "configure"
+#line 1527 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1522: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1533: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1543,12 +1554,12 @@ fi
echo "$ac_t""$CPP" 1>&6
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1547: checking for ANSI C header files" >&5
+echo "configure:1558: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1552 "configure"
+#line 1563 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -1556,7 +1567,7 @@ else
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1560: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1571: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -1573,7 +1584,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 1577 "configure"
+#line 1588 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@@ -1591,7 +1602,7 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 1595 "configure"
+#line 1606 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@@ -1612,7 +1623,7 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
-#line 1616 "configure"
+#line 1627 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -1623,7 +1634,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
-if { (eval echo configure:1627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1638: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -1647,12 +1658,12 @@ EOF
fi
echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
-echo "configure:1651: checking whether struct tm is in sys/time.h or time.h" >&5
+echo "configure:1662: checking whether struct tm is in sys/time.h or time.h" >&5
if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1656 "configure"
+#line 1667 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <time.h>
@@ -1660,7 +1671,7 @@ int main() {
struct tm *tp; tp->tm_sec;
; return 0; }
EOF
-if { (eval echo configure:1664: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1675: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_struct_tm=time.h
else
@@ -1684,17 +1695,17 @@ for ac_hdr in fcntl.h unistd.h sys/param.h stdlib.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1688: checking for $ac_hdr" >&5
+echo "configure:1699: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1693 "configure"
+#line 1704 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1698: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1709: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -1722,12 +1733,12 @@ done
echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:1726: checking for off_t" >&5
+echo "configure:1737: checking for off_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1731 "configure"
+#line 1742 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -1755,12 +1766,12 @@ EOF
fi
echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
-echo "configure:1759: checking whether struct tm is in sys/time.h or time.h" >&5
+echo "configure:1770: checking whether struct tm is in sys/time.h or time.h" >&5
if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1764 "configure"
+#line 1775 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <time.h>
@@ -1768,7 +1779,7 @@ int main() {
struct tm *tp; tp->tm_sec;
; return 0; }
EOF
-if { (eval echo configure:1772: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1783: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_struct_tm=time.h
else
@@ -1789,14 +1800,59 @@ EOF
fi
+# mkdir takes a single argument on some systems.
+echo $ac_n "checking if mkdir takes one argument""... $ac_c" 1>&6
+echo "configure:1806: checking if mkdir takes one argument" >&5
+if eval "test \"`echo '$''{'gcc_cv_mkdir_takes_one_arg'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1811 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#ifdef HAVE_DIRECT_H
+# include <direct.h>
+#endif
+int main() {
+mkdir ("foo", 0);
+; return 0; }
+EOF
+if { (eval echo configure:1828: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ gcc_cv_mkdir_takes_one_arg=no
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ gcc_cv_mkdir_takes_one_arg=yes
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$gcc_cv_mkdir_takes_one_arg" 1>&6
+if test $gcc_cv_mkdir_takes_one_arg = yes ; then
+ cat >> confdefs.h <<\EOF
+#define MKDIR_TAKES_ONE_ARG 1
+EOF
+
+fi
+
+
echo $ac_n "checking size of char""... $ac_c" 1>&6
-echo "configure:1794: checking size of char" >&5
+echo "configure:1850: checking size of char" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_char'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 1800 "configure"
+#line 1856 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -1806,7 +1862,7 @@ int main() {
switch (0) case 0: case (sizeof (char) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:1810: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1866: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_char=$ac_size
else
@@ -1829,13 +1885,13 @@ EOF
echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:1833: checking size of short" >&5
+echo "configure:1889: checking size of short" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 1839 "configure"
+#line 1895 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -1845,7 +1901,7 @@ int main() {
switch (0) case 0: case (sizeof (short) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:1849: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1905: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_short=$ac_size
else
@@ -1868,13 +1924,13 @@ EOF
echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:1872: checking size of int" >&5
+echo "configure:1928: checking size of int" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 1878 "configure"
+#line 1934 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -1884,7 +1940,7 @@ int main() {
switch (0) case 0: case (sizeof (int) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:1888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1944: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_int=$ac_size
else
@@ -1907,13 +1963,13 @@ EOF
echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:1911: checking size of long" >&5
+echo "configure:1967: checking size of long" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 1917 "configure"
+#line 1973 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -1923,7 +1979,7 @@ int main() {
switch (0) case 0: case (sizeof (long) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:1927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1983: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_long=$ac_size
else
@@ -1946,13 +2002,13 @@ EOF
echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:1950: checking size of long long" >&5
+echo "configure:2006: checking size of long long" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 1956 "configure"
+#line 2012 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -1962,7 +2018,7 @@ int main() {
switch (0) case 0: case (sizeof (long long) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:1966: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2022: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_long_long=$ac_size
else
@@ -1986,7 +2042,7 @@ EOF
echo $ac_n "checking byte ordering""... $ac_c" 1>&6
-echo "configure:1990: checking byte ordering" >&5
+echo "configure:2046: checking byte ordering" >&5
if eval "test \"`echo '$''{'ac_cv_c_compile_endian'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2000,7 +2056,7 @@ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$a
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext <<EOF
-#line 2004 "configure"
+#line 2060 "configure"
#include "confdefs.h"
#ifdef HAVE_LIMITS_H
@@ -2020,7 +2076,7 @@ cat > conftest.$ac_ext <<EOF
'X', '\n'
};
EOF
-if { (eval echo configure:2024: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2080: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
od -c conftest.o |
sed 's/^[0-7]*[ ]*/ /
s/\*/./g
@@ -2072,7 +2128,7 @@ ZINCS=
use_zlib=maybe
if test "$with_system_zlib" = yes; then
echo $ac_n "checking for deflate in -lz""... $ac_c" 1>&6
-echo "configure:2076: checking for deflate in -lz" >&5
+echo "configure:2132: checking for deflate in -lz" >&5
ac_lib_var=`echo z'_'deflate | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2080,7 +2136,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lz $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2084 "configure"
+#line 2140 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -2091,7 +2147,7 @@ int main() {
deflate()
; return 0; }
EOF
-if { (eval echo configure:2095: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -2303,7 +2359,7 @@ cat >> $CONFIG_STATUS <<\EOF
# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
-ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_max_sed_cmds=60 # Maximum number of lines to put in a sed script.
ac_file=1 # Number of current file.
ac_beg=1 # First line for current file.
ac_end=$ac_max_sed_cmds # Line after last line for current file.
diff --git a/fastjar/configure.in b/fastjar/configure.in
index 1560869b008..c2e686e0f8c 100644
--- a/fastjar/configure.in
+++ b/fastjar/configure.in
@@ -30,6 +30,9 @@ dnl Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_OFF_T
AC_STRUCT_TM
+# mkdir takes a single argument on some systems.
+gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG
+
dnl Check for type-widths
gcc_AC_COMPILE_CHECK_SIZEOF(char)
gcc_AC_COMPILE_CHECK_SIZEOF(short)
diff --git a/fastjar/jartool.c b/fastjar/jartool.c
index 7aa624808d4..dc247ad77cb 100644
--- a/fastjar/jartool.c
+++ b/fastjar/jartool.c
@@ -436,8 +436,7 @@ int main(int argc, char **argv){
/* create the jarfile */
if(action == ACTION_CREATE){
if(jarfile){
- jarfd = open(jarfile, O_CREAT | O_BINARY | O_WRONLY | O_TRUNC,
- S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ jarfd = open(jarfile, O_CREAT | O_BINARY | O_WRONLY | O_TRUNC, 0666);
if(jarfd < 0){
fprintf(stderr, "Error opening %s for writing!\n", jarfile);
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 512975dbba1..3f60281341e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -128,6 +128,1420 @@
Use mips_emit_fcc_reload.
(reload_outcc): Duplicate reload_incc.
+2002-10-21 Richard Henderson <rth@redhat.com>
+
+ * config/i386/i386.c (ix86_function_ok_for_sibcall): Look at
+ the function type, not the return type.
+
+2002-10-20 Zack Weinberg <zack@codesourcery.com>
+
+ * config/i386/i386.c (ix86_function_ok_for_sibcall): Fix an
+ inverted test in the conditional determining the possibility
+ of sibcalls in PIC mode.
+
+2002-10-20 Richard Henderson <rth@redhat.com>
+
+ * target.h (struct gcc_target): Line wrap.
+
+ * config/alpha/alpha.c (alpha_output_mi_thunk_osf): Static.
+ (TARGET_ASM_OUTPUT_MI_THUNK): Define here...
+ * config/alpha/alpha.h: ... not here.
+ * config/alpha/alpha-protos.h: Update.
+
+ * config/arm/arm.c, config/arm/arm.h, config/arm/arm-protos.h
+ config/cris/cris-protos.h, config/cris/cris.c, config/cris/cris.h,
+ config/frv/frv-protos.h, config/frv/frv.c, config/frv/frv.h,
+ config/i386/i386-protos.h, config/i386/i386.c, config/i386/openbsd.h,
+ config/i386/unix.h, config/i960/i960-protos.h, config/i960/i960.c,
+ config/i960/i960.h, config/ia64/ia64-protos.h, config/ia64/ia64.c,
+ config/ia64/ia64.h, config/m68k/linux.h, config/m68k/m68k-protos.h,
+ config/m68k/m68k.c, config/m68k/netbsd-elf.h, config/m68k/openbsd.h,
+ config/mmix/mmix-protos.h, config/mmix/mmix.c, config/mmix/mmix.h,
+ config/pa/pa-protos.h, config/pa/pa.c, config/pa/pa.h,
+ config/s390/s390-protos.h, config/s390/s390.c, config/s390/s390.h,
+ config/sparc/openbsd.h, config/sparc/sparc-protos.h,
+ config/sparc/sparc.c, config/sparc/sparc.h,
+ config/stormy16/stormy16-protos.h, config/stormy16/stormy16.c,
+ config/stormy16/stormy16.h: Similarly.
+
+ * config/m68k/m68k.c (m68k_output_mi_thunk): Replicate mnemonic
+ selection logic from call patterns.
+
+2002-10-20 Mark Mitchell <mark@codesourcery.com>
+
+ * config/m68k/m68k.c (m68k_output_mi_thunk): Fix typo.
+
+2002-10-20 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
+
+ PR other/8202
+ * i386.c (ix86_init_mmx_sse_builtins, ix86_expand_builtin): Define and
+ expand __builtin_ia32_pslldqi128 and __builtin_ia32_psrldqi128.
+ * i386.h (IX86_BUILTIN_PSLLDQI128, IX86_BUILTIN_PSRLDQI128): New.
+ * xmmintrin.h (_mm_srli_si128, _mm_slli_si128): New.
+
+2002-10-20 Roger Sayle <roger@eyesopen.com>
+
+ PR c/761
+ * toplev.c (flag_unsafe_profile_arcs): Remove.
+ (flag_bounded_pointers): Remove.
+ (flag_bounds_check): Correct comments.
+ (lang_independent_options): Remove -funsafe-profile-arcs and
+ -fbounded-pointers. Correct -fbounds-check comments.
+
+ * flags.h: Correct flag_schedule_interblock comments.
+ (flag_bounded_pointers): Remove prototype.
+ (flag_bounds_check): Correct comments.
+
+ * c-opts.c (c_common_init_options): No need to mark
+ flag_bounds_check as unspecified.
+ (c_common_post_options): And no need to set it from
+ flag_bounded_pointers if its still unspecified.
+
+ * doc/invoke.texi: Fix some overfull hboxes in "make dvi".
+ Document --version, -feliminate-dwarf-2-dups, -fno-sched-interblock,
+ -fno-sched-spec, -fsched-spec-load, -fsched-spec-load-dangerous,
+ -fsched-verbose=n, -fno-branch-count-reg and -fbounds-check.
+
+Sat Oct 19 22:02:28 2002 Alexandre Oliva <aoliva@redhat.com>
+ Angela Marie Thomas <angela@releasedominatrix.com>
+ Brendan Kehoe <brendan@zen.org>
+ Nick Clifton <nickc@redhat.com>
+ Andrew Haley <aph@redhat.com>
+
+ * configure.in (--with-sysroot): New. Don't inhibit libc if
+ given. AC_SUBST TARGET_SYSTEM_ROOT, TARGET_SYSTEM_ROOT_DEFINE
+ and CROSS_SYSTEM_HEADER_DIR.
+ * configure: Rebuilt.
+ * Makefile.in (CROSS_SYSTEM_HEADER_DIR): Set in configure.
+ (TARGET_SYSTEM_ROOT): New.
+ (DRIVER_DEFINES): Define CROSS_INCLUDE_DIR from
+ CROSS_SYSTEM_HEADER_DIR.
+ (install-gcc-tooldir): New target.
+ (stmp-fixinc): Do not create $(libsubdir), but rather bail out
+ if SYSTEM_HEADER_DIR does not exist and it's not the default
+ sys-include directory.
+ (deduced.h, stmp-fixproto): Quote SYSTEM_HEADER_DIR properly.
+ (install-mkheaders): Likewise.
+ * gcc.c (target_system_root): New variable.
+ (add_sysrooted_prefix): New function.
+ (process_command): Recompute run-time target_system_root from
+ gcc_exec_prefix, keeping it unchanged if the relocated sysroot
+ does not exist.
+ (do_spec_1): Process 'R' spec.
+ (main): Add md_exec_prefix to exec_prefixes regardless of
+ startfile_prefix_spec. Use add_sysrooted_prefix for
+ startfile_prefixes, and don't skip the default ones when cross
+ compiling with sysroot enabled. Removed unused case of
+ non-absolute standard_startfile_prefix.
+ * config/interix.h: Remove the only potential, yet disabled,
+ occurrence of non-absolute (empty) standard_startfile_prefix.
+ * config/sh/linux.h (LIB_SPEC): Add -rpath-link in non-static
+ linking.
+ * config/mips/linux.h (LIB_SPEC): Define as in sh/linux.h.
+ * doc/install.texi (--with-sysroot): Document.
+ (--with-headers, --with-libs): Deprecate.
+
+2002-10-19 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+ Mark Mitchell <mark@codesourcery.com>
+
+ * alpha-protos.h (alpha_output_mi_thunk_osf): Update signature to
+ match target.h.
+ * arm-protos.h, arm.c (arm_output_mi_thunk): Likewise.
+ * cris-protos.h, cris.c (cris_asm_output_mi_thunk): Likewise.
+ * frv-protos.h, frv.c (frv_asm_output_mi_thunk): Likewise.
+ * i386-protos.h, i386.c (x86_output_mi_vcall_thunk,
+ x86_output_mi_thunk): Likewise.
+ * i960-protos.h, i960.c (i960_output_mi_thunk): Likewise.
+ * ia64-protos.h, ia64.c (ia64_output_mi_thunk): Likewise.
+ * m68k-protos.h, m68k.c (m68k_output_mi_thunk): Likewise.
+ * mmix-protos.h, mmix.c (mmix_asm_output_mi_thunk): Likewise.
+ * rs6000-protos.h, rs6000.c (output_mi_thunk): Likewise.
+ * s390-protos.h, s390.c (s390_output_mi_thunk): Likewise.
+ * stormy16-protos.h, stormy16.c (xstormy16_asm_output_mi_thunk):
+ Likewise.
+ * vax-protos.h, vax.c (vax_output_mi_thunk): Likewise.
+
+ * target.h (gcc_target): Update output_mi_thunk and
+ output_mi_vcall_thunk to take a HOST_WIDE_INT delta and
+ vcall_index.
+
+ * config/alpha/alpha.c: Replace ASM_OUTPUT_MI_THUNK with
+ TARGET_ASM_OUTPUT_MI_THUNK in comments.
+ * config/alpha/vms.h (ASM_OUTPUT_MI_THUNK): Don't #undef it.
+ (TARGET_ASM_OUTPUT_MI_THUNK): #undef it.
+ * config/frv/frv.h (DEFAULT_VTABLE_THUNKS): Remove definition.
+ * config/i386/i386-protos.h (x86_output_mi_vcall_thunk): Update
+ signature.
+ * config/i386/i386.c (x86_output_mi_vcall_thunk): Likewise.
+ * config/i386/openbsd.h: Replace ASM_OUTPUT_MI_THUNK with
+ TARGET_ASM_OUTPUT_MI_THUNK in comments.
+ * config/i960/i960.h (ASM_OUTPUT_MI_THUNK): Don't define.
+ (TARGET_ASM_OUTPUT_MI_THUNK): Do define.
+ * config/m68k/openbsd.h: Replace ASM_OUTPUT_MI_THUNK with
+ TARGET_ASM_OUTPUT_MI_THUNK in comments.
+ * config/rs6000/rs6000.c (rs6000_ra_ever_killed): Remove #ifdef
+ ASM_OUTPUT_MI_THUNK and replace with check of targetm.
+
+ * doc/tm.texi (TARGET_ASM_OUTPUT_MI_THUNK): Update signature.
+ (TARGET_ASM_OUTPU_MI_VCALL_THUNK): Likewise.
+
+2002-10-19 Brad Lucier <lucier@math.purdue.edu>
+
+ * real.c (do_add): Fix 0+0 sign corner case.
+ (do_divide): Fix Inf/0 corner case.
+
+Sun Oct 20 00:31:31 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * i386.c (classify_argument): Pass MMX arguments in memory
+ (ix86_expand_builtin): Expand proper address mode for cflush.
+ * i386.md (movdqa): Fix typo.
+ (sse2_cflush): Accept DImode addresses.
+
+ * xmmintrin.h (_mm_sqrt_sd): Accept two arguments.
+ (_mm_max_sd): Fix pasto.
+ (_mm_storeh_pd, _mm_storel_pd): Fix.
+
+ * i386.c (bdesc_comi): Fix to match specification.
+ (ix86_expand_sse_comi): Emit the comparison properly.
+ * i386.md (sse_comi, sse2_comi, sse_ucomi, sse2_ucomi):
+ Do not use comparison operator.
+ (vnmaskcmp): Fix template.
+
+ * xmmintrin.h (_mm_cvtps_pi16): Fix.
+
+2002-10-19 Sebastian Pop <s.pop@laposte.net>
+
+ * dependence.c : Removed.
+ * Makefile.in : Remove dependence.o.
+
+Sat Oct 19 10:46:52 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * mmintrin.h (__m64): typedef it to v2si.
+ (_mm_cvtsi32_si64, _mm_cvtsi32_si64_mm_sll_pi16,
+ _mm_sll_pi32, _mm_sll_pi64, _mm_slli_pi64, _mm_sra_pi16,
+ _mm_sra_pi32, _mm_srl_pi16, _mm_srl_pi32, _mm_srl_pi64,
+ _mm_srli_pi64, _mm_and_si64, _mm_andnot_si64,
+ _mm_or_si64, _mm_xor_si64): Add neccesary casts.
+ * xmmintrin.h (_mm_setzero_si64): Likewise.
+
+ * i386.h (ALIGN_MODE_128): Update comment; add missing modes
+ (SSE_REG_MODE_P, MMX_REG_MODE_P): New macros.
+
+ PR target/7693
+ Patch by Shawn Wagner
+ * mmintrin.h: Replace pi64 by si64.
+
+2002-10-18 David Edelsohn <edelsohn@gnu.org>
+
+ * rs6000.md (movdf_hardfloat32): Order alternatives consistently.
+ Use length of 4 not *.
+ (movdf_hardfloat64): Same. Support DFmode moves to/from CTR/LR.
+ (movdf_softfloat64): Likewise.
+ (movdi_internal32): Use length of 4 not *.
+ (movti_power): Same.
+ (ctrsi, ctrdi): Same.
+
+2002-10-18 Zack Weinberg <zack@codesourcery.com>
+
+ * c-decl.c (start_decl): Point users of the old initialized-
+ typedef extension at __typeof__.
+
+2002-10-18 Richard Henderson <rth@redhat.com>
+
+ * real.c (cmp_significand_0, rtd_divmod, ten_to_mptwo): New.
+ (real_to_decimal): Re-implement using the logic from the
+ gcc 3.2 etoasc. Comment heavily.
+ (div_significands): Simplify loop startup and comparison logic.
+
+2002-10-18 Mark Mitchell <mark@codesourcery.com>
+
+ * target-def.h (TARGET_ASM_OUTPUT_MI_THUNK): Default to NULL.
+ (TARGET_ASM_OUTPUT_MI_VCALL_THUNK): Likewise.
+ (TARGET_ASM_OUT): Add them.
+ * target.h (asm_out): Add output_mi_thunk and
+ output_mi_vcall_thunk.
+ * config/alpha/alpha.h (ASM_OUTPUT_MI_THUNK): Rename to ...
+ (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
+ * config/arm/arm-protos.h (arm_output_mi_thunk): Declare.
+ * config/arm/arm.c (arm_output_mi_thunk): Define.
+ * config/arm/arm.h (ASM_OUTPUT_MI_THUNK): Rename to ...
+ (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
+ * config/cris/cris.h (ASM_OUTPUT_MI_THUNK): Rename to ...
+ (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
+ * config/frv/frv.h (ASM_OUTPUT_MI_THUNK): Rename to ...
+ (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
+ * config/i386/i386-protos.h (x86_output_mi_thunk): Adjust
+ prototype.
+ (x86_output_mi_vcall_thunk): Declare.
+ * config/i386/i386.c (override_options): Clear
+ output_mi_vcall_thunk in 64-bit mode.
+ (ix86_fntype_regparm): New function.
+ (ix86_return_pops_args): Use it.
+ (ia32_this_parameter): New function.
+ (x86_output_mi_vcall_thunk): New function.
+ (x86_output_mi_thunk): Use it
+ * config/i386/unix.h (TARGET_ASM_OUTPUT_MI_THUNK): Adjust.
+ (TARGET_ASM_OUTPUT_MI_VCALL_THUNK): Define.
+ * config/i960/i960-protos.h (i960_output_mi_thunk): Declare.
+ * config/i960/i960.c (i960_output_mi_thunk): New function.
+ * config/i960/i960.h (ASM_OUTPUT_MI_THUNK): Adjust.
+ * config/ia64/ia64-protos.h (ia64_output_mi_thunk): Declare.
+ * config/ia64/ia64.c (ia64_output_mi_thunk): Define.
+ * config/ia64/ia64.h (ASM_OUTPUT_MI_THUNK): Rename to ...
+ (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
+ * config/m68k/m68k-protos.h (m68k_output_mi_thunk): New function.
+ * config/m68k/linux.h (ASM_OUTPUT_MI_THUNK): Rename to ...
+ (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
+ * config/m68k/netbsd-elf.h (ASM_OUTPUT_MI_THUNK): Rename to ...
+ (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
+ * config/mmix/mmix.h (ASM_OUTPUT_MI_THUNK): Rename to ...
+ (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
+ * config/pa/pa.h (ASM_OUTPUT_MI_THUNK): Rename to ...
+ (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
+ * config/rs6000/sysv4.h (ASM_OUTPUT_MI_THUNK): Rename to ...
+ (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
+ * config/s390/s390-protos.h (s390_output_mi_thunk): Declare.
+ * config/s390/s390.c (s390_output_mi_thunk): Define.
+ * config/s390/s390.h (ASM_OUTPUT_MI_THUNK): Rename to ...
+ (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
+ * config/sparc/sparc.h (ASM_OUTPUT_MI_THUNK): Rename to ...
+ (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
+ * config/stormy16/stormy16.h (ASM_OUTPUT_MI_THUNK): Rename to ...
+ (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
+ * config/vax/vax-protos.h (vax_output_mi_thunk): Declare.
+ * config/vax/vax.c (vax_output_mi_thunk): Define.
+ * config/vax/vax.h (ASM_OUTPUT_MI_THUNK): Rename to ...
+ (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
+ * doc/tm.texi: Adjust documentation.
+
+2002-10-18 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * config/netbsd.h (NETBSD_ENABLE_EXECUTE_STACK): Define
+ __enable_execute_stack function.
+ * config/alpha/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Define
+ as NETBSD_ENABLE_EXECUTE_STACK.
+ * config/i386/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
+ * config/i386/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
+ * config/i386/netbsd64.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
+ * config/sparc/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
+ * config/sparc/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
+
+2002-10-18 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * config/i386/i386.c (x86_initialize_trampoline): Emit a call
+ to __enable_execute_stack with the address of the trampoline
+ if TRANSFER_FROM_TRAMPOLINE is defined.
+ * config/i386/i386.h (TARGET_64BIT): Expand to a compile-time
+ constant if building libgcc2.
+
+Thu Oct 17 17:40:05 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * i386.c (pentium4_cost): Fix according to Intel recommendations.
+ (ix86_memory_move_cost): Fix for 64bit compilation.
+
+2002-10-17 Roger Sayle <roger@eyesopen.com>
+
+ * doc/c-tree.texi: Update description of COND_EXPR tree nodes.
+
+2002-10-17 Geoffrey Keating <geoffk@apple.com>
+
+ * config/rs6000/rs6000.h (HARD_REGNO_MODE_OK): Allow arbitrary modes
+ in CTR/LR/MQ.
+ * config/rs6000/rs6000.md (movcc_internal1): Support CCmode moves
+ to/from CTR/LR/MQ.
+ (movsf_hardfloat): Support SFmode moves to/from CTR/LR/MQ.
+ (movsf_softfloat): Likewise.
+
+2002-10-17 Janis Johnson <janis187@us.ibm.com>
+
+ * Makefile.in (site.exp): Add ALT_CXX_UNDER_TEST and COMPAT_OPTIONS.
+
+2002-10-17 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * config/alpha/alpha.c (alpha_initialize_trampoline): Use
+ tramp, not addr, to pass the trampoline address to
+ __enable_execute_stack.
+
+Thu Oct 17 18:40:47 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * mmintrin.h: Guard by __MMX__
+ * xmmintrin.h: Guard by __SSE__
+
+ PR other/8062
+ * xmmintrin.h (_MM_SHUFFLE2): New macro.
+ (_mm_load*_?d): New functions.
+ (_mm_set*_?d): New functions.
+ (_mm_store*_?d): New functions.
+
+Wed Oct 16 15:01:29 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ Really commit patch announced at Oct 14
+ PR c/7344
+ * predict.c (can_predict_insn_p): New function.
+ (estimate_probability): Avoid unnecesary work.
+ (process_note_prediction): Likewise.
+ * toplev.c (rest_of_compilation): Account early branch prediction pass
+ as TV_BRANCH_PROB.
+
+ PR other/8048
+ Found by Ian Ollmann
+ * xmmintrin.h (_mm_shuffle_pd): Fix typo.
+ (_mm_load?_pd): Likewise.
+ (_mm_store?_pd): Likewise.
+
+ PR target/7386
+ * i386.c (builtin_description):Drop cmpg[te]s[sd].
+ * xmmintrin.h (__mm_cmpg[te]_s[sd]): Rewrite using
+ swapped alternative.
+
+ PR opt/7630
+ * reload1.c (reload_inner_reg_of_subreg): New argument output;
+ (push_reload): Update call.
+
+2002-10-17 Richard Sandiford <rsandifo@redhat.com>
+
+ * config.gcc (mips*-*-*): Add OBJECT_FORMAT_ELF to $tm_defines
+ if using mips/elf.h or mips/elf64.h.
+ * config/mips/elf.h (OBJECT_FORMAT_ELF): Remove.
+ * config/mips/elf64.h (OBJECT_FORMAT_ELF): Remove.
+
+2002-10-16 Aldy Hernandez <aldyh@redhat.com>
+
+ * config/rs6000/rs6000.c (function_arg): Set inner mode of V1DI to
+ SI.
+
+2002-10-16 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/linux.h (ASM_DOUBLE, _ASM_OUTPUT_LONG): Remove.
+ (LPREFIX): Likewise.
+ (ASM_COMMENT_START, LOCAL_LABEL_PREFIX, ASM_FORMAT_PRIVATE_NAME,
+ ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT,
+ ASM_OUTPUT_ALIGN, ASM_OUTPUT_SKIP, ASM_OUTPUT_ALIGNED_BSS,
+ TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP, BSS_SECTION_ASM_OP,
+ GLOBAL_ASM_OP, ASM_OUTPUT_MI_THUNK): Move to s390.h.
+
+ * config/s390/s390.h (ASM_COMMENT_START, LOCAL_LABEL_PREFIX,
+ ASM_FORMAT_PRIVATE_NAME, ASM_OUTPUT_ALIGN, ASM_OUTPUT_SKIP,
+ ASM_OUTPUT_ALIGNED_BSS, TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP,
+ BSS_SECTION_ASM_OP): Move from linux.h.
+ (ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.
+ Also, use ASM_GENERATE_INTERNAL_LABEL instead of LPREFIX.
+
+ * config/s390/s390.c (s390_function_profiler): Use
+ ASM_GENERATE_INTERNAL_LABEL instead of LPREFIX.
+
+2002-10-15 Eric Christopher <echristo@redhat.com>
+
+ * stor-layout.c (layout_type): Call GET_MODE_BITSIZE once.
+ * java/parse.y (obtain_incomplete_type): Make pointer
+ ptr_mode.
+
+2002-10-15 Richard Henderson <rth@redhat.com>
+
+ * real.c (real_to_decimal): Accept BUF_SIZE and CROP_TRAILING_ZEROS
+ as arguments. Bound DIGITS by the available buffer size.
+ (real_to_hexadecimal): Likewise.
+ * real.h (real_to_decimal, real_to_hexadecimal): Update prototypes.
+ (REAL_VALUE_TO_DECIMAL): Remove.
+ * c-common.c, c-pretty-print.c, print-rtl.c, print-tree.c,
+ sched-vis.c, config/arc/arc.c, config/c4x/c4x.c, config/fr30/fr30.c,
+ config/i370/i370.h, config/i386/i386.c, config/i960/i960.c,
+ config/ip2k/ip2k.c, config/m32r/m32r.c, config/m68hc11/m68hc11.c,
+ config/m68k/hp320.h, config/m68k/m68k.h, config/m68k/sun2o4.h,
+ config/m68k/sun3.h, config/mips/mips.c, config/ns32k/ns32k.c,
+ config/pdp11/pdp11.h, config/vax/vax.h: Update all callers to
+ use real_to_decimal directly, and with the proper arguments.
+ * doc/tm.texi (REAL_VALUE_TO_DECIMAL): Remove.
+
+2002-10-15 Jim Wilson <wilson@redhat.com>
+
+ * reload1.c (merge_assigned_reloads): After converting overlapping
+ reloads to RELOAD_OTHER, abort if there are now conflicting reloads.
+
+ * config/i386/i386.md (adddi3_1): Add call to ix86_binary_operator_ok.
+
+Tue Oct 15 22:08:35 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * expr.c (do_tablejump): Fix typo in my previous commit.
+
+2002-10-15 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/vr.h (DRIVER_SELF_SPECS): Change %<mgp32 to %{<mgp32}.
+
+2002-10-15 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390.c (s390_split_branches): Add return
+ value. Add parameters TEMP_REG and TEMP_USED. Use unspec 104.
+
+ (find_base_register_in_addr): New function.
+ (find_base_register_ref): New function.
+ (replace_base_register_ref): New function.
+
+ (struct constant_pool): Add members pool_insn, insns, and anchor.
+ Remove member last_insn.
+ (s390_start_pool): Initialize them.
+ (s390_end_pool): Emit pool placeholder insn.
+ (s390_add_pool_insn): New function.
+ (s390_find_pool): Use insns bitmap instead of addresses.
+ (s390_dump_pool): Replace placeholder insn. Emit anchor.
+ Replace unspec 104 by local-pool-relative references.
+ (s390_output_constant_pool): Output anchor label if required.
+ (s390_output_symbolic_const): Handle unspec 104 and 105.
+ (s390_add_pool): Remove, replace by ...
+ (s390_add_constant, s390_find_constant): ... these new functions.
+ (s390_add_anchor): New function.
+
+ (s390_chunkify_pool): Delete, replace by ...
+ (s390_chunkify_start, s390_chunkify_finish,
+ s390_chunkify_cancel): ... these new functions.
+ (s390_optimize_prolog): Add parameter TEMP_REGNO.
+ Recompute register live data for special registers.
+ (s390_fixup_clobbered_return_reg): New function.
+ (s390_machine_dependent_reorg): Rewrite to use new
+ s390_chunkify_... routines.
+
+ config/s390/s390.md ("reload_base"): Rename to ...
+ ("reload_base_31"): ... this.
+ ("reload_base_64"): New insn.
+ ("reload_base2"): Remove.
+ ("reload_anchor"): New insn.
+ ("pool"): New insn.
+
+ s390.c (s390_pool_overflow): Remove.
+ s390.h (s390_pool_overflow): Likewise.
+ s390.md ("cjump", "icjump", "doloop_si"): Remove s390_pool_overflow.
+
+Tue Oct 15 16:51:04 2002 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * sh.md (movv8qi_i+2): Don't split if source is -1.
+
+2002-10-15 Janis Johnson <janis187@us.ibm.com>
+
+ * doc/install.texi: Formatting changes for conformance to HTML 4.01.
+
+2002-10-15 Ulrich Weigand <uweigand@de.ibm.com>
+
+ PR opt/7409
+ * loop.c (loop_regs_scan): Mark registers used for function
+ argument passing as MAY_NOT_OPTIMIZE.
+
+Mon Oct 14 19:22:19 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * gcov-io.h (gcov_info): Fix type.
+ * profile.c (create_profiler): Fix type mismatch.
+
+Mon Oct 14 20:33:12 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * i386.md (movv2di_internal): New pattern.
+ (movv2df_internal, movv8hi_internal, movv16qi_internal): Fix predicate.
+ (movv2di): New expander.
+ * i386.c (ix86_preferred_reload_class): Return NO_REGS for vector operands.
+
+ * i386.c (ix86_expand_timode_binop_builtin): Delete.
+ (builtin_description): Add SSE1 logicals; rename SSE2 logicals.
+ (ix86_init_mmx_sse_builtins): Kill SSE1 logicals.
+ (ix86_expand_builtin): Likewise.
+ * i386.h (sse_andti4_df_1, sse_andti3_df_2, sse_andti3_sf_1, sse_andti3_sf_2,
+ sse_andti3,
+ sse_andnti4_df_1, sse_andti3_df_2, sse_andti3_sf_1, sse_andti3_sf_2,
+ sse_andnti3,
+ sse_orti4_df_1, sse_orti3_df_2, sse_orti3_sf_1, sse_orti3_sf_2,
+ sse_orti3,
+ sse_xorti4_df_1, sse_xorti3_df_2, sse_xorti3_sf_1, sse_xorti3_sf_2,
+ sse_xorti3): Kill.
+ (sse_andv4sf3, sse_andnv4sf3, sse_orv2df3, sse_xorv2df3, sse_andv2df3,
+ sse_andnv2df3, sse_orv2df3, sse_xorv2df3): New expanders.
+ (*sse_andv4sf3, *sse_andnv2df3, *sse_orv4sf3, *sse_xorv4sf3, *sse_andv2df3,
+ *sse_andnv2df3, *sse_orv2df3, *sse_xorv2df3): New patterns.
+ (*sse_andsf3, *sse_andndf3, *sse_ordf3, *sse_xordf3, *sse_anddf3,
+ *sse_andndf3, *sse_orv2df3, *sse_xorv2df3): New patterns.
+
+ * xmmintrin.h (__m128i): Define as __v2di.
+
+ PR c++/6419
+ (expand_expr): Use DECL_RTL_SET_P.
+
+2002-10-14 Roger Sayle <roger@eyesopen.com>
+
+ * combine.c (simplify_set): Treat MODE_CC registers like cc0.
+
+2002-10-14 Roger Sayle <roger@eyesopen.com>
+ Zack Weinberg <zack@codesourcery.com>
+
+ * config/i386/i386.c (k6_cost): Correct typo.
+
+2002-10-14 Mark Mitchell <mark@codesourcery.com>
+
+ PR optimization/6631
+ * alias.c (objects_must_conflict_p): Check honor_readonly when
+ examining TYPE_READONLY.
+ * function.c (assign_stack_temp_for_type): Likewise.
+
+2002-10-14 Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
+
+ * config/alpha/alpha.md (extendsidi2_nofix, extendsidi2_fix):
+ Swap zero extension arguments.
+ (umaxhi3): Fix instruction class.
+ PR target/7211
+ (prefetch): Fix prefetch instructions.
+ PR target/7238
+ (pkwb): Fix output constraint.
+
+2002-10-14 Alexandre Oliva <aoliva@redhat.com>
+
+ * config/mips/mips.c (print_operand): Increase buffer size for
+ real numbers.
+
+2002-10-14 Richard Henderson <rth@redhat.com>
+
+ PR opt/8165
+ * gcse.c (adjust_libcall_notes): Revert last change.
+ * simplify-rtx.c (simplify_replace_rtx): Handle LO_SUM.
+
+2002-10-14 Andrew Haley <aph@redhat.com>
+
+ * tree-inline.c (remap_block): All local class initialization
+ flags go in the outermost scope.
+ (expand_call_inline): Call java_inlining_map_static_initializers.
+ (expand_call_inline): Call java_inlining_merge_static_initializers.
+ * java/lang.c (merge_init_test_initialization): New.
+ (java_inlining_merge_static_initializers): New.
+ (inline_init_test_initialization): New.
+ (java_inlining_map_static_initializers): New.
+
+ * tree-inline.c (expand_call_inline): Convert retvar to expected
+ type.
+
+2002-10-14 Graham Stott <graham.stott@btinternet.com>
+
+ * stmt.c (decl_conflicts_with_clobbers_p): Add REG_P check.
+
+2002-10-14 Aldy Hernandez <aldyh@redhat.com>
+
+ * stmt.c: Fix typo in comment.
+
+Mon Oct 14 11:35:49 2002 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * c-common.c (c_common_type_for_mode): Add V2HImode case.
+ * tree.c (build_common_tree_nodes_2): Initialize
+ unsigned_V2HI_type_node and V2HI_type_node.
+ * tree.h (enum tree_index): Add TI_UV2HI_TYPE and TI_V2HI_TYPE.
+ (unsigned_V2HI_type_node, V2HI_type_node): Define.
+
+2002-10-14 Jakub Jelinek <jakub@redhat.com>
+
+ * config/i386/i386.h (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP):
+ Handle TARGET_64BIT.
+
+2002-10-14 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/vr.h (DRIVER_SELF_SPECS): Define.
+ * config/mips/t-vr (MULTILIB_OPTIONS): Remove mlong32.
+ (MULTILIB_DIRNAMES): Remove long32.
+ (MULTILIB_EXCEPTIONS): Don't build -mabi=32 -mgp32 multilibs.
+ (MULTILIB_REDUNDANT_DIRS): Remove.
+
+2002-10-14 Richard Sandiford <rsandifo@redhat.com>
+
+ * doc/tm.texi (DRIVER_SELF_SPECS): Document.
+ * gcc.c (driver_self_specs): New variable.
+ (do_self_spec): New function.
+ (main): Use it to process driver_self_specs.
+
+2002-10-13 Richard Henderson <rth@redhat.com>
+
+ * config/i386/i386.c (ix86_function_ok_for_sibcall): Reject
+ indirect sibcalls when regparm >= 3.
+
+ * config/i386/i386.c (sibcall_insn_operand): New.
+ * config/i386/i386.h (PREDICATE_CODES): Update.
+ * config/i386/i386-protos.h: Update.
+ * config/i386/i386.md (sibcall_1, sibcall_value_1): Use it.
+
+ * rtl.c (shallow_copy_rtx): Use memcpy for the entire node.
+
+2002-10-12 Roger Sayle <roger@eyesopen.com>
+
+ * simplify-rtx.c (simplify_binary_operation) [ASHIFTRT]: Optimize
+ arithmetic right shifts of ~0 during RTL simplifications.
+
+2002-10-12 Neil Booth <neil@daikokuya.co.uk>
+
+ PR preprocessor/7862
+ PR preprocessor/8190
+ * gcc.c (cpp_unique_options): Don't delete .d files.
+ Remove stray whitespace.
+
+2002-10-12 Naohiko Shimizu <pshimizu@fa2.so-net.ne.jp>
+
+ * pdp11.h (ASM_OUTPUT_SKIP): Add preceding 0 for octal constant.
+ (ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Likewise.
+ * pdp11.c (pdp11_output_function_prologue): 0%o -> %#o.
+ (pdp11_output_function_epilogue, output_ascii): Likewise.
+ (output_addr_const_pdp11): Likewise.
+ * pdp11.md (movdi): Use offsetable memory for floating store.
+ (lshrsi3, negsi2): Delete irrelevant comment.
+
+2002-10-11 Andreas Bauer <baueran@in.tum.de>
+
+ * config/i386/i386.c (ix86_function_ok_for_sibcall): Allow
+ indirect calls to be sibcall optimized.
+ * config/i386/i386.md (sibcall_1): New.
+ (call_1): Add no-sibcalls condition.
+ (sibcall_value_1): New.
+ (call_value_1): Add no-sibcalls condition.
+
+2002-10-11 Eric Christopher <echristo@redhat.com>
+
+ * output.h (default_valid_pointer_mode): Declare.
+ * varasm.c (default_valid_pointer_mode): Define.
+ * target-def.h (TARGET_VALID_POINTER_MODE): Use.
+ * target.h: Ditto.
+ * tree.c (build_pointer_type_for_mode): New function.
+ (build_pointer_type): Use.
+ (build_reference_type_for_mode): New function.
+ (build_reference_type): Use.
+ * tree.h: Declare new functions.
+ * c-common.c (handle_mode_attribute): Use new functions, check
+ for type.
+ * stor-layout.c (layout_type): Depend on machine mode for
+ REFERENCE_TYPE and POINTER_TYPE.
+ * dwarf2out.c (simple_type_size_in_bits): Move upward in file.
+ (modified_type_die): Use instead of PTR_SIZE for POINTER_TYPE
+ and REFERENCE_TYPE.
+ * config/mips/mips.c (mips_valid_pointer_mode): New function.
+ (TARGET_VALID_POINTER_MODE): Use and define.
+ * config/mips/mips-protos.h (mips_valid_pointer_mode): Declare.
+
+2002-10-11 Geoffrey Keating <geoffk@apple.com>
+
+ * cse.c (mention_regs): Set SUBREG_TICKED to the register number,
+ not the address of the REG.
+ (struct cse_reg_info): Make subreg_ticked unsigned.
+
+2002-10-11 Janis Johnson <janis187@us.ibm.com>
+
+ * doc/compat.texi: Add info about C++ libraries.
+
+2002-10-11 Richard Henderson <rth@redhat.com>
+
+ PR opt/8165
+ * gcse.c (adjust_libcall_notes): Also adjust notes for INSN.
+
+2002-10-11 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * cfganal.c (dfs_enumerate_from): Use PARAMS.
+ * genautomata.c (output_insn_code_cases): Likewise.
+ * real.c (real_format): Likewise.
+ * tree.c (tree_size): Revise expressions using TREE_CODE_LENGTH to
+ ensure value is promoted before doing subtraction.
+
+Fri Oct 11 22:22:38 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * calls.c (expand_call): Simplify noreturn call.
+
+ PR c/7344
+ * cfgbuild.c (make_edges): Create edge cache when we do have
+ large jumptable.
+ * expr.c (do_tablejump): Note size of maximal jumptable.
+ * function.c (prepare_function_start): Zero out size.
+ * function.h (function): Add max_jumptable_ents.
+
+ * cfgcleanup.c (insn_match_p): Verify sibcall flag for calls to.
+
+Fri Oct 11 12:34:33 2002 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * sh.md (movv8qi_i+2): For V8QI destinations, generate V4HI
+ register for mperm_w operation.
+
+Fri Oct 11 10:56:17 2002 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * emit-rtl.c (gen_lowpart_common): When asked to make a vector from
+ an integer, use simplify_gen_subreg.
+
+2002-10-10 Diego Novillo <dnovillo@redhat.com>
+
+ * calls.c (flags_from_decl_or_type): Make extern.
+ (ECF_*): Move ...
+ * rtl.h (ECF_*): ... here.
+ (flags_from_decl_or_type): Declare.
+
+2002-10-10 Roger Sayle <roger@eyesopen.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+
+ * fold-const.c (fold) [RSHIFT_EXPR]: Optimize arithmetic right
+ shifts of the form -1 >> x.
+
+Thu Oct 10 16:52:55 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * cfgcleanup.c (insn_match_p): Verify sibcall flag for calls to.
+
+2002-10-10 Aldy Hernandez <aldyh@redhat.com>
+
+ * extend.texi (Vector Extensions): Remove comment about single
+ element vectors.
+
+2002-10-10 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * fold-const.c (size_htab_hash): Use htab_hash_pointer.
+ * function.c (insns_for_mem_hash): Likewise.
+ * varasm.c (STRHASH): Likewise.
+
+2002-10-10 Stuart Hastings <stuart@apple.com>
+
+ * cse.c (struct cse_reg_info): Add subreg_ticked.
+ (SUBREG_TICKED): New.
+ (get_cse_reg_info): Initialize SUBREG_TICKED.
+ (mention_regs): Use it.
+ (invalidate): Set SUBREG_TICKED.
+ (invalidate_for_call): Likewise.
+ (addr_affects_sp_p): Likewise.
+
+2002-10-10 Jakub Jelinek <jakub@redhat.com>
+
+ * config/i386/i386.md (tls_local_dynamic_base): Put pic reg
+ into proper operand.
+
+2002-10-10 Denis Chertykov <denisc@overta.ru>
+
+ * config/ip2k/ip2k.c (function_epilogue): Optimize stack
+ deallocation.
+ * config/ip2k/libgcc.S: Combine routines used by function
+ epilogue.
+
+2002-10-10 Jim Wilson <wilson@redhat.com>
+
+ * cse.c (fold_rtx): Don't perform associative optimization for DIV and
+ UDIV.
+
+2002-10-10 David Edelsohn <edelsohn@gnu.org>
+
+ * config/rs6000/aix52.h: New file.
+ * config/rs6000/t-aix52: New File.
+ * config.gcc (rs6000-ibm-aix5.1.*): New entry.
+ (rs6000-ibm-aix[56789].*): Default to AIX 5.2.
+
+Thu Oct 10 19:37:54 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ PR target/5610
+ * invoke.texi (-msse-math): Kill
+ (-msse): Add note to mfpmath=sse.
+
+Thu Oct 10 17:08:30 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ PR target/7723
+ * i386.c (ix86_expand_vector_move): Do not generate const0->mem moves.
+
+2002-10-10 Neil Booth <neil@daikokuya.co.uk>
+
+ PR preprocessor/8179
+ * gcc.c (cpp_options): Add {ansi}, move %{m*} to same location
+ as cc1_options.
+ (default_compilers): Pass debug options when preprocessing
+ stdin.
+
+2002-10-06 Richard Henderson <rth@redhat.com>
+
+ * toplev.c (rest_of_compilation): Revert opt/2960 change.
+
+Wed Oct 9 21:18:43 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * i386.c (*_cost): Add branch costs.
+ (override_options): set ix86_branch_cost.
+ (ix86_expand_int_movcc): Use BRANCH_COST.
+ * i386.h (costs): Add branch_cost.
+
+2002-10-09 Zack Weinberg <zack@codesourcery.com>
+
+ PR c/7353
+ * c-decl.c (start_decl): Unconditionally issue error for
+ 'typedef foo = bar'.
+ (finish_decl): Remove special case for TYPE_DECL with initializer.
+
+ * doc/extend.texi: Delete "Naming Types" section. Change all
+ cross-references to that section to refer to "Typeof" instead.
+ Add the useful safe-max()-macro example from "Naming Types" to
+ "Typeof", rewritten using that extension. Add some compatibility
+ notes to "Typeof."
+
+2002-10-09 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * loop.c: Revert 2002-08-15 change.
+ (LOOP_REGNO_NREGS): Ensure type is int.
+
+2002-10-09 David Edelsohn <edelsohn@gnu.org>
+
+ * config/rs6000/rs6000.md (extenddftf2): Change to define_insn
+ which copies first FPR and clears second.
+ (extendsftf2): Same.
+ (floatditf2): Fix typo.
+ (floatsitf2): Same.
+ (fix_trunctfdi2): Same.
+ (fix_trunctfsi2): Same.
+
+2002-10-09 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * conflict.c (arc_hash): Change return type to hashval_t.
+ * cselib.c (get_value_hash): Likewise.
+ * genautomata.c (automaton_decl_hash, insn_decl_hash, decl_hash,
+ state_hash, automata_list_hash): Likewise.
+ * read-rtl.c (def_hash): Likewise.
+ * tree.c (type_hash_hash): Likewise.
+
+2002-10-08 Aldy Hernandez <aldyh@redhat.com>
+
+ * config/rs6000/rs6000.c (rs6000_ra_ever_killed): Call
+ prologue_epilogue_contains instead of using REG_MAYBE_DEAD notes.
+
+Wed Oct 9 15:54:49 2002 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * sh.md (ffssi2): Fix emitted code.
+
+2002-10-09 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * cse.c (insn_live_p): Pass insn pattern, not full insn
+ to may_trap_p.
+
+2002-10-09 Neil Booth <neil@daikokuya.co.uk>
+
+ * cppmacro.c (paste_tokens): Only allow / to paste with =.
+
+2002-10-09 David Edelsohn <edelsohn@gnu.org>
+
+ * config/rs6000/rs6000.md (movdf splitter): Use gen_int_mode on
+ 64-bit hosts.
+ (movtf_internal): Reference correct displacement for second value
+ in memory.
+ (movtf splitter): Correct generation of constants in 64-bit mode.
+
+2002-10-09 Alan Modra <amodra@bigpond.net.au>
+
+ * libgcc2.c (__floatdisf): Properly cure double rounding.
+
+2002-10-09 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * c-common.c (cb_register_builtins): Define __WCHAR_MAX__.
+ * doc/cpp.texi (Common Predefined Macros): Document.
+
+2002-10-09 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ PR doc/7484
+ * doc/invoke.texi (Option Summary): List
+ -Wmissing-declarations as a C only option.
+
+2002-10-08 Roger Sayle <roger@eyesopen.com>
+
+ * fold-const.c (fold) [LROTATE_EXPR, RROTATE_EXPR]: Optimize
+ left and right rotates of ~0, i.e. integer_all_onesp (arg0).
+ [LSHIFT_EXPR, RSHIFT_EXPR]: Optimize shifts and rotates of zero.
+
+Tue Oct 8 01:24:19 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * i386.c (x86_sse_partial_reg_dependency, x86_sse_partial_regs,
+ x86_sse_typeless_stores, x86_sse_load0_by_pxor): New global
+ variables.
+ (safe_vector_operand): Update sse_clrv4sf call.
+ (ix86_expand_buildin): Likewise
+ * i386.h (x86_sse_partial_reg_dependency, x86_sse_partial_regs,
+ x86_sse_typeless_stores, x86_sse_load0_by_pxor): Declare.
+ (TARGET_SSE_PARTIAL_REG_DEPENDENCY, TARGET_SSE_PARTIAL_REGS,
+ TARGET_SSE_TYPELESS_STORES, TARGET_SSE_TYPELESS_LOAD0): New
+ macros.
+ * i386.md (movsf*, movdf*, movti, movv4sf, movv2df, movv16qi, movv8hi,
+ movv4si): Obey the new flags.
+ (floatsi2sf, floatdi2sf, truncatedf2sf): Emit extra load of 0 to avoid
+ reformating penalty.
+ (anddf, cmov patterns): Avoid reformating by first converting.
+ (sse_cvtsd2ss): Fix predicate.
+ (sse2_clrti): Fix mode,
+ (sse_clrv4sf): Avoid unspec.
+
+2002-10-08 Jakub Jelinek <jakub@redhat.com>
+
+ * config/sparc/t-linux64 (MULTILIB_OPTIONS): Remove
+ mno-app-regs|mcmodel=medany.
+ (MULTILIB_DIRNAMES, MULTILIB_OSDIRNAMES): Remove alt.
+ (MULTILIB_EXCEPTIONS, MULTILIB_EXCLUSIONS, MULTILIB_MATCHES): Remove.
+ (CRTSTUFF_T_CFLAGS): Define.
+
+2002-10-08 Roger Sayle <roger@eyesopen.com>
+
+ PR target/8087
+ * simplify-rtx.c (avoid_constant_pool_reference): Allow constant
+ pool references that are constructed using LO_SUM.
+
+2002-10-08 Nathan Sidwell <nathan@codesourcery.com>
+
+ * c-opts.c (c_common_decode_option): Add warn_strict_aliasing to
+ -Wall.
+ * c-typeck.c (build_c_cast): Use warn_strict_aliasing, tweak
+ message.
+ * flags.h (warn_strict_aliasing): Declare.
+ * toplev.c (warn_strict_aliasing): Define.
+ (lang_independent_options): Add it.
+ * doc/invoke.texi (-Wstrict-aliasing): Document it.
+
+2002-10-08 Zack Weinberg <zack@codesourcery.com>
+
+ * system.h (GCCBUGURL): Delete.
+ * version.c (bug_report_url): New. Add commentary about
+ modifying both these strings in modified distributions.
+ * version.h: Declare bug_report_url.
+
+ * diagnostic.c, gcc.c, gcov.c: Globally replace GCCBUGURL with
+ bug_report_url.
+
+2002-10-08 Nick Clifton <nickc@redhat.com>
+
+ * config/rs6000/spe.h (__ev_set_acc_u64): Use __ev_create_u64 to
+ convert uint64_t into __ev64_opaque__.
+ (__ev_set_acc_s64): Likewise, but using signed types.
+
+2002-10-08 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390.md ("*doloop_si_long"): Add missing operand.
+ ("*doloop_di_long"): Likewise.
+
+Tue Oct 8 16:50:10 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * print-rtl.c (print_rtx): Increase buffer size for real numbers.
+
+2002-10-08 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/mips.md (define_attr cpu): Add r4111.
+
+2002-10-08 Anthony Green <green@redhat.com>
+
+ * bitmap.c (bitmap_equal_p): Clear all bitmap_head fields.
+
+2002-10-08 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
+
+ * config/c4x/c4x.c (c4x_print_operand): Enlarge buffer
+ for REAL_VALUE_TO_DECIMAL output.
+
+2002-10-07 Richard Henderson <rth@redhat.com>
+
+ * cse.c (fixed_base_plus_p): Turn FIXED_BASE_PLUS_P into a
+ function; cleanup PLUS case by using recursion. Update all users.
+ (NONZERO_BASE_PLUS_P): Remove.
+ (find_comparison_args): Use rtx_addr_can_trap_p instead.
+ (fold_rtx): Use nonzero_address_p.
+ * rtl.h (nonzero_address_p): Declare.
+ * rtlanal.c (rtx_varies_p): Handle ADDRESSOF.
+ (rtx_addr_can_trap_p): Likewise.
+ (nonzero_address_p): New.
+ * simplify-rtx.c (NONZERO_BASE_PLUS_P): Remove.
+ (simplify_relational_operation): Use nonzero_address_p.
+
+2002-10-07 David Edelsohn <edelsohn@gnu.org>
+
+ * config/rs6000/rs6000.c (rs6000_override_options): Set
+ real_format_for_mode for IBM extended format, if enabled.
+ (easy_fp_constant): Add TFmode.
+ (rs6000_legitimize_address): Add TFmode.
+ (rs6000_legitimate_address): Same.
+ (function_arg_advance): TFmode uses two FPRs.
+ (rs6000_emit_prologue): Fix warning.
+ (rs6000_output_function_epilogue): Add TFmode.
+ (output_toc): Add TFmode.
+ * rs6000.h (SLOW_UNALIGNED_ACCESS): Add TFmode.
+ (LEGITIMATE_OFFSET_ADDRESS_P): Add TFmode.
+ * rs6000.md (movtf splitter): Load TFmode constant.
+
+2002-10-07 Dale Johannesen <dalej@apple.com>
+
+ * rtl.h: Add NOTE_PRECONDITIONED.
+ * unroll.c: Set it.
+ * loop.c: Set loop_info->preconditioned from it.
+ * doloop.c: Permit doloop treatment when loop_info->preconditoned.
+
+2002-10-07 Richard Henderson <rth@redhat.com>
+
+ * config/i960/i960.c (i960_setup_incoming_varargs): Create a
+ new rtx for comparing the argument pointer against zero.
+ (i960_va_start): Similarly.
+
+2002-10-07 Richard Henderson <rth@redhat.com>
+
+ * config/i960/i960.md (*): Use TFmode, not XFmode.
+ * config/i960/i960.c (*): Likewise.
+ (i960_arg_size_and_align): Remove XFmode alignment hack.
+ (i960_round_align): Merge code from ROUND_TYPE_ALIGN.
+ * config/i960/i960.h (LONG_DOUBLE_TYPE_SIZE): Use 128, not 96.
+ (MAX_LONG_DOUBLE_TYPE_SIZE): Likewise.
+ (DATA_ALIGNMENT, ROUND_TYPE_SIZE): Remove.
+
+2002-10-07 Richard Henderson <rth@redhat.com>
+
+ * config/fp-bit.c (EXTENDED_FLOAT_STUBS): Flush out all XF/TFmode
+ entry points; use void return value and argument list.
+
+2002-10-06 Andreas Bauer <baueran@in.tum.de>
+
+ * calls.c (expand_call): Fix function-is-volatile check.
+
+2002-10-05 Naohiko Shimizu <nshimizu@keyaki.cc.u-tokai.ac.jp>
+
+ * t-pdp11: Add MULTILIB support for msoft-float.
+ * pdp11.h (LEGITIMATE_CONSTANT_P): Fix soft-float case.
+
+ * t-pdp11: Add LIB2FUNCS_EXTRA.
+ * pdp11.c (pdp11_output_function_prologue): Restrict offset to 16bit,
+ add preceding 0 to the octal constant, rename 'fp' to 'r5', rename
+ 'fldd' to 'ldd', rename 'fstd' to 'std'.
+ (pdp11_output_function_epilogue): Likewise.
+ (output_move_quad): Make the comment gas compatible.
+ (output_ascii): Add preceding 0 to the octal constant.
+ (print_operand_address): Add pre_modify, post_modify.
+ (output_addr_const_pdp11): Add preceding 0 to the octal constant.
+ * pdp11.h (GO_IF_LEGITIMATE_ADDRESS) : Add 'movb' pre_modify case
+ with the indication of Paul Koning.
+ (PRINT_OPERAND): Fix floating constant.
+ * pdp11.md (movdi): Restrict matching pattern.
+ (movqi): Generalize the matching pattern.
+ (movdf): Restrict matching pattern.
+ (zero_extendqihi2): Change constant representation.
+ (floatsidf2): Fix wrong operands.
+ (addqi3): Fix wrong instruction name.
+ (subqi3): Fix wrong instruction name.
+ (andsi3, andhi3, andqi3): Simplify and fix to use 'bic'.
+ (xorsi3): Fix wrong insn.
+ (one_cmplqi2): Add two operand pattern.
+ (lsrsi3): New.
+ (negsi2): New.
+ (call): Add register indirect case.
+ (mod): Fix wrong subreg.
+
+2002-09-25 Eric Botcazou <ebotcazou@libertysurf.fr>
+ Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c/7411
+ * expr.c (expand_expr) [PLUS]: Simplify after the operands
+ have been expanded in EXPAND_NORMAL mode.
+
+2002-10-06 Richard Henderson <rth@redhat.com>
+
+ * config/rs6000/rs6000.md (load_toc_v4_PIC_2): Fix base constraint.
+
+2002-10-06 Richard Henderson <rth@redhat.com>
+
+ PR optimization/2960
+ * toplev.c (rest_of_compilation): Don't copy_loop_headers if
+ optimize_size.
+
+2002-10-06 Alexandre Oliva <aoliva@redhat.com>
+
+ * config/mips/mips.h (SIZE_TYPE, PTRDIFF_TYPE): Override
+ previously definitions.
+
+2002-10-06 Frank Ch. Eigler <fche@redhat.com>
+
+ * cppinit.c (init_standard_includes, parse_option): Use strncmp.
+ * c-opts.c (find_opt): Similarly.
+
+Sat Oct 5 22:48:06 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * athlon.md: rewrite to DFA.
+ * i386 (ix86_adjust_cost): Drop memory latency code.
+ (ia32_use_dfa_pipeline_interface): Return true for Athlon.
+
+2002-10-05 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.c (set_multilib_dir): Don't access *end.
+ Use memcpy instead of strncpy. Don't write beyond malloced buffer.
+ (print_multilib_info): Don't show paths starting with ".:".
+ * genmultilib: Add new option, "yes" if multilibs are enabled.
+ Update comments. If multilibs not enabled, print .:${osdirout}
+ for each directory. If multilibs are enabled, always print
+ ${dirout}:${osdirout}, even if the two are the same.
+ * Makefile.in (s-mlib): Pass @enable_multilib@ to genmultilib.
+ Pass all MULTILIB_* variables to genmultilib even if
+ --disable-multilib but MULTILIB_OSDIRNAMES is not empty.
+
+2002-10-04 Zack Weinberg <zack@codesourcery.com>
+
+ * gcc.c (process_command): Set .validated for -pipe. Correct
+ grammar in comment.
+
+2002-10-04 Bruce Korb <bkorb@gnu.org>
+
+ * fixinc/inclhack.def(hpux11_abs): use format fix
+ * fixinc/fixincl.x: regenerate
+ * fixinc/tests/base/stdlib.h: accommodate new fix test
+
+Sat Oct 5 19:42:45 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * c-common.c (cb_register_builtins): Use really_no_inline.
+
+2002-10-04 David Edelsohn <edelsohn@gnu.org>
+
+ * unroll.c (copy_loop_body): Remove REG_EQUAL note attached to
+ copied instruction if the note is not loop invariant.
+
+2002-10-04 Loren J. Rittle <ljrittle@acm.org>
+
+ * gcc/ginclude/stddef.h: Support the FreeBSD 5 typedef system.
+
+2002-10-04 Steve Ellcey <sje@cup.hp.com>
+
+ * doc/invoke.texi (HPPA): Add -mlinker-opt, -mgnu-ld,
+ and -mhp-ld options to list of options. Add -mgnu-ld
+ and -mhp-ld option descriptions.
+
+2002-10-04 Steve Ellcey <sje@cup.hp.com>
+
+ * fixinc/inclhack.def (hpux11_abs): New.
+ (stdio_va_list): change __va_list__ to __gnuc_va_list.
+ * fixinc/fixincl.x: Rebuild.
+
+2002-10-04 Roger Sayle <roger@eyesopen.com>
+
+ * config/i386/i386.h (processor_costs): Add new fields fadd,
+ fmul, fdiv, fabs, fchs and fsqrt to costs structure.
+ (RTX_COSTS): Use these fields to determine the RTX costs
+ of floating point addition/subtraction, multiplication,
+ division, fabs, negation and square root respectively.
+ * config/i386/i386.c (size_cost): Provide instruction sizes
+ for these new fields.
+ (i386_cost, i486_cost, pentium_cost, pentiumpro_cost,
+ k6_cost, athlon_cost, pentium4_cost): Provide typical cycle
+ counts for these new fields for all x86 processor variants.
+
+2002-10-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * mips.c (mips_const_double_ok): Delete unused variable.
+
+ * gengtype.c (rtx_next): Change type to int.
+
+2002-10-04 Andreas Jaeger <aj@suse.de>
+
+ * config/i386/t-linux64 (MULTILIB_OSDIRNAMES): Fix value.
+
+2002-10-04 Richard Henderson <rth@redhat.com>
+
+ * real.h (SIGNIFICAND_BITS): Add one more word.
+ (CONST_DOUBLE_FORMAT): Accomodate 6 words.
+ * real.c (times_pten): New.
+ (real_to_decimal, real_from_string): Use it.
+ (sticky_rshift_significand): Use & to find modulus.
+ (rshift_significand, lshift_significand): Likewise.
+ (do_divide): Apply sticky bit after normalization.
+ (real_to_decimal, real_to_hexadecimal): Fix sign of Inf and NaN.
+
+2002-10-03 Andreas Bauer <baueran@in.tum.de>
+
+ * doc/tm.texi (FUNCTION_OK_FOR_SIBCALL): Remove.
+ (TARGET_FUNCTION_OK_FOR_SIBCALL): New.
+
+2002-10-03 Andreas Jaeger <aj@suse.de>
+
+ * gengtype.c (adjust_field_rtx_def): Cast variables of type size_t
+ to unsigned long, adjust printf format string.
+ (output_mangled_typename): Likewise.
+
+2002-10-03 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * config/vax/vax.c (vax_output_function_prologue): Use asm_fprintf.
+ * config/vax/vax.h (VAX_FUNCTION_PROFILER_NAME): New.
+ (FUNCTION_PROFILER): Rewrite to use ASM_GENERATE_INTERNAL_LABEL,
+ assemble_name, asm_fprintf, and VAX_FUNCTION_PROFILER_NAME.
+ (ASM_OUTPUT_MI_THUNK): Use asm_fprintf instead of REGISTER_PREFIX.
+ (PRINT_OPERAND_PUNCT_VALID_P): Fix comment.
+ * config/vax/elf.h (FUNCTION_PROFILER): Remove.
+ (VAX_FUNCTION_PROFILER_NAME): Redefine as "__mcount".
+
+2002-10-03 Mark Mitchell <mark@codesourcery.com>
+
+ * doc/invoke.texi (-Wabi): Document mangling bug.
+
+2002-10-04 Alan Modra <amodra@bigpond.net.au>
+
+ * config/rs6000/rs6000.c (rs6000_output_function_epilogue): Use a
+ name for the tbtab label that depends on the function asm name.
+ Don't output tbtab label unless optional_tbtab.
+ (output_mi_thunk): Formatting.
+
+2002-10-03 Richard Henderson <rth@redhat.com>
+
+ * config/m68k/m68k.h (OVERRIDE_OPTIONS): Move additional code ...
+ * config/m68k/m68k.c (override_options): ... here.
+ * config/m68k/m68kelf.h (OVERRIDE_OPTIONS): Remove.
+ * config/m68k/m68kv4.h (OVERRIDE_OPTIONS): Remove.
+ * config/m68k/linux.h (SUBTARGET_OVERRIDE_OPTIONS): Remove.
+ * config/m68k/netbsd-elf.h (SUBTARGET_OVERRIDE_OPTIONS): Remove.
+
+2002-10-03 Richard Henderson <rth@redhat.com>
+
+ * real.h (struct real_value): Use ENUM_BITFIELD.
+
+2002-10-03 Richard Henderson <rth@redhat.com>
+
+ * config/i960/i960.md (call, call_value): Use emit_call_insn.
+
+2002-10-03 Steve Ellcey <sje@cup.hp.com>
+
+ * config/pa/pa64-hpux.h (INIT_ENVIRONMENT): New.
+
+2002-10-03 Steve Ellcey <sje@cup.hp.com>
+
+ * config.gcc (hppa*64*-*-hpux11*): Check gnu_ld.
+ * config/pa/pa.h (MASK_GNU_LD): New.
+ (TARGET_GNU_LD): New.
+ * config/pa/pa64-hpux.h (LINK_SPEC): Set based
+ on gnu-ld and MASK_GNU_LD.
+ (SUBTARGET_SWITCHES): New gnu-ld & hp-ld flags.
+
+Thu Oct 3 23:35:51 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * i386.c (athlon_cost): Fix the move costs.
+
+Thu Oct 3 23:20:58 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * final.c (final): Use symbol name as function name for profiling.
+ * profile.c (get_exec_counts): Likewise.
+ (branch_prob): Likewise.
+
+2002-10-03 Jakub Jelinek <jakub@redhat.com>
+
+ * longlong.h (__udiv_qrnnd): Remove PARAMS from prototype.
+
+2002-10-03 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.c (print_multi_os_directory): New variable.
+ (option_map): Support --print-multi-os-directory.
+ (struct prefix_list): Add os_multilib field.
+ (multilib_os_dir): New variable.
+ (static_specs): Add multilib_options.
+ (find_a_file): Add multilib argument. Search in GCC or OS multilib
+ subdirs if non-zero.
+ (read_specs, execute): Update callers.
+ (find_file): Likewise. Don't prefix name with multilib_dir, instead
+ pass 1 as multilib option.
+ (display_help): Include --print-multi-os-directory.
+ (add_prefix): Add os_multilib argument. Initialize pl->os_multilib.
+ (process_command): Update callers. Handle --print-multi-os-directory.
+ (do_spec_1) ['D']: Use multilib_os_directory if pl->os_multilib is
+ set.
+ (main): Update find_a_file and add_prefix callers.
+ Handle print_multi_os_directory.
+ (struct mdswitchstr): New.
+ (mdswitches, n_mdswitches): New variables.
+ (used_arg): Add MULTILIB_DEFAULT switches too if they are not
+ present on the command line nor their mutually incompatible
+ switches.
+ (default_arg): Optimize.
+ (set_multilib_dir): Compute multilib_os_dir. Initialize mdswitches
+ array.
+ (print_multilib_info): Only print GCC multilib dir name, not OS
+ multilib dirname.
+ * genmultilib: Add osdirnames parameter. Output multilib_options
+ variable. If osdirnames is specified, output dirnames as
+ dirname:osdirname.
+ * mklibgcc.in: Use MULTILIB_OSDIRNAMES, --print-multi-directory
+ and --print-multi-os-directory instead of SHLIB_SLIBDIR_SUFFIXES
+ to compute libgcc_s soname and install path.
+ * Makefile.in (libgcc.mk): Pass MULTILIB_OSDIRNAMES instead of
+ SHLIB_SLIBDIR_SUFFIXES to mklibgcc.
+ (s_mlib): Pass MULTILIB_OSDIRNAMES or nothing as last genmultilib
+ argument.
+
+ * config/sparc/t-linux64 (MULTILIB_OSDIRNAMES): Set.
+ (SHLIB_SLIBDIR_SUFFIXES): Remove.
+ * config/sparc/linux64.h (STARTFILE_SPEC32, STARTFILE_SPEC64,
+ ENDFILE_SPEC32, ENDFILE_SPEC64, ENDFILE_COMMON): Remove.
+ (STARTFILE_SPEC, ENDFILE_SPEC): Don't distinguish between -m32
+ and -m64.
+ * config/sparc/t-sol2-64 (MULTILIB_OSDIRNAMES): Set.
+ (SHLIB_SLIBDIR_SUFFIXES): Remove.
+ * config/sparc/sol2-bi.h (STARTFILE_ARCH64_SPEC): Remove.
+ (STARTFILE_ARCH_SPEC): Remove.
+ * config/i386/t-linux64 (MULTILIB_OSDIRNAMES): Set.
+ (SHLIB_SLIBDIR_SUFFIXES): Remove.
+ * config/i386/linux64.h (STARTFILE_PREFIX_SPEC): Remove.
+ * config/mips/t-iris6 (MULTILIB_OSDIRNAMES): Set.
+ (SHLIB_SLIBDIR_SUFFIXES): Remove.
+
+Thu Oct 3 21:42:20 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * predict.c (choose_function_section): Avoid choice for linkonce functions.
+
+Thu Oct 3 15:15:00 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * i386.md (lea to mul peep2): Fix condition.
+
+2002-10-02 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * pa-linux.h (FUNCTION_OK_FOR_SIBCALL): Delete macro.
+ * pa32-linux.h (FUNCTION_OK_FOR_SIBCALL): Define.
+
+2002-10-02 David Mosberger-Tang <David.Mosberger@acm.org>
+
+ * unwind.h (_Unwind_GetTextRelBase): Mark _C argument with
+ attribute "unused".
+
+ * config/t-libunwind: Mention unwind-sjlj.c.
+ * unwind-libunwind.c: Change #ifdef __USING_LIBUNWIND_EXCEPTIONS__
+ to #ifndef __USING_SJLJ_EXCEPTIONS__.
+
+ * configure.in: Move sjlj-exceptions and --enable-libunwind-exceptions
+ before inclusion of config.gcc, but after configuring the compiler etc.
+ Determine default value for --enable-libunwind-exceptions based on
+ whether the host has a libunwind library (not guaranteed to be correct,
+ but it's a reasonable first guess and can always be overridden with an
+ explicit --enable/disable-libunwind-exceptions.
+ * config.gcc: For target ia64*-*-linux*, mention t-libunwind as a
+ tmake_file when $use_libunwind_exceptions is enabled.
+ * Makefile.in: Update comment: LIB2ADDEH is updated not just by
+ ia64 (e.g., config/t-linux also updates it).
+ * gcc.c (init_spec) [USE_LIBUNWIND_EXCEPTIONS]: Mention -lunwind
+ along with the shared version of libgcc since the latter requires
+ the former.
+ * unwind-libunwind.c: New file.
+ * config/t-libunwind: Ditto.
+
+2002-10-02 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * config.gcc: Remove support for vax-*-vms*.
+ * config/vax/vms.h: Remove.
+ * config/vax/xm-vms.h: Remove.
+ * config/vax/vax-protos.h: Remove VMS-specific code.
+ * config/vax/vax.c: Remove VMS-specific code.
+
+2002-10-02 Richard Henderson <rth@redhat.com>
+
+ PR opt/7124
+ * config/i386/i386.c (ix86_register_move_cost): Increase cost
+ for secondary_memory_needed pairs.
+
+2002-10-02 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * doc/vms.texi: Blow away false include file section.
+
+2002-10-02 Roger Sayle <roger@eyesopen.com>
+
+ PR optimization/6627
+ * toplev.c (force_align_functions_log): New global variable.
+ * flags.h (force_align_functions_log): Add extern prototype.
+ * varasm.c (assemble_start_function): Use it to force minimum
+ function alignment.
+ * config/i386/i386.h (FUNCTION_BOUNDARY): Set the correct
+ minimum function alignment to one byte.
+ (TARGET_PTRMEMFUNC_VBIT_LOCATION): Store the virtual bit in
+ the least significant bit of vtable member function pointers.
+ * tree.h (enum ptrmemfunc_vbit_where_t): Move definition to
+ here from cp/cp-tree.h.
+
+Wed Oct 2 17:01:36 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * i386.c (print_operand_address): Use RIP addressing for offsetted
+ label refs too.
+
+2002-09-30 David S. Miller <davem@redhat.com>
+
+ PR middle-end/7151
+ * config/sparc/sparc.md (movdi_insn_sp32_v9): Accept 'e' regs.
+ (movdi reg/reg split): Match only on sparc32, and v9 when int regs.
+
2002-10-01 Andreas Bauer <baueran@in.tum.de>
* calls.c (expand_call): Remove the `no indirect check'
@@ -173,6 +1587,140 @@
* config/sparc/sparc.h: (FUNCTION_OK_FOR_SIBCALL): Remove.
* config/xtensa/xtensa.h: (FUNCTION_OK_FOR_SIBCALL): Remove.
+2002-10-01 Roger Sayle <roger@eyesopen.com>
+
+ * unroll.c (loop_iterations): Revert 2002-09-08 change.
+
+2002-10-01 Richard Henderson <rth@redhat.com>
+
+ * real.c (real_to_decimal): Crop trailing zeros for DIGITS < 0.
+ (real_to_hexadecimal): Likewise.
+ * print-rtl.c (print_rtx): If we are linked with real.c, don't
+ dump the XWINT fields of a floating point CONST_DOUBLE.
+
+2002-10-01 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * config/vax/elf.h (FUNCTION_PROFILER): Fix __mcount call.
+
+2002-10-01 Richard Henderson <rth@redhat.com>
+
+ * calls.c (precompute_register_parameters): Force non-legitimate
+ constants into pseudos.
+
+2002-10-01 Nick Clifton <nickc@redhat.com>
+
+ * config/rs6000/spe.md (spe_evrlwi): Add missing third operand
+ to assembler template.
+
+2002-10-01 Richard Henderson <rth@redhat.com>
+
+ * dwarf2out.c (loc_descriptor_from_tree): Relax requirement
+ for TLS debug info to !DECL_EXTERNAL.
+
+2002-10-01 Matt Thomas <matt@3am-software.com>
+ Jason Thorpe <thorpej@wasabisystems.com>
+
+ * config.gcc (vax-*-netbsdelf*): Enable configuration.
+ * config/elfos.h (PCC_BITFIELD_TYPE_MATTERS): Define only
+ if not already defined.
+ * config/vax/elf.h: New file.
+ * config/vax/netbsd-elf.h: New file.
+ * config/vax/vax.c: Include "debug.h".
+ (vax_output_function_prologue): Add dwarf2 support. Use
+ MAIN_NAME_P when checking for VMS_TARGET stack adjust.
+ * config/vax/vax.h (CONST_OK_FOR_LETTER_P): Add cases for
+ 'J' [0..63], 'K' [-128..127], 'L' [-32768..32767],
+ 'M' [0..255], 'N' [0..65535], and, 'O' [-63..-1].
+ (VAX_ISTREAM_SYNC): Remove.
+ (INITIALIZE_TRAMPOLINE): Use gen_sync_istream.
+ (JUMP_TABLES_IN_TEXT_SECTION): Define.
+ (ASM_OUTPUT_REG_POP): Use reg_names for the stack pointer.
+ (ASM_OUTPUT_ADDR_VEC_ELT): Use ASM_GENERATE_INTERNAL_LABEL
+ and assemble_name.
+ (ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.
+ (PRINT_OPERAND_PUNCT_VALID_P): Accept '|'.
+ (PRINT_OPERAND): Output REGISTER_PREFIX for '|'.
+ (INCOMING_RETURN_ADDR_RTX): Define.
+ * config/vax/vax.md (VUNSPEC_BLOCKAGE)
+ (VUNSPEC_SYNC_ISTREAM): Define.
+ (blockage): Use VUNSPEC_BLOCKAGE.
+ (sync_istream): New insn.
+
+2002-10-01 Richard Henderson <rth@redhat.com>
+
+ * config/vax/vax.md (call_pop, *call_pop, call_value_pop)
+ (*call_value_pop, call, call_value): Add dwarf2 EH support.
+ (*call): New insn.
+
+2002-10-01 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c/8083
+ * c-typeck.c (build_c_cast): Warn about type punning which breaks
+ type based aliasing.
+
+2002-10-01 Mark Mitchell <mark@codesourcery.com>
+
+ * stor-layout.c (update_alignment_for_field): New function.
+ (place_union_field): Use it.
+ (place_field): Likewise.
+
+2002-10-01 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR other/8077
+ * gcc.c (cc1_options): Add space on -auxbase-strip.
+
+2002-10-01 Jim Wilson <wilson@redhat.com>
+
+ * config/v850/v850.h (EPILOGUE_USES): Define.
+
+2002-09-30 Andrew Haley <aph@redhat.com>
+
+ * flow.c (insn_dead_p): When using non-call-exceptions, don't
+ eliminate insns that may trap.
+ * cse.c (insn_live_p): Likewise.
+
+2002-10-01 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/mips.h (PROCESSOR_R4121): Rename to PROCESSOR_R4120.
+ (TARGET_MIPS4121): Rename to TARGET_MIPS4120.
+ * config/mips/mips.c (mips_cpu_info): Rename vr4121 to vr4120.
+ * config/mips/mips.md: Apply same renaming here.
+
+2002-10-01 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/mips.c (PROCESSOR_R4320, TARGET_MIPS4320): Remove.
+ (GENERATE_MULT3_SI): Remove use of TARGET_MIPS4320.
+ * config/mips/mips.c (mips_cpu_info): Remove vr4320 entry.
+ * config/mips/mips.md (define_attr cpu): Remove r4320.
+ Remove vr4320 scheduler and uses of TARGET_MIPS4320.
+
+2002-10-01 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/mips.c (mips16_strings): New variable.
+ (mips_output_function_epilogue): Clear the SYMBOL_REF_FLAG of every
+ symbol in mips16_strings. Free the list.
+ (mips_encode_section_info): Keep track of local strings.
+
+2002-10-01 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/mips.md (bunge, bltgt, bungt): New define_expands.
+ (sordered_df, sordered_sf): Remove.
+ * config/mips/mips.c (get_float_compare_codes): New fn.
+ (gen_int_relational, gen_conditional_move): Use it.
+
+2002-10-01 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/mips/mips-protos.h (mips_emit_fcc_reload): Declare.
+ * config/mips/mips.h (PREDICATE_CODES): Add fcc_register_operand.
+ * config/mips/mips.c (fcc_register_operand): New function.
+ (mips_emit_fcc_reload): New function, extracted from reload_incc.
+ (override_options): Allow TFmode values in float registers
+ if ISA_HAS_8CC.
+ * cnfig/mips/mips.md (reload_incc): Change destination prediate
+ to fcc_register_operand. Remove misleading source constraint.
+ Use mips_emit_fcc_reload.
+ (reload_outcc): Duplicate reload_incc.
+
2002-09-30 Zack Weinberg <zack@codesourcery.com>
* gcc.c (validate_switches): Handle all new forms of spec
@@ -181,6 +1729,43 @@
(validate_switches_from_spec): ...here.
* mklibgcc.in: Don't @-flag commands to generate .oS files.
+2002-09-30 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * longlong.h: Partially synchronize with GMP-4.1 version:
+ Use i370 definitions also for s390.
+ Add generic definition of umul_ppmm in terms of smul_ppmm.
+ [s390] (umul_ppmm): Remove.
+ [s390] (smul_ppmm): Fix incorrect assembler constraints.
+ [s390] (smul_ppmm, sdiv_qrnnd): Rename __xx to __x.
+
+2002-09-30 Bob Wilson <bob.wilson@acm.org>
+
+ * config/xtensa/xtensa.h (REG_CLASS_NAMES, REG_CLASS_CONTENTS):
+ Add new RL_REGS register class.
+ (PREFERRED_RELOAD_CLASS, PREFERRED_OUTPUT_RELOAD_CLASS):
+ Call xtensa_preferred_reload_class for both input and output reloads.
+ * config/xtensa/xtensa.c (xtensa_regno_to_class): Use new RL_REGS class.
+ (xtensa_preferred_reload_class): Handle output reloads; use RL_REGS
+ instead of either AR_REGS or GR_REGS classes.
+ (xtensa_secondary_reload_class): Use new RL_REGS class.
+ * config/xtensa/xtensa-protos.h (xtensa_preferred_reload_class): Update.
+
+2002-09-30 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * pa.c (hppa_encode_label): Don't drop '*' from function labels.
+ (pa_strip_name_encoding): Strip '@' and '*', in that order.
+ * pa.h (ASM_OUTPUT_LABELREF): Output user_label_prefix except when
+ there is a '*' prefix in NAME.
+
+Mon Sep 30 21:33:23 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * reload.c (push_reload): Handle subregs and secondary memory.
+ * reload1.c (gen_reload): Likewise.
+
+ * jump.c (reg_or_subregno): New function.
+ * rtl.h (reg_or_subregno): Declare
+ * unroll.c (find_splittable_givs): Handle subregs.
+
2002-09-30 Mark Mitchell <mark@codesourcery.com>
* store-layout.c (finish_record_layout): Add free_p parameter.
@@ -997,7 +2582,7 @@ Tue Aug 27 20:07:01 CEST 2002 Jan Hubicka <jh@suse.cz>
(const_float_1_operand): Use dconst1.
* config/mips/mips.md (movsf, movsf_internal1, movsf_internal2,
movdf, movdf_internal1, movdf_internal1a, movdf_internal2):
- Don't allow arbitrary constants; fix predicates and C constraint.
+ Don't allow arbitrary constants; fix predicates and C constraint.
2002-09-20 Neil Booth <neil@daikokuya.co.uk>
@@ -2016,15 +3601,6 @@ Tue Sep 17 13:40:13 2002 Nicola Pero <n.pero@mi.flashnet.it>
* config/h8300/h8300.c (h8300_init_once): Fix formatting.
-2002-09-13 Matt Austern <austern@apple.com>
-
- * cp/cp-tree.h, cp/tree.c: New function non_cast_lvalue_p.
- * cp/call.c: Change call-by-const-reference mechanism to use
- non_cast_lvalue_p when deciding whether the create a temporary.
- We need a temporary when passing, e.g. (long) x by const ref.
- * testsuite/g++.dg/other/constref[12].C: New, regression tests for
- passing a cast expression to a function by const reference.
-
2002-09-13 Richard Henderson <rth@redhat.com>
* config/alpha/alpha.md (attr type): Add callpal.
@@ -2274,7 +3850,7 @@ Tue Sep 17 13:40:13 2002 Nicola Pero <n.pero@mi.flashnet.it>
* mcore.md: Likewise.
* mn10300.c (mask_ok_for_mem_btst): Likewise.
-2002-09-09 Eric Botcazou ebotcazou@libertysurf.fr
+2002-09-09 Eric Botcazou <ebotcazou@libertysurf.fr>
* optabs.c (expand_binop): Minor cleanup.
(expand_twoval_binop): Convert CONST_INTs like in expand_binop.
@@ -2603,7 +4179,7 @@ Tue Sep 17 13:40:13 2002 Nicola Pero <n.pero@mi.flashnet.it>
* cfgcleanup.c (try_crossjump_to_edge): Fix updating of liveness
information.
-2002-09-07 Graham Stott <graham.stott@btinternet.con>
+2002-09-07 Graham Stott <graham.stott@btinternet.com>
* rtlanal.c (dead_or_set_regno_p): Fix typo.
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 65ac2c3ee20..0655f6073bf 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -254,7 +254,7 @@ FIBHEAP_H = $(srcdir)/../include/fibheap.h
# Default native SYSTEM_HEADER_DIR, to be overridden by targets.
NATIVE_SYSTEM_HEADER_DIR = /usr/include
# Default cross SYSTEM_HEADER_DIR, to be overridden by targets.
-CROSS_SYSTEM_HEADER_DIR = $(build_tooldir)/sys-include
+CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@
# autoconf sets SYSTEM_HEADER_DIR to one of the above.
SYSTEM_HEADER_DIR = @SYSTEM_HEADER_DIR@
@@ -266,6 +266,10 @@ STMP_FIXINC = @STMP_FIXINC@
# Test to see whether <limits.h> exists in the system header files.
LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]
+# Directory for prefix to system directories, for
+# each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc.
+TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@
+
target=@target@
target_alias=@target_alias@
xmake_file=@dep_host_xmake_file@
@@ -393,7 +397,7 @@ CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
-finhibit-size-directive -fno-inline-functions -fno-exceptions \
-fno-zero-initialized-in-bss
-# Additional sources to handle exceptions; overridden on ia64.
+# Additional sources to handle exceptions; overridden by targets as needed.
LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
$(srcdir)/unwind-sjlj.c
LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
@@ -735,7 +739,7 @@ C_OBJS = c-parse.o c-lang.o c-pretty-print.o $(C_AND_OBJC_OBJS)
OBJS = alias.o bb-reorder.o bitmap.o builtins.o caller-save.o calls.o \
cfg.o cfganal.o cfgbuild.o cfgcleanup.o cfglayout.o cfgloop.o \
cfgrtl.o combine.o conflict.o convert.o cse.o cselib.o dbxout.o \
- debug.o dependence.o df.o diagnostic.o doloop.o dominance.o \
+ debug.o df.o diagnostic.o doloop.o dominance.o \
dwarf2asm.o dwarf2out.o dwarfout.o emit-rtl.o except.o explow.o \
expmed.o expr.o final.o flow.o fold-const.o function.o gcse.o \
genrtl.o ggc-common.o global.o graph.o gtype-desc.o \
@@ -1028,7 +1032,7 @@ libgcc.mk: config.status Makefile mklibgcc $(LIB2ADD) $(LIB2ADD_ST) xgcc$(exeext
SHLIB_MKMAP_OPTS='$(SHLIB_MKMAP_OPTS)' \
SHLIB_MAPFILES='$(SHLIB_MAPFILES)' \
SHLIB_NM_FLAGS='$(SHLIB_NM_FLAGS)' \
- SHLIB_SLIBDIR_SUFFIXES='$(SHLIB_SLIBDIR_SUFFIXES)' \
+ MULTILIB_OSDIRNAMES='$(MULTILIB_OSDIRNAMES)' \
mkinstalldirs='$(SHELL) $(srcdir)/mkinstalldirs' \
$(SHELL) mklibgcc > tmp-libgcc.mk
mv tmp-libgcc.mk libgcc.mk
@@ -1062,7 +1066,8 @@ libgcc.a: $(LIBGCC_DEPS)
# switches.
multilib.h: s-mlib; @true
s-mlib: $(srcdir)/genmultilib Makefile
- if test @enable_multilib@ = yes; then \
+ if test @enable_multilib@ = yes \
+ || test -n "$(MULTILIB_OSDIRNAMES)"; then \
$(SHELL) $(srcdir)/genmultilib \
"$(MULTILIB_OPTIONS)" \
"$(MULTILIB_DIRNAMES)" \
@@ -1070,9 +1075,12 @@ s-mlib: $(srcdir)/genmultilib Makefile
"$(MULTILIB_EXCEPTIONS)" \
"$(MULTILIB_EXTRA_OPTS)" \
"$(MULTILIB_EXCLUSIONS)" \
+ "$(MULTILIB_OSDIRNAMES)" \
+ "@enable_multilib@" \
> tmp-mlib.h; \
else \
- $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' > tmp-mlib.h; \
+ $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' no \
+ > tmp-mlib.h; \
fi
$(SHELL) $(srcdir)/move-if-change tmp-mlib.h multilib.h
$(STAMP) s-mlib
@@ -1257,6 +1265,7 @@ DRIVER_DEFINES = \
-DDEFAULT_TARGET_MACHINE=\"$(target_alias)\" \
-DSTANDARD_BINDIR_PREFIX=\"$(bindir)/\" \
-DTOOLDIR_BASE_PREFIX=\"$(unlibsubdir)/../\" \
+ @TARGET_SYSTEM_ROOT_DEFINE@ \
`test "X$${SHLIB_LINK}" = "X" || test "@enable_shared@" != "yes" || echo "-DENABLE_SHARED_LIBGCC"` \
`test "X$${SHLIB_MULTILIB}" = "X" || echo "-DNO_SHARED_LIBGCC_MULTILIB"`
@@ -1636,8 +1645,6 @@ regrename.o : regrename.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) insn-config.h \
ifcvt.o : ifcvt.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) toplev.h \
flags.h insn-config.h function.h $(RECOG_H) $(BASIC_BLOCK_H) $(EXPR_H) \
output.h except.h $(TM_P_H) real.h
-dependence.o : dependence.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \
- $(C_COMMON_H) flags.h varray.h $(EXPR_H) $(GGC_H) gt-dependence.h
params.o : params.c $(CONFIG_H) $(SYSTEM_H) $(PARAMS_H) toplev.h
hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) $(HOOKS_H)
@@ -1840,7 +1847,7 @@ GTFILES = $(GCONFIG_H) $(srcdir)/location.h \
$(srcdir)/c-common.h $(srcdir)/c-tree.h \
$(srcdir)/basic-block.h \
$(srcdir)/alias.c $(srcdir)/bitmap.c $(srcdir)/cselib.c \
- $(srcdir)/dependence.c $(srcdir)/dwarf2out.c $(srcdir)/emit-rtl.c \
+ $(srcdir)/dwarf2out.c $(srcdir)/emit-rtl.c \
$(srcdir)/except.c $(srcdir)/explow.c $(srcdir)/expr.c \
$(srcdir)/fold-const.c $(srcdir)/function.c \
$(srcdir)/gcse.c $(srcdir)/integrate.c $(srcdir)/lists.c $(srcdir)/optabs.c \
@@ -1861,7 +1868,7 @@ gt-integrate.h gt-stmt.h gt-tree.h gt-varasm.h gt-emit-rtl.h : s-gtype; @true
gt-explow.h gt-stor-layout.h gt-regclass.h gt-lists.h : s-gtype; @true
gt-alias.h gt-cselib.h gt-fold-const.h gt-gcse.h gt-profile.h : s-gtype; @true
gt-expr.h gt-sdbout.h gt-optabs.h gt-bitmap.h gt-dwarf2out.h : s-gtype ; @true
-gt-ra-build.h gt-reg-stack.h gt-dependence.h : s-gtype ; @true
+gt-ra-build.h gt-reg-stack.h : s-gtype ; @true
gt-c-common.h gt-c-decl.h gt-c-parse.h gt-c-pragma.h : s-gtype; @true
gt-c-objc-common.h gtype-c.h gt-location.h : s-gtype ; @true
@@ -2172,7 +2179,7 @@ PREPROCESSOR_DEFINES = \
-DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_alias)\" \
-DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \
-DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \
- -DCROSS_INCLUDE_DIR=\"$(gcc_tooldir)/sys-include\" \
+ -DCROSS_INCLUDE_DIR=\"$(CROSS_SYSTEM_HEADER_DIR)\" \
-DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\"
LIBCPP_OBJS = cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o cpptrad.o \
@@ -2349,8 +2356,18 @@ fixinc.sh: $(FIXINCSRCDIR)/mkfixinc.sh $(FIXINCSRCDIR)/fixincl.c \
export MAKE srcdir CC CFLAGS LDFLAGS WARN_CFLAGS; cd ./fixinc && \
$(SHELL) $${srcdir}/mkfixinc.sh $(build_canonical) $(target))
+.PHONY: install-gcc-tooldir
+install-gcc-tooldir:
+ $(SHELL) ${srcdir}/mkinstalldirs $(gcc_tooldir)
+
# Build fixed copies of system files.
stmp-fixinc: fixinc.sh gsyslimits.h
+ @if test ! -d ${SYSTEM_HEADER_DIR}; then \
+ echo The directory that should contain system headers does not exist: >&2 ; \
+ echo " ${SYSTEM_HEADER_DIR}" >&2 ; \
+ if test "x${SYSTEM_HEADER_DIR}" = "x${gcc_tooldir}/sys-include"; \
+ then sleep 1; else exit 1; fi; \
+ fi
rm -rf include; mkdir include
-chmod a+rx include
(TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); ${PWD}`; \
@@ -2364,20 +2381,6 @@ stmp-fixinc: fixinc.sh gsyslimits.h
cp $(srcdir)/gsyslimits.h include/syslimits.h; \
fi; \
chmod a+r include/syslimits.h)
-# If $(SYSTEM_HEADER_DIR) is $(build_tooldir)/sys-include, and
-# that directory exists, then make sure that $(libsubdir) exists.
-# This is because cpp is compiled to find $(gcc_tooldir)/include via
-# $(libsubdir)/$(unlibsubdir), which will only work if $(libsubdir)
-# exists.
-# ??? Better would be to use -isystem $(build_tooldir)/sys-include,
-# but fixincludes does not take such arguments.
- if [ "$(SYSTEM_HEADER_DIR)" = "$(build_tooldir)/sys-include" ] \
- && [ -d $(build_tooldir)/sys-include ]; then \
- if [ -d $(libdir) ] ; then true ; else mkdir $(libdir) ; fi; \
- if [ -d $(libdir)/gcc-lib ] ; then true ; else mkdir $(libdir)/gcc-lib; fi; \
- if [ -d $(libdir)/gcc-lib/$(target_alias) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target_alias) ; fi; \
- if [ -d $(libdir)/gcc-lib/$(target_alias)/$(version) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target_alias)/$(version) ; fi; \
- else true; fi
$(STAMP) stmp-fixinc
# Files related to the fixproto script.
@@ -2386,7 +2389,7 @@ stmp-fixinc: fixinc.sh gsyslimits.h
# libiberty.a.
deduced.h: $(GCC_PASSES) $(srcdir)/scan-types.sh stmp-int-hdrs
- if [ -d $(SYSTEM_HEADER_DIR) ]; \
+ if [ -d "$(SYSTEM_HEADER_DIR)" ]; \
then \
CC="$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) -I. -I$(srcdir) -isystem include -isystem ${SYSTEM_HEADER_DIR}"; \
export CC; \
@@ -2452,7 +2455,7 @@ stmp-fixproto: fixhdr.ready fixproto stmp-int-hdrs
FIXPROTO_DEFINES="$(FIXPROTO_DEFINES)"; export FIXPROTO_DEFINES; \
mkinstalldirs="$(SHELL) $(srcdir)/mkinstalldirs"; \
export mkinstalldirs; \
- if [ -d $(SYSTEM_HEADER_DIR) ] ; then \
+ if [ -d "$(SYSTEM_HEADER_DIR)" ]; then \
$(SHELL) ${srcdir}/fixproto include include $(SYSTEM_HEADER_DIR); \
if [ $$? -eq 0 ] ; then true ; else exit 1 ; fi ; \
else true; fi; \
@@ -3036,7 +3039,7 @@ install-mkheaders: stmp-int-hdrs $(STMP_FIXPROTO) install-include-dir \
$(itoolsdir)/fix-header$(build_exeext) ; \
else :; fi
$(INSTALL_PROGRAM) mkheaders $(itoolsdir)/mkheaders
- echo 'SYSTEM_HEADER_DIR="$(SYSTEM_HEADER_DIR)"' \
+ echo 'SYSTEM_HEADER_DIR="'"$(SYSTEM_HEADER_DIR)"'"' \
> $(itoolsdir)/mkheaders.conf
echo 'OTHER_FIXINCLUDES_DIRS="$(OTHER_FIXINCLUDES_DIRS)"' \
>> $(itoolsdir)/mkheaders.conf
@@ -3123,6 +3126,14 @@ site.exp: ./config.status Makefile
fi
echo "set tmpdir $(objdir)/testsuite" >> ./tmp0
@echo "set srcdir \"\$${srcdir}/testsuite\"" >> ./tmp0
+ @if [ "X$(ALT_CXX_UNDER_TEST)" != "X" ] ; then \
+ echo "set ALT_CXX_UNDER_TEST $(ALT_CXX_UNDER_TEST)" >> ./tmp0; \
+ else true; \
+ fi
+ @if [ "X$(COMPAT_OPTIONS)" != "X" ] ; then \
+ echo "set COMPAT_OPTIONS $(COMPAT_OPTIONS)" >> ./tmp0; \
+ else true; \
+ fi
@echo "## All variables above are generated by configure. Do Not Edit ##" >> ./tmp0
@cat ./tmp0 > site.exp
@cat site.bak | sed \
diff --git a/gcc/alias.c b/gcc/alias.c
index 914b1532e5d..ca560b69e8c 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -1,5 +1,5 @@
/* Alias analysis for GNU C
- Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by John Carr (jfc@mit.edu).
This file is part of GCC.
@@ -332,8 +332,8 @@ objects_must_conflict_p (t1, t2)
then they may not conflict. */
if ((t1 != 0 && readonly_fields_p (t1))
|| (t2 != 0 && readonly_fields_p (t2))
- || (t1 != 0 && TYPE_READONLY (t1))
- || (t2 != 0 && TYPE_READONLY (t2)))
+ || (t1 != 0 && lang_hooks.honor_readonly && TYPE_READONLY (t1))
+ || (t2 != 0 && lang_hooks.honor_readonly && TYPE_READONLY (t2)))
return 0;
/* If they are the same type, they must conflict. */
diff --git a/gcc/bitmap.c b/gcc/bitmap.c
index e22a524ce17..21378b5c677 100644
--- a/gcc/bitmap.c
+++ b/gcc/bitmap.c
@@ -706,7 +706,7 @@ bitmap_equal_p (a, b)
bitmap_head c;
int ret;
- c.first = c.current = 0;
+ memset (&c, 0, sizeof (c));
ret = ! bitmap_operation (&c, a, b, BITMAP_XOR);
bitmap_clear (&c);
diff --git a/gcc/c-common.c b/gcc/c-common.c
index b3358c2c1c2..8ceb7ff4201 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -2043,6 +2043,8 @@ c_common_type_for_mode (mode, unsignedp)
return unsignedp ? unsigned_V2DI_type_node : V2DI_type_node;
case V2SImode:
return unsignedp ? unsigned_V2SI_type_node : V2SI_type_node;
+ case V2HImode:
+ return unsignedp ? unsigned_V2HI_type_node : V2HI_type_node;
case V4HImode:
return unsignedp ? unsigned_V4HI_type_node : V4HI_type_node;
case V8QImode:
@@ -4918,6 +4920,7 @@ cb_register_builtins (pfile)
builtin_define_type_max ("__INT_MAX__", integer_type_node, 0);
builtin_define_type_max ("__LONG_MAX__", long_integer_type_node, 1);
builtin_define_type_max ("__LONG_LONG_MAX__", long_long_integer_type_node, 2);
+ builtin_define_type_max ("__WCHAR_MAX__", wchar_type_node, 0);
builtin_define_type_precision ("__CHAR_BIT__", char_type_node);
@@ -4951,7 +4954,7 @@ cb_register_builtins (pfile)
if (fast_math_flags_set_p ())
cpp_define (pfile, "__FAST_MATH__");
- if (flag_no_inline)
+ if (flag_really_no_inline)
cpp_define (pfile, "__NO_INLINE__");
if (flag_signaling_nans)
cpp_define (pfile, "__SUPPORT_SNAN__");
@@ -5097,7 +5100,7 @@ builtin_define_with_hex_fp_value (macro, type, digits, hex_str, fp_suffix)
then print it back out as decimal. */
real_from_string (&real, hex_str);
- real_to_decimal (dec_str, &real, digits);
+ real_to_decimal (dec_str, &real, sizeof (dec_str), digits, 0);
sprintf (buf, "%s=%s%s", macro, dec_str, fp_suffix);
cpp_define (parse_in, buf);
@@ -5601,6 +5604,7 @@ handle_mode_attribute (node, name, args, flags, no_add_attrs)
int len = strlen (p);
enum machine_mode mode = VOIDmode;
tree typefm;
+ tree ptr_type;
if (len > 4 && p[0] == '_' && p[1] == '_'
&& p[len - 1] == '_' && p[len - 2] == '_')
@@ -5630,6 +5634,10 @@ handle_mode_attribute (node, name, args, flags, no_add_attrs)
else if (0 == (typefm = (*lang_hooks.types.type_for_mode)
(mode, TREE_UNSIGNED (type))))
error ("no data type for mode `%s'", p);
+ else if ((TREE_CODE (type) == POINTER_TYPE
+ || TREE_CODE (type) == REFERENCE_TYPE)
+ && !(*targetm.valid_pointer_mode) (mode))
+ error ("invalid pointer mode `%s'", p);
else
{
/* If this is a vector, make sure we either have hardware
@@ -5642,6 +5650,19 @@ handle_mode_attribute (node, name, args, flags, no_add_attrs)
return NULL_TREE;
}
+ if (TREE_CODE (type) == POINTER_TYPE)
+ {
+ ptr_type = build_pointer_type_for_mode (TREE_TYPE (type),
+ mode);
+ *node = ptr_type;
+ }
+ else if (TREE_CODE (type) == REFERENCE_TYPE)
+ {
+ ptr_type = build_reference_type_for_mode (TREE_TYPE (type),
+ mode);
+ *node = ptr_type;
+ }
+ else
*node = typefm;
/* No need to layout the type here. The caller should do this. */
}
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index dba2737182e..e5a43fe0f25 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -2821,15 +2821,9 @@ start_decl (declarator, declspecs, initialized, attributes)
switch (TREE_CODE (decl))
{
case TYPE_DECL:
- /* typedef foo = bar means give foo the same type as bar.
- We haven't parsed bar yet, so `finish_decl' will fix that up.
- Any other case of an initialization in a TYPE_DECL is an error. */
- if (pedantic || list_length (declspecs) > 1)
- {
- error ("typedef `%s' is initialized",
- IDENTIFIER_POINTER (DECL_NAME (decl)));
- initialized = 0;
- }
+ error ("typedef `%s' is initialized (use __typeof__ instead)",
+ IDENTIFIER_POINTER (DECL_NAME (decl)));
+ initialized = 0;
break;
case FUNCTION_DECL:
@@ -2988,16 +2982,7 @@ finish_decl (decl, init, asmspec_tree)
init = 0;
if (init)
- {
- if (TREE_CODE (decl) != TYPE_DECL)
- store_init_value (decl, init);
- else
- {
- /* typedef foo = bar; store the type of bar as the type of foo. */
- TREE_TYPE (decl) = TREE_TYPE (init);
- DECL_INITIAL (decl) = init = 0;
- }
- }
+ store_init_value (decl, init);
/* Deduce size of array from initialization, if not already known */
if (TREE_CODE (type) == ARRAY_TYPE
diff --git a/gcc/c-opts.c b/gcc/c-opts.c
index 4d9e3d2dcf6..2de8faad4ef 100644
--- a/gcc/c-opts.c
+++ b/gcc/c-opts.c
@@ -400,7 +400,7 @@ find_opt (input, lang_flag)
md = (mn + mx) / 2;
opt_len = cl_options[md].opt_len;
- comp = memcmp (input, cl_options[md].opt_text, opt_len);
+ comp = strncmp (input, cl_options[md].opt_text, opt_len);
if (comp < 0)
mx = md;
@@ -443,7 +443,7 @@ find_opt (input, lang_flag)
for (md = md + 1; md < (size_t) N_OPTS; md++)
{
opt_len = cl_options[md].opt_len;
- if (memcmp (input, cl_options[md].opt_text, opt_len))
+ if (strncmp (input, cl_options[md].opt_text, opt_len))
break;
if (input[opt_len] == '\0')
return md;
@@ -515,9 +515,6 @@ c_common_init_options (lang)
warn_pointer_arith = (lang == clk_cplusplus);
if (lang == clk_c)
warn_sign_compare = -1;
-
- /* Mark as "unspecified" (see c_common_post_options). */
- flag_bounds_check = -1;
}
/* Handle one command-line option in (argc, argv).
@@ -702,7 +699,8 @@ c_common_decode_option (argc, argv)
warn_sequence_point = on; /* Was C only. */
warn_sign_compare = on; /* Was C++ only. */
warn_switch = on;
-
+ warn_strict_aliasing = on;
+
/* Only warn about unknown pragmas that are not in system
headers. */
warn_unknown_pragmas = on;
@@ -1373,10 +1371,6 @@ c_common_post_options ()
}
}
- /* If still "unspecified", make it match -fbounded-pointers. */
- if (flag_bounds_check == -1)
- flag_bounds_check = flag_bounded_pointers;
-
/* Special format checking options don't work without -Wformat; warn if
they are used. */
if (warn_format_y2k && !warn_format)
diff --git a/gcc/c-pretty-print.c b/gcc/c-pretty-print.c
index 0961798d6d0..377018ed21e 100644
--- a/gcc/c-pretty-print.c
+++ b/gcc/c-pretty-print.c
@@ -469,7 +469,8 @@ pp_c_real_literal (ppi, r)
c_pretty_printer ppi;
tree r;
{
- REAL_VALUE_TO_DECIMAL (TREE_REAL_CST (r), pp_buffer (ppi)->digit_buffer, -1);
+ real_to_decimal (pp_buffer (ppi)->digit_buffer, &TREE_REAL_CST (r),
+ sizeof (pp_buffer (ppi)->digit_buffer), 0, 1);
pp_identifier (ppi, pp_buffer(ppi)->digit_buffer);
}
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 9a01c8f373a..929541b7017 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -3748,6 +3748,23 @@ build_c_cast (type, expr)
&& !TREE_CONSTANT (value))
warning ("cast to pointer from integer of different size");
+ if (TREE_CODE (type) == POINTER_TYPE
+ && TREE_CODE (otype) == POINTER_TYPE
+ && TREE_CODE (expr) == ADDR_EXPR
+ && DECL_P (TREE_OPERAND (expr, 0))
+ && flag_strict_aliasing && warn_strict_aliasing
+ && !VOID_TYPE_P (TREE_TYPE (type)))
+ {
+ /* Casting the address of a decl to non void pointer. Warn
+ if the cast breaks type based aliasing. */
+ if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
+ warning ("type-punning to incomplete type might break strict-aliasing rules");
+ else if (!alias_sets_conflict_p
+ (get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0))),
+ get_alias_set (TREE_TYPE (type))))
+ warning ("dereferencing type-punned pointer will break strict-aliasing rules");
+ }
+
ovalue = value;
value = convert (type, value);
diff --git a/gcc/calls.c b/gcc/calls.c
index 6425ce03774..0cbdccfc916 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -148,35 +148,6 @@ int stack_arg_under_construction;
static int calls_function PARAMS ((tree, int));
static int calls_function_1 PARAMS ((tree, int));
-/* Nonzero if this is a call to a `const' function. */
-#define ECF_CONST 1
-/* Nonzero if this is a call to a `volatile' function. */
-#define ECF_NORETURN 2
-/* Nonzero if this is a call to malloc or a related function. */
-#define ECF_MALLOC 4
-/* Nonzero if it is plausible that this is a call to alloca. */
-#define ECF_MAY_BE_ALLOCA 8
-/* Nonzero if this is a call to a function that won't throw an exception. */
-#define ECF_NOTHROW 16
-/* Nonzero if this is a call to setjmp or a related function. */
-#define ECF_RETURNS_TWICE 32
-/* Nonzero if this is a call to `longjmp'. */
-#define ECF_LONGJMP 64
-/* Nonzero if this is a syscall that makes a new process in the image of
- the current one. */
-#define ECF_FORK_OR_EXEC 128
-#define ECF_SIBCALL 256
-/* Nonzero if this is a call to "pure" function (like const function,
- but may read memory. */
-#define ECF_PURE 512
-/* Nonzero if this is a call to a function that returns with the stack
- pointer depressed. */
-#define ECF_SP_DEPRESSED 1024
-/* Nonzero if this call is known to always return. */
-#define ECF_ALWAYS_RETURN 2048
-/* Create libcall block around the call. */
-#define ECF_LIBCALL_BLOCK 4096
-
static void emit_call_1 PARAMS ((rtx, tree, tree, HOST_WIDE_INT,
HOST_WIDE_INT, HOST_WIDE_INT, rtx,
rtx, int, rtx, int,
@@ -213,7 +184,6 @@ static rtx emit_library_call_value_1 PARAMS ((int, rtx, rtx,
enum machine_mode,
int, va_list));
static int special_function_p PARAMS ((tree, int));
-static int flags_from_decl_or_type PARAMS ((tree));
static rtx try_to_integrate PARAMS ((tree, tree, rtx,
int, tree, rtx));
static int check_sibcall_argument_overlap_1 PARAMS ((rtx));
@@ -797,7 +767,7 @@ setjmp_call_p (fndecl)
/* Detect flags (function attributes) from the function decl or type node. */
-static int
+int
flags_from_decl_or_type (exp)
tree exp;
{
@@ -872,6 +842,12 @@ precompute_register_parameters (num_actuals, args, reg_parm_seen)
emit_queue ();
}
+ /* 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))
+ args[i].value = force_reg (args[i].mode, args[i].value);
+
/* If we are to promote the function arg to a wider mode,
do it now. */
@@ -2442,9 +2418,10 @@ expand_call (exp, target, ignore)
/* Check whether the target is able to optimize the call
into a sibcall. */
|| !(*targetm.function_ok_for_sibcall) (fndecl, exp)
- || (flags & (ECF_RETURNS_TWICE | ECF_LONGJMP))
- /* Functions that do not return may not be sibcall optimized. */
- || TYPE_VOLATILE (TREE_TYPE (TREE_OPERAND (exp, 0)))
+ /* Functions that do not return exactly once may not be sibcall
+ optimized. */
+ || (flags & (ECF_RETURNS_TWICE | ECF_LONGJMP | ECF_NORETURN))
+ || TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0))))
/* If this function requires more stack slots than the current
function, we cannot change it into a sibling call. */
|| args_size.constant > current_function_args_size
diff --git a/gcc/cfganal.c b/gcc/cfganal.c
index b54619ba624..7aeef93accd 100644
--- a/gcc/cfganal.c
+++ b/gcc/cfganal.c
@@ -1134,7 +1134,7 @@ int
dfs_enumerate_from (bb, reverse, predicate, rslt, rslt_max, data)
basic_block bb;
int reverse;
- bool (*predicate) (basic_block, void *);
+ bool (*predicate) PARAMS ((basic_block, void *));
basic_block *rslt;
int rslt_max;
void *data;
diff --git a/gcc/cfgbuild.c b/gcc/cfgbuild.c
index 97552f9afd9..9ac758b2809 100644
--- a/gcc/cfgbuild.c
+++ b/gcc/cfgbuild.c
@@ -292,7 +292,7 @@ make_edges (label_value_list, min, max, update_p)
/* Heavy use of computed goto in machine-generated code can lead to
nearly fully-connected CFGs. In that case we spend a significant
amount of time searching the edge lists for duplicates. */
- if (forced_labels || label_value_list)
+ if (forced_labels || label_value_list || cfun->max_jumptable_ents > 100)
{
edge_cache = sbitmap_vector_alloc (last_basic_block, last_basic_block);
sbitmap_vector_zero (edge_cache, last_basic_block);
diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c
index c706ed774e4..594eb5cebd7 100644
--- a/gcc/cfgcleanup.c
+++ b/gcc/cfgcleanup.c
@@ -911,8 +911,9 @@ insns_match_p (mode, i1, i2)
equal, they were constructed identically. */
if (GET_CODE (i1) == CALL_INSN
- && !rtx_equal_p (CALL_INSN_FUNCTION_USAGE (i1),
- CALL_INSN_FUNCTION_USAGE (i2)))
+ && (!rtx_equal_p (CALL_INSN_FUNCTION_USAGE (i1),
+ CALL_INSN_FUNCTION_USAGE (i2))
+ || SIBLING_CALL_P (i1) != SIBLING_CALL_P (i2)))
return false;
#ifdef STACK_REGS
diff --git a/gcc/combine.c b/gcc/combine.c
index 9ba13694842..9880faa0454 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -5001,11 +5001,9 @@ simplify_set (x)
/* If we are setting CC0 or if the source is a COMPARE, look for the use of
the comparison result and try to simplify it unless we already have used
undobuf.other_insn. */
- if ((GET_CODE (src) == COMPARE
-#ifdef HAVE_cc0
- || dest == cc0_rtx
-#endif
- )
+ if ((GET_MODE_CLASS (mode) == MODE_CC
+ || GET_CODE (src) == COMPARE
+ || CC0_P (dest))
&& (cc_use = find_single_use (dest, subst_insn, &other_insn)) != 0
&& (undobuf.other_insn == 0 || other_insn == undobuf.other_insn)
&& GET_RTX_CLASS (GET_CODE (*cc_use)) == '<'
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 1ab0f6d4cef..1202fd56782 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -219,7 +219,6 @@ case $machine in
| mn10200-*-* \
| ns32k-*-openbsd* \
| romp-*-openbsd* \
- | vax-*-vms* \
)
if test "x$enable_obsolete" != xyes; then
echo "*** Configuration $machine is obsolete." >&2
@@ -871,6 +870,10 @@ hppa*64*-*-hpux11*)
xmake_file="pa/x-ada"
target_cpu_default="(MASK_PA_11|MASK_PA_20|MASK_GAS)"
+ if test x$gnu_ld = xyes
+ then
+ target_cpu_default="${target_cpu_default}|MASK_GNU_LD"
+ fi
# if [ x$enable_threads = x ]; then
# enable_threads=$have_pthread_h
# fi
@@ -1396,6 +1399,9 @@ ia64*-*-linux*)
tmake_file="t-slibgcc-elf-ver t-linux ia64/t-ia64 ia64/t-glibc"
target_cpu_default="MASK_GNU_AS|MASK_GNU_LD"
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
+ if test x"$use_libunwind_exceptions" = xyes; then
+ tmake_file="$tmake_file t-libunwind"
+ fi
;;
ia64*-*-hpux*)
tm_file="${tm_file} dbxelf.h elfos.h svr4.h ia64/sysv4.h ia64/hpux.h ia64/hpux_longdouble.h"
@@ -2128,7 +2134,7 @@ rs6000-ibm-aix4.[3456789]* | powerpc-ibm-aix4.[3456789]*)
thread_file='aix'
extra_headers=
;;
-rs6000-ibm-aix[56789].* | powerpc-ibm-aix[56789].*)
+rs6000-ibm-aix5.1.* | powerpc-ibm-aix5.1.*)
xm_defines=POSIX
tm_file="${tm_file} rs6000/aix.h rs6000/aix51.h rs6000/xcoff.h"
tmake_file=rs6000/t-aix43
@@ -2136,6 +2142,14 @@ rs6000-ibm-aix[56789].* | powerpc-ibm-aix[56789].*)
thread_file='aix'
extra_headers=
;;
+rs6000-ibm-aix[56789].* | powerpc-ibm-aix[56789].*)
+ xm_defines=POSIX
+ tm_file="${tm_file} rs6000/aix.h rs6000/aix52.h rs6000/xcoff.h"
+ tmake_file=rs6000/t-aix52
+ use_collect2=yes
+ thread_file='aix'
+ extra_headers=
+ ;;
rs6000-ibm-aix*)
xm_defines=POSIX
tm_file="${tm_file} rs6000/aix.h rs6000/xcoff.h"
@@ -2609,7 +2623,8 @@ vax-*-sysv*) # VAXen running system V
xm_defines=POSIX
;;
vax-*-netbsdelf*)
- echo "GCC does not yet support the ${machine} target"; exit 1
+ tm_file="${tm_file} elfos.h netbsd.h netbsd-elf.h vax/elf.h vax/netbsd-elf.h"
+ float_format=vax
;;
vax-*-netbsd*)
tm_file="${tm_file} netbsd.h netbsd-aout.h vax/netbsd.h"
@@ -2624,8 +2639,8 @@ vax-*-ultrix*) # VAXen running ultrix
tm_file="${tm_file} vax/ultrix.h"
;;
vax-*-vms*) # VAXen running VMS
- xm_file=vax/xm-vms.h
- tm_file=vax/vms.h
+ echo "Configuration $machine no longer supported" 1>&2
+ exit 1
;;
vax-*-*) # VAX default entry
;;
@@ -2827,6 +2842,11 @@ mips*-*-*)
tm_defines="TARGET_ENDIAN_DEFAULT=0 $tm_defines"
;;
esac
+ case $tm_file in
+ *mips/elf.h* | *mips/elf64.h*)
+ tm_defines="OBJECT_FORMAT_ELF $tm_defines"
+ ;;
+ esac
if test "x$enable_gofast" = xyes
then
tm_defines="INIT_SUBTARGET_OPTABS=INIT_GOFAST_OPTABS $tm_defines"
diff --git a/gcc/config/alpha/alpha-protos.h b/gcc/config/alpha/alpha-protos.h
index e52e4f461bc..71079eff7e8 100644
--- a/gcc/config/alpha/alpha-protos.h
+++ b/gcc/config/alpha/alpha-protos.h
@@ -141,8 +141,6 @@ extern rtx function_arg PARAMS ((CUMULATIVE_ARGS, enum machine_mode,
tree, int));
extern void alpha_start_function PARAMS ((FILE *, const char *, tree));
extern void alpha_end_function PARAMS ((FILE *, const char *, tree));
-extern void alpha_output_mi_thunk_osf PARAMS ((FILE *, tree,
- HOST_WIDE_INT, tree));
#ifdef REAL_VALUE_TYPE
extern int check_float_value PARAMS ((enum machine_mode,
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index e6d5a34c863..ed1c834fd70 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -197,6 +197,11 @@ static void alpha_write_linkage
PARAMS ((FILE *, const char *, tree));
#endif
+#if TARGET_ABI_OSF
+static void alpha_output_mi_thunk_osf
+ PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
+#endif
+
static struct machine_function * alpha_init_machine_status
PARAMS ((void));
@@ -297,6 +302,11 @@ static void unicosmk_unique_section PARAMS ((tree, int));
#undef TARGET_FUNCTION_OK_FOR_SIBCALL
#define TARGET_FUNCTION_OK_FOR_SIBCALL alpha_function_ok_for_sibcall
+#if TARGET_ABI_OSF
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK alpha_output_mi_thunk_osf
+#endif
+
struct gcc_target targetm = TARGET_INITIALIZER;
/* Parse target option strings. */
@@ -6058,7 +6068,7 @@ alpha_initialize_trampoline (tramp, fnaddr, cxt, fnofs, cxtofs, jmpofs)
#ifdef TRANSFER_FROM_TRAMPOLINE
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__enable_execute_stack"),
- 0, VOIDmode, 1, addr, Pmode);
+ 0, VOIDmode, 1, tramp, Pmode);
#endif
if (jmpofs >= 0)
@@ -6718,10 +6728,11 @@ alpha_sa_mask (imaskP, fmaskP)
unsigned int i;
/* Irritatingly, there are two kinds of thunks -- those created with
- ASM_OUTPUT_MI_THUNK and those with DECL_THUNK_P that go through
- the regular part of the compiler. In the ASM_OUTPUT_MI_THUNK case
- we don't have valid register life info, but assemble_start_function
- wants to output .frame and .mask directives. */
+ TARGET_ASM_OUTPUT_MI_THUNK and those with DECL_THUNK_P that go
+ through the regular part of the compiler. In the
+ TARGET_ASM_OUTPUT_MI_THUNK case we don't have valid register life
+ info, but assemble_start_function wants to output .frame and
+ .mask directives. */
if (current_function_is_thunk && !no_new_pseudos)
{
*imaskP = 0;
@@ -7856,7 +7867,8 @@ alpha_end_function (file, fnname, decl)
}
}
-/* Emit a tail call to FUNCTION after adjusting THIS by DELTA.
+#if TARGET_ABI_OSF
+/* Emit a tail call to FUNCTION after adjusting THIS by DELTA.
In order to avoid the hordes of differences between generated code
with and without TARGET_EXPLICIT_RELOCS, and to avoid duplicating
@@ -7865,7 +7877,7 @@ alpha_end_function (file, fnname, decl)
Not sure why this idea hasn't been explored before... */
-void
+static void
alpha_output_mi_thunk_osf (file, thunk_fndecl, delta, function)
FILE *file;
tree thunk_fndecl ATTRIBUTE_UNUSED;
@@ -7925,6 +7937,7 @@ alpha_output_mi_thunk_osf (file, thunk_fndecl, delta, function)
final (insn, file, 1, 0);
final_end_function ();
}
+#endif /* TARGET_ABI_OSF */
/* Debugging support. */
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h
index 7f6d96e410d..36668b07ae8 100644
--- a/gcc/config/alpha/alpha.h
+++ b/gcc/config/alpha/alpha.h
@@ -2110,8 +2110,3 @@ do { \
/* Generate calls to memcpy, etc., not bcopy, etc. */
#define TARGET_MEM_FUNCTIONS 1
-
-/* Output code to add DELTA to the first argument, and then jump to FUNCTION.
- Used for C++ multiple inheritance. */
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
- alpha_output_mi_thunk_osf (FILE, THUNK_FNDECL, DELTA, FUNCTION)
diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md
index 0352c326392..2f0d3a06aa5 100644
--- a/gcc/config/alpha/alpha.md
+++ b/gcc/config/alpha/alpha.md
@@ -171,7 +171,7 @@ fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi,none"
(match_operand:SI 1 "nonimmediate_operand" "r,m,*f,m")))]
"! TARGET_FIX"
"@
- addl %1,$31,%0
+ addl $31,%1,%0
ldl %0,%1
cvtlq %1,%0
lds %0,%1\;cvtlq %0,%0"
@@ -184,7 +184,7 @@ fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi,none"
(match_operand:SI 1 "nonimmediate_operand" "r,m,*f,*f,m")))]
"TARGET_FIX"
"@
- addl %1,$31,%0
+ addl $31,%1,%0
ldl %0,%1
ftois %1,%0
cvtlq %1,%0
@@ -3222,7 +3222,7 @@ fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi,none"
(match_operand:HI 2 "reg_or_8bit_operand" "rI")))]
"TARGET_MAX"
"maxuw4 %r1,%2,%0"
- [(set_attr "type" "shift")])
+ [(set_attr "type" "mvi")])
(define_expand "smaxdi3"
[(set (match_dup 3)
@@ -6934,12 +6934,12 @@ fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi,none"
and leave the LRU eviction counter pointing to that block. */
static const char * const alt[2][2] = {
{
- "lds $f31,%a0", /* read, evict next */
+ "ldq $31,%a0", /* read, evict next */
"ldl $31,%a0", /* read, evict last */
},
{
"ldt $f31,%a0", /* write, evict next */
- "ldq $31,%a0", /* write, evict last */
+ "lds $f31,%a0", /* write, evict last */
}
};
@@ -7596,9 +7596,9 @@ fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi,none"
})
(define_insn "*pkwb"
- [(set (match_operand:V8QI 0 "register_operand" "")
+ [(set (match_operand:V8QI 0 "register_operand" "=r")
(vec_concat:V8QI
- (truncate:V4QI (match_operand:V4HI 1 "register_operand" ""))
+ (truncate:V4QI (match_operand:V4HI 1 "register_operand" "r"))
(match_operand:V4QI 2 "const0_operand" "")))]
"TARGET_MAX"
"pkwb %r1,%0"
diff --git a/gcc/config/alpha/netbsd.h b/gcc/config/alpha/netbsd.h
index 4769af88745..4dc713ba537 100644
--- a/gcc/config/alpha/netbsd.h
+++ b/gcc/config/alpha/netbsd.h
@@ -75,5 +75,10 @@ Boston, MA 02111-1307, USA. */
%{!shared:crtend%O%s} %{shared:crtendS%O%s}"
+/* Attempt to enable execute permissions on the stack. */
+
+#define TRANSFER_FROM_TRAMPOLINE NETBSD_ENABLE_EXECUTE_STACK
+
+
#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (NetBSD/alpha ELF)");
diff --git a/gcc/config/alpha/vms.h b/gcc/config/alpha/vms.h
index 1838c504599..57d8e697c46 100644
--- a/gcc/config/alpha/vms.h
+++ b/gcc/config/alpha/vms.h
@@ -451,7 +451,7 @@ do { \
#define ASM_PN_FORMAT "%s___%lu"
/* ??? VMS uses different linkage. */
-#undef ASM_OUTPUT_MI_THUNK
+#undef TARGET_ASM_OUTPUT_MI_THUNK
#undef ASM_SPEC
#undef ASM_FINAL_SPEC
diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
index db4dd40cade..58bbaafa03e 100644
--- a/gcc/config/arc/arc.c
+++ b/gcc/config/arc/arc.c
@@ -1744,14 +1744,13 @@ arc_print_operand (file, x, code)
return;
case 'A' :
{
- REAL_VALUE_TYPE d;
char str[30];
if (GET_CODE (x) != CONST_DOUBLE
|| GET_MODE_CLASS (GET_MODE (x)) != MODE_FLOAT)
abort ();
- REAL_VALUE_FROM_CONST_DOUBLE (d, x);
- REAL_VALUE_TO_DECIMAL (d, str, -1);
+
+ real_to_decimal (str, CONST_DOUBLE_REAL_VALUE (x), sizeof (str), 0, 1);
fprintf (file, "%s", str);
return;
}
diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h
index 96a6809ac4f..a1bd85c9f0e 100644
--- a/gcc/config/arm/arm-protos.h
+++ b/gcc/config/arm/arm-protos.h
@@ -1,5 +1,5 @@
/* Prototypes for exported functions defined in arm.c and pe.c
- Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by Richard Earnshaw (rearnsha@arm.com)
Minor hacks by Nick Clifton (nickc@cygnus.com)
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 0e7e5d3c7a1..42c2781b2c1 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -128,6 +128,8 @@ static void arm_encode_section_info PARAMS ((tree, int));
static void aof_globalize_label PARAMS ((FILE *, const char *));
#endif
static void arm_internal_label PARAMS ((FILE *, const char *, unsigned long));
+static void arm_output_mi_thunk PARAMS ((FILE *, tree,
+ HOST_WIDE_INT, tree));
#undef Hint
#undef Mmode
@@ -196,6 +198,9 @@ static void arm_internal_label PARAMS ((FILE *, const char *, unsigned long));
#undef TARGET_FUNCTION_OK_FOR_SIBCALL
#define TARGET_FUNCTION_OK_FOR_SIBCALL arm_function_ok_for_sibcall
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK arm_output_mi_thunk
+
struct gcc_target targetm = TARGET_INITIALIZER;
/* Obstack for minipool constant handling. */
@@ -11154,3 +11159,40 @@ arm_internal_label (stream, prefix, labelno)
}
default_internal_label (stream, prefix, labelno);
}
+
+/* Output code to add DELTA to the first argument, and then jump
+ to FUNCTION. Used for C++ multiple inheritance. */
+
+static void
+arm_output_mi_thunk (file, thunk, delta, function)
+ FILE *file;
+ tree thunk ATTRIBUTE_UNUSED;
+ HOST_WIDE_INT delta;
+ tree function;
+{
+ int mi_delta = delta;
+ const char *const mi_op = mi_delta < 0 ? "sub" : "add";
+ int shift = 0;
+ int this_regno = (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)))
+ ? 1 : 0);
+ if (mi_delta < 0)
+ mi_delta = - mi_delta;
+ while (mi_delta != 0)
+ {
+ if ((mi_delta & (3 << shift)) == 0)
+ shift += 2;
+ else
+ {
+ asm_fprintf (file, "\t%s\t%r, %r, #%d\n",
+ mi_op, this_regno, this_regno,
+ mi_delta & (0xff << shift));
+ mi_delta &= ~(0xff << shift);
+ shift += 8;
+ }
+ }
+ fputs ("\tb\t", file);
+ assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
+ if (NEED_PLT_RELOC)
+ fputs ("(PLT)", file);
+ fputc ('\n', file);
+}
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index 287cce494ea..c852454cc86 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -2670,39 +2670,6 @@ extern int making_const_table;
else \
THUMB_PRINT_OPERAND_ADDRESS (STREAM, X)
-/* Output code to add DELTA to the first argument, and then jump to FUNCTION.
- Used for C++ multiple inheritance. */
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
- do \
- { \
- int mi_delta = (DELTA); \
- const char *const mi_op = mi_delta < 0 ? "sub" : "add"; \
- int shift = 0; \
- int this_regno = (aggregate_value_p (TREE_TYPE (TREE_TYPE (FUNCTION))) \
- ? 1 : 0); \
- if (mi_delta < 0) \
- mi_delta = - mi_delta; \
- while (mi_delta != 0) \
- { \
- if ((mi_delta & (3 << shift)) == 0) \
- shift += 2; \
- else \
- { \
- asm_fprintf (FILE, "\t%s\t%r, %r, #%d\n", \
- mi_op, this_regno, this_regno, \
- mi_delta & (0xff << shift)); \
- mi_delta &= ~(0xff << shift); \
- shift += 8; \
- } \
- } \
- fputs ("\tb\t", FILE); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- if (NEED_PLT_RELOC) \
- fputs ("(PLT)", FILE); \
- fputc ('\n', FILE); \
- } \
- while (0)
-
/* A C expression whose value is RTL representing the value of the return
address for the frame COUNT steps up from the current frame. */
diff --git a/gcc/config/c4x/c4x.c b/gcc/config/c4x/c4x.c
index cbf05679826..354ac76d1fa 100644
--- a/gcc/config/c4x/c4x.c
+++ b/gcc/config/c4x/c4x.c
@@ -1959,11 +1959,10 @@ c4x_print_operand (file, op, letter)
case CONST_DOUBLE:
{
- char str[30];
- REAL_VALUE_TYPE r;
+ char str[64];
- REAL_VALUE_FROM_CONST_DOUBLE (r, op);
- REAL_VALUE_TO_DECIMAL (r, str, -1);
+ real_to_decimal (str, CONST_DOUBLE_REAL_VALUE (op),
+ sizeof (str), 0, 1);
fprintf (file, "%s", str);
}
break;
diff --git a/gcc/config/cris/cris-protos.h b/gcc/config/cris/cris-protos.h
index 4db5a2a54b4..7da668eeefa 100644
--- a/gcc/config/cris/cris-protos.h
+++ b/gcc/config/cris/cris-protos.h
@@ -52,12 +52,6 @@ extern rtx cris_expand_builtin_va_arg PARAMS ((tree, tree));
# endif
#endif /* RTX_CODE */
-#ifdef STDIO_INCLUDED
-# ifdef TREE_CODE
-extern void cris_asm_output_mi_thunk PARAMS ((FILE *, tree, int, tree));
-# endif
-#endif
-
#ifdef GCC_C_PRAGMA_H
extern void cris_pragma_expand_mul PARAMS ((cpp_reader *));
#endif
diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c
index 7edd8bd1916..3d33a724594 100644
--- a/gcc/config/cris/cris.c
+++ b/gcc/config/cris/cris.c
@@ -101,6 +101,10 @@ static void cris_target_asm_function_epilogue
static void cris_encode_section_info PARAMS ((tree, int));
static void cris_operand_lossage PARAMS ((const char *, rtx));
+static void cris_asm_output_mi_thunk
+ PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
+
+
/* The function cris_target_asm_function_epilogue puts the last insn to
output here. It always fits; there won't be a symbol operand. Used in
delay_slots_for_epilogue and function_epilogue. */
@@ -153,6 +157,9 @@ int cris_cpu_version = CRIS_DEFAULT_CPU_VERSION;
#undef TARGET_ENCODE_SECTION_INFO
#define TARGET_ENCODE_SECTION_INFO cris_encode_section_info
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK cris_asm_output_mi_thunk
+
struct gcc_target targetm = TARGET_INITIALIZER;
/* Predicate functions. */
@@ -2570,23 +2577,27 @@ cris_override_options ()
init_machine_status = cris_init_machine_status;
}
-/* The ASM_OUTPUT_MI_THUNK worker. */
+/* The TARGET_ASM_OUTPUT_MI_THUNK worker. */
-void
+static void
cris_asm_output_mi_thunk (stream, thunkdecl, delta, funcdecl)
FILE *stream;
tree thunkdecl ATTRIBUTE_UNUSED;
- int delta;
+ HOST_WIDE_INT delta;
tree funcdecl;
{
if (delta > 0)
- fprintf (stream, "\tadd%s %d,$%s\n",
- ADDITIVE_SIZE_MODIFIER (delta), delta,
- reg_names[CRIS_FIRST_ARG_REG]);
+ {
+ fprintf (stream, "\tadd%s ", ADDITIVE_SIZE_MODIFIER (delta));
+ fprintf (stream, HOST_WIDE_INT_PRINT_DEC, delta);
+ fprintf (stream, ",$%s\n", reg_names[CRIS_FIRST_ARG_REG]);
+ }
else if (delta < 0)
- fprintf (stream, "\tsub%s %d,$%s\n",
- ADDITIVE_SIZE_MODIFIER (-delta), -delta,
- reg_names[CRIS_FIRST_ARG_REG]);
+ {
+ fprintf (stream, "\tsub%s ", ADDITIVE_SIZE_MODIFIER (-delta));
+ fprintf (stream, HOST_WIDE_INT_PRINT_DEC, -delta);
+ fprintf (stream, ",$%s\n", reg_names[CRIS_FIRST_ARG_REG]);
+ }
if (flag_pic)
{
diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h
index 008523d8069..bd044f3a51a 100644
--- a/gcc/config/cris/cris.h
+++ b/gcc/config/cris/cris.h
@@ -1013,10 +1013,6 @@ struct cum_args {int regs;};
#define ELIGIBLE_FOR_EPILOGUE_DELAY(INSN, N) \
cris_eligible_for_epilogue_delay (INSN)
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
- cris_asm_output_mi_thunk(FILE, THUNK_FNDECL, DELTA, FUNCTION)
-
-
/* Node: Profiling */
#define FUNCTION_PROFILER(FILE, LABELNO) \
diff --git a/gcc/config/d30v/d30v.h b/gcc/config/d30v/d30v.h
index 62aab92b01b..4ce9e9577b6 100644
--- a/gcc/config/d30v/d30v.h
+++ b/gcc/config/d30v/d30v.h
@@ -1879,37 +1879,6 @@ typedef struct d30v_stack {
`DELAY_SLOTS_FOR_EPILOGUE'. */
/* #define ELIGIBLE_FOR_EPILOGUE_DELAY(INSN, N) */
-/* A C compound statement that outputs the assembler code for a thunk function,
- used to implement C++ virtual function calls with multiple inheritance. The
- thunk acts as a wrapper around a virtual function, adjusting the implicit
- object parameter before handing control off to the real function.
-
- First, emit code to add the integer DELTA to the location that contains the
- incoming first argument. Assume that this argument contains a pointer, and
- is the one used to pass the `this' pointer in C++. This is the incoming
- argument *before* the function prologue, e.g. `%o0' on a sparc. The
- addition must preserve the values of all other incoming arguments.
-
- After the addition, emit code to jump to FUNCTION, which is a
- `FUNCTION_DECL'. This is a direct pure jump, not a call, and does not touch
- the return address. Hence returning from FUNCTION will return to whoever
- called the current `thunk'.
-
- The effect must be as if FUNCTION had been called directly with the
- adjusted first argument. This macro is responsible for emitting
- all of the code for a thunk function; output_function_prologue()
- and output_function_epilogue() are not invoked.
-
- The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already been
- extracted from it.) It might possibly be useful on some targets, but
- probably not.
-
- If you do not define this macro, the target-independent code in the C++
- frontend will generate a less efficient heavyweight thunk that calls
- FUNCTION instead of jumping to it. The generic approach does not support
- varargs. */
-/* #define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) */
-
/* A C structure for machine-specific, per-function data.
This is added to the cfun structure. */
typedef struct machine_function GTY(())
diff --git a/gcc/config/elfos.h b/gcc/config/elfos.h
index 51f82670772..a8889dcaee2 100644
--- a/gcc/config/elfos.h
+++ b/gcc/config/elfos.h
@@ -48,7 +48,9 @@ Boston, MA 02111-1307, USA. */
/* Writing `int' for a bit-field forces int alignment for the structure. */
+#ifndef PCC_BITFIELD_TYPE_MATTERS
#define PCC_BITFIELD_TYPE_MATTERS 1
+#endif
/* Implicit library calls should use memcpy, not bcopy, etc. */
diff --git a/gcc/config/fp-bit.c b/gcc/config/fp-bit.c
index 10577266777..7ec20ecf9f2 100644
--- a/gcc/config/fp-bit.c
+++ b/gcc/config/fp-bit.c
@@ -79,38 +79,42 @@ Boston, MA 02111-1307, USA. */
#endif
#ifdef EXTENDED_FLOAT_STUBS
-__truncxfsf2 (){ abort(); }
-__extendsfxf2 (){ abort(); }
-__addxf3 (){ abort(); }
-__divxf3 (){ abort(); }
-__eqxf2 (){ abort(); }
-__extenddfxf2 (){ abort(); }
-__gtxf2 (){ abort(); }
-__lexf2 (){ abort(); }
-__ltxf2 (){ abort(); }
-__mulxf3 (){ abort(); }
-__negxf2 (){ abort(); }
-__nexf2 (){ abort(); }
-__subxf3 (){ abort(); }
-__truncxfdf2 (){ abort(); }
-
-__trunctfsf2 (){ abort(); }
-__extendsftf2 (){ abort(); }
-__addtf3 (){ abort(); }
-__divtf3 (){ abort(); }
-__eqtf2 (){ abort(); }
-__extenddftf2 (){ abort(); }
-__gttf2 (){ abort(); }
-__letf2 (){ abort(); }
-__lttf2 (){ abort(); }
-__multf3 (){ abort(); }
-__negtf2 (){ abort(); }
-__netf2 (){ abort(); }
-__subtf3 (){ abort(); }
-__trunctfdf2 (){ abort(); }
-__gexf2 (){ abort(); }
-__fixxfsi (){ abort(); }
-__floatsixf (){ abort(); }
+extern void abort (void);
+void __extendsfxf2 (void) { abort(); }
+void __extenddfxf2 (void) { abort(); }
+void __truncxfdf2 (void) { abort(); }
+void __truncxfsf2 (void) { abort(); }
+void __fixxfsi (void) { abort(); }
+void __floatsixf (void) { abort(); }
+void __addxf3 (void) { abort(); }
+void __subxf3 (void) { abort(); }
+void __mulxf3 (void) { abort(); }
+void __divxf3 (void) { abort(); }
+void __negxf2 (void) { abort(); }
+void __eqxf2 (void) { abort(); }
+void __nexf2 (void) { abort(); }
+void __gtxf2 (void) { abort(); }
+void __gexf2 (void) { abort(); }
+void __lexf2 (void) { abort(); }
+void __ltxf2 (void) { abort(); }
+
+void __extendsftf2 (void) { abort(); }
+void __extenddftf2 (void) { abort(); }
+void __trunctfdf2 (void) { abort(); }
+void __trunctfsf2 (void) { abort(); }
+void __fixtfsi (void) { abort(); }
+void __floatsitf (void) { abort(); }
+void __addtf3 (void) { abort(); }
+void __subtf3 (void) { abort(); }
+void __multf3 (void) { abort(); }
+void __divtf3 (void) { abort(); }
+void __negtf2 (void) { abort(); }
+void __eqtf2 (void) { abort(); }
+void __netf2 (void) { abort(); }
+void __gttf2 (void) { abort(); }
+void __getf2 (void) { abort(); }
+void __letf2 (void) { abort(); }
+void __lttf2 (void) { abort(); }
#else /* !EXTENDED_FLOAT_STUBS, rest of file */
/* IEEE "special" number predicates */
diff --git a/gcc/config/fr30/fr30.c b/gcc/config/fr30/fr30.c
index 0298e7519f0..e163f926614 100644
--- a/gcc/config/fr30/fr30.c
+++ b/gcc/config/fr30/fr30.c
@@ -553,11 +553,10 @@ fr30_print_operand (file, x, code)
output_operand_lossage ("fr30_print_operand: invalid %%F code");
else
{
- REAL_VALUE_TYPE d;
char str[30];
- REAL_VALUE_FROM_CONST_DOUBLE (d, x);
- REAL_VALUE_TO_DECIMAL (d, str, 8);
+ real_to_decimal (str, CONST_DOUBLE_REAL_VALUE (x),
+ sizeof (str), 0, 1);
fputs (str, file);
}
return;
diff --git a/gcc/config/frv/frv-protos.h b/gcc/config/frv/frv-protos.h
index c3f13f5772d..4f5a422cbae 100644
--- a/gcc/config/frv/frv-protos.h
+++ b/gcc/config/frv/frv-protos.h
@@ -113,12 +113,6 @@ extern rtx frv_return_addr_rtx PARAMS ((int, rtx));
extern rtx frv_index_memory PARAMS ((rtx,
enum machine_mode,
int));
-
-#ifdef TREE_CODE
-extern void frv_asm_output_mi_thunk PARAMS ((FILE *, tree, long,
- tree));
-#endif /* TREE_CODE */
-
extern const char *frv_asm_output_opcode
PARAMS ((FILE *, const char *));
extern void frv_final_prescan_insn PARAMS ((rtx, rtx *, int));
diff --git a/gcc/config/frv/frv.c b/gcc/config/frv/frv.c
index a49b1572669..7ef2e1adbfb 100644
--- a/gcc/config/frv/frv.c
+++ b/gcc/config/frv/frv.c
@@ -279,6 +279,7 @@ static void frv_encode_section_info PARAMS ((tree, int));
static void frv_init_builtins PARAMS ((void));
static rtx frv_expand_builtin PARAMS ((tree, rtx, rtx, enum machine_mode, int));
static bool frv_in_small_data_p PARAMS ((tree));
+static void frv_asm_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
/* Initialize the GCC target structure. */
#undef TARGET_ASM_FUNCTION_PROLOGUE
@@ -298,6 +299,9 @@ static bool frv_in_small_data_p PARAMS ((tree));
#undef TARGET_IN_SMALL_DATA_P
#define TARGET_IN_SMALL_DATA_P frv_in_small_data_p
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK frv_asm_output_mi_thunk
+
struct gcc_target targetm = TARGET_INITIALIZER;
/* Given a SYMBOL_REF, return true if it points to small data. */
@@ -1866,11 +1870,11 @@ frv_expand_epilogue (sibcall_p)
FUNCTION instead of jumping to it. The generic approach does not support
varargs. */
-void
+static void
frv_asm_output_mi_thunk (file, thunk_fndecl, delta, function)
FILE *file;
tree thunk_fndecl ATTRIBUTE_UNUSED;
- long delta;
+ HOST_WIDE_INT delta;
tree function;
{
const char *name_func = XSTR (XEXP (DECL_RTL (function), 0), 0);
@@ -1880,12 +1884,16 @@ frv_asm_output_mi_thunk (file, thunk_fndecl, delta, function)
/* Do the add using an addi if possible */
if (IN_RANGE_P (delta, -2048, 2047))
- fprintf (file, "\taddi %s,#%ld,%s\n", name_arg0, delta, name_arg0);
+ fprintf (file, "\taddi %s,#%d,%s\n", name_arg0, (int) delta, name_arg0);
else
{
const char *name_add = reg_names[TEMP_REGNO];
- fprintf (file, "\tsethi%s #hi(%ld),%s\n", parallel, delta, name_add);
- fprintf (file, "\tsetlo #lo(%ld),%s\n", delta, name_add);
+ fprintf (file, "\tsethi%s #hi(", parallel);
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, delta);
+ fprintf (file, "),%s\n", name_add);
+ fprintf (file, "\tsetlo #lo(");
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, delta);
+ fprintf (file, "),%s\n", name_add);
fprintf (file, "\tadd %s,%s,%s\n", name_add, name_arg0, name_arg0);
}
diff --git a/gcc/config/frv/frv.h b/gcc/config/frv/frv.h
index dec2ca92de5..fe2c865ee51 100644
--- a/gcc/config/frv/frv.h
+++ b/gcc/config/frv/frv.h
@@ -748,18 +748,6 @@ extern int g_switch_set; /* whether -G xx was passed. */
Defined in svr4.h. */
#define PCC_BITFIELD_TYPE_MATTERS 1
-/* GNU CC supports two ways of implementing C++ vtables: traditional or with
- so-called "thunks". The flag `-fvtable-thunk' chooses between them. Define
- this macro to be a C expression for the default value of that flag. If
- `DEFAULT_VTABLE_THUNKS' is 0, GNU CC uses the traditional implementation by
- default. The "thunk" implementation is more efficient (especially if you
- have provided an implementation of `ASM_OUTPUT_MI_THUNK', but is not binary
- compatible with code compiled using the traditional implementation. If you
- are writing a new ports, define `DEFAULT_VTABLE_THUNKS' to 1.
-
- If you do not define this macro, the default for `-fvtable-thunk' is 0. */
-#define DEFAULT_VTABLE_THUNKS 1
-
/* Layout of Source Language Data Types. */
@@ -2080,39 +2068,6 @@ struct machine_function GTY(())
adjustment in a function that has no frame pointer, and the compiler knows
this regardless of `EXIT_IGNORE_STACK'. */
#define EXIT_IGNORE_STACK 1
-
-/* A C compound statement that outputs the assembler code for a thunk function,
- used to implement C++ virtual function calls with multiple inheritance. The
- thunk acts as a wrapper around a virtual function, adjusting the implicit
- object parameter before handing control off to the real function.
-
- First, emit code to add the integer DELTA to the location that contains the
- incoming first argument. Assume that this argument contains a pointer, and
- is the one used to pass the `this' pointer in C++. This is the incoming
- argument *before* the function prologue, e.g. `%o0' on a sparc. The
- addition must preserve the values of all other incoming arguments.
-
- After the addition, emit code to jump to FUNCTION, which is a
- `FUNCTION_DECL'. This is a direct pure jump, not a call, and does not touch
- the return address. Hence returning from FUNCTION will return to whoever
- called the current `thunk'.
-
- The effect must be as if FUNCTION had been called directly with the adjusted
- first argument. This macro is responsible for emitting all of the code for
- a thunk function; `FUNCTION_PROLOGUE' and `FUNCTION_EPILOGUE' are not
- invoked.
-
- The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already been
- extracted from it.) It might possibly be useful on some targets, but
- probably not.
-
- If you do not define this macro, the target-independent code in the C++
- frontend will generate a less efficient heavyweight thunk that calls
- FUNCTION instead of jumping to it. The generic approach does not support
- varargs. */
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
-frv_asm_output_mi_thunk (FILE, THUNK_FNDECL, (long)DELTA, FUNCTION)
-
/* Generating Code for Profiling. */
diff --git a/gcc/config/i370/i370.h b/gcc/config/i370/i370.h
index 59fff4338bc..802103315d2 100644
--- a/gcc/config/i370/i370.h
+++ b/gcc/config/i370/i370.h
@@ -1345,21 +1345,21 @@ enum reg_class
else \
{ \
char buf[50]; \
- REAL_VALUE_TYPE rval; \
- REAL_VALUE_FROM_CONST_DOUBLE(rval, XV); \
- REAL_VALUE_TO_DECIMAL (rval, buf, -1); \
if (GET_MODE (XV) == SFmode) \
{ \
mvs_page_lit += 4; \
+ real_to_decimal (buf, CONST_DOUBLE_REAL_VALUE (XV), \
+ sizeof (buf), 0, 1); \
fprintf (FILE, "=E'%s'", buf); \
} \
- else \
- if (GET_MODE (XV) == DFmode) \
+ else if (GET_MODE (XV) == DFmode) \
{ \
mvs_page_lit += 8; \
+ real_to_decimal (buf, CONST_DOUBLE_REAL_VALUE (XV), \
+ sizeof (buf), 0, 1); \
fprintf (FILE, "=D'%s'", buf); \
} \
- else /* VOIDmode !?!? strange but true ... */ \
+ else /* VOIDmode */ \
{ \
mvs_page_lit += 8; \
fprintf (FILE, "=XL8'%08X%08X'", \
@@ -1639,21 +1639,21 @@ enum reg_class
else \
{ \
char buf[50]; \
- REAL_VALUE_TYPE rval; \
- REAL_VALUE_FROM_CONST_DOUBLE(rval, XV); \
- REAL_VALUE_TO_DECIMAL (rval, buf, -1); \
if (GET_MODE (XV) == SFmode) \
{ \
mvs_page_lit += 4; \
+ real_to_decimal (buf, CONST_DOUBLE_REAL_VALUE (XV), \
+ sizeof (buf), 0, 1); \
fprintf (FILE, "=E'%s'", buf); \
} \
- else \
- if (GET_MODE (XV) == DFmode) \
+ else if (GET_MODE (XV) == DFmode) \
{ \
mvs_page_lit += 8; \
+ real_to_decimal (buf, CONST_DOUBLE_REAL_VALUE (XV), \
+ sizeof (buf), 0, 1); \
fprintf (FILE, "=D'%s'", buf); \
} \
- else /* VOIDmode !?!? strange but true ... */ \
+ else /* VOIDmode */ \
{ \
mvs_page_lit += 8; \
fprintf (FILE, "=XL8'%08X%08X'", \
diff --git a/gcc/config/i386/athlon.md b/gcc/config/i386/athlon.md
index d6a52f2cbdd..7113cb88345 100644
--- a/gcc/config/i386/athlon.md
+++ b/gcc/config/i386/athlon.md
@@ -1,34 +1,5 @@
;; AMD Athlon Scheduling
-;; Copyright (C) 2002 Free Software Foundation, Inc.
;;
-;; This file is part of GNU CC.
-;;
-;; GNU CC is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-;;
-;; GNU CC is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with GNU CC; see the file COPYING. If not, write to
-;; the Free Software Foundation, 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA. */
-(define_attr "athlon_decode" "direct,vector"
- (cond [(eq_attr "type" "call,imul,idiv,other,multi,fcmov,fpspc,str,pop,cld,fcmov")
- (const_string "vector")
- (and (eq_attr "type" "push")
- (match_operand 1 "memory_operand" ""))
- (const_string "vector")
- (and (eq_attr "type" "fmov")
- (and (eq_attr "memory" "load,store")
- (eq_attr "mode" "XF")))
- (const_string "vector")]
- (const_string "direct")))
-
;; The Athlon does contain three pipelined FP units, three integer units and
;; three address generation units.
;;
@@ -46,161 +17,419 @@
;; The load/store queue unit is not attached to the schedulers but
;; communicates with all the execution units separately instead.
-(define_function_unit "athlon_vectordec" 1 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "athlon_decode" "vector"))
- 1 1)
-
-(define_function_unit "athlon_directdec" 3 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "athlon_decode" "direct"))
- 1 1)
-
-(define_function_unit "athlon_vectordec" 1 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "athlon_decode" "direct"))
- 1 1 [(eq_attr "athlon_decode" "vector")])
-
-(define_function_unit "athlon_ieu" 3 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "type" "alu1,negnot,alu,icmp,test,imov,imovx,lea,incdec,ishift,rotate,ibr,call,callv,icmov,cld,pop,setcc,push,pop"))
- 1 1)
-
-(define_function_unit "athlon_ieu" 3 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "type" "str"))
- 15 15)
-
-(define_function_unit "athlon_ieu" 3 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "type" "imul"))
- 5 0)
-
-(define_function_unit "athlon_ieu" 3 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "type" "idiv"))
- 42 0)
-
-(define_function_unit "athlon_muldiv" 1 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "type" "imul"))
- 5 0)
-
-(define_function_unit "athlon_muldiv" 1 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "type" "idiv"))
- 42 42)
-
-(define_attr "athlon_fpunits" "none,store,mul,add,muladd,any"
- (cond [(eq_attr "type" "fop,fcmp,fistp")
- (const_string "add")
- (eq_attr "type" "fmul,fdiv,fpspc,fsgn,fcmov")
- (const_string "mul")
- (and (eq_attr "type" "fmov") (eq_attr "memory" "store,both"))
- (const_string "store")
- (and (eq_attr "type" "fmov") (eq_attr "memory" "load"))
- (const_string "any")
+(define_attr "athlon_decode" "direct,vector"
+ (cond [(eq_attr "type" "call,imul,idiv,other,multi,fcmov,fpspc,str,pop,cld")
+ (const_string "vector")
+ (and (eq_attr "type" "push")
+ (match_operand 1 "memory_operand" ""))
+ (const_string "vector")
(and (eq_attr "type" "fmov")
- (ior (match_operand:SI 1 "register_operand" "")
- (match_operand 1 "immediate_operand" "")))
- (const_string "store")
- (eq_attr "type" "fmov")
- (const_string "muladd")]
- (const_string "none")))
-
-;; We use latencies 1 for definitions. This is OK to model colisions
-;; in execution units. The real latencies are modeled in the "fp" pipeline.
-
-;; fsin, fcos: 96-192
-;; fsincos: 107-211
-;; fsqrt: 19 for SFmode, 27 for DFmode, 35 for XFmode.
-(define_function_unit "athlon_fp" 3 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "type" "fpspc"))
- 100 1)
-
-;; 16 cycles for SFmode, 20 for DFmode and 24 for XFmode.
-(define_function_unit "athlon_fp" 3 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "type" "fdiv"))
- 24 1)
-
-(define_function_unit "athlon_fp" 3 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "type" "fop,fmul,fistp"))
- 4 1)
-
-;; XFmode loads are slow.
-;; XFmode store is slow too (8 cycles), but we don't need to model it, because
-;; there are no dependent instructions.
+ (and (eq_attr "memory" "load,store")
+ (eq_attr "mode" "XF")))
+ (const_string "vector")]
+ (const_string "direct")))
-(define_function_unit "athlon_fp" 3 0
- (and (eq_attr "cpu" "athlon")
- (and (eq_attr "type" "fmov")
- (and (eq_attr "memory" "load")
- (eq_attr "mode" "XF"))))
- 10 1)
+;;
+;; decode0 decode1 decode2
+;; \ | /
+;; instruction control unit (72 entry scheduler)
+;; | |
+;; integer scheduler (18) stack map
+;; / | | | | \ stack rename
+;; ieu0 agu0 ieu1 agu1 ieu2 agu2 scheduler
+;; | agu0 | agu1 agu2 register file
+;; | \ | | / | | |
+;; \ /\ | / fadd fmul fstore
+;; \ / \ | / fadd fmul fstore
+;; imul load/store (2x) fadd fmul fstore
-(define_function_unit "athlon_fp" 3 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "type" "fmov,fsgn"))
- 2 1)
+(define_automaton "athlon,athlon_mult,athlon_fp")
+(define_cpu_unit "athlon-decode0" "athlon")
+(define_cpu_unit "athlon-decode1" "athlon")
+(define_cpu_unit "athlon-decode2" "athlon")
+(define_reservation "athlon-vector" "(athlon-decode0 + athlon-decode1
+ + athlon-decode2)")
+(define_reservation "athlon-direct" "(athlon-decode0 | athlon-decode1
+ | athlon-decode2)")
-;; fcmp and ftst instructions
-(define_function_unit "athlon_fp" 3 0
- (and (eq_attr "cpu" "athlon")
- (and (eq_attr "type" "fcmp")
- (eq_attr "athlon_decode" "direct")))
- 3 1)
+;; Agu and ieu unit results in extremly large automatons and
+;; in our approximation they are hardly filled in. Only ieu
+;; unit can, as issue rate is 3 and agu unit is always used
+;; first in the insn reservations. Skip the models.
-;; fcmpi instructions.
-(define_function_unit "athlon_fp" 3 0
- (and (eq_attr "cpu" "athlon")
- (and (eq_attr "type" "fcmp")
- (eq_attr "athlon_decode" "vector")))
- 3 1)
+;(define_cpu_unit "athlon-ieu0" "athlon_ieu")
+;(define_cpu_unit "athlon-ieu1" "athlon_ieu")
+;(define_cpu_unit "athlon-ieu2" "athlon_ieu")
+;(define_reservation "athlon-ieu" "(athlon-ieu0 | athlon-ieu1 | athlon-ieu2)")
+(define_reservation "athlon-ieu" "nothing")
+;(define_cpu_unit "athlon-agu0" "athlon_agu")
+;(define_cpu_unit "athlon-agu1" "athlon_agu")
+;(define_cpu_unit "athlon-agu2" "athlon_agu")
+;(define_reservation "athlon-agu" "(athlon-agu0 | athlon-agu1 | athlon-agu2)")
+(define_reservation "athlon-agu" "nothing,nothing")
-(define_function_unit "athlon_fp" 3 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "type" "fcmov"))
- 7 1)
+(define_cpu_unit "athlon-mult" "athlon_mult")
-(define_function_unit "athlon_fp_mul" 1 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "athlon_fpunits" "mul"))
- 1 1)
+(define_cpu_unit "athlon-load0" "athlon")
+(define_cpu_unit "athlon-load1" "athlon")
+(define_reservation "athlon-load" "athlon-agu,
+ (athlon-load0 | athlon-load1)")
+(define_reservation "athlon-store" "nothing")
-(define_function_unit "athlon_fp_add" 1 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "athlon_fpunits" "add"))
- 1 1)
+;; The three fp units are fully pipelined with latency of 3
+(define_cpu_unit "athlon-fadd" "athlon_fp")
+(define_cpu_unit "athlon-fmul" "athlon_fp")
+(define_cpu_unit "athlon-fstore" "athlon_fp")
+(define_reservation "athlon-fany" "(athlon-fadd | athlon-fmul | athlon-fstore)")
+(define_reservation "athlon-faddmul" "(athlon-fadd | athlon-fmul)")
-(define_function_unit "athlon_fp_muladd" 2 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "athlon_fpunits" "muladd,mul,add"))
- 1 1)
-(define_function_unit "athlon_fp_store" 1 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "athlon_fpunits" "store"))
- 1 1)
+;; Jump instructions are executed in the branch unit compltetely transparent to us
+(define_insn_reservation "athlon_branch" 0
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "ibr"))
+ "athlon-direct")
+(define_insn_reservation "athlon_call" 0
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "call,callv"))
+ "athlon-vector")
-;; We don't need to model the Address Generation Unit, since we don't model
-;; the re-order buffer yet and thus we never schedule more than three operations
-;; at time. Later we may want to experiment with MD_SCHED macros modeling the
-;; decoders independently on the functional units.
+;; Latency of push operation is 3 cycles, but ESP value is available
+;; earlier
+(define_insn_reservation "athlon_push" 2
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "push"))
+ "athlon-direct,nothing,athlon-store")
+(define_insn_reservation "athlon_pop" 4
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "push"))
+ "athlon-vector,athlon-ieu,athlon-load")
+(define_insn_reservation "athlon_leave" 3
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "push"))
+ "athlon-vector,athlon-load")
-;(define_function_unit "athlon_agu" 3 0
-; (and (eq_attr "cpu" "athlon")
-; (and (eq_attr "memory" "!none")
-; (eq_attr "athlon_fpunits" "none")))
-; 1 1)
+;; Lea executes in AGU unit with 2 cycles latency.
+(define_insn_reservation "athlon_lea" 2
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "lea"))
+ "athlon-direct,athlon-agu")
-;; Model load unit to avoid too long sequences of loads. We don't need to
-;; model store queue, since it is hardly going to be bottleneck.
+;; Mul executes in special multiplier unit attached to IEU0
+(define_insn_reservation "athlon_imul" 5
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "imul")
+ (eq_attr "memory" "none,unknown")))
+ "athlon-vector,athlon-ieu,athlon-mult,nothing,nothing,athlon-ieu")
+(define_insn_reservation "athlon_imul_mem" 8
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "imul")
+ (eq_attr "memory" "load,both")))
+ "athlon-vector,athlon-load,athlon-ieu,athlon-mult,nothing,nothing,athlon-ieu")
+(define_insn_reservation "athlon_idiv" 42
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "idiv")
+ (eq_attr "memory" "none,unknown")))
+ "athlon-vector,athlon-ieu*42")
+(define_insn_reservation "athlon_idiv_mem" 45
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "idiv")
+ (eq_attr "memory" "load,both")))
+ "athlon-vector,athlon-load,athlon-ieu*42")
+(define_insn_reservation "athlon_str" 15
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "str")
+ (eq_attr "memory" "load,both,store")))
+ "athlon-vector,athlon-load,athlon-ieu*10")
-(define_function_unit "athlon_load" 2 0
- (and (eq_attr "cpu" "athlon")
- (eq_attr "memory" "load,both"))
- 1 1)
+(define_insn_reservation "athlon_idirect" 1
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "athlon_decode" "direct")
+ (and (eq_attr "unit" "integer,unknown")
+ (eq_attr "memory" "none,unknown"))))
+ "athlon-direct,athlon-ieu")
+(define_insn_reservation "athlon_ivector" 2
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "athlon_decode" "vector")
+ (and (eq_attr "unit" "integer,unknown")
+ (eq_attr "memory" "none,unknown"))))
+ "athlon-vector,athlon-ieu,athlon-ieu")
+(define_insn_reservation "athlon_idirect_loadmov" 3
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "imov")
+ (eq_attr "memory" "load")))
+ "athlon-direct,athlon-load")
+(define_insn_reservation "athlon_idirect_load" 4
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "athlon_decode" "direct")
+ (and (eq_attr "unit" "integer,unknown")
+ (eq_attr "memory" "load"))))
+ "athlon-direct,athlon-load,athlon-ieu")
+(define_insn_reservation "athlon_ivector_load" 6
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "athlon_decode" "vector")
+ (and (eq_attr "unit" "integer,unknown")
+ (eq_attr "memory" "load"))))
+ "athlon-vector,athlon-load,athlon-ieu,athlon-ieu")
+(define_insn_reservation "athlon_idirect_movstore" 1
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "imov")
+ (eq_attr "memory" "store")))
+ "athlon-direct,athlon-agu,athlon-store")
+(define_insn_reservation "athlon_idirect_both" 4
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "athlon_decode" "direct")
+ (and (eq_attr "unit" "integer,unknown")
+ (eq_attr "memory" "both"))))
+ "athlon-direct,athlon-load,athlon-ieu,
+ athlon-store")
+(define_insn_reservation "athlon_ivector_both" 6
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "athlon_decode" "vector")
+ (and (eq_attr "unit" "integer,unknown")
+ (eq_attr "memory" "both"))))
+ "athlon-vector,athlon-load,athlon-ieu,athlon-ieu,
+ athlon-store")
+(define_insn_reservation "athlon_idirect_store" 1
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "athlon_decode" "direct")
+ (and (eq_attr "unit" "integer,unknown")
+ (eq_attr "memory" "store"))))
+ "athlon-direct,athlon-ieu,
+ athlon-store")
+(define_insn_reservation "athlon_ivector_store" 2
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "athlon_decode" "vector")
+ (and (eq_attr "unit" "integer,unknown")
+ (eq_attr "memory" "store"))))
+ "athlon-vector,athlon-ieu,athlon-ieu,
+ athlon-store")
+;; Athlon floatin point unit
+(define_insn_reservation "athlon_fldxf" 12
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "fmov")
+ (and (eq_attr "memory" "load")
+ (eq_attr "mode" "XF"))))
+ "athlon-vector,athlon-fany")
+(define_insn_reservation "athlon_fld" 6
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "fmov")
+ (eq_attr "memory" "load")))
+ "athlon-direct,athlon-fany,nothing,athlon-load")
+(define_insn_reservation "athlon_fstxf" 10
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "fmov")
+ (and (eq_attr "memory" "store,both")
+ (eq_attr "mode" "XF"))))
+ "athlon-vector,athlon-fstore")
+(define_insn_reservation "athlon_fst" 4
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "fmov")
+ (eq_attr "memory" "store,both")))
+ "athlon-direct,athlon-fstore,nothing,athlon-store")
+(define_insn_reservation "athlon_fist" 4
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "fistp"))
+ "athlon-direct,athlon-fstore,nothing")
+(define_insn_reservation "athlon_fmov" 2
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "fmov"))
+ "athlon-direct,athlon-faddmul")
+(define_insn_reservation "athlon_fadd_load" 7
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "fop")
+ (eq_attr "memory" "load")))
+ "athlon-direct,athlon-load,athlon-fadd")
+(define_insn_reservation "athlon_fadd" 4
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "fop"))
+ "athlon-direct,athlon-fadd")
+(define_insn_reservation "athlon_fmul_load" 7
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "fmul")
+ (eq_attr "memory" "load")))
+ "athlon-direct,athlon-load,athlon-fmul")
+(define_insn_reservation "athlon_fmul" 4
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "fmul"))
+ "athlon-direct,athlon-fmul")
+(define_insn_reservation "athlon_fsgn" 2
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "fsgn"))
+ "athlon-direct,athlon-fmul")
+(define_insn_reservation "athlon_fdiv_load" 24
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "fdiv")
+ (eq_attr "memory" "load")))
+ "athlon-direct,athlon-load,athlon-fmul")
+(define_insn_reservation "athlon_fdiv" 24
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "fdiv"))
+ "athlon-direct,athlon-fmul")
+(define_insn_reservation "athlon_fpspc_load" 103
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "fpspc")
+ (eq_attr "memory" "load")))
+ "athlon-vector,athlon-load,athlon-fmul")
+(define_insn_reservation "athlon_fpspc" 100
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "fpspc"))
+ "athlon-vector,athlon-fmul")
+(define_insn_reservation "athlon_fcmov_load" 10
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "fcmov")
+ (eq_attr "memory" "load")))
+ "athlon-vector,athlon-load,athlon-fmul")
+(define_insn_reservation "athlon_fcmov" 7
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "fcmov"))
+ "athlon-vector,athlon-fmul")
+(define_insn_reservation "athlon_fcomi_load" 6
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "fcmp")
+ (and (eq_attr "athlon_decode" "vector")
+ (eq_attr "memory" "load"))))
+ "athlon-vector,athlon-load,athlon-fadd")
+(define_insn_reservation "athlon_fcomi" 3
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "athlon_decode" "vector")
+ (eq_attr "type" "fcmp")))
+ "athlon-vector,athlon-fadd")
+(define_insn_reservation "athlon_fcom_load" 5
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "fcmp")
+ (eq_attr "memory" "load")))
+ "athlon-direct,athlon-load,athlon-fadd")
+(define_insn_reservation "athlon_fcom" 2
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "fcmp"))
+ "athlon-direct,athlon-fadd")
+(define_insn_reservation "athlon_fxch" 2
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "fxch"))
+ "athlon-direct,athlon-fany")
+;; Athlon handle MMX operations in the FPU unit with shorter latencies
+(define_insn_reservation "athlon_mmxsseld" 4
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "mmxmov,ssemov")
+ (eq_attr "memory" "load")))
+ "athlon-direct,athlon-fany,athlon-load")
+(define_insn_reservation "athlon_mmxssest" 2
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "mmxmov,ssemov")
+ (eq_attr "memory" "store,both")))
+ "athlon-direct,athlon-store")
+(define_insn_reservation "athlon_mmxssemov" 2
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "mmxmov,ssemov"))
+ "athlon-direct,athlon-faddmul")
+(define_insn_reservation "athlon_mmxmul_load" 6
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "mmxmul")
+ (eq_attr "memory" "load")))
+ "athlon-direct,athlon-load,athlon-fmul")
+(define_insn_reservation "athlon_mmxmul" 3
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "mmxmul"))
+ "athlon-direct,athlon-fmul")
+(define_insn_reservation "athlon_mmx_load" 5
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "unit" "mmx")
+ (eq_attr "memory" "load")))
+ "athlon-direct,athlon-load,athlon-faddmul")
+(define_insn_reservation "athlon_mmx" 2
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "unit" "mmx"))
+ "athlon-direct,athlon-faddmul")
+;; SSE operations are handled by the i387 unit as well. The latnecy
+;; is same as for i387 operations for scalar operations
+(define_insn_reservation "athlon_sselog_load" 6
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "sselog")
+ (eq_attr "memory" "load")))
+ "athlon-vector,athlon-load,athlon-fmul")
+(define_insn_reservation "athlon_sselog" 3
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "sselog"))
+ "athlon-vector,athlon-fmul")
+(define_insn_reservation "athlon_ssecmp_load" 5
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "ssecmp")
+ (and (eq_attr "mode" "SF,DF")
+ (eq_attr "memory" "load"))))
+ "athlon-vector,athlon-load,athlon-fadd")
+(define_insn_reservation "athlon_ssecmp" 2
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "ssecmp")
+ (eq_attr "mode" "SF,DF")))
+ "athlon-direct,athlon-fadd")
+(define_insn_reservation "athlon_ssecmpvector_load" 6
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "ssecmp")
+ (eq_attr "memory" "load")))
+ "athlon-vector,athlon-fadd")
+(define_insn_reservation "athlon_ssecmpvector" 3
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "ssecmp"))
+ "athlon-vector,athlon-fadd")
+(define_insn_reservation "athlon_sseadd_load" 7
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "sseadd")
+ (and (eq_attr "mode" "SF,DF")
+ (eq_attr "memory" "load"))))
+ "athlon-direct,athlon-load,athlon-fadd")
+(define_insn_reservation "athlon_sseadd" 4
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "sseadd")
+ (eq_attr "mode" "SF,DF")))
+ "athlon-direct,athlon-fadd")
+(define_insn_reservation "athlon_sseaddvector_load" 8
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "sseadd")
+ (eq_attr "memory" "load")))
+ "athlon-vector,athlon-load,athlon-fadd")
+(define_insn_reservation "athlon_sseaddvector" 5
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "sseadd"))
+ "athlon-vector,athlon-fadd")
+(define_insn_reservation "athlon_ssemul_load" 7
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "ssemul")
+ (and (eq_attr "mode" "SF,DF")
+ (eq_attr "memory" "load"))))
+ "athlon-direct,athlon-load,athlon-fmul")
+(define_insn_reservation "athlon_ssemul" 4
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "ssemul")
+ (eq_attr "mode" "SF,DF")))
+ "athlon-direct,athlon-fmul")
+(define_insn_reservation "athlon_ssemulvector_load" 8
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "ssemul")
+ (eq_attr "memory" "load")))
+ "athlon-vector,athlon-load,athlon-fmul")
+(define_insn_reservation "athlon_ssemulvector" 5
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "ssemul"))
+ "athlon-vector,athlon-fmul")
+(define_insn_reservation "athlon_ssediv_load" 19
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "ssediv")
+ (and (eq_attr "mode" "SF,DF")
+ (eq_attr "memory" "load"))))
+ "athlon-direct,athlon-load,athlon-fmul")
+(define_insn_reservation "athlon_ssediv" 16
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "ssediv")
+ (eq_attr "mode" "SF,DF")))
+ "athlon-direct,athlon-fmul")
+(define_insn_reservation "athlon_ssedivvector_load" 32
+ (and (eq_attr "cpu" "athlon")
+ (and (eq_attr "type" "ssediv")
+ (eq_attr "memory" "load")))
+ "athlon-vector,athlon-load,athlon-fmul")
+(define_insn_reservation "athlon_ssedivvector" 29
+ (and (eq_attr "cpu" "athlon")
+ (eq_attr "type" "ssediv"))
+ "athlon-vector,athlon-fmul")
diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h
index f0bdf22cf6a..a8244a38b69 100644
--- a/gcc/config/i386/i386-protos.h
+++ b/gcc/config/i386/i386-protos.h
@@ -63,6 +63,7 @@ extern int initial_exec_symbolic_operand PARAMS ((rtx, enum machine_mode));
extern int local_exec_symbolic_operand PARAMS ((rtx, enum machine_mode));
extern int pic_symbolic_operand PARAMS ((rtx, enum machine_mode));
extern int call_insn_operand PARAMS ((rtx, enum machine_mode));
+extern int sibcall_insn_operand PARAMS ((rtx, enum machine_mode));
extern int constant_call_address_operand PARAMS ((rtx, enum machine_mode));
extern int const0_operand PARAMS ((rtx, enum machine_mode));
extern int const1_operand PARAMS ((rtx, enum machine_mode));
@@ -211,7 +212,6 @@ extern tree ix86_handle_shared_attribute PARAMS ((tree *, tree, tree, int, bool
extern unsigned int i386_pe_section_type_flags PARAMS ((tree, const char *,
int));
extern void i386_pe_asm_named_section PARAMS ((const char *, unsigned int));
-extern void x86_output_mi_thunk PARAMS ((FILE *, int, tree));
extern int x86_field_alignment PARAMS ((tree, int));
#endif
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index b89dcb6b07c..ae79a13fe8e 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -84,7 +84,15 @@ struct processor_costs size_cost = { /* costs for tunning for size */
3, /* MMX or SSE register to integer */
0, /* size of prefetch block */
0, /* number of parallel prefetches */
+ 1, /* Branch cost */
+ 2, /* cost of FADD and FSUB insns. */
+ 2, /* cost of FMUL instruction. */
+ 2, /* cost of FDIV instruction. */
+ 2, /* cost of FABS instruction. */
+ 2, /* cost of FCHS instruction. */
+ 2, /* cost of FSQRT instruction. */
};
+
/* Processor costs (relative to an add) */
static const
struct processor_costs i386_cost = { /* 386 specific costs */
@@ -121,6 +129,13 @@ struct processor_costs i386_cost = { /* 386 specific costs */
3, /* MMX or SSE register to integer */
0, /* size of prefetch block */
0, /* number of parallel prefetches */
+ 1, /* Branch cost */
+ 23, /* cost of FADD and FSUB insns. */
+ 27, /* cost of FMUL instruction. */
+ 88, /* cost of FDIV instruction. */
+ 22, /* cost of FABS instruction. */
+ 24, /* cost of FCHS instruction. */
+ 122, /* cost of FSQRT instruction. */
};
static const
@@ -158,6 +173,13 @@ struct processor_costs i486_cost = { /* 486 specific costs */
3, /* MMX or SSE register to integer */
0, /* size of prefetch block */
0, /* number of parallel prefetches */
+ 1, /* Branch cost */
+ 8, /* cost of FADD and FSUB insns. */
+ 16, /* cost of FMUL instruction. */
+ 73, /* cost of FDIV instruction. */
+ 3, /* cost of FABS instruction. */
+ 3, /* cost of FCHS instruction. */
+ 83, /* cost of FSQRT instruction. */
};
static const
@@ -195,6 +217,13 @@ struct processor_costs pentium_cost = {
3, /* MMX or SSE register to integer */
0, /* size of prefetch block */
0, /* number of parallel prefetches */
+ 2, /* Branch cost */
+ 3, /* cost of FADD and FSUB insns. */
+ 3, /* cost of FMUL instruction. */
+ 39, /* cost of FDIV instruction. */
+ 1, /* cost of FABS instruction. */
+ 1, /* cost of FCHS instruction. */
+ 70, /* cost of FSQRT instruction. */
};
static const
@@ -232,6 +261,13 @@ struct processor_costs pentiumpro_cost = {
3, /* MMX or SSE register to integer */
32, /* size of prefetch block */
6, /* number of parallel prefetches */
+ 2, /* Branch cost */
+ 3, /* cost of FADD and FSUB insns. */
+ 5, /* cost of FMUL instruction. */
+ 56, /* cost of FDIV instruction. */
+ 2, /* cost of FABS instruction. */
+ 2, /* cost of FCHS instruction. */
+ 56, /* cost of FSQRT instruction. */
};
static const
@@ -269,6 +305,13 @@ struct processor_costs k6_cost = {
6, /* MMX or SSE register to integer */
32, /* size of prefetch block */
1, /* number of parallel prefetches */
+ 1, /* Branch cost */
+ 2, /* cost of FADD and FSUB insns. */
+ 2, /* cost of FMUL instruction. */
+ 56, /* cost of FDIV instruction. */
+ 2, /* cost of FABS instruction. */
+ 2, /* cost of FCHS instruction. */
+ 56, /* cost of FSQRT instruction. */
};
static const
@@ -285,38 +328,45 @@ struct processor_costs athlon_cost = {
8, /* "large" insn */
9, /* MOVE_RATIO */
4, /* cost for loading QImode using movzbl */
- {4, 5, 4}, /* cost of loading integer registers
+ {3, 4, 3}, /* cost of loading integer registers
in QImode, HImode and SImode.
Relative to reg-reg move (2). */
- {2, 3, 2}, /* cost of storing integer registers */
+ {3, 4, 3}, /* cost of storing integer registers */
4, /* cost of reg,reg fld/fst */
- {6, 6, 20}, /* cost of loading fp registers
+ {4, 4, 12}, /* cost of loading fp registers
in SFmode, DFmode and XFmode */
- {4, 4, 16}, /* cost of loading integer registers */
+ {6, 6, 8}, /* cost of loading integer registers */
2, /* cost of moving MMX register */
- {2, 2}, /* cost of loading MMX registers
+ {4, 4}, /* cost of loading MMX registers
in SImode and DImode */
- {2, 2}, /* cost of storing MMX registers
+ {4, 4}, /* cost of storing MMX registers
in SImode and DImode */
2, /* cost of moving SSE register */
- {2, 2, 8}, /* cost of loading SSE registers
+ {4, 4, 6}, /* cost of loading SSE registers
in SImode, DImode and TImode */
- {2, 2, 8}, /* cost of storing SSE registers
+ {4, 4, 5}, /* cost of storing SSE registers
in SImode, DImode and TImode */
- 6, /* MMX or SSE register to integer */
+ 5, /* MMX or SSE register to integer */
64, /* size of prefetch block */
6, /* number of parallel prefetches */
+ 2, /* Branch cost */
+ 4, /* cost of FADD and FSUB insns. */
+ 4, /* cost of FMUL instruction. */
+ 24, /* cost of FDIV instruction. */
+ 2, /* cost of FABS instruction. */
+ 2, /* cost of FCHS instruction. */
+ 35, /* cost of FSQRT instruction. */
};
static const
struct processor_costs pentium4_cost = {
1, /* cost of an add instruction */
1, /* cost of a lea instruction */
- 8, /* variable shift costs */
- 8, /* constant shift costs */
- 30, /* cost of starting a multiply */
+ 4, /* variable shift costs */
+ 4, /* constant shift costs */
+ 15, /* cost of starting a multiply */
0, /* cost of multiply per each bit set */
- 112, /* cost of a divide/mod */
+ 56, /* cost of a divide/mod */
1, /* cost of movsx */
1, /* cost of movzx */
16, /* "large" insn */
@@ -343,6 +393,13 @@ struct processor_costs pentium4_cost = {
10, /* MMX or SSE register to integer */
64, /* size of prefetch block */
6, /* number of parallel prefetches */
+ 2, /* Branch cost */
+ 5, /* cost of FADD and FSUB insns. */
+ 7, /* cost of FMUL instruction. */
+ 43, /* cost of FDIV instruction. */
+ 2, /* cost of FABS instruction. */
+ 2, /* cost of FCHS instruction. */
+ 43, /* cost of FSQRT instruction. */
};
const struct processor_costs *ix86_cost = &pentium_cost;
@@ -396,6 +453,13 @@ const int x86_epilogue_using_move = m_ATHLON | m_PENT4 | m_PPRO;
const int x86_decompose_lea = m_PENT4;
const int x86_shift1 = ~m_486;
const int x86_arch_always_fancy_math_387 = m_PENT | m_PPRO | m_ATHLON | m_PENT4;
+const int x86_sse_partial_reg_dependency = m_PENT4 | m_PPRO;
+/* Set for machines where the type and dependencies are resolved on SSE register
+ parts insetad of whole registers, so we may maintain just lower part of
+ scalar values in proper format leaving the upper part undefined. */
+const int x86_sse_partial_regs = m_ATHLON;
+const int x86_sse_typeless_stores = m_ATHLON;
+const int x86_sse_load0_by_pxor = m_PPRO | m_PENT4;
/* In case the avreage insn count for single function invocation is
lower than this constant, emit fast (but longer) prologue and
@@ -701,6 +765,10 @@ static int ix86_variable_issue PARAMS ((FILE *, int, rtx, int));
static int ia32_use_dfa_pipeline_interface PARAMS ((void));
static int ia32_multipass_dfa_lookahead PARAMS ((void));
static void ix86_init_mmx_sse_builtins PARAMS ((void));
+static rtx ia32_this_parameter PARAMS ((tree));
+static void x86_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
+static void x86_output_mi_vcall_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT,
+ HOST_WIDE_INT, tree));
struct ix86_address
{
@@ -722,8 +790,6 @@ static rtx ix86_expand_sse_compare PARAMS ((const struct builtin_description *,
static rtx ix86_expand_unop1_builtin PARAMS ((enum insn_code, tree, rtx));
static rtx ix86_expand_unop_builtin PARAMS ((enum insn_code, tree, rtx, int));
static rtx ix86_expand_binop_builtin PARAMS ((enum insn_code, tree, rtx));
-static rtx ix86_expand_timode_binop_builtin PARAMS ((enum insn_code,
- tree, rtx));
static rtx ix86_expand_store_builtin PARAMS ((enum insn_code, tree));
static rtx safe_vector_operand PARAMS ((rtx, enum machine_mode));
static enum rtx_code ix86_fp_compare_code_to_integer PARAMS ((enum rtx_code));
@@ -741,6 +807,7 @@ static unsigned int ix86_select_alt_pic_regnum PARAMS ((void));
static int ix86_save_reg PARAMS ((unsigned int, int));
static void ix86_compute_frame_layout PARAMS ((struct ix86_frame *));
static int ix86_comp_type_attributes PARAMS ((tree, tree));
+static int ix86_fntype_regparm PARAMS ((tree));
const struct attribute_spec ix86_attribute_table[];
static bool ix86_function_ok_for_sibcall PARAMS ((tree, tree));
static tree ix86_handle_cdecl_attribute PARAMS ((tree *, tree, tree, int, bool *));
@@ -852,6 +919,11 @@ static enum x86_64_reg_class merge_classes PARAMS ((enum x86_64_reg_class,
#define TARGET_HAVE_TLS true
#endif
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK x86_output_mi_thunk
+#undef TARGET_ASM_OUTPUT_MI_VCALL_THUNK
+#define TARGET_ASM_OUTPUT_MI_VCALL_THUNK x86_output_mi_vcall_thunk
+
struct gcc_target targetm = TARGET_INITIALIZER;
/* Sometimes certain combinations of command options do not make
@@ -880,17 +952,16 @@ override_options ()
const int align_jump;
const int align_jump_max_skip;
const int align_func;
- const int branch_cost;
}
const processor_target_table[PROCESSOR_max] =
{
- {&i386_cost, 0, 0, 4, 3, 4, 3, 4, 1},
- {&i486_cost, 0, 0, 16, 15, 16, 15, 16, 1},
- {&pentium_cost, 0, 0, 16, 7, 16, 7, 16, 1},
- {&pentiumpro_cost, 0, 0, 16, 15, 16, 7, 16, 1},
- {&k6_cost, 0, 0, 32, 7, 32, 7, 32, 1},
- {&athlon_cost, 0, 0, 16, 7, 64, 7, 16, 1},
- {&pentium4_cost, 0, 0, 0, 0, 0, 0, 0, 1}
+ {&i386_cost, 0, 0, 4, 3, 4, 3, 4},
+ {&i486_cost, 0, 0, 16, 15, 16, 15, 16},
+ {&pentium_cost, 0, 0, 16, 7, 16, 7, 16},
+ {&pentiumpro_cost, 0, 0, 16, 15, 16, 7, 16},
+ {&k6_cost, 0, 0, 32, 7, 32, 7, 32},
+ {&athlon_cost, 0, 0, 16, 7, 64, 7, 16},
+ {&pentium4_cost, 0, 0, 0, 0, 0, 0, 0}
};
static const char * const cpu_names[] = TARGET_CPU_DEFAULT_NAMES;
@@ -1137,7 +1208,7 @@ override_options ()
}
/* Validate -mbranch-cost= value, or provide default. */
- ix86_branch_cost = processor_target_table[ix86_cpu].branch_cost;
+ ix86_branch_cost = processor_target_table[ix86_cpu].cost->branch_cost;
if (ix86_branch_cost_string)
{
i = atoi (ix86_branch_cost_string);
@@ -1252,6 +1323,10 @@ override_options ()
internal_label_prefix_len = p - internal_label_prefix;
*p = '\0';
}
+
+ /* In 64-bit mode, we do not have support for vcall thunks. */
+ if (TARGET_64BIT)
+ targetm.asm_out.output_mi_vcall_thunk = NULL;
}
void
@@ -1305,13 +1380,54 @@ const struct attribute_spec ix86_attribute_table[] =
static bool
ix86_function_ok_for_sibcall (decl, exp)
tree decl;
- tree exp ATTRIBUTE_UNUSED;
+ tree exp;
{
- return ((decl)
- && (! flag_pic || ! TREE_PUBLIC (decl))
- && (! TARGET_FLOAT_RETURNS_IN_80387
- || ! FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (decl))))
- || FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (cfun->decl))))));
+ /* We don't have 64-bit patterns in place. */
+ if (TARGET_64BIT)
+ return false;
+
+ /* If we are generating position-independent code, we cannot sibcall
+ optimize any indirect call, or a direct call to a global function,
+ as the PLT requires %ebx be live. */
+ if (flag_pic && (!decl || TREE_PUBLIC (decl)))
+ return false;
+
+ /* If we are returning floats on the 80387 register stack, we cannot
+ make a sibcall from a function that doesn't return a float to a
+ function that does; the necessary stack adjustment will not be
+ executed. */
+ if (TARGET_FLOAT_RETURNS_IN_80387
+ && FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (exp)))
+ && !FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (cfun->decl)))))
+ return false;
+
+ /* If this call is indirect, we'll need to be able to use a call-clobbered
+ register for the address of the target function. Make sure that all
+ such registers are not used for passing parameters. */
+ if (!decl && !TARGET_64BIT)
+ {
+ int regparm = ix86_regparm;
+ tree attr, type;
+
+ /* We're looking at the CALL_EXPR, we need the type of the function. */
+ type = TREE_OPERAND (exp, 0); /* pointer expression */
+ type = TREE_TYPE (type); /* pointer type */
+ type = TREE_TYPE (type); /* function type */
+
+ attr = lookup_attribute ("regparm", TYPE_ATTRIBUTES (type));
+ if (attr)
+ regparm = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (attr)));
+
+ if (regparm >= 3)
+ {
+ /* ??? Need to count the actual number of registers to be used,
+ not the possible number of registers. Fix later. */
+ return false;
+ }
+ }
+
+ /* Otherwise okay. That also includes certain types of indirect calls. */
+ return true;
}
/* Handle a "cdecl" or "stdcall" attribute;
@@ -1406,6 +1522,21 @@ ix86_comp_type_attributes (type1, type2)
return 1;
}
+/* Return the regparm value for a fuctio with the indicated TYPE. */
+
+static int
+ix86_fntype_regparm (type)
+ tree type;
+{
+ tree attr;
+
+ attr = lookup_attribute ("regparm", TYPE_ATTRIBUTES (type));
+ if (attr)
+ return TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (attr)));
+ else
+ return ix86_regparm;
+}
+
/* Value is the number of bytes of arguments automatically
popped when returning from a subroutine call.
FUNDECL is the declaration node of the function (as a tree),
@@ -1449,15 +1580,7 @@ ix86_return_pops_args (fundecl, funtype, size)
if (aggregate_value_p (TREE_TYPE (funtype))
&& !TARGET_64BIT)
{
- int nregs = ix86_regparm;
-
- if (funtype)
- {
- tree attr = lookup_attribute ("regparm", TYPE_ATTRIBUTES (funtype));
-
- if (attr)
- nregs = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (attr)));
- }
+ int nregs = ix86_fntype_regparm (funtype);
if (!nregs)
return GET_MODE_SIZE (Pmode);
@@ -1884,8 +2007,7 @@ classify_argument (mode, type, classes, bit_offset)
case V2SImode:
case V4HImode:
case V8QImode:
- classes[0] = X86_64_SSE_CLASS;
- return 1;
+ return 0;
case BLKmode:
case VOIDmode:
return 0;
@@ -3144,6 +3266,32 @@ call_insn_operand (op, mode)
return general_operand (op, Pmode);
}
+/* Test for a valid operand for a call instruction. Don't allow the
+ arg pointer register or virtual regs since they may decay into
+ reg + const, which the patterns can't handle. */
+
+int
+sibcall_insn_operand (op, mode)
+ rtx op;
+ enum machine_mode mode ATTRIBUTE_UNUSED;
+{
+ /* Disallow indirect through a virtual register. This leads to
+ compiler aborts when trying to eliminate them. */
+ if (GET_CODE (op) == REG
+ && (op == arg_pointer_rtx
+ || op == frame_pointer_rtx
+ || (REGNO (op) >= FIRST_PSEUDO_REGISTER
+ && REGNO (op) <= LAST_VIRTUAL_REGISTER)))
+ return 0;
+
+ /* Explicitly allow SYMBOL_REF even if pic. */
+ if (GET_CODE (op) == SYMBOL_REF)
+ return 1;
+
+ /* Otherwise we can only allow register operands. */
+ return register_operand (op, Pmode);
+}
+
int
constant_call_address_operand (op, mode)
rtx op;
@@ -6717,22 +6865,18 @@ print_operand (file, x, code)
/* These float cases don't actually occur as immediate operands. */
else if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) == DFmode)
{
- REAL_VALUE_TYPE r;
char dstr[30];
- REAL_VALUE_FROM_CONST_DOUBLE (r, x);
- REAL_VALUE_TO_DECIMAL (r, dstr, -1);
+ real_to_decimal (dstr, CONST_DOUBLE_REAL_VALUE (x), sizeof (dstr), 0, 1);
fprintf (file, "%s", dstr);
}
else if (GET_CODE (x) == CONST_DOUBLE
&& (GET_MODE (x) == XFmode || GET_MODE (x) == TFmode))
{
- REAL_VALUE_TYPE r;
char dstr[30];
- REAL_VALUE_FROM_CONST_DOUBLE (r, x);
- REAL_VALUE_TO_DECIMAL (r, dstr, -1);
+ real_to_decimal (dstr, CONST_DOUBLE_REAL_VALUE (x), sizeof (dstr), 0, 1);
fprintf (file, "%s", dstr);
}
@@ -6817,7 +6961,8 @@ print_operand_address (file, addr)
|| GET_CODE (addr) == LABEL_REF
|| (GET_CODE (addr) == CONST
&& GET_CODE (XEXP (addr, 0)) == PLUS
- && GET_CODE (XEXP (XEXP (addr, 0), 0)) == SYMBOL_REF
+ && (GET_CODE (XEXP (XEXP (addr, 0), 0)) == SYMBOL_REF
+ || GET_CODE (XEXP (XEXP (addr, 0), 0)) == LABEL_REF)
&& GET_CODE (XEXP (XEXP (addr, 0), 1)) == CONST_INT)))
fputs ("(%rip)", file);
}
@@ -7663,8 +7808,7 @@ ix86_expand_vector_move (mode, operands)
/* Make operand1 a register if it isn't already. */
if ((reload_in_progress | reload_completed) == 0
&& !register_operand (operands[0], mode)
- && !register_operand (operands[1], mode)
- && operands[1] != CONST0_RTX (mode))
+ && !register_operand (operands[1], mode))
{
rtx temp = force_reg (GET_MODE (operands[1]), operands[1]);
emit_move_insn (operands[0], temp);
@@ -9133,12 +9277,9 @@ ix86_expand_int_movcc (operands)
* This is reasonably steep, but branch mispredict costs are
* high on modern cpus, so consider failing only if optimizing
* for space.
- *
- * %%% Parameterize branch_cost on the tuning architecture, then
- * use that. The 80386 couldn't care less about mispredicts.
*/
- if (!optimize_size && !TARGET_CMOVE)
+ if (!TARGET_CMOVE && BRANCH_COST >= 2)
{
if (cf == 0)
{
@@ -9216,7 +9357,7 @@ ix86_expand_int_movcc (operands)
optab op;
rtx var, orig_out, out, tmp;
- if (optimize_size)
+ if (BRANCH_COST >= 2)
return 0; /* FAIL */
/* If one of the two operands is an interesting constant, load a
@@ -11141,13 +11282,6 @@ ix86_adjust_cost (insn, link, dep_insn, cost)
memory = get_attr_memory (insn);
dep_memory = get_attr_memory (dep_insn);
- if (dep_memory == MEMORY_LOAD || dep_memory == MEMORY_BOTH)
- {
- if (dep_insn_type == TYPE_IMOV || dep_insn_type == TYPE_FMOV)
- cost += 2;
- else
- cost += 3;
- }
/* Show ability of reorder buffer to hide latency of load by executing
in parallel with previous instruction in case
previous instruction is not needed to compute the address. */
@@ -11421,7 +11555,7 @@ ix86_variable_issue (dump, sched_verbose, insn, can_issue_more)
static int
ia32_use_dfa_pipeline_interface ()
{
- if (ix86_cpu == PROCESSOR_PENTIUM)
+ if (ix86_cpu == PROCESSOR_PENTIUM || ix86_cpu == PROCESSOR_ATHLON)
return 1;
return 0;
}
@@ -11692,6 +11826,11 @@ x86_initialize_trampoline (tramp, fnaddr, cxt)
if (offset > TRAMPOLINE_SIZE)
abort ();
}
+
+#ifdef TRANSFER_FROM_TRAMPOLINE
+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__enable_execute_stack"),
+ LCT_NORMAL, VOIDmode, 1, tramp, Pmode);
+#endif
}
#define def_builtin(MASK, NAME, TYPE, CODE) \
@@ -11716,30 +11855,30 @@ struct builtin_description
static const struct builtin_description bdesc_comi[] =
{
- { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comieq", IX86_BUILTIN_COMIEQSS, EQ, 0 },
- { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comilt", IX86_BUILTIN_COMILTSS, LT, 0 },
- { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comile", IX86_BUILTIN_COMILESS, LE, 0 },
- { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comigt", IX86_BUILTIN_COMIGTSS, LT, 1 },
- { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comige", IX86_BUILTIN_COMIGESS, LE, 1 },
- { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comineq", IX86_BUILTIN_COMINEQSS, NE, 0 },
- { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomieq", IX86_BUILTIN_UCOMIEQSS, EQ, 0 },
- { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomilt", IX86_BUILTIN_UCOMILTSS, LT, 0 },
- { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomile", IX86_BUILTIN_UCOMILESS, LE, 0 },
- { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomigt", IX86_BUILTIN_UCOMIGTSS, LT, 1 },
- { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomige", IX86_BUILTIN_UCOMIGESS, LE, 1 },
- { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomineq", IX86_BUILTIN_UCOMINEQSS, NE, 0 },
- { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdeq", IX86_BUILTIN_COMIEQSD, EQ, 0 },
- { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdlt", IX86_BUILTIN_COMILTSD, LT, 0 },
- { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdle", IX86_BUILTIN_COMILESD, LE, 0 },
- { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdgt", IX86_BUILTIN_COMIGTSD, LT, 1 },
- { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdge", IX86_BUILTIN_COMIGESD, LE, 1 },
- { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdneq", IX86_BUILTIN_COMINEQSD, NE, 0 },
- { MASK_SSE2, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdeq", IX86_BUILTIN_UCOMIEQSD, EQ, 0 },
- { MASK_SSE2, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdlt", IX86_BUILTIN_UCOMILTSD, LT, 0 },
- { MASK_SSE2, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdle", IX86_BUILTIN_UCOMILESD, LE, 0 },
- { MASK_SSE2, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdgt", IX86_BUILTIN_UCOMIGTSD, LT, 1 },
- { MASK_SSE2, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdge", IX86_BUILTIN_UCOMIGESD, LE, 1 },
- { MASK_SSE2, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdneq", IX86_BUILTIN_UCOMINEQSD, NE, 0 },
+ { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comieq", IX86_BUILTIN_COMIEQSS, UNEQ, 0 },
+ { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comilt", IX86_BUILTIN_COMILTSS, UNLT, 0 },
+ { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comile", IX86_BUILTIN_COMILESS, UNLE, 0 },
+ { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comigt", IX86_BUILTIN_COMIGTSS, GT, 0 },
+ { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comige", IX86_BUILTIN_COMIGESS, GE, 0 },
+ { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comineq", IX86_BUILTIN_COMINEQSS, LTGT, 0 },
+ { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomieq", IX86_BUILTIN_UCOMIEQSS, UNEQ, 0 },
+ { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomilt", IX86_BUILTIN_UCOMILTSS, UNLT, 0 },
+ { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomile", IX86_BUILTIN_UCOMILESS, UNLE, 0 },
+ { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomigt", IX86_BUILTIN_UCOMIGTSS, GT, 0 },
+ { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomige", IX86_BUILTIN_UCOMIGESS, GE, 0 },
+ { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomineq", IX86_BUILTIN_UCOMINEQSS, LTGT, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdeq", IX86_BUILTIN_COMIEQSD, UNEQ, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdlt", IX86_BUILTIN_COMILTSD, UNLT, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdle", IX86_BUILTIN_COMILESD, UNLE, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdgt", IX86_BUILTIN_COMIGTSD, GT, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdge", IX86_BUILTIN_COMIGESD, GE, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdneq", IX86_BUILTIN_COMINEQSD, LTGT, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdeq", IX86_BUILTIN_UCOMIEQSD, UNEQ, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdlt", IX86_BUILTIN_UCOMILTSD, UNLT, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdle", IX86_BUILTIN_UCOMILESD, UNLE, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdgt", IX86_BUILTIN_UCOMIGTSD, GT, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdge", IX86_BUILTIN_UCOMIGESD, GE, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdneq", IX86_BUILTIN_UCOMINEQSD, LTGT, 0 },
};
static const struct builtin_description bdesc_2arg[] =
@@ -11769,14 +11908,10 @@ static const struct builtin_description bdesc_2arg[] =
{ MASK_SSE1, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpeqss", IX86_BUILTIN_CMPEQSS, EQ, 0 },
{ MASK_SSE1, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpltss", IX86_BUILTIN_CMPLTSS, LT, 0 },
{ MASK_SSE1, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpless", IX86_BUILTIN_CMPLESS, LE, 0 },
- { MASK_SSE1, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpgtss", IX86_BUILTIN_CMPGTSS, LT, 1 },
- { MASK_SSE1, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpgess", IX86_BUILTIN_CMPGESS, LE, 1 },
{ MASK_SSE1, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpunordss", IX86_BUILTIN_CMPUNORDSS, UNORDERED, 0 },
{ MASK_SSE1, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpneqss", IX86_BUILTIN_CMPNEQSS, EQ, 0 },
{ MASK_SSE1, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpnltss", IX86_BUILTIN_CMPNLTSS, LT, 0 },
{ MASK_SSE1, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpnless", IX86_BUILTIN_CMPNLESS, LE, 0 },
- { MASK_SSE1, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpngtss", IX86_BUILTIN_CMPNGTSS, LT, 1 },
- { MASK_SSE1, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpngess", IX86_BUILTIN_CMPNGESS, LE, 1 },
{ MASK_SSE1, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpordss", IX86_BUILTIN_CMPORDSS, UNORDERED, 0 },
{ MASK_SSE1, CODE_FOR_sminv4sf3, "__builtin_ia32_minps", IX86_BUILTIN_MINPS, 0, 0 },
@@ -11784,6 +11919,11 @@ static const struct builtin_description bdesc_2arg[] =
{ MASK_SSE1, CODE_FOR_vmsminv4sf3, "__builtin_ia32_minss", IX86_BUILTIN_MINSS, 0, 0 },
{ MASK_SSE1, CODE_FOR_vmsmaxv4sf3, "__builtin_ia32_maxss", IX86_BUILTIN_MAXSS, 0, 0 },
+ { MASK_SSE1, CODE_FOR_sse_andv4sf3, "__builtin_ia32_andps", IX86_BUILTIN_ANDPS, 0, 0 },
+ { MASK_SSE1, CODE_FOR_sse_nandv4sf3, "__builtin_ia32_andnps", IX86_BUILTIN_ANDNPS, 0, 0 },
+ { MASK_SSE1, CODE_FOR_sse_iorv4sf3, "__builtin_ia32_orps", IX86_BUILTIN_ORPS, 0, 0 },
+ { MASK_SSE1, CODE_FOR_sse_xorv4sf3, "__builtin_ia32_xorps", IX86_BUILTIN_XORPS, 0, 0 },
+
{ MASK_SSE1, CODE_FOR_sse_movss, "__builtin_ia32_movss", IX86_BUILTIN_MOVSS, 0, 0 },
{ MASK_SSE1, CODE_FOR_sse_movhlps, "__builtin_ia32_movhlps", IX86_BUILTIN_MOVHLPS, 0, 0 },
{ MASK_SSE1, CODE_FOR_sse_movlhps, "__builtin_ia32_movlhps", IX86_BUILTIN_MOVLHPS, 0, 0 },
@@ -11893,14 +12033,10 @@ static const struct builtin_description bdesc_2arg[] =
{ MASK_SSE2, CODE_FOR_vmmaskcmpv2df3, "__builtin_ia32_cmpeqsd", IX86_BUILTIN_CMPEQSD, EQ, 0 },
{ MASK_SSE2, CODE_FOR_vmmaskcmpv2df3, "__builtin_ia32_cmpltsd", IX86_BUILTIN_CMPLTSD, LT, 0 },
{ MASK_SSE2, CODE_FOR_vmmaskcmpv2df3, "__builtin_ia32_cmplesd", IX86_BUILTIN_CMPLESD, LE, 0 },
- { MASK_SSE2, CODE_FOR_vmmaskcmpv2df3, "__builtin_ia32_cmpgtsd", IX86_BUILTIN_CMPGTSD, LT, 1 },
- { MASK_SSE2, CODE_FOR_vmmaskcmpv2df3, "__builtin_ia32_cmpgesd", IX86_BUILTIN_CMPGESD, LE, 1 },
{ MASK_SSE2, CODE_FOR_vmmaskcmpv2df3, "__builtin_ia32_cmpunordsd", IX86_BUILTIN_CMPUNORDSD, UNORDERED, 0 },
{ MASK_SSE2, CODE_FOR_vmmaskncmpv2df3, "__builtin_ia32_cmpneqsd", IX86_BUILTIN_CMPNEQSD, EQ, 0 },
{ MASK_SSE2, CODE_FOR_vmmaskncmpv2df3, "__builtin_ia32_cmpnltsd", IX86_BUILTIN_CMPNLTSD, LT, 0 },
{ MASK_SSE2, CODE_FOR_vmmaskncmpv2df3, "__builtin_ia32_cmpnlesd", IX86_BUILTIN_CMPNLESD, LE, 0 },
- { MASK_SSE2, CODE_FOR_vmmaskncmpv2df3, "__builtin_ia32_cmpngtsd", IX86_BUILTIN_CMPNGTSD, LT, 1 },
- { MASK_SSE2, CODE_FOR_vmmaskncmpv2df3, "__builtin_ia32_cmpngesd", IX86_BUILTIN_CMPNGESD, LE, 1 },
{ MASK_SSE2, CODE_FOR_vmmaskncmpv2df3, "__builtin_ia32_cmpordsd", IX86_BUILTIN_CMPORDSD, UNORDERED, 0 },
{ MASK_SSE2, CODE_FOR_sminv2df3, "__builtin_ia32_minpd", IX86_BUILTIN_MINPD, 0, 0 },
@@ -11908,10 +12044,10 @@ static const struct builtin_description bdesc_2arg[] =
{ MASK_SSE2, CODE_FOR_vmsminv2df3, "__builtin_ia32_minsd", IX86_BUILTIN_MINSD, 0, 0 },
{ MASK_SSE2, CODE_FOR_vmsmaxv2df3, "__builtin_ia32_maxsd", IX86_BUILTIN_MAXSD, 0, 0 },
- { MASK_SSE2, CODE_FOR_sse2_anddf3, "__builtin_ia32_andpd", IX86_BUILTIN_ANDPD, 0, 0 },
- { MASK_SSE2, CODE_FOR_sse2_nanddf3, "__builtin_ia32_andnpd", IX86_BUILTIN_ANDNPD, 0, 0 },
- { MASK_SSE2, CODE_FOR_sse2_iordf3, "__builtin_ia32_orpd", IX86_BUILTIN_ORPD, 0, 0 },
- { MASK_SSE2, CODE_FOR_sse2_xordf3, "__builtin_ia32_xorpd", IX86_BUILTIN_XORPD, 0, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_andv2df3, "__builtin_ia32_andpd", IX86_BUILTIN_ANDPD, 0, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_nandv2df3, "__builtin_ia32_andnpd", IX86_BUILTIN_ANDNPD, 0, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_iorv2df3, "__builtin_ia32_orpd", IX86_BUILTIN_ORPD, 0, 0 },
+ { MASK_SSE2, CODE_FOR_sse2_xorv2df3, "__builtin_ia32_xorpd", IX86_BUILTIN_XORPD, 0, 0 },
{ MASK_SSE2, CODE_FOR_sse2_movsd, "__builtin_ia32_movsd", IX86_BUILTIN_MOVSD, 0, 0 },
{ MASK_SSE2, CODE_FOR_sse2_unpckhpd, "__builtin_ia32_unpckhpd", IX86_BUILTIN_UNPCKHPD, 0, 0 },
@@ -12416,11 +12552,6 @@ ix86_init_mmx_sse_builtins ()
def_builtin (MASK_SSE1, "__builtin_ia32_cvttps2pi", v2si_ftype_v4sf, IX86_BUILTIN_CVTTPS2PI);
def_builtin (MASK_SSE1, "__builtin_ia32_cvttss2si", int_ftype_v4sf, IX86_BUILTIN_CVTTSS2SI);
- def_builtin (MASK_SSE1, "__builtin_ia32_andps", v4sf_ftype_v4sf_v4sf, IX86_BUILTIN_ANDPS);
- def_builtin (MASK_SSE1, "__builtin_ia32_andnps", v4sf_ftype_v4sf_v4sf, IX86_BUILTIN_ANDNPS);
- def_builtin (MASK_SSE1, "__builtin_ia32_orps", v4sf_ftype_v4sf_v4sf, IX86_BUILTIN_ORPS);
- def_builtin (MASK_SSE1, "__builtin_ia32_xorps", v4sf_ftype_v4sf_v4sf, IX86_BUILTIN_XORPS);
-
def_builtin (MASK_SSE1 | MASK_3DNOW_A, "__builtin_ia32_pextrw", int_ftype_v4hi_int, IX86_BUILTIN_PEXTRW);
def_builtin (MASK_SSE1 | MASK_3DNOW_A, "__builtin_ia32_pinsrw", v4hi_ftype_v4hi_int_int, IX86_BUILTIN_PINSRW);
@@ -12568,10 +12699,12 @@ ix86_init_mmx_sse_builtins ()
def_builtin (MASK_SSE2, "__builtin_ia32_psraw128", v8hi_ftype_v8hi_v2di, IX86_BUILTIN_PSRAW128);
def_builtin (MASK_SSE2, "__builtin_ia32_psrad128", v4si_ftype_v4si_v2di, IX86_BUILTIN_PSRAD128);
+ def_builtin (MASK_SSE2, "__builtin_ia32_pslldqi128", v2di_ftype_v2di_int, IX86_BUILTIN_PSLLDQI128);
def_builtin (MASK_SSE2, "__builtin_ia32_psllwi128", v8hi_ftype_v8hi_int, IX86_BUILTIN_PSLLWI128);
def_builtin (MASK_SSE2, "__builtin_ia32_pslldi128", v4si_ftype_v4si_int, IX86_BUILTIN_PSLLDI128);
def_builtin (MASK_SSE2, "__builtin_ia32_psllqi128", v2di_ftype_v2di_int, IX86_BUILTIN_PSLLQI128);
+ def_builtin (MASK_SSE2, "__builtin_ia32_psrldqi128", v2di_ftype_v2di_int, IX86_BUILTIN_PSRLDQI128);
def_builtin (MASK_SSE2, "__builtin_ia32_psrlwi128", v8hi_ftype_v8hi_int, IX86_BUILTIN_PSRLWI128);
def_builtin (MASK_SSE2, "__builtin_ia32_psrldi128", v4si_ftype_v4si_int, IX86_BUILTIN_PSRLDI128);
def_builtin (MASK_SSE2, "__builtin_ia32_psrlqi128", v2di_ftype_v2di_int, IX86_BUILTIN_PSRLQI128);
@@ -12599,7 +12732,8 @@ safe_vector_operand (x, mode)
: gen_rtx_SUBREG (DImode, x, 0)));
else
emit_insn (gen_sse_clrv4sf (mode == V4SFmode ? x
- : gen_rtx_SUBREG (V4SFmode, x, 0)));
+ : gen_rtx_SUBREG (V4SFmode, x, 0),
+ CONST0_RTX (V4SFmode)));
return x;
}
@@ -12653,45 +12787,6 @@ ix86_expand_binop_builtin (icode, arglist, target)
return target;
}
-/* In type_for_mode we restrict the ability to create TImode types
- to hosts with 64-bit H_W_I. So we've defined the SSE logicals
- to have a V4SFmode signature. Convert them in-place to TImode. */
-
-static rtx
-ix86_expand_timode_binop_builtin (icode, arglist, target)
- enum insn_code icode;
- tree arglist;
- rtx target;
-{
- rtx pat;
- tree arg0 = TREE_VALUE (arglist);
- tree arg1 = TREE_VALUE (TREE_CHAIN (arglist));
- rtx op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
- rtx op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
-
- op0 = gen_lowpart (TImode, op0);
- op1 = gen_lowpart (TImode, op1);
- target = gen_reg_rtx (TImode);
-
- if (! (*insn_data[icode].operand[1].predicate) (op0, TImode))
- op0 = copy_to_mode_reg (TImode, op0);
- if (! (*insn_data[icode].operand[2].predicate) (op1, TImode))
- op1 = copy_to_mode_reg (TImode, op1);
-
- /* In the commutative cases, both op0 and op1 are nonimmediate_operand,
- yet one of the two must not be a memory. This is normally enforced
- by expanders, but we didn't bother to create one here. */
- if (GET_CODE (op0) == MEM && GET_CODE (op1) == MEM)
- op0 = copy_to_mode_reg (TImode, op0);
-
- pat = GEN_FCN (icode) (target, op0, op1);
- if (! pat)
- return 0;
- emit_insn (pat);
-
- return gen_lowpart (V4SFmode, target);
-}
-
/* Subroutine of ix86_expand_builtin to take care of stores. */
static rtx
@@ -12889,14 +12984,14 @@ ix86_expand_sse_comi (d, arglist, target)
op1 = copy_to_mode_reg (mode1, op1);
op2 = gen_rtx_fmt_ee (comparison, mode0, op0, op1);
- pat = GEN_FCN (d->icode) (op0, op1, op2);
+ pat = GEN_FCN (d->icode) (op0, op1);
if (! pat)
return 0;
emit_insn (pat);
emit_insn (gen_rtx_SET (VOIDmode,
gen_rtx_STRICT_LOW_PART (VOIDmode, target),
gen_rtx_fmt_ee (comparison, QImode,
- gen_rtx_REG (CCmode, FLAGS_REG),
+ SET_DEST (pat),
const0_rtx)));
return SUBREG_REG (target);
@@ -13037,19 +13132,6 @@ ix86_expand_builtin (exp, target, subtarget, mode, ignore)
case IX86_BUILTIN_RCPSS:
return ix86_expand_unop1_builtin (CODE_FOR_vmrcpv4sf2, arglist, target);
- case IX86_BUILTIN_ANDPS:
- return ix86_expand_timode_binop_builtin (CODE_FOR_sse_andti3,
- arglist, target);
- case IX86_BUILTIN_ANDNPS:
- return ix86_expand_timode_binop_builtin (CODE_FOR_sse_nandti3,
- arglist, target);
- case IX86_BUILTIN_ORPS:
- return ix86_expand_timode_binop_builtin (CODE_FOR_sse_iorti3,
- arglist, target);
- case IX86_BUILTIN_XORPS:
- return ix86_expand_timode_binop_builtin (CODE_FOR_sse_xorti3,
- arglist, target);
-
case IX86_BUILTIN_LOADAPS:
return ix86_expand_unop_builtin (CODE_FOR_sse_movaps, arglist, target, 1);
@@ -13208,6 +13290,35 @@ ix86_expand_builtin (exp, target, subtarget, mode, ignore)
emit_insn (pat);
return target;
+ case IX86_BUILTIN_PSLLDQI128:
+ case IX86_BUILTIN_PSRLDQI128:
+ icode = ( fcode == IX86_BUILTIN_PSLLDQI128 ? CODE_FOR_sse2_ashlti3
+ : CODE_FOR_sse2_lshrti3);
+ arg0 = TREE_VALUE (arglist);
+ arg1 = TREE_VALUE (TREE_CHAIN (arglist));
+ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
+ op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
+ tmode = insn_data[icode].operand[0].mode;
+ mode1 = insn_data[icode].operand[1].mode;
+ mode2 = insn_data[icode].operand[2].mode;
+
+ if (! (*insn_data[icode].operand[1].predicate) (op0, mode1))
+ {
+ op0 = copy_to_reg (op0);
+ op0 = simplify_gen_subreg (mode1, op0, GET_MODE (op0), 0);
+ }
+ if (! (*insn_data[icode].operand[2].predicate) (op1, mode2))
+ {
+ error ("shift must be an immediate");
+ return const0_rtx;
+ }
+ target = gen_reg_rtx (V2DImode);
+ pat = GEN_FCN (icode) (simplify_gen_subreg (tmode, target, V2DImode, 0), op0, op1);
+ if (! pat)
+ return 0;
+ emit_insn (pat);
+ return target;
+
case IX86_BUILTIN_FEMMS:
emit_insn (gen_femms ());
return NULL_RTX;
@@ -13289,7 +13400,7 @@ ix86_expand_builtin (exp, target, subtarget, mode, ignore)
case IX86_BUILTIN_SSE_ZERO:
target = gen_reg_rtx (V4SFmode);
- emit_insn (gen_sse_clrv4sf (target));
+ emit_insn (gen_sse_clrv4sf (target, CONST0_RTX (V4SFmode)));
return target;
case IX86_BUILTIN_MMX_ZERO:
@@ -13354,6 +13465,11 @@ ix86_expand_builtin (exp, target, subtarget, mode, ignore)
case IX86_BUILTIN_STORERPD:
return ix86_expand_store_builtin (CODE_FOR_sse2_movapd, arglist);
+ case IX86_BUILTIN_CLRPD:
+ target = gen_reg_rtx (V2DFmode);
+ emit_insn (gen_sse_clrv2df (target));
+ return target;
+
case IX86_BUILTIN_MFENCE:
emit_insn (gen_sse2_mfence ());
return 0;
@@ -13365,9 +13481,8 @@ ix86_expand_builtin (exp, target, subtarget, mode, ignore)
arg0 = TREE_VALUE (arglist);
op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
icode = CODE_FOR_sse2_clflush;
- mode0 = insn_data[icode].operand[0].mode;
- if (! (*insn_data[icode].operand[0].predicate) (op0, mode0))
- op0 = copy_to_mode_reg (mode0, op0);
+ if (! (*insn_data[icode].operand[0].predicate) (op0, Pmode))
+ op0 = copy_to_mode_reg (Pmode, op0);
emit_insn (gen_sse2_clflush (op0));
return 0;
@@ -13526,6 +13641,8 @@ ix86_preferred_reload_class (x, class)
rtx x;
enum reg_class class;
{
+ if (GET_CODE (x) == CONST_VECTOR && x != CONST0_RTX (GET_MODE (x)))
+ return NO_REGS;
if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) != VOIDmode)
{
/* SSE can't load any constant directly yet. */
@@ -13601,17 +13718,33 @@ ix86_register_move_cost (mode, class1, class2)
enum reg_class class1, class2;
{
/* In case we require secondary memory, compute cost of the store followed
- by load. In case of copying from general_purpose_register we may emit
- multiple stores followed by single load causing memory size mismatch
- stall. Count this as arbitarily high cost of 20. */
+ by load. In order to avoid bad register allocation choices, we need
+ for this to be *at least* as high as the symmetric MEMORY_MOVE_COST. */
+
if (ix86_secondary_memory_needed (class1, class2, mode, 0))
{
- int add_cost = 0;
+ int cost = 1;
+
+ cost += MAX (MEMORY_MOVE_COST (mode, class1, 0),
+ MEMORY_MOVE_COST (mode, class1, 1));
+ cost += MAX (MEMORY_MOVE_COST (mode, class2, 0),
+ MEMORY_MOVE_COST (mode, class2, 1));
+
+ /* In case of copying from general_purpose_register we may emit multiple
+ stores followed by single load causing memory size mismatch stall.
+ Count this as arbitarily high cost of 20. */
if (CLASS_MAX_NREGS (class1, mode) > CLASS_MAX_NREGS (class2, mode))
- add_cost = 20;
- return (MEMORY_MOVE_COST (mode, class1, 0)
- + MEMORY_MOVE_COST (mode, class2, 1) + add_cost);
+ cost += 20;
+
+ /* In the case of FP/MMX moves, the registers actually overlap, and we
+ have to switch modes in order to treat them differently. */
+ if ((MMX_CLASS_P (class1) && MAYBE_FLOAT_CLASS_P (class2))
+ || (MMX_CLASS_P (class2) && MAYBE_FLOAT_CLASS_P (class1)))
+ cost += 20;
+
+ return cost;
}
+
/* Moves between SSE/MMX and integer unit are expensive. */
if (MMX_CLASS_P (class1) != MMX_CLASS_P (class2)
|| SSE_CLASS_P (class1) != SSE_CLASS_P (class2))
@@ -13744,7 +13877,8 @@ ix86_memory_move_cost (mode, class, in)
if (mode == TFmode)
mode = XFmode;
return ((in ? ix86_cost->int_load[2] : ix86_cost->int_store[2])
- * (int) GET_MODE_SIZE (mode) / 4);
+ * ((int) GET_MODE_SIZE (mode)
+ + UNITS_PER_WORD -1 ) / UNITS_PER_WORD);
}
}
@@ -13870,27 +14004,51 @@ x86_order_regs_for_local_alloc ()
reg_alloc_order [pos++] = 0;
}
-void
-x86_output_mi_thunk (file, delta, function)
- FILE *file;
- int delta;
+/* Returns an expression indicating where the this parameter is
+ located on entry to the FUNCTION. */
+
+static rtx
+ia32_this_parameter (function)
tree function;
{
- tree parm;
- rtx xops[3];
+ tree type = TREE_TYPE (function);
+
+ if (ix86_fntype_regparm (type) > 0)
+ {
+ tree parm;
+
+ parm = TYPE_ARG_TYPES (type);
+ /* Figure out whether or not the function has a variable number of
+ arguments. */
+ for (; parm; parm = TREE_CHAIN (parm))\
+ if (TREE_VALUE (parm) == void_type_node)
+ break;
+ /* If not, the this parameter is in %eax. */
+ if (parm)
+ return gen_rtx_REG (SImode, 0);
+ }
- if (ix86_regparm > 0)
- parm = TYPE_ARG_TYPES (TREE_TYPE (function));
+ if (aggregate_value_p (TREE_TYPE (type)))
+ return gen_rtx_MEM (SImode, plus_constant (stack_pointer_rtx, 8));
else
- parm = NULL_TREE;
- for (; parm; parm = TREE_CHAIN (parm))
- if (TREE_VALUE (parm) == void_type_node)
- break;
+ return gen_rtx_MEM (SImode, plus_constant (stack_pointer_rtx, 4));
+}
+
+
+static void
+x86_output_mi_vcall_thunk (file, thunk, delta, vcall_index, function)
+ FILE *file;
+ tree thunk ATTRIBUTE_UNUSED;
+ HOST_WIDE_INT delta;
+ HOST_WIDE_INT vcall_index;
+ tree function;
+{
+ rtx xops[3];
- xops[0] = GEN_INT (delta);
if (TARGET_64BIT)
{
int n = aggregate_value_p (TREE_TYPE (TREE_TYPE (function))) != 0;
+ xops[0] = GEN_INT (delta);
xops[1] = gen_rtx_REG (DImode, x86_64_int_parameter_registers[n]);
output_asm_insn ("add{q} {%0, %1|%1, %0}", xops);
if (flag_pic)
@@ -13908,13 +14066,49 @@ x86_output_mi_thunk (file, delta, function)
}
else
{
- if (parm)
- xops[1] = gen_rtx_REG (SImode, 0);
- else if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function))))
- xops[1] = gen_rtx_MEM (SImode, plus_constant (stack_pointer_rtx, 8));
- else
- xops[1] = gen_rtx_MEM (SImode, plus_constant (stack_pointer_rtx, 4));
- output_asm_insn ("add{l} {%0, %1|%1, %0}", xops);
+ /* Adjust the this parameter by a fixed constant. */
+ if (delta)
+ {
+ xops[0] = GEN_INT (delta);
+ xops[1] = ia32_this_parameter (function);
+ output_asm_insn ("add{l}\t{%0, %1|%1, %0}", xops);
+ }
+
+ /* Adjust the this parameter by a value stored in the vtable. */
+ if (vcall_index)
+ {
+ rtx this_parm;
+
+ /* Put the this parameter into %eax. */
+ this_parm = ia32_this_parameter (function);
+ if (!REG_P (this_parm))
+ {
+ xops[0] = this_parm;
+ xops[1] = gen_rtx_REG (Pmode, 0);
+ output_asm_insn ("mov{l}\t{%0, %1|%1, %0}", xops);
+ }
+ /* Load the virtual table pointer into %edx. */
+ if (ix86_fntype_regparm (TREE_TYPE (function)) > 2)
+ error ("virtual function `%D' cannot have more than two register parameters",
+ function);
+ xops[0] = gen_rtx_MEM (Pmode,
+ gen_rtx_REG (Pmode, 0));
+ xops[1] = gen_rtx_REG (Pmode, 1);
+ output_asm_insn ("mov{l}\t{%0, %1|%1, %0}", xops);
+ /* Adjust the this parameter. */
+ xops[0] = gen_rtx_MEM (SImode,
+ plus_constant (gen_rtx_REG (Pmode, 1),
+ vcall_index));
+ xops[1] = gen_rtx_REG (Pmode, 0);
+ output_asm_insn ("add{l}\t{%0, %1|%1, %0}", xops);
+ /* Put the this parameter back where it came from. */
+ if (!REG_P (this_parm))
+ {
+ xops[0] = gen_rtx_REG (Pmode, 0);
+ xops[1] = ia32_this_parameter (function);
+ output_asm_insn ("mov{l}\t{%0, %1|%1, %0}", xops);
+ }
+ }
if (flag_pic)
{
@@ -13938,13 +14132,24 @@ x86_output_mi_thunk (file, delta, function)
}
else
{
- fprintf (file, "\tjmp ");
+ fprintf (file, "\tjmp\t");
assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
fprintf (file, "\n");
}
}
}
+static void
+x86_output_mi_thunk (file, thunk, delta, function)
+ FILE *file;
+ tree thunk;
+ HOST_WIDE_INT delta;
+ tree function;
+{
+ x86_output_mi_vcall_thunk (file, thunk, delta, /*vcall_index=*/0,
+ function);
+}
+
int
x86_field_alignment (field, computed)
tree field;
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 8d610ff7307..f4f43803695 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -75,6 +75,13 @@ struct processor_costs {
const int prefetch_block; /* bytes moved to cache for prefetch. */
const int simultaneous_prefetches; /* number of parallel prefetch
operations. */
+ const int branch_cost; /* Default value for BRANCH_COST. */
+ const int fadd; /* cost of FADD and FSUB instructions. */
+ const int fmul; /* cost of FMUL instruction. */
+ const int fdiv; /* cost of FDIV instruction. */
+ const int fabs; /* cost of FABS instruction. */
+ const int fchs; /* cost of FCHS instruction. */
+ const int fsqrt; /* cost of FSQRT instruction. */
};
extern const struct processor_costs *ix86_cost;
@@ -171,7 +178,15 @@ extern int target_flags;
/* Debug FUNCTION_ARG macros */
#define TARGET_DEBUG_ARG (ix86_debug_arg_string != 0)
-/* 64bit Sledgehammer mode */
+/* 64bit Sledgehammer mode. For libgcc2 we make sure this is a
+ compile-time constant. */
+#ifdef IN_LIBGCC2
+#ifdef __x86_64__
+#define TARGET_64BIT 1
+#else
+#define TARGET_64BIT 0
+#endif
+#else
#ifdef TARGET_BI_ARCH
#define TARGET_64BIT (target_flags & MASK_64BIT)
#else
@@ -181,6 +196,7 @@ extern int target_flags;
#define TARGET_64BIT 0
#endif
#endif
+#endif
#define TARGET_386 (ix86_cpu == PROCESSOR_I386)
#define TARGET_486 (ix86_cpu == PROCESSOR_I486)
@@ -206,6 +222,8 @@ extern const int x86_partial_reg_dependency, x86_memory_mismatch_stall;
extern const int x86_accumulate_outgoing_args, x86_prologue_using_move;
extern const int x86_epilogue_using_move, x86_decompose_lea;
extern const int x86_arch_always_fancy_math_387, x86_shift1;
+extern const int x86_sse_partial_reg_dependency, x86_sse_partial_regs;
+extern const int x86_sse_typeless_stores, x86_sse_load0_by_pxor;
extern int x86_prefetch_sse;
#define TARGET_USE_LEAVE (x86_use_leave & CPUMASK)
@@ -242,6 +260,12 @@ extern int x86_prefetch_sse;
#define TARGET_SUB_ESP_8 (x86_sub_esp_8 & CPUMASK)
#define TARGET_INTEGER_DFMODE_MOVES (x86_integer_DFmode_moves & CPUMASK)
#define TARGET_PARTIAL_REG_DEPENDENCY (x86_partial_reg_dependency & CPUMASK)
+#define TARGET_SSE_PARTIAL_REG_DEPENDENCY \
+ (x86_sse_partial_reg_dependency & CPUMASK)
+#define TARGET_SSE_PARTIAL_REGS (x86_sse_partial_regs & CPUMASK)
+#define TARGET_SSE_TYPELESS_STORES (x86_sse_typeless_stores & CPUMASK)
+#define TARGET_SSE_TYPELESS_LOAD0 (x86_sse_typeless_load0 & CPUMASK)
+#define TARGET_SSE_LOAD0_BY_PXOR (x86_sse_load0_by_pxor & CPUMASK)
#define TARGET_MEMORY_MISMATCH_STALL (x86_memory_mismatch_stall & CPUMASK)
#define TARGET_PROLOGUE_USING_MOVE (x86_prologue_using_move & CPUMASK)
#define TARGET_EPILOGUE_USING_MOVE (x86_epilogue_using_move & CPUMASK)
@@ -695,8 +719,11 @@ extern int x86_prefetch_sse;
#define FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN \
(ix86_preferred_stack_boundary > STACK_BOUNDARY && !TARGET_64BIT)
-/* Allocation boundary for the code of a function. */
-#define FUNCTION_BOUNDARY 16
+/* Minimum allocation boundary for the code of a function. */
+#define FUNCTION_BOUNDARY 8
+
+/* C++ stores the virtual bit in the lowest bit of function pointers. */
+#define TARGET_PTRMEMFUNC_VBIT_LOCATION ptrmemfunc_vbit_in_pfn
/* Alignment of field after `int : 0' in a structure. */
@@ -712,10 +739,9 @@ extern int x86_prefetch_sse;
#define BIGGEST_ALIGNMENT 128
-/* Decide whether a variable of mode MODE must be 128 bit aligned. */
+/* Decide whether a variable of mode MODE should be 128 bit aligned. */
#define ALIGN_MODE_128(MODE) \
- ((MODE) == XFmode || (MODE) == TFmode || ((MODE) == TImode) \
- || (MODE) == V4SFmode || (MODE) == V4SImode)
+ ((MODE) == XFmode || (MODE) == TFmode || SSE_REG_MODE_P (MODE))
/* The published ABIs say that doubles should be aligned on word
boundaries, so lower the aligment for structure fields unless
@@ -989,6 +1015,17 @@ do { \
|| (MODE) == CDImode \
|| (TARGET_64BIT && ((MODE) == TImode || (MODE) == CTImode)))
+/* Return true for modes passed in SSE registers. */
+#define SSE_REG_MODE_P(MODE) \
+ ((MODE) == TImode || (MODE) == V16QImode \
+ || (MODE) == V8HImode || (MODE) == V2DFmode || (MODE) == V2DImode \
+ || (MODE) == V4SFmode || (MODE) == V4SImode)
+
+/* Return true for modes passed in MMX registers. */
+#define MMX_REG_MODE_P(MODE) \
+ ((MODE) == V8QImode || (MODE) == V4HImode || (MODE) == V2SImode \
+ || (MODE) == V2SFmode)
+
/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */
#define HARD_REGNO_MODE_OK(REGNO, MODE) \
@@ -1990,13 +2027,9 @@ enum ix86_builtins
IX86_BUILTIN_CMPEQSS,
IX86_BUILTIN_CMPLTSS,
IX86_BUILTIN_CMPLESS,
- IX86_BUILTIN_CMPGTSS,
- IX86_BUILTIN_CMPGESS,
IX86_BUILTIN_CMPNEQSS,
IX86_BUILTIN_CMPNLTSS,
IX86_BUILTIN_CMPNLESS,
- IX86_BUILTIN_CMPNGTSS,
- IX86_BUILTIN_CMPNGESS,
IX86_BUILTIN_CMPORDSS,
IX86_BUILTIN_CMPUNORDSS,
IX86_BUILTIN_CMPNESS,
@@ -2204,13 +2237,9 @@ enum ix86_builtins
IX86_BUILTIN_CMPEQSD,
IX86_BUILTIN_CMPLTSD,
IX86_BUILTIN_CMPLESD,
- IX86_BUILTIN_CMPGTSD,
- IX86_BUILTIN_CMPGESD,
IX86_BUILTIN_CMPNEQSD,
IX86_BUILTIN_CMPNLTSD,
IX86_BUILTIN_CMPNLESD,
- IX86_BUILTIN_CMPNGTSD,
- IX86_BUILTIN_CMPNGESD,
IX86_BUILTIN_CMPORDSD,
IX86_BUILTIN_CMPUNORDSD,
IX86_BUILTIN_CMPNESD,
@@ -2364,11 +2393,13 @@ enum ix86_builtins
IX86_BUILTIN_PSRLW128,
IX86_BUILTIN_PSRLD128,
IX86_BUILTIN_PSRLQ128,
+ IX86_BUILTIN_PSLLDQI128,
IX86_BUILTIN_PSLLWI128,
IX86_BUILTIN_PSLLDI128,
IX86_BUILTIN_PSLLQI128,
IX86_BUILTIN_PSRAWI128,
IX86_BUILTIN_PSRADI128,
+ IX86_BUILTIN_PSRLDQI128,
IX86_BUILTIN_PSRLWI128,
IX86_BUILTIN_PSRLDI128,
IX86_BUILTIN_PSRLQI128,
@@ -2611,7 +2642,9 @@ do { \
break; \
\
case MULT: \
- if (GET_CODE (XEXP (X, 1)) == CONST_INT) \
+ if (FLOAT_MODE_P (GET_MODE (X))) \
+ TOPLEVEL_COSTS_N_INSNS (ix86_cost->fmul); \
+ else if (GET_CODE (XEXP (X, 1)) == CONST_INT) \
{ \
unsigned HOST_WIDE_INT value = INTVAL (XEXP (X, 1)); \
int nbits = 0; \
@@ -2633,10 +2666,16 @@ do { \
case UDIV: \
case MOD: \
case UMOD: \
- TOPLEVEL_COSTS_N_INSNS (ix86_cost->divide); \
+ if (FLOAT_MODE_P (GET_MODE (X))) \
+ TOPLEVEL_COSTS_N_INSNS (ix86_cost->fdiv); \
+ else \
+ TOPLEVEL_COSTS_N_INSNS (ix86_cost->divide); \
+ break; \
\
case PLUS: \
- if (!TARGET_DECOMPOSE_LEA \
+ if (FLOAT_MODE_P (GET_MODE (X))) \
+ TOPLEVEL_COSTS_N_INSNS (ix86_cost->fadd); \
+ else if (!TARGET_DECOMPOSE_LEA \
&& INTEGRAL_MODE_P (GET_MODE (X)) \
&& GET_MODE_BITSIZE (GET_MODE (X)) <= GET_MODE_BITSIZE (Pmode)) \
{ \
@@ -2676,21 +2715,29 @@ do { \
+ rtx_cost (XEXP (X, 1), (OUTER_CODE))); \
} \
} \
+ /* fall through */ \
\
+ case MINUS: \
+ if (FLOAT_MODE_P (GET_MODE (X))) \
+ TOPLEVEL_COSTS_N_INSNS (ix86_cost->fadd); \
/* fall through */ \
+ \
case AND: \
case IOR: \
case XOR: \
- case MINUS: \
if (!TARGET_64BIT && GET_MODE (X) == DImode) \
return (COSTS_N_INSNS (ix86_cost->add) * 2 \
+ (rtx_cost (XEXP (X, 0), (OUTER_CODE)) \
<< (GET_MODE (XEXP (X, 0)) != DImode)) \
+ (rtx_cost (XEXP (X, 1), (OUTER_CODE)) \
<< (GET_MODE (XEXP (X, 1)) != DImode))); \
- \
/* fall through */ \
+ \
case NEG: \
+ if (FLOAT_MODE_P (GET_MODE (X))) \
+ TOPLEVEL_COSTS_N_INSNS (ix86_cost->fchs); \
+ /* fall through */ \
+ \
case NOT: \
if (!TARGET_64BIT && GET_MODE (X) == DImode) \
TOPLEVEL_COSTS_N_INSNS (ix86_cost->add * 2); \
@@ -2702,6 +2749,16 @@ do { \
TOPLEVEL_COSTS_N_INSNS (0); \
break; \
\
+ case ABS: \
+ if (FLOAT_MODE_P (GET_MODE (X))) \
+ TOPLEVEL_COSTS_N_INSNS (ix86_cost->fabs); \
+ break; \
+ \
+ case SQRT: \
+ if (FLOAT_MODE_P (GET_MODE (X))) \
+ TOPLEVEL_COSTS_N_INSNS (ix86_cost->fsqrt); \
+ break; \
+ \
egress_rtx_costs: \
break;
@@ -2956,13 +3013,25 @@ extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER];
It need not be very fast code. */
#define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \
- asm_fprintf ((FILE), "\tpush{l}\t%%e%s\n", reg_names[(REGNO)])
+do { \
+ if (TARGET_64BIT) \
+ asm_fprintf ((FILE), "\tpush{q}\t%%r%s\n", \
+ reg_names[(REGNO)] + (REX_INT_REGNO_P (REGNO) != 0)); \
+ else \
+ asm_fprintf ((FILE), "\tpush{l}\t%%e%s\n", reg_names[(REGNO)]); \
+} while (0)
/* This is how to output an insn to pop a register from the stack.
It need not be very fast code. */
#define ASM_OUTPUT_REG_POP(FILE, REGNO) \
- asm_fprintf ((FILE), "\tpop{l}\t%%e%s\n", reg_names[(REGNO)])
+do { \
+ if (TARGET_64BIT) \
+ asm_fprintf ((FILE), "\tpop{q}\t%%r%s\n", \
+ reg_names[(REGNO)] + (REX_INT_REGNO_P (REGNO) != 0)); \
+ else \
+ asm_fprintf ((FILE), "\tpop{l}\t%%e%s\n", reg_names[(REGNO)]); \
+} while (0)
/* This is how to output an element of a case-vector that is absolute. */
@@ -3133,6 +3202,7 @@ do { \
LABEL_REF, SUBREG, REG, MEM}}, \
{"pic_symbolic_operand", {CONST}}, \
{"call_insn_operand", {REG, SUBREG, MEM, SYMBOL_REF}}, \
+ {"sibcall_insn_operand", {REG, SUBREG, SYMBOL_REF}}, \
{"constant_call_address_operand", {SYMBOL_REF, CONST}}, \
{"const0_operand", {CONST_INT, CONST_DOUBLE}}, \
{"const1_operand", {CONST_INT}}, \
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index cb4d050c49a..681773b1e04 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -163,7 +163,9 @@
sse,ssemov,sseadd,ssemul,ssecmp,ssecvt,ssediv")
(const_string "sse")
(eq_attr "type" "mmx,mmxmov,mmxadd,mmxmul,mmxcmp,mmxcvt,mmxshft")
- (const_string "mmx")]
+ (const_string "mmx")
+ (eq_attr "type" "other")
+ (const_string "unknown")]
(const_string "integer")))
;; The (bounding maximum) length of an instruction immediate.
@@ -2131,12 +2133,12 @@
case 4:
return "mov{l}\t{%1, %0|%0, %1}";
case 5:
- if (TARGET_SSE2 && !TARGET_ATHLON)
+ if (get_attr_mode (insn) == MODE_TI)
return "pxor\t%0, %0";
else
return "xorps\t%0, %0";
case 6:
- if (TARGET_PARTIAL_REG_DEPENDENCY)
+ if (get_attr_mode (insn) == MODE_V4SF)
return "movaps\t{%1, %0|%0, %1}";
else
return "movss\t{%1, %0|%0, %1}";
@@ -2156,7 +2158,40 @@
}
}
[(set_attr "type" "fmov,fmov,fmov,imov,imov,ssemov,ssemov,ssemov,ssemov,mmxmov,mmxmov,mmxmov")
- (set_attr "mode" "SF,SF,SF,SI,SI,TI,SF,SF,SF,SI,SI,DI")])
+ (set (attr "mode")
+ (cond [(eq_attr "alternative" "3,4,9,10")
+ (const_string "SI")
+ (eq_attr "alternative" "5")
+ (if_then_else
+ (and (and (ne (symbol_ref "TARGET_SSE_LOAD0_BY_PXOR")
+ (const_int 0))
+ (ne (symbol_ref "TARGET_SSE2")
+ (const_int 0)))
+ (eq (symbol_ref "optimize_size")
+ (const_int 0)))
+ (const_string "TI")
+ (const_string "V4SF"))
+ /* For architectures resolving dependencies on
+ whole SSE registers use APS move to break dependency
+ chains, otherwise use short move to avoid extra work.
+
+ Do the same for architectures resolving dependencies on
+ the parts. While in DF mode it is better to always handle
+ just register parts, the SF mode is different due to lack
+ of instructions to load just part of the register. It is
+ better to maintain the whole registers in single format
+ to avoid problems on using packed logical operations. */
+ (eq_attr "alternative" "6")
+ (if_then_else
+ (ior (ne (symbol_ref "TARGET_SSE_PARTIAL_REG_DEPENDENCY")
+ (const_int 0))
+ (ne (symbol_ref "TARGET_SSE_PARTIAL_REGS")
+ (const_int 0)))
+ (const_string "V4SF")
+ (const_string "SF"))
+ (eq_attr "alternative" "11")
+ (const_string "DI")]
+ (const_string "SF")))])
(define_insn "*swapsf"
[(set (match_operand:SF 0 "register_operand" "+f")
@@ -2317,25 +2352,78 @@
case 4:
return "#";
case 5:
- if (TARGET_ATHLON)
- return "xorpd\t%0, %0";
- else
- return "pxor\t%0, %0";
+ switch (get_attr_mode (insn))
+ {
+ case MODE_V4SF:
+ return "xorps\t%0, %0";
+ case MODE_V2DF:
+ return "xorpd\t%0, %0";
+ case MODE_TI:
+ return "pxor\t%0, %0";
+ default:
+ abort ();
+ }
case 6:
- if (TARGET_PARTIAL_REG_DEPENDENCY)
- return "movapd\t{%1, %0|%0, %1}";
+ switch (get_attr_mode (insn))
+ {
+ case MODE_V4SF:
+ return "movaps\t{%1, %0|%0, %1}";
+ case MODE_V2DF:
+ return "movapd\t{%1, %0|%0, %1}";
+ case MODE_DF:
+ return "movsd\t{%1, %0|%0, %1}";
+ default:
+ abort ();
+ }
+ case 7:
+ if (get_attr_mode (insn) == MODE_V2DF)
+ return "movlpd\t{%1, %0|%0, %1}";
else
return "movsd\t{%1, %0|%0, %1}";
- case 7:
case 8:
- return "movsd\t{%1, %0|%0, %1}";
+ return "movsd\t{%1, %0|%0, %1}";
default:
abort();
}
}
[(set_attr "type" "fmov,fmov,fmov,multi,multi,ssemov,ssemov,ssemov,ssemov")
- (set_attr "mode" "DF,DF,DF,SI,SI,TI,DF,DF,DF")])
+ (set (attr "mode")
+ (cond [(eq_attr "alternative" "3,4")
+ (const_string "SI")
+ /* xorps is one byte shorter. */
+ (eq_attr "alternative" "5")
+ (cond [(ne (symbol_ref "optimize_size")
+ (const_int 0))
+ (const_string "V4SF")
+ (ne (symbol_ref "TARGET_SSE_LOAD0_BY_PXOR")
+ (const_int 0))
+ (const_string "TI")]
+ (const_string "V2DF"))
+ /* For architectures resolving dependencies on
+ whole SSE registers use APD move to break dependency
+ chains, otherwise use short move to avoid extra work.
+
+ movaps encodes one byte shorter. */
+ (eq_attr "alternative" "6")
+ (cond
+ [(ne (symbol_ref "optimize_size")
+ (const_int 0))
+ (const_string "V4SF")
+ (ne (symbol_ref "TARGET_SSE_PARTIAL_REG_DEPENDENCY")
+ (const_int 0))
+ (const_string "V2DF")]
+ (const_string "DF"))
+ /* For achitectures resolving dependencies on register
+ parts we may avoid extra work to zero out upper part
+ of register. */
+ (eq_attr "alternative" "7")
+ (if_then_else
+ (ne (symbol_ref "TARGET_SSE_PARTIAL_REGS")
+ (const_int 0))
+ (const_string "V2DF")
+ (const_string "DF"))]
+ (const_string "DF")))])
(define_insn "*movdf_integer"
[(set (match_operand:DF 0 "nonimmediate_operand" "=f#Yr,m,f#Yr,r#Yf,o,Y#rf,Y#rf,Y#rf,m")
@@ -2379,16 +2467,34 @@
return "#";
case 5:
- if (TARGET_ATHLON)
- return "xorpd\t%0, %0";
- else
- return "pxor\t%0, %0";
+ switch (get_attr_mode (insn))
+ {
+ case MODE_V4SF:
+ return "xorps\t%0, %0";
+ case MODE_V2DF:
+ return "xorpd\t%0, %0";
+ case MODE_TI:
+ return "pxor\t%0, %0";
+ default:
+ abort ();
+ }
case 6:
- if (TARGET_PARTIAL_REG_DEPENDENCY)
- return "movapd\t{%1, %0|%0, %1}";
+ switch (get_attr_mode (insn))
+ {
+ case MODE_V4SF:
+ return "movaps\t{%1, %0|%0, %1}";
+ case MODE_V2DF:
+ return "movapd\t{%1, %0|%0, %1}";
+ case MODE_DF:
+ return "movsd\t{%1, %0|%0, %1}";
+ default:
+ abort ();
+ }
+ case 7:
+ if (get_attr_mode (insn) == MODE_V2DF)
+ return "movlpd\t{%1, %0|%0, %1}";
else
return "movsd\t{%1, %0|%0, %1}";
- case 7:
case 8:
return "movsd\t{%1, %0|%0, %1}";
@@ -2397,7 +2503,42 @@
}
}
[(set_attr "type" "fmov,fmov,fmov,multi,multi,ssemov,ssemov,ssemov,ssemov")
- (set_attr "mode" "DF,DF,DF,SI,SI,TI,DF,DF,DF")])
+ (set (attr "mode")
+ (cond [(eq_attr "alternative" "3,4")
+ (const_string "SI")
+ /* xorps is one byte shorter. */
+ (eq_attr "alternative" "5")
+ (cond [(ne (symbol_ref "optimize_size")
+ (const_int 0))
+ (const_string "V4SF")
+ (ne (symbol_ref "TARGET_SSE_LOAD0_BY_PXOR")
+ (const_int 0))
+ (const_string "TI")]
+ (const_string "V2DF"))
+ /* For architectures resolving dependencies on
+ whole SSE registers use APD move to break dependency
+ chains, otherwise use short move to avoid extra work.
+
+ movaps encodes one byte shorter. */
+ (eq_attr "alternative" "6")
+ (cond
+ [(ne (symbol_ref "optimize_size")
+ (const_int 0))
+ (const_string "V4SF")
+ (ne (symbol_ref "TARGET_SSE_PARTIAL_REG_DEPENDENCY")
+ (const_int 0))
+ (const_string "V2DF")]
+ (const_string "DF"))
+ /* For achitectures resolving dependencies on register
+ parts we may avoid extra work to zero out upper part
+ of register. */
+ (eq_attr "alternative" "7")
+ (if_then_else
+ (ne (symbol_ref "TARGET_SSE_PARTIAL_REGS")
+ (const_int 0))
+ (const_string "V2DF")
+ (const_string "DF"))]
+ (const_string "DF")))])
(define_split
[(set (match_operand:DF 0 "nonimmediate_operand" "")
@@ -3704,7 +3845,7 @@
(float_truncate:SF
(match_operand:DF 1 "nonimmediate_operand" "f,f,f,f,mY")))
(clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m,X"))]
- "TARGET_80387 && TARGET_SSE2"
+ "TARGET_80387 && TARGET_SSE2 && !TARGET_SSE_PARTIAL_REGS"
{
switch (which_alternative)
{
@@ -3714,7 +3855,30 @@
else
return "fst%z0\t%y0";
case 4:
- return "cvtsd2ss\t{%1, %0|%0, %1}";
+ return "#";
+ default:
+ abort ();
+ }
+}
+ [(set_attr "type" "fmov,multi,multi,multi,ssecvt")
+ (set_attr "mode" "SF,SF,SF,SF,DF")])
+
+(define_insn "*truncdfsf2_1_sse_nooverlap"
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=*!m,?f#rx,?r#fx,?x#rf,&Y")
+ (float_truncate:SF
+ (match_operand:DF 1 "nonimmediate_operand" "f,f,f,f,mY")))
+ (clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m,X"))]
+ "TARGET_80387 && TARGET_SSE2 && TARGET_SSE_PARTIAL_REGS"
+{
+ switch (which_alternative)
+ {
+ case 0:
+ if (find_regno_note (insn, REG_DEAD, REGNO (operands[1])))
+ return "fstp%z0\t%y0";
+ else
+ return "fst%z0\t%y0";
+ case 4:
+ return "#";
default:
abort ();
}
@@ -3726,7 +3890,7 @@
[(set (match_operand:SF 0 "nonimmediate_operand" "=Y,!m")
(float_truncate:SF
(match_operand:DF 1 "nonimmediate_operand" "mY,f")))]
- "TARGET_80387 && TARGET_SSE2
+ "TARGET_80387 && TARGET_SSE2 && !TARGET_SSE_PARTIAL_REGS
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
{
switch (which_alternative)
@@ -3745,7 +3909,30 @@
[(set_attr "type" "ssecvt,fmov")
(set_attr "mode" "DF,SF")])
-(define_insn "truncdfsf2_3"
+(define_insn "*truncdfsf2_2_nooverlap"
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=&Y,!m")
+ (float_truncate:SF
+ (match_operand:DF 1 "nonimmediate_operand" "mY,f")))]
+ "TARGET_80387 && TARGET_SSE2 && TARGET_SSE_PARTIAL_REGS
+ && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
+{
+ switch (which_alternative)
+ {
+ case 0:
+ return "#";
+ case 1:
+ if (find_regno_note (insn, REG_DEAD, REGNO (operands[1])))
+ return "fstp%z0\t%y0";
+ else
+ return "fst%z0\t%y0";
+ default:
+ abort ();
+ }
+}
+ [(set_attr "type" "ssecvt,fmov")
+ (set_attr "mode" "DF,SF")])
+
+(define_insn "*truncdfsf2_3"
[(set (match_operand:SF 0 "memory_operand" "=m")
(float_truncate:SF
(match_operand:DF 1 "register_operand" "f")))]
@@ -3763,11 +3950,20 @@
[(set (match_operand:SF 0 "register_operand" "=Y")
(float_truncate:SF
(match_operand:DF 1 "nonimmediate_operand" "mY")))]
- "!TARGET_80387 && TARGET_SSE2"
+ "!TARGET_80387 && TARGET_SSE2 && !TARGET_SSE_PARTIAL_REGS"
"cvtsd2ss\t{%1, %0|%0, %1}"
[(set_attr "type" "ssecvt")
(set_attr "mode" "DF")])
+(define_insn "*truncdfsf2_sse_only_nooverlap"
+ [(set (match_operand:SF 0 "register_operand" "=&Y")
+ (float_truncate:SF
+ (match_operand:DF 1 "nonimmediate_operand" "mY")))]
+ "!TARGET_80387 && TARGET_SSE2 && TARGET_SSE_PARTIAL_REGS"
+ "#"
+ [(set_attr "type" "ssecvt")
+ (set_attr "mode" "DF")])
+
(define_split
[(set (match_operand:SF 0 "memory_operand" "")
(float_truncate:SF
@@ -3777,15 +3973,55 @@
[(set (match_dup 0) (float_truncate:SF (match_dup 1)))]
"")
+; Avoid possible reformating penalty on the destination by first
+; zeroing it out
(define_split
- [(set (match_operand:SF 0 "nonimmediate_operand" "")
+ [(set (match_operand:SF 0 "register_operand" "")
(float_truncate:SF
(match_operand:DF 1 "nonimmediate_operand" "")))
(clobber (match_operand 2 "" ""))]
"TARGET_80387 && reload_completed
- && !FP_REG_P (operands[0]) && !FP_REG_P (operands[1])"
- [(set (match_dup 0) (float_truncate:SF (match_dup 1)))]
- "")
+ && SSE_REG_P (operands[0])"
+ [(const_int 0)]
+{
+ rtx src, dest;
+ if (!TARGET_SSE_PARTIAL_REGS)
+ emit_insn (gen_truncdfsf2_sse_only (operands[0], operands[1]));
+ else
+ {
+ dest = simplify_gen_subreg (V4SFmode, operands[0], SFmode, 0);
+ src = simplify_gen_subreg (V2DFmode, operands[1], DFmode, 0);
+ /* simplify_gen_subreg refuses to widen memory references. */
+ if (GET_CODE (src) == SUBREG)
+ alter_subreg (&src);
+ if (reg_overlap_mentioned_p (operands[0], operands[1]))
+ abort ();
+ emit_insn (gen_sse_clrv4sf (dest, CONST0_RTX (V4SFmode)));
+ emit_insn (gen_cvtsd2ss (dest, dest, src));
+ }
+ DONE;
+})
+
+(define_split
+ [(set (match_operand:SF 0 "register_operand" "")
+ (float_truncate:SF
+ (match_operand:DF 1 "nonimmediate_operand" "")))]
+ "TARGET_80387 && reload_completed
+ && SSE_REG_P (operands[0]) && TARGET_SSE_PARTIAL_REGS"
+ [(const_int 0)]
+{
+ rtx src, dest;
+ dest = simplify_gen_subreg (V4SFmode, operands[0], SFmode, 0);
+ src = simplify_gen_subreg (V2DFmode, operands[1], DFmode, 0);
+ /* simplify_gen_subreg refuses to widen memory references. */
+ if (GET_CODE (src) == SUBREG)
+ alter_subreg (&src);
+ if (reg_overlap_mentioned_p (operands[0], operands[1]))
+ abort ();
+ emit_insn (gen_sse_clrv4sf (dest, CONST0_RTX (V4SFmode)));
+ emit_insn (gen_cvtsd2ss (dest, dest, src));
+ DONE;
+})
(define_split
[(set (match_operand:SF 0 "register_operand" "")
@@ -4489,6 +4725,22 @@
(set_attr "mode" "SF")
(set_attr "fp_int_src" "true")])
+; Avoid possible reformating penalty on the destination by first
+; zeroing it out
+(define_split
+ [(set (match_operand:SF 0 "register_operand" "")
+ (float:SF (match_operand:SI 1 "nonimmediate_operand" "")))]
+ "TARGET_80387 && reload_completed
+ && SSE_REG_P (operands[0]) && TARGET_SSE_PARTIAL_REGS"
+ [(const_int 0)]
+{
+ rtx dest;
+ dest = simplify_gen_subreg (V4SFmode, operands[0], SFmode, 0);
+ emit_insn (gen_sse_clrv4sf (dest, CONST0_RTX (V4SFmode)));
+ emit_insn (gen_cvtsi2ss (dest, dest, operands[1]));
+ DONE;
+})
+
(define_expand "floatdisf2"
[(set (match_operand:SF 0 "register_operand" "")
(float:SF (match_operand:DI 1 "nonimmediate_operand" "")))]
@@ -4527,6 +4779,22 @@
(set_attr "mode" "SF")
(set_attr "fp_int_src" "true")])
+; Avoid possible reformating penalty on the destination by first
+; zeroing it out
+(define_split
+ [(set (match_operand:SF 0 "register_operand" "")
+ (float:SF (match_operand:DI 1 "nonimmediate_operand" "")))]
+ "TARGET_80387 && reload_completed
+ && SSE_REG_P (operands[0]) && TARGET_SSE_PARTIAL_REGS"
+ [(const_int 0)]
+{
+ rtx dest;
+ dest = simplify_gen_subreg (V4SFmode, operands[0], SFmode, 0);
+ emit_insn (gen_sse_clrv4sf (dest, CONST0_RTX (V4SFmode)));
+ emit_insn (gen_cvtsi2ssq (dest, dest, operands[1]));
+ DONE;
+})
+
(define_insn "floathidf2"
[(set (match_operand:DF 0 "register_operand" "=f,f")
(float:DF (match_operand:HI 1 "nonimmediate_operand" "m,r")))]
@@ -4703,7 +4971,7 @@
(plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0")
(match_operand:DI 2 "general_operand" "roiF,riF")))
(clobber (reg:CC 17))]
- "!TARGET_64BIT"
+ "!TARGET_64BIT && ix86_binary_operator_ok (PLUS, DImode, operands)"
"#")
(define_split
@@ -9490,6 +9758,14 @@
(xor:TI (subreg:TI (match_dup 1) 0)
(subreg:TI (match_dup 2) 0)))]
{
+ /* Avoid possible reformating on the operands. */
+ if (TARGET_SSE_PARTIAL_REGS && !optimize_size)
+ {
+ rtx op = gen_rtx_SUBREG (V2DFmode, operands[1], 0);
+ emit_insn (gen_sse2_unpcklpd (op, op, op));
+ op = gen_rtx_SUBREG (V2DFmode, operands[2], 0);
+ emit_insn (gen_sse2_unpcklpd (op, op, op));
+ }
if (operands_match_p (operands[0], operands[2]))
{
rtx tmp;
@@ -9923,7 +10199,17 @@
"reload_completed && SSE_REG_P (operands[0])"
[(set (subreg:TI (match_dup 0) 0)
(and:TI (not:TI (subreg:TI (match_dup 2) 0))
- (subreg:TI (match_dup 1) 0)))])
+ (subreg:TI (match_dup 1) 0)))]
+{
+ /* Avoid possible reformating on the operands. */
+ if (TARGET_SSE_PARTIAL_REGS && !optimize_size)
+ {
+ rtx op = gen_rtx_SUBREG (V2DFmode, operands[1], 0);
+ emit_insn (gen_sse2_unpcklpd (op, op, op));
+ op = gen_rtx_SUBREG (V2DFmode, operands[2], 0);
+ emit_insn (gen_sse2_unpcklpd (op, op, op));
+ }
+})
;; Keep 'f' and 'r' in separate alternatives to avoid reload problems
@@ -13427,19 +13713,22 @@
(define_insn "*call_1"
[(call (mem:QI (match_operand:SI 0 "call_insn_operand" "rsm"))
(match_operand 1 "" ""))]
- "!TARGET_64BIT"
+ "!SIBLING_CALL_P (insn) && !TARGET_64BIT"
{
if (constant_call_address_operand (operands[0], QImode))
- {
- if (SIBLING_CALL_P (insn))
- return "jmp\t%P0";
- else
- return "call\t%P0";
- }
- if (SIBLING_CALL_P (insn))
- return "jmp\t%A0";
- else
- return "call\t%A0";
+ return "call\t%P0";
+ return "call\t%A0";
+}
+ [(set_attr "type" "call")])
+
+(define_insn "*sibcall_1"
+ [(call (mem:QI (match_operand:SI 0 "sibcall_insn_operand" "s,c,d,a"))
+ (match_operand 1 "" ""))]
+ "SIBLING_CALL_P (insn) && !TARGET_64BIT"
+{
+ if (constant_call_address_operand (operands[0], QImode))
+ return "jmp\t%P0";
+ return "jmp\t%A0";
}
[(set_attr "type" "call")])
@@ -13869,13 +14158,12 @@
""
{
if (flag_pic)
- operands[2] = pic_offset_table_rtx;
+ operands[1] = pic_offset_table_rtx;
else
{
- operands[2] = gen_reg_rtx (Pmode);
- emit_insn (gen_set_got (operands[2]));
+ operands[1] = gen_reg_rtx (Pmode);
+ emit_insn (gen_set_got (operands[1]));
}
- operands[1] = pic_offset_table_rtx;
operands[2] = ix86_tls_get_addr ();
})
@@ -16594,6 +16882,14 @@
(set (subreg:TI (match_dup 0) 0) (ior:TI (subreg:TI (match_dup 6) 0)
(subreg:TI (match_dup 7) 0)))]
{
+ if (GET_MODE (operands[2]) == DFmode
+ && TARGET_SSE_PARTIAL_REGS && !optimize_size)
+ {
+ rtx op = gen_rtx_SUBREG (V2DFmode, operands[2], 0);
+ emit_insn (gen_sse2_unpcklpd (op, op, op));
+ op = gen_rtx_SUBREG (V2DFmode, operands[3], 0);
+ emit_insn (gen_sse2_unpcklpd (op, op, op));
+ }
/* If op2 == op3, op3 will be clobbered before it is used.
This should be optimized out though. */
if (operands_match_p (operands[2], operands[3]))
@@ -16702,6 +16998,20 @@
(set (subreg:TI (match_dup 0) 0) (and:TI (match_dup 6)
(subreg:TI (match_dup 7) 0)))]
{
+ if (TARGET_SSE_PARTIAL_REGS && !optimize_size
+ && GET_MODE (operands[2]) == DFmode)
+ {
+ if (REG_P (operands[2]))
+ {
+ rtx op = gen_rtx_SUBREG (V2DFmode, operands[2], 0);
+ emit_insn (gen_sse2_unpcklpd (op, op, op));
+ }
+ if (REG_P (operands[3]))
+ {
+ rtx op = gen_rtx_SUBREG (V2DFmode, operands[3], 0);
+ emit_insn (gen_sse2_unpcklpd (op, op, op));
+ }
+ }
PUT_MODE (operands[1], GET_MODE (operands[0]));
if (!sse_comparison_operator (operands[1], VOIDmode))
{
@@ -17327,7 +17637,7 @@
[(set (match_operand:SI 0 "register_operand" "")
(subreg:SI (mult:DI (match_operand:DI 1 "register_operand" "")
(match_operand:DI 2 "const_int_operand" "")) 0))]
- "exact_log2 (INTVAL (operands[1])) >= 0
+ "exact_log2 (INTVAL (operands[2])) >= 0
&& REGNO (operands[0]) == REGNO (operands[1])
&& peep2_regno_dead_p (0, FLAGS_REG)"
[(parallel [(set (match_dup 0) (ashift:SI (match_dup 0) (match_dup 2)))
@@ -17716,19 +18026,23 @@
[(set (match_operand 0 "" "")
(call (mem:QI (match_operand:SI 1 "call_insn_operand" "rsm"))
(match_operand:SI 2 "" "")))]
- "!TARGET_64BIT"
+ "!SIBLING_CALL_P (insn) && !TARGET_64BIT"
{
if (constant_call_address_operand (operands[1], QImode))
- {
- if (SIBLING_CALL_P (insn))
- return "jmp\t%P1";
- else
- return "call\t%P1";
- }
- if (SIBLING_CALL_P (insn))
- return "jmp\t%*%1";
- else
- return "call\t%*%1";
+ return "call\t%P1";
+ return "call\t%*%1";
+}
+ [(set_attr "type" "callv")])
+
+(define_insn "*sibcall_value_1"
+ [(set (match_operand 0 "" "")
+ (call (mem:QI (match_operand:SI 1 "sibcall_insn_operand" "s,c,d,a"))
+ (match_operand:SI 2 "" "")))]
+ "SIBLING_CALL_P (insn) && !TARGET_64BIT"
+{
+ if (constant_call_address_operand (operands[1], QImode))
+ return "jmp\t%P1";
+ return "jmp\t%*%1";
}
[(set_attr "type" "callv")])
@@ -17808,7 +18122,6 @@
[(set (match_operand:V4SF 0 "nonimmediate_operand" "=x,m")
(match_operand:V4SF 1 "nonimmediate_operand" "xm,x"))]
"TARGET_SSE"
- ;; @@@ let's try to use movaps here.
"movaps\t{%1, %0|%0, %1}"
[(set_attr "type" "ssemov")
(set_attr "mode" "V4SF")])
@@ -17817,8 +18130,36 @@
[(set (match_operand:V4SI 0 "nonimmediate_operand" "=x,m")
(match_operand:V4SI 1 "nonimmediate_operand" "xm,x"))]
"TARGET_SSE"
+{
+ if (get_attr_mode (insn) == MODE_V4SF)
+ return "movaps\t{%1, %0|%0, %1}";
+ else
+ return "movdqa\t{%1, %0|%0, %1}";
+}
+ [(set_attr "type" "ssemov")
+ (set (attr "mode")
+ (cond [(eq_attr "alternative" "0")
+ (if_then_else
+ (ne (symbol_ref "optimize_size")
+ (const_int 0))
+ (const_string "V4SF")
+ (const_string "TI"))
+ (eq_attr "alternative" "1")
+ (if_then_else
+ (ior (ne (symbol_ref "TARGET_SSE_TYPELESS_STORES")
+ (const_int 0))
+ (ne (symbol_ref "optimize_size")
+ (const_int 0)))
+ (const_string "V4SF")
+ (const_string "TI"))]
+ (const_string "TI")))])
+
+(define_insn "movv2di_internal"
+ [(set (match_operand:V2DI 0 "nonimmediate_operand" "=x,m")
+ (match_operand:V2DI 1 "nonimmediate_operand" "xm,x"))]
+ "TARGET_SSE"
;; @@@ let's try to use movaps here.
- "movaps\t{%1, %0|%0, %1}"
+ "movdqa\t{%1, %0|%0, %1}"
[(set_attr "type" "ssemov")
(set_attr "mode" "V4SF")])
@@ -17868,30 +18209,87 @@
(define_insn "movv2df_internal"
[(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,m")
- (match_operand:V2DF 1 "general_operand" "xm,x"))]
+ (match_operand:V2DF 1 "nonimmediate_operand" "xm,x"))]
"TARGET_SSE2"
- ;; @@@ let's try to use movaps here.
- "movapd\t{%1, %0|%0, %1}"
+{
+ if (get_attr_mode (insn) == MODE_V4SF)
+ return "movaps\t{%1, %0|%0, %1}";
+ else
+ return "movapd\t{%1, %0|%0, %1}";
+}
[(set_attr "type" "ssemov")
- (set_attr "mode" "V2DF")])
+ (set (attr "mode")
+ (cond [(eq_attr "alternative" "0")
+ (if_then_else
+ (ne (symbol_ref "optimize_size")
+ (const_int 0))
+ (const_string "V4SF")
+ (const_string "V2DF"))
+ (eq_attr "alternative" "1")
+ (if_then_else
+ (ior (ne (symbol_ref "TARGET_SSE_TYPELESS_STORES")
+ (const_int 0))
+ (ne (symbol_ref "optimize_size")
+ (const_int 0)))
+ (const_string "V4SF")
+ (const_string "V2DF"))]
+ (const_string "V2DF")))])
(define_insn "movv8hi_internal"
[(set (match_operand:V8HI 0 "nonimmediate_operand" "=x,m")
- (match_operand:V8HI 1 "general_operand" "xm,x"))]
+ (match_operand:V8HI 1 "nonimmediate_operand" "xm,x"))]
"TARGET_SSE2"
- ;; @@@ let's try to use movaps here.
- "movaps\t{%1, %0|%0, %1}"
+{
+ if (get_attr_mode (insn) == MODE_V4SF)
+ return "movaps\t{%1, %0|%0, %1}";
+ else
+ return "movdqa\t{%1, %0|%0, %1}";
+}
[(set_attr "type" "ssemov")
- (set_attr "mode" "V4SF")])
+ (set (attr "mode")
+ (cond [(eq_attr "alternative" "0")
+ (if_then_else
+ (ne (symbol_ref "optimize_size")
+ (const_int 0))
+ (const_string "V4SF")
+ (const_string "TI"))
+ (eq_attr "alternative" "1")
+ (if_then_else
+ (ior (ne (symbol_ref "TARGET_SSE_TYPELESS_STORES")
+ (const_int 0))
+ (ne (symbol_ref "optimize_size")
+ (const_int 0)))
+ (const_string "V4SF")
+ (const_string "TI"))]
+ (const_string "TI")))])
(define_insn "movv16qi_internal"
[(set (match_operand:V16QI 0 "nonimmediate_operand" "=x,m")
- (match_operand:V16QI 1 "general_operand" "xm,x"))]
+ (match_operand:V16QI 1 "nonimmediate_operand" "xm,x"))]
"TARGET_SSE2"
- ;; @@@ let's try to use movaps here.
- "movaps\t{%1, %0|%0, %1}"
+{
+ if (get_attr_mode (insn) == MODE_V4SF)
+ return "movaps\t{%1, %0|%0, %1}";
+ else
+ return "movdqa\t{%1, %0|%0, %1}";
+}
[(set_attr "type" "ssemov")
- (set_attr "mode" "V4SF")])
+ (set (attr "mode")
+ (cond [(eq_attr "alternative" "0")
+ (if_then_else
+ (ne (symbol_ref "optimize_size")
+ (const_int 0))
+ (const_string "V4SF")
+ (const_string "TI"))
+ (eq_attr "alternative" "1")
+ (if_then_else
+ (ior (ne (symbol_ref "TARGET_SSE_TYPELESS_STORES")
+ (const_int 0))
+ (ne (symbol_ref "optimize_size")
+ (const_int 0)))
+ (const_string "V4SF")
+ (const_string "TI"))]
+ (const_string "TI")))])
(define_expand "movv2df"
[(set (match_operand:V2DF 0 "general_operand" "")
@@ -17932,12 +18330,21 @@
(define_expand "movv4si"
[(set (match_operand:V4SI 0 "general_operand" "")
(match_operand:V4SI 1 "general_operand" ""))]
- "TARGET_MMX"
+ "TARGET_SSE"
{
ix86_expand_vector_move (V4SImode, operands);
DONE;
})
+(define_expand "movv2di"
+ [(set (match_operand:V2DI 0 "general_operand" "")
+ (match_operand:V2DI 1 "general_operand" ""))]
+ "TARGET_SSE"
+{
+ ix86_expand_vector_move (V2DImode, operands);
+ DONE;
+})
+
(define_expand "movv2si"
[(set (match_operand:V2SI 0 "general_operand" "")
(match_operand:V2SI 1 "general_operand" ""))]
@@ -18088,26 +18495,83 @@
[(set (match_operand:TI 0 "nonimmediate_operand" "=x,x,m")
(match_operand:TI 1 "general_operand" "O,xm,x"))]
"TARGET_SSE && !TARGET_64BIT"
- "@
- xorps\t%0, %0
- movaps\t{%1, %0|%0, %1}
- movaps\t{%1, %0|%0, %1}"
+{
+ switch (which_alternative)
+ {
+ case 0:
+ if (get_attr_mode (insn) == MODE_V4SF)
+ return "xorps\t%0, %0";
+ else
+ return "pxor\t%0, %0";
+ case 1:
+ case 2:
+ if (get_attr_mode (insn) == MODE_V4SF)
+ return "movaps\t{%1, %0|%0, %1}";
+ else
+ return "movdqa\t{%1, %0|%0, %1}";
+ default:
+ abort ();
+ }
+}
[(set_attr "type" "ssemov,ssemov,ssemov")
- (set_attr "mode" "V4SF")])
+ (set (attr "mode")
+ (cond [(eq_attr "alternative" "0,1")
+ (if_then_else
+ (ne (symbol_ref "optimize_size")
+ (const_int 0))
+ (const_string "V4SF")
+ (const_string "TI"))
+ (eq_attr "alternative" "2")
+ (if_then_else
+ (ne (symbol_ref "optimize_size")
+ (const_int 0))
+ (const_string "V4SF")
+ (const_string "TI"))]
+ (const_string "TI")))])
(define_insn "*movti_rex64"
[(set (match_operand:TI 0 "nonimmediate_operand" "=r,o,x,mx,x")
(match_operand:TI 1 "general_operand" "riFo,riF,O,x,m"))]
"TARGET_64BIT
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
- "@
- #
- #
- xorps\t%0, %0
- movaps\\t{%1, %0|%0, %1}
- movaps\\t{%1, %0|%0, %1}"
+{
+ switch (which_alternative)
+ {
+ case 0:
+ case 1:
+ return "#";
+ case 2:
+ if (get_attr_mode (insn) == MODE_V4SF)
+ return "xorps\t%0, %0";
+ else
+ return "pxor\t%0, %0";
+ case 3:
+ case 4:
+ if (get_attr_mode (insn) == MODE_V4SF)
+ return "movaps\t{%1, %0|%0, %1}";
+ else
+ return "movdqa\t{%1, %0|%0, %1}";
+ default:
+ abort ();
+ }
+}
[(set_attr "type" "*,*,ssemov,ssemov,ssemov")
- (set_attr "mode" "V4SF")])
+ (set (attr "mode")
+ (cond [(eq_attr "alternative" "2,3")
+ (if_then_else
+ (ne (symbol_ref "optimize_size")
+ (const_int 0))
+ (const_string "V4SF")
+ (const_string "TI"))
+ (eq_attr "alternative" "4")
+ (if_then_else
+ (ior (ne (symbol_ref "TARGET_SSE_TYPELESS_STORES")
+ (const_int 0))
+ (ne (symbol_ref "optimize_size")
+ (const_int 0)))
+ (const_string "V4SF")
+ (const_string "TI"))]
+ (const_string "DI")))])
(define_split
[(set (match_operand:TI 0 "nonimmediate_operand" "")
@@ -18454,236 +18918,313 @@
;; SSE logical operations.
+;; SSE defines logical operations on floating point values. This brings
+;; interesting challenge to RTL representation where logicals are only valid
+;; on integral types. We deal with this by representing the floating point
+;; logical as logical on arguments casted to TImode as this is what hardware
+;; really does. Unfortunately hardware requires the type information to be
+;; present and thus we must avoid subregs from being simplified and elliminated
+;; in later compilation phases.
+;;
+;; We have following variants from each instruction:
+;; sse_andsf3 - the operation taking V4SF vector operands
+;; and doing TImode cast on them
+;; *sse_andsf3_memory - the operation taking one memory operand casted to
+;; TImode, since backend insist on elliminating casts
+;; on memory operands
+;; sse_andti3_sf_1 - the operation taking SF scalar operands.
+;; We can not accept memory operand here as instruction reads
+;; whole scalar. This is generated only post reload by GCC
+;; scalar float operations that expands to logicals (fabs)
+;; sse_andti3_sf_2 - the operation taking SF scalar input and TImode
+;; memory operand. Eventually combine can be able
+;; to synthetize these using splitter.
+;; sse2_anddf3, *sse2_anddf3_memory
+;;
+;;
;; These are not called andti3 etc. because we really really don't want
;; the compiler to widen DImode ands to TImode ands and then try to move
;; into DImode subregs of SSE registers, and them together, and move out
;; of DImode subregs again!
+;; SSE1 single precision floating point logical operation
+(define_expand "sse_andv4sf3"
+ [(set (subreg:TI (match_operand:V4SF 0 "register_operand" "") 0)
+ (and:TI (subreg:TI (match_operand:V4SF 1 "register_operand" "") 0)
+ (subreg:TI (match_operand:V4SF 2 "nonimmediate_operand" "") 0)))]
+ "TARGET_SSE"
+ "")
-(define_insn "*sse_andti3_df_1"
- [(set (subreg:TI (match_operand:DF 0 "register_operand" "=Y") 0)
- (and:TI (subreg:TI (match_operand:DF 1 "register_operand" "%0") 0)
- (subreg:TI (match_operand:DF 2 "register_operand" "Y") 0)))]
- "TARGET_SSE2"
- "andpd\t{%2, %0|%0, %2}"
+(define_insn "*sse_andv4sf3"
+ [(set (subreg:TI (match_operand:V4SF 0 "register_operand" "=x") 0)
+ (and:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
+ (match_operand:TI 2 "nonimmediate_operand" "xm")))]
+ "TARGET_SSE
+ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
+ "andps\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
- (set_attr "mode" "V2DF")])
+ (set_attr "mode" "V4SF")])
-(define_insn "*sse_andti3_df_2"
- [(set (subreg:TI (match_operand:DF 0 "register_operand" "=Y") 0)
- (and:TI (subreg:TI (match_operand:DF 1 "register_operand" "0") 0)
- (match_operand:TI 2 "nonimmediate_operand" "Ym")))]
- "TARGET_SSE2"
- "andpd\t{%2, %0|%0, %2}"
+(define_insn "*sse_andsf3"
+ [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0)
+ (and:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
+ (match_operand:TI 2 "nonimmediate_operand" "xm")))]
+ "TARGET_SSE
+ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
+ "andps\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
- (set_attr "mode" "V2DF")])
+ (set_attr "mode" "V4SF")])
-(define_insn "*sse_andti3_sf_1"
- [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0)
- (and:TI (subreg:TI (match_operand:SF 1 "register_operand" "%0") 0)
- (subreg:TI (match_operand:SF 2 "register_operand" "x") 0)))]
+(define_expand "sse_nandv4sf3"
+ [(set (subreg:TI (match_operand:V4SF 0 "register_operand" "") 0)
+ (and:TI (not:TI (subreg:TI (match_operand:V4SF 1 "register_operand" "") 0))
+ (subreg:TI (match_operand:V4SF 2 "nonimmediate_operand" "") 0)))]
"TARGET_SSE"
- "andps\t{%2, %0|%0, %2}"
+ "")
+
+(define_insn "*sse_nandv4sf3"
+ [(set (subreg:TI (match_operand:V4SF 0 "register_operand" "=x") 0)
+ (and:TI (not:TI (match_operand:TI 1 "register_operand" "0"))
+ (match_operand:TI 2 "nonimmediate_operand" "xm")))]
+ "TARGET_SSE"
+ "andnps\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
(set_attr "mode" "V4SF")])
-(define_insn "*sse_andti3_sf_2"
+(define_insn "*sse_nandsf3"
[(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0)
- (and:TI (subreg:TI (match_operand:SF 1 "register_operand" "0") 0)
- (match_operand:TI 2 "nonimmediate_operand" "xm")))]
+ (and:TI (not:TI (match_operand:TI 1 "register_operand" "0"))
+ (match_operand:TI 2 "nonimmediate_operand" "xm")))]
"TARGET_SSE"
- "andps\t{%2, %0|%0, %2}"
+ "andnps\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
(set_attr "mode" "V4SF")])
-(define_insn "sse_andti3"
- [(set (match_operand:TI 0 "register_operand" "=x")
- (and:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
+(define_expand "sse_iorv4sf3"
+ [(set (subreg:TI (match_operand:V4SF 0 "register_operand" "") 0)
+ (ior:TI (subreg:TI (match_operand:V4SF 1 "register_operand" "") 0)
+ (subreg:TI (match_operand:V4SF 2 "nonimmediate_operand" "") 0)))]
+ "TARGET_SSE"
+ "")
+
+(define_insn "*sse_iorv4sf3"
+ [(set (subreg:TI (match_operand:V4SF 0 "register_operand" "=x") 0)
+ (ior:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
(match_operand:TI 2 "nonimmediate_operand" "xm")))]
- "TARGET_SSE && !TARGET_SSE2
+ "TARGET_SSE
&& (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
- "andps\t{%2, %0|%0, %2}"
+ "orps\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
(set_attr "mode" "V4SF")])
-(define_insn "sse2_andti3"
- [(set (match_operand:TI 0 "register_operand" "=x")
- (and:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
+(define_insn "*sse_iorsf3"
+ [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0)
+ (ior:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
(match_operand:TI 2 "nonimmediate_operand" "xm")))]
- "TARGET_SSE2
+ "TARGET_SSE
&& (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
- "pand\t{%2, %0|%0, %2}"
+ "orps\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
- (set_attr "mode" "TI")])
+ (set_attr "mode" "V4SF")])
-(define_insn "sse2_andv2di3"
- [(set (match_operand:V2DI 0 "register_operand" "=x")
- (and:V2DI (match_operand:V2DI 1 "nonimmediate_operand" "%0")
- (match_operand:V2DI 2 "nonimmediate_operand" "xm")))]
- "TARGET_SSE2
+(define_expand "sse_xorv4sf3"
+ [(set (subreg:TI (match_operand:V4SF 0 "register_operand" "") 0)
+ (xor:TI (subreg:TI (match_operand:V4SF 1 "register_operand" "") 0)
+ (subreg:TI (match_operand:V4SF 2 "nonimmediate_operand" "") 0)))]
+ "TARGET_SSE
&& (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
- "pand\t{%2, %0|%0, %2}"
- [(set_attr "type" "sselog")
- (set_attr "mode" "TI")])
-
-(define_insn "*sse_nandti3_df"
- [(set (subreg:TI (match_operand:DF 0 "register_operand" "=Y") 0)
- (and:TI (not:TI (subreg:TI (match_operand:DF 1 "register_operand" "0") 0))
- (match_operand:TI 2 "nonimmediate_operand" "Ym")))]
- "TARGET_SSE2"
- "andnpd\t{%2, %0|%0, %2}"
- [(set_attr "type" "sselog")
- (set_attr "mode" "V2DF")])
+ "")
-(define_insn "*sse_nandti3_sf"
- [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0)
- (and:TI (not:TI (subreg:TI (match_operand:SF 1 "register_operand" "0") 0))
+(define_insn "*sse_xorv4sf3"
+ [(set (subreg:TI (match_operand:V4SF 0 "register_operand" "=x") 0)
+ (xor:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
(match_operand:TI 2 "nonimmediate_operand" "xm")))]
- "TARGET_SSE"
- "andnps\t{%2, %0|%0, %2}"
+ "TARGET_SSE
+ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
+ "xorps\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
(set_attr "mode" "V4SF")])
-(define_insn "sse_nandti3"
- [(set (match_operand:TI 0 "register_operand" "=x")
- (and:TI (not:TI (match_operand:TI 1 "register_operand" "0"))
+(define_insn "*sse_xorsf3"
+ [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0)
+ (xor:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
(match_operand:TI 2 "nonimmediate_operand" "xm")))]
- "TARGET_SSE && !TARGET_SSE2"
- "andnps\t{%2, %0|%0, %2}"
+ "TARGET_SSE
+ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
+ "xorps\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
(set_attr "mode" "V4SF")])
-(define_insn "sse2_nandti3"
- [(set (match_operand:TI 0 "register_operand" "=x")
- (and:TI (not:TI (match_operand:TI 1 "register_operand" "0"))
- (match_operand:TI 2 "nonimmediate_operand" "xm")))]
+;; SSE2 double precision floating point logical operation
+
+(define_expand "sse2_andv2df3"
+ [(set (subreg:TI (match_operand:V2DF 0 "register_operand" "") 0)
+ (and:TI (subreg:TI (match_operand:V2DF 1 "register_operand" "") 0)
+ (subreg:TI (match_operand:V2DF 2 "nonimmediate_operand" "") 0)))]
"TARGET_SSE2"
- "pandn\t{%2, %0|%0, %2}"
+ "")
+
+(define_insn "*sse2_andv2df3"
+ [(set (subreg:TI (match_operand:V2DF 0 "register_operand" "=x") 0)
+ (and:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
+ (match_operand:TI 2 "nonimmediate_operand" "xm")))]
+ "TARGET_SSE2
+ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
+ "andpd\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
- (set_attr "mode" "TI")])
+ (set_attr "mode" "V2DF")])
-(define_insn "sse2_nandv2di3"
- [(set (match_operand:V2DI 0 "register_operand" "=x")
- (and:V2DI (not:V2DI (match_operand:V2DI 1 "nonimmediate_operand" "%0"))
- (match_operand:V2DI 2 "nonimmediate_operand" "xm")))]
+(define_insn "*sse2_andv2df3"
+ [(set (subreg:TI (match_operand:DF 0 "register_operand" "=x") 0)
+ (and:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
+ (match_operand:TI 2 "nonimmediate_operand" "xm")))]
"TARGET_SSE2
&& (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
- "pandn\t{%2, %0|%0, %2}"
+ "andpd\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
- (set_attr "mode" "TI")])
+ (set_attr "mode" "V2DF")])
-(define_insn "*sse_iorti3_df_1"
- [(set (subreg:TI (match_operand:DF 0 "register_operand" "=Y") 0)
- (ior:TI (subreg:TI (match_operand:DF 1 "register_operand" "%0") 0)
- (subreg:TI (match_operand:DF 2 "register_operand" "Y") 0)))]
+(define_expand "sse2_nandv2df3"
+ [(set (subreg:TI (match_operand:V2DF 0 "register_operand" "") 0)
+ (and:TI (not:TI (subreg:TI (match_operand:V2DF 1 "register_operand" "") 0))
+ (subreg:TI (match_operand:V2DF 2 "nonimmediate_operand" "") 0)))]
"TARGET_SSE2"
- "orpd\t{%2, %0|%0, %2}"
+ "")
+
+(define_insn "*sse2_nandv2df3"
+ [(set (subreg:TI (match_operand:V2DF 0 "register_operand" "=x") 0)
+ (and:TI (not:TI (match_operand:TI 1 "register_operand" "0"))
+ (match_operand:TI 2 "nonimmediate_operand" "xm")))]
+ "TARGET_SSE2"
+ "andnpd\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
(set_attr "mode" "V2DF")])
-(define_insn "*sse_iorti3_df_2"
+(define_insn "*sse_nandti3_df"
[(set (subreg:TI (match_operand:DF 0 "register_operand" "=Y") 0)
- (ior:TI (subreg:TI (match_operand:DF 1 "register_operand" "0") 0)
+ (and:TI (not:TI (match_operand:TI 1 "register_operand" "0"))
(match_operand:TI 2 "nonimmediate_operand" "Ym")))]
"TARGET_SSE2"
+ "andnpd\t{%2, %0|%0, %2}"
+ [(set_attr "type" "sselog")
+ (set_attr "mode" "V2DF")])
+
+(define_expand "sse2_iorv2df3"
+ [(set (subreg:TI (match_operand:V2DF 0 "register_operand" "") 0)
+ (ior:TI (subreg:TI (match_operand:V2DF 1 "register_operand" "") 0)
+ (subreg:TI (match_operand:V2DF 2 "nonimmediate_operand" "") 0)))]
+ "TARGET_SSE2"
+ "")
+
+(define_insn "*sse2_iorv2df3"
+ [(set (subreg:TI (match_operand:V2DF 0 "register_operand" "=x") 0)
+ (ior:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
+ (match_operand:TI 2 "nonimmediate_operand" "xm")))]
+ "TARGET_SSE2
+ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
"orpd\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
(set_attr "mode" "V2DF")])
-(define_insn "*sse_iorti3_sf_1"
- [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0)
- (ior:TI (subreg:TI (match_operand:SF 1 "register_operand" "%0") 0)
- (subreg:TI (match_operand:SF 2 "register_operand" "x") 0)))]
- "TARGET_SSE"
- "orps\t{%2, %0|%0, %2}"
+(define_insn "*sse2_iordf3"
+ [(set (subreg:TI (match_operand:DF 0 "register_operand" "=x") 0)
+ (ior:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
+ (match_operand:TI 2 "nonimmediate_operand" "xm")))]
+ "TARGET_SSE2
+ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
+ "orpd\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
- (set_attr "mode" "V4SF")])
+ (set_attr "mode" "V2DF")])
-(define_insn "*sse_iorti3_sf_2"
- [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0)
- (ior:TI (subreg:TI (match_operand:SF 1 "register_operand" "0") 0)
+(define_expand "sse2_xorv2df3"
+ [(set (subreg:TI (match_operand:V2DF 0 "register_operand" "") 0)
+ (xor:TI (subreg:TI (match_operand:V2DF 1 "nonimmediate_operand" "") 0)
+ (subreg:TI (match_operand:V2DF 2 "nonimmediate_operand" "") 0)))]
+ "TARGET_SSE2"
+ "")
+
+(define_insn "*sse2_xorv2df3"
+ [(set (subreg:TI (match_operand:V2DF 0 "register_operand" "=x") 0)
+ (xor:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
(match_operand:TI 2 "nonimmediate_operand" "xm")))]
- "TARGET_SSE"
- "orps\t{%2, %0|%0, %2}"
+ "TARGET_SSE2
+ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
+ "xorpd\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
- (set_attr "mode" "V4SF")])
+ (set_attr "mode" "V2DF")])
-(define_insn "sse_iorti3"
- [(set (match_operand:TI 0 "register_operand" "=x")
- (ior:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
+(define_insn "*sse2_xordf3"
+ [(set (subreg:TI (match_operand:DF 0 "register_operand" "=x") 0)
+ (xor:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
(match_operand:TI 2 "nonimmediate_operand" "xm")))]
- "TARGET_SSE && !TARGET_SSE2
+ "TARGET_SSE2
&& (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
- "orps\t{%2, %0|%0, %2}"
+ "xorpd\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
- (set_attr "mode" "V4SF")])
+ (set_attr "mode" "V2DF")])
-(define_insn "sse2_iorti3"
+;; SSE2 integral logicals. These patterns must always come after floating
+;; point ones since we don't want compiler to use integer opcodes on floating
+;; point SSE values to avoid matching of subregs in the match_operand.
+(define_insn "*sse2_andti3"
[(set (match_operand:TI 0 "register_operand" "=x")
- (ior:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
+ (and:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
(match_operand:TI 2 "nonimmediate_operand" "xm")))]
"TARGET_SSE2
&& (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
- "por\t{%2, %0|%0, %2}"
+ "pand\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
(set_attr "mode" "TI")])
-(define_insn "sse2_iorv2di3"
+(define_insn "sse2_andv2di3"
[(set (match_operand:V2DI 0 "register_operand" "=x")
- (ior:V2DI (match_operand:V2DI 1 "nonimmediate_operand" "%0")
+ (and:V2DI (match_operand:V2DI 1 "nonimmediate_operand" "%0")
(match_operand:V2DI 2 "nonimmediate_operand" "xm")))]
"TARGET_SSE2
&& (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
- "por\t{%2, %0|%0, %2}"
+ "pand\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
(set_attr "mode" "TI")])
-(define_insn "*sse_xorti3_df_1"
- [(set (subreg:TI (match_operand:DF 0 "register_operand" "=Y") 0)
- (xor:TI (subreg:TI (match_operand:DF 1 "register_operand" "%0") 0)
- (subreg:TI (match_operand:DF 2 "register_operand" "Y") 0)))]
- "TARGET_SSE2"
- "xorpd\t{%2, %0|%0, %2}"
- [(set_attr "type" "sselog")
- (set_attr "mode" "V2DF")])
-
-(define_insn "*sse_xorti3_df_2"
- [(set (subreg:TI (match_operand:DF 0 "register_operand" "=Y") 0)
- (xor:TI (subreg:TI (match_operand:DF 1 "register_operand" "0") 0)
- (match_operand:TI 2 "nonimmediate_operand" "Ym")))]
+(define_insn "*sse2_nandti3"
+ [(set (match_operand:TI 0 "register_operand" "=x")
+ (and:TI (not:TI (match_operand:TI 1 "register_operand" "0"))
+ (match_operand:TI 2 "nonimmediate_operand" "xm")))]
"TARGET_SSE2"
- "xorpd\t{%2, %0|%0, %2}"
+ "pandn\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
- (set_attr "mode" "V2DF")])
+ (set_attr "mode" "TI")])
-(define_insn "*sse_xorti3_sf_1"
- [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0)
- (xor:TI (subreg:TI (match_operand:SF 1 "register_operand" "%0") 0)
- (subreg:TI (match_operand:SF 2 "register_operand" "x") 0)))]
- "TARGET_SSE"
- "xorps\t{%2, %0|%0, %2}"
+(define_insn "sse2_nandv2di3"
+ [(set (match_operand:V2DI 0 "register_operand" "=x")
+ (and:V2DI (not:V2DI (match_operand:V2DI 1 "nonimmediate_operand" "%0"))
+ (match_operand:V2DI 2 "nonimmediate_operand" "xm")))]
+ "TARGET_SSE2
+ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
+ "pandn\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
- (set_attr "mode" "V4SF")])
+ (set_attr "mode" "TI")])
-(define_insn "*sse_xorti3_sf_2"
- [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0)
- (xor:TI (subreg:TI (match_operand:SF 1 "register_operand" "0") 0)
+(define_insn "*sse2_iorti3"
+ [(set (match_operand:TI 0 "register_operand" "=x")
+ (ior:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
(match_operand:TI 2 "nonimmediate_operand" "xm")))]
- "TARGET_SSE"
- "xorps\t{%2, %0|%0, %2}"
+ "TARGET_SSE2
+ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
+ "por\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
- (set_attr "mode" "V4SF")])
+ (set_attr "mode" "TI")])
-(define_insn "sse_xorti3"
- [(set (match_operand:TI 0 "register_operand" "=x")
- (xor:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
- (match_operand:TI 2 "nonimmediate_operand" "xm")))]
- "TARGET_SSE && !TARGET_SSE2
+(define_insn "sse2_iorv2di3"
+ [(set (match_operand:V2DI 0 "register_operand" "=x")
+ (ior:V2DI (match_operand:V2DI 1 "nonimmediate_operand" "%0")
+ (match_operand:V2DI 2 "nonimmediate_operand" "xm")))]
+ "TARGET_SSE2
&& (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
- "xorps\t{%2, %0|%0, %2}"
+ "por\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog")
- (set_attr "mode" "V4SF")])
+ (set_attr "mode" "TI")])
-(define_insn "sse2_xorti3"
+(define_insn "*sse2_xorti3"
[(set (match_operand:TI 0 "register_operand" "=x")
(xor:TI (match_operand:TI 1 "nonimmediate_operand" "%0")
(match_operand:TI 2 "nonimmediate_operand" "xm")))]
@@ -18707,9 +19248,34 @@
;; this insn.
(define_insn "sse_clrv4sf"
[(set (match_operand:V4SF 0 "register_operand" "=x")
- (unspec:V4SF [(const_int 0)] UNSPEC_NOP))]
+ (match_operand:V4SF 1 "const0_operand" "X"))]
"TARGET_SSE"
- "xorps\t{%0, %0|%0, %0}"
+{
+ if (get_attr_mode (insn) == MODE_TI)
+ return "pxor\t{%0, %0|%0, %0}";
+ else
+ return "xorps\t{%0, %0|%0, %0}";
+}
+ [(set_attr "type" "sselog")
+ (set_attr "memory" "none")
+ (set (attr "mode")
+ (if_then_else
+ (and (and (ne (symbol_ref "TARGET_SSE_LOAD0_BY_PXOR")
+ (const_int 0))
+ (ne (symbol_ref "TARGET_SSE2")
+ (const_int 0)))
+ (eq (symbol_ref "optimize_size")
+ (const_int 0)))
+ (const_string "TI")
+ (const_string "V4SF")))])
+
+;; Use xor, but don't show input operands so they aren't live before
+;; this insn.
+(define_insn "sse_clrv2df"
+ [(set (match_operand:V2DF 0 "register_operand" "=x")
+ (unspec:V2DF [(const_int 0)] UNSPEC_NOP))]
+ "TARGET_SSE2"
+ "xorpd\t{%0, %0|%0, %0}"
[(set_attr "type" "sselog")
(set_attr "memory" "none")
(set_attr "mode" "V4SF")])
@@ -18776,13 +19342,12 @@
(define_insn "sse_comi"
[(set (reg:CCFP 17)
- (match_operator:CCFP 2 "sse_comparison_operator"
- [(vec_select:SF
- (match_operand:V4SF 0 "register_operand" "x")
- (parallel [(const_int 0)]))
- (vec_select:SF
- (match_operand:V4SF 1 "register_operand" "x")
- (parallel [(const_int 0)]))]))]
+ (compare:CCFP (vec_select:SF
+ (match_operand:V4SF 0 "register_operand" "x")
+ (parallel [(const_int 0)]))
+ (vec_select:SF
+ (match_operand:V4SF 1 "register_operand" "x")
+ (parallel [(const_int 0)]))))]
"TARGET_SSE"
"comiss\t{%1, %0|%0, %1}"
[(set_attr "type" "ssecmp")
@@ -18790,13 +19355,12 @@
(define_insn "sse_ucomi"
[(set (reg:CCFPU 17)
- (match_operator:CCFPU 2 "sse_comparison_operator"
- [(vec_select:SF
- (match_operand:V4SF 0 "register_operand" "x")
- (parallel [(const_int 0)]))
- (vec_select:SF
- (match_operand:V4SF 1 "register_operand" "x")
- (parallel [(const_int 0)]))]))]
+ (compare:CCFPU (vec_select:SF
+ (match_operand:V4SF 0 "register_operand" "x")
+ (parallel [(const_int 0)]))
+ (vec_select:SF
+ (match_operand:V4SF 1 "register_operand" "x")
+ (parallel [(const_int 0)]))))]
"TARGET_SSE"
"ucomiss\t{%1, %0|%0, %1}"
[(set_attr "type" "ssecmp")
@@ -18888,7 +19452,6 @@
[(set_attr "type" "sse")
(set_attr "mode" "SF")])
-
;; SSE <-> integer/MMX conversions
(define_insn "cvtpi2ps"
@@ -18936,6 +19499,18 @@
[(set_attr "type" "ssecvt")
(set_attr "mode" "SF")])
+(define_insn "cvtsi2ssq"
+ [(set (match_operand:V4SF 0 "register_operand" "=x")
+ (vec_merge:V4SF
+ (match_operand:V4SF 1 "register_operand" "0")
+ (vec_duplicate:V4SF
+ (float:SF (match_operand:DI 2 "nonimmediate_operand" "rm")))
+ (const_int 14)))]
+ "TARGET_SSE && TARGET_64BIT"
+ "cvtsi2ssq\t{%2, %0|%0, %2}"
+ [(set_attr "type" "ssecvt")
+ (set_attr "mode" "SF")])
+
(define_insn "cvtss2si"
[(set (match_operand:SI 0 "register_operand" "=r")
(vec_select:SI
@@ -20263,42 +20838,6 @@
"minsd\t{%2, %0|%0, %2}"
[(set_attr "type" "sseadd")
(set_attr "mode" "DF")])
-
-(define_insn "sse2_anddf3"
- [(set (match_operand:V2DF 0 "register_operand" "=x")
- (subreg:V2DF (and:TI (subreg:TI (match_operand:V2DF 1 "register_operand" "%0") 0)
- (subreg:TI (match_operand:V2DF 2 "nonimmediate_operand" "xm") 0)) 0))]
- "TARGET_SSE2"
- "andpd\t{%2, %0|%0, %2}"
- [(set_attr "type" "sselog")
- (set_attr "mode" "V2DF")])
-
-(define_insn "sse2_nanddf3"
- [(set (match_operand:V2DF 0 "register_operand" "=x")
- (subreg:V2DF (and:TI (not:TI (subreg:TI (match_operand:V2DF 1 "register_operand" "0") 0))
- (subreg:TI (match_operand:V2DF 2 "nonimmediate_operand" "xm") 0)) 0))]
- "TARGET_SSE2"
- "andnpd\t{%2, %0|%0, %2}"
- [(set_attr "type" "sselog")
- (set_attr "mode" "V2DF")])
-
-(define_insn "sse2_iordf3"
- [(set (match_operand:V2DF 0 "register_operand" "=x")
- (subreg:V2DF (ior:TI (subreg:TI (match_operand:V2DF 1 "register_operand" "%0") 0)
- (subreg:TI (match_operand:V2DF 2 "nonimmediate_operand" "xm") 0)) 0))]
- "TARGET_SSE2"
- "orpd\t{%2, %0|%0, %2}"
- [(set_attr "type" "sselog")
- (set_attr "mode" "V2DF")])
-
-(define_insn "sse2_xordf3"
- [(set (match_operand:V2DF 0 "register_operand" "=x")
- (subreg:V2DF (xor:TI (subreg:TI (match_operand:V2DF 1 "register_operand" "%0") 0)
- (subreg:TI (match_operand:V2DF 2 "nonimmediate_operand" "xm") 0)) 0))]
- "TARGET_SSE2"
- "xorpd\t{%2, %0|%0, %2}"
- [(set_attr "type" "sselog")
- (set_attr "mode" "V2DF")])
;; SSE2 square root. There doesn't appear to be an extension for the
;; reciprocal/rsqrt instructions if the Intel manual is to be believed.
@@ -20339,7 +20878,12 @@
[(match_operand:V2DF 1 "register_operand" "0")
(match_operand:V2DF 2 "nonimmediate_operand" "x")])))]
"TARGET_SSE2"
- "cmpn%D3pd\t{%2, %0|%0, %2}"
+{
+ if (GET_CODE (operands[3]) == UNORDERED)
+ return "cmpordps\t{%2, %0|%0, %2}";
+ else
+ return "cmpn%D3pd\t{%2, %0|%0, %2}";
+}
[(set_attr "type" "ssecmp")
(set_attr "mode" "V2DF")])
@@ -20366,19 +20910,23 @@
(subreg:V2DI (match_dup 1) 0)
(const_int 1)))]
"TARGET_SSE2"
- "cmp%D3sd\t{%2, %0|%0, %2}"
+{
+ if (GET_CODE (operands[3]) == UNORDERED)
+ return "cmpordsd\t{%2, %0|%0, %2}";
+ else
+ return "cmpn%D3sd\t{%2, %0|%0, %2}";
+}
[(set_attr "type" "ssecmp")
(set_attr "mode" "DF")])
(define_insn "sse2_comi"
[(set (reg:CCFP 17)
- (match_operator:CCFP 2 "sse_comparison_operator"
- [(vec_select:DF
- (match_operand:V2DF 0 "register_operand" "x")
- (parallel [(const_int 0)]))
- (vec_select:DF
- (match_operand:V2DF 1 "register_operand" "x")
- (parallel [(const_int 0)]))]))]
+ (compare:CCFP (vec_select:DF
+ (match_operand:V2DF 0 "register_operand" "x")
+ (parallel [(const_int 0)]))
+ (vec_select:DF
+ (match_operand:V2DF 1 "register_operand" "x")
+ (parallel [(const_int 0)]))))]
"TARGET_SSE2"
"comisd\t{%1, %0|%0, %1}"
[(set_attr "type" "ssecmp")
@@ -20386,13 +20934,12 @@
(define_insn "sse2_ucomi"
[(set (reg:CCFPU 17)
- (match_operator:CCFPU 2 "sse_comparison_operator"
- [(vec_select:DF
- (match_operand:V2DF 0 "register_operand" "x")
- (parallel [(const_int 0)]))
- (vec_select:DF
- (match_operand:V2DF 1 "register_operand" "x")
- (parallel [(const_int 0)]))]))]
+ (compare:CCFPU (vec_select:DF
+ (match_operand:V2DF 0 "register_operand" "x")
+ (parallel [(const_int 0)]))
+ (vec_select:DF
+ (match_operand:V2DF 1 "register_operand" "x")
+ (parallel [(const_int 0)]))))]
"TARGET_SSE2"
"ucomisd\t{%1, %0|%0, %1}"
[(set_attr "type" "ssecmp")
@@ -20584,7 +21131,7 @@
(vec_merge:V4SF (match_operand:V4SF 1 "register_operand" "0")
(vec_duplicate:V4SF
(float_truncate:V2SF
- (match_operand:V2DF 2 "register_operand" "xm")))
+ (match_operand:V2DF 2 "nonimmediate_operand" "xm")))
(const_int 14)))]
"TARGET_SSE2"
"cvtsd2ss\t{%2, %0|%0, %2}"
@@ -20596,7 +21143,7 @@
(vec_merge:V2DF (match_operand:V2DF 1 "register_operand" "0")
(float_extend:V2DF
(vec_select:V2SF
- (match_operand:V4SF 2 "register_operand" "xm")
+ (match_operand:V4SF 2 "nonimmediate_operand" "xm")
(parallel [(const_int 0)
(const_int 1)])))
(const_int 2)))]
@@ -20872,10 +21419,20 @@
(define_insn "sse2_clrti"
[(set (match_operand:TI 0 "register_operand" "=x") (const_int 0))]
"TARGET_SSE2"
- "pxor\t{%0, %0|%0, %0}"
- [(set_attr "type" "sseiadd")
+{
+ if (get_attr_mode (insn) == MODE_TI)
+ return "pxor\t%0, %0";
+ else
+ return "xorps\t%0, %0";
+}
+ [(set_attr "type" "ssemov")
(set_attr "memory" "none")
- (set_attr "mode" "TI")])
+ (set (attr "mode")
+ (if_then_else
+ (ne (symbol_ref "optimize_size")
+ (const_int 0))
+ (const_string "V4SF")
+ (const_string "TI")))])
;; MMX unsigned averages/sum of absolute differences
@@ -21560,7 +22117,7 @@
(set_attr "mode" "V2DF")])
(define_insn "sse2_clflush"
- [(unspec_volatile [(match_operand:SI 0 "address_operand" "p")]
+ [(unspec_volatile [(match_operand 0 "address_operand" "p")]
UNSPECV_CLFLUSH)]
"TARGET_SSE2"
"clflush %0"
diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h
index d2113909ece..965120a1bb6 100644
--- a/gcc/config/i386/linux64.h
+++ b/gcc/config/i386/linux64.h
@@ -60,10 +60,6 @@ Boston, MA 02111-1307, USA. */
%{!m32:%{!dynamic-linker:-dynamic-linker /lib64/ld-linux-x86-64.so.2}}} \
%{static:-static}}"
-#define STARTFILE_PREFIX_SPEC "\
- %{m32: /usr/local/lib/ /lib/ /usr/lib/} \
- %{!m32: /usr/local/lib64/ /lib64/ /usr/lib64/}"
-
#undef STARTFILE_SPEC
#define STARTFILE_SPEC \
"%{!shared: \
diff --git a/gcc/config/i386/mmintrin.h b/gcc/config/i386/mmintrin.h
index 88e384f8011..52e5195fbaf 100644
--- a/gcc/config/i386/mmintrin.h
+++ b/gcc/config/i386/mmintrin.h
@@ -30,8 +30,11 @@
#ifndef _MMINTRIN_H_INCLUDED
#define _MMINTRIN_H_INCLUDED
+#ifndef __MMX__
+# error "MMX instruction set not enabled"
+#else
/* The data type intended for user use. */
-typedef unsigned long long __m64 __attribute__ ((__aligned__ (8)));
+typedef int __m64 __attribute__ ((__mode__ (__V2SI__)));
/* Internal data types for implementing the intrinsics. */
typedef int __v2si __attribute__ ((__mode__ (__V2SI__)));
@@ -49,14 +52,16 @@ _mm_empty (void)
static __inline __m64
_mm_cvtsi32_si64 (int __i)
{
- return (unsigned int) __i;
+ long long __tmp = (unsigned int)__i;
+ return (__m64) __tmp;
}
/* Convert the lower 32 bits of the __m64 object into an integer. */
static __inline int
_mm_cvtsi64_si32 (__m64 __i)
{
- return __i;
+ long long __tmp = (long long)__i;
+ return __tmp;
}
/* Pack the four 16-bit values from M1 into the lower four 8-bit values of
@@ -269,7 +274,7 @@ _mm_mullo_pi16 (__m64 __m1, __m64 __m2)
static __inline __m64
_mm_sll_pi16 (__m64 __m, __m64 __count)
{
- return (__m64) __builtin_ia32_psllw ((__v4hi)__m, __count);
+ return (__m64) __builtin_ia32_psllw ((__v4hi)__m, (long long)__count);
}
static __inline __m64
@@ -282,7 +287,7 @@ _mm_slli_pi16 (__m64 __m, int __count)
static __inline __m64
_mm_sll_pi32 (__m64 __m, __m64 __count)
{
- return (__m64) __builtin_ia32_pslld ((__v2si)__m, __count);
+ return (__m64) __builtin_ia32_pslld ((__v2si)__m, (long long)__count);
}
static __inline __m64
@@ -293,22 +298,22 @@ _mm_slli_pi32 (__m64 __m, int __count)
/* Shift the 64-bit value in M left by COUNT. */
static __inline __m64
-_mm_sll_pi64 (__m64 __m, __m64 __count)
+_mm_sll_si64 (__m64 __m, __m64 __count)
{
- return (__m64) __builtin_ia32_psllq (__m, __count);
+ return (__m64) __builtin_ia32_psllq ((long long)__m, (long long)__count);
}
static __inline __m64
-_mm_slli_pi64 (__m64 __m, int __count)
+_mm_slli_si64 (__m64 __m, int __count)
{
- return (__m64) __builtin_ia32_psllq (__m, __count);
+ return (__m64) __builtin_ia32_psllq ((long long)__m, (long long)__count);
}
/* Shift four 16-bit values in M right by COUNT; shift in the sign bit. */
static __inline __m64
_mm_sra_pi16 (__m64 __m, __m64 __count)
{
- return (__m64) __builtin_ia32_psraw ((__v4hi)__m, __count);
+ return (__m64) __builtin_ia32_psraw ((__v4hi)__m, (long long)__count);
}
static __inline __m64
@@ -321,7 +326,7 @@ _mm_srai_pi16 (__m64 __m, int __count)
static __inline __m64
_mm_sra_pi32 (__m64 __m, __m64 __count)
{
- return (__m64) __builtin_ia32_psrad ((__v2si)__m, __count);
+ return (__m64) __builtin_ia32_psrad ((__v2si)__m, (long long)__count);
}
static __inline __m64
@@ -334,7 +339,7 @@ _mm_srai_pi32 (__m64 __m, int __count)
static __inline __m64
_mm_srl_pi16 (__m64 __m, __m64 __count)
{
- return (__m64) __builtin_ia32_psrlw ((__v4hi)__m, __count);
+ return (__m64) __builtin_ia32_psrlw ((__v4hi)__m, (long long)__count);
}
static __inline __m64
@@ -347,7 +352,7 @@ _mm_srli_pi16 (__m64 __m, int __count)
static __inline __m64
_mm_srl_pi32 (__m64 __m, __m64 __count)
{
- return (__m64) __builtin_ia32_psrld ((__v2si)__m, __count);
+ return (__m64) __builtin_ia32_psrld ((__v2si)__m, (long long)__count);
}
static __inline __m64
@@ -358,22 +363,22 @@ _mm_srli_pi32 (__m64 __m, int __count)
/* Shift the 64-bit value in M left by COUNT; shift in zeros. */
static __inline __m64
-_mm_srl_pi64 (__m64 __m, __m64 __count)
+_mm_srl_si64 (__m64 __m, __m64 __count)
{
- return (__m64) __builtin_ia32_psrlq (__m, __count);
+ return (__m64) __builtin_ia32_psrlq ((long long)__m, (long long)__count);
}
static __inline __m64
-_mm_srli_pi64 (__m64 __m, int __count)
+_mm_srli_si64 (__m64 __m, int __count)
{
- return (__m64) __builtin_ia32_psrlq (__m, __count);
+ return (__m64) __builtin_ia32_psrlq ((long long)__m, (long long)__count);
}
/* Bit-wise AND the 64-bit values in M1 and M2. */
static __inline __m64
_mm_and_si64 (__m64 __m1, __m64 __m2)
{
- return __builtin_ia32_pand (__m1, __m2);
+ return (__m64) __builtin_ia32_pand ((long long)__m1, (long long)__m2);
}
/* Bit-wise complement the 64-bit value in M1 and bit-wise AND it with the
@@ -381,21 +386,21 @@ _mm_and_si64 (__m64 __m1, __m64 __m2)
static __inline __m64
_mm_andnot_si64 (__m64 __m1, __m64 __m2)
{
- return __builtin_ia32_pandn (__m1, __m2);
+ return (__m64) __builtin_ia32_pandn ((long long)__m1, (long long)__m2);
}
/* Bit-wise inclusive OR the 64-bit values in M1 and M2. */
static __inline __m64
_mm_or_si64 (__m64 __m1, __m64 __m2)
{
- return __builtin_ia32_por (__m1, __m2);
+ return (__m64)__builtin_ia32_por ((long long)__m1, (long long)__m2);
}
/* Bit-wise exclusive OR the 64-bit values in M1 and M2. */
static __inline __m64
_mm_xor_si64 (__m64 __m1, __m64 __m2)
{
- return __builtin_ia32_pxor (__m1, __m2);
+ return (__m64)__builtin_ia32_pxor ((long long)__m1, (long long)__m2);
}
/* Compare eight 8-bit values. The result of the comparison is 0xFF if the
@@ -444,7 +449,7 @@ _mm_cmpgt_pi32 (__m64 __m1, __m64 __m2)
static __inline __m64
_mm_setzero_si64 (void)
{
- return __builtin_ia32_mmx_zero ();
+ return (__m64)__builtin_ia32_mmx_zero ();
}
/* Creates a vector of two 32-bit values; I0 is least significant. */
@@ -539,4 +544,5 @@ _mm_set1_pi8 (char __b)
return _mm_set1_pi32 (__i);
}
+#endif /* __MMX__ */
#endif /* _MMINTRIN_H_INCLUDED */
diff --git a/gcc/config/i386/netbsd-elf.h b/gcc/config/i386/netbsd-elf.h
index a1591f732f1..4f49bd3e84f 100644
--- a/gcc/config/i386/netbsd-elf.h
+++ b/gcc/config/i386/netbsd-elf.h
@@ -121,4 +121,7 @@ Boston, MA 02111-1307, USA. */
we don't care about compatibility with older gcc versions. */
#define DEFAULT_PCC_STRUCT_RETURN 1
+/* Attempt to enable execute permissions on the stack. */
+#define TRANSFER_FROM_TRAMPOLINE NETBSD_ENABLE_EXECUTE_STACK
+
#define TARGET_VERSION fprintf (stderr, " (NetBSD/i386 ELF)");
diff --git a/gcc/config/i386/netbsd.h b/gcc/config/i386/netbsd.h
index ab0af773bd1..45ae893595e 100644
--- a/gcc/config/i386/netbsd.h
+++ b/gcc/config/i386/netbsd.h
@@ -67,3 +67,6 @@
prefix is added. */
#undef GOT_SYMBOL_NAME
#define GOT_SYMBOL_NAME "GLOBAL_OFFSET_TABLE_"
+
+/* Attempt to enable execute permissions on the stack. */
+#define TRANSFER_FROM_TRAMPOLINE NETBSD_ENABLE_EXECUTE_STACK
diff --git a/gcc/config/i386/netbsd64.h b/gcc/config/i386/netbsd64.h
index 89050bc540b..341b6d1189b 100644
--- a/gcc/config/i386/netbsd64.h
+++ b/gcc/config/i386/netbsd64.h
@@ -69,5 +69,7 @@ Boston, MA 02111-1307, USA. */
fprintf (FILE, "\tcall __mcount\n"); \
}
+/* Attempt to enable execute permissions on the stack. */
+#define TRANSFER_FROM_TRAMPOLINE NETBSD_ENABLE_EXECUTE_STACK
#define TARGET_VERSION fprintf (stderr, " (NetBSD/x86_64 ELF)");
diff --git a/gcc/config/i386/openbsd.h b/gcc/config/i386/openbsd.h
index 8f54026539b..60f16575e21 100644
--- a/gcc/config/i386/openbsd.h
+++ b/gcc/config/i386/openbsd.h
@@ -96,9 +96,6 @@ Boston, MA 02111-1307, USA. */
#undef ASM_PREFERRED_EH_DATA_FORMAT
-
-/* Note that we pick up ASM_OUTPUT_MI_THUNK from unix.h. */
-
#undef ASM_COMMENT_START
#define ASM_COMMENT_START ";#"
diff --git a/gcc/config/i386/t-linux64 b/gcc/config/i386/t-linux64
index 46a7caadf77..31b6ad46386 100644
--- a/gcc/config/i386/t-linux64
+++ b/gcc/config/i386/t-linux64
@@ -6,10 +6,9 @@ SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \
MULTILIB_OPTIONS = m64/m32
MULTILIB_DIRNAMES = 64 32
+MULTILIB_OSDIRNAMES = ../lib64 ../lib
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
-
-SHLIB_SLIBDIR_SUFFIXES = 64:64 32:
diff --git a/gcc/config/i386/unix.h b/gcc/config/i386/unix.h
index 3ba1bd5da7d..e69f26d7490 100644
--- a/gcc/config/i386/unix.h
+++ b/gcc/config/i386/unix.h
@@ -1,5 +1,5 @@
/* Definitions for Unix assembler syntax for the Intel 80386.
- Copyright (C) 1988, 1994, 1999, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1988, 1994, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -65,8 +65,3 @@ Boston, MA 02111-1307, USA. */
and returns float values in the 387. */
#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS)
-
-/* Output code to add DELTA to the first argument, and then jump to FUNCTION.
- Used for C++ multiple inheritance. */
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
- x86_output_mi_thunk (FILE, DELTA, FUNCTION);
diff --git a/gcc/config/i386/xmmintrin.h b/gcc/config/i386/xmmintrin.h
index 9442e963ae9..8c5d41b660e 100644
--- a/gcc/config/i386/xmmintrin.h
+++ b/gcc/config/i386/xmmintrin.h
@@ -30,6 +30,10 @@
#ifndef _XMMINTRIN_H_INCLUDED
#define _XMMINTRIN_H_INCLUDED
+#ifndef __SSE__
+# error "SSE instruction set not enabled"
+#else
+
/* We need type definitions from the MMX header file. */
#include <mmintrin.h>
@@ -245,13 +249,21 @@ _mm_cmple_ss (__m128 __A, __m128 __B)
static __inline __m128
_mm_cmpgt_ss (__m128 __A, __m128 __B)
{
- return (__m128) __builtin_ia32_cmpgtss ((__v4sf)__A, (__v4sf)__B);
+ return (__m128) __builtin_ia32_movss ((__v4sf) __A,
+ (__v4sf)
+ __builtin_ia32_cmpltss ((__v4sf) __B,
+ (__v4sf)
+ __A));
}
static __inline __m128
_mm_cmpge_ss (__m128 __A, __m128 __B)
{
- return (__m128) __builtin_ia32_cmpgess ((__v4sf)__A, (__v4sf)__B);
+ return (__m128) __builtin_ia32_movss ((__v4sf) __A,
+ (__v4sf)
+ __builtin_ia32_cmpless ((__v4sf) __B,
+ (__v4sf)
+ __A));
}
static __inline __m128
@@ -275,13 +287,21 @@ _mm_cmpnle_ss (__m128 __A, __m128 __B)
static __inline __m128
_mm_cmpngt_ss (__m128 __A, __m128 __B)
{
- return (__m128) __builtin_ia32_cmpngtss ((__v4sf)__A, (__v4sf)__B);
+ return (__m128) __builtin_ia32_movss ((__v4sf) __A,
+ (__v4sf)
+ __builtin_ia32_cmpnltss ((__v4sf) __B,
+ (__v4sf)
+ __A));
}
static __inline __m128
_mm_cmpnge_ss (__m128 __A, __m128 __B)
{
- return (__m128) __builtin_ia32_cmpngess ((__v4sf)__A, (__v4sf)__B);
+ return (__m128) __builtin_ia32_movss ((__v4sf) __A,
+ (__v4sf)
+ __builtin_ia32_cmpnless ((__v4sf) __B,
+ (__v4sf)
+ __A));
}
static __inline __m128
@@ -586,7 +606,7 @@ _mm_cvtps_pi16(__m128 __A)
__v4sf __losf = __builtin_ia32_movhlps (__hisf, __hisf);
__v2si __hisi = __builtin_ia32_cvtps2pi (__hisf);
__v2si __losi = __builtin_ia32_cvtps2pi (__losf);
- return (__m64) __builtin_ia32_packssdw (__losi, __hisi);
+ return (__m64) __builtin_ia32_packssdw (__hisi, __losi);
}
/* Convert the four SPFP values in A to four signed 8-bit integers. */
@@ -1017,7 +1037,7 @@ _mm_prefetch (void *__P, enum _mm_hint __I)
static __inline void
_mm_stream_pi (__m64 *__P, __m64 __A)
{
- __builtin_ia32_movntq (__P, __A);
+ __builtin_ia32_movntq (__P, (long long)__A);
}
/* Likewise. The address must be 16-byte aligned. */
@@ -1066,9 +1086,159 @@ typedef int __v4si __attribute__ ((mode (V4SI)));
typedef int __v8hi __attribute__ ((mode (V8HI)));
typedef int __v16qi __attribute__ ((mode (V16QI)));
-#define __m128i __m128
+/* Create a selector for use with the SHUFPD instruction. */
+#define _MM_SHUFFLE2(fp1,fp0) \
+ (((fp1) << 1) | (fp0))
+
+#define __m128i __v2di
#define __m128d __v2df
+/* Create a vector with element 0 as *P and the rest zero. */
+static __inline __m128d
+_mm_load_sd (double *__P)
+{
+ return (__m128d) __builtin_ia32_loadsd (__P);
+}
+
+/* Create a vector with all two elements equal to *P. */
+static __inline __m128d
+_mm_load1_pd (double *__P)
+{
+ __v2df __tmp = __builtin_ia32_loadsd (__P);
+ return (__m128d) __builtin_ia32_shufpd (__tmp, __tmp, _MM_SHUFFLE2 (0,0));
+}
+
+static __inline __m128d
+_mm_load_pd1 (double *__P)
+{
+ return _mm_load1_pd (__P);
+}
+
+/* Load two DPFP values from P. The addresd must be 16-byte aligned. */
+static __inline __m128d
+_mm_load_pd (double *__P)
+{
+ return (__m128d) __builtin_ia32_loadapd (__P);
+}
+
+/* Load two DPFP values from P. The addresd need not be 16-byte aligned. */
+static __inline __m128d
+_mm_loadu_pd (double *__P)
+{
+ return (__m128d) __builtin_ia32_loadupd (__P);
+}
+
+/* Load two DPFP values in reverse order. The addresd must be aligned. */
+static __inline __m128d
+_mm_loadr_pd (double *__P)
+{
+ __v2df __tmp = __builtin_ia32_loadapd (__P);
+ return (__m128d) __builtin_ia32_shufpd (__tmp, __tmp, _MM_SHUFFLE2 (0,1));
+}
+
+/* Create a vector with element 0 as F and the rest zero. */
+static __inline __m128d
+_mm_set_sd (double __F)
+{
+ return (__m128d) __builtin_ia32_loadsd (&__F);
+}
+
+/* Create a vector with all two elements equal to F. */
+static __inline __m128d
+_mm_set1_pd (double __F)
+{
+ __v2df __tmp = __builtin_ia32_loadsd (&__F);
+ return (__m128d) __builtin_ia32_shufpd (__tmp, __tmp, _MM_SHUFFLE2 (0,0));
+}
+
+static __inline __m128d
+_mm_set_pd1 (double __F)
+{
+ return _mm_set1_pd (__F);
+}
+
+/* Create the vector [Z Y]. */
+static __inline __m128d
+_mm_set_pd (double __Z, double __Y)
+{
+ union {
+ double __a[2];
+ __m128d __v;
+ } __u;
+
+ __u.__a[0] = __Y;
+ __u.__a[1] = __Z;
+
+ return __u.__v;
+}
+
+/* Create the vector [Y Z]. */
+static __inline __m128d
+_mm_setr_pd (double __Z, double __Y)
+{
+ return _mm_set_pd (__Y, __Z);
+}
+
+/* Create a vector of zeros. */
+static __inline __m128d
+_mm_setzero_pd (void)
+{
+ return (__m128d) __builtin_ia32_setzeropd ();
+}
+
+/* Stores the lower DPFP value. */
+static __inline void
+_mm_store_sd (double *__P, __m128d __A)
+{
+ __builtin_ia32_storesd (__P, (__v2df)__A);
+}
+
+/* Store the lower DPFP value acrosd two words. */
+static __inline void
+_mm_store1_pd (double *__P, __m128d __A)
+{
+ __v2df __va = (__v2df)__A;
+ __v2df __tmp = __builtin_ia32_shufpd (__va, __va, _MM_SHUFFLE2 (0,0));
+ __builtin_ia32_storeapd (__P, __tmp);
+}
+
+static __inline void
+_mm_store_pd1 (double *__P, __m128d __A)
+{
+ _mm_store1_pd (__P, __A);
+}
+
+/* Store two DPFP values. The addresd must be 16-byte aligned. */
+static __inline void
+_mm_store_pd (double *__P, __m128d __A)
+{
+ __builtin_ia32_storeapd (__P, (__v2df)__A);
+}
+
+/* Store two DPFP values. The addresd need not be 16-byte aligned. */
+static __inline void
+_mm_storeu_pd (double *__P, __m128d __A)
+{
+ __builtin_ia32_storeupd (__P, (__v2df)__A);
+}
+
+/* Store two DPFP values in reverse order. The addresd must be aligned. */
+static __inline void
+_mm_storer_pd (double *__P, __m128d __A)
+{
+ __v2df __va = (__v2df)__A;
+ __v2df __tmp = __builtin_ia32_shufpd (__va, __va, _MM_SHUFFLE2 (0,1));
+ __builtin_ia32_storeapd (__P, __tmp);
+}
+
+/* Sets the low DPFP value of A from the low value of B. */
+static __inline __m128d
+_mm_move_sd (__m128d __A, __m128d __B)
+{
+ return (__m128d) __builtin_ia32_movsd ((__v2df)__A, (__v2df)__B);
+}
+
+
static __inline __m128d
_mm_add_pd (__m128d __A, __m128d __B)
{
@@ -1123,10 +1293,12 @@ _mm_sqrt_pd (__m128d __A)
return (__m128d)__builtin_ia32_sqrtpd ((__v2df)__A);
}
+/* Return pair {sqrt (A[0), B[1]}. */
static __inline __m128d
-_mm_sqrt_sd (__m128d __A)
+_mm_sqrt_sd (__m128d __A, __m128d __B)
{
- return (__m128d)__builtin_ia32_sqrtsd ((__v2df)__A);
+ __v2df __tmp = __builtin_ia32_movsd ((__v2df)__A, (__v2df)__B);
+ return (__m128d)__builtin_ia32_sqrtsd ((__v2df)__tmp);
}
static __inline __m128d
@@ -1150,7 +1322,7 @@ _mm_max_pd (__m128d __A, __m128d __B)
static __inline __m128d
_mm_max_sd (__m128d __A, __m128d __B)
{
- return (__m128d)__builtin_ia32_minsd ((__v2df)__A, (__v2df)__B);
+ return (__m128d)__builtin_ia32_maxsd ((__v2df)__A, (__v2df)__B);
}
static __inline __m128d
@@ -1270,13 +1442,21 @@ _mm_cmple_sd (__m128d __A, __m128d __B)
static __inline __m128d
_mm_cmpgt_sd (__m128d __A, __m128d __B)
{
- return (__m128d)__builtin_ia32_cmpgtsd ((__v2df)__A, (__v2df)__B);
+ return (__m128d) __builtin_ia32_movsd ((__v2df) __A,
+ (__v2df)
+ __builtin_ia32_cmpltsd ((__v2df) __B,
+ (__v2df)
+ __A));
}
static __inline __m128d
_mm_cmpge_sd (__m128d __A, __m128d __B)
{
- return (__m128d)__builtin_ia32_cmpgesd ((__v2df)__A, (__v2df)__B);
+ return (__m128d) __builtin_ia32_movsd ((__v2df) __A,
+ (__v2df)
+ __builtin_ia32_cmplesd ((__v2df) __B,
+ (__v2df)
+ __A));
}
static __inline __m128d
@@ -1300,13 +1480,21 @@ _mm_cmpnle_sd (__m128d __A, __m128d __B)
static __inline __m128d
_mm_cmpngt_sd (__m128d __A, __m128d __B)
{
- return (__m128d)__builtin_ia32_cmpngtsd ((__v2df)__A, (__v2df)__B);
+ return (__m128d) __builtin_ia32_movsd ((__v2df) __A,
+ (__v2df)
+ __builtin_ia32_cmpnltsd ((__v2df) __B,
+ (__v2df)
+ __A));
}
static __inline __m128d
_mm_cmpnge_sd (__m128d __A, __m128d __B)
{
- return (__m128d)__builtin_ia32_cmpngesd ((__v2df)__A, (__v2df)__B);
+ return (__m128d) __builtin_ia32_movsd ((__v2df) __A,
+ (__v2df)
+ __builtin_ia32_cmpnlesd ((__v2df) __B,
+ (__v2df)
+ __A));
}
static __inline __m128d
@@ -1489,7 +1677,7 @@ _mm_cvtss_sd (__m128d __A, __m128d __B)
return (__m128d)__builtin_ia32_cvtss2sd ((__v2df) __A, (__v4sf)__B);
}
-#define _mm_shuffle_pd(__A, __B, __C) ((__m128d)__builtin_ia32_shufpd ((__v2df)__A, (__v2df)__B, (C)))
+#define _mm_shuffle_pd(__A, __B, __C) ((__m128d)__builtin_ia32_shufpd ((__v2df)__A, (__v2df)__B, (__C)))
static __inline __m128d
_mm_unpackhi_pd (__m128d __A, __m128d __B)
@@ -1504,25 +1692,25 @@ _mm_unpacklo_pd (__m128d __A, __m128d __B)
}
static __inline __m128d
-_mm_loadh_pd (__m128d __A, __m128d *__B)
+_mm_loadh_pd (__m128d __A, double *__B)
{
return (__m128d)__builtin_ia32_loadhpd ((__v2df)__A, (__v2si *)__B);
}
static __inline void
-_mm_storeh_pd (__m128d *__A, __m128d __B)
+_mm_storeh_pd (double *__A, __m128d __B)
{
__builtin_ia32_storehpd ((__v2si *)__A, (__v2df)__B);
}
static __inline __m128d
-_mm_loadl_pd (__m128d __A, __m128d *__B)
+_mm_loadl_pd (__m128d __A, double *__B)
{
return (__m128d)__builtin_ia32_loadlpd ((__v2df)__A, (__v2si *)__B);
}
static __inline void
-_mm_storel_pd (__m128d *__A, __m128d __B)
+_mm_storel_pd (double *__A, __m128d __B)
{
__builtin_ia32_storelpd ((__v2si *)__A, (__v2df)__B);
}
@@ -1791,6 +1979,22 @@ _mm_srai_epi32 (__m128i __A, int __B)
return (__m128i)__builtin_ia32_psradi128 ((__v4si)__A, __B);
}
+#if 0
+static __m128i __attribute__((__always_inline__))
+_mm_srli_si128 (__m128i __A, const int __B)
+{
+ return ((__m128i)__builtin_ia32_psrldqi128 (__A, __B))
+}
+
+static __m128i __attribute__((__always_inline__))
+_mm_srli_si128 (__m128i __A, const int __B)
+{
+ return ((__m128i)__builtin_ia32_pslldqi128 (__A, __B))
+}
+#endif
+#define _mm_srli_si128(__A, __B) ((__m128i)__builtin_ia32_psrldqi128 (__A, __B))
+#define _mm_slli_si128(__A, __B) ((__m128i)__builtin_ia32_pslldqi128 (__A, __B))
+
static __inline __m128i
_mm_srli_epi16 (__m128i __A, int __B)
{
@@ -1979,6 +2183,7 @@ _mm_mfence (void)
__builtin_ia32_mfence ();
}
-#endif /* __SSE2_BUILTINS__ */
+#endif /* __SSE2__ */
+#endif /* __SSE__ */
#endif /* _XMMINTRIN_H_INCLUDED */
diff --git a/gcc/config/i960/i960.c b/gcc/config/i960/i960.c
index 7dbe85240cf..b15e27d9327 100644
--- a/gcc/config/i960/i960.c
+++ b/gcc/config/i960/i960.c
@@ -46,6 +46,7 @@ Boston, MA 02111-1307, USA. */
static void i960_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
static void i960_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
+static void i960_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
/* Save the operands last given to a compare for use when we
generate a scc or bcc insn. */
@@ -98,6 +99,9 @@ static int ret_label = 0;
#undef TARGET_ASM_FUNCTION_EPILOGUE
#define TARGET_ASM_FUNCTION_EPILOGUE i960_output_function_epilogue
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK i960_output_mi_thunk
+
struct gcc_target targetm = TARGET_INITIALIZER;
/* Override conflicting target switch options.
@@ -152,8 +156,8 @@ i960_initialize ()
i960_last_maxbitalignment = 8;
}
- /* Tell the compiler which flavor of XFmode we're using. */
- real_format_for_mode[XFmode - QFmode] = &ieee_extended_intel_96_format;
+ /* Tell the compiler which flavor of TFmode we're using. */
+ real_format_for_mode[TFmode - QFmode] = &ieee_extended_intel_128_format;
}
/* Return true if OP can be used as the source of an fp move insn. */
@@ -803,13 +807,13 @@ i960_output_ldconst (dst, src)
output_asm_insn ("ldconst %1,%0", operands);
return "";
}
- else if (mode == XFmode)
+ else if (mode == TFmode)
{
REAL_VALUE_TYPE d;
long value_long[3];
int i;
- if (fp_literal_zero (src, XFmode))
+ if (fp_literal_zero (src, TFmode))
return "movt 0,%0";
REAL_VALUE_FROM_CONST_DOUBLE (d, src);
@@ -1785,7 +1789,6 @@ i960_print_operand (file, x, code)
}
else if (rtxcode == CONST_DOUBLE)
{
- REAL_VALUE_TYPE d;
char dstr[30];
if (x == CONST0_RTX (GET_MODE (x)))
@@ -1799,8 +1802,7 @@ i960_print_operand (file, x, code)
return;
}
- REAL_VALUE_FROM_CONST_DOUBLE (d, x);
- REAL_VALUE_TO_DECIMAL (d, dstr, -1);
+ real_to_decimal (dstr, CONST_DOUBLE_REAL_VALUE (x), sizeof (dstr), 0, 1);
fprintf (file, "0f%s", dstr);
return;
}
@@ -2208,7 +2210,7 @@ hard_regno_mode_ok (regno, mode)
case DImode: case DFmode:
return (regno & 1) == 0;
- case TImode: case XFmode:
+ case TImode: case TFmode:
return (regno & 3) == 0;
default:
@@ -2219,7 +2221,7 @@ hard_regno_mode_ok (regno, mode)
{
switch (mode)
{
- case SFmode: case DFmode: case XFmode:
+ case SFmode: case DFmode: case TFmode:
case SCmode: case DCmode:
return 1;
@@ -2397,14 +2399,7 @@ i960_arg_size_and_align (mode, type, size_out, align_out)
size = (GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
if (type == 0)
- {
- /* ??? This is a hack to properly correct the alignment of XFmode
- values without affecting anything else. */
- if (size == 3)
- align = 4;
- else
- align = size;
- }
+ align = size;
else if (TYPE_ALIGN (type) >= BITS_PER_WORD)
align = TYPE_ALIGN (type) / BITS_PER_WORD;
else
@@ -2503,11 +2498,18 @@ i960_object_bytes_bitalign (n)
MIN (pragma align, structure size alignment)). */
int
-i960_round_align (align, tsize)
+i960_round_align (align, type)
int align;
- tree tsize;
+ tree type;
{
int new_align;
+ tree tsize;
+
+ if (TARGET_OLD_ALIGN || TYPE_PACKED (type))
+ return align;
+ if (TREE_CODE (type) != RECORD_TYPE)
+ return align;
+ tsize = TYPE_SIZE (type);
if (! tsize || TREE_CODE (tsize) != INTEGER_CST)
return align;
@@ -2552,16 +2554,20 @@ i960_setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl)
if (cum->ca_nstackparms == 0 && first_reg < NPARM_REGS && !no_rtl)
{
rtx label = gen_label_rtx ();
- rtx regblock;
+ rtx regblock, fake_arg_pointer_rtx;
- /* If arg_pointer_rtx == 0, no arguments were passed on the stack
+ /* Use a different rtx than arg_pointer_rtx so that cse and friends
+ can go on believing that the argument pointer can never be zero. */
+ fake_arg_pointer_rtx = gen_raw_REG (Pmode, ARG_POINTER_REGNUM);
+
+ /* If the argument pointer is 0, no arguments were passed on the stack
and we need to allocate a chunk to save the registers (if any
arguments were passed on the stack the caller would allocate the
48 bytes as well). We must allocate all 48 bytes (12*4) because
va_start assumes it. */
- emit_insn (gen_cmpsi (arg_pointer_rtx, const0_rtx));
+ emit_insn (gen_cmpsi (fake_arg_pointer_rtx, const0_rtx));
emit_jump_insn (gen_bne (label));
- emit_insn (gen_rtx_SET (VOIDmode, arg_pointer_rtx,
+ emit_insn (gen_rtx_SET (VOIDmode, fake_arg_pointer_rtx,
stack_pointer_rtx));
emit_insn (gen_rtx_SET (VOIDmode, stack_pointer_rtx,
memory_address (SImode,
@@ -2598,6 +2604,7 @@ i960_va_start (valist, nextarg)
rtx nextarg ATTRIBUTE_UNUSED;
{
tree s, t, base, num;
+ rtx fake_arg_pointer_rtx;
/* The array type always decays to a pointer before we get here, so we
can't use ARRAY_REF. */
@@ -2606,7 +2613,10 @@ i960_va_start (valist, nextarg)
build (PLUS_EXPR, unsigned_type_node, valist,
TYPE_SIZE_UNIT (TREE_TYPE (valist))));
- s = make_tree (unsigned_type_node, arg_pointer_rtx);
+ /* Use a different rtx than arg_pointer_rtx so that cse and friends
+ can go on believing that the argument pointer can never be zero. */
+ fake_arg_pointer_rtx = gen_raw_REG (Pmode, ARG_POINTER_REGNUM);
+ s = make_tree (unsigned_type_node, fake_arg_pointer_rtx);
t = build (MODIFY_EXPR, unsigned_type_node, base, s);
TREE_SIDE_EFFECTS (t) = 1;
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
@@ -2818,3 +2828,25 @@ i960_scan_opcode (p)
break;
}
}
+
+static void
+i960_output_mi_thunk (file, thunk, delta, function)
+ FILE *file;
+ tree thunk ATTRIBUTE_UNUSED;
+ HOST_WIDE_INT delta;
+ tree function;
+{
+ int d = delta;
+ if (d < 0 && d > -32)
+ fprintf (file, "\tsubo %d,g0,g0\n", -d);
+ else if (d > 0 && d < 32)
+ fprintf (file, "\taddo %d,g0,g0\n", d);
+ else
+ {
+ fprintf (file, "\tldconst %d,r5\n", d);
+ fprintf (file, "\taddo r5,g0,g0\n");
+ }
+ fprintf (file, "\tbx ");
+ assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
+ fprintf (file, "\n");
+}
diff --git a/gcc/config/i960/i960.h b/gcc/config/i960/i960.h
index 721706f2f44..3ce98e23011 100644
--- a/gcc/config/i960/i960.h
+++ b/gcc/config/i960/i960.h
@@ -362,17 +362,16 @@ extern int target_flags;
/* Width of a word, in units (bytes). */
#define UNITS_PER_WORD 4
-/* Width in bits of a long double. Define to 96, and let
- ROUND_TYPE_ALIGN adjust the alignment for speed. */
-#define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_64 ? 64 : 96)
-#define MAX_LONG_DOUBLE_TYPE_SIZE 96
+/* Width in bits of a long double. */
+#define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_64 ? 64 : 128)
+#define MAX_LONG_DOUBLE_TYPE_SIZE 128
/* Define this to set long double type size to use in libgcc2.c, which can
not depend on target_flags. */
#if defined(__LONG_DOUBLE_64__)
#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
#else
-#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 96
+#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
#endif
/* Allocation boundary (in *bits*) for storing pointers in memory. */
@@ -417,33 +416,14 @@ extern int target_flags;
? i960_object_bytes_bitalign (int_size_in_bytes (TREE_TYPE (EXP))) \
: (ALIGN))
-/* Make XFmode floating point quantities be 128 bit aligned. */
-#define DATA_ALIGNMENT(TYPE, ALIGN) \
- (TREE_CODE (TYPE) == ARRAY_TYPE \
- && TYPE_MODE (TREE_TYPE (TYPE)) == XFmode \
- && (ALIGN) < 128 ? 128 : (ALIGN))
-
/* Macros to determine size of aggregates (structures and unions
in C). Normally, these may be defined to simply return the maximum
alignment and simple rounded-up size, but on some machines (like
the i960), the total size of a structure is based on a non-trivial
rounding method. */
-#define ROUND_TYPE_ALIGN(TYPE, COMPUTED, SPECIFIED) \
- ((TREE_CODE (TYPE) == REAL_TYPE && TYPE_MODE (TYPE) == XFmode) \
- ? 128 /* Put 80 bit floating point elements on 128 bit boundaries. */ \
- : ((!TARGET_OLD_ALIGN && !TYPE_PACKED (TYPE) \
- && TREE_CODE (TYPE) == RECORD_TYPE) \
- ? i960_round_align (MAX ((COMPUTED), (SPECIFIED)), TYPE_SIZE (TYPE)) \
- : MAX ((COMPUTED), (SPECIFIED))))
-
-#define ROUND_TYPE_SIZE(TYPE, COMPUTED, SPECIFIED) \
- ((TREE_CODE (TYPE) == REAL_TYPE && TYPE_MODE (TYPE) == XFmode) \
- ? bitsize_int (128) : round_up (COMPUTED, SPECIFIED))
-#define ROUND_TYPE_SIZE_UNIT(TYPE, COMPUTED, SPECIFIED) \
- ((TREE_CODE (TYPE) == REAL_TYPE && TYPE_MODE (TYPE) == XFmode) \
- ? size_int (16) : round_up (COMPUTED, SPECIFIED))
-
+#define ROUND_TYPE_ALIGN(TYPE, COMPUTED, SPECIFIED) \
+ i960_round_align (MAX ((COMPUTED), (SPECIFIED)), TYPE)
/* Standard register usage. */
@@ -526,7 +506,7 @@ extern int target_flags;
/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
On 80960, the cpu registers can hold any mode but the float registers
- can only hold SFmode, DFmode, or XFmode. */
+ can only hold SFmode, DFmode, or TFmode. */
#define HARD_REGNO_MODE_OK(REGNO, MODE) hard_regno_mode_ok ((REGNO), (MODE))
/* Value is 1 if it is a good idea to tie two pseudo registers
@@ -1464,22 +1444,3 @@ extern enum insn_types i960_last_insn_type;
/* Defined in reload.c, and used in insn-recog.c. */
extern int rtx_equal_function_value_matters;
-
-/* Output code to add DELTA to the first argument, and then jump to FUNCTION.
- Used for C++ multiple inheritance. */
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
-do { \
- int d = (DELTA); \
- if (d < 0 && d > -32) \
- fprintf (FILE, "\tsubo %d,g0,g0\n", -d); \
- else if (d > 0 && d < 32) \
- fprintf (FILE, "\taddo %d,g0,g0\n", d); \
- else \
- { \
- fprintf (FILE, "\tldconst %d,r5\n", d); \
- fprintf (FILE, "\taddo r5,g0,g0\n"); \
- } \
- fprintf (FILE, "\tbx "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "\n"); \
-} while (0);
diff --git a/gcc/config/i960/i960.md b/gcc/config/i960/i960.md
index 91fb78b5604..af0193fcceb 100644
--- a/gcc/config/i960/i960.md
+++ b/gcc/config/i960/i960.md
@@ -2061,10 +2061,10 @@
;; Tetra (16 byte) float support.
-(define_expand "cmpxf"
+(define_expand "cmptf"
[(set (reg:CC 36)
- (compare:CC (match_operand:XF 0 "register_operand" "")
- (match_operand:XF 1 "nonmemory_operand" "")))]
+ (compare:CC (match_operand:TF 0 "register_operand" "")
+ (match_operand:TF 1 "nonmemory_operand" "")))]
"TARGET_NUMERICS"
"
{
@@ -2075,27 +2075,27 @@
(define_insn ""
[(set (reg:CC 36)
- (compare:CC (match_operand:XF 0 "register_operand" "f")
- (match_operand:XF 1 "nonmemory_operand" "fGH")))]
+ (compare:CC (match_operand:TF 0 "register_operand" "f")
+ (match_operand:TF 1 "nonmemory_operand" "fGH")))]
"TARGET_NUMERICS"
"cmpr %0,%1"
[(set_attr "type" "fpcc")])
-(define_expand "movxf"
- [(set (match_operand:XF 0 "general_operand" "")
- (match_operand:XF 1 "fpmove_src_operand" ""))]
+(define_expand "movtf"
+ [(set (match_operand:TF 0 "general_operand" "")
+ (match_operand:TF 1 "fpmove_src_operand" ""))]
""
"
{
- if (emit_move_sequence (operands, XFmode))
+ if (emit_move_sequence (operands, TFmode))
DONE;
}")
(define_insn ""
- [(set (match_operand:XF 0 "general_operand" "=r,f,d,d,m")
- (match_operand:XF 1 "fpmove_src_operand" "r,GH,F,m,d"))]
- "register_operand (operands[0], XFmode)
- || register_operand (operands[1], XFmode)"
+ [(set (match_operand:TF 0 "general_operand" "=r,f,d,d,m")
+ (match_operand:TF 1 "fpmove_src_operand" "r,GH,F,m,d"))]
+ "register_operand (operands[0], TFmode)
+ || register_operand (operands[1], TFmode)"
"*
{
switch (which_alternative)
@@ -2119,9 +2119,9 @@
}"
[(set_attr "type" "move,move,load,fpload,fpstore")])
-(define_insn "extendsfxf2"
- [(set (match_operand:XF 0 "register_operand" "=f,d")
- (float_extend:XF
+(define_insn "extendsftf2"
+ [(set (match_operand:TF 0 "register_operand" "=f,d")
+ (float_extend:TF
(match_operand:SF 1 "register_operand" "d,f")))]
"TARGET_NUMERICS"
"@
@@ -2129,9 +2129,9 @@
movre %1,%0"
[(set_attr "type" "fpmove")])
-(define_insn "extenddfxf2"
- [(set (match_operand:XF 0 "register_operand" "=f,d")
- (float_extend:XF
+(define_insn "extenddftf2"
+ [(set (match_operand:TF 0 "register_operand" "=f,d")
+ (float_extend:TF
(match_operand:DF 1 "register_operand" "d,f")))]
"TARGET_NUMERICS"
"@
@@ -2139,85 +2139,85 @@
movre %1,%0"
[(set_attr "type" "fpmove")])
-(define_insn "truncxfdf2"
+(define_insn "trunctfdf2"
[(set (match_operand:DF 0 "register_operand" "=d")
(float_truncate:DF
- (match_operand:XF 1 "register_operand" "f")))]
+ (match_operand:TF 1 "register_operand" "f")))]
"TARGET_NUMERICS"
"movrl %1,%0"
[(set_attr "type" "fpmove")])
-(define_insn "truncxfsf2"
+(define_insn "trunctfsf2"
[(set (match_operand:SF 0 "register_operand" "=d")
(float_truncate:SF
- (match_operand:XF 1 "register_operand" "f")))]
+ (match_operand:TF 1 "register_operand" "f")))]
"TARGET_NUMERICS"
"movr %1,%0"
[(set_attr "type" "fpmove")])
-(define_insn "floatsixf2"
- [(set (match_operand:XF 0 "register_operand" "=f")
- (float:XF (match_operand:SI 1 "register_operand" "d")))]
+(define_insn "floatsitf2"
+ [(set (match_operand:TF 0 "register_operand" "=f")
+ (float:TF (match_operand:SI 1 "register_operand" "d")))]
"TARGET_NUMERICS"
"cvtir %1,%0"
[(set_attr "type" "fpcvt")])
-(define_insn "fix_truncxfsi2"
+(define_insn "fix_trunctfsi2"
[(set (match_operand:SI 0 "register_operand" "=d")
- (fix:SI (fix:XF (match_operand:XF 1 "register_operand" "f"))))]
+ (fix:SI (fix:TF (match_operand:TF 1 "register_operand" "f"))))]
"TARGET_NUMERICS"
"cvtzri %1,%0"
[(set_attr "type" "fpcvt")])
-(define_insn "fixuns_truncxfsi2"
+(define_insn "fixuns_trunctfsi2"
[(set (match_operand:SI 0 "register_operand" "=d")
- (unsigned_fix:SI (fix:XF (match_operand:XF 1 "register_operand" "f"))))]
+ (unsigned_fix:SI (fix:TF (match_operand:TF 1 "register_operand" "f"))))]
"TARGET_NUMERICS"
"cvtzri %1,%0"
[(set_attr "type" "fpcvt")])
-(define_insn "addxf3"
- [(set (match_operand:XF 0 "register_operand" "=f")
- (plus:XF (match_operand:XF 1 "nonmemory_operand" "%fGH")
- (match_operand:XF 2 "nonmemory_operand" "fGH")))]
+(define_insn "addtf3"
+ [(set (match_operand:TF 0 "register_operand" "=f")
+ (plus:TF (match_operand:TF 1 "nonmemory_operand" "%fGH")
+ (match_operand:TF 2 "nonmemory_operand" "fGH")))]
"TARGET_NUMERICS"
"addr %1,%2,%0"
[(set_attr "type" "fpadd")])
-(define_insn "subxf3"
- [(set (match_operand:XF 0 "register_operand" "=f")
- (minus:XF (match_operand:XF 1 "nonmemory_operand" "fGH")
- (match_operand:XF 2 "nonmemory_operand" "fGH")))]
+(define_insn "subtf3"
+ [(set (match_operand:TF 0 "register_operand" "=f")
+ (minus:TF (match_operand:TF 1 "nonmemory_operand" "fGH")
+ (match_operand:TF 2 "nonmemory_operand" "fGH")))]
"TARGET_NUMERICS"
"subr %2,%1,%0"
[(set_attr "type" "fpadd")])
-(define_insn "mulxf3"
- [(set (match_operand:XF 0 "register_operand" "=f")
- (mult:XF (match_operand:XF 1 "nonmemory_operand" "%fGH")
- (match_operand:XF 2 "nonmemory_operand" "fGH")))]
+(define_insn "multf3"
+ [(set (match_operand:TF 0 "register_operand" "=f")
+ (mult:TF (match_operand:TF 1 "nonmemory_operand" "%fGH")
+ (match_operand:TF 2 "nonmemory_operand" "fGH")))]
"TARGET_NUMERICS"
"mulr %1,%2,%0"
[(set_attr "type" "fpmul")])
-(define_insn "divxf3"
- [(set (match_operand:XF 0 "register_operand" "=f")
- (div:XF (match_operand:XF 1 "nonmemory_operand" "fGH")
- (match_operand:XF 2 "nonmemory_operand" "fGH")))]
+(define_insn "divtf3"
+ [(set (match_operand:TF 0 "register_operand" "=f")
+ (div:TF (match_operand:TF 1 "nonmemory_operand" "fGH")
+ (match_operand:TF 2 "nonmemory_operand" "fGH")))]
"TARGET_NUMERICS"
"divr %2,%1,%0"
[(set_attr "type" "fpdiv")])
-(define_insn "negxf2"
- [(set (match_operand:XF 0 "register_operand" "=f")
- (neg:XF (match_operand:XF 1 "register_operand" "f")))]
+(define_insn "negtf2"
+ [(set (match_operand:TF 0 "register_operand" "=f")
+ (neg:TF (match_operand:TF 1 "register_operand" "f")))]
"TARGET_NUMERICS"
"subr %1,0f0.0,%0"
[(set_attr "type" "fpadd")])
-(define_insn "absxf2"
- [(set (match_operand:XF 0 "register_operand" "=f")
- (abs:XF (match_operand:XF 1 "register_operand" "f")))]
+(define_insn "abstf2"
+ [(set (match_operand:TF 0 "register_operand" "=f")
+ (abs:TF (match_operand:TF 1 "register_operand" "f")))]
"(TARGET_NUMERICS)"
"cpysre %1,0f0.0,%0"
[(set_attr "type" "fpmove")])
@@ -2292,8 +2292,8 @@
""
"
{
- emit_insn (gen_call_internal (operands[0], operands[1],
- virtual_outgoing_args_rtx));
+ emit_call_insn (gen_call_internal (operands[0], operands[1],
+ virtual_outgoing_args_rtx));
DONE;
}")
@@ -2322,8 +2322,9 @@
""
"
{
- emit_insn (gen_call_value_internal (operands[0], operands[1], operands[2],
- virtual_outgoing_args_rtx));
+ emit_call_insn (gen_call_value_internal (operands[0], operands[1],
+ operands[2],
+ virtual_outgoing_args_rtx));
DONE;
}")
diff --git a/gcc/config/ia64/ia64-protos.h b/gcc/config/ia64/ia64-protos.h
index 0e0ef04f055..36af17aa70a 100644
--- a/gcc/config/ia64/ia64-protos.h
+++ b/gcc/config/ia64/ia64-protos.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler for IA-64.
- Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index bcfcc321039..17c3fc61ac8 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -161,6 +161,8 @@ static int ia64_sched_reorder PARAMS ((FILE *, int, rtx *, int *, int));
static int ia64_sched_reorder2 PARAMS ((FILE *, int, rtx *, int *, int));
static int ia64_variable_issue PARAMS ((FILE *, int, rtx, int));
+static void ia64_output_mi_thunk PARAMS((FILE *, tree, HOST_WIDE_INT, tree));
+
static void ia64_select_rtx_section PARAMS ((enum machine_mode, rtx,
unsigned HOST_WIDE_INT));
static void ia64_aix_select_section PARAMS ((tree, int,
@@ -244,6 +246,9 @@ static const struct attribute_spec ia64_attribute_table[] =
#define TARGET_HAVE_TLS true
#endif
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK ia64_output_mi_thunk
+
struct gcc_target targetm = TARGET_INITIALIZER;
/* Return 1 if OP is a valid operand for the MEM of a CALL insn. */
@@ -8159,4 +8164,39 @@ ia64_aix_select_rtx_section (mode, x, align)
flag_pic = save_pic;
}
+static void
+ia64_output_mi_thunk (file, thunk, delta, function)
+ FILE *file;
+ tree thunk ATTRIBUTE_UNUSED;
+ HOST_WIDE_INT delta;
+ tree function;
+{
+ if (CONST_OK_FOR_I (delta))
+ {
+ fprintf (file, "\tadds r32 = ");
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, (delta));
+ fprintf (file, ", r32\n");
+ }
+ else
+ {
+ if (CONST_OK_FOR_J (delta))
+ {
+ fprintf (file, "\taddl r2 = ");
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, (delta));
+ fprintf (file, ", r0\n");
+ }
+ else
+ {
+ fprintf (file, "\tmovl r2 = ");
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, (delta));
+ fprintf (file, "\n");
+ }
+ fprintf (file, "\t;;\n");
+ fprintf (file, "\tadd r32 = r2, r32\n");
+ }
+ fprintf (file, "\tbr ");
+ assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
+ fprintf (file, "\n");
+}
+
#include "gt-ia64.h"
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h
index 0aff24a9ca5..55ec9868051 100644
--- a/gcc/config/ia64/ia64.h
+++ b/gcc/config/ia64/ia64.h
@@ -1428,39 +1428,6 @@ do { \
#define ASM_FILE_START(FILE) \
emit_safe_across_calls (FILE)
-/* A C compound statement that outputs the assembler code for a thunk function,
- used to implement C++ virtual function calls with multiple inheritance. */
-
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
-do { \
- if (CONST_OK_FOR_I (DELTA)) \
- { \
- fprintf (FILE, "\tadds r32 = "); \
- fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA)); \
- fprintf (FILE, ", r32\n"); \
- } \
- else \
- { \
- if (CONST_OK_FOR_J (DELTA)) \
- { \
- fprintf (FILE, "\taddl r2 = "); \
- fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA)); \
- fprintf (FILE, ", r0\n"); \
- } \
- else \
- { \
- fprintf (FILE, "\tmovl r2 = "); \
- fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA)); \
- fprintf (FILE, "\n"); \
- } \
- fprintf (FILE, "\t;;\n"); \
- fprintf (FILE, "\tadd r32 = r2, r32\n"); \
- } \
- fprintf (FILE, "\tbr "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "\n"); \
-} while (0)
-
/* Output part N of a function descriptor for DECL. For ia64, both
words are emitted with a single relocation, so ignore N > 0. */
#define ASM_OUTPUT_FDESC(FILE, DECL, PART) \
diff --git a/gcc/config/interix.h b/gcc/config/interix.h
index aea3a73425e..34f2e62d15c 100644
--- a/gcc/config/interix.h
+++ b/gcc/config/interix.h
@@ -70,19 +70,6 @@ for windows/multi thread */
&& strcmp (STR, "Tbss"))
-#if 0
-/* don't do this until we can sort out the default path issues. MK */
-#undef STANDARD_EXEC_PREFIX
-#define STANDARD_EXEC_PREFIX ""
-
-#undef STANDARD_STARTFILE_PREFIX
-#define STANDARD_STARTFILE_PREFIX ""
-
-#undef TOOLDIR_BASE_PREFIX
-#define TOOLDIR_BASE_PREFIX ""
-
-#endif /* 0 */
-
#define STDC_0_IN_SYSTEM_HEADERS 1
#define HANDLE_SYSV_PRAGMA
diff --git a/gcc/config/ip2k/ip2k.c b/gcc/config/ip2k/ip2k.c
index 9b392f59132..c0a643ae1d1 100644
--- a/gcc/config/ip2k/ip2k.c
+++ b/gcc/config/ip2k/ip2k.c
@@ -304,6 +304,8 @@ function_epilogue (file, size)
int leaf_func_p;
int reg,savelimit;
rtx operands[2]; /* Dummy used by OUT_ASn */
+ int args_locals_size = current_function_args_size;
+ int saved_regs_p = 0;
int need_ret = 1;
/* Use this opportunity to reset the reorg flags! */
@@ -325,42 +327,54 @@ function_epilogue (file, size)
epilogue_size = 0;
fprintf (file, "/* epilogue: frame size=%d */\n", size);
+ savelimit = (CHAIN_FRAMES) ? REG_FP : (REG_FP + 2);
+ for (reg = 0; reg < savelimit; reg++)
+ if (regs_ever_live[reg] && ! call_used_regs[reg])
+ {
+ saved_regs_p = 1;
+ break;
+ }
+
if (size)
{
- operands[0] = GEN_INT (size);
-
- switch (size & 0xff)
+ if (leaf_func_p && !CHAIN_FRAMES && !saved_regs_p
+ && current_function_pops_args)
+ args_locals_size = current_function_args_size + size;
+ else
{
- default:
- OUT_AS2 (mov, w, %L0);
- OUT_AS2 (add, spl, w);
- epilogue_size += 4;
- /* fall-thru */
- case 0:
- break;
- case 1:
- OUT_AS1 (inc, spl);
- epilogue_size += 2;
- }
+ operands[0] = GEN_INT (size);
- switch (size & 0xff00)
- {
- default:
- if ((size & 0xff) != ((size >> 8) & 0xff))
- OUT_AS2 (mov, w, %H0);
- OUT_AS2 (add, sph, w);
- epilogue_size += 4;
- /* fall-thru */
- case 0:
- break;
- case 0x100:
- OUT_AS1 (inc, sph);
- epilogue_size += 2;
+ switch (size & 0xff)
+ {
+ default:
+ OUT_AS2 (mov, w, %L0);
+ OUT_AS2 (add, spl, w);
+ epilogue_size += 4;
+ /* fall-thru */
+ case 0:
+ break;
+ case 1:
+ OUT_AS1 (inc, spl);
+ epilogue_size += 2;
+ }
+
+ switch (size & 0xff00)
+ {
+ default:
+ if ((size & 0xff) != ((size >> 8) & 0xff))
+ OUT_AS2 (mov, w, %H0);
+ OUT_AS2 (add, sph, w);
+ epilogue_size += 4;
+ /* fall-thru */
+ case 0:
+ break;
+ case 0x100:
+ OUT_AS1 (inc, sph);
+ epilogue_size += 2;
+ }
}
}
- savelimit = (CHAIN_FRAMES) ? REG_FP : (REG_FP + 2);
-
for (reg = 0; reg < savelimit; reg++)
{
if (regs_ever_live[reg] && ! call_used_regs[reg])
@@ -428,10 +442,10 @@ function_epilogue (file, size)
else
{
if (current_function_pops_args
- && current_function_args_size >= 2
- && current_function_args_size < 0x100)
+ && args_locals_size >= 2
+ && args_locals_size < 0x100)
{
- if (current_function_args_size == 2)
+ if (args_locals_size == 2)
{
if (CHAIN_FRAMES)
{
@@ -443,7 +457,7 @@ function_epilogue (file, size)
}
else
{
- operands[0] = GEN_INT (current_function_args_size);
+ operands[0] = GEN_INT (args_locals_size);
if (CHAIN_FRAMES)
{
OUT_AS2 (mov, w, %L0);
@@ -456,12 +470,11 @@ function_epilogue (file, size)
}
}
- if (current_function_pops_args && current_function_args_size
- && need_ret)
+ if (current_function_pops_args && args_locals_size && need_ret)
{
- operands[0] = GEN_INT (current_function_args_size);
+ operands[0] = GEN_INT (args_locals_size);
- switch (current_function_args_size & 0xff)
+ switch (args_locals_size & 0xff)
{
default:
OUT_AS2 (mov, w, %L0);
@@ -477,11 +490,10 @@ function_epilogue (file, size)
epilogue_size += 2;
}
- switch (current_function_args_size & 0xff00)
+ switch (args_locals_size & 0xff00)
{
default:
- if ((current_function_args_size & 0xff)
- != ((current_function_args_size >> 8) & 0xff))
+ if ((args_locals_size & 0xff) != ((args_locals_size >> 8) & 0xff))
OUT_AS2 (mov, w, %H0);
OUT_AS2 (add, sph, w);
epilogue_size += 4;
@@ -3060,8 +3072,9 @@ asm_output_float (file, n)
char dstr[100];
REAL_VALUE_TO_TARGET_SINGLE (n, val);
- REAL_VALUE_TO_DECIMAL (n, dstr, -1);
- fprintf (file, "\t.long 0x%08lx\t/* %s */\n",val, dstr);
+ real_to_decimal (dstr, &n, sizeof (dstr), 0, 1);
+
+ fprintf (file, "\t.long 0x%08lx\t/* %s */\n", val, dstr);
}
/* Sets section name for declaration DECL. */
diff --git a/gcc/config/ip2k/libgcc.S b/gcc/config/ip2k/libgcc.S
index 2522a5e51c1..fb0c9887195 100644
--- a/gcc/config/ip2k/libgcc.S
+++ b/gcc/config/ip2k/libgcc.S
@@ -1,4 +1,3 @@
-; libgcc.S for the Ubicom IP2k architecture.
;
; Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
; Contributed by Red Hat, Inc and Ubicom, Inc.
@@ -1327,8 +1326,11 @@ __cmpdi2_dp:
.sect .pram.libgcc,"ax"
.global __fp_pop_args_ret
.global __pop_args_ret
- .func __fp_pop_args_ret, __fp_pop_args_ret
+ .global __pop2_args_ret
+ .func __fp_pop2_args_ret, __fp_pop2_args_ret
+__fp_pop2_args_ret:
+ mov w, #2
__fp_pop_args_ret:
pop 0xfd
pop 0xfe
@@ -1341,29 +1343,11 @@ __pop_args_ret:
.endfunc
#endif /* L_fp_pop_args_ret */
-#if defined(L_leaf_fp_pop_args_ret)
- .sect .pram.libgcc,"ax"
- .global __leaf_fp_pop_args_ret
- .func __leaf_fp_pop_args_ret, __leaf_fp_pop_args_ret
-
-__leaf_fp_pop_args_ret:
- pop 0xfd
- pop 0xfe
- add spl, w
- ret
-
- .endfunc
-#endif /* L_leaf_fp_pop_args_ret */
-
-#if defined(L_fp_pop2_args_ret)
+#if defined(L__pop2_args_ret)
.sect .pram.libgcc,"ax"
- .global __fp_pop2_args_ret
.global __pop2_args_ret
- .func __fp_pop2_args_ret, __fp_pop2_args_ret
+ .func __pop2_args_ret, __pop2_args_ret
-__fp_pop2_args_ret:
- pop 0xfd
- pop 0xfe
__pop2_args_ret:
mov w, #2
pop callh
@@ -1372,22 +1356,23 @@ __pop2_args_ret:
ret
.endfunc
-#endif /* L_fp_pop2_args_ret */
+#endif /* L__pop2_args_ret */
-#if defined(L_leaf_fp_pop2_args_ret)
+#if defined(L_leaf_fp_pop_args_ret)
.sect .pram.libgcc,"ax"
- .global __leaf_fp_pop2_args_ret
- .func __leaf_fp_pop2_args_ret, __leaf_fp_pop2_args_ret
+ .global __leaf_fp_pop_args_ret, __leaf_fp_pop2_args_ret
+ .func __leaf_fp2_pop_args_ret, __leaf_fp_pop2_args_ret
__leaf_fp_pop2_args_ret:
+ mov w, #2
+__leaf_fp_pop_args_ret:
pop 0xfd
pop 0xfe
- mov w, #2
add spl, w
ret
.endfunc
-#endif /* L_leaf_fp_pop2_args_ret */
+#endif /* L_leaf_fp_pop_args_ret */
#if defined(L_movstrhi_countqi)
.sect .pram.libgcc,"ax"
@@ -1529,4 +1514,3 @@ _write:
.endfunc
#endif
-
diff --git a/gcc/config/ip2k/t-ip2k b/gcc/config/ip2k/t-ip2k
index 7d82126c61f..7a59a705c83 100644
--- a/gcc/config/ip2k/t-ip2k
+++ b/gcc/config/ip2k/t-ip2k
@@ -17,9 +17,8 @@ LIB1ASMFUNCS = \
_cmpdi2 \
_cmpdi2_dp \
_fp_pop_args_ret \
+ _pop2_args_ret \
_leaf_fp_pop_args_ret \
- _fp_pop2_args_ret \
- _leaf_fp_pop2_args_ret \
_movstrhi_countqi \
_movstrhi_counthi \
abort \
diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c
index b3c0767b5ec..5903277c8c2 100644
--- a/gcc/config/m32r/m32r.c
+++ b/gcc/config/m32r/m32r.c
@@ -2311,14 +2311,13 @@ m32r_print_operand (file, x, code)
case 'A' :
{
- REAL_VALUE_TYPE d;
char str[30];
if (GET_CODE (x) != CONST_DOUBLE
|| GET_MODE_CLASS (GET_MODE (x)) != MODE_FLOAT)
fatal_insn ("bad insn for 'A'", x);
- REAL_VALUE_FROM_CONST_DOUBLE (d, x);
- REAL_VALUE_TO_DECIMAL (d, str, -1);
+
+ real_to_decimal (str, CONST_DOUBLE_REAL_VALUE (x), sizeof (str), 0, 1);
fprintf (file, "%s", str);
return;
}
diff --git a/gcc/config/m68hc11/m68hc11.c b/gcc/config/m68hc11/m68hc11.c
index 98b58b6d46e..ddad74b31ba 100644
--- a/gcc/config/m68hc11/m68hc11.c
+++ b/gcc/config/m68hc11/m68hc11.c
@@ -2261,11 +2261,10 @@ print_operand (file, op, letter)
else if (GET_CODE (op) == CONST_DOUBLE
&& (GET_MODE (op) == DFmode || GET_MODE (op) == XFmode))
{
- REAL_VALUE_TYPE r;
char dstr[30];
- REAL_VALUE_FROM_CONST_DOUBLE (r, op);
- REAL_VALUE_TO_DECIMAL (r, dstr, -1);
+ real_to_decimal (dstr, CONST_DOUBLE_REAL_VALUE (op),
+ sizeof (dstr), 0, 1);
asm_fprintf (file, "%I0r%s", dstr);
}
else
diff --git a/gcc/config/m68k/hp320.h b/gcc/config/m68k/hp320.h
index d6d39b5e3c6..a7839bac1f9 100644
--- a/gcc/config/m68k/hp320.h
+++ b/gcc/config/m68k/hp320.h
@@ -285,7 +285,7 @@ do { \
if (CODE == 'f') \
{ \
char dstr[30]; \
- REAL_VALUE_TO_DECIMAL (VALUE, dstr, 9); \
+ real_to_decimal (dstr, &(VALUE), sizeof (dstr), 9, 0); \
fprintf ((FILE), "&0f%s", dstr); \
} \
else \
@@ -302,7 +302,7 @@ do { \
#undef ASM_OUTPUT_DOUBLE_OPERAND
#define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \
do { char dstr[30]; \
- REAL_VALUE_TO_DECIMAL (VALUE, dstr, -1); \
+ real_to_decimal (dstr, &(VALUE), sizeof (dstr), 0, 1); \
fprintf (FILE, "&0f%s", dstr); \
} while (0)
@@ -311,7 +311,7 @@ do { \
#undef ASM_OUTPUT_LONG_DOUBLE_OPERAND
#define ASM_OUTPUT_LONG_DOUBLE_OPERAND(FILE,VALUE) \
do { char dstr[30]; \
- REAL_VALUE_TO_DECIMAL (VALUE, dstr, -1); \
+ real_to_decimal (dstr, &(VALUE), sizeof (dstr), 0, 1); \
fprintf (FILE, "&0f%s", dstr); \
} while (0)
@@ -336,15 +336,11 @@ do { \
{ REAL_VALUE_TYPE r; long l; \
REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
PRINT_OPERAND_FLOAT (CODE, FILE, r, l); } \
- else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == DFmode) \
- { REAL_VALUE_TYPE r; char dstr[30]; \
- REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
- REAL_VALUE_TO_DECIMAL (r, dstr, -1); \
- fprintf (FILE, "&0f%s", dstr); } \
- else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == XFmode) \
- { REAL_VALUE_TYPE r; char dstr[30]; \
- REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
- REAL_VALUE_TO_DECIMAL (r, dstr, -1); \
+ else if (GET_CODE (X) == CONST_DOUBLE \
+ && (GET_MODE (X) == DFmode || GET_MODE (X) == XFmode)) \
+ { char dstr[30]; \
+ real_to_decimal (dstr, CONST_DOUBLE_REAL_VALUE (X), \
+ sizeof (dstr), 0, 1); \
fprintf (FILE, "&0f%s", dstr); } \
else { putc ('&', FILE); output_addr_const (FILE, X); }}
#endif
diff --git a/gcc/config/m68k/linux.h b/gcc/config/m68k/linux.h
index af7b9285c2c..bf80cea9f9c 100644
--- a/gcc/config/m68k/linux.h
+++ b/gcc/config/m68k/linux.h
@@ -315,15 +315,6 @@ do { \
|| (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \
|| PCREL_GENERAL_OPERAND_OK)
-/* Turn off function cse if we are doing PIC. We always want function
- call to be done as `bsr foo@PLTPC', so it will force the assembler
- to create the PLT entry for `foo'. Doing function cse will cause
- the address of `foo' to be loaded into a register, which is exactly
- what we want to avoid when we are doing PIC on svr4 m68k. */
-#undef SUBTARGET_OVERRIDE_OPTIONS
-#define SUBTARGET_OVERRIDE_OPTIONS \
- if (flag_pic) flag_no_function_cse = 1;
-
/* For m68k SVR4, structures are returned using the reentrant
technique. */
#undef PCC_STATIC_STRUCT_RETURN
@@ -363,28 +354,3 @@ do { \
: "d" (_beg), "d" (_len) \
: "%d0", "%d2", "%d3"); \
}
-
-/* Output code to add DELTA to the first argument, and then jump to FUNCTION.
- Used for C++ multiple inheritance. */
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
-do { \
- if (DELTA > 0 && DELTA <= 8) \
- asm_fprintf (FILE, "\taddq.l %I%d,4(%Rsp)\n", DELTA); \
- else if (DELTA < 0 && DELTA >= -8) \
- asm_fprintf (FILE, "\tsubq.l %I%d,4(%Rsp)\n", -DELTA); \
- else \
- asm_fprintf (FILE, "\tadd.l %I%d,4(%Rsp)\n", DELTA); \
- \
- if (flag_pic) \
- { \
- fprintf (FILE, "\tbra.l "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "@PLTPC\n"); \
- } \
- else \
- { \
- fprintf (FILE, "\tjmp "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "\n"); \
- } \
-} while (0)
diff --git a/gcc/config/m68k/m68k-protos.h b/gcc/config/m68k/m68k-protos.h
index 6a132beeb62..72120ead37f 100644
--- a/gcc/config/m68k/m68k-protos.h
+++ b/gcc/config/m68k/m68k-protos.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler. Sun 68000/68020 version.
- Copyright (C) 2000 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c
index d981d6388c6..9ab168dda6f 100644
--- a/gcc/config/m68k/m68k.c
+++ b/gcc/config/m68k/m68k.c
@@ -68,6 +68,7 @@ static void m68k_svr3_asm_out_constructor PARAMS ((rtx, int));
#ifdef HPUX_ASM
static void m68k_hp320_internal_label PARAMS ((FILE *, const char *, unsigned long));
#endif
+static void m68k_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
/* Alignment to use for loops and jumps */
@@ -129,6 +130,9 @@ int m68k_last_compare_had_fp_operands;
#define TARGET_ASM_INTERNAL_LABEL m68k_hp320_internal_label
#endif
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK m68k_output_mi_thunk
+
struct gcc_target targetm = TARGET_INITIALIZER;
/* Sometimes certain combinations of command options do not make
@@ -182,6 +186,27 @@ override_options ()
m68k_align_funcs = i;
}
+ /* -fPIC uses 32-bit pc-relative displacements, which don't exist
+ until the 68020. */
+ if (! TARGET_68020 && flag_pic == 2)
+ error("-fPIC is not currently supported on the 68000 or 68010\n");
+
+ /* ??? A historic way of turning on pic, or is this intended to
+ be an embedded thing that doesn't have the same name binding
+ significance that it does on hosted ELF systems? */
+ if (TARGET_PCREL && flag_pic == 0)
+ flag_pic = 1;
+
+ /* Turn off function cse if we are doing PIC. We always want function call
+ to be done as `bsr foo@PLTPC', so it will force the assembler to create
+ the PLT entry for `foo'. Doing function cse will cause the address of
+ `foo' to be loaded into a register, which is exactly what we want to
+ avoid when we are doing PIC on svr4 m68k. */
+ if (flag_pic)
+ flag_no_function_cse = 1;
+
+ SUBTARGET_OVERRIDE_OPTIONS;
+
/* Tell the compiler which flavor of XFmode we're using. */
real_format_for_mode[XFmode - QFmode] = &ieee_extended_motorola_format;
}
@@ -3835,3 +3860,68 @@ m68k_hp320_internal_label (stream, prefix, labelno)
fprintf (stream, "%s%ld:\n", prefix, labelno);
}
#endif
+
+static void
+m68k_output_mi_thunk (file, thunk, delta, function)
+ FILE *file;
+ tree thunk ATTRIBUTE_UNUSED;
+ HOST_WIDE_INT delta;
+ tree function;
+{
+ rtx xops[1];
+ const char *fmt;
+
+ if (delta > 0 && delta <= 8)
+ asm_fprintf (file, "\taddq.l %I%d,4(%Rsp)\n", (int) delta);
+ else if (delta < 0 && delta >= -8)
+ asm_fprintf (file, "\tsubq.l %I%d,4(%Rsp)\n", (int) -delta);
+ else
+ {
+ asm_fprintf (file, "\tadd.l %I");
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, delta);
+ asm_fprintf (file, ",4(%Rsp)\n");
+ }
+
+ xops[0] = DECL_RTL (function);
+
+ /* Logic taken from call patterns in m68k.md. */
+ if (flag_pic)
+ {
+ if (TARGET_PCREL)
+ fmt = "bra.l %o0";
+ else
+ {
+#ifdef MOTOROLA
+#ifdef HPUX_ASM
+ fmt = "bra.l %0";
+#else
+#ifdef USE_GAS
+ fmt = "bra.l %0@PLTPC";
+#else
+ fmt = "bra %0@PLTPC";
+#endif
+#endif
+#else
+#ifdef USE_GAS
+ fmt = "bra.l %0";
+#else
+ fmt = "jbra %0,a1";
+#endif
+#endif
+ }
+ }
+ else
+ {
+#if defined (MOTOROLA) && !defined (USE_GAS)
+#ifdef MOTOROLA_BSR
+ fmt = "bra %0";
+#else
+ fmt = "jmp %0";
+#endif
+#else
+ fmt = "jbra %0";
+#endif
+ }
+
+ output_asm_insn (fmt, xops);
+}
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h
index 0c0b955e8cd..a5a63544c0b 100644
--- a/gcc/config/m68k/m68k.h
+++ b/gcc/config/m68k/m68k.h
@@ -277,15 +277,7 @@ extern int target_flags;
Don't use this macro to turn on various extra optimizations for
`-O'. That is what `OPTIMIZATION_OPTIONS' is for. */
-#define OVERRIDE_OPTIONS \
-{ \
- override_options(); \
- if (! TARGET_68020 && flag_pic == 2) \
- error("-fPIC is not currently supported on the 68000 or 68010\n"); \
- if (TARGET_PCREL && flag_pic == 0) \
- flag_pic = 1; \
- SUBTARGET_OVERRIDE_OPTIONS; \
-}
+#define OVERRIDE_OPTIONS override_options()
/* These are meant to be redefined in the host dependent files */
#define SUBTARGET_SWITCHES
@@ -1815,7 +1807,7 @@ __transfer_from_trampoline () \
if (CODE == 'f') \
{ \
char dstr[30]; \
- REAL_VALUE_TO_DECIMAL (VALUE, dstr, 9); \
+ real_to_decimal (dstr, &(VALUE), sizeof (dstr), 9, 0); \
asm_fprintf ((FILE), "%I0r%s", dstr); \
} \
else \
@@ -1830,7 +1822,7 @@ __transfer_from_trampoline () \
This macro is a 68k-specific macro. */
#define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \
do { char dstr[30]; \
- REAL_VALUE_TO_DECIMAL (VALUE, dstr, -1); \
+ real_to_decimal (dstr, &(VALUE), sizeof (dstr), 0, 1); \
asm_fprintf (FILE, "%I0r%s", dstr); \
} while (0)
@@ -1838,7 +1830,7 @@ __transfer_from_trampoline () \
generated by m68k.md. */
#define ASM_OUTPUT_LONG_DOUBLE_OPERAND(FILE,VALUE) \
do { char dstr[30]; \
- REAL_VALUE_TO_DECIMAL (VALUE, dstr, -1); \
+ real_to_decimal (dstr, &(VALUE), sizeof (dstr), 0, 1); \
asm_fprintf (FILE, "%I0r%s", dstr); \
} while (0)
diff --git a/gcc/config/m68k/m68kelf.h b/gcc/config/m68k/m68kelf.h
index fef3ebcda85..7866a239209 100644
--- a/gcc/config/m68k/m68kelf.h
+++ b/gcc/config/m68k/m68kelf.h
@@ -251,20 +251,6 @@ extern int switch_table_difference_label_flag;
|| (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \
|| PCREL_GENERAL_OPERAND_OK)
-/* Turn off function cse if we are doing PIC. We always want function call
- to be done as `bsr foo@PLTPC', so it will force the assembler to create
- the PLT entry for `foo'. Doing function cse will cause the address of `foo'
- to be loaded into a register, which is exactly what we want to avoid when
- we are doing PIC on svr4 m68k. */
-#undef OVERRIDE_OPTIONS
-#define OVERRIDE_OPTIONS \
-{ \
- if (flag_pic) flag_no_function_cse = 1; \
- if (! TARGET_68020 && flag_pic == 2) \
- error("-fPIC is not currently supported on the 68000 or 68010\n"); \
- if (TARGET_PCREL && flag_pic == 0) \
- flag_pic = 1; \
-}
/* end of stuff from m68kv4.h */
#undef SGS_CMP_ORDER
diff --git a/gcc/config/m68k/m68kv4.h b/gcc/config/m68k/m68kv4.h
index fbe7c426731..5318824ecb3 100644
--- a/gcc/config/m68k/m68kv4.h
+++ b/gcc/config/m68k/m68kv4.h
@@ -283,19 +283,6 @@ int switch_table_difference_label_flag;
|| (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \
|| PCREL_GENERAL_OPERAND_OK)
-/* Turn off function cse if we are doing PIC. We always want function call
- to be done as `bsr foo@PLTPC', so it will force the assembler to create
- the PLT entry for `foo'. Doing function cse will cause the address of `foo'
- to be loaded into a register, which is exactly what we want to avoid when
- we are doing PIC on svr4 m68k. */
-#undef OVERRIDE_OPTIONS
-#define OVERRIDE_OPTIONS \
-{ \
- if (flag_pic) flag_no_function_cse = 1; \
- if (! TARGET_68020 && flag_pic == 2) \
- error("-fPIC is not currently supported on the 68000 or 68010\n"); \
-}
-
/* Output assembler code for a block containing the constant parts
of a trampoline, leaving space for the variable parts. */
diff --git a/gcc/config/m68k/netbsd-elf.h b/gcc/config/m68k/netbsd-elf.h
index f8a30a6900b..62f67ef534d 100644
--- a/gcc/config/m68k/netbsd-elf.h
+++ b/gcc/config/m68k/netbsd-elf.h
@@ -275,17 +275,6 @@ while (0)
fprintf ((FILE), ",%u\n", (SIZE)))
-/* Turn off function cse if we are doing PIC. We always want function
- call to be done as `bsr foo@PLTPC', so it will force the assembler
- to create the PLT entry for `foo'. Doing function cse will cause
- the address of `foo' to be loaded into a register, which is exactly
- what we want to avoid when we are doing PIC on svr4 m68k. */
-
-#undef SUBTARGET_OVERRIDE_OPTIONS
-#define SUBTARGET_OVERRIDE_OPTIONS \
- if (flag_pic) flag_no_function_cse = 1;
-
-
/* XXX
This is the end of the chunk lifted from m68kelf.h */
@@ -434,36 +423,6 @@ while (0)
#undef DEFAULT_PCC_STRUCT_RETURN
#define DEFAULT_PCC_STRUCT_RETURN 1
-
-/* Output code to add DELTA to the first argument, and then jump to FUNCTION.
- Used for C++ multiple inheritance. */
-
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
-do \
- { \
- if (DELTA > 0 && DELTA <= 8) \
- asm_fprintf (FILE, "\taddq.l %I%d,4(%Rsp)\n", DELTA); \
- else if (DELTA < 0 && DELTA >= -8) \
- asm_fprintf (FILE, "\tsubq.l %I%d,4(%Rsp)\n", -DELTA); \
- else \
- asm_fprintf (FILE, "\tadd.l %I%d,4(%Rsp)\n", DELTA); \
- \
- if (flag_pic) \
- { \
- fprintf (FILE, "\tbra.l "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "@PLTPC\n"); \
- } \
- else \
- { \
- fprintf (FILE, "\tjmp "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "\n"); \
- } \
- } \
-while (0)
-
-
/* Output assembler code for a block containing the constant parts
of a trampoline, leaving space for the variable parts. */
diff --git a/gcc/config/m68k/openbsd.h b/gcc/config/m68k/openbsd.h
index efaf4be655a..baa4ef0928c 100644
--- a/gcc/config/m68k/openbsd.h
+++ b/gcc/config/m68k/openbsd.h
@@ -1,5 +1,5 @@
/* Configuration file for an m68k OpenBSD target.
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -86,38 +86,3 @@ Boston, MA 02111-1307, USA. */
dwarf unwind information. egcs doesn't try too hard to check internal
configuration files... */
#define DWARF2_UNWIND_INFO 0
-
-
-/* TODO: ASM_OUTPUT_MI_THUNK is busted. I need to figure out
- what bra func@PLTPC means under linux, and find the corresponding
- construction for our gas/pic setup. */
-#if 0
-/* Taken from linux.h. Processor dependent optimized code to handle C++
- multiple inheritance vtable lookup. */
-
-/* Output code to add DELTA to the first argument, and then jump to FUNCTION.
- Used for C++ multiple inheritance. */
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
-do { \
- if (DELTA > 0 && DELTA <= 8) \
- asm_fprintf (FILE, "\taddq.l %I%d,4(%Rsp)\n", DELTA); \
- else if (DELTA < 0 && DELTA >= -8) \
- asm_fprintf (FILE, "\tsubq.l %I%d,4(%Rsp)\n", -DELTA); \
- else \
- asm_fprintf (FILE, "\tadd.l %I%d,4(%Rsp)\n", DELTA); \
- \
- if (flag_pic) \
- { \
- fprintf (FILE, "\tbra.l "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "@PLTPC\n"); \
- } \
- else \
- { \
- fprintf (FILE, "\tjmp "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "\n"); \
- } \
-} while (0)
-#endif
-
diff --git a/gcc/config/m68k/sun2o4.h b/gcc/config/m68k/sun2o4.h
index 5b09262513b..0601bd07f84 100644
--- a/gcc/config/m68k/sun2o4.h
+++ b/gcc/config/m68k/sun2o4.h
@@ -121,7 +121,7 @@ Boston, MA 02111-1307, USA. */
} \
else \
{ char dstr[30]; \
- REAL_VALUE_TO_DECIMAL ((VALUE), dstr, 9); \
+ real_to_decimal (dstr, &(VALUE), sizeof (dstr), 9, 0); \
fprintf (FILE, "#0r%s", dstr); \
} \
} while (0)
@@ -141,7 +141,7 @@ Boston, MA 02111-1307, USA. */
} \
else \
{ char dstr[30]; \
- REAL_VALUE_TO_DECIMAL ((VALUE), dstr, -1); \
+ real_to_decimal (dstr, &(VALUE), sizeof (dstr), 0, 1); \
fprintf (FILE, "#0r%s", dstr); \
} \
} while (0)
diff --git a/gcc/config/m68k/sun3.h b/gcc/config/m68k/sun3.h
index 3dcb85a798e..1d64599f332 100644
--- a/gcc/config/m68k/sun3.h
+++ b/gcc/config/m68k/sun3.h
@@ -208,7 +208,7 @@ Boston, MA 02111-1307, USA. */
} \
else \
{ char dstr[30]; \
- REAL_VALUE_TO_DECIMAL ((VALUE), dstr, 9); \
+ real_to_decimal (dstr, &(VALUE), sizeof (dstr), 9, 0); \
asm_fprintf (FILE, "%I0r%s", dstr); \
} \
} while (0)
@@ -228,7 +228,7 @@ Boston, MA 02111-1307, USA. */
} \
else \
{ char dstr[30]; \
- REAL_VALUE_TO_DECIMAL ((VALUE), dstr, -1); \
+ real_to_decimal (dstr, &(VALUE), sizeof (dstr), 0, 1); \
asm_fprintf (FILE, "%I0r%s", dstr); \
} \
} while (0)
diff --git a/gcc/config/mips/elf.h b/gcc/config/mips/elf.h
index bc3ca69ff36..c64bb46b621 100644
--- a/gcc/config/mips/elf.h
+++ b/gcc/config/mips/elf.h
@@ -22,7 +22,6 @@ Boston, MA 02111-1307, USA. */
/* Use ELF. */
#undef OBJECT_FORMAT_COFF
#undef EXTENDED_COFF
-#define OBJECT_FORMAT_ELF
/* ??? Move all SDB stuff into separate header file. */
#undef SDB_DEBUGGING_INFO
diff --git a/gcc/config/mips/elf64.h b/gcc/config/mips/elf64.h
index 07973cbd0ea..e9bed21da10 100644
--- a/gcc/config/mips/elf64.h
+++ b/gcc/config/mips/elf64.h
@@ -22,7 +22,6 @@ Boston, MA 02111-1307, USA. */
#undef OBJECT_FORMAT_COFF
#undef EXTENDED_COFF
-#define OBJECT_FORMAT_ELF
#undef SDB_DEBUGGING_INFO
#define DBX_DEBUGGING_INFO 1
diff --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h
index d25cd51ddcc..959a065d2fc 100644
--- a/gcc/config/mips/linux.h
+++ b/gcc/config/mips/linux.h
@@ -252,3 +252,9 @@ void FN () \
/* The current Linux binutils uses MIPS_STABS_ELF and doesn't support
COFF. */
#undef SDB_DEBUGGING_INFO
+
+#undef LIB_SPEC
+#define LIB_SPEC "\
+%{!static:-rpath-link %R/lib:%R/usr/lib} \
+%{!shared: %{pthread:-lthread} \
+ %{profile:-lc_p} %{!profile: -lc}}"
diff --git a/gcc/config/mips/mips-protos.h b/gcc/config/mips/mips-protos.h
index 147d8c8d7c4..6dc3b73af4d 100644
--- a/gcc/config/mips/mips-protos.h
+++ b/gcc/config/mips/mips-protos.h
@@ -138,6 +138,8 @@ extern int mips_legitimate_address_p PARAMS ((enum machine_mode,
extern int mips_reg_mode_ok_for_base_p PARAMS ((rtx,
enum machine_mode,
int));
+extern bool mips_valid_pointer_mode PARAMS ((enum machine_mode));
+
extern int m16_uimm3_b PARAMS ((rtx, enum machine_mode));
extern int m16_simm4_1 PARAMS ((rtx, enum machine_mode));
extern int m16_nsimm4_1 PARAMS ((rtx, enum machine_mode));
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 39f7801cbf4..c756b82b724 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -660,6 +660,9 @@ const struct mips_cpu_info mips_cpu_info_table[] = {
#undef TARGET_ENCODE_SECTION_INFO
#define TARGET_ENCODE_SECTION_INFO mips_encode_section_info
+#undef TARGET_VALID_POINTER_MODE
+#define TARGET_VALID_POINTER_MODE mips_valid_pointer_mode
+
struct gcc_target targetm = TARGET_INITIALIZER;
/* Return truth value of whether OP can be used as an operands
@@ -814,8 +817,6 @@ mips_const_double_ok (op, mode)
rtx op;
enum machine_mode mode;
{
- REAL_VALUE_TYPE d;
-
if (GET_CODE (op) != CONST_DOUBLE)
return 0;
@@ -5786,12 +5787,10 @@ print_operand (file, op, letter)
else if (code == CONST_DOUBLE
&& GET_MODE_CLASS (GET_MODE (op)) == MODE_FLOAT)
{
- REAL_VALUE_TYPE d;
- char s[30];
+ char s[60];
- REAL_VALUE_FROM_CONST_DOUBLE (d, op);
- REAL_VALUE_TO_DECIMAL (d, s, -1);
- fprintf (file, s);
+ real_to_decimal (s, CONST_DOUBLE_REAL_VALUE (op), sizeof (s), 0, 1);
+ fputs (s, file);
}
else if (letter == 'x' && GET_CODE (op) == CONST_INT)
@@ -8446,6 +8445,14 @@ mips_class_max_nregs (class, mode)
else
return (GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
}
+
+bool
+mips_valid_pointer_mode (mode)
+ enum machine_mode mode;
+{
+ return (mode == SImode || (TARGET_64BIT && mode == DImode));
+}
+
/* For each mips16 function which refers to GP relative symbols, we
use a pseudo register, initialized at the start of the function, to
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index 9c09a704875..90f1179378c 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -4519,7 +4519,8 @@ while (0)
#define MIPS_UNMARK_STAB(code) ((code)-CODE_MASK)
-/* Default definitions for size_t and ptrdiff_t. */
+/* Default definitions for size_t and ptrdiff_t. We must override the
+ definitions from ../svr4.h on mips-*-linux-gnu. */
#ifndef SIZE_TYPE
#define SIZE_TYPE (POINTER_SIZE == 64 ? "long unsigned int" : "unsigned int")
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index 8aea766a782..d25a7f1cff7 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -122,7 +122,7 @@
;; ??? Fix everything that tests this attribute.
(define_attr "cpu"
- "default,r3000,r3900,r6000,r4000,r4100,r4120,r4300,r4600,r4650,r5000,r5400,r5500,r8000,sr71000,r4kc,r5kc,r20kc"
+ "default,r3000,r3900,r6000,r4000,r4100,r4111,r4120,r4300,r4600,r4650,r5000,r5400,r5500,r8000,sr71000,r4kc,r5kc,r20kc"
(const (symbol_ref "mips_cpu_attr")))
;; Does the instruction have a mandatory delay slot?
@@ -1900,6 +1900,8 @@
(clobber (match_scratch:SI 6 "=a,a,a"))
(clobber (match_scratch:SI 7 "=X,X,d"))]
"(TARGET_MIPS3900
+ || TARGET_MIPS5400
+ || TARGET_MIPS5500
|| ISA_HAS_MADD_MSUB)
&& !TARGET_MIPS16"
"*
@@ -1909,6 +1911,18 @@
return \"#\";
if (ISA_HAS_MADD_MSUB && which_alternative != 0)
return \"#\";
+
+ if (TARGET_MIPS5400)
+ return macc[which_alternative];
+
+ if (TARGET_MIPS5500)
+ {
+ if (which_alternative == 0)
+ return madd[0];
+ else
+ return macc[which_alternative];
+ }
+
return madd[which_alternative];
}"
[(set_attr "type" "imadd,imadd,multi")
diff --git a/gcc/config/mips/t-iris6 b/gcc/config/mips/t-iris6
index 582ec4c7949..b55bc36aca8 100644
--- a/gcc/config/mips/t-iris6
+++ b/gcc/config/mips/t-iris6
@@ -4,6 +4,7 @@
MULTILIB_OPTIONS=mabi=n32/mabi=64
MULTILIB_DIRNAMES=
MULTILIB_MATCHES=
+MULTILIB_OSDIRNAMES=../lib32 ../lib64
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
@@ -14,8 +15,6 @@ INSTALL_LIBGCC = install-multilib
EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o
CRTSTUFF_T_CFLAGS=-g1
-SHLIB_SLIBDIR_SUFFIXES = mabi=64:/mabi=64 mabi=n32:
-
# This is only needed in the static libgcc as a band-aid until gcc correctly
# implements the N32/N64 ABI structure passing conventions
LIB2FUNCS_STATIC_EXTRA = $(srcdir)/config/mips/irix6-libc-compat.c
diff --git a/gcc/config/mmix/mmix-protos.h b/gcc/config/mmix/mmix-protos.h
index 7c059d40257..618d1984b4a 100644
--- a/gcc/config/mmix/mmix-protos.h
+++ b/gcc/config/mmix/mmix-protos.h
@@ -78,7 +78,6 @@ extern void mmix_asm_output_aligned_local
PARAMS ((FILE *, const char *, int, int));
extern void mmix_asm_declare_register_global
PARAMS ((FILE *, tree, int, const char *));
-extern void mmix_asm_output_mi_thunk PARAMS ((FILE *, tree, int, tree));
/* Need tree.h and rtl.h */
# ifdef RTX_CODE
diff --git a/gcc/config/mmix/mmix.c b/gcc/config/mmix/mmix.c
index 7506003c9b9..966b503589c 100644
--- a/gcc/config/mmix/mmix.c
+++ b/gcc/config/mmix/mmix.c
@@ -130,6 +130,8 @@ static void mmix_target_asm_function_prologue
static void mmix_target_asm_function_end_prologue PARAMS ((FILE *));
static void mmix_target_asm_function_epilogue
PARAMS ((FILE *, HOST_WIDE_INT));
+static void mmix_asm_output_mi_thunk
+ PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
/* Target structure macros. Listed by node. See `Using and Porting GCC'
@@ -162,6 +164,9 @@ static void mmix_target_asm_function_epilogue
#undef TARGET_STRIP_NAME_ENCODING
#define TARGET_STRIP_NAME_ENCODING mmix_strip_name_encoding
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK mmix_asm_output_mi_thunk
+
struct gcc_target targetm = TARGET_INITIALIZER;
/* Functions that are expansions for target macros.
@@ -770,13 +775,13 @@ mmix_target_asm_function_epilogue (stream, locals_size)
fputc ('\n', stream);
}
-/* ASM_OUTPUT_MI_THUNK. */
+/* TARGET_ASM_OUTPUT_MI_THUNK. */
-void
+static void
mmix_asm_output_mi_thunk (stream, fndecl, delta, func)
FILE * stream;
tree fndecl ATTRIBUTE_UNUSED;
- int delta;
+ HOST_WIDE_INT delta;
tree func;
{
/* If you define STRUCT_VALUE to 0, rather than use STRUCT_VALUE_REGNUM,
@@ -785,9 +790,9 @@ mmix_asm_output_mi_thunk (stream, fndecl, delta, func)
const char *regname = reg_names[MMIX_FIRST_INCOMING_ARG_REGNUM];
if (delta >= 0 && delta < 65536)
- fprintf (stream, "\tINCL %s,%d\n", regname, delta);
+ fprintf (stream, "\tINCL %s,%d\n", regname, (int)delta);
else if (delta < 0 && delta >= -255)
- fprintf (stream, "\tSUBU %s,%s,%d\n", regname, regname, -delta);
+ fprintf (stream, "\tSUBU %s,%s,%d\n", regname, regname, (int)-delta);
else
{
mmix_output_register_setting (stream, 255, delta, 1);
diff --git a/gcc/config/mmix/mmix.h b/gcc/config/mmix/mmix.h
index c936c0d685f..50de2b1e929 100644
--- a/gcc/config/mmix/mmix.h
+++ b/gcc/config/mmix/mmix.h
@@ -795,10 +795,6 @@ typedef struct { int regs; int lib; } CUMULATIVE_ARGS;
#define EPILOGUE_USES(REGNO) \
((REGNO) == MMIX_INCOMING_RETURN_ADDRESS_REGNUM)
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
- mmix_asm_output_mi_thunk (FILE, THUNK_FNDECL, DELTA, FUNCTION)
-
-
/* Node: Profiling */
#define FUNCTION_PROFILER(FILE, LABELNO) \
mmix_function_profiler (FILE, LABELNO)
diff --git a/gcc/config/netbsd.h b/gcc/config/netbsd.h
index 19df77ffcd8..c83ff0f545e 100644
--- a/gcc/config/netbsd.h
+++ b/gcc/config/netbsd.h
@@ -161,3 +161,51 @@ Boston, MA 02111-1307, USA. */
#undef WINT_TYPE
#define WINT_TYPE "int"
+
+
+/* Attempt to turn on execute permission for the stack. This may be
+ used by TRANSFER_FROM_TRAMPOLINE of the target needs it (that is,
+ if the target machine can change execute permissions on a page).
+
+ There is no way to query the execute permission of the stack, so
+ we always issue the mprotect() call.
+
+ Note that we go out of our way to use namespace-non-invasive calls
+ here. Unfortunately, there is no libc-internal name for mprotect().
+
+ Also note that no errors should be emitted by this code; it is considered
+ dangerous for library calls to send messages to stdout/stderr. */
+
+#define NETBSD_ENABLE_EXECUTE_STACK \
+extern void __enable_execute_stack (void *); \
+void \
+__enable_execute_stack (addr) \
+ void *addr; \
+{ \
+ extern int mprotect (void *, size_t, int); \
+ extern int __sysctl (int *, unsigned int, void *, size_t *, \
+ void *, size_t); \
+ \
+ static int size; \
+ static long mask; \
+ \
+ char *page, *end; \
+ \
+ if (size == 0) \
+ { \
+ int mib[2]; \
+ size_t len; \
+ \
+ mib[0] = 6; /* CTL_HW */ \
+ mib[1] = 7; /* HW_PAGESIZE */ \
+ len = sizeof (size); \
+ (void) __sysctl (mib, 2, &size, &len, NULL, 0); \
+ mask = ~((long) size - 1); \
+ } \
+ \
+ page = (char *) (((long) addr) & mask); \
+ end = (char *) ((((long) (addr + TRAMPOLINE_SIZE)) & mask) + size); \
+ \
+ /* 7 == PROT_READ | PROT_WRITE | PROT_EXEC */ \
+ (void) mprotect (page, end - page, 7); \
+}
diff --git a/gcc/config/ns32k/ns32k.c b/gcc/config/ns32k/ns32k.c
index b94e7042c53..b94765bfb3a 100644
--- a/gcc/config/ns32k/ns32k.c
+++ b/gcc/config/ns32k/ns32k.c
@@ -1130,11 +1130,13 @@ print_operand (file, x, code)
{
#ifdef SEQUENT_ASM
/* Sequent likes its floating point constants as integers */
+ long l[2];
+ REAL_VALUE_TO_TARGET_DOUBLE (r, l);
fprintf (file, "0Dx%08x%08x",
- CONST_DOUBLE_HIGH (x), CONST_DOUBLE_LOW (x));
+ l[!WORDS_BIG_ENDIAN], l[WORDS_BIG_ENDIAN]);
#else
char s[30];
- REAL_VALUE_TO_DECIMAL (r, s, -1);
+ real_to_decimal (s, &r, sizeof (s), 0, 1);
#ifdef ENCORE_ASM
fprintf (file, "0f%s", s);
#else
@@ -1150,7 +1152,7 @@ print_operand (file, x, code)
fprintf (file, "0Fx%08lx", l);
#else
char s[30];
- REAL_VALUE_TO_DECIMAL (r, s, -1);
+ real_to_decimal (s, &r, sizeof (s), 0, 1);
fprintf (file, "0f%s", s);
#endif
}
diff --git a/gcc/config/pa/pa-protos.h b/gcc/config/pa/pa-protos.h
index 89942f5c2d6..ca115fb55fc 100644
--- a/gcc/config/pa/pa-protos.h
+++ b/gcc/config/pa/pa-protos.h
@@ -126,9 +126,6 @@ extern int eq_neq_comparison_operator PARAMS ((rtx, enum machine_mode));
extern int insn_refs_are_delayed PARAMS ((rtx));
#endif /* RTX_CODE */
-/* Prototype function used in macro ASM_OUTPUT_MI_THUNK. */
-extern void pa_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
-
/* Prototype function used in macro CONST_OK_FOR_LETTER_P. */
extern int zdepi_cint_p PARAMS ((unsigned HOST_WIDE_INT));
@@ -163,6 +160,4 @@ extern rtx function_arg PARAMS ((CUMULATIVE_ARGS *, enum machine_mode,
extern int function_arg_partial_nregs PARAMS ((CUMULATIVE_ARGS *,
enum machine_mode,
tree, int));
-
-extern void pa_asm_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
#endif /* TREE_CODE */
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index 54acf2ebb8c..29f8519cb7c 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -108,6 +108,7 @@ static void store_reg PARAMS ((int, int, int));
static void store_reg_modify PARAMS ((int, int, int));
static void load_reg PARAMS ((int, int, int));
static void set_reg_plus_d PARAMS ((int, int, int, int));
+static void pa_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
static void pa_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
static int pa_adjust_cost PARAMS ((rtx, rtx, rtx, int));
static int pa_adjust_priority PARAMS ((rtx, int));
@@ -119,6 +120,8 @@ static const char *pa_strip_name_encoding PARAMS ((const char *));
static bool pa_function_ok_for_sibcall PARAMS ((tree, tree));
static void pa_globalize_label PARAMS ((FILE *, const char *))
ATTRIBUTE_UNUSED;
+static void pa_asm_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
+
/* Save the operands last given to a compare for use when we
generate a scc or bcc insn. */
@@ -198,6 +201,9 @@ static size_t n_deferred_plabels = 0;
#undef TARGET_FUNCTION_OK_FOR_SIBCALL
#define TARGET_FUNCTION_OK_FOR_SIBCALL pa_function_ok_for_sibcall
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK pa_asm_output_mi_thunk
+
struct gcc_target targetm = TARGET_INITIALIZER;
void
@@ -3152,7 +3158,7 @@ compute_frame_size (size, fregs_live)
to do a "save" insn. The decision about whether or not
to do this is made in regclass.c. */
-void
+static void
pa_output_function_prologue (file, size)
FILE *file;
HOST_WIDE_INT size ATTRIBUTE_UNUSED;
@@ -6491,11 +6497,6 @@ hppa_encode_label (sym)
char *newstr, *p;
p = newstr = alloca (len + 1);
- if (str[0] == '*')
- {
- str++;
- len--;
- }
*p++ = '@';
strcpy (p, str);
@@ -6527,7 +6528,9 @@ static const char *
pa_strip_name_encoding (str)
const char *str;
{
- return str + (*str == '*' || *str == '@');
+ str += (*str == '@');
+ str += (*str == '*');
+ return str;
}
int
@@ -6556,7 +6559,7 @@ is_function_label_plus_const (op)
/* Output assembly code for a thunk to FUNCTION. */
-void
+static void
pa_asm_output_mi_thunk (file, thunk_fndecl, delta, function)
FILE *file;
tree thunk_fndecl;
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index 48cbfc8fe10..375a9fa5c5c 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -146,6 +146,12 @@ extern int target_flags;
#define MASK_SIO 8192
#define TARGET_SIO (target_flags & MASK_SIO)
+/* Assume GNU linker by default. */
+#define MASK_GNU_LD 16384
+#ifndef TARGET_GNU_LD
+#define TARGET_GNU_LD (target_flags & MASK_GNU_LD)
+#endif
+
#ifndef TARGET_PA_10
#define TARGET_PA_10 (target_flags & (MASK_PA_11 | MASK_PA_20) == 0)
#endif
@@ -891,9 +897,6 @@ extern GTY(()) rtx hppa_compare_op0;
extern GTY(()) rtx hppa_compare_op1;
extern enum cmp_type hppa_branch_type;
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
- pa_asm_output_mi_thunk (FILE, THUNK_FNDECL, DELTA, FUNCTION)
-
/* On HPPA, we emit profiling code as rtl via PROFILE_HOOK rather than
as assembly via FUNCTION_PROFILER. Just output a local label.
We can't use the function label because the GAS SOM target can't
@@ -1688,7 +1691,16 @@ do { \
`assemble_name' uses this. */
#define ASM_OUTPUT_LABELREF(FILE,NAME) \
- fprintf ((FILE), "%s", (NAME) + (FUNCTION_NAME_P (NAME) ? 1 : 0))
+ do { \
+ const char *xname = (NAME); \
+ if (FUNCTION_NAME_P (NAME)) \
+ xname += 1; \
+ if (xname[0] == '*') \
+ xname += 1; \
+ else \
+ fputs (user_label_prefix, FILE); \
+ fputs (xname, FILE); \
+ } while (0)
/* This is how to store into the string LABEL
the symbol_ref name of an internal numbered label where
diff --git a/gcc/config/pa/pa32-linux.h b/gcc/config/pa/pa32-linux.h
index a5c1da2fa62..c8ea72de828 100644
--- a/gcc/config/pa/pa32-linux.h
+++ b/gcc/config/pa/pa32-linux.h
@@ -21,3 +21,11 @@ Boston, MA 02111-1307, USA. */
/* Turn off various SOM crap we don't want. */
#undef TARGET_ELF32
#define TARGET_ELF32 1
+
+/* Sibcalls are ok when ld is used in single subspace mode. The
+ multiple subspace mode is not compatible with sibcalls to external
+ functions because the linker generated stubs store the return
+ pointer into the frame. This target does not need multiple
+ subspace stubs, so we allow sibcalls to all functions. */
+#undef FUNCTION_OK_FOR_SIBCALL
+#define FUNCTION_OK_FOR_SIBCALL(DECL) 1
diff --git a/gcc/config/pa/pa64-hpux.h b/gcc/config/pa/pa64-hpux.h
index f62cd6e0c0d..3db8626690f 100644
--- a/gcc/config/pa/pa64-hpux.h
+++ b/gcc/config/pa/pa64-hpux.h
@@ -19,11 +19,27 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#undef SUBTARGET_SWITCHES
+#define SUBTARGET_SWITCHES \
+ { "sio", MASK_SIO, \
+ N_("Generate cpp defines for server IO") }, \
+ { "wsio", -MASK_SIO, \
+ N_("Generate cpp defines for workstation IO") }, \
+ {"gnu-ld", MASK_GNU_LD, \
+ N_("Assume code will be linked by GNU ld") }, \
+ {"hp-ld", -MASK_GNU_LD, \
+ N_("Assume code will be linked by HP ld") },
+
/* We can debug dynamically linked executables on hpux11; we also
want dereferencing of a NULL pointer to cause a SEGV. */
#undef LINK_SPEC
+#if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_GNU_LD)
+#define LINK_SPEC \
+ "-E %{mlinker-opt:-O} %{!shared:-u main} %{static:-a archive} %{shared:%{mhp-ld:-b}%{!mhp-ld:-shared}} %{mhp-ld:+Accept TypeMismatch}"
+#else
#define LINK_SPEC \
- "-E %{mlinker-opt:-O} %{!shared:-u main} %{static:-a archive} %{shared:-shared}"
+ "-E %{mlinker-opt:-O} %{!shared:-u main} %{static:-a archive} %{shared:%{mgnu-ld:-shared}%{!mgnu-ld:-b}} %{!mgnu-ld:+Accept TypeMismatch}"
+#endif
/* Like the default, except no -lg. */
#undef LIB_SPEC
@@ -143,3 +159,8 @@ do { \
#ifndef ASM_DECLARE_RESULT
#define ASM_DECLARE_RESULT(FILE, RESULT)
#endif
+
+/* If using HP ld do not call pxdb. Use size as a program that does nothing
+ and returns 0. /bin/true cannot be used because it is a script without
+ an interpreter. */
+#define INIT_ENVIRONMENT "LD_PXDB=/usr/ccs/bin/size"
diff --git a/gcc/config/pdp11/pdp11.c b/gcc/config/pdp11/pdp11.c
index 3643db6d281..a7066bdffb7 100644
--- a/gcc/config/pdp11/pdp11.c
+++ b/gcc/config/pdp11/pdp11.c
@@ -137,7 +137,7 @@ pdp11_output_function_prologue (stream, size)
{
fprintf (stream, "\t/*abuse empty parameter slot for locals!*/\n");
if (size > 2)
- fprintf(stream, "\tsub $%d, sp\n", size - 2);
+ fprintf(stream, "\tsub $%#o, sp\n", size - 2);
}
}
@@ -168,8 +168,8 @@ pdp11_output_function_prologue (stream, size)
if (frame_pointer_needed)
{
- fprintf(stream, "\tmov fp, -(sp)\n");
- fprintf(stream, "\tmov sp, fp\n");
+ fprintf(stream, "\tmov r5, -(sp)\n");
+ fprintf(stream, "\tmov sp, r5\n");
}
else
{
@@ -178,7 +178,7 @@ pdp11_output_function_prologue (stream, size)
/* make frame */
if (fsize)
- fprintf (stream, "\tsub $%o, sp\n", fsize);
+ fprintf (stream, "\tsub $%#o, sp\n", fsize);
/* save CPU registers */
for (regno = 0; regno < 8; regno++)
@@ -198,7 +198,7 @@ pdp11_output_function_prologue (stream, size)
&& regs_ever_live[regno]
&& ! call_used_regs[regno])
{
- fprintf (stream, "\tfstd %s, -(sp)\n", reg_names[regno]);
+ fprintf (stream, "\tstd %s, -(sp)\n", reg_names[regno]);
via_ac = regno;
}
@@ -211,8 +211,8 @@ pdp11_output_function_prologue (stream, size)
if (via_ac == -1)
abort();
- fprintf (stream, "\tfldd %s, %s\n", reg_names[regno], reg_names[via_ac]);
- fprintf (stream, "\tfstd %s, -(sp)\n", reg_names[via_ac]);
+ fprintf (stream, "\tldd %s, %s\n", reg_names[regno], reg_names[via_ac]);
+ fprintf (stream, "\tstd %s, -(sp)\n", reg_names[via_ac]);
}
}
@@ -277,9 +277,10 @@ pdp11_output_function_epilogue (stream, size)
/* remember # of pushed bytes for CPU regs */
k = 2*j;
+ /* change fp -> r5 due to the compile error on libgcc2.c */
for (i =7 ; i >= 0 ; i--)
if (regs_ever_live[i] && ! call_used_regs[i])
- fprintf(stream, "\tmov %o(fp), %s\n",-fsize-2*j--, reg_names[i]);
+ fprintf(stream, "\tmov %#o(r5), %s\n",(-fsize-2*j--)&0xffff, reg_names[i]);
/* get ACs */
via_ac = FIRST_PSEUDO_REGISTER -1;
@@ -297,7 +298,7 @@ pdp11_output_function_epilogue (stream, size)
&& regs_ever_live[i]
&& ! call_used_regs[i])
{
- fprintf(stream, "\tfldd %o(fp), %s\n", -fsize-k, reg_names[i]);
+ fprintf(stream, "\tldd %#o(r5), %s\n", (-fsize-k)&0xffff, reg_names[i]);
k -= 8;
}
@@ -308,14 +309,14 @@ pdp11_output_function_epilogue (stream, size)
if (! LOAD_FPU_REG_P(via_ac))
abort();
- fprintf(stream, "\tfldd %o(fp), %s\n", -fsize-k, reg_names[via_ac]);
- fprintf(stream, "\tfstd %s, %s\n", reg_names[via_ac], reg_names[i]);
+ fprintf(stream, "\tldd %#o(r5), %s\n", (-fsize-k)&0xffff, reg_names[via_ac]);
+ fprintf(stream, "\tstd %s, %s\n", reg_names[via_ac], reg_names[i]);
k -= 8;
}
}
- fprintf(stream, "\tmov fp, sp\n");
- fprintf (stream, "\tmov (sp)+, fp\n");
+ fprintf(stream, "\tmov r5, sp\n");
+ fprintf (stream, "\tmov (sp)+, r5\n");
}
else
{
@@ -331,7 +332,7 @@ pdp11_output_function_epilogue (stream, size)
if (LOAD_FPU_REG_P(i)
&& regs_ever_live[i]
&& ! call_used_regs[i])
- fprintf(stream, "\tfldd (sp)+, %s\n", reg_names[i]);
+ fprintf(stream, "\tldd (sp)+, %s\n", reg_names[i]);
if (NO_LOAD_FPU_REG_P(i)
&& regs_ever_live[i]
@@ -340,8 +341,8 @@ pdp11_output_function_epilogue (stream, size)
if (! LOAD_FPU_REG_P(via_ac))
abort();
- fprintf(stream, "\tfldd (sp)+, %s\n", reg_names[via_ac]);
- fprintf(stream, "\tfstd %s, %s\n", reg_names[via_ac], reg_names[i]);
+ fprintf(stream, "\tldd (sp)+, %s\n", reg_names[via_ac]);
+ fprintf(stream, "\tstd %s, %s\n", reg_names[via_ac], reg_names[i]);
}
}
@@ -350,7 +351,7 @@ pdp11_output_function_epilogue (stream, size)
fprintf(stream, "\tmov (sp)+, %s\n", reg_names[i]);
if (fsize)
- fprintf((stream), "\tadd $%o, sp\n", fsize);
+ fprintf((stream), "\tadd $%#o, sp\n", (fsize)&0xffff);
}
fprintf (stream, "\trts pc\n");
@@ -562,7 +563,7 @@ output_move_quad (operands)
rtx latehalf[2];
rtx addreg0 = 0, addreg1 = 0;
- output_asm_insn(";; movdi/df: %1 -> %0", operands);
+ output_asm_insn(";/* movdi/df: %1 -> %0 */", operands);
if (REG_P (operands[0]))
optype0 = REGOP;
@@ -817,7 +818,7 @@ output_ascii (file, p, size)
register int c = p[i];
if (c < 0)
c += 256;
- fprintf (file, "%o", c);
+ fprintf (file, "%#o", c);
if (i < size - 1)
putc (',', file);
}
@@ -851,10 +852,12 @@ print_operand_address (file, addr)
fprintf (file, "(%s)", reg_names[REGNO (addr)]);
break;
+ case PRE_MODIFY:
case PRE_DEC:
fprintf (file, "-(%s)", reg_names[REGNO (XEXP (addr, 0))]);
break;
+ case POST_MODIFY:
case POST_INC:
fprintf (file, "(%s)+", reg_names[REGNO (XEXP (addr, 0))]);
break;
@@ -1546,7 +1549,7 @@ output_addr_const_pdp11 (file, x)
case CONST_INT:
/* Should we check for constants which are too big? Maybe cutting
them off to 16 bits is OK? */
- fprintf (file, "%ho", (unsigned short) INTVAL (x));
+ fprintf (file, "%#ho", (unsigned short) INTVAL (x));
break;
case CONST:
@@ -1562,7 +1565,7 @@ output_addr_const_pdp11 (file, x)
if (CONST_DOUBLE_HIGH (x))
abort (); /* Should we just silently drop the high part? */
else
- fprintf (file, "%ho", (unsigned short) CONST_DOUBLE_LOW (x));
+ fprintf (file, "%#ho", (unsigned short) CONST_DOUBLE_LOW (x));
}
else
/* We can't handle floating point constants;
diff --git a/gcc/config/pdp11/pdp11.h b/gcc/config/pdp11/pdp11.h
index 3133f2476b2..f9eb3f0e96a 100644
--- a/gcc/config/pdp11/pdp11.h
+++ b/gcc/config/pdp11/pdp11.h
@@ -20,6 +20,7 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#define CONSTANT_POOL_BEFORE_FUNCTION 0
/* check whether load_fpu_reg or not */
#define LOAD_FPU_REG_P(x) ((x)>=8 && (x)<=11)
@@ -700,7 +701,7 @@ extern int may_call_alloca;
/* Nonzero if the constant value X is a legitimate general operand.
It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */
-#define LEGITIMATE_CONSTANT_P(X) (1)
+#define LEGITIMATE_CONSTANT_P(X) (TARGET_FPU? 1: !(GET_CODE(X) == CONST_DOUBLE))
/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
and check its validity for a certain class.
@@ -771,6 +772,29 @@ extern int may_call_alloca;
&& GET_CODE (XEXP (operand, 0)) == REG \
&& REG_OK_FOR_BASE_P (XEXP (operand, 0))) \
goto ADDR; \
+ \
+ /* accept -(SP) -- which uses PRE_MODIFY for byte mode */ \
+ if (GET_CODE (operand) == PRE_MODIFY \
+ && GET_CODE (XEXP (operand, 0)) == REG \
+ && REGNO (XEXP (operand, 0)) == 6 \
+ && GET_CODE ((xfoob = XEXP (operand, 1))) == PLUS \
+ && GET_CODE (XEXP (xfoob, 0)) == REG \
+ && REGNO (XEXP (xfoob, 0)) == 6 \
+ && CONSTANT_P (XEXP (xfoob, 1)) \
+ && INTVAL (XEXP (xfoob,1)) == -2) \
+ goto ADDR; \
+ \
+ /* accept (SP)+ -- which uses POST_MODIFY for byte mode */ \
+ if (GET_CODE (operand) == POST_MODIFY \
+ && GET_CODE (XEXP (operand, 0)) == REG \
+ && REGNO (XEXP (operand, 0)) == 6 \
+ && GET_CODE ((xfoob = XEXP (operand, 1))) == PLUS \
+ && GET_CODE (XEXP (xfoob, 0)) == REG \
+ && REGNO (XEXP (xfoob, 0)) == 6 \
+ && CONSTANT_P (XEXP (xfoob, 1)) \
+ && INTVAL (XEXP (xfoob,1)) == 2) \
+ goto ADDR; \
+ \
\
/* handle another level of indirection ! */ \
if (GET_CODE(operand) != MEM) \
@@ -1075,7 +1099,7 @@ fprintf (FILE, "$help$: . = .+8 ; space for tmp moves!\n") \
}
#define ASM_OUTPUT_SKIP(FILE,SIZE) \
- fprintf (FILE, "\t.=.+ %o\n", (SIZE))
+ fprintf (FILE, "\t.=.+ %#ho\n", (unsigned short)(SIZE))
/* This says how to output an assembler line
to define a global common symbol. */
@@ -1085,7 +1109,7 @@ fprintf (FILE, "$help$: . = .+8 ; space for tmp moves!\n") \
assemble_name ((FILE), (NAME)), \
fprintf ((FILE), "\n"), \
assemble_name ((FILE), (NAME)), \
- fprintf ((FILE), ": .=.+ %o\n", (ROUNDED)) \
+ fprintf ((FILE), ": .=.+ %#ho\n", (unsigned short)(ROUNDED)) \
)
/* This says how to output an assembler line
@@ -1093,7 +1117,7 @@ fprintf (FILE, "$help$: . = .+8 ; space for tmp moves!\n") \
#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
( assemble_name ((FILE), (NAME)), \
- fprintf ((FILE), ":\t.=.+ %o\n", (ROUNDED)))
+ fprintf ((FILE), ":\t.=.+ %#ho\n", (unsigned short)(ROUNDED)))
/* Print operand X (an rtx) in assembler syntax to file FILE.
CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
@@ -1109,11 +1133,9 @@ fprintf (FILE, "$help$: . = .+8 ; space for tmp moves!\n") \
else if (GET_CODE (X) == MEM) \
output_address (XEXP (X, 0)); \
else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) != SImode) \
- { REAL_VALUE_TYPE r; \
- char buf[30]; \
- REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
- REAL_VALUE_TO_DECIMAL (r, buf, -1); \
- fprintf (FILE, "#%s", buf); } \
+ { char buf[30]; \
+ real_to_decimal (buf, CONST_DOUBLE_REAL_VALUE (X), sizeof (buf), 0, 1); \
+ fprintf (FILE, "$0F%s", buf); } \
else { putc ('$', FILE); output_addr_const_pdp11 (FILE, X); }}
/* Print a memory address as an operand to reference that memory location. */
diff --git a/gcc/config/pdp11/pdp11.md b/gcc/config/pdp11/pdp11.md
index 13f8d02f9c1..fae4907bf83 100644
--- a/gcc/config/pdp11/pdp11.md
+++ b/gcc/config/pdp11/pdp11.md
@@ -621,12 +621,12 @@
;; Move instructions
(define_insn "movdi"
- [(set (match_operand:DI 0 "general_operand" "=g")
- (match_operand:DI 1 "general_operand" "g"))]
+ [(set (match_operand:DI 0 "general_operand" "=g,rm,o")
+ (match_operand:DI 1 "general_operand" "m,r,a"))]
""
"* return output_move_quad (operands);"
;; what's the mose expensive code - say twice movsi = 16
- [(set_attr "length" "16")])
+ [(set_attr "length" "16,16,16")])
(define_insn "movsi"
[(set (match_operand:SI 0 "general_operand" "=r,r,r,rm,m")
@@ -651,8 +651,8 @@
[(set_attr "length" "1,2,2,3")])
(define_insn "movqi"
- [(set (match_operand:QI 0 "general_operand" "=rR,rR,Q,Q")
- (match_operand:QI 1 "general_operand" "rRN,Qi,rRN,Qi"))]
+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
+ (match_operand:QI 1 "general_operand" "g"))]
""
"*
{
@@ -661,17 +661,22 @@
return \"movb %1, %0\";
}"
- [(set_attr "length" "1,2,2,3")])
+ [(set_attr "length" "1")])
;; do we have to supply all these moves? e.g. to
;; NO_LOAD_FPU_REGs ?
(define_insn "movdf"
- [(set (match_operand:DF 0 "general_operand" "=f,R,f,Q,f,m")
- (match_operand:DF 1 "general_operand" "fR,f,Q,f,F,m"))]
+ [(set (match_operand:DF 0 "general_operand" "=a,fR,a,Q,m")
+ (match_operand:DF 1 "general_operand" "fFR,a,Q,a,m"))]
""
- "* return output_move_quad (operands);"
+ "* if (which_alternative ==0)
+ return \"ldd %1, %0\";
+ else if (which_alternative == 1)
+ return \"std %1, %0\";
+ else
+ return output_move_quad (operands); "
;; just a guess..
- [(set_attr "length" "1,1,2,2,5,16")])
+ [(set_attr "length" "1,1,5,5,16")])
(define_insn "movsf"
[(set (match_operand:SF 0 "general_operand" "=g,r,g")
@@ -760,7 +765,7 @@
[(set (match_operand:HI 0 "general_operand" "=r")
(zero_extend:HI (match_operand:QI 1 "general_operand" "0")))]
""
- "bic $(256*255), %0"
+ "bic $0177400, %0"
[(set_attr "length" "2")])
(define_expand "zero_extendhisi2"
@@ -919,7 +924,7 @@
rtx latehalf[2];
latehalf[0] = NULL;
- latehalf[1] = gen_rtx_REG (HImode, REGNO (operands[0]) + 1);
+ latehalf[1] = gen_rtx_REG (HImode, REGNO (operands[1]) + 1);
output_asm_insn(\"mov %1, -(sp)\", latehalf);
output_asm_insn(\"mov %1, -(sp)\", operands);
@@ -1067,7 +1072,7 @@
return \"decb %0\";
}
- return \"addb %2, %0\";
+ return \"add %2, %0\";
}"
[(set_attr "length" "1,2,2,3")])
@@ -1143,53 +1148,14 @@
if (GET_CODE (operands[2]) == CONST_INT)
abort();
- return \"subb %2, %0\";
+ return \"sub %2, %0\";
}"
[(set_attr "length" "1,2,2,3")])
;;;;- and instructions
;; Bit-and on the pdp (like on the VAX) is done with a clear-bits insn.
-(define_expand "andsi3"
- [(set (match_operand:SI 0 "general_operand" "=g")
- (and:SI (match_operand:SI 1 "general_operand" "0")
- (not:SI (match_operand:SI 2 "general_operand" "g"))))]
- ""
- "
-{
- if (GET_CODE (operands[2]) == CONST_INT)
- operands[2] = GEN_INT (~INTVAL (operands[2]));
- else
- operands[2] = expand_unop (SImode, one_cmpl_optab, operands[2], 0, 1);
-}")
-(define_expand "andhi3"
- [(set (match_operand:HI 0 "general_operand" "=g")
- (and:HI (match_operand:HI 1 "general_operand" "0")
- (not:HI (match_operand:HI 2 "general_operand" "g"))))]
- ""
- "
-{
- if (GET_CODE (operands[2]) == CONST_INT)
- operands[2] = GEN_INT (~INTVAL (operands[2]));
- else
- operands[2] = expand_unop (HImode, one_cmpl_optab, operands[2], 0, 1);
-}")
-
-(define_expand "andqi3"
- [(set (match_operand:QI 0 "general_operand" "=g")
- (and:QI (match_operand:QI 1 "general_operand" "0")
- (not:QI (match_operand:QI 2 "general_operand" "g"))))]
- ""
- "
-{
- rtx op = operands[2];
- if (GET_CODE (op) == CONST_INT)
- operands[2] = GEN_INT (((1 << 8) - 1) & ~INTVAL (op));
- else
- operands[2] = expand_unop (QImode, one_cmpl_optab, op, 0, 1);
-}")
-
-(define_insn "andcbsi3"
+(define_insn "andsi3"
[(set (match_operand:SI 0 "general_operand" "=r,r,o,o,r,r,r,o,o,o")
(and:SI (match_operand:SI 1 "general_operand" "%0,0,0,0,0,0,0,0,0,0")
(not:SI (match_operand:SI 2 "general_operand" "r,o,r,o,I,J,K,I,J,K"))))]
@@ -1237,7 +1203,7 @@
}"
[(set_attr "length" "2,4,4,6,2,2,4,3,3,6")])
-(define_insn "andcbhi3"
+(define_insn "andhi3"
[(set (match_operand:HI 0 "general_operand" "=rR,rR,Q,Q")
(and:HI (match_operand:HI 1 "general_operand" "0,0,0,0")
(not:HI (match_operand:HI 2 "general_operand" "rR,Qi,rR,Qi"))))]
@@ -1245,7 +1211,7 @@
"bic %2, %0"
[(set_attr "length" "1,2,2,3")])
-(define_insn "andcbqi3"
+(define_insn "andqi3"
[(set (match_operand:QI 0 "general_operand" "=rR,rR,Q,Q")
(and:QI (match_operand:QI 1 "general_operand" "0,0,0,0")
(not:QI (match_operand:QI 2 "general_operand" "rR,Qi,rR,Qi"))))]
@@ -1319,9 +1285,9 @@
;;- xor instructions
(define_insn "xorsi3"
- [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
- (xor:SI (match_operand:SI 1 "register_operand" "%0,0,0,0")
- (match_operand:SI 2 "arith_operand" "r,I,J,K")))]
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (xor:SI (match_operand:SI 1 "register_operand" "%0")
+ (match_operand:SI 2 "arith_operand" "r")))]
"TARGET_40_PLUS"
"*
{ /* Here we trust that operands don't overlap */
@@ -1342,18 +1308,8 @@
return \"\";
}
- lateoperands[2] = GEN_INT ((INTVAL (operands[2]) >> 16) & 0xffff);
- operands[2] = GEN_INT (INTVAL(operands[2]) & 0xffff);
-
- if (INTVAL (operands[2]))
- output_asm_insn (\"xor %2, %0\", operands);
-
- if (INTVAL (lateoperands[2]))
- output_asm_insn (\"xor %2, %0\", lateoperands);
-
- return \"\";
}"
- [(set_attr "length" "2,1,1,2")])
+ [(set_attr "length" "2")])
(define_insn "xorhi3"
[(set (match_operand:HI 0 "general_operand" "=rR,Q")
@@ -1373,10 +1329,12 @@
[(set_attr "length" "1,2")])
(define_insn "one_cmplqi2"
- [(set (match_operand:QI 0 "general_operand" "=rR,Q")
- (not:QI (match_operand:QI 1 "general_operand" "0,0")))]
+ [(set (match_operand:QI 0 "general_operand" "=rR,rR")
+ (not:QI (match_operand:QI 1 "general_operand" "0,g")))]
""
- "comb %0"
+ "@
+ comb %0
+ movb %1, %0\; comb %0"
[(set_attr "length" "1,2")])
;;- arithmetic shift instructions
@@ -1423,6 +1381,38 @@
"asr %0"
[(set_attr "length" "1,2")])
+;; lsr
+(define_insn ""
+ [(set (match_operand:HI 0 "general_operand" "=rR,Q")
+ (lshiftrt:HI (match_operand:HI 1 "general_operand" "0,0")
+ (const_int 1)))]
+ ""
+ "clc\;ror %0"
+ [(set_attr "length" "1,2")])
+
+(define_insn "lshrsi3"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (lshiftrt:SI (match_operand:SI 1 "general_operand" "0")
+ (const_int 1)))]
+ ""
+{
+
+ rtx lateoperands[2];
+
+ lateoperands[0] = operands[0];
+ operands[0] = gen_rtx_REG (HImode, REGNO (operands[0]) + 1);
+
+ lateoperands[1] = operands[1];
+ operands[1] = gen_rtx_REG (HImode, REGNO (operands[1]) + 1);
+
+ output_asm_insn (\"clc\", operands);
+ output_asm_insn (\"ror %0\", lateoperands);
+ output_asm_insn (\"ror %0\", operands);
+
+ return \"\";
+}
+ [(set_attr "length" "5")])
+
;; shift is by arbitrary count is expensive,
;; shift by one cheap - so let's do that, if
;; space doesn't matter
@@ -1620,6 +1610,29 @@
"{negd|negf} %0"
[(set_attr "length" "1,2")])
+(define_insn "negsi2"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (neg:SI (match_operand:SI 1 "general_operand" "0")))]
+ ""
+{
+
+ rtx lateoperands[2];
+
+ lateoperands[0] = operands[0];
+ operands[0] = gen_rtx_REG (HImode, REGNO (operands[0]) + 1);
+
+ lateoperands[1] = operands[1];
+ operands[1] = gen_rtx_REG (HImode, REGNO (operands[1]) + 1);
+
+ output_asm_insn (\"com %0\", operands);
+ output_asm_insn (\"com %0\", lateoperands);
+ output_asm_insn (\"inc %0\", operands);
+ output_asm_insn (\"adc %0\", lateoperands);
+
+ return \"\";
+}
+ [(set_attr "length" "5")])
+
(define_insn "neghi2"
[(set (match_operand:HI 0 "general_operand" "=rR,Q")
(neg:HI (match_operand:HI 1 "general_operand" "0,0")))]
@@ -1670,7 +1683,7 @@
;;- jump to subroutine
(define_insn "call"
- [(call (match_operand:HI 0 "general_operand" "R,Q")
+ [(call (match_operand:HI 0 "general_operand" "rR,Q")
(match_operand:HI 1 "general_operand" "g,g"))
;; (use (reg:HI 0)) what was that ???
]
@@ -1682,7 +1695,7 @@
;;- jump to subroutine
(define_insn "call_value"
[(set (match_operand 0 "" "")
- (call (match_operand:HI 1 "general_operand" "R,Q")
+ (call (match_operand:HI 1 "general_operand" "rR,Q")
(match_operand:HI 2 "general_operand" "g,g")))
;; (use (reg:HI 0)) - what was that ????
]
@@ -1788,7 +1801,7 @@
"")
(define_insn ""
- [(set (subreg:HI (match_operand:SI 0 "general_operand" "=r") 4)
+ [(set (subreg:HI (match_operand:SI 0 "general_operand" "=r") 2)
(mod:HI (match_operand:SI 1 "general_operand" "0")
(match_operand:HI 2 "general_operand" "g")))]
"TARGET_45"
diff --git a/gcc/config/pdp11/t-pdp11 b/gcc/config/pdp11/t-pdp11
index 38bf1473a44..0231a7b38d6 100644
--- a/gcc/config/pdp11/t-pdp11
+++ b/gcc/config/pdp11/t-pdp11
@@ -1 +1,15 @@
TARGET_LIBGCC2_CFLAGS = -O2 -mfloat32
+LIB2FUNCS_EXTRA = $(srcdir)/config/udivmod.c $(srcdir)/config/udivmodsi4.c
+# floating point emulation libraries
+
+FPBIT = fp-bit.c
+DPBIT = dp-bit.c
+
+fp-bit.c: $(srcdir)/config/fp-bit.c
+ echo '#define FLOAT' > fp-bit.c
+ cat $(srcdir)/config/fp-bit.c >> fp-bit.c
+
+dp-bit.c: $(srcdir)/config/fp-bit.c
+ cat $(srcdir)/config/fp-bit.c > dp-bit.c
+
+MULTILIB_OPTIONS = msoft-float
diff --git a/gcc/config/rs6000/rs6000-protos.h b/gcc/config/rs6000/rs6000-protos.h
index 2f4974324c3..08540e37348 100644
--- a/gcc/config/rs6000/rs6000-protos.h
+++ b/gcc/config/rs6000/rs6000-protos.h
@@ -150,7 +150,8 @@ extern void setup_incoming_varargs PARAMS ((CUMULATIVE_ARGS *,
enum machine_mode, tree,
int *, int));
extern struct rtx_def *rs6000_va_arg PARAMS ((tree, tree));
-extern void output_mi_thunk PARAMS ((FILE *, tree, int, tree));
+extern void output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
+extern int function_ok_for_sibcall PARAMS ((tree));
#ifdef ARGS_SIZE_RTX
/* expr.h defines ARGS_SIZE_RTX and `enum direction' */
extern enum direction function_arg_padding PARAMS ((enum machine_mode, tree));
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index b054557c256..65ab27fec95 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -690,6 +690,10 @@ rs6000_override_options (default_cpu)
target_flags |= MASK_AIX_STRUCT_RET;
}
+ if (TARGET_LONG_DOUBLE_128
+ && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN))
+ real_format_for_mode[TFmode - QFmode] = &ibm_extended_format;
+
/* Register global variables with the garbage collector. */
rs6000_add_gc_roots ();
@@ -1313,7 +1317,21 @@ easy_fp_constant (op, mode)
return 0;
#endif
- if (mode == DFmode)
+ if (mode == TFmode)
+ {
+ long k[4];
+ REAL_VALUE_TYPE rv;
+
+ REAL_VALUE_FROM_CONST_DOUBLE (rv, op);
+ REAL_VALUE_TO_TARGET_LONG_DOUBLE (rv, k);
+
+ return (num_insns_constant_wide ((HOST_WIDE_INT) k[0]) == 1
+ && num_insns_constant_wide ((HOST_WIDE_INT) k[1]) == 1
+ && num_insns_constant_wide ((HOST_WIDE_INT) k[2]) == 1
+ && num_insns_constant_wide ((HOST_WIDE_INT) k[3]) == 1);
+ }
+
+ else if (mode == DFmode)
{
long k[2];
REAL_VALUE_TYPE rv;
@@ -2102,7 +2120,7 @@ rs6000_legitimize_address (x, oldx, mode)
&& GET_MODE_NUNITS (mode) == 1
&& ((TARGET_HARD_FLOAT && TARGET_FPRS)
|| TARGET_POWERPC64
- || mode != DFmode)
+ || (mode != DFmode && mode != TFmode))
&& (TARGET_POWERPC64 || mode != DImode)
&& mode != TImode)
{
@@ -2355,7 +2373,7 @@ rs6000_legitimate_address (mode, x, reg_ok_strict)
if (mode != TImode
&& ((TARGET_HARD_FLOAT && TARGET_FPRS)
|| TARGET_POWERPC64
- || mode != DFmode)
+ || (mode != DFmode && mode != TFmode))
&& (TARGET_POWERPC64 || mode != DImode)
&& LEGITIMATE_INDEXED_ADDRESS_P (x, reg_ok_strict))
return 1;
@@ -3033,7 +3051,7 @@ function_arg_advance (cum, mode, type, named)
if (GET_MODE_CLASS (mode) == MODE_FLOAT
&& TARGET_HARD_FLOAT && TARGET_FPRS)
- cum->fregno++;
+ cum->fregno += (mode == TFmode ? 2 : 1);
if (TARGET_DEBUG_ARG)
{
@@ -3152,6 +3170,9 @@ function_arg (cum, mode, type, named)
rtx r1, r2;
enum machine_mode m = GET_MODE_INNER (mode);
+ if (mode == V1DImode)
+ m = SImode;
+
r1 = gen_rtx_REG (m, gregno);
r1 = gen_rtx_EXPR_LIST (m, r1, const0_rtx);
r2 = gen_rtx_REG (m, gregno + 1);
@@ -9436,7 +9457,6 @@ rs6000_function_ok_for_sibcall (decl, exp)
return false;
}
-/* function rewritten to handle sibcalls */
static int
rs6000_ra_ever_killed ()
{
@@ -9444,23 +9464,24 @@ rs6000_ra_ever_killed ()
rtx reg;
rtx insn;
-#ifdef ASM_OUTPUT_MI_THUNK
- if (current_function_is_thunk)
+ if (targetm.asm_out.output_mi_thunk && current_function_is_thunk)
return 0;
-#endif
- /* regs_ever_live has LR marked as used if any sibcalls
- are present. Which it is, but this should not force
- saving and restoring in the prologue/epilog. Likewise,
- reg_set_between_p thinks a sibcall clobbers LR, so
- that is inappropriate. */
+
+ /* regs_ever_live has LR marked as used if any sibcalls are present,
+ but this should not force saving and restoring in the
+ pro/epilogue. Likewise, reg_set_between_p thinks a sibcall
+ clobbers LR, so that is inappropriate. */
+
/* Also, the prologue can generate a store into LR that
doesn't really count, like this:
+
move LR->R0
bcl to set PIC register
move LR->R31
move R0->LR
- When we're called from the epilog, we need to avoid counting
- this as a store; thus we ignore any insns with a REG_MAYBE_DEAD note. */
+
+ When we're called from the epilogue, we need to avoid counting
+ this as a store. */
push_topmost_sequence ();
top = get_insns ();
@@ -9476,8 +9497,8 @@ rs6000_ra_ever_killed ()
else if (GET_CODE (insn) == CALL_INSN
&& !SIBLING_CALL_P (insn))
return 1;
- else if (set_of (reg, insn) != NULL_RTX
- && find_reg_note (insn, REG_MAYBE_DEAD, NULL_RTX) == 0)
+ else if (set_of (reg, insn) != NULL_RTX
+ && !prologue_epilogue_contains (insn))
return 1;
}
}
@@ -10461,21 +10482,21 @@ rs6000_emit_prologue ()
gen_rtx_REG (Pmode, 11));
}
+#if TARGET_MACHO
if (DEFAULT_ABI == ABI_DARWIN
&& flag_pic && current_function_uses_pic_offset_table)
{
rtx dest = gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM);
-#if TARGET_MACHO
char *picbase = machopic_function_base_name ();
rtx src = gen_rtx_SYMBOL_REF (Pmode, ggc_alloc_string (picbase, -1));
rs6000_maybe_dead (emit_insn (gen_load_macho_picbase (dest, src)));
-#endif
rs6000_maybe_dead (
emit_move_insn (gen_rtx_REG (Pmode, RS6000_PIC_OFFSET_TABLE_REGNUM),
gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM)));
}
+#endif
}
/* Write function prologue. */
@@ -10975,7 +10996,7 @@ rs6000_output_function_epilogue (file, size)
if (DEFAULT_ABI == ABI_AIX && ! flag_inhibit_size_directive
&& rs6000_traceback != traceback_none)
{
- const char *fname = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0);
+ const char *fname = NULL;
const char *language_string = lang_hooks.name;
int fixed_parms = 0, float_parms = 0, parm_info = 0;
int i;
@@ -10988,15 +11009,17 @@ rs6000_output_function_epilogue (file, size)
else
optional_tbtab = !optimize_size && !TARGET_ELF;
- while (*fname == '.') /* V.4 encodes . in the name */
- fname++;
+ if (optional_tbtab)
+ {
+ fname = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0);
+ while (*fname == '.') /* V.4 encodes . in the name */
+ fname++;
- /* Need label immediately before tbtab, so we can compute its offset
- from the function start. */
- if (*fname == '*')
- ++fname;
- ASM_OUTPUT_INTERNAL_LABEL_PREFIX (file, "LT");
- ASM_OUTPUT_LABEL (file, fname);
+ /* Need label immediately before tbtab, so we can compute
+ its offset from the function start. */
+ ASM_OUTPUT_INTERNAL_LABEL_PREFIX (file, "LT");
+ ASM_OUTPUT_LABEL (file, fname);
+ }
/* The .tbtab pseudo-op can only be used for the first eight
expressions, since it can't handle the possibly variable
@@ -11091,7 +11114,7 @@ rs6000_output_function_epilogue (file, size)
if (mode == SFmode)
bits = 0x2;
- else if (mode == DFmode)
+ else if (mode == DFmode || mode == TFmode)
bits = 0x3;
else
abort ();
@@ -11168,6 +11191,8 @@ rs6000_output_function_epilogue (file, size)
/* Omit this list of longs, because there are no CTL anchors. */
/* Length of function name. */
+ if (*fname == '*')
+ ++fname;
fprintf (file, "\t.short %d\n", (int) strlen (fname));
/* Function name. */
@@ -11218,7 +11243,7 @@ void
output_mi_thunk (file, thunk_fndecl, delta, function)
FILE *file;
tree thunk_fndecl ATTRIBUTE_UNUSED;
- int delta;
+ HOST_WIDE_INT delta;
tree function;
{
const char *this_reg =
@@ -11236,9 +11261,9 @@ output_mi_thunk (file, thunk_fndecl, delta, function)
if (delta >= -32768 && delta <= 32767)
{
if (! TARGET_NEW_MNEMONICS)
- fprintf (file, "\tcal %s,%d(%s)\n", this_reg, delta, this_reg);
+ fprintf (file, "\tcal %s,%d(%s)\n", this_reg, (int) delta, this_reg);
else
- fprintf (file, "\taddi %s,%s,%d\n", this_reg, this_reg, delta);
+ fprintf (file, "\taddi %s,%s,%d\n", this_reg, this_reg, (int) delta);
}
/* 64-bit constants. If "int" is 32 bits, we'll never hit this abort. */
@@ -11248,7 +11273,7 @@ output_mi_thunk (file, thunk_fndecl, delta, function)
/* Large constants that can be done by one addis instruction. */
else if ((delta & 0xffff) == 0)
asm_fprintf (file, "\t{cau|addis} %s,%s,%d\n", this_reg, this_reg,
- delta >> 16);
+ (int) (delta >> 16));
/* 32-bit constants that can be done by an add and addis instruction. */
else
@@ -11293,7 +11318,6 @@ output_mi_thunk (file, thunk_fndecl, delta, function)
TYPE_ATTRIBUTES (TREE_TYPE (function)))
|| lookup_attribute ("shortcall",
TYPE_ATTRIBUTES (TREE_TYPE (function)))))
-
{
fprintf (file, "\tb %s", prefix);
assemble_name (file, fname);
@@ -11328,7 +11352,7 @@ output_mi_thunk (file, thunk_fndecl, delta, function)
if (TARGET_ELF)
function_section (current_function_decl);
else
- text_section();
+ text_section ();
if (TARGET_MINIMAL_TOC)
asm_fprintf (file, (TARGET_32BIT)
? "\t{l|lwz} %s,%s(%s)\n" : "\tld %s,%s(%s)\n", r12,
@@ -11644,7 +11668,42 @@ output_toc (file, x, labelno, mode)
/* Handle FP constants specially. Note that if we have a minimal
TOC, things we put here aren't actually in the TOC, so we can allow
FP constants. */
- if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) == DFmode)
+ if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) == TFmode)
+ {
+ REAL_VALUE_TYPE rv;
+ long k[4];
+
+ REAL_VALUE_FROM_CONST_DOUBLE (rv, x);
+ REAL_VALUE_TO_TARGET_LONG_DOUBLE (rv, k);
+
+ if (TARGET_64BIT)
+ {
+ if (TARGET_MINIMAL_TOC)
+ fputs (DOUBLE_INT_ASM_OP, file);
+ else
+ fprintf (file, "\t.tc FT_%lx_%lx_%lx_%lx[TC],",
+ k[0] & 0xffffffff, k[1] & 0xffffffff,
+ k[2] & 0xffffffff, k[3] & 0xffffffff);
+ fprintf (file, "0x%lx%08lx,0x%lx%08lx\n",
+ k[0] & 0xffffffff, k[1] & 0xffffffff,
+ k[2] & 0xffffffff, k[3] & 0xffffffff);
+ return;
+ }
+ else
+ {
+ if (TARGET_MINIMAL_TOC)
+ fputs ("\t.long ", file);
+ else
+ fprintf (file, "\t.tc FT_%lx_%lx_%lx_%lx[TC],",
+ k[0] & 0xffffffff, k[1] & 0xffffffff,
+ k[2] & 0xffffffff, k[3] & 0xffffffff);
+ fprintf (file, "0x%lx,0x%lx,0x%lx,0x%lx\n",
+ k[0] & 0xffffffff, k[1] & 0xffffffff,
+ k[2] & 0xffffffff, k[3] & 0xffffffff);
+ return;
+ }
+ }
+ else if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) == DFmode)
{
REAL_VALUE_TYPE rv;
long k[2];
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 84cafb73815..e22175e3940 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -661,7 +661,8 @@ extern int rs6000_default_long_calls;
emulated in a trap handler. */
#define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) \
(STRICT_ALIGNMENT \
- || (((MODE) == SFmode || (MODE) == DFmode || (MODE) == DImode) \
+ || (((MODE) == SFmode || (MODE) == DFmode || (MODE) == TFmode \
+ || (MODE) == DImode) \
&& (ALIGN) < 32))
/* Standard register usage. */
@@ -903,8 +904,7 @@ extern int rs6000_default_long_calls;
: SPE_SIMD_REGNO_P (REGNO) && TARGET_SPE && SPE_VECTOR_MODE (MODE) ? 1 \
: CR_REGNO_P (REGNO) ? GET_MODE_CLASS (MODE) == MODE_CC \
: XER_REGNO_P (REGNO) ? (MODE) == PSImode \
- : ! INT_REGNO_P (REGNO) ? (GET_MODE_CLASS (MODE) == MODE_INT \
- && GET_MODE_SIZE (MODE) <= UNITS_PER_WORD) \
+ : ! INT_REGNO_P (REGNO) ? GET_MODE_SIZE (MODE) <= UNITS_PER_WORD \
: 1)
/* Value is 1 if it is a good idea to tie two pseudo registers
@@ -2067,7 +2067,7 @@ typedef struct rs6000_args
|| (TARGET_32BIT \
? LEGITIMATE_ADDRESS_INTEGER_P (XEXP (X, 1), 4) \
: ! (INTVAL (XEXP (X, 1)) & 3))) \
- && ((MODE) != TImode \
+ && (((MODE) != TFmode && (MODE) != TImode) \
|| (TARGET_32BIT \
? LEGITIMATE_ADDRESS_INTEGER_P (XEXP (X, 1), 12) \
: (LEGITIMATE_ADDRESS_INTEGER_P (XEXP (X, 1), 8) \
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index b61b77ec431..e9ae2963da5 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -3615,7 +3615,7 @@
#"
[(set_attr "type" "compare")
(set_attr "length" "4,8")])
-
+
(define_split
[(set (match_operand:CC 4 "cc_reg_not_cr0_operand" "")
(compare:CC
@@ -3635,7 +3635,7 @@
(compare:CC (match_dup 0)
(const_int 0)))]
"")
-
+
;; Rotate and shift insns, in all their variants. These support shifts,
;; field inserts and extracts, and various combinations thereof.
(define_expand "insv"
@@ -8349,8 +8349,8 @@
"")
(define_insn "*movcc_internal1"
- [(set (match_operand:CC 0 "nonimmediate_operand" "=y,x,y,r,r,r,r,m")
- (match_operand:CC 1 "nonimmediate_operand" "y,r,r,x,y,r,m,r"))]
+ [(set (match_operand:CC 0 "nonimmediate_operand" "=y,x,y,r,r,r,cl,q,r,r,m")
+ (match_operand:CC 1 "nonimmediate_operand" "y,r,r,x,y,r,r,r,h,m,r"))]
"register_operand (operands[0], CCmode)
|| register_operand (operands[1], CCmode)"
"@
@@ -8360,10 +8360,13 @@
mfcr %0
mfcr %0\;{rlinm|rlwinm} %0,%0,%f1,0xf0000000
mr %0,%1
+ mt%0 %1
+ mt%0 %1
+ mf%1 %0
{l%U1%X1|lwz%U1%X1} %0,%1
{st%U0%U1|stw%U0%U1} %1,%0"
- [(set_attr "type" "cr_logical,cr_logical,cr_logical,cr_logical,cr_logical,*,load,store")
- (set_attr "length" "*,*,12,*,8,*,*,*")])
+ [(set_attr "type" "cr_logical,cr_logical,cr_logical,cr_logical,cr_logical,*,*,mtjmpr,*,load,store")
+ (set_attr "length" "4,4,12,4,8,4,4,4,4,4,4")])
;; For floating-point, we normally deal with the floating-point registers
;; unless -msoft-float is used. The sole exception is that parameter passing
@@ -8402,8 +8405,8 @@
}")
(define_insn "*movsf_hardfloat"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=!r,!r,m,f,f,m,!r,!r")
- (match_operand:SF 1 "input_operand" "r,m,r,f,m,f,G,Fn"))]
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=!r,!r,m,f,f,m,!cl,!q,!r,!r,!r")
+ (match_operand:SF 1 "input_operand" "r,m,r,f,m,f,r,r,h,G,Fn"))]
"(gpc_reg_operand (operands[0], SFmode)
|| gpc_reg_operand (operands[1], SFmode))
&& (TARGET_HARD_FLOAT && TARGET_FPRS)"
@@ -8414,19 +8417,25 @@
fmr %0,%1
lfs%U1%X1 %0,%1
stfs%U0%X0 %1,%0
+ mt%0 %1
+ mt%0 %1
+ mf%1 %0
#
#"
- [(set_attr "type" "*,load,store,fp,fpload,fpstore,*,*")
- (set_attr "length" "4,4,4,4,4,4,4,8")])
+ [(set_attr "type" "*,load,store,fp,fpload,fpstore,*,mtjmpr,*,*,*")
+ (set_attr "length" "4,4,4,4,4,4,4,4,4,4,8")])
(define_insn "*movsf_softfloat"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,m,r,r,r,r,r")
- (match_operand:SF 1 "input_operand" "r,m,r,I,L,R,G,Fn"))]
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=r,cl,q,r,r,m,r,r,r,r,r")
+ (match_operand:SF 1 "input_operand" "r,r,r,h,m,r,I,L,R,G,Fn"))]
"(gpc_reg_operand (operands[0], SFmode)
|| gpc_reg_operand (operands[1], SFmode))
&& (TARGET_SOFT_FLOAT || !TARGET_FPRS)"
"@
mr %0,%1
+ mt%0 %1
+ mt%0 %1
+ mf%1 %0
{l%U1%X1|lwz%U1%X1} %0,%1
{st%U0%X0|stw%U0%X0} %1,%0
{lil|li} %0,%1
@@ -8434,8 +8443,8 @@
{cal|la} %0,%a1
#
#"
- [(set_attr "type" "*,load,store,*,*,*,*,*")
- (set_attr "length" "4,4,4,4,4,4,4,8")])
+ [(set_attr "type" "*,mtjmpr,*,*,load,store,*,*,*,*,*")
+ (set_attr "length" "4,4,4,4,4,4,4,4,4,4,8")])
(define_expand "movdf"
@@ -8518,10 +8527,10 @@
operands[2] = gen_lowpart (DImode, operands[0]);
/* HIGHPART is lower memory address when WORDS_BIG_ENDIAN. */
#if HOST_BITS_PER_WIDE_INT >= 64
- val = ((HOST_WIDE_INT)(unsigned long)l[endian] << 32 |
- ((HOST_WIDE_INT)(unsigned long)l[1 - endian]));
+ val = ((HOST_WIDE_INT)(unsigned long)l[endian] << 32
+ | ((HOST_WIDE_INT)(unsigned long)l[1 - endian]));
- operands[3] = immed_double_const (val, -(val < 0), DImode);
+ operands[3] = gen_int_mode (val, DImode);
#else
operands[3] = immed_double_const (l[1 - endian], l[endian], DImode);
#endif
@@ -8534,8 +8543,8 @@
;; The "??" is a kludge until we can figure out a more reasonable way
;; of handling these non-offsettable values.
(define_insn "*movdf_hardfloat32"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=!r,??r,m,!r,!r,!r,f,f,m")
- (match_operand:DF 1 "input_operand" "r,m,r,G,H,F,f,m,f"))]
+ [(set (match_operand:DF 0 "nonimmediate_operand" "=!r,??r,m,f,f,m,!r,!r,!r")
+ (match_operand:DF 1 "input_operand" "r,m,r,f,m,f,G,H,F"))]
"! TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS
&& (gpc_reg_operand (operands[0], DFmode)
|| gpc_reg_operand (operands[1], DFmode))"
@@ -8612,19 +8621,19 @@
return \"\";
}
case 3:
+ return \"fmr %0,%1\";
case 4:
+ return \"lfd%U1%X1 %0,%1\";
case 5:
- return \"#\";
+ return \"stfd%U0%X0 %1,%0\";
case 6:
- return \"fmr %0,%1\";
case 7:
- return \"lfd%U1%X1 %0,%1\";
case 8:
- return \"stfd%U0%X0 %1,%0\";
+ return \"#\";
}
}"
- [(set_attr "type" "*,load,store,*,*,*,fp,fpload,fpstore")
- (set_attr "length" "8,16,16,8,12,16,*,*,*")])
+ [(set_attr "type" "*,load,store,fp,fpload,fpstore,*,*,*")
+ (set_attr "length" "8,16,16,4,4,4,8,12,16")])
(define_insn "*movdf_softfloat32"
[(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m,r,r,r")
@@ -8668,8 +8677,8 @@
(set_attr "length" "8,8,8,8,12,16")])
(define_insn "*movdf_hardfloat64"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=!r,??r,m,!r,!r,!r,f,f,m")
- (match_operand:DF 1 "input_operand" "r,m,r,G,H,F,f,m,f"))]
+ [(set (match_operand:DF 0 "nonimmediate_operand" "=!r,??r,m,f,f,m,!cl,!r,!r,!r,!r")
+ (match_operand:DF 1 "input_operand" "r,m,r,f,m,f,r,h,G,H,F"))]
"TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS
&& (gpc_reg_operand (operands[0], DFmode)
|| gpc_reg_operand (operands[1], DFmode))"
@@ -8677,30 +8686,34 @@
mr %0,%1
ld%U1%X1 %0,%1
std%U0%X0 %1,%0
- #
- #
- #
fmr %0,%1
lfd%U1%X1 %0,%1
- stfd%U0%X0 %1,%0"
- [(set_attr "type" "*,load,store,*,*,*,fp,fpload,fpstore")
- (set_attr "length" "4,4,4,8,12,16,4,4,4")])
+ stfd%U0%X0 %1,%0
+ mt%0 %1
+ mf%1 %0
+ #
+ #
+ #"
+ [(set_attr "type" "*,load,store,fp,fpload,fpstore,mtjmpr,*,*,*,*")
+ (set_attr "length" "4,4,4,4,4,4,4,4,8,12,16")])
(define_insn "*movdf_softfloat64"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m,r,r,r")
- (match_operand:DF 1 "input_operand" "r,m,r,G,H,F"))]
+ [(set (match_operand:DF 0 "nonimmediate_operand" "=r,cl,r,r,m,r,r,r")
+ (match_operand:DF 1 "input_operand" "r,r,h,m,r,G,H,F"))]
"TARGET_POWERPC64 && (TARGET_SOFT_FLOAT || !TARGET_FPRS)
&& (gpc_reg_operand (operands[0], DFmode)
|| gpc_reg_operand (operands[1], DFmode))"
"@
mr %0,%1
+ mt%0 %1
+ mf%1 %0
ld%U1%X1 %0,%1
std%U0%X0 %1,%0
#
#
#"
- [(set_attr "type" "*,load,store,*,*,*")
- (set_attr "length" "*,*,*,8,12,16")])
+ [(set_attr "type" "*,*,*,load,store,*,*,*")
+ (set_attr "length" "4,4,4,4,4,8,12,16")])
(define_expand "movtf"
[(set (match_operand:TF 0 "general_operand" "")
@@ -8731,9 +8744,9 @@
else
return \"fmr %0,%1\;fmr %L0,%L1\";
case 1:
- return \"lfd %0,%1\;lfd %L0,%L1\";
+ return \"lfd %0,%1\;lfd %L0,%Y1\";
case 2:
- return \"stfd %1,%0\;stfd %L1,%L0\";
+ return \"stfd %1,%0\;stfd %L1,%Y0\";
case 3:
case 4:
case 5:
@@ -8745,45 +8758,100 @@
(define_split
[(set (match_operand:TF 0 "gpc_reg_operand" "")
- (match_operand:TF 1 "const_double_operand" ""))]
- "DEFAULT_ABI == ABI_AIX && TARGET_HARD_FLOAT && TARGET_FPRS
- && TARGET_LONG_DOUBLE_128"
- [(set (match_dup 3) (match_dup 1))
- (set (match_dup 0)
- (float_extend:TF (match_dup 3)))]
+ (match_operand:TF 1 "easy_fp_constant" ""))]
+ "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN)
+ && TARGET_HARD_FLOAT && TARGET_FPRS && ! TARGET_POWERPC64
+ && TARGET_LONG_DOUBLE_128 && reload_completed
+ && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
+ || (GET_CODE (operands[0]) == SUBREG
+ && GET_CODE (SUBREG_REG (operands[0])) == REG
+ && REGNO (SUBREG_REG (operands[0])) <= 31))"
+ [(set (match_dup 2) (match_dup 6))
+ (set (match_dup 3) (match_dup 7))
+ (set (match_dup 4) (match_dup 8))
+ (set (match_dup 5) (match_dup 9))]
"
{
- operands[2] = operand_subword (operands[1], 0, 0, DFmode);
- operands[3] = gen_reg_rtx (DFmode);
+ long l[4];
+ REAL_VALUE_TYPE rv;
+
+ REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
+ REAL_VALUE_TO_TARGET_LONG_DOUBLE (rv, l);
+
+ operands[2] = operand_subword (operands[0], 0, 0, TFmode);
+ operands[3] = operand_subword (operands[0], 1, 0, TFmode);
+ operands[4] = operand_subword (operands[0], 2, 0, TFmode);
+ operands[5] = operand_subword (operands[0], 3, 0, TFmode);
+ operands[6] = gen_int_mode (l[0], SImode);
+ operands[7] = gen_int_mode (l[1], SImode);
+ operands[8] = gen_int_mode (l[2], SImode);
+ operands[9] = gen_int_mode (l[3], SImode);
}")
-(define_insn_and_split "extenddftf2"
+(define_split
+ [(set (match_operand:TF 0 "gpc_reg_operand" "")
+ (match_operand:TF 1 "easy_fp_constant" ""))]
+ "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN)
+ && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_POWERPC64
+ && TARGET_LONG_DOUBLE_128 && reload_completed
+ && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
+ || (GET_CODE (operands[0]) == SUBREG
+ && GET_CODE (SUBREG_REG (operands[0])) == REG
+ && REGNO (SUBREG_REG (operands[0])) <= 31))"
+ [(set (match_dup 2) (match_dup 4))
+ (set (match_dup 3) (match_dup 5))]
+ "
+{
+ long l[4];
+ REAL_VALUE_TYPE rv;
+ HOST_WIDE_INT val;
+
+ REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
+ REAL_VALUE_TO_TARGET_LONG_DOUBLE (rv, l);
+
+ operands[2] = gen_lowpart (DImode, operands[0]);
+ operands[3] = gen_highpart (DImode, operands[0]);
+#if HOST_BITS_PER_WIDE_INT >= 64
+ val = ((HOST_WIDE_INT)(unsigned long)l[0] << 32
+ | ((HOST_WIDE_INT)(unsigned long)l[1]));
+ operands[4] = gen_int_mode (val, DImode);
+
+ val = ((HOST_WIDE_INT)(unsigned long)l[2] << 32
+ | ((HOST_WIDE_INT)(unsigned long)l[3]));
+ operands[5] = gen_int_mode (val, DImode);
+#else
+ operands[4] = immed_double_const (l[1], l[0], DImode);
+ operands[5] = immed_double_const (l[3], l[2], DImode);
+#endif
+}")
+
+(define_insn "extenddftf2"
[(set (match_operand:TF 0 "gpc_reg_operand" "=f")
(float_extend:TF (match_operand:DF 1 "gpc_reg_operand" "f")))]
"DEFAULT_ABI == ABI_AIX && TARGET_HARD_FLOAT && TARGET_FPRS
&& TARGET_LONG_DOUBLE_128"
- "#"
- ""
- [(set (match_dup 2) (match_dup 3))]
- "
+ "*
{
- operands[2] = gen_rtx_REG (DFmode, REGNO (operands[0] + 1));
- operands[3] = CONST0_RTX (DFmode);
-}")
+ if (REGNO (operands[0]) == REGNO (operands[1]))
+ return \"fsub %L0,%L0,%L0\";
+ else
+ return \"fmr %0,%1\;fsub %L0,%L0,%L0\";
+}"
+ [(set_attr "type" "fp")])
-(define_insn_and_split "extendsftf2"
+(define_insn "extendsftf2"
[(set (match_operand:TF 0 "gpc_reg_operand" "=f")
(float_extend:TF (match_operand:SF 1 "gpc_reg_operand" "f")))]
"DEFAULT_ABI == ABI_AIX && TARGET_HARD_FLOAT && TARGET_FPRS
&& TARGET_LONG_DOUBLE_128"
- "#"
- ""
- [(set (match_dup 2) (match_dup 3))]
- "
+ "*
{
- operands[2] = gen_rtx_REG (SFmode, REGNO (operands[0] + 1));
- operands[3] = CONST0_RTX (SFmode);
-}")
+ if (REGNO (operands[0]) == REGNO (operands[1]))
+ return \"fsub %L0,%L0,%L0\";
+ else
+ return \"fmr %0,%1\;fsub %L0,%L0,%L0\";
+}"
+ [(set_attr "type" "fp")])
(define_insn "trunctfdf2"
[(set (match_operand:DF 0 "gpc_reg_operand" "=f")
@@ -8817,8 +8885,8 @@
"#"
"&& reload_completed"
[(set (match_dup 2)
- (float:DF (match_operand:DI 1 "gpc_reg_operand" "")))
- (set (match_operand:TF 0 "gpc_reg_operand" "")
+ (float:DF (match_dup 1)))
+ (set (match_dup 0)
(float_extend:TF (match_dup 2)))]
"")
@@ -8831,34 +8899,36 @@
"#"
"&& reload_completed"
[(set (match_dup 2)
- (float:DF (match_operand:SI 1 "gpc_reg_operand" "")))
- (set (match_operand:TF 0 "gpc_reg_operand" "")
+ (float:DF (match_dup 1)))
+ (set (match_dup 0)
(float_extend:TF (match_dup 2)))]
"")
(define_insn_and_split "fix_trunctfdi2"
[(set (match_operand:DI 0 "gpc_reg_operand" "=*f")
- (fix:DI (match_operand:TF 1 "gpc_reg_operand" "f")))]
+ (fix:DI (match_operand:TF 1 "gpc_reg_operand" "f")))
+ (clobber (match_scratch:DF 2 "=f"))]
"DEFAULT_ABI == ABI_AIX && TARGET_POWERPC64
&& TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_LONG_DOUBLE_128"
"#"
"&& reload_completed"
[(set (match_dup 2)
- (float_truncate:DF (match_operand:TF 1 "gpc_reg_operand" "")))
- (set (match_operand:DI 0 "gpc_reg_operand" "")
- (fix:SI (match_dup 2)))]
+ (float_truncate:DF (match_dup 1)))
+ (set (match_dup 0)
+ (fix:DI (match_dup 2)))]
"")
(define_insn_and_split "fix_trunctfsi2"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
- (fix:SI (match_operand:TF 1 "gpc_reg_operand" "f")))]
+ (fix:SI (match_operand:TF 1 "gpc_reg_operand" "f")))
+ (clobber (match_scratch:DF 2 "=f"))]
"DEFAULT_ABI == ABI_AIX && TARGET_HARD_FLOAT && TARGET_FPRS
&& TARGET_LONG_DOUBLE_128"
"#"
"&& reload_completed"
[(set (match_dup 2)
- (float_truncate:DF (match_operand:TF 1 "gpc_reg_operand" "")))
- (set (match_operand:SI 0 "gpc_reg_operand" "")
+ (float_truncate:DF (match_dup 1)))
+ (set (match_dup 0)
(fix:SI (match_dup 2)))]
"")
@@ -8962,7 +9032,7 @@
}
}"
[(set_attr "type" "*,load,store,fp,fpload,fpstore,*,*,*,*,*")
- (set_attr "length" "8,8,8,*,*,*,8,12,8,12,16")])
+ (set_attr "length" "8,8,8,4,4,4,8,12,8,12,16")])
(define_split
[(set (match_operand:DI 0 "gpc_reg_operand" "")
@@ -9177,7 +9247,7 @@
}
}"
[(set_attr "type" "store,store,*,load,load")
- (set_attr "length" "*,16,16,*,16")])
+ (set_attr "length" "4,16,16,4,16")])
(define_insn "*movti_string"
[(set (match_operand:TI 0 "reg_or_mem_operand" "=m,????r,????r")
@@ -10219,7 +10289,7 @@
(define_insn "load_toc_v4_PIC_2"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
- (mem:SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "r")
+ (mem:SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
(minus:SI (match_operand:SI 2 "immediate_operand" "s")
(match_operand:SI 3 "immediate_operand" "s")))))]
"TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2"
@@ -14089,7 +14159,7 @@
return \"bdz $+8\;b %l0\";
}"
[(set_attr "type" "branch")
- (set_attr "length" "*,12,16")])
+ (set_attr "length" "4,12,16")])
(define_insn "*ctrsi_internal2"
[(set (pc)
@@ -14113,7 +14183,7 @@
return \"{bdn|bdnz} $+8\;b %l0\";
}"
[(set_attr "type" "branch")
- (set_attr "length" "*,12,16")])
+ (set_attr "length" "4,12,16")])
(define_insn "*ctrdi_internal1"
[(set (pc)
@@ -14137,7 +14207,7 @@
return \"bdz $+8\;b %l0\";
}"
[(set_attr "type" "branch")
- (set_attr "length" "*,12,16")])
+ (set_attr "length" "4,12,16")])
(define_insn "*ctrdi_internal2"
[(set (pc)
@@ -14161,7 +14231,7 @@
return \"{bdn|bdnz} $+8\;b %l0\";
}"
[(set_attr "type" "branch")
- (set_attr "length" "*,12,16")])
+ (set_attr "length" "4,12,16")])
;; Similar, but we can use GE since we have a REG_NONNEG.
@@ -14187,7 +14257,7 @@
return \"bdz $+8\;b %l0\";
}"
[(set_attr "type" "branch")
- (set_attr "length" "*,12,16")])
+ (set_attr "length" "4,12,16")])
(define_insn "*ctrsi_internal4"
[(set (pc)
@@ -14211,7 +14281,7 @@
return \"{bdn|bdnz} $+8\;b %l0\";
}"
[(set_attr "type" "branch")
- (set_attr "length" "*,12,16")])
+ (set_attr "length" "4,12,16")])
(define_insn "*ctrdi_internal3"
[(set (pc)
@@ -14235,7 +14305,7 @@
return \"bdz $+8\;b %l0\";
}"
[(set_attr "type" "branch")
- (set_attr "length" "*,12,16")])
+ (set_attr "length" "4,12,16")])
(define_insn "*ctrdi_internal4"
[(set (pc)
@@ -14259,7 +14329,7 @@
return \"{bdn|bdnz} $+8\;b %l0\";
}"
[(set_attr "type" "branch")
- (set_attr "length" "*,12,16")])
+ (set_attr "length" "4,12,16")])
;; Similar but use EQ
@@ -14285,7 +14355,7 @@
return \"{bdn|bdnz} $+8\;b %l0\";
}"
[(set_attr "type" "branch")
- (set_attr "length" "*,12,16")])
+ (set_attr "length" "4,12,16")])
(define_insn "*ctrsi_internal6"
[(set (pc)
@@ -14309,7 +14379,7 @@
return \"bdz $+8\;b %l0\";
}"
[(set_attr "type" "branch")
- (set_attr "length" "*,12,16")])
+ (set_attr "length" "4,12,16")])
(define_insn "*ctrdi_internal5"
[(set (pc)
@@ -14333,7 +14403,7 @@
return \"{bdn|bdnz} $+8\;b %l0\";
}"
[(set_attr "type" "branch")
- (set_attr "length" "*,12,16")])
+ (set_attr "length" "4,12,16")])
(define_insn "*ctrdi_internal6"
[(set (pc)
@@ -14357,7 +14427,7 @@
return \"bdz $+8\;b %l0\";
}"
[(set_attr "type" "branch")
- (set_attr "length" "*,12,16")])
+ (set_attr "length" "4,12,16")])
;; Now the splitters if we could not allocate the CTR register
diff --git a/gcc/config/rs6000/spe.h b/gcc/config/rs6000/spe.h
index 2032eb74855..279806e71d6 100644
--- a/gcc/config/rs6000/spe.h
+++ b/gcc/config/rs6000/spe.h
@@ -779,15 +779,19 @@ __ev_get_s16_internal (__ev64_opaque__ a, uint32_t pos)
static inline __ev64_opaque__
__ev_set_acc_u64 (uint64_t a)
{
- __ev_mra (a);
- return (__ev64_opaque__) a;
+ __ev64_opaque__ ev32;
+ ev32 = __ev_create_u64 (a);
+ __ev_mra (ev32);
+ return ev32;
}
static inline __ev64_opaque__
__ev_set_acc_s64 (int64_t a)
{
- __ev_mra (a);
- return (__ev64_opaque__) a;
+ __ev64_opaque__ ev32;
+ ev32 = __ev_create_s64 (a);
+ __ev_mra (ev32);
+ return ev32;
}
static inline __ev64_opaque__
diff --git a/gcc/config/rs6000/spe.md b/gcc/config/rs6000/spe.md
index ab02b546ea8..c5132d73c0a 100644
--- a/gcc/config/rs6000/spe.md
+++ b/gcc/config/rs6000/spe.md
@@ -483,7 +483,7 @@
(unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
(match_operand:QI 2 "immediate_operand" "i")] 519))]
"TARGET_SPE"
- "evrlwi %0,%1"
+ "evrlwi %0,%1,%2"
[(set_attr "type" "vecsimple")
(set_attr "length" "4")])
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index e6f30597b6b..cf9e59f8ca2 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -667,8 +667,7 @@ extern int rs6000_pic_labelno;
FUNCTION instead of jumping to it. The generic approach does not support
varargs. */
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
- output_mi_thunk (FILE, THUNK_FNDECL, DELTA, FUNCTION)
+#define TARGET_ASM_OUTPUT_MI_THUNK output_mi_thunk
/* The USER_LABEL_PREFIX stuff is affected by the -fleading-underscore
flag. The LOCAL_LABEL_PREFIX variable is used by dbxelf.h. */
diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h
index d9d7492bcd6..b94f0b9d8f2 100644
--- a/gcc/config/s390/linux.h
+++ b/gcc/config/s390/linux.h
@@ -126,152 +126,6 @@ Boston, MA 02111-1307, USA. */
{ "link_arch64", LINK_ARCH64_SPEC }, \
-/* Character to start a comment. */
-
-#define ASM_COMMENT_START "#"
-
-
-/* Assembler pseudos to introduce constants of various size. */
-
-#define ASM_DOUBLE "\t.double"
-
-/* The LOCAL_LABEL_PREFIX variable is used by dbxelf.h. */
-#define LOCAL_LABEL_PREFIX "."
-
-/* Prefix for internally generated assembler labels. */
-#define LPREFIX ".L"
-
- /* internal macro to output long */
-#define _ASM_OUTPUT_LONG(FILE, VALUE) \
- fprintf (FILE, "\t.long\t0x%lX\n", VALUE);
-
-
-/* This is how to output an element of a case-vector that is absolute. */
-
-#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
- fprintf (FILE, "%s%s%d\n", integer_asm_op (UNITS_PER_WORD, TRUE), \
- LPREFIX, VALUE)
-
-/* This is how to output an element of a case-vector that is relative. */
-
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
- fprintf (FILE, "%s%s%d-%s%d\n", integer_asm_op (UNITS_PER_WORD, TRUE), \
- LPREFIX, VALUE, LPREFIX, REL)
-
-
-
-/* This is how to output an assembler line
- that says to advance the location counter
- to a multiple of 2**LOG bytes. */
-
-#undef ASM_OUTPUT_ALIGN
-#define ASM_OUTPUT_ALIGN(FILE, LOG) \
- if ((LOG)!=0) fprintf ((FILE), "\t.align\t%d\n", 1<<(LOG))
-
-/* This is how to output an assembler line
- that says to advance the location counter by SIZE bytes. */
-
-#undef ASM_OUTPUT_SKIP
-#define ASM_OUTPUT_SKIP(FILE, SIZE) \
- fprintf ((FILE), "\t.set\t.,.+%u\n", (SIZE))
-
-/* This is how to output assembler code to declare an
- uninitialized external linkage data object. */
-
-#undef ASM_OUTPUT_ALIGNED_BSS
-#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
- asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
-
-/* Output before read-only data. */
-
-#define TEXT_SECTION_ASM_OP ".text"
-
-/* Output before writable (initialized) data. */
-
-#define DATA_SECTION_ASM_OP ".data"
-
-/* Output before writable (uninitialized) data. */
-
-#define BSS_SECTION_ASM_OP ".bss"
-
-/* This is how to output a command to make the user-level label named NAME
- defined for reference from other files. */
-
-/* Globalizing directive for a label. */
-#define GLOBAL_ASM_OP ".globl "
-
-/* Output code to add DELTA to the first argument, and then jump to FUNCTION.
- Used for C++ multiple inheritance. */
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
-do { \
- if (TARGET_64BIT) \
- { \
- if (flag_pic) \
- { \
- fprintf (FILE, "\tlarl 1,0f\n"); \
- fprintf (FILE, "\tagf %d,0(1)\n", \
- aggregate_value_p (TREE_TYPE \
- (TREE_TYPE (FUNCTION))) ? 3 :2 ); \
- fprintf (FILE, "\tlarl 1,"); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "@GOTENT\n"); \
- fprintf (FILE, "\tlg 1,0(1)\n"); \
- fprintf (FILE, "\tbr 1\n"); \
- fprintf (FILE, "0:\t.long "); \
- fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA)); \
- fprintf (FILE, "\n"); \
- } \
- else \
- { \
- fprintf (FILE, "\tlarl 1,0f\n"); \
- fprintf (FILE, "\tagf %d,0(1)\n", \
- aggregate_value_p (TREE_TYPE \
- (TREE_TYPE (FUNCTION))) ? 3 :2 ); \
- fprintf (FILE, "\tjg "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "\n"); \
- fprintf (FILE, "0:\t.long "); \
- fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA)); \
- fprintf (FILE, "\n"); \
- } \
- } \
- else \
- { \
- if (flag_pic) \
- { \
- fprintf (FILE, "\tbras 1,0f\n"); \
- fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_-.\n"); \
- fprintf (FILE, "\t.long "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "@GOT\n"); \
- fprintf (FILE, "\t.long "); \
- fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA)); \
- fprintf (FILE, "\n"); \
- fprintf (FILE, "0:\tal %d,8(1)\n", \
- aggregate_value_p (TREE_TYPE \
- (TREE_TYPE (FUNCTION))) ? 3 : 2 ); \
- fprintf (FILE, "\tl 0,4(1)\n"); \
- fprintf (FILE, "\tal 1,0(1)\n"); \
- fprintf (FILE, "\talr 1,0\n"); \
- fprintf (FILE, "\tl 1,0(1)\n"); \
- fprintf (FILE, "\tbr 1\n"); \
- } else { \
- fprintf (FILE, "\tbras 1,0f\n"); \
- fprintf (FILE, "\t.long "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "-.\n"); \
- fprintf (FILE, "\t.long "); \
- fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA)); \
- fprintf (FILE, "\n"); \
- fprintf (FILE, "0:\tal %d,4(1)\n", \
- aggregate_value_p (TREE_TYPE \
- (TREE_TYPE (FUNCTION))) ? 3 : 2 ); \
- fprintf (FILE, "\tal 1,0(1)\n"); \
- fprintf (FILE, "\tbr 1\n"); \
- } \
- } \
-} while (0)
-
/* Do code reading to identify a signal frame, and set the frame
state data appropriately. See unwind-dw2.c for the structs. */
diff --git a/gcc/config/s390/s390-protos.h b/gcc/config/s390/s390-protos.h
index aaf25d0330e..09822bcabc3 100644
--- a/gcc/config/s390/s390-protos.h
+++ b/gcc/config/s390/s390-protos.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for IBM S/390.
- Copyright (C) 2000 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2002 Free Software Foundation, Inc.
Contributed by Hartmut Penner (hpenner@de.ibm.com)
This file is part of GNU CC.
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 67edfdf6e8b..b0e63d26ed4 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -54,6 +54,7 @@ static int s390_adjust_priority PARAMS ((rtx, int));
static void s390_select_rtx_section PARAMS ((enum machine_mode, rtx,
unsigned HOST_WIDE_INT));
static void s390_encode_section_info PARAMS ((tree, int));
+static void s390_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
#undef TARGET_ASM_ALIGNED_HI_OP
#define TARGET_ASM_ALIGNED_HI_OP "\t.word\t"
@@ -80,6 +81,9 @@ static void s390_encode_section_info PARAMS ((tree, int));
#undef TARGET_ENCODE_SECTION_INFO
#define TARGET_ENCODE_SECTION_INFO s390_encode_section_info
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK s390_output_mi_thunk
+
struct gcc_target targetm = TARGET_INITIALIZER;
extern int reload_completed;
@@ -130,11 +134,14 @@ static int general_s_operand PARAMS ((rtx, enum machine_mode, int));
static int s390_decompose_address PARAMS ((rtx, struct s390_address *));
static int reg_used_in_mem_p PARAMS ((int, rtx));
static int addr_generation_dependency_p PARAMS ((rtx, rtx));
-static void s390_split_branches PARAMS ((void));
+static int s390_split_branches PARAMS ((rtx, bool *));
static void find_constant_pool_ref PARAMS ((rtx, rtx *));
static void replace_constant_pool_ref PARAMS ((rtx *, rtx, rtx));
-static void s390_chunkify_pool PARAMS ((void));
-static void s390_optimize_prolog PARAMS ((void));
+static int find_base_register_in_addr PARAMS ((struct s390_address *));
+static bool find_base_register_ref PARAMS ((rtx));
+static void replace_base_register_ref PARAMS ((rtx *, rtx));
+static void s390_optimize_prolog PARAMS ((int));
+static bool s390_fixup_clobbered_return_reg PARAMS ((rtx));
static int find_unused_clobbered_reg PARAMS ((void));
static void s390_frame_info PARAMS ((struct s390_frame *));
static rtx save_fpr PARAMS ((rtx, int, int));
@@ -2569,9 +2576,14 @@ s390_output_symbolic_const (file, x)
switch (XINT (x, 1))
{
case 100:
+ case 104:
s390_output_symbolic_const (file, XVECEXP (x, 0, 0));
fprintf (file, "-.LT%d", current_function_funcdef_no);
break;
+ case 105:
+ fprintf (file, ".LT%d-", current_function_funcdef_no);
+ s390_output_symbolic_const (file, XVECEXP (x, 0, 0));
+ break;
case 110:
s390_output_symbolic_const (file, XVECEXP (x, 0, 0));
fprintf (file, "@GOT12");
@@ -2985,12 +2997,19 @@ s390_adjust_priority (insn, priority)
}
-/* Split all branches that exceed the maximum distance. */
+/* Split all branches that exceed the maximum distance.
+ Returns true if this created a new literal pool entry.
-static void
-s390_split_branches ()
+ Code generated by this routine is allowed to use
+ TEMP_REG as temporary scratch register. If this is
+ done, TEMP_USED is set to true. */
+
+static int
+s390_split_branches (temp_reg, temp_used)
+ rtx temp_reg;
+ bool *temp_used;
{
- rtx temp_reg = gen_rtx_REG (Pmode, RETURN_REGNUM);
+ int new_literal = 0;
rtx insn, pat, tmp, target;
rtx *label;
@@ -3030,7 +3049,7 @@ s390_split_branches ()
if (get_attr_length (insn) <= (TARGET_64BIT ? 6 : 4))
continue;
- regs_ever_live[RETURN_REGNUM] = 1;
+ *temp_used = 1;
if (TARGET_64BIT)
{
@@ -3041,6 +3060,7 @@ s390_split_branches ()
}
else if (!flag_pic)
{
+ new_literal = 1;
tmp = force_const_mem (Pmode, *label);
tmp = emit_insn_before (gen_rtx_SET (Pmode, temp_reg, tmp), insn);
INSN_ADDRESSES_NEW (tmp, -1);
@@ -3049,7 +3069,8 @@ s390_split_branches ()
}
else
{
- tmp = gen_rtx_UNSPEC (SImode, gen_rtvec (1, *label), 100);
+ new_literal = 1;
+ tmp = gen_rtx_UNSPEC (SImode, gen_rtvec (1, *label), 104);
tmp = gen_rtx_CONST (SImode, tmp);
tmp = force_const_mem (SImode, tmp);
tmp = emit_insn_before (gen_rtx_SET (Pmode, temp_reg, tmp), insn);
@@ -3062,6 +3083,8 @@ s390_split_branches ()
if (!validate_change (insn, label, target, 0))
abort ();
}
+
+ return new_literal;
}
@@ -3179,6 +3202,153 @@ replace_constant_pool_ref (x, ref, addr)
}
}
+/* Check whether ADDR is an address that uses the base register,
+ without actually constituting a literal pool access. (This happens
+ in 31-bit PIC mode, where the base register is used as anchor for
+ relative addressing of local symbols.)
+
+ Returns 1 if the base register occupies the base slot,
+ returns 2 if the base register occupies the index slot,
+ returns 0 if the address is not of this form. */
+
+static int
+find_base_register_in_addr (addr)
+ struct s390_address *addr;
+{
+ /* If DISP is complex, we might have a literal pool reference. */
+ if (addr->disp && GET_CODE (addr->disp) != CONST_INT)
+ return 0;
+
+ if (addr->base && REG_P (addr->base) && REGNO (addr->base) == BASE_REGISTER)
+ return 1;
+
+ if (addr->indx && REG_P (addr->indx) && REGNO (addr->indx) == BASE_REGISTER)
+ return 2;
+
+ return 0;
+}
+
+/* Return true if X contains an address that uses the base register,
+ without actually constituting a literal pool access. */
+
+static bool
+find_base_register_ref (x)
+ rtx x;
+{
+ bool retv = FALSE;
+ struct s390_address addr;
+ int i, j;
+ const char *fmt;
+
+ /* Addresses can only occur inside a MEM ... */
+ if (GET_CODE (x) == MEM)
+ {
+ if (s390_decompose_address (XEXP (x, 0), &addr)
+ && find_base_register_in_addr (&addr))
+ return TRUE;
+ }
+
+ /* ... or a load-address type pattern. */
+ if (GET_CODE (x) == SET && GET_CODE (SET_DEST (x)) == REG)
+ {
+ if (s390_decompose_address (SET_SRC (x), &addr)
+ && find_base_register_in_addr (&addr))
+ return TRUE;
+ }
+
+ fmt = GET_RTX_FORMAT (GET_CODE (x));
+ for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--)
+ {
+ if (fmt[i] == 'e')
+ {
+ retv |= find_base_register_ref (XEXP (x, i));
+ }
+ else if (fmt[i] == 'E')
+ {
+ for (j = 0; j < XVECLEN (x, i); j++)
+ retv |= find_base_register_ref (XVECEXP (x, i, j));
+ }
+ }
+
+ return retv;
+}
+
+/* If X contains an address that uses the base register,
+ without actually constituting a literal pool access,
+ replace the base register with REPL in all such cases.
+
+ Handles both MEMs and load address patterns. */
+
+static void
+replace_base_register_ref (x, repl)
+ rtx *x;
+ rtx repl;
+{
+ struct s390_address addr;
+ rtx new_addr;
+ int i, j, pos;
+ const char *fmt;
+
+ /* Addresses can only occur inside a MEM ... */
+ if (GET_CODE (*x) == MEM)
+ {
+ if (s390_decompose_address (XEXP (*x, 0), &addr)
+ && (pos = find_base_register_in_addr (&addr)))
+ {
+ if (pos == 1)
+ addr.base = repl;
+ else
+ addr.indx = repl;
+
+ new_addr = addr.base;
+ if (addr.indx)
+ new_addr = gen_rtx_PLUS (Pmode, new_addr, addr.indx);
+ if (addr.disp)
+ new_addr = gen_rtx_PLUS (Pmode, new_addr, addr.disp);
+
+ *x = replace_equiv_address (*x, new_addr);
+ return;
+ }
+ }
+
+ /* ... or a load-address type pattern. */
+ if (GET_CODE (*x) == SET && GET_CODE (SET_DEST (*x)) == REG)
+ {
+ if (s390_decompose_address (SET_SRC (*x), &addr)
+ && (pos = find_base_register_in_addr (&addr)))
+ {
+ if (pos == 1)
+ addr.base = repl;
+ else
+ addr.indx = repl;
+
+ new_addr = addr.base;
+ if (addr.indx)
+ new_addr = gen_rtx_PLUS (Pmode, new_addr, addr.indx);
+ if (addr.disp)
+ new_addr = gen_rtx_PLUS (Pmode, new_addr, addr.disp);
+
+ SET_SRC (*x) = new_addr;
+ return;
+ }
+ }
+
+ fmt = GET_RTX_FORMAT (GET_CODE (*x));
+ for (i = GET_RTX_LENGTH (GET_CODE (*x)) - 1; i >= 0; i--)
+ {
+ if (fmt[i] == 'e')
+ {
+ replace_base_register_ref (&XEXP (*x, i), repl);
+ }
+ else if (fmt[i] == 'E')
+ {
+ for (j = 0; j < XVECLEN (*x, i); j++)
+ replace_base_register_ref (&XVECEXP (*x, i, j), repl);
+ }
+ }
+}
+
+
/* We keep a list of constants we which we have to add to internal
constant tables in the middle of large functions. */
@@ -3210,17 +3380,26 @@ struct constant_pool
{
struct constant_pool *next;
rtx first_insn;
- rtx last_insn;
+ rtx pool_insn;
+ bitmap insns;
struct constant *constants[NR_C_MODES];
rtx label;
int size;
+ bool anchor;
};
+static struct constant_pool * s390_chunkify_start PARAMS ((rtx, bool *));
+static void s390_chunkify_finish PARAMS ((struct constant_pool *, rtx));
+static void s390_chunkify_cancel PARAMS ((struct constant_pool *));
+
static struct constant_pool *s390_start_pool PARAMS ((struct constant_pool **, rtx));
static void s390_end_pool PARAMS ((struct constant_pool *, rtx));
+static void s390_add_pool_insn PARAMS ((struct constant_pool *, rtx));
static struct constant_pool *s390_find_pool PARAMS ((struct constant_pool *, rtx));
-static rtx s390_add_pool PARAMS ((struct constant_pool *, rtx, enum machine_mode));
+static void s390_add_constant PARAMS ((struct constant_pool *, rtx, enum machine_mode));
+static rtx s390_find_constant PARAMS ((struct constant_pool *, rtx, enum machine_mode));
+static void s390_add_anchor PARAMS ((struct constant_pool *));
static rtx s390_dump_pool PARAMS ((struct constant_pool *));
static void s390_free_pool PARAMS ((struct constant_pool *));
@@ -3242,9 +3421,11 @@ s390_start_pool (pool_list, insn)
pool->label = gen_label_rtx ();
pool->first_insn = insn;
- pool->last_insn = NULL_RTX;
+ pool->pool_insn = NULL_RTX;
+ pool->insns = BITMAP_XMALLOC ();
pool->size = 0;
-
+ pool->anchor = FALSE;
+
for (prev = pool_list; *prev; prev = &(*prev)->next)
;
*prev = pool;
@@ -3252,14 +3433,31 @@ s390_start_pool (pool_list, insn)
return pool;
}
-/* End range of instructions covered by POOL at INSN. */
+/* End range of instructions covered by POOL at INSN and emit
+ placeholder insn representing the pool. */
static void
s390_end_pool (pool, insn)
struct constant_pool *pool;
rtx insn;
{
- pool->last_insn = insn;
+ rtx pool_size = GEN_INT (pool->size + 8 /* alignment slop */);
+
+ if (!insn)
+ insn = get_last_insn ();
+
+ pool->pool_insn = emit_insn_after (gen_pool (pool_size), insn);
+ INSN_ADDRESSES_NEW (pool->pool_insn, -1);
+}
+
+/* Add INSN to the list of insns covered by POOL. */
+
+static void
+s390_add_pool_insn (pool, insn)
+ struct constant_pool *pool;
+ rtx insn;
+{
+ bitmap_set_bit (pool->insns, INSN_UID (insn));
}
/* Return pool out of POOL_LIST that covers INSN. */
@@ -3269,33 +3467,24 @@ s390_find_pool (pool_list, insn)
struct constant_pool *pool_list;
rtx insn;
{
- int addr = INSN_ADDRESSES (INSN_UID (insn));
struct constant_pool *pool;
- if (addr == -1)
- return NULL;
-
for (pool = pool_list; pool; pool = pool->next)
- if (INSN_ADDRESSES (INSN_UID (pool->first_insn)) <= addr
- && (pool->last_insn == NULL_RTX
- || INSN_ADDRESSES (INSN_UID (pool->last_insn)) > addr))
+ if (bitmap_bit_p (pool->insns, INSN_UID (insn)))
break;
return pool;
}
-/* Add constant VAL of mode MODE to the constant pool POOL.
- Return an RTX describing the distance from the start of
- the pool to the location of the new constant. */
+/* Add constant VAL of mode MODE to the constant pool POOL. */
-static rtx
-s390_add_pool (pool, val, mode)
+static void
+s390_add_constant (pool, val, mode)
struct constant_pool *pool;
rtx val;
enum machine_mode mode;
{
struct constant *c;
- rtx offset;
int i;
for (i = 0; i < NR_C_MODES; i++)
@@ -3317,13 +3506,54 @@ s390_add_pool (pool, val, mode)
pool->constants[i] = c;
pool->size += GET_MODE_SIZE (mode);
}
+}
- offset = gen_rtx_MINUS (Pmode, gen_rtx_LABEL_REF (Pmode, c->label),
- gen_rtx_LABEL_REF (Pmode, pool->label));
+/* Find constant VAL of mode MODE in the constant pool POOL.
+ Return an RTX describing the distance from the start of
+ the pool to the location of the new constant. */
+
+static rtx
+s390_find_constant (pool, val, mode)
+ struct constant_pool *pool;
+ rtx val;
+ enum machine_mode mode;
+{
+ struct constant *c;
+ rtx offset;
+ int i;
+
+ for (i = 0; i < NR_C_MODES; i++)
+ if (constant_modes[i] == mode)
+ break;
+ if (i == NR_C_MODES)
+ abort ();
+
+ for (c = pool->constants[i]; c != NULL; c = c->next)
+ if (rtx_equal_p (val, c->value))
+ break;
+
+ if (c == NULL)
+ abort ();
+
+ offset = gen_rtx_MINUS (Pmode, gen_rtx_LABEL_REF (Pmode, c->label),
+ gen_rtx_LABEL_REF (Pmode, pool->label));
offset = gen_rtx_CONST (Pmode, offset);
return offset;
}
+/* Set 'anchor' flag in POOL. */
+
+static void
+s390_add_anchor (pool)
+ struct constant_pool *pool;
+{
+ if (!pool->anchor)
+ {
+ pool->anchor = TRUE;
+ pool->size += 4;
+ }
+}
+
/* Dump out the constants in POOL. */
static rtx
@@ -3334,31 +3564,47 @@ s390_dump_pool (pool)
rtx insn;
int i;
- /* Select location to put literal pool. */
- if (TARGET_64BIT)
- insn = get_last_insn ();
- else
- insn = pool->last_insn? pool->last_insn : get_last_insn ();
-
/* Pool start insn switches to proper section
and guarantees necessary alignment. */
if (TARGET_64BIT)
- insn = emit_insn_after (gen_pool_start_64 (), insn);
+ insn = emit_insn_after (gen_pool_start_64 (), pool->pool_insn);
else
- insn = emit_insn_after (gen_pool_start_31 (), insn);
+ insn = emit_insn_after (gen_pool_start_31 (), pool->pool_insn);
INSN_ADDRESSES_NEW (insn, -1);
insn = emit_label_after (pool->label, insn);
INSN_ADDRESSES_NEW (insn, -1);
+ /* Emit anchor if we need one. */
+ if (pool->anchor)
+ {
+ rtx anchor = gen_rtx_LABEL_REF (VOIDmode, pool->label);
+ anchor = gen_rtx_UNSPEC (VOIDmode, gen_rtvec (1, anchor), 105);
+ anchor = gen_rtx_CONST (VOIDmode, anchor);
+ insn = emit_insn_after (gen_consttable_si (anchor), insn);
+ INSN_ADDRESSES_NEW (insn, -1);
+ }
+
/* Dump constants in descending alignment requirement order,
ensuring proper alignment for every constant. */
for (i = 0; i < NR_C_MODES; i++)
for (c = pool->constants[i]; c; c = c->next)
{
+ /* Convert 104 unspecs to pool-relative references. */
+ rtx value = c->value;
+ if (GET_CODE (value) == CONST
+ && GET_CODE (XEXP (value, 0)) == UNSPEC
+ && XINT (XEXP (value, 0), 1) == 104
+ && XVECLEN (XEXP (value, 0), 0) == 1)
+ {
+ value = gen_rtx_MINUS (Pmode, XVECEXP (XEXP (value, 0), 0, 0),
+ gen_rtx_LABEL_REF (VOIDmode, pool->label));
+ value = gen_rtx_CONST (VOIDmode, value);
+ }
+
insn = emit_label_after (c->label, insn);
INSN_ADDRESSES_NEW (insn, -1);
- insn = emit_insn_after (gen_consttable[i] (c->value), insn);
+ insn = emit_insn_after (gen_consttable[i] (value), insn);
INSN_ADDRESSES_NEW (insn, -1);
}
@@ -3373,6 +3619,9 @@ s390_dump_pool (pool)
insn = emit_barrier_after (insn);
INSN_ADDRESSES_NEW (insn, -1);
+ /* Remove placeholder insn. */
+ remove_insn (pool->pool_insn);
+
return insn;
}
@@ -3395,65 +3644,86 @@ s390_free_pool (pool)
}
}
+ BITMAP_XFREE (pool->insns);
free (pool);
}
-/* Used in s390.md for branch length calculation. */
-int s390_pool_overflow = 0;
-/* Chunkify the literal pool if required. */
+/* Chunkify the literal pool if required.
+
+ Code generated by this routine is allowed to use
+ TEMP_REG as temporary scratch register. If this is
+ done, TEMP_USED is set to true. */
#define S390_POOL_CHUNK_MIN 0xc00
#define S390_POOL_CHUNK_MAX 0xe00
-static void
-s390_chunkify_pool ()
+static struct constant_pool *
+s390_chunkify_start (temp_reg, temp_used)
+ rtx temp_reg;
+ bool *temp_used;
{
- rtx base_reg = gen_rtx_REG (Pmode,
- TARGET_64BIT? BASE_REGISTER : RETURN_REGNUM);
+ rtx base_reg = gen_rtx_REG (Pmode, BASE_REGISTER);
struct constant_pool *curr_pool = NULL, *pool_list = NULL;
int extra_size = 0;
bitmap far_labels;
rtx insn;
+ rtx (*gen_reload_base) PARAMS ((rtx, rtx)) =
+ TARGET_64BIT? gen_reload_base_64 : gen_reload_base_31;
+
+
/* Do we need to chunkify the literal pool? */
if (get_pool_size () < S390_POOL_CHUNK_MAX)
- return;
-
- if (!TARGET_64BIT)
- regs_ever_live[RETURN_REGNUM] = 1;
+ return NULL;
/* We need correct insn addresses. */
shorten_branches (get_insns ());
-
/* Scan all insns and move literals to pool chunks.
- Replace all occurrances of literal pool references
- by explicit references to pool chunk entries. */
+ Also, emit anchor reload insns before every insn that uses
+ the literal pool base register as anchor pointer. */
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
{
- if (GET_CODE (insn) == INSN)
+ if (GET_CODE (insn) == INSN || GET_CODE (insn) == CALL_INSN)
{
- rtx addr, pool_ref = NULL_RTX;
+ rtx pool_ref = NULL_RTX;
find_constant_pool_ref (PATTERN (insn), &pool_ref);
if (pool_ref)
{
if (!curr_pool)
curr_pool = s390_start_pool (&pool_list, insn);
- addr = s390_add_pool (curr_pool, get_pool_constant (pool_ref),
- get_pool_mode (pool_ref));
+ s390_add_constant (curr_pool, get_pool_constant (pool_ref),
+ get_pool_mode (pool_ref));
+ s390_add_pool_insn (curr_pool, insn);
+ }
+
+ else if (!TARGET_64BIT && flag_pic
+ && find_base_register_ref (PATTERN (insn)))
+ {
+ rtx new = gen_reload_anchor (temp_reg, base_reg);
+ new = emit_insn_before (new, insn);
+ INSN_ADDRESSES_NEW (new, INSN_ADDRESSES (INSN_UID (insn)));
+ extra_size += 8;
+ *temp_used = 1;
+
+ if (!curr_pool)
+ curr_pool = s390_start_pool (&pool_list, new);
- addr = gen_rtx_PLUS (Pmode, base_reg, addr);
- replace_constant_pool_ref (&PATTERN (insn), pool_ref, addr);
- INSN_CODE (insn) = -1;
+ s390_add_anchor (curr_pool);
+ s390_add_pool_insn (curr_pool, insn);
}
}
+ if (GET_CODE (insn) == JUMP_INSN || GET_CODE (insn) == CODE_LABEL)
+ if (curr_pool)
+ s390_add_pool_insn (curr_pool, insn);
+
if (!curr_pool
|| INSN_ADDRESSES_SIZE () <= (size_t) INSN_UID (insn)
|| INSN_ADDRESSES (INSN_UID (insn)) == -1)
@@ -3464,7 +3734,7 @@ s390_chunkify_pool ()
if (curr_pool->size < S390_POOL_CHUNK_MAX)
continue;
- s390_end_pool (curr_pool, insn);
+ s390_end_pool (curr_pool, NULL_RTX);
curr_pool = NULL;
}
else
@@ -3477,11 +3747,8 @@ s390_chunkify_pool ()
Those will have an effect on code size, which we need to
consider here. This calculation makes rather pessimistic
worst-case assumptions. */
- if (GET_CODE (insn) == CODE_LABEL
- || GET_CODE (insn) == JUMP_INSN)
+ if (GET_CODE (insn) == CODE_LABEL)
extra_size += 6;
- else if (GET_CODE (insn) == CALL_INSN)
- extra_size += 4;
if (chunk_size < S390_POOL_CHUNK_MIN
&& curr_pool->size < S390_POOL_CHUNK_MIN)
@@ -3497,12 +3764,22 @@ s390_chunkify_pool ()
/* ... so if we don't find one in time, create one. */
else if ((chunk_size > S390_POOL_CHUNK_MAX
- || curr_pool->size > S390_POOL_CHUNK_MAX)
- && (GET_CODE (insn) == INSN || GET_CODE (insn) == CALL_INSN))
+ || curr_pool->size > S390_POOL_CHUNK_MAX))
{
- int addr = INSN_ADDRESSES (INSN_UID (insn));
rtx label, jump, barrier;
+ /* We can insert the barrier only after a 'real' insn. */
+ if (GET_CODE (insn) != INSN && GET_CODE (insn) != CALL_INSN)
+ continue;
+ if (get_attr_length (insn) == 0)
+ continue;
+
+ /* Don't separate insns created by s390_split_branches. */
+ if (GET_CODE (insn) == INSN
+ && GET_CODE (PATTERN (insn)) == SET
+ && rtx_equal_p (SET_DEST (PATTERN (insn)), temp_reg))
+ continue;
+
label = gen_label_rtx ();
jump = emit_jump_insn_after (gen_jump (label), insn);
barrier = emit_barrier_after (jump);
@@ -3510,8 +3787,8 @@ s390_chunkify_pool ()
JUMP_LABEL (jump) = label;
LABEL_NUSES (label) = 1;
- INSN_ADDRESSES_NEW (jump, addr+1);
- INSN_ADDRESSES_NEW (barrier, addr+1);
+ INSN_ADDRESSES_NEW (jump, -1);
+ INSN_ADDRESSES_NEW (barrier, -1);
INSN_ADDRESSES_NEW (insn, -1);
s390_end_pool (curr_pool, barrier);
@@ -3521,10 +3798,8 @@ s390_chunkify_pool ()
}
}
- /* Dump out all literal pools. */
-
- for (curr_pool = pool_list; curr_pool; curr_pool = curr_pool->next)
- s390_dump_pool (curr_pool);
+ if (curr_pool)
+ s390_end_pool (curr_pool, NULL_RTX);
/* Find all labels that are branched into
@@ -3563,20 +3838,7 @@ s390_chunkify_pool ()
if (GET_CODE (pat) == SET)
{
- rtx label = 0;
-
- if (GET_CODE (SET_SRC (pat)) == LABEL_REF)
- {
- label = XEXP (SET_SRC (pat), 0);
- }
- else if (GET_CODE (SET_SRC (pat)) == IF_THEN_ELSE)
- {
- if (GET_CODE (XEXP (SET_SRC (pat), 1)) == LABEL_REF)
- label = XEXP (XEXP (SET_SRC (pat), 1), 0);
- else if (GET_CODE (XEXP (SET_SRC (pat), 2)) == LABEL_REF)
- label = XEXP (XEXP (SET_SRC (pat), 2), 0);
- }
-
+ rtx label = JUMP_LABEL (insn);
if (label)
{
if (s390_find_pool (pool_list, label)
@@ -3617,19 +3879,11 @@ s390_chunkify_pool ()
/* Insert base register reload insns before every pool. */
for (curr_pool = pool_list; curr_pool; curr_pool = curr_pool->next)
- if (TARGET_64BIT)
- {
- rtx pool_ref = gen_rtx_LABEL_REF (Pmode, curr_pool->label);
- rtx new_insn = gen_rtx_SET (Pmode, base_reg, pool_ref);
- rtx insn = curr_pool->first_insn;
- INSN_ADDRESSES_NEW (emit_insn_before (new_insn, insn), -1);
- }
- else
- {
- rtx new_insn = gen_reload_base (base_reg, curr_pool->label);
- rtx insn = curr_pool->first_insn;
- INSN_ADDRESSES_NEW (emit_insn_before (new_insn, insn), -1);
- }
+ {
+ rtx new_insn = gen_reload_base (base_reg, curr_pool->label);
+ rtx insn = curr_pool->first_insn;
+ INSN_ADDRESSES_NEW (emit_insn_before (new_insn, insn), -1);
+ }
/* Insert base register reload insns at every far label. */
@@ -3640,60 +3894,137 @@ s390_chunkify_pool ()
struct constant_pool *pool = s390_find_pool (pool_list, insn);
if (pool)
{
- if (TARGET_64BIT)
- {
- rtx pool_ref = gen_rtx_LABEL_REF (Pmode, pool->label);
- rtx new_insn = gen_rtx_SET (Pmode, base_reg, pool_ref);
- INSN_ADDRESSES_NEW (emit_insn_after (new_insn, insn), -1);
- }
- else
- {
- rtx new_insn = gen_reload_base (base_reg, pool->label);
- INSN_ADDRESSES_NEW (emit_insn_after (new_insn, insn), -1);
- }
+ rtx new_insn = gen_reload_base (base_reg, pool->label);
+ INSN_ADDRESSES_NEW (emit_insn_after (new_insn, insn), -1);
}
}
- /* Insert base register reload insns after every call if necessary. */
-
- if (REGNO (base_reg) == RETURN_REGNUM)
- for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
- if (GET_CODE (insn) == CALL_INSN)
- {
- struct constant_pool *pool = s390_find_pool (pool_list, insn);
- if (pool)
- {
- rtx new_insn = gen_reload_base2 (base_reg, pool->label);
- INSN_ADDRESSES_NEW (emit_insn_after (new_insn, insn), -1);
- }
- }
+
+ BITMAP_XFREE (far_labels);
/* Recompute insn addresses. */
- s390_pool_overflow = 1;
init_insn_lengths ();
shorten_branches (get_insns ());
- s390_pool_overflow = 0;
- /* Insert base register reload insns after far branches. */
+ return pool_list;
+}
+
+/* POOL_LIST is a chunk list as prepared by s390_chunkify_start.
+ After we have decided to use this list, finish implementing
+ all changes to the current function as required.
- if (!TARGET_64BIT)
- for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
- if (GET_CODE (insn) == JUMP_INSN
- && GET_CODE (PATTERN (insn)) == SET
- && get_attr_length (insn) >= 12)
- {
- struct constant_pool *pool = s390_find_pool (pool_list, insn);
- if (pool)
+ Code generated by this routine is allowed to use
+ TEMP_REG as temporary scratch register. */
+
+static void
+s390_chunkify_finish (pool_list, temp_reg)
+ struct constant_pool *pool_list;
+ rtx temp_reg;
+{
+ rtx base_reg = gen_rtx_REG (Pmode, BASE_REGISTER);
+ struct constant_pool *curr_pool = NULL;
+ rtx insn;
+
+
+ /* Replace all literal pool references. */
+
+ for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
+ {
+ curr_pool = s390_find_pool (pool_list, insn);
+ if (!curr_pool)
+ continue;
+
+ if (GET_CODE (insn) == INSN || GET_CODE (insn) == CALL_INSN)
+ {
+ rtx addr, pool_ref = NULL_RTX;
+ find_constant_pool_ref (PATTERN (insn), &pool_ref);
+ if (pool_ref)
+ {
+ addr = s390_find_constant (curr_pool, get_pool_constant (pool_ref),
+ get_pool_mode (pool_ref));
+ addr = gen_rtx_PLUS (Pmode, base_reg, addr);
+ replace_constant_pool_ref (&PATTERN (insn), pool_ref, addr);
+ INSN_CODE (insn) = -1;
+ }
+
+ else if (!TARGET_64BIT && flag_pic
+ && find_base_register_ref (PATTERN (insn)))
{
- rtx new_insn = gen_reload_base (base_reg, pool->label);
- INSN_ADDRESSES_NEW (emit_insn_after (new_insn, insn), -1);
+ replace_base_register_ref (&PATTERN (insn), temp_reg);
}
+ }
+ }
+
+ /* Dump out all literal pools. */
+
+ for (curr_pool = pool_list; curr_pool; curr_pool = curr_pool->next)
+ s390_dump_pool (curr_pool);
+
+ /* Free pool list. */
+
+ while (pool_list)
+ {
+ struct constant_pool *next = pool_list->next;
+ s390_free_pool (pool_list);
+ pool_list = next;
+ }
+}
+
+/* POOL_LIST is a chunk list as prepared by s390_chunkify_start.
+ We have decided we cannot use this list, so revert all changes
+ to the current function that were done by s390_chunkify_start. */
+
+static void
+s390_chunkify_cancel (pool_list)
+ struct constant_pool *pool_list;
+{
+ struct constant_pool *curr_pool = NULL;
+ rtx insn;
+
+ /* Remove all pool placeholder insns. */
+
+ for (curr_pool = pool_list; curr_pool; curr_pool = curr_pool->next)
+ {
+ /* Did we insert an extra barrier? Remove it. */
+ rtx barrier = PREV_INSN (curr_pool->pool_insn);
+ rtx jump = barrier? PREV_INSN (barrier) : NULL_RTX;
+ rtx label = NEXT_INSN (curr_pool->pool_insn);
+
+ if (jump && GET_CODE (jump) == JUMP_INSN
+ && barrier && GET_CODE (barrier) == BARRIER
+ && label && GET_CODE (label) == CODE_LABEL
+ && GET_CODE (PATTERN (jump)) == SET
+ && SET_DEST (PATTERN (jump)) == pc_rtx
+ && GET_CODE (SET_SRC (PATTERN (jump))) == LABEL_REF
+ && XEXP (SET_SRC (PATTERN (jump)), 0) == label)
+ {
+ remove_insn (jump);
+ remove_insn (barrier);
+ remove_insn (label);
}
+ remove_insn (curr_pool->pool_insn);
+ }
+
+ /* Remove all base/anchor register reload insns. */
- /* Free all memory. */
+ for (insn = get_insns (); insn; )
+ {
+ rtx next_insn = NEXT_INSN (insn);
+
+ if (GET_CODE (insn) == INSN
+ && GET_CODE (PATTERN (insn)) == SET
+ && GET_CODE (SET_SRC (PATTERN (insn))) == UNSPEC
+ && (XINT (SET_SRC (PATTERN (insn)), 1) == 210
+ || XINT (SET_SRC (PATTERN (insn)), 1) == 211))
+ remove_insn (insn);
+
+ insn = next_insn;
+ }
+
+ /* Free pool list. */
while (pool_list)
{
@@ -3701,8 +4032,6 @@ s390_chunkify_pool ()
s390_free_pool (pool_list);
pool_list = next;
}
-
- BITMAP_XFREE (far_labels);
}
@@ -3745,19 +4074,51 @@ s390_output_constant_pool (file)
else
fprintf (file, ".LTN%d:\n", current_function_funcdef_no);
}
+
+ /* If no pool required, at least output the anchor label. */
+ else if (!TARGET_64BIT && flag_pic)
+ fprintf (file, ".LT%d:\n", current_function_funcdef_no);
}
/* Rework the prolog/epilog to avoid saving/restoring
- registers unnecessarily. */
+ registers unnecessarily. If TEMP_REGNO is nonnegative,
+ it specifies the number of a caller-saved register used
+ as temporary scratch register by code emitted during
+ machine dependent reorg. */
static void
-s390_optimize_prolog ()
+s390_optimize_prolog (temp_regno)
+ int temp_regno;
{
int save_first, save_last, restore_first, restore_last;
int i, j;
rtx insn, new_insn, next_insn;
+ struct s390_frame frame;
+ s390_frame_info (&frame);
+
+ /* Recompute regs_ever_live data for special registers. */
+ regs_ever_live[BASE_REGISTER] = 0;
+ regs_ever_live[RETURN_REGNUM] = 0;
+ regs_ever_live[STACK_POINTER_REGNUM] = frame.frame_size > 0;
+
+ /* If there is (possibly) any pool entry, we need to
+ load the base register.
+ ??? FIXME: this should be more precise. */
+ if (get_pool_size ())
+ regs_ever_live[BASE_REGISTER] = 1;
+
+ /* In non-leaf functions, the prolog/epilog code relies
+ on RETURN_REGNUM being saved in any case. */
+ if (!current_function_is_leaf)
+ regs_ever_live[RETURN_REGNUM] = 1;
+
+ /* We need to save/restore the temporary register. */
+ if (temp_regno >= 0)
+ regs_ever_live[temp_regno] = 1;
+
+
/* Find first and last gpr to be saved. */
for (i = 6; i < 16; i++)
@@ -3865,34 +4226,146 @@ s390_optimize_prolog ()
}
}
+/* Check whether any insn in the function makes use of the original
+ value of RETURN_REG (e.g. for __builtin_return_address).
+ If so, insert an insn reloading that value.
+
+ Return true if any such insn was found. */
+
+static bool
+s390_fixup_clobbered_return_reg (return_reg)
+ rtx return_reg;
+{
+ bool replacement_done = 0;
+ rtx insn;
+
+ struct s390_frame frame;
+ s390_frame_info (&frame);
+
+ for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
+ {
+ rtx reg, off, new_insn;
+
+ if (GET_CODE (insn) != INSN)
+ continue;
+ if (!reg_referenced_p (return_reg, PATTERN (insn)))
+ continue;
+ if (GET_CODE (PATTERN (insn)) == PARALLEL
+ && store_multiple_operation (PATTERN (insn), VOIDmode))
+ continue;
+
+ if (frame.frame_pointer_p)
+ reg = hard_frame_pointer_rtx;
+ else
+ reg = stack_pointer_rtx;
+
+ off = GEN_INT (frame.frame_size + REGNO (return_reg) * UNITS_PER_WORD);
+ if (INTVAL (off) >= 4096)
+ {
+ off = force_const_mem (Pmode, off);
+ new_insn = gen_rtx_SET (Pmode, return_reg, off);
+ new_insn = emit_insn_before (new_insn, insn);
+ INSN_ADDRESSES_NEW (new_insn, -1);
+ off = return_reg;
+ }
+
+ new_insn = gen_rtx_MEM (Pmode, gen_rtx_PLUS (Pmode, reg, off));
+ new_insn = gen_rtx_SET (Pmode, return_reg, new_insn);
+ new_insn = emit_insn_before (new_insn, insn);
+ INSN_ADDRESSES_NEW (new_insn, -1);
+
+ replacement_done = 1;
+ }
+
+ return replacement_done;
+}
+
/* Perform machine-dependent processing. */
void
s390_machine_dependent_reorg (first)
rtx first ATTRIBUTE_UNUSED;
{
- struct s390_frame frame;
- s390_frame_info (&frame);
+ bool fixed_up_clobbered_return_reg = 0;
+ rtx temp_reg = gen_rtx_REG (Pmode, RETURN_REGNUM);
+ bool temp_used = 0;
- /* Recompute regs_ever_live data for special registers. */
- regs_ever_live[BASE_REGISTER] = 0;
- regs_ever_live[RETURN_REGNUM] = 0;
- regs_ever_live[STACK_POINTER_REGNUM] = frame.frame_size > 0;
+ /* Make sure all splits have been performed; splits after
+ machine_dependent_reorg might confuse insn length counts. */
+ split_all_insns_noflow ();
- /* If there is (possibly) any pool entry, we need to
- load the base register.
- ??? FIXME: this should be more precise. */
- if (get_pool_size ())
- regs_ever_live[BASE_REGISTER] = 1;
- /* In non-leaf functions, the prolog/epilog code relies
- on RETURN_REGNUM being saved in any case. */
- if (!current_function_is_leaf)
- regs_ever_live[RETURN_REGNUM] = 1;
+ /* There are two problematic situations we need to correct:
+
+ - the literal pool might be > 4096 bytes in size, so that
+ some of its elements cannot be directly accessed
+
+ - a branch target might be > 64K away from the branch, so that
+ it is not possible to use a PC-relative instruction.
+
+ To fix those, we split the single literal pool into multiple
+ pool chunks, reloading the pool base register at various
+ points throughout the function to ensure it always points to
+ the pool chunk the following code expects, and / or replace
+ PC-relative branches by absolute branches.
+
+ However, the two problems are interdependent: splitting the
+ literal pool can move a branch further away from its target,
+ causing the 64K limit to overflow, and on the other hand,
+ replacing a PC-relative branch by an absolute branch means
+ we need to put the branch target address into the literal
+ pool, possibly causing it to overflow.
+
+ So, we loop trying to fix up both problems until we manage
+ to satisfy both conditions at the same time. Note that the
+ loop is guaranteed to terminate as every pass of the loop
+ strictly decreases the total number of PC-relative branches
+ in the function. (This is not completely true as there
+ might be branch-over-pool insns introduced by chunkify_start.
+ Those never need to be split however.) */
+
+ for (;;)
+ {
+ struct constant_pool *pool_list;
+
+ /* Try to chunkify the literal pool. */
+ pool_list = s390_chunkify_start (temp_reg, &temp_used);
- s390_chunkify_pool ();
- s390_split_branches ();
- s390_optimize_prolog ();
+ /* Split out-of-range branches. If this has created new
+ literal pool entries, cancel current chunk list and
+ recompute it. */
+ if (s390_split_branches (temp_reg, &temp_used))
+ {
+ if (pool_list)
+ s390_chunkify_cancel (pool_list);
+
+ continue;
+ }
+
+ /* Check whether we have clobbered a use of the return
+ register (e.g. for __builtin_return_address). If so,
+ add insns reloading the register where necessary. */
+ if (temp_used && !fixed_up_clobbered_return_reg
+ && s390_fixup_clobbered_return_reg (temp_reg))
+ {
+ fixed_up_clobbered_return_reg = 1;
+
+ /* The fixup insns might have caused a jump to overflow. */
+ if (pool_list)
+ s390_chunkify_cancel (pool_list);
+
+ continue;
+ }
+
+ /* If we made it up to here, both conditions are satisfied.
+ Finish up pool chunkification if required. */
+ if (pool_list)
+ s390_chunkify_finish (pool_list, temp_reg);
+
+ break;
+ }
+
+ s390_optimize_prolog (temp_used? RETURN_REGNUM : -1);
}
@@ -5018,7 +5491,7 @@ s390_function_profiler (file, labelno)
rtx op[7];
char label[128];
- sprintf (label, "%sP%d", LPREFIX, labelno);
+ ASM_GENERATE_INTERNAL_LABEL (label, "LP", labelno);
fprintf (file, "# function profiler \n");
@@ -5113,3 +5586,78 @@ s390_encode_section_info (decl, first)
}
}
}
+
+static void
+s390_output_mi_thunk (file, thunk, delta, function)
+ FILE *file;
+ tree thunk ATTRIBUTE_UNUSED;
+ HOST_WIDE_INT delta;
+ tree function;
+{
+ if (TARGET_64BIT)
+ {
+ if (flag_pic)
+ {
+ fprintf (file, "\tlarl 1,0f\n");
+ fprintf (file, "\tagf %d,0(1)\n",
+ aggregate_value_p (TREE_TYPE
+ (TREE_TYPE (function))) ? 3 :2 );
+ fprintf (file, "\tlarl 1,");
+ assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
+ fprintf (file, "@GOTENT\n");
+ fprintf (file, "\tlg 1,0(1)\n");
+ fprintf (file, "\tbr 1\n");
+ fprintf (file, "0:\t.long ");
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, (delta));
+ fprintf (file, "\n");
+ }
+ else
+ {
+ fprintf (file, "\tlarl 1,0f\n");
+ fprintf (file, "\tagf %d,0(1)\n",
+ aggregate_value_p (TREE_TYPE
+ (TREE_TYPE (function))) ? 3 :2 );
+ fprintf (file, "\tjg ");
+ assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
+ fprintf (file, "\n");
+ fprintf (file, "0:\t.long ");
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, (delta));
+ fprintf (file, "\n");
+ }
+ }
+ else
+ {
+ if (flag_pic)
+ {
+ fprintf (file, "\tbras 1,0f\n");
+ fprintf (file, "\t.long _GLOBAL_OFFSET_TABLE_-.\n");
+ fprintf (file, "\t.long ");
+ assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
+ fprintf (file, "@GOT\n");
+ fprintf (file, "\t.long ");
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, (delta));
+ fprintf (file, "\n");
+ fprintf (file, "0:\tal %d,8(1)\n",
+ aggregate_value_p (TREE_TYPE
+ (TREE_TYPE (function))) ? 3 : 2 );
+ fprintf (file, "\tl 0,4(1)\n");
+ fprintf (file, "\tal 1,0(1)\n");
+ fprintf (file, "\talr 1,0\n");
+ fprintf (file, "\tl 1,0(1)\n");
+ fprintf (file, "\tbr 1\n");
+ } else {
+ fprintf (file, "\tbras 1,0f\n");
+ fprintf (file, "\t.long ");
+ assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
+ fprintf (file, "-.\n");
+ fprintf (file, "\t.long ");
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, (delta));
+ fprintf (file, "\n");
+ fprintf (file, "0:\tal %d,4(1)\n",
+ aggregate_value_p (TREE_TYPE
+ (TREE_TYPE (function))) ? 3 : 2 );
+ fprintf (file, "\tal 1,0(1)\n");
+ fprintf (file, "\tbr 1\n");
+ }
+ }
+}
diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h
index b674706a101..607d2ddd51e 100644
--- a/gcc/config/s390/s390.h
+++ b/gcc/config/s390/s390.h
@@ -1231,10 +1231,36 @@ CUMULATIVE_ARGS;
extern struct rtx_def *s390_compare_op0, *s390_compare_op1;
+/* implicit call of memcpy, not bcopy */
+
+#define TARGET_MEM_FUNCTIONS
+
+
+/* Assembler file format. */
+
+/* Character to start a comment. */
+#define ASM_COMMENT_START "#"
+
+/* Declare an uninitialized external linkage data object. */
+#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
+ asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
+
+/* Globalizing directive for a label. */
+#define GLOBAL_ASM_OP ".globl "
+
+/* Advance the location counter to a multiple of 2**LOG bytes. */
+#define ASM_OUTPUT_ALIGN(FILE, LOG) \
+ if ((LOG)) fprintf ((FILE), "\t.align\t%d\n", 1 << (LOG))
+
+/* Advance the location counter by SIZE bytes. */
+#define ASM_OUTPUT_SKIP(FILE, SIZE) \
+ fprintf ((FILE), "\t.set\t.,.+%u\n", (SIZE))
+
+/* The LOCAL_LABEL_PREFIX variable is used by dbxelf.h. */
+#define LOCAL_LABEL_PREFIX "."
/* How to refer to registers in assembler output. This sequence is
indexed by compiler's hard-register-number (see above). */
-
#define REGISTER_NAMES \
{ "%r0", "%r1", "%r2", "%r3", "%r4", "%r5", "%r6", "%r7", \
"%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15", \
@@ -1243,23 +1269,37 @@ extern struct rtx_def *s390_compare_op0, *s390_compare_op1;
"%ap", "%cc", "%fp" \
}
-/* implicit call of memcpy, not bcopy */
-
-#define TARGET_MEM_FUNCTIONS
-
/* Either simplify a location expression, or return the original. */
-
#define ASM_SIMPLIFY_DWARF_ADDR(X) \
s390_simplify_dwarf_addr (X)
-/* Print operand X (an rtx) in assembler syntax to file FILE.
- CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
- For `%' followed by punctuation, CODE is the punctuation and X is null. */
-
+/* Print operand X (an rtx) in assembler syntax to file FILE. */
#define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
-
#define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR)
+/* Output an element of a case-vector that is absolute. */
+#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
+do { \
+ char buf[32]; \
+ fputs (integer_asm_op (UNITS_PER_WORD, TRUE), (FILE)); \
+ ASM_GENERATE_INTERNAL_LABEL (buf, "L", (VALUE)); \
+ assemble_name ((FILE), buf); \
+ fputc ('\n', (FILE)); \
+} while (0)
+
+/* Output an element of a case-vector that is relative. */
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
+do { \
+ char buf[32]; \
+ fputs (integer_asm_op (UNITS_PER_WORD, TRUE), (FILE)); \
+ ASM_GENERATE_INTERNAL_LABEL (buf, "L", (VALUE)); \
+ assemble_name ((FILE), buf); \
+ fputc ('-', (FILE)); \
+ ASM_GENERATE_INTERNAL_LABEL (buf, "L", (REL)); \
+ assemble_name ((FILE), buf); \
+ fputc ('\n', (FILE)); \
+} while (0)
+
/* Define the codes that are matched by predicates in aux-output.c. */
@@ -1276,6 +1316,17 @@ extern struct rtx_def *s390_compare_op0, *s390_compare_op1;
{"s390_plus_operand", { PLUS }},
+/* Sections. */
+
+/* Output before read-only data. */
+#define TEXT_SECTION_ASM_OP ".text"
+
+/* Output before writable (initialized) data. */
+#define DATA_SECTION_ASM_OP ".data"
+
+/* Output before writable (uninitialized) data. */
+#define BSS_SECTION_ASM_OP ".bss"
+
/* S/390 constant pool breaks the devices in crtstuff.c to control section
in where code resides. We have to write it as asm code. */
#ifndef __s390x__
@@ -1293,7 +1344,6 @@ extern struct rtx_def *s390_compare_op0, *s390_compare_op1;
extern int s390_pool_count;
extern int s390_nr_constants;
-extern int s390_pool_overflow;
#define ASM_OUTPUT_POOL_PROLOGUE(FILE, FUNNAME, fndecl, size) \
{ \
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index b7331a0a65c..f03d97de952 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -5724,9 +5724,6 @@
(const_int 4)
(ne (symbol_ref "TARGET_64BIT") (const_int 0))
(const_int 6)
- (ne (symbol_ref "s390_pool_overflow") (const_int 0))
- (if_then_else (eq (symbol_ref "flag_pic") (const_int 0))
- (const_int 12) (const_int 14))
(eq (symbol_ref "flag_pic") (const_int 0))
(const_int 6)] (const_int 8)))])
@@ -5776,9 +5773,6 @@
(const_int 4)
(ne (symbol_ref "TARGET_64BIT") (const_int 0))
(const_int 6)
- (ne (symbol_ref "s390_pool_overflow") (const_int 0))
- (if_then_else (eq (symbol_ref "flag_pic") (const_int 0))
- (const_int 12) (const_int 14))
(eq (symbol_ref "flag_pic") (const_int 0))
(const_int 6)] (const_int 8)))])
@@ -5888,9 +5882,6 @@
(const_int 4)
(ne (symbol_ref "TARGET_64BIT") (const_int 0))
(const_int 10)
- (ne (symbol_ref "s390_pool_overflow") (const_int 0))
- (if_then_else (eq (symbol_ref "flag_pic") (const_int 0))
- (const_int 12) (const_int 14))
(eq (symbol_ref "flag_pic") (const_int 0))
(const_int 6)] (const_int 8)))])
@@ -5909,9 +5900,9 @@
"*
{
if (get_attr_op_type (insn) == OP_TYPE_RR)
- return \"bctr\\t%0\";
+ return \"bctr\\t%1,%0\";
else
- return \"bct\\t%a0\";
+ return \"bct\\t%1,%a0\";
}"
[(set (attr "op_type")
(if_then_else (match_operand 0 "register_operand" "")
@@ -5983,9 +5974,9 @@
"*
{
if (get_attr_op_type (insn) == OP_TYPE_RRE)
- return \"bctgr\\t%0\";
+ return \"bctgr\\t%1,%0\";
else
- return \"bctg\\t%a0\";
+ return \"bctg\\t%1,%a0\";
}"
[(set (attr "op_type")
(if_then_else (match_operand 0 "register_operand" "")
@@ -6707,7 +6698,7 @@
[(set_attr "op_type" "NN")
(set_attr "length" "0")])
-(define_insn "reload_base"
+(define_insn "reload_base_31"
[(set (match_operand:SI 0 "register_operand" "=a")
(unspec:SI [(label_ref (match_operand 1 "" ""))] 210))]
"!TARGET_64BIT"
@@ -6716,15 +6707,29 @@
(set_attr "type" "la")
(set_attr "length" "6")])
-(define_insn "reload_base2"
+(define_insn "reload_base_64"
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (unspec:DI [(label_ref (match_operand 1 "" ""))] 210))]
+ "TARGET_64BIT"
+ "larl\\t%0,%1"
+ [(set_attr "op_type" "RIL")
+ (set_attr "type" "la")])
+
+(define_insn "reload_anchor"
[(set (match_operand:SI 0 "register_operand" "=a")
- (unspec:SI [(label_ref (match_operand 1 "" ""))] 211))]
+ (unspec:SI [(match_operand:SI 1 "register_operand" "a")] 211))]
"!TARGET_64BIT"
- "la\\t%0,%1-.(%0)"
+ "l\\t%0,0(%1)\;la\\t%0,0(%0,%1)"
[(set_attr "op_type" "NN")
(set_attr "type" "la")
- (set_attr "length" "4")])
+ (set_attr "length" "8")])
+(define_insn "pool"
+ [(unspec_volatile [(match_operand 0 "const_int_operand" "n")] 220)]
+ ""
+ "* abort ();"
+ [(set_attr "op_type" "NN")
+ (set (attr "length") (symbol_ref "INTVAL (operands[0])"))])
;;
;; Insns related to generating the function prologue and epilogue.
diff --git a/gcc/config/sh/linux.h b/gcc/config/sh/linux.h
index 1a3948386fc..2a17afe9206 100644
--- a/gcc/config/sh/linux.h
+++ b/gcc/config/sh/linux.h
@@ -55,6 +55,7 @@ do { \
#undef LIB_SPEC
#define LIB_SPEC \
"%{shared: -lc} \
+ %{!static:-rpath-link %R/lib:%R/usr/lib} \
%{!shared: %{pthread:-lthread} \
%{profile:-lc_p} %{!profile: -lc}}"
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index b23766474cf..00a91df42c8 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -9149,7 +9149,9 @@
&& VECTOR_MODE_SUPPORTED_P (GET_MODE (operands[0]))
&& GET_MODE_SIZE (GET_MODE (operands[0])) == 8
&& (XVECEXP (operands[1], 0, 0) != const0_rtx
- || XVECEXP (operands[1], 0, 1) != const0_rtx)"
+ || XVECEXP (operands[1], 0, 1) != const0_rtx)
+ && (XVECEXP (operands[1], 0, 0) != constm1_rtx
+ || XVECEXP (operands[1], 0, 1) != constm1_rtx)"
[(set (match_dup 0) (match_dup 1))
(match_dup 2)]
"
@@ -9160,7 +9162,11 @@
if (unit_size > 2)
operands[2] = gen_mshflo_l (operands[0], operands[0], operands[0]);
else
- operands[2] = gen_mperm_w0 (operands[0], operands[0]);
+ {
+ if (unit_size < 2)
+ operands[0] = gen_rtx_REG (V4HImode, true_regnum (operands[0]));
+ operands[2] = gen_mperm_w0 (operands[0], operands[0]);
+ }
operands[0] = gen_rtx_REG (DImode, true_regnum (operands[0]));
operands[1] = XVECEXP (operands[1], 0, 0);
if (unit_size < 2)
@@ -10380,14 +10386,15 @@
rtx discratch = gen_reg_rtx (DImode);
rtx last;
- emit_insn (gen_adddi3z_media (discratch, operands[1],
- force_reg (SImode, GEN_INT (-1))));
- emit_insn (gen_andcdi3 (discratch, discratch,
- simplify_gen_subreg (DImode, operands[1],
- SImode, 0)));
+ emit_insn (gen_adddi3 (discratch,
+ simplify_gen_subreg (DImode, operands[1], SImode, 0),
+ GEN_INT (-1)));
+ emit_insn (gen_andcdi3 (discratch,
+ simplify_gen_subreg (DImode, operands[1], SImode, 0),
+ discratch));
emit_insn (gen_nsbsi (scratch, discratch));
last = emit_insn (gen_subsi3 (operands[0],
- force_reg (SImode, GEN_INT (-64)), scratch));
+ force_reg (SImode, GEN_INT (63)), scratch));
REG_NOTES (last)
= gen_rtx_EXPR_LIST (REG_EQUAL,
gen_rtx_FFS (SImode, operands[0]), REG_NOTES (last));
diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h
index 39f3fc20134..d55d738b187 100644
--- a/gcc/config/sparc/linux64.h
+++ b/gcc/config/sparc/linux64.h
@@ -1,5 +1,5 @@
/* Definitions for 64-bit SPARC running Linux-based GNU systems with ELF.
- Copyright 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
+ Copyright 1996, 1997, 1998, 2000, 2002 Free Software Foundation, Inc.
Contributed by David S. Miller (davem@caip.rutgers.edu)
This file is part of GNU CC.
@@ -55,38 +55,11 @@ Boston, MA 02111-1307, USA. */
#undef STARTFILE_SPEC
-#define STARTFILE_SPEC32 \
- "%{!shared: \
- %{pg:/usr/lib/gcrt1.o%s} %{!pg:%{p:/usr/lib/gcrt1.o%s} %{!p:/usr/lib/crt1.o%s}}}\
- /usr/lib/crti.o%s %{static:crtbeginT.o%s}\
+#define STARTFILE_SPEC \
+ "%{!shared:%{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\
+ crti.o%s %{static:crtbeginT.o%s}\
%{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"
-#define STARTFILE_SPEC64 \
- "%{!shared: \
- %{pg:/usr/lib64/gcrt1.o%s} %{!pg:%{p:/usr/lib64/gcrt1.o%s} %{!p:/usr/lib64/crt1.o%s}}}\
- /usr/lib64/crti.o%s %{static:crtbeginT.o%s}\
- %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"
-
-#ifdef SPARC_BI_ARCH
-
-#if DEFAULT_ARCH32_P
-#define STARTFILE_SPEC "\
-%{m32:" STARTFILE_SPEC32 "} \
-%{m64:" STARTFILE_SPEC64 "} \
-%{!m32:%{!m64:" STARTFILE_SPEC32 "}}"
-#else
-#define STARTFILE_SPEC "\
-%{m32:" STARTFILE_SPEC32 "} \
-%{m64:" STARTFILE_SPEC64 "} \
-%{!m32:%{!m64:" STARTFILE_SPEC64 "}}"
-#endif
-
-#else
-
-#define STARTFILE_SPEC STARTFILE_SPEC64
-
-#endif
-
/* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on
the GNU/Linux magical crtend.o file (see crtstuff.c) which
provides part of the support for getting C++ file-scope static
@@ -95,36 +68,9 @@ Boston, MA 02111-1307, USA. */
#undef ENDFILE_SPEC
-#define ENDFILE_SPEC32 \
- "%{!shared:crtend.o%s} %{shared:crtendS.o%s} /usr/lib/crtn.o%s"
-
-#define ENDFILE_SPEC64 \
- "%{!shared:crtend.o%s} %{shared:crtendS.o%s} /usr/lib64/crtn.o%s"
-
-#define ENDFILE_SPEC_COMMON \
- "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s}"
-
-#ifdef SPARC_BI_ARCH
-
-#if DEFAULT_ARCH32_P
-#define ENDFILE_SPEC "\
-%{m32:" ENDFILE_SPEC32 "} \
-%{m64:" ENDFILE_SPEC64 "} \
-%{!m32:%{!m64:" ENDFILE_SPEC32 "}} " \
-ENDFILE_SPEC_COMMON
-#else
-#define ENDFILE_SPEC "\
-%{m32:" ENDFILE_SPEC32 "} \
-%{m64:" ENDFILE_SPEC64 "} \
-%{!m32:%{!m64:" ENDFILE_SPEC64 "}} " \
-ENDFILE_SPEC_COMMON
-#endif
-
-#else
-
-#define ENDFILE_SPEC ENDFILE_SPEC64 " " ENDFILE_SPEC_COMMON
-
-#endif
+#define ENDFILE_SPEC \
+ "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s\
+ %{ffast-math|funsafe-math-optimizations:crtfastmath.o%s}"
/* The GNU C++ standard library requires that these macros be defined. */
#undef CPLUSPLUS_CPP_SPEC
diff --git a/gcc/config/sparc/netbsd-elf.h b/gcc/config/sparc/netbsd-elf.h
index 2261b5795ae..7e0d70d9e79 100644
--- a/gcc/config/sparc/netbsd-elf.h
+++ b/gcc/config/sparc/netbsd-elf.h
@@ -95,6 +95,9 @@ Boston, MA 02111-1307, USA. */
#undef STDC_0_IN_SYSTEM_HEADERS
+/* Attempt to enable execute permissions on the stack. */
+#define TRANSFER_FROM_TRAMPOLINE NETBSD_ENABLE_EXECUTE_STACK
+
#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (%s)", TARGET_NAME);
diff --git a/gcc/config/sparc/netbsd.h b/gcc/config/sparc/netbsd.h
index f6a5244333a..284e288d5e4 100644
--- a/gcc/config/sparc/netbsd.h
+++ b/gcc/config/sparc/netbsd.h
@@ -44,3 +44,6 @@
/* Until they use ELF or something that handles dwarf2 unwinds
and initialization stuff better. */
#define DWARF2_UNWIND_INFO 0
+
+/* Attempt to enable execute permissions on the stack. */
+#define TRANSFER_FROM_TRAMPOLINE NETBSD_ENABLE_EXECUTE_STACK
diff --git a/gcc/config/sparc/openbsd.h b/gcc/config/sparc/openbsd.h
index 96d2f149a72..a4333df79ab 100644
--- a/gcc/config/sparc/openbsd.h
+++ b/gcc/config/sparc/openbsd.h
@@ -1,5 +1,5 @@
/* Configuration file for sparc OpenBSD target.
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -63,5 +63,3 @@ Boston, MA 02111-1307, USA. */
#define DWARF2_UNWIND_INFO 0
#undef ASM_PREFERRED_EH_DATA_FORMAT
-
-/* Default sparc.h does already define ASM_OUTPUT_MI_THUNK */
diff --git a/gcc/config/sparc/sol2-bi.h b/gcc/config/sparc/sol2-bi.h
index 1ba52606aa3..3f9416daaa0 100644
--- a/gcc/config/sparc/sol2-bi.h
+++ b/gcc/config/sparc/sol2-bi.h
@@ -57,24 +57,6 @@
%{!mcpu*:%(asm_cpu_default)} \
"
-#define STARTFILE_ARCH64_SPEC "\
-%{ansi:/usr/lib/sparcv9/values-Xc.o%s} \
-%{!ansi:/usr/lib/sparcv9/values-Xa.o%s}"
-
-#undef STARTFILE_ARCH_SPEC
-
-#if DEFAULT_ARCH32_P
-#define STARTFILE_ARCH_SPEC "\
-%{m32:" STARTFILE_ARCH32_SPEC "} \
-%{m64:" STARTFILE_ARCH64_SPEC "} \
-%{!m32:%{!m64:" STARTFILE_ARCH32_SPEC "}}"
-#else
-#define STARTFILE_ARCH_SPEC "\
-%{m32:" STARTFILE_ARCH32_SPEC "} \
-%{m64:" STARTFILE_ARCH64_SPEC "} \
-%{!m32:%{!m64:" STARTFILE_ARCH64_SPEC "}}"
-#endif
-
#undef CPP_CPU_DEFAULT_SPEC
#define CPP_CPU_DEFAULT_SPEC \
(DEFAULT_ARCH32_P ? "\
diff --git a/gcc/config/sparc/sparc-protos.h b/gcc/config/sparc/sparc-protos.h
index fc814a8fdbb..0aa6e58f7da 100644
--- a/gcc/config/sparc/sparc-protos.h
+++ b/gcc/config/sparc/sparc-protos.h
@@ -123,6 +123,4 @@ extern int sparc_extra_constraint_check PARAMS ((rtx, int, int));
extern int sparc_rtx_costs PARAMS ((rtx, enum rtx_code, enum rtx_code));
#endif /* RTX_CODE */
-extern void sparc_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
-
#endif /* __SPARC_PROTOS_H__ */
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 5df00906701..d113ff78718 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -176,8 +176,8 @@ static void emit_soft_tfmode_cvt PARAMS ((enum rtx_code, rtx *));
static void emit_hard_tfmode_operation PARAMS ((enum rtx_code, rtx *));
static void sparc_encode_section_info PARAMS ((tree, int));
-
static bool sparc_function_ok_for_sibcall PARAMS ((tree, tree));
+static void sparc_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
/* Option handling. */
@@ -244,6 +244,9 @@ enum processor_type sparc_cpu;
#undef TARGET_FUNCTION_OK_FOR_SIBCALL
#define TARGET_FUNCTION_OK_FOR_SIBCALL sparc_function_ok_for_sibcall
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK sparc_output_mi_thunk
+
struct gcc_target targetm = TARGET_INITIALIZER;
/* Validate and override various options, and do some machine dependent
@@ -8479,7 +8482,7 @@ sparc_encode_section_info (decl, first)
/* Output code to add DELTA to the first argument, and then jump to FUNCTION.
Used for C++ multiple inheritance. */
-void
+static void
sparc_output_mi_thunk (file, thunk_fndecl, delta, function)
FILE *file;
tree thunk_fndecl ATTRIBUTE_UNUSED;
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index b981d5067c1..161d65873a9 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -2828,11 +2828,6 @@ do { \
#define ASM_OUTPUT_IDENT(FILE, NAME) \
fprintf (FILE, "%s\"%s\"\n", IDENT_ASM_OP, NAME);
-/* Output code to add DELTA to the first argument, and then jump to FUNCTION.
- Used for C++ multiple inheritance. */
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
- sparc_output_mi_thunk (FILE, THUNK_FNDECL, DELTA, FUNCTION)
-
#define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \
((CHAR) == '#' || (CHAR) == '*' || (CHAR) == '^' || (CHAR) == '(' || (CHAR) == '_')
diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md
index 27f86f7c448..4024290d436 100644
--- a/gcc/config/sparc/sparc.md
+++ b/gcc/config/sparc/sparc.md
@@ -2048,7 +2048,7 @@
;
})
-;; Be careful, fmovd does not exist when !arch64.
+;; Be careful, fmovd does not exist when !v9.
;; We match MEM moves directly when we have correct even
;; numbered registers, but fall into splits otherwise.
;; The constraint ordering here is really important to
@@ -2062,9 +2062,9 @@
(define_insn "*movdi_insn_sp32_v9"
[(set (match_operand:DI 0 "nonimmediate_operand"
- "=T,o,T,U,o,r,r,r,?T,?f,?f,?o,?f")
+ "=T,o,T,U,o,r,r,r,?T,?f,?f,?o,?f,?e,?e,?W")
(match_operand:DI 1 "input_operand"
- " J,J,U,T,r,o,i,r, f, T, o, f, f"))]
+ " J,J,U,T,r,o,i,r, f, T, o, f, f, e, W, e"))]
"! TARGET_ARCH64 && TARGET_V9
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
"@
@@ -2080,9 +2080,13 @@
ldd\t%1, %0
#
#
- #"
- [(set_attr "type" "store,store,store,load,*,*,*,*,fpstore,fpload,*,*,*")
- (set_attr "length" "*,2,*,*,2,2,2,2,*,*,2,2,2")])
+ #
+ fmovd\\t%1, %0
+ ldd\\t%1, %0
+ std\\t%1, %0"
+ [(set_attr "type" "store,store,store,load,*,*,*,*,fpstore,fpload,*,*,*,fpmove,fpload,fpstore")
+ (set_attr "length" "*,2,*,*,2,2,2,2,*,*,2,2,2,*,*,*")
+ (set_attr "fptype" "*,*,*,*,*,*,*,*,*,*,*,*,*,double,*,*")])
(define_insn "*movdi_insn_sp32"
[(set (match_operand:DI 0 "nonimmediate_operand"
@@ -2388,7 +2392,14 @@
(define_split
[(set (match_operand:DI 0 "register_operand" "")
(match_operand:DI 1 "const_double_operand" ""))]
- "! TARGET_ARCH64 && reload_completed"
+ "reload_completed
+ && (! TARGET_V9
+ || (! TARGET_ARCH64
+ && ((GET_CODE (operands[0]) == REG
+ && REGNO (operands[0]) < 32)
+ || (GET_CODE (operands[0]) == SUBREG
+ && GET_CODE (SUBREG_REG (operands[0])) == REG
+ && REGNO (SUBREG_REG (operands[0])) < 32))))"
[(clobber (const_int 0))]
{
emit_insn (gen_movsi (gen_highpart (SImode, operands[0]),
diff --git a/gcc/config/sparc/t-linux64 b/gcc/config/sparc/t-linux64
index a6486263835..3e3fa4cae7e 100644
--- a/gcc/config/sparc/t-linux64
+++ b/gcc/config/sparc/t-linux64
@@ -1,8 +1,6 @@
-MULTILIB_OPTIONS = m64/m32 mno-app-regs|mcmodel=medany
-MULTILIB_DIRNAMES = 64 32 alt
-MULTILIB_MATCHES = mcmodel?medany=mcmodel?medmid
-MULTILIB_EXCEPTIONS = m32/mno-app-regs* m32/mcmodel=*
-MULTILIB_EXCLUSIONS = m32/!m64/mno-app-regs m32/!m64/mcmodel=medany
+MULTILIB_OPTIONS = m64/m32
+MULTILIB_DIRNAMES = 64 32
+MULTILIB_OSDIRNAMES = ../lib64 ../lib
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
@@ -10,10 +8,12 @@ INSTALL_LIBGCC = install-multilib
EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o \
crtfastmath.o
-SHLIB_SLIBDIR_SUFFIXES = 64:64 32:
-
# Override t-slibgcc-elf-ver to export some libgcc symbols with
# the symbol versions that glibc used.
# Avoid the t-linux version file.
SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \
$(srcdir)/config/sparc/libgcc-sparc-glibc.ver
+
+CRTSTUFF_T_CFLAGS = `if test x$$($(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) \
+ -print-multi-os-directory) \
+ = x../lib64; then echo -mcmodel=medany; fi`
diff --git a/gcc/config/sparc/t-sol2-64 b/gcc/config/sparc/t-sol2-64
index 39204d7368f..3c15f0a712a 100644
--- a/gcc/config/sparc/t-sol2-64
+++ b/gcc/config/sparc/t-sol2-64
@@ -1,11 +1,10 @@
MULTILIB_OPTIONS = m32/m64
MULTILIB_DIRNAMES = sparcv7 sparcv9
MULTILIB_MATCHES =
+MULTILIB_OSDIRNAMES = . sparcv9
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o gmon.o crt1.o crti.o crtn.o gcrt1.o \
crtfastmath.o
-
-SHLIB_SLIBDIR_SUFFIXES = sparcv9:/sparcv9 sparcv7:
diff --git a/gcc/config/stormy16/stormy16-protos.h b/gcc/config/stormy16/stormy16-protos.h
index dc58871a573..e957de1403c 100644
--- a/gcc/config/stormy16/stormy16-protos.h
+++ b/gcc/config/stormy16/stormy16-protos.h
@@ -45,7 +45,6 @@ extern void xstormy16_expand_builtin_va_start PARAMS ((tree, rtx));
extern rtx xstormy16_expand_builtin_va_arg PARAMS ((tree, tree));
extern void xstormy16_initialize_trampoline PARAMS ((rtx, rtx, rtx));
extern rtx xstormy16_function_value PARAMS ((tree, tree));
-extern void xstormy16_asm_output_mi_thunk PARAMS ((FILE *, tree, int, tree));
#endif
#ifdef RTX_CODE
diff --git a/gcc/config/stormy16/stormy16.c b/gcc/config/stormy16/stormy16.c
index 62b8656730d..de0cc903787 100644
--- a/gcc/config/stormy16/stormy16.c
+++ b/gcc/config/stormy16/stormy16.c
@@ -50,6 +50,8 @@ static rtx emit_addhi3_postreload PARAMS ((rtx, rtx, rtx));
static void xstormy16_asm_out_constructor PARAMS ((rtx, int));
static void xstormy16_asm_out_destructor PARAMS ((rtx, int));
static void xstormy16_encode_section_info PARAMS ((tree, int));
+static void xstormy16_asm_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT,
+ tree));
/* Define the information needed to generate branch and scc insns. This is
stored from the compare operation. */
@@ -1380,11 +1382,11 @@ xstormy16_function_value (valtype, func)
extracted from it.) It might possibly be useful on some targets, but
probably not. */
-void
+static void
xstormy16_asm_output_mi_thunk (file, thunk_fndecl, delta, function)
FILE *file;
tree thunk_fndecl ATTRIBUTE_UNUSED;
- int delta;
+ HOST_WIDE_INT delta;
tree function;
{
int regnum = FIRST_ARGUMENT_REGISTER;
@@ -1393,7 +1395,7 @@ xstormy16_asm_output_mi_thunk (file, thunk_fndecl, delta, function)
if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function))))
regnum += 1;
- fprintf (file, "\tadd %s,#0x%x\n", reg_names[regnum], (delta) & 0xFFFF);
+ fprintf (file, "\tadd %s,#0x%x\n", reg_names[regnum], (int) delta & 0xFFFF);
fputs ("\tjmpf ", file);
assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
putc ('\n', file);
@@ -2031,4 +2033,7 @@ xstormy16_handle_interrupt_attribute (node, name, args, flags, no_add_attrs)
#undef TARGET_ENCODE_SECTION_INFO
#define TARGET_ENCODE_SECTION_INFO xstormy16_encode_section_info
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK xstormy16_asm_output_mi_thunk
+
struct gcc_target targetm = TARGET_INITIALIZER;
diff --git a/gcc/config/stormy16/stormy16.h b/gcc/config/stormy16/stormy16.h
index 3ee09a850a7..bd2101929db 100644
--- a/gcc/config/stormy16/stormy16.h
+++ b/gcc/config/stormy16/stormy16.h
@@ -1593,40 +1593,6 @@ enum reg_class
You need not define this macro if you did not define
`DELAY_SLOTS_FOR_EPILOGUE'. */
/* #define ELIGIBLE_FOR_EPILOGUE_DELAY(INSN, N) */
-
-/* A C compound statement that outputs the assembler code for a thunk function,
- used to implement C++ virtual function calls with multiple inheritance. The
- thunk acts as a wrapper around a virtual function, adjusting the implicit
- object parameter before handing control off to the real function.
-
- First, emit code to add the integer DELTA to the location that contains the
- incoming first argument. Assume that this argument contains a pointer, and
- is the one used to pass the `this' pointer in C++. This is the incoming
- argument *before* the function prologue, e.g. `%o0' on a sparc. The
- addition must preserve the values of all other incoming arguments.
-
- After the addition, emit code to jump to FUNCTION, which is a
- `FUNCTION_DECL'. This is a direct pure jump, not a call, and does not touch
- the return address. Hence returning from FUNCTION will return to whoever
- called the current `thunk'.
-
- The effect must be as if @var{function} had been called directly
- with the adjusted first argument. This macro is responsible for
- emitting all of the code for a thunk function;
- TARGET_ASM_FUNCTION_PROLOGUE and TARGET_ASM_FUNCTION_EPILOGUE are
- not invoked.
-
- The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already been
- extracted from it.) It might possibly be useful on some targets, but
- probably not.
-
- If you do not define this macro, the target-independent code in the C++
- frontend will generate a less efficient heavyweight thunk that calls
- FUNCTION instead of jumping to it. The generic approach does not support
- varargs. */
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
- xstormy16_asm_output_mi_thunk (FILE, THUNK_FNDECL, DELTA, FUNCTION)
-
/* Generating Code for Profiling. */
diff --git a/gcc/config/t-libunwind b/gcc/config/t-libunwind
new file mode 100644
index 00000000000..be50bc481c5
--- /dev/null
+++ b/gcc/config/t-libunwind
@@ -0,0 +1 @@
+LIB2ADDEH = $(srcdir)/unwind-libunwind.c $(srcdir)/unwind-sjlj.c
diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h
index 52a49e35d7c..aab4dd94d0b 100644
--- a/gcc/config/v850/v850.h
+++ b/gcc/config/v850/v850.h
@@ -812,6 +812,12 @@ struct cum_arg { int nbytes; int anonymous_args; };
#define EXIT_IGNORE_STACK 1
+/* Define this macro as a C expression that is nonzero for registers
+ used by the epilogue or the `return' pattern. */
+
+#define EPILOGUE_USES(REGNO) \
+ (reload_completed && (REGNO) == LINK_POINTER_REGNUM)
+
/* Output assembler code to FILE to increment profiler label # LABELNO
for profiling a function entry. */
diff --git a/gcc/config/vax/vax-protos.h b/gcc/config/vax/vax-protos.h
index 059994f1196..307f5eb40ef 100644
--- a/gcc/config/vax/vax-protos.h
+++ b/gcc/config/vax/vax-protos.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler. VAX version.
- Copyright (C) 2000 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -35,8 +35,7 @@ extern int check_float_value PARAMS ((enum machine_mode, REAL_VALUE_TYPE *, int)
#endif /* REAL_VALUE_TYPE */
#ifdef TREE_CODE
-extern void vms_check_external PARAMS ((tree, const char *, int));
+extern void vax_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
#endif /* TREE_CODE */
-extern void vms_flush_pending_externals PARAMS ((FILE *));
extern void const_section PARAMS ((void));
diff --git a/gcc/config/vax/vax.c b/gcc/config/vax/vax.c
index 1a83eba2ff8..131d3cbd4ab 100644
--- a/gcc/config/vax/vax.c
+++ b/gcc/config/vax/vax.c
@@ -34,19 +34,13 @@ Boston, MA 02111-1307, USA. */
#include "recog.h"
#include "expr.h"
#include "flags.h"
+#include "debug.h"
#include "tm_p.h"
#include "target.h"
#include "target-def.h"
static int follows_p PARAMS ((rtx, rtx));
static void vax_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
-#if VMS_TARGET
-static void vms_asm_out_constructor PARAMS ((rtx, int));
-static void vms_asm_out_destructor PARAMS ((rtx, int));
-static void vms_select_section PARAMS ((tree, int, unsigned HOST_WIDE_INT));
-static void vms_encode_section_info PARAMS ((tree, int));
-static void vms_globalize_label PARAMS ((FILE *, const char *));
-#endif
/* Initialize the GCC target structure. */
#undef TARGET_ASM_ALIGNED_HI_OP
@@ -55,15 +49,6 @@ static void vms_globalize_label PARAMS ((FILE *, const char *));
#undef TARGET_ASM_FUNCTION_PROLOGUE
#define TARGET_ASM_FUNCTION_PROLOGUE vax_output_function_prologue
-#if VMS_TARGET
-#undef TARGET_ASM_SELECT_SECTION
-#define TARGET_ASM_SELECT_SECTION vms_select_section
-#undef TARGET_ENCODE_SECTION_INFO
-#define TARGET_ENCODE_SECTION_INFO vms_encode_section_info
-#undef TARGET_ASM_GLOBALIZE_LABEL
-#define TARGET_ASM_GLOBALIZE_LABEL vms_globalize_label
-#endif
-
struct gcc_target targetm = TARGET_INITIALIZER;
/* Set global variables as needed for the options enabled. */
@@ -101,50 +86,26 @@ vax_output_function_prologue (file, size)
fprintf (file, "\t.word 0x%x\n", mask);
- if (VMS_TARGET)
+ if (dwarf2out_do_frame ())
{
- /*
- * This works for both gcc and g++. It first checks to see if
- * the current routine is "main", which will only happen for
- * GCC, and add the jsb if it is. If is not the case then try
- * and see if __MAIN_NAME is part of current_function_name,
- * which will only happen if we are running g++, and add the jsb
- * if it is. In gcc there should never be a paren in the
- * function name, and in g++ there is always a "(" in the
- * function name, thus there should never be any confusion.
- *
- * Adjusting the stack pointer by 4 before calling C$MAIN_ARGS
- * is required when linking with the VMS POSIX version of the C
- * run-time library; using `subl2 $4,r0' is adequate but we use
- * `clrl -(sp)' instead. The extra 4 bytes could be removed
- * after the call because STARTING_FRAME_OFFSET's setting of -4
- * will end up adding them right back again, but don't bother.
- */
-
- const char *p = current_function_name;
- int is_main = strcmp ("main", p) == 0;
-# define __MAIN_NAME " main("
-
- while (!is_main && *p != '\0')
- {
- if (*p == *__MAIN_NAME
- && strncmp (p, __MAIN_NAME, sizeof __MAIN_NAME - sizeof "") == 0)
- is_main = 1;
- else
- p++;
- }
+ const char *label = dwarf2out_cfi_label ();
+ int offset = 0;
+
+ for (regno = FIRST_PSEUDO_REGISTER-1; regno >= 0; --regno)
+ if (regs_ever_live[regno] && !call_used_regs[regno])
+ dwarf2out_reg_save (label, regno, offset -= 4);
- if (is_main)
- fprintf (file, "\tclrl -(%ssp)\n\tjsb _C$MAIN_ARGS\n",
- REGISTER_PREFIX);
+ dwarf2out_reg_save (label, PC_REGNUM, offset -= 4);
+ dwarf2out_reg_save (label, FRAME_POINTER_REGNUM, offset -= 4);
+ dwarf2out_reg_save (label, ARG_POINTER_REGNUM, offset -= 4);
+ dwarf2out_def_cfa (label, FRAME_POINTER_REGNUM, -(offset - 4));
}
size -= STARTING_FRAME_OFFSET;
if (size >= 64)
- fprintf (file, "\tmovab %d(%ssp),%ssp\n", -size, REGISTER_PREFIX,
- REGISTER_PREFIX);
+ asm_fprintf (file, "\tmovab %d(%Rsp),%Rsp\n", -size);
else if (size)
- fprintf (file, "\tsubl2 $%d,%ssp\n", size, REGISTER_PREFIX);
+ asm_fprintf (file, "\tsubl2 $%d,%Rsp\n", size);
}
/* This is like nonimmediate_operand with a restriction on the type of MEM. */
@@ -709,265 +670,6 @@ vax_rtx_cost (x)
return c;
}
-#if VMS_TARGET
-/* Additional support code for VMS target. */
-
-/* Linked list of all externals that are to be emitted when optimizing
- for the global pointer if they haven't been declared by the end of
- the program with an appropriate .comm or initialization. */
-
-static
-struct extern_list {
- struct extern_list *next; /* next external */
- const char *name; /* name of the external */
- int size; /* external's actual size */
- int in_const; /* section type flag */
-} *extern_head = 0, *pending_head = 0;
-
-/* Check whether NAME is already on the external definition list. If not,
- add it to either that list or the pending definition list. */
-
-void
-vms_check_external (decl, name, pending)
- tree decl;
- const char *name;
- int pending;
-{
- register struct extern_list *p, *p0;
-
- for (p = extern_head; p; p = p->next)
- if (!strcmp (p->name, name))
- return;
-
- for (p = pending_head, p0 = 0; p; p0 = p, p = p->next)
- if (!strcmp (p->name, name))
- {
- if (pending)
- return;
-
- /* Was pending, but has now been defined; move it to other list. */
- if (p == pending_head)
- pending_head = p->next;
- else
- p0->next = p->next;
- p->next = extern_head;
- extern_head = p;
- return;
- }
-
- /* Not previously seen; create a new list entry. */
- p = (struct extern_list *) xmalloc (sizeof (struct extern_list));
- p->name = name;
-
- if (pending)
- {
- /* Save the size and section type and link to `pending' list. */
- p->size = (DECL_SIZE (decl) == 0) ? 0 :
- TREE_INT_CST_LOW (size_binop (CEIL_DIV_EXPR, DECL_SIZE (decl),
- size_int (BITS_PER_UNIT)));
- p->in_const = (TREE_READONLY (decl) && ! TREE_THIS_VOLATILE (decl));
-
- p->next = pending_head;
- pending_head = p;
- }
- else
- {
- /* Size and section type don't matter; link to `declared' list. */
- p->size = p->in_const = 0; /* arbitrary init */
-
- p->next = extern_head;
- extern_head = p;
- }
- return;
-}
-
-void
-vms_flush_pending_externals (file)
- FILE *file;
-{
- register struct extern_list *p;
-
- while (pending_head)
- {
- /* Move next pending declaration to the "done" list. */
- p = pending_head;
- pending_head = p->next;
- p->next = extern_head;
- extern_head = p;
-
- /* Now output the actual declaration. */
- if (p->in_const)
- const_section ();
- else
- data_section ();
- fputs (".comm ", file);
- assemble_name (file, p->name);
- fprintf (file, ",%d\n", p->size);
- }
-}
-
-static void
-vms_asm_out_constructor (symbol, priority)
- rtx symbol;
- int priority ATTRIBUTE_UNUSED;
-{
- fprintf (asm_out_file,".globl $$PsectAttributes_NOOVR$$__gxx_init_1\n");
- data_section();
- fprintf (asm_out_file,"$$PsectAttributes_NOOVR$$__gxx_init_1:\n\t.long\t");
- assemble_name (asm_out_file, XSTR (symbol, 0));
- fputc ('\n', asm_out_file);
-}
-
-static void
-vms_asm_out_destructor (symbol, priority)
- rtx symbol;
- int priority ATTRIBUTE_UNUSED;
-{
- fprintf (asm_out_file,".globl $$PsectAttributes_NOOVR$$__gxx_clean_1\n");
- data_section();
- fprintf (asm_out_file,"$$PsectAttributes_NOOVR$$__gxx_clean_1:\n\t.long\t");
- assemble_name (asm_out_file, XSTR (symbol, 0));
- fputc ('\n', asm_out_file);
-}
-
-static void
-vms_select_section (exp, reloc, align)
- tree exp;
- int reloc ATTRIBUTE_UNUSED;
- unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED;
-{
- if (TREE_CODE (exp) == VAR_DECL)
- {
- if (TREE_READONLY (exp) && ! TREE_THIS_VOLATILE (exp)
- && DECL_INITIAL (exp)
- && (DECL_INITIAL (exp) == error_mark_node
- || TREE_CONSTANT (DECL_INITIAL (exp))))
- {
- if (TREE_PUBLIC (exp))
- const_section ();
- else
- text_section ();
- }
- else
- data_section ();
- }
- if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'c')
- {
- if (TREE_CODE (exp) == STRING_CST && flag_writable_strings)
- data_section ();
- else
- text_section ();
- }
-}
-
-/* Make sure that external variables are correctly addressed. Under VMS
- there is some brain damage in the linker that requires us to do this. */
-
-static void
-vms_encode_section_info (decl, first)
- tree decl;
- int first ATTRIBUTE_UNUSED;
-{
- if (DECL_EXTERNAL (decl) && TREE_PUBLIC (decl))
- SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1;
-}
-
-/* This is how to output a command to make the user-level label named NAME
- defined for reference from other files. */
-static void
-vms_globalize_label (stream, name)
- FILE *stream;
- const char *name;
-{
- default_globalize_label (stream, name);
- vms_check_external (NULL_TREE, name, 0);
-}
-#endif /* VMS_TARGET */
-
-/* Additional support code for VMS host. */
-/* ??? This should really be in libiberty; vax.c is a target file. */
-#ifdef QSORT_WORKAROUND
- /*
- Do not use VAXCRTL's qsort() due to a severe bug: once you've
- sorted something which has a size that's an exact multiple of 4
- and is longword aligned, you cannot safely sort anything which
- is either not a multiple of 4 in size or not longword aligned.
- A static "move-by-longword" optimization flag inside qsort() is
- never reset. This is known to affect VMS V4.6 through VMS V5.5-1,
- and was finally fixed in VMS V5.5-2.
-
- In this work-around an insertion sort is used for simplicity.
- The qsort code from glibc should probably be used instead.
- */
-void
-not_qsort (array, count, size, compare)
- void *array;
- unsigned count, size;
- int (*compare)();
-{
-
- if (size == sizeof (short))
- {
- register int i;
- register short *next, *prev;
- short tmp, *base = array;
-
- for (next = base, i = count - 1; i > 0; i--)
- {
- prev = next++;
- if ((*compare)(next, prev) < 0)
- {
- tmp = *next;
- do *(prev + 1) = *prev;
- while (--prev >= base ? (*compare)(&tmp, prev) < 0 : 0);
- *(prev + 1) = tmp;
- }
- }
- }
- else if (size == sizeof (long))
- {
- register int i;
- register long *next, *prev;
- long tmp, *base = array;
-
- for (next = base, i = count - 1; i > 0; i--)
- {
- prev = next++;
- if ((*compare)(next, prev) < 0)
- {
- tmp = *next;
- do *(prev + 1) = *prev;
- while (--prev >= base ? (*compare)(&tmp, prev) < 0 : 0);
- *(prev + 1) = tmp;
- }
- }
- }
- else /* arbitrary size */
- {
- register int i;
- register char *next, *prev, *tmp = alloca (size), *base = array;
-
- for (next = base, i = count - 1; i > 0; i--)
- { /* count-1 forward iterations */
- prev = next, next += size; /* increment front pointer */
- if ((*compare)(next, prev) < 0)
- { /* found element out of order; move others up then re-insert */
- memcpy (tmp, next, size); /* save smaller element */
- do { memcpy (prev + size, prev, size); /* move larger elem. up */
- prev -= size; /* decrement back pointer */
- } while (prev >= base ? (*compare)(tmp, prev) < 0 : 0);
- memcpy (prev + size, tmp, size); /* restore small element */
- }
- }
-#ifdef USE_C_ALLOCA
- alloca (0);
-#endif
- }
-
- return;
-}
-#endif /* QSORT_WORKAROUND */
-
/* Return 1 if insn A follows B. */
static int
@@ -1002,3 +704,19 @@ reg_was_0_p (insn, op)
/* Make sure the reg hasn't been clobbered. */
&& ! reg_set_between_p (op, XEXP (link, 0), insn));
}
+
+void
+vax_output_mi_thunk (file, thunk, delta, function)
+ FILE *file;
+ tree thunk ATTRIBUTE_UNUSED;
+ HOST_WIDE_INT delta;
+ tree function;
+{
+ fprintf (file, "\t.word 0x0ffc\n");
+ fprintf (file, "\taddl2 $");
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, delta);
+ asm_fprintf (file, ",4(%Rap)\n");
+ fprintf (file, "\tjmp ");
+ assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
+ fprintf (file, "+2\n");
+}
diff --git a/gcc/config/vax/vax.h b/gcc/config/vax/vax.h
index e34acd97365..ed780a7c615 100644
--- a/gcc/config/vax/vax.h
+++ b/gcc/config/vax/vax.h
@@ -288,16 +288,28 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
#define REG_CLASS_FROM_LETTER(C) NO_REGS
-/* The letters I, J, K, L and M in a register constraint string
+/* The letters I, J, K, L, M, N, and O in a register constraint string
can be used to stand for particular ranges of immediate operands.
This macro defines what the ranges are.
C is the letter, and VALUE is a constant value.
Return 1 if VALUE is in the range specified by C.
- `I' is the constant zero. */
+ `I' is the constant zero.
+ `J' is a value between 0 .. 63 (inclusive)
+ `K' is a value between -128 and 127 (inclusive)
+ 'L' is a value between -32768 and 32767 (inclusive)
+ `M' is a value between 0 and 255 (inclusive)
+ 'N' is a value between 0 and 65535 (inclusive)
+ `O' is a value between -63 and -1 (inclusive) */
#define CONST_OK_FOR_LETTER_P(VALUE, C) \
- ((C) == 'I' ? (VALUE) == 0 \
+ ( (C) == 'I' ? (VALUE) == 0 \
+ : (C) == 'J' ? 0 <= (VALUE) && (VALUE) < 64 \
+ : (C) == 'O' ? -63 <= (VALUE) && (VALUE) < 0 \
+ : (C) == 'K' ? -128 <= (VALUE) && (VALUE) < 128 \
+ : (C) == 'M' ? 0 <= (VALUE) && (VALUE) < 256 \
+ : (C) == 'L' ? -32768 <= (VALUE) && (VALUE) < 32768 \
+ : (C) == 'N' ? 0 <= (VALUE) && (VALUE) < 65536 \
: 0)
/* Similar, but for floating constants, and defining letters G and H.
@@ -458,9 +470,18 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
/* Output assembler code to FILE to increment profiler label # LABELNO
for profiling a function entry. */
-#define FUNCTION_PROFILER(FILE, LABELNO) \
- fprintf (FILE, "\tmovab LP%d,%s\n\tjsb mcount\n", (LABELNO), \
- reg_names[0]);
+#define VAX_FUNCTION_PROFILER_NAME "mcount"
+#define FUNCTION_PROFILER(FILE, LABELNO) \
+ do \
+ { \
+ char label[256]; \
+ ASM_GENERATE_INTERNAL_LABEL (label, "LP", (LABELNO)); \
+ fprintf (FILE, "\tmovab "); \
+ assemble_name (FILE, label); \
+ asm_fprintf (FILE, ",%Rr0\n\tjsb %s\n", \
+ VAX_FUNCTION_PROFILER_NAME); \
+ } \
+ while (0)
/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
the stack pointer does not matter. The value is tested only in
@@ -505,9 +526,6 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
FNADDR is an RTX for the address of the function's pure code.
CXT is an RTX for the static chain value for the function. */
-/* Allow this be overriden with the correct register prefixes. */
-#define VAX_ISTREAM_SYNC "movpsl -(sp)\n\tpushal 1(pc)\n\trei"
-
/* We copy the register-mask from the function's pure code
to the start of the trampoline. */
#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
@@ -517,7 +535,7 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 4)), CXT); \
emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 11)), \
plus_constant (FNADDR, 2)); \
- emit_insn (gen_rtx_ASM_INPUT (VOIDmode, VAX_ISTREAM_SYNC)); \
+ emit_insn (gen_sync_istream ()); \
}
/* Byte offset of return address in a stack frame. The "saved PC" field
@@ -785,6 +803,10 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
jumps to the default label instead. */
#define CASE_DROPS_THROUGH
+/* Indicate that jump tables go in the text section. This is
+ necessary when compiling PIC code. */
+#define JUMP_TABLES_IN_TEXT_SECTION 1
+
/* Define this as 1 if `char' should by default be signed; else as 0. */
#define DEFAULT_SIGNED_CHAR 1
@@ -1054,19 +1076,39 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
It need not be very fast code. */
#define ASM_OUTPUT_REG_POP(FILE,REGNO) \
- fprintf (FILE, "\tmovl (sp)+,%s\n", reg_names[REGNO])
+ fprintf (FILE, "\tmovl (%s)+,%s\n", reg_names[STACK_POINTER_REGNUM], \
+ reg_names[REGNO])
/* This is how to output an element of a case-vector that is absolute.
(The VAX does not use such vectors,
but we must define this macro anyway.) */
-#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
- fprintf (FILE, "\t.long L%d\n", VALUE)
+#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
+ do \
+ { \
+ char label[256]; \
+ ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE));\
+ fprintf (FILE, "\t.long "); \
+ assemble_name (FILE, label); \
+ fprintf (FILE, "\n"); \
+ } \
+ while (0)
/* This is how to output an element of a case-vector that is relative. */
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
- fprintf (FILE, "\t.word L%d-L%d\n", VALUE, REL)
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
+ do \
+ { \
+ char label[256]; \
+ ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE)); \
+ fprintf (FILE, "\t.word "); \
+ assemble_name (FILE, label); \
+ ASM_GENERATE_INTERNAL_LABEL (label, "L", (REL)); \
+ fprintf (FILE, "-"); \
+ assemble_name (FILE, label); \
+ fprintf (FILE, "\n"); \
+ } \
+ while (0)
/* This is how to output an assembler line
that says to advance the location counter
@@ -1103,14 +1145,7 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
addl2 $DELTA, 4(ap) #adjust first argument
jmp FUNCTION+2 #jump beyond FUNCTION's entry mask
*/
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
-do { \
- fprintf (FILE, "\t.word 0x0ffc\n"); \
- fprintf (FILE, "\taddl2 $%d,4(%sap)\n", DELTA, REGISTER_PREFIX); \
- fprintf (FILE, "\tjmp "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "+2\n"); \
-} while (0)
+#define ASM_OUTPUT_MI_THUNK vax_output_mi_thunk
/* Print an instruction operand X on file FILE.
CODE is the code from the %-spec that requested printing this operand;
@@ -1129,17 +1164,20 @@ VAX operand formatting codes:
R 32 - constant operand
b the low 8 bits of a negated constant operand
h the low 16 bits of a negated constant operand
- # 'd' or 'g' depending on whether dfloat or gfloat is used */
+ # 'd' or 'g' depending on whether dfloat or gfloat is used
+ | register prefix */
/* The purpose of D is to get around a quirk or bug in VAX assembler
whereby -1 in a 64-bit immediate operand means 0x00000000ffffffff,
which is not a 64-bit minus one. */
#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
- ((CODE) == '#')
+ ((CODE) == '#' || (CODE) == '|')
#define PRINT_OPERAND(FILE, X, CODE) \
{ if (CODE == '#') fputc (ASM_DOUBLE_CHAR, FILE); \
+ else if (CODE == '|') \
+ fputs (REGISTER_PREFIX, FILE); \
else if (CODE == 'C') \
fputs (rev_cond_name (X), FILE); \
else if (CODE == 'D' && GET_CODE (X) == CONST_INT && INTVAL (X) < 0) \
@@ -1166,14 +1204,14 @@ VAX operand formatting codes:
else if (GET_CODE (X) == MEM) \
output_address (XEXP (X, 0)); \
else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == SFmode) \
- { REAL_VALUE_TYPE r; char dstr[30]; \
- REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
- REAL_VALUE_TO_DECIMAL (r, dstr, -1); \
+ { char dstr[30]; \
+ real_to_decimal (dstr, CONST_DOUBLE_REAL_VALUE (X), \
+ sizeof (dstr), 0, 1); \
fprintf (FILE, "$0f%s", dstr); } \
else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == DFmode) \
- { REAL_VALUE_TYPE r; char dstr[30]; \
- REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
- REAL_VALUE_TO_DECIMAL (r, dstr, -1); \
+ { char dstr[30]; \
+ real_to_decimal (dstr, CONST_DOUBLE_REAL_VALUE (X), \
+ sizeof (dstr), 0, 1); \
fprintf (FILE, "$0%c%s", ASM_DOUBLE_CHAR, dstr); } \
else { putc ('$', FILE); output_addr_const (FILE, X); }}
@@ -1182,3 +1220,8 @@ VAX operand formatting codes:
#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
print_operand_address (FILE, ADDR)
+
+/* This is a blatent lie. However, it's good enough, since we don't
+ actually have any code whatsoever for which this isn't overridden
+ by the proper FDE definition. */
+#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, PC_REGNUM)
diff --git a/gcc/config/vax/vax.md b/gcc/config/vax/vax.md
index 56e18a06391..1a163ad7763 100644
--- a/gcc/config/vax/vax.md
+++ b/gcc/config/vax/vax.md
@@ -28,6 +28,15 @@
;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code
;;- updates for most instructions.
+;; UNSPEC_VOLATILE usage:
+
+(define_constants
+ [(VUNSPEC_BLOCKAGE 0) ; `blockage' insn to prevent scheduling across an
+ ; insn in the code.
+ (VUNSPEC_SYNC_ISTREAM 1) ; sequence of insns to sync the I-stream
+ ]
+)
+
;; We don't want to allow a constant operand for test insns because
;; (set (cc0) (const_int foo)) has no mode information. Such insns will
;; be folded while optimizing anyway.
@@ -1798,11 +1807,6 @@
""
"decl %0\;jgequ %l1")
-;; Note that operand 1 is total size of args, in bytes,
-;; and what the call insn wants is the number of words.
-;; It is used in the call instruction as a byte, but in the addl2 as
-;; a word. Since the only time we actually use it in the call instruction
-;; is when it is a constant, SImode (for addl2) is the proper mode.
(define_expand "call_pop"
[(parallel [(call (match_operand:QI 0 "memory_operand" "")
(match_operand:SI 1 "const_int_operand" ""))
@@ -1810,12 +1814,15 @@
(plus:SI (reg:SI 14)
(match_operand:SI 3 "immediate_operand" "")))])]
""
- "
{
- if (INTVAL (operands[1]) > 255 * 4)
+ if (INTVAL (operands[3]) > 255 * 4 || INTVAL (operands[3]) % 4)
abort ();
- operands[1] = GEN_INT ((INTVAL (operands[1]) + 3)/ 4);
-}")
+
+ /* Operand 1 is the number of bytes to be popped by DW_CFA_GNU_args_size
+ during EH unwinding. We must include the argument count pushed by
+ the calls instruction. */
+ operands[1] = GEN_INT (INTVAL (operands[3]) + 4);
+})
(define_insn "*call_pop"
[(call (match_operand:QI 0 "memory_operand" "m")
@@ -1823,7 +1830,10 @@
(set (reg:SI 14) (plus:SI (reg:SI 14)
(match_operand:SI 2 "immediate_operand" "i")))]
""
- "calls %1,%0")
+{
+ operands[1] = GEN_INT ((INTVAL (operands[1]) - 4) / 4);
+ return "calls %1,%0";
+})
(define_expand "call_value_pop"
[(parallel [(set (match_operand 0 "" "")
@@ -1833,12 +1843,15 @@
(plus:SI (reg:SI 14)
(match_operand:SI 4 "immediate_operand" "")))])]
""
- "
{
- if (INTVAL (operands[2]) > 255 * 4)
- abort ();
- operands[2] = GEN_INT ((INTVAL (operands[2]) + 3)/ 4);
-}")
+ if (INTVAL (operands[4]) > 255 * 4 || INTVAL (operands[4]) % 4)
+ abort ();
+
+ /* Operand 2 is the number of bytes to be popped by DW_CFA_GNU_args_size
+ during EH unwinding. We must include the argument count pushed by
+ the calls instruction. */
+ operands[2] = GEN_INT (INTVAL (operands[4]) + 4);
+})
(define_insn "*call_value_pop"
[(set (match_operand 0 "" "")
@@ -1847,20 +1860,47 @@
(set (reg:SI 14) (plus:SI (reg:SI 14)
(match_operand:SI 3 "immediate_operand" "i")))]
""
- "calls %2,%1")
+ "*
+{
+ operands[2] = GEN_INT ((INTVAL (operands[2]) - 4) / 4);
+ return \"calls %2,%1\";
+}")
+
+(define_expand "call"
+ [(call (match_operand:QI 0 "memory_operand" "")
+ (match_operand:SI 1 "const_int_operand" ""))]
+ ""
+ "
+{
+ /* Operand 1 is the number of bytes to be popped by DW_CFA_GNU_args_size
+ during EH unwinding. We must include the argument count pushed by
+ the calls instruction. */
+ operands[1] = GEN_INT (INTVAL (operands[1]) + 4);
+}")
-;; Define another set of these for the case of functions with no operands.
-;; These will allow the optimizers to do a slightly better job.
-(define_insn "call"
- [(call (match_operand:QI 0 "memory_operand" "m")
- (const_int 0))]
+(define_insn "*call"
+ [(call (match_operand:QI 0 "memory_operand" "m")
+ (match_operand:SI 1 "const_int_operand" ""))]
""
"calls $0,%0")
-(define_insn "call_value"
+(define_expand "call_value"
+ [(set (match_operand 0 "" "")
+ (call (match_operand:QI 1 "memory_operand" "")
+ (match_operand:SI 2 "const_int_operand" "")))]
+ ""
+ "
+{
+ /* Operand 2 is the number of bytes to be popped by DW_CFA_GNU_args_size
+ during EH unwinding. We must include the argument count pushed by
+ the calls instruction. */
+ operands[2] = GEN_INT (INTVAL (operands[2]) + 4);
+}")
+
+(define_insn "*call_value"
[(set (match_operand 0 "" "")
(call (match_operand:QI 1 "memory_operand" "m")
- (const_int 0)))]
+ (match_operand:SI 2 "const_int_operand" "")))]
""
"calls $0,%1")
@@ -1897,7 +1937,7 @@
;; all of memory. This blocks insns from being moved across this point.
(define_insn "blockage"
- [(unspec_volatile [(const_int 0)] 0)]
+ [(unspec_volatile [(const_int 0)] VUNSPEC_BLOCKAGE)]
""
"")
@@ -2121,3 +2161,9 @@
= GEN_INT (INTVAL (operands[3]) & ~((1 << INTVAL (operands[2])) - 1));
return \"rotl %2,%1,%0\;bicl2 %N3,%0\";
}")
+
+;; Instruction sequence to sync the VAX instruction stream.
+(define_insn "sync_istream"
+ [(unspec_volatile [(const_int 0)] VUNSPEC_SYNC_ISTREAM)]
+ ""
+ "movpsl -(%|sp)\;pushal 1(%|pc)\;rei")
diff --git a/gcc/config/vax/vms.h b/gcc/config/vax/vms.h
deleted file mode 100644
index 870ebaf04eb..00000000000
--- a/gcc/config/vax/vms.h
+++ /dev/null
@@ -1,274 +0,0 @@
-/* Output variables, constants and external declarations, for GNU compiler.
- Copyright (C) 1988, 1994, 1995, 1996, 1997, 1999, 2001, 2002
- Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#define TARGET_EXECUTABLE_SUFFIX ".exe"
-#define TARGET_OBJECT_SUFFIX ".obj"
-
-/* This enables certain macros in vax.h, which will make an indirect
- reference to an external symbol an invalid address. This needs to be
- defined before we include vax.h, since it determines which macros
- are used for GO_IF_*. */
-
-#define NO_EXTERNAL_INDIRECT_ADDRESS
-
-#include "vax/vax.h"
-
-#undef VMS_TARGET
-#define VMS_TARGET 1
-
-#undef LIB_SPEC
-#undef TARGET_NAME
-#undef TARGET_DEFAULT
-#undef CALL_USED_REGISTERS
-#undef STARTING_FRAME_OFFSET
-
-#define TARGET_OS_CPP_BUILTINS() \
- do \
- { \
- builtin_define_std ("vms"); \
- builtin_define_std ("VMS"); \
- builtin_assert ("system=vms"); \
- \
- builtin_define_std ("vax"); \
- if (TARGET_G_FLOAT) \
- builtin_define_std ("GFLOAT"); \
- } \
- while (0)
-
-/* These match the definitions used in VAXCRTL, the VMS C run-time library */
-
-#define SIZE_TYPE "unsigned int"
-#define PTRDIFF_TYPE "int"
-#define WCHAR_TYPE "unsigned int"
-#define WCHAR_TYPE_SIZE 32 /* in bits */
-
-/* Use memcpy for structure copying, and so forth. */
-#define TARGET_MEM_FUNCTIONS
-
-/* Strictly speaking, VMS does not use DBX at all, but the interpreter built
- into gas only speaks straight DBX. */
-
-#define DEFAULT_GDB_EXTENSIONS 0
-
-#define TARGET_DEFAULT 1
-#define TARGET_NAME "vax/vms"
-
-/* The structure return address arrives as an "argument" on VMS. */
-#undef STRUCT_VALUE_REGNUM
-#define STRUCT_VALUE 0
-#undef PCC_STATIC_STRUCT_RETURN
-
-#define CALL_USED_REGISTERS {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1}
-
-/* The run-time library routine VAXC$ESTABLISH (necessary when mixing
- VMS exception handling and setjmp/longjmp in the same program) requires
- that a hidden automatic variable at the top of the stack be reserved
- for its use. We accomplish this by simply adding 4 bytes to the local
- stack for all functions, and making sure that normal local variables
- are 4 bytes lower on the stack then they would otherwise have been. */
-
-#define STARTING_FRAME_OFFSET -4
-
-/* This macro definition sets up a default value for `main' to return. */
-#define DEFAULT_MAIN_RETURN c_expand_return (integer_one_node)
-
-/* Globalizing directive for a label. */
-#define GLOBAL_ASM_OP ".globl "
-
-/* Under VMS we write the actual size of the storage to be allocated even
- though the symbol is external. Although it is possible to give external
- symbols a size of 0 (as unix does), the VMS linker does not make the
- distinction between a variable definition and an external reference of a
- variable, and thus the linker will not complain about a missing definition.
- If we followed the unix example of giving external symbols a size of
- zero, you tried to link a program where a given variable was externally
- defined but none of the object modules contained a non-extern definition,
- the linker would allocate 0 bytes for the variable, and any attempt to
- use that variable would use the storage allocated to some other variable.
-
- We must also select either const_section or data_section: this will indicate
- whether or not the variable will get the readonly bit set. Since the
- VMS linker does not distinguish between a variable's definition and an
- external reference, all usages of a given variable must have the readonly
- bit set the same way, or the linker will get confused and give warning
- messages. */
-
-/* We used to round the size up to a multiple of 4,
- but that causes linker errors sometimes when the variable was initialized
- since the size of its definition was not likewise rounded up. */
-
-/* Note: the original ASM_OUTPUT_EXTERNAL code has been moved into
- vms_check_external and vms_flush_pending_externals. */
-
-#define ASM_OUTPUT_EXTERNAL(FILE,DECL,NAME) \
-{ if (DECL_INITIAL (DECL) == 0 && TREE_CODE (DECL) != FUNCTION_DECL) \
- vms_check_external ((DECL), (NAME), 1); \
-}
-
-/* ASM_OUTPUT_EXTERNAL will have wait until after an initializer is
- completed in order to switch sections for an external object, so
- use the DECLARE_OBJECT hooks to manage deferred declarations. */
-
-/* This is the default action for ASM_DECLARE_OBJECT_NAME, but if it
- is explicitly defined, then ASM_FINISH_DECLARE_OBJECT will be used. */
-
-#define ASM_DECLARE_OBJECT_NAME(ASM_OUT_FILE,NAME,DECL) \
- ASM_OUTPUT_LABEL ((ASM_OUT_FILE), (NAME))
-
-/* We don't need to do anything special to finish the current object, but it
- should now be safe to output any deferred external global declarations. */
-
-#define ASM_FINISH_DECLARE_OBJECT(FILE,DECL,TOPLVL,ATEND) \
- vms_flush_pending_externals(FILE)
-
-/* Anything still pending must be flushed at the very end. */
-
-#define ASM_FILE_END(STREAM) \
- vms_flush_pending_externals(STREAM)
-
-/* Here we redefine ASM_OUTPUT_COMMON to select the data_section or the
- const_section before writing the ".const" assembler directive.
- If we were specifying a size of zero for external variables, we would
- not have to select a section, since the assembler can assume that
- when the size > 0, the storage is for a non-external, uninitialized
- variable (for which a "const" declaration would be senseless),
- and the assembler can make the storage read/write.
-
- Since the ".const" directive specifies the actual size of the storage used
- for both external and non-external variables, the assembler cannot
- make this assumption, and thus it has no way of deciding if storage should
- be read/write or read-only. To resolve this, we give the assembler some
- assistance, in the form of a ".const" or a ".data" directive.
-
- Under GCC 1.40, external variables were declared with a size of zero.
- The GNU assembler, GAS, will recognize the "-2" switch when built for VMS;
- when compiling programs with GCC 2.n this switch should be used or the
- assembler will not give the read-only attribute to external constants.
- Failure to use this switch will result in linker warning messages about
- mismatched psect attributes. */
-
-#undef ASM_OUTPUT_COMMON
-
-#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
-( ((TREE_READONLY (decl) && ! TREE_THIS_VOLATILE (decl)) \
- ? (const_section (), 0) : (data_section (), 0)), \
- fputs (".comm ", (FILE)), \
- assemble_name ((FILE), (NAME)), \
- fprintf ((FILE), ",%u\n", (SIZE)))
-
-/* We define this to prevent the name mangler from putting dollar signs into
- function names. This isn't really needed, but it has been here for
- some time and removing it would cause the object files generated by the
- compiler to be incompatible with the object files from a compiler that
- had this defined. Since it does no harm, we leave it in. */
-
-#define NO_DOLLAR_IN_LABEL
-
-/* Add a "const" section. This is viewed by the assembler as being nearly
- the same as the "data" section, with the only difference being that a
- flag is set for variables declared while in the const section. This
- flag is used to determine whether or not the read/write bit should be
- set in the Psect definition. */
-
-#define EXTRA_SECTIONS in_const
-
-#define EXTRA_SECTION_FUNCTIONS \
-void \
-const_section () \
-{ \
- if (in_section != in_const) { \
- fprintf(asm_out_file,".const\n"); \
- in_section = in_const; \
- } \
-}
-
-/* This is used by a hook in varasm.c to write the assembler directives
- that are needed to tell the startup code which constructors need to
- be run. */
-
-#define TARGET_ASM_CONSTRUCTOR vms_asm_out_constructor
-#define TARGET_ASM_DESTRUCTOR vms_asm_out_destructor
-
-/* The following definitions are used in libgcc2.c with the __main
- function. The _SHR symbol is used when the sharable image library
- for the C++ library is used - this is picked up automatically by the linker
- and this symbol points to the start of __CTOR_LIST__ from the C++ library.
- If the C++ library is not used, then __CTOR_LIST_SHR__ occurs just after
- __CTOR_LIST__, and essentially points to the same list as __CTOR_LIST. */
-
-#ifdef L__main
-
-#define __CTOR_LIST__ __gxx_init_0
-#define __CTOR_LIST_END__ __gxx_init_2
-
-#define __CTOR_LIST_SHR__ $$PsectAttributes_NOSHR$$__gxx_init_0_shr
-#define __CTOR_LIST_SHR_END__ $$PsectAttributes_NOSHR$$__gxx_init_2_shr
-
-#define DO_GLOBAL_CTORS_BODY \
-do { \
- func_ptr *p; \
- extern func_ptr __CTOR_LIST__[1], __CTOR_LIST_END__[1]; \
- extern func_ptr __CTOR_LIST_SHR__[1], __CTOR_LIST_SHR_END__[1]; \
- if (&__CTOR_LIST_SHR__[0] != &__CTOR_LIST__[1]) \
- for (p = __CTOR_LIST_SHR__ + 1; p < __CTOR_LIST_SHR_END__ ; p++ ) \
- if (*p) (*p) (); \
- for (p = __CTOR_LIST__ + 1; p < __CTOR_LIST_END__ ; p++ ) \
- if (*p) (*p) (); \
- do { /* arrange for `return' from main() to pass through exit() */ \
- __label__ foo; \
- int *callers_caller_fp = (int *) __builtin_frame_address (3); \
- register int retval asm ("r0"); \
- callers_caller_fp[4] = (int) && foo; \
- break; /* out of do-while block */ \
- foo: \
- exit (retval); \
- } while (0); \
-} while (0)
-
-#define __DTOR_LIST__ __gxx_clean_0
-#define __DTOR_LIST_END__ __gxx_clean_2
-
-#define __DTOR_LIST_SHR__ $$PsectAttributes_NOSHR$$__gxx_clean_0_shr
-#define __DTOR_LIST_SHR_END__ $$PsectAttributes_NOSHR$$__gxx_clean_2_shr
-
-#define DO_GLOBAL_DTORS_BODY \
-do { \
- func_ptr *p; \
- extern func_ptr __DTOR_LIST__[1], __DTOR_LIST_END__[1]; \
- extern func_ptr __DTOR_LIST_SHR__[1], __DTOR_LIST_SHR_END__[1]; \
- for (p = __DTOR_LIST__ + 1; p < __DTOR_LIST_END__ ; p++ ) \
- if (*p) (*p) (); \
- if (&__DTOR_LIST_SHR__[0] != &__DTOR_LIST__[1]) \
- for (p = __DTOR_LIST_SHR__ + 1; p < __DTOR_LIST_SHR_END__ ; p++ ) \
- if (*p) (*p) (); \
-} while (0)
-
-#endif /* L__main */
-
-/* Specify the list of include file directories. */
-#define INCLUDE_DEFAULTS \
-{ \
- { "GNU_GXX_INCLUDE:", "G++", 1, 1 }, \
- { "GNU_CC_INCLUDE:", "GCC", 0, 0 }, /* GNU includes */ \
- { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0 }, /* VAX-11 "C" includes */ \
- { ".", 0, 0, 1 }, /* Make normal VMS filespecs work. */ \
- { 0, 0, 0, 0 } \
-}
diff --git a/gcc/config/vax/xm-vms.h b/gcc/config/vax/xm-vms.h
deleted file mode 100644
index eaf5f3bf510..00000000000
--- a/gcc/config/vax/xm-vms.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/* Configuration for GNU C-compiler for VAX.
- Copyright (C) 1987, 1994, 1995, 1996, 1997, 2001
- Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-/* Other configurations get these via autoconfig. */
-#define STDC_HEADERS 1
-#define HAVE_STDLIB_H 1
-#define HAVE_STRING_H 1
-#ifdef __DECC
-#define HAVE_UNISTD_H 1
-#endif
-
-#if defined(VAXC) || defined(__DECC)
-/* if compiling with VAXC, need to fix problem with <stdio.h>
- which defines a macro called FILE_TYPE that breaks "tree.h".
- Fortunately it uses #ifndef to suppress multiple inclusions.
- Three possible cases:
- 1) <stdio.h> has already been included -- ours will be no-op;
- 2) <stdio.h> will be included after us -- "theirs" will be no-op;
- 3) <stdio.h> isn't needed -- including it here shouldn't hurt.
- In all three cases, the problem macro will be removed here. */
-#include <stdio.h>
-#undef FILE_TYPE
-#endif
-
-#define SUCCESS_EXIT_CODE 1
-#define FATAL_EXIT_CODE (44 | 0x10000000) /* Abort, and no DCL message. */
-
-/* A couple of conditionals for execution machine are controlled here. */
-#ifndef VMS
-#define VMS
-#endif
-
-#define GCC_INCLUDE_DIR "///not used with VMS///" /* nonsense string for now */
-
-/* and define a local equivalent (sort of) for unlink */
-#define unlink remove
-
-/* Under VMS a directory specification can be enclosed either in square
- brackets or in angle brackets. Thus we need to check both. This
- macro is used to help compare filenames in cp-lex.c.
-
- We also need to make sure that the names are all lower case, because
- we must be able to compare filenames to determine if a file implements
- a class. */
-
-#define FILE_NAME_NONDIRECTORY(C) \
-({ \
- char * pnt_ = (C), * pnt1_; \
- pnt1_ = pnt_ - 1; \
- while (*++pnt1_) \
- if (ISUPPER (*pnt1_)) *pnt1_ = TOLOWER (*pnt1_); \
- pnt1_ = strrchr (pnt_, ']'); \
- pnt1_ = (pnt1_ == 0 ? strrchr (pnt_, '>') : pnt1_); \
- pnt1_ = (pnt1_ == 0 ? strrchr (pnt_, ':') : pnt1_); \
- (pnt1_ == 0 ? pnt_ : pnt1_ + 1); \
- })
-
-/* Macro to generate the name of the cross reference file. The standard
- one does not work, since it was written assuming that the conventions
- of a unix style filesystem will work on the host system. */
-
-#define XREF_FILE_NAME(BUFF, NAME) \
- s = FILE_NAME_NONDIRECTORY (NAME); \
- if (s == NAME) sprintf(BUFF, "%s_gxref", NAME); \
- else { \
- strcpy(BUFF, NAME); \
- strcat(BUFF, "_gxref"); \
- }
-
-/* Macro that is used in cp-xref.c to determine whether a file name is
- absolute or not. */
-
-#define FILE_NAME_ABSOLUTE_P(NAME) \
- (FILE_NAME_NONDIRECTORY (NAME) != (&NAME[1]))
-
-/* FILE_NAME_JOINER is defined to be the characters that are inserted between
- a directory name and a filename in order to make an absolute file
- specification. Under VMS the directory specification contains all of the
- required characters, so we define this to be a null string. */
-
-#define FILE_NAME_JOINER ""
-
-/* vprintf() has been available since VMS V4.6. */
-
-#define HAVE_VPRINTF
-
-/* Early versions of VAX C for VMS do not have putenv. Comment out
- the following define if your system doesn't have putenv. */
-#define HAVE_PUTENV
-
-#ifndef HAVE_PUTENV
-#define putenv(x)
-#endif
-
-#if defined(VAXC) || defined(__DECC)
-
-/* Customizations/kludges for building with DEC's VAX C compiler
- rather than GCC. */
-
-#define QSORT_WORKAROUND /* do not use VAXCRTL's qsort */
-
-/* use ANSI/SYSV style byte manipulation routines instead of BSD ones */
-/* rename all too-long external symbol names to avoid warnings */
-#define check_for_full_enumeration_handling check_for_full_enum_handling
-#define current_function_contains_functions curfunc_contains_functions
-#define current_function_epilogue_delay_list curfunc_epilogue_delay_list
-#define current_function_has_nonlocal_goto curfunc_has_nonlocal_goto
-#define current_function_has_nonlocal_label curfunc_has_nonlocal_label
-#define current_function_internal_arg_pointer curfunc_internal_arg_pointer
-#define current_function_outgoing_args_size curfunc_outgoing_args_size
-#define current_function_pretend_args_size curfunc_pretend_args_size
-#define current_function_returns_pcc_struct curfunc_returns_pcc_struct
-#define current_function_returns_pointer curfunc_returns_pointer
-#define current_function_uses_const_pool curfunc_uses_const_pool
-#define current_function_uses_pic_offset_table curfunc_uses_pic_offset_table
-#define dbxout_resume_previous_source_file dbxout_resume_previous_src_file
-#define expand_builtin_extract_return_addr expand_builtin_extract_ret_addr
-#define expand_builtin_set_return_addr_reg expand_builtin_set_ret_addr_reg
-#define expand_start_loop_continue_elsewhere expnd_start_loop_cont_elsewhere
-#define flag_schedule_insns_after_reload flag_sched_insns_after_reload
-#define get_dynamic_handler_chain_libfunc get_dynamic_hndlr_chain_libfunc
-#define lookup_name_current_level_global lookup_name_current_level_gbl
-#define maybe_building_objc_message_expr maybe_building_objc_msg_expr
-#define mesg_implicit_function_declaration mesg_implicit_func_declaration
-#define output_deferred_addressed_constants output_deferred_addr_constants
-#define protect_cleanup_actions_with_terminate protect_cleanup_act_w_terminate
-#define reg_overlap_mentioned_for_reload_p reg_overlap_mtnd_for_reload_p
-#define reposition_prologue_and_epilogue_notes repos_prolog_and_epilog_notes
-#define rtx_equal_function_value_matters rtx_equal_func_value_matters
-#define set_new_first_and_last_label_num set_new_first_and_last_lbl_num
-#define thread_prologue_and_epilogue_insns thread_prolog_and_epilog_insns
-#endif
-
-/* We need to avoid the library qsort routine, due to a serious bug
- in VAXCRTL. (Sorting anything with size that's not a multiple of 4
- after having previously sorted something that was a multiple of 4
- can produce wrong results and result in data corruption.) We'll
- use our own substitute (in vax.c) instead. */
-#ifdef QSORT_WORKAROUND
-#define qsort not_qsort
-#endif
-
-#ifdef __DECC
-/* DECC$SHR doesn't have VAXCRTL's bugs. */
-#undef QSORT_WORKAROUND
-#undef qsort
-/* Avoid a lot of informational level diagnostics about implicitly
- declared functions. */
-#include <stdlib.h>
-#include <string.h>
-/* this is for genopinit.c */
- #pragma message disable (undefescap)
-#endif
-
-#define HOST_EXECUTABLE_SUFFIX ".exe"
-#define HOST_OBJECT_SUFFIX ".obj"
diff --git a/gcc/config/xtensa/xtensa-protos.h b/gcc/config/xtensa/xtensa-protos.h
index ddeb5f35f16..051c81e6939 100644
--- a/gcc/config/xtensa/xtensa-protos.h
+++ b/gcc/config/xtensa/xtensa-protos.h
@@ -1,5 +1,5 @@
/* Prototypes of target machine for GNU compiler for Xtensa.
- Copyright (C) 2001 Free Software Foundation, Inc.
+ Copyright 2001,2002 Free Software Foundation, Inc.
Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
This file is part of GCC.
@@ -89,7 +89,7 @@ extern void xtensa_reorg PARAMS ((rtx));
extern rtx xtensa_return_addr PARAMS ((int, rtx));
extern rtx xtensa_builtin_saveregs PARAMS ((void));
extern enum reg_class xtensa_preferred_reload_class
- PARAMS ((rtx, enum reg_class));
+ PARAMS ((rtx, enum reg_class, int));
extern enum reg_class xtensa_secondary_reload_class
PARAMS ((enum reg_class, enum machine_mode, rtx, int));
extern int a7_overlap_mentioned_p PARAMS ((rtx x));
diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c
index 7b3ece1398f..ae7c994d9a8 100644
--- a/gcc/config/xtensa/xtensa.c
+++ b/gcc/config/xtensa/xtensa.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Tensilica's Xtensa architecture.
- Copyright (C) 2001 Free Software Foundation, Inc.
+ Copyright 2001,2002 Free Software Foundation, Inc.
Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
This file is part of GCC.
@@ -107,10 +107,10 @@ const char xtensa_leaf_regs[FIRST_PSEUDO_REGISTER] =
/* Map hard register number to register class */
const enum reg_class xtensa_regno_to_class[FIRST_PSEUDO_REGISTER] =
{
- GR_REGS, SP_REG, GR_REGS, GR_REGS,
- GR_REGS, GR_REGS, GR_REGS, GR_REGS,
- GR_REGS, GR_REGS, GR_REGS, GR_REGS,
- GR_REGS, GR_REGS, GR_REGS, GR_REGS,
+ RL_REGS, SP_REG, RL_REGS, RL_REGS,
+ RL_REGS, RL_REGS, RL_REGS, GR_REGS,
+ RL_REGS, RL_REGS, RL_REGS, RL_REGS,
+ RL_REGS, RL_REGS, RL_REGS, RL_REGS,
AR_REGS, AR_REGS, BR_REGS,
FP_REGS, FP_REGS, FP_REGS, FP_REGS,
FP_REGS, FP_REGS, FP_REGS, FP_REGS,
@@ -2614,16 +2614,22 @@ xtensa_va_arg (valist, type)
enum reg_class
-xtensa_preferred_reload_class (x, class)
+xtensa_preferred_reload_class (x, class, isoutput)
rtx x;
enum reg_class class;
+ int isoutput;
{
- if (CONSTANT_P (x) && GET_CODE (x) == CONST_DOUBLE)
+ if (!isoutput && CONSTANT_P (x) && GET_CODE (x) == CONST_DOUBLE)
return NO_REGS;
- /* Don't use sp for reloads! */
- if (class == AR_REGS)
- return GR_REGS;
+ /* Don't use the stack pointer or hard frame pointer for reloads!
+ The hard frame pointer would normally be OK except that it may
+ briefly hold an incoming argument in the prologue, and reload
+ won't know that it is live because the hard frame pointer is
+ treated specially. */
+
+ if (class == AR_REGS || class == GR_REGS)
+ return RL_REGS;
return class;
}
@@ -2645,13 +2651,13 @@ xtensa_secondary_reload_class (class, mode, x, isoutput)
if (!isoutput)
{
if (class == FP_REGS && constantpool_mem_p (x))
- return GR_REGS;
+ return RL_REGS;
}
if (ACC_REG_P (regno))
- return (class == GR_REGS ? NO_REGS : GR_REGS);
+ return ((class == GR_REGS || class == RL_REGS) ? NO_REGS : RL_REGS);
if (class == ACC_REG)
- return (GP_REG_P (regno) ? NO_REGS : GR_REGS);
+ return (GP_REG_P (regno) ? NO_REGS : RL_REGS);
return NO_REGS;
}
diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h
index 05fd403c177..a84ebf36d8d 100644
--- a/gcc/config/xtensa/xtensa.h
+++ b/gcc/config/xtensa/xtensa.h
@@ -1,5 +1,5 @@
/* Definitions of Tensilica's Xtensa target machine for GNU compiler.
- Copyright (C) 2001 Free Software Foundation, Inc.
+ Copyright 2001,2002 Free Software Foundation, Inc.
Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
This file is part of GCC.
@@ -554,6 +554,7 @@ enum reg_class
FP_REGS, /* floating point registers */
ACC_REG, /* MAC16 accumulator */
SP_REG, /* sp register (aka a1) */
+ RL_REGS, /* preferred reload regs (not sp or fp) */
GR_REGS, /* integer registers except sp */
AR_REGS, /* all integer registers */
ALL_REGS, /* all registers */
@@ -574,6 +575,7 @@ enum reg_class
"FP_REGS", \
"ACC_REG", \
"SP_REG", \
+ "RL_REGS", \
"GR_REGS", \
"AR_REGS", \
"ALL_REGS" \
@@ -589,6 +591,7 @@ enum reg_class
{ 0xfff80000, 0x00000007 }, /* floating-point registers */ \
{ 0x00000000, 0x00000008 }, /* MAC16 accumulator */ \
{ 0x00000002, 0x00000000 }, /* stack pointer register */ \
+ { 0x0000ff7d, 0x00000000 }, /* preferred reload registers */ \
{ 0x0000fffd, 0x00000000 }, /* general-purpose registers */ \
{ 0x0003ffff, 0x00000000 }, /* integer registers */ \
{ 0xffffffff, 0x0000000f } /* all registers */ \
@@ -704,10 +707,10 @@ extern enum reg_class xtensa_char_to_class[256];
: FALSE)
#define PREFERRED_RELOAD_CLASS(X, CLASS) \
- xtensa_preferred_reload_class (X, CLASS)
+ xtensa_preferred_reload_class (X, CLASS, 0)
#define PREFERRED_OUTPUT_RELOAD_CLASS(X, CLASS) \
- (CLASS)
+ xtensa_preferred_reload_class (X, CLASS, 1)
#define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, X) \
xtensa_secondary_reload_class (CLASS, MODE, X, 0)
diff --git a/gcc/configure b/gcc/configure
index 554a403d0e7..f5cb3e95906 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -62,8 +62,15 @@ ac_help="$ac_help
ac_help="$ac_help
--disable-shared don't provide a shared libgcc"
ac_help="$ac_help
+ --with-sysroot[=DIR] Search for usr/lib, usr/include, et al, within DIR."
+ac_help="$ac_help
--with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib"
ac_help="$ac_help
+ --enable-sjlj-exceptions
+ arrange to use setjmp/longjmp exception handling"
+ac_help="$ac_help
+ --enable-libunwind-exceptions force use libunwind for exceptions"
+ac_help="$ac_help
--enable-nls use Native Language Support (default)"
ac_help="$ac_help
--with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib"
@@ -89,11 +96,6 @@ ac_help="$ac_help
enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer"
ac_help="$ac_help
- --enable-sjlj-exceptions
- arrange to use setjmp/longjmp exception handling"
-ac_help="$ac_help
- --enable-libunwind-exceptions force use libunwind for exceptions"
-ac_help="$ac_help
--enable-version-specific-runtime-libs
specify that runtime libraries should be
installed in a compiler-specific directory"
@@ -625,7 +627,7 @@ copy=cp
# - two terminals occur directly after each other
# - the path contains an element with a dot in it
echo $ac_n "checking LIBRARY_PATH variable""... $ac_c" 1>&6
-echo "configure:629: checking LIBRARY_PATH variable" >&5
+echo "configure:631: checking LIBRARY_PATH variable" >&5
case ${LIBRARY_PATH} in
[:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
library_path_setting="contains current directory"
@@ -650,7 +652,7 @@ fi
# - two terminals occur directly after each other
# - the path contains an element with a dot in it
echo $ac_n "checking GCC_EXEC_PREFIX variable""... $ac_c" 1>&6
-echo "configure:654: checking GCC_EXEC_PREFIX variable" >&5
+echo "configure:656: checking GCC_EXEC_PREFIX variable" >&5
case ${GCC_EXEC_PREFIX} in
[:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
gcc_exec_prefix_setting="contains current directory"
@@ -1015,6 +1017,45 @@ fi
+# Check whether --with-sysroot or --without-sysroot was given.
+if test "${with_sysroot+set}" = set; then
+ withval="$with_sysroot"
+
+ case ${exec_prefix} in
+ NONE)
+ case ${prefix} in
+ NONE) real_exec_prefix=/usr/local ;;
+ *) real_exec_prefix=${prefix} ;;
+ esac ;;
+ *) real_exec_prefix=${exec_prefix} ;;
+ esac
+
+ case ${with_sysroot} in
+ yes) TARGET_SYSTEM_ROOT='$(gcc_tooldir)/sys-root' ;;
+ '${gcc_tooldir}'*) TARGET_SYSTEM_ROOT=$with_sysroot ;;
+ '${exec_prefix}'*) TARGET_SYSTEM_ROOT='$(gcc_tooldir)/..'`echo ${with_sysroot} | sed 's,\${exec_prefix},,'` ;;
+ "${real_exec_prefix}"*)
+ real_exec_prefix_len_in_dots=`echo ${real_exec_prefix} | sed s,.,.,g`
+ TARGET_SYSTEM_ROOT='$(gcc_tooldir)/..'`echo ${with_sysroot} | sed "s,^$real_exec_prefix_len_in_dots,,"`
+ ;;
+ *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
+ esac
+
+ TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
+ CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR)'
+
+else
+
+ TARGET_SYSTEM_ROOT=
+ TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=0'
+ CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
+
+fi
+
+
+
+
+
# Determine the host, build, and target systems
ac_aux_dir=
for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
@@ -1063,7 +1104,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:1067: checking host system type" >&5
+echo "configure:1108: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@@ -1084,7 +1125,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:1088: checking target system type" >&5
+echo "configure:1129: checking target system type" >&5
target_alias=$target
case "$target_alias" in
@@ -1102,7 +1143,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$target" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:1106: checking build system type" >&5
+echo "configure:1147: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@@ -1150,7 +1191,7 @@ test "$program_transform_name" = "" && program_transform_name="s,x,x,"
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1154: checking for $ac_word" >&5
+echo "configure:1195: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1180,7 +1221,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1184: checking for $ac_word" >&5
+echo "configure:1225: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1231,7 +1272,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1235: checking for $ac_word" >&5
+echo "configure:1276: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1263,7 +1304,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1267: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1308: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1274,12 +1315,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 1278 "configure"
+#line 1319 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:1283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1324: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -1305,12 +1346,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1309: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1350: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1314: checking whether we are using GNU C" >&5
+echo "configure:1355: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1319,7 +1360,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1323: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1364: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@@ -1338,7 +1379,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1342: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1383: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1371,10 +1412,10 @@ fi
if test "x$CC" != xcc; then
echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6
-echo "configure:1375: checking whether $CC and cc understand -c and -o together" >&5
+echo "configure:1416: checking whether $CC and cc understand -c and -o together" >&5
else
echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6
-echo "configure:1378: checking whether cc understands -c and -o together" >&5
+echo "configure:1419: checking whether cc understands -c and -o together" >&5
fi
set dummy $CC; ac_cc="`echo $2 |
sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`"
@@ -1386,16 +1427,16 @@ else
# We do the test twice because some compilers refuse to overwrite an
# existing .o file with -o, though they will create one.
ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5'
-if { (eval echo configure:1390: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
- test -f conftest.o && { (eval echo configure:1391: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
+if { (eval echo configure:1431: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
+ test -f conftest.o && { (eval echo configure:1432: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
then
eval ac_cv_prog_cc_${ac_cc}_c_o=yes
if test "x$CC" != xcc; then
# Test first that cc exists at all.
- if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1396: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+ if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1437: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
ac_try='cc -c conftest.c -o conftest.o 1>&5'
- if { (eval echo configure:1398: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
- test -f conftest.o && { (eval echo configure:1399: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
+ if { (eval echo configure:1439: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
+ test -f conftest.o && { (eval echo configure:1440: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
then
# cc works too.
:
@@ -1441,7 +1482,7 @@ fi
# Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args.
set dummy ${ac_tool_prefix}gnatbind; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1445: checking for $ac_word" >&5
+echo "configure:1486: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1473,7 +1514,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "gnatbind", so it can be a program name with args.
set dummy gnatbind; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1477: checking for $ac_word" >&5
+echo "configure:1518: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1506,7 +1547,7 @@ fi
fi
echo $ac_n "checking for compiler driver that understands Ada""... $ac_c" 1>&6
-echo "configure:1510: checking for compiler driver that understands Ada" >&5
+echo "configure:1551: checking for compiler driver that understands Ada" >&5
if eval "test \"`echo '$''{'gcc_cv_prog_adac'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1551,21 +1592,21 @@ fi
echo $ac_n "checking whether ${CC-cc} accepts -Wno-long-long""... $ac_c" 1>&6
-echo "configure:1555: checking whether ${CC-cc} accepts -Wno-long-long" >&5
+echo "configure:1596: checking whether ${CC-cc} accepts -Wno-long-long" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_no_long_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
save_CFLAGS="$CFLAGS"
CFLAGS="-Wno-long-long"
cat > conftest.$ac_ext <<EOF
-#line 1562 "configure"
+#line 1603 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:1569: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1610: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_prog_cc_no_long_long=yes
else
@@ -1582,7 +1623,7 @@ echo "$ac_t""$ac_cv_prog_cc_no_long_long" 1>&6
if test x$have_gnat != xno ; then
echo $ac_n "checking whether ${ADAC} accepts -Wno-long-long""... $ac_c" 1>&6
-echo "configure:1586: checking whether ${ADAC} accepts -Wno-long-long" >&5
+echo "configure:1627: checking whether ${ADAC} accepts -Wno-long-long" >&5
if eval "test \"`echo '$''{'ac_cv_prog_adac_no_long_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1610,7 +1651,7 @@ fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1614: checking how to run the C preprocessor" >&5
+echo "configure:1655: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -1625,13 +1666,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 1629 "configure"
+#line 1670 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1635: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1676: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1642,13 +1683,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 1646 "configure"
+#line 1687 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1652: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1693: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1659,13 +1700,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 1663 "configure"
+#line 1704 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1669: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1710: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1690,21 +1731,21 @@ fi
echo "$ac_t""$CPP" 1>&6
echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:1694: checking for inline" >&5
+echo "configure:1735: checking for inline" >&5
if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do
cat > conftest.$ac_ext <<EOF
-#line 1701 "configure"
+#line 1742 "configure"
#include "confdefs.h"
int main() {
} $ac_kw foo() {
; return 0; }
EOF
-if { (eval echo configure:1708: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1749: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_inline=$ac_kw; break
else
@@ -1730,19 +1771,19 @@ EOF
esac
echo $ac_n "checking for volatile""... $ac_c" 1>&6
-echo "configure:1734: checking for volatile" >&5
+echo "configure:1775: checking for volatile" >&5
if eval "test \"`echo '$''{'gcc_cv_c_volatile'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1739 "configure"
+#line 1780 "configure"
#include "confdefs.h"
int main() {
volatile int foo;
; return 0; }
EOF
-if { (eval echo configure:1746: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1787: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_c_volatile=yes
else
@@ -1764,7 +1805,7 @@ fi
echo $ac_n "checking for long double""... $ac_c" 1>&6
-echo "configure:1768: checking for long double" >&5
+echo "configure:1809: checking for long double" >&5
if eval "test \"`echo '$''{'gcc_cv_c_long_double'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1772,7 +1813,7 @@ else
gcc_cv_c_long_double=yes
else
cat > conftest.$ac_ext <<EOF
-#line 1776 "configure"
+#line 1817 "configure"
#include "confdefs.h"
int main() {
@@ -1782,7 +1823,7 @@ long double foo = 0.0;
switch (0) case 0: case (sizeof(long double) >= sizeof(double)):;
; return 0; }
EOF
-if { (eval echo configure:1786: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1827: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_c_long_double=yes
else
@@ -1804,19 +1845,19 @@ EOF
fi
echo $ac_n "checking for long long int""... $ac_c" 1>&6
-echo "configure:1808: checking for long long int" >&5
+echo "configure:1849: checking for long long int" >&5
if eval "test \"`echo '$''{'ac_cv_c_long_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1813 "configure"
+#line 1854 "configure"
#include "confdefs.h"
int main() {
long long int i;
; return 0; }
EOF
-if { (eval echo configure:1820: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1861: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_long_long=yes
else
@@ -1836,19 +1877,19 @@ EOF
fi
echo $ac_n "checking for __int64""... $ac_c" 1>&6
-echo "configure:1840: checking for __int64" >&5
+echo "configure:1881: checking for __int64" >&5
if eval "test \"`echo '$''{'ac_cv_c___int64'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1845 "configure"
+#line 1886 "configure"
#include "confdefs.h"
int main() {
__int64 i;
; return 0; }
EOF
-if { (eval echo configure:1852: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c___int64=yes
else
@@ -1869,19 +1910,19 @@ EOF
fi
echo $ac_n "checking for built-in _Bool""... $ac_c" 1>&6
-echo "configure:1873: checking for built-in _Bool" >&5
+echo "configure:1914: checking for built-in _Bool" >&5
if eval "test \"`echo '$''{'gcc_cv_c__bool'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1878 "configure"
+#line 1919 "configure"
#include "confdefs.h"
int main() {
_Bool foo;
; return 0; }
EOF
-if { (eval echo configure:1885: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1926: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_c__bool=yes
else
@@ -1905,13 +1946,13 @@ fi
# sizeof(char) is 1 by definition.
echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:1909: checking size of short" >&5
+echo "configure:1950: checking size of short" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 1915 "configure"
+#line 1956 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -1921,7 +1962,7 @@ int main() {
switch (0) case 0: case (sizeof (short) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:1925: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1966: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_short=$ac_size
else
@@ -1944,13 +1985,13 @@ EOF
echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:1948: checking size of int" >&5
+echo "configure:1989: checking size of int" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 1954 "configure"
+#line 1995 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -1960,7 +2001,7 @@ int main() {
switch (0) case 0: case (sizeof (int) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:1964: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2005: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_int=$ac_size
else
@@ -1983,13 +2024,13 @@ EOF
echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:1987: checking size of long" >&5
+echo "configure:2028: checking size of long" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 1993 "configure"
+#line 2034 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -1999,7 +2040,7 @@ int main() {
switch (0) case 0: case (sizeof (long) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:2003: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2044: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_long=$ac_size
else
@@ -2023,13 +2064,13 @@ EOF
if test $ac_cv_c_long_long = yes; then
echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:2027: checking size of long long" >&5
+echo "configure:2068: checking size of long long" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 2033 "configure"
+#line 2074 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -2039,7 +2080,7 @@ int main() {
switch (0) case 0: case (sizeof (long long) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:2043: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2084: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_long_long=$ac_size
else
@@ -2064,13 +2105,13 @@ EOF
fi
if test $ac_cv_c___int64 = yes; then
echo $ac_n "checking size of __int64""... $ac_c" 1>&6
-echo "configure:2068: checking size of __int64" >&5
+echo "configure:2109: checking size of __int64" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof___int64'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 2074 "configure"
+#line 2115 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -2080,7 +2121,7 @@ int main() {
switch (0) case 0: case (sizeof (__int64) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:2084: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof___int64=$ac_size
else
@@ -2105,12 +2146,12 @@ EOF
fi
echo $ac_n "checking execution character set""... $ac_c" 1>&6
-echo "configure:2109: checking execution character set" >&5
+echo "configure:2150: checking execution character set" >&5
if eval "test \"`echo '$''{'ac_cv_c_charset'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2114 "configure"
+#line 2155 "configure"
#include "confdefs.h"
#if '\n' == 0x0A && ' ' == 0x20 && '0' == 0x30 \
&& 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21
@@ -2126,7 +2167,7 @@ rm -f conftest*
if test x${ac_cv_c_charset+set} != xset; then
cat > conftest.$ac_ext <<EOF
-#line 2130 "configure"
+#line 2171 "configure"
#include "confdefs.h"
#if '\n' == 0x15 && ' ' == 0x40 && '0' == 0xF0 \
&& 'A' == 0xC1 && 'a' == 0x81 && '!' == 0x5A
@@ -2187,7 +2228,7 @@ esac
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:2191: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:2232: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2215,7 +2256,7 @@ fi
echo $ac_n "checking whether a default assembler was specified""... $ac_c" 1>&6
-echo "configure:2219: checking whether a default assembler was specified" >&5
+echo "configure:2260: checking whether a default assembler was specified" >&5
if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
if test x"$gas_flag" = x"no"; then
echo "$ac_t""yes ($DEFAULT_ASSEMBLER)" 1>&6
@@ -2227,7 +2268,7 @@ else
fi
echo $ac_n "checking whether a default linker was specified""... $ac_c" 1>&6
-echo "configure:2231: checking whether a default linker was specified" >&5
+echo "configure:2272: checking whether a default linker was specified" >&5
if test x"${DEFAULT_LINKER+set}" = x"set"; then
if test x"$gnu_ld_flag" = x"no"; then
echo "$ac_t""yes ($DEFAULT_LINKER)" 1>&6
@@ -2239,12 +2280,12 @@ else
fi
echo $ac_n "checking for GNU C library""... $ac_c" 1>&6
-echo "configure:2243: checking for GNU C library" >&5
+echo "configure:2284: checking for GNU C library" >&5
if eval "test \"`echo '$''{'gcc_cv_glibc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2248 "configure"
+#line 2289 "configure"
#include "confdefs.h"
#include <features.h>
int main() {
@@ -2254,7 +2295,7 @@ int main() {
#endif
; return 0; }
EOF
-if { (eval echo configure:2258: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2299: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_glibc=yes
else
@@ -2275,12 +2316,12 @@ EOF
fi
# Find some useful tools
-for ac_prog in mawk gawk nawk awk
+for ac_prog in gawk mawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2284: checking for $ac_word" >&5
+echo "configure:2325: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2310,7 +2351,7 @@ test -n "$AWK" && break
done
echo $ac_n "checking whether ln works""... $ac_c" 1>&6
-echo "configure:2314: checking whether ln works" >&5
+echo "configure:2355: checking whether ln works" >&5
if eval "test \"`echo '$''{'gcc_cv_prog_LN'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2342,7 +2383,7 @@ else
fi
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:2346: checking whether ln -s works" >&5
+echo "configure:2387: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'gcc_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2376,7 +2417,7 @@ fi
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2380: checking for $ac_word" >&5
+echo "configure:2421: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2414,7 +2455,7 @@ fi
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:2418: checking for a BSD compatible install" >&5
+echo "configure:2459: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2465,12 +2506,12 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:2469: checking for ANSI C header files" >&5
+echo "configure:2510: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2474 "configure"
+#line 2515 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -2478,7 +2519,7 @@ else
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2482: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2523: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2495,7 +2536,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 2499 "configure"
+#line 2540 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@@ -2513,7 +2554,7 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 2517 "configure"
+#line 2558 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@@ -2534,7 +2575,7 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
-#line 2538 "configure"
+#line 2579 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -2545,7 +2586,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
-if { (eval echo configure:2549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -2569,12 +2610,12 @@ EOF
fi
echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:2573: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:2614: checking whether time.h and sys/time.h may both be included" >&5
if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2578 "configure"
+#line 2619 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/time.h>
@@ -2583,7 +2624,7 @@ int main() {
struct tm *tp;
; return 0; }
EOF
-if { (eval echo configure:2587: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2628: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_time=yes
else
@@ -2604,19 +2645,19 @@ EOF
fi
echo $ac_n "checking for working stdbool.h""... $ac_c" 1>&6
-echo "configure:2608: checking for working stdbool.h" >&5
+echo "configure:2649: checking for working stdbool.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdbool_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2613 "configure"
+#line 2654 "configure"
#include "confdefs.h"
#include <stdbool.h>
int main() {
bool foo = false;
; return 0; }
EOF
-if { (eval echo configure:2620: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2661: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_stdbool_h=yes
else
@@ -2637,12 +2678,12 @@ EOF
fi
echo $ac_n "checking whether string.h and strings.h may both be included""... $ac_c" 1>&6
-echo "configure:2641: checking whether string.h and strings.h may both be included" >&5
+echo "configure:2682: checking whether string.h and strings.h may both be included" >&5
if eval "test \"`echo '$''{'gcc_cv_header_string'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2646 "configure"
+#line 2687 "configure"
#include "confdefs.h"
#include <string.h>
#include <strings.h>
@@ -2650,7 +2691,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:2654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2695: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_header_string=yes
else
@@ -2671,12 +2712,12 @@ EOF
fi
echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:2675: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:2716: checking for sys/wait.h that is POSIX.1 compatible" >&5
if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2680 "configure"
+#line 2721 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/wait.h>
@@ -2692,7 +2733,7 @@ wait (&s);
s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
; return 0; }
EOF
-if { (eval echo configure:2696: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2737: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_sys_wait_h=yes
else
@@ -2719,17 +2760,17 @@ for ac_hdr in limits.h stddef.h string.h strings.h stdlib.h time.h \
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2723: checking for $ac_hdr" >&5
+echo "configure:2764: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2728 "configure"
+#line 2769 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2733: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2774: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2759,17 +2800,17 @@ done
# Check for thread headers.
ac_safe=`echo "thread.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for thread.h""... $ac_c" 1>&6
-echo "configure:2763: checking for thread.h" >&5
+echo "configure:2804: checking for thread.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2768 "configure"
+#line 2809 "configure"
#include "confdefs.h"
#include <thread.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2773: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2814: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2793,17 +2834,17 @@ fi
ac_safe=`echo "pthread.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for pthread.h""... $ac_c" 1>&6
-echo "configure:2797: checking for pthread.h" >&5
+echo "configure:2838: checking for pthread.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2802 "configure"
+#line 2843 "configure"
#include "confdefs.h"
#include <pthread.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2807: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2848: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2828,12 +2869,12 @@ fi
# These tests can't be done till we know if we have limits.h.
echo $ac_n "checking for CHAR_BIT""... $ac_c" 1>&6
-echo "configure:2832: checking for CHAR_BIT" >&5
+echo "configure:2873: checking for CHAR_BIT" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_char_bit'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2837 "configure"
+#line 2878 "configure"
#include "confdefs.h"
#ifdef HAVE_LIMITS_H
#include <limits.h>
@@ -2858,7 +2899,7 @@ fi
echo "$ac_t""$gcc_cv_decl_char_bit" 1>&6
if test $gcc_cv_decl_char_bit = no; then
echo $ac_n "checking number of bits in a byte""... $ac_c" 1>&6
-echo "configure:2862: checking number of bits in a byte" >&5
+echo "configure:2903: checking number of bits in a byte" >&5
if eval "test \"`echo '$''{'gcc_cv_c_nbby'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2866,7 +2907,7 @@ else
gcc_cv_c_nbby=
while test $i -lt 65; do
cat > conftest.$ac_ext <<EOF
-#line 2870 "configure"
+#line 2911 "configure"
#include "confdefs.h"
int main() {
@@ -2876,7 +2917,7 @@ switch(0) {
; }
; return 0; }
EOF
-if { (eval echo configure:2880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_c_nbby=$i; break
else
@@ -2901,7 +2942,7 @@ EOF
fi
fi
echo $ac_n "checking byte ordering""... $ac_c" 1>&6
-echo "configure:2905: checking byte ordering" >&5
+echo "configure:2946: checking byte ordering" >&5
if eval "test \"`echo '$''{'ac_cv_c_compile_endian'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2915,7 +2956,7 @@ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$a
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext <<EOF
-#line 2919 "configure"
+#line 2960 "configure"
#include "confdefs.h"
#ifdef HAVE_LIMITS_H
@@ -2935,7 +2976,7 @@ cat > conftest.$ac_ext <<EOF
'X', '\n'
};
EOF
-if { (eval echo configure:2939: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2980: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
od -c conftest.o |
sed 's/^[0-7]*[ ]*/ /
s/\*/./g
@@ -2974,7 +3015,7 @@ EOF
fi
echo $ac_n "checking floating point format""... $ac_c" 1>&6
-echo "configure:2978: checking floating point format" >&5
+echo "configure:3019: checking floating point format" >&5
if eval "test \"`echo '$''{'ac_cv_c_float_format'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2987,7 +3028,7 @@ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$a
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext <<EOF
-#line 2991 "configure"
+#line 3032 "configure"
#include "confdefs.h"
/* This will not work unless sizeof(double) == 8. */
extern char sizeof_double_must_be_8 [sizeof(double) == 8 ? 1 : -1];
@@ -3009,7 +3050,7 @@ struct possibility table [] =
C(-5.22995989424860458374e+10) /* IBMHEXFP - s/390 format, EBCDIC */
};
EOF
-if { (eval echo configure:3013: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3054: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
od -c conftest.o |
sed 's/^[0-7]*[ ]*/ /
s/\*/./g
@@ -3098,7 +3139,7 @@ fi
# Extract the first word of "mktemp", so it can be a program name with args.
set dummy mktemp; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3102: checking for $ac_word" >&5
+echo "configure:3143: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_have_mktemp_command'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3137,7 +3178,7 @@ else
# Extract the first word of "makeinfo", so it can be a program name with args.
set dummy makeinfo; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3141: checking for $ac_word" >&5
+echo "configure:3182: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3166,13 +3207,13 @@ fi
if test -n "$MAKEINFO"; then
# Found it, now check the version.
echo $ac_n "checking for modern makeinfo""... $ac_c" 1>&6
-echo "configure:3170: checking for modern makeinfo" >&5
+echo "configure:3211: checking for modern makeinfo" >&5
if eval "test \"`echo '$''{'gcc_cv_prog_makeinfo_modern'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_prog_version=`$MAKEINFO --version 2>&1 |
sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
- echo "configure:3176: version of makeinfo is $ac_prog_version" >&5
+ echo "configure:3217: version of makeinfo is $ac_prog_version" >&5
case $ac_prog_version in
'') gcc_cv_prog_makeinfo_modern=no;;
4.[1-9]*)
@@ -3200,7 +3241,7 @@ fi
# Is pod2man recent enough to regenerate manpages?
echo $ac_n "checking for recent Pod::Man""... $ac_c" 1>&6
-echo "configure:3204: checking for recent Pod::Man" >&5
+echo "configure:3245: checking for recent Pod::Man" >&5
if (perl -e 'use 1.10 Pod::Man') >/dev/null 2>&1; then
echo "$ac_t""yes" 1>&6
GENERATED_MANPAGES=generated-manpages
@@ -3216,7 +3257,7 @@ else
# Extract the first word of "flex", so it can be a program name with args.
set dummy flex; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3220: checking for $ac_word" >&5
+echo "configure:3261: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3253,7 +3294,7 @@ else
# Extract the first word of "bison", so it can be a program name with args.
set dummy bison; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3257: checking for $ac_word" >&5
+echo "configure:3298: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3285,7 +3326,7 @@ fi
# These libraries may be used by collect2.
# We may need a special search path to get them linked.
echo $ac_n "checking for collect2 libraries""... $ac_c" 1>&6
-echo "configure:3289: checking for collect2 libraries" >&5
+echo "configure:3330: checking for collect2 libraries" >&5
if eval "test \"`echo '$''{'gcc_cv_collect2_libs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3296,7 +3337,7 @@ for libs in '' -lld -lmld \
do
LIBS="$libs"
cat > conftest.$ac_ext <<EOF
-#line 3300 "configure"
+#line 3341 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3307,7 +3348,7 @@ int main() {
ldopen()
; return 0; }
EOF
-if { (eval echo configure:3311: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gcc_cv_collect2_libs="$libs"; break
else
@@ -3333,14 +3374,14 @@ save_LIBS="$LIBS"
LIBS=
echo $ac_n "checking for library containing exc_resume""... $ac_c" 1>&6
-echo "configure:3337: checking for library containing exc_resume" >&5
+echo "configure:3378: checking for library containing exc_resume" >&5
if eval "test \"`echo '$''{'ac_cv_search_exc_resume'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_exc_resume="no"
cat > conftest.$ac_ext <<EOF
-#line 3344 "configure"
+#line 3385 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3351,7 +3392,7 @@ int main() {
exc_resume()
; return 0; }
EOF
-if { (eval echo configure:3355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_exc_resume="none required"
else
@@ -3362,7 +3403,7 @@ rm -f conftest*
test "$ac_cv_search_exc_resume" = "no" && for i in exc; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3366 "configure"
+#line 3407 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3373,7 +3414,7 @@ int main() {
exc_resume()
; return 0; }
EOF
-if { (eval echo configure:3377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_exc_resume="-l$i"
break
@@ -3402,12 +3443,12 @@ LIBS="$save_LIBS"
echo $ac_n "checking for preprocessor stringizing operator""... $ac_c" 1>&6
-echo "configure:3406: checking for preprocessor stringizing operator" >&5
+echo "configure:3447: checking for preprocessor stringizing operator" >&5
if eval "test \"`echo '$''{'ac_cv_c_stringize'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3411 "configure"
+#line 3452 "configure"
#include "confdefs.h"
#define x(y) #y
@@ -3440,12 +3481,12 @@ echo "$ac_t""${ac_cv_c_stringize}" 1>&6
# Use <inttypes.h> only if it exists,
# doesn't clash with <sys/types.h>, and declares intmax_t.
echo $ac_n "checking for inttypes.h""... $ac_c" 1>&6
-echo "configure:3444: checking for inttypes.h" >&5
+echo "configure:3485: checking for inttypes.h" >&5
if eval "test \"`echo '$''{'gcc_cv_header_inttypes_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3449 "configure"
+#line 3490 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <inttypes.h>
@@ -3453,7 +3494,7 @@ int main() {
intmax_t i = -1;
; return 0; }
EOF
-if { (eval echo configure:3457: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3498: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_header_inttypes_h=yes
else
@@ -3480,12 +3521,12 @@ for ac_func in times clock dup2 kill getrlimit setrlimit atoll atoq \
scandir alphasort
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3484: checking for $ac_func" >&5
+echo "configure:3525: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3489 "configure"
+#line 3530 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -3508,7 +3549,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:3512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3553: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -3534,12 +3575,12 @@ done
echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:3538: checking for ssize_t" >&5
+echo "configure:3579: checking for ssize_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3543 "configure"
+#line 3584 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -3570,12 +3611,12 @@ fi
# Try to determine the array type of the second argument of getgroups
# for the target system (int or gid_t).
echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:3574: checking for uid_t in sys/types.h" >&5
+echo "configure:3615: checking for uid_t in sys/types.h" >&5
if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3579 "configure"
+#line 3620 "configure"
#include "confdefs.h"
#include <sys/types.h>
EOF
@@ -3604,7 +3645,7 @@ EOF
fi
echo $ac_n "checking type of array argument to getgroups""... $ac_c" 1>&6
-echo "configure:3608: checking type of array argument to getgroups" >&5
+echo "configure:3649: checking type of array argument to getgroups" >&5
if eval "test \"`echo '$''{'ac_cv_type_getgroups'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3612,7 +3653,7 @@ else
ac_cv_type_getgroups=cross
else
cat > conftest.$ac_ext <<EOF
-#line 3616 "configure"
+#line 3657 "configure"
#include "confdefs.h"
/* Thanks to Mike Rendell for this test. */
@@ -3637,7 +3678,7 @@ main()
}
EOF
-if { (eval echo configure:3641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_type_getgroups=gid_t
else
@@ -3651,7 +3692,7 @@ fi
if test $ac_cv_type_getgroups = cross; then
cat > conftest.$ac_ext <<EOF
-#line 3655 "configure"
+#line 3696 "configure"
#include "confdefs.h"
#include <unistd.h>
EOF
@@ -3692,7 +3733,7 @@ fi
echo $ac_n "checking whether the printf functions support %p""... $ac_c" 1>&6
-echo "configure:3696: checking whether the printf functions support %p" >&5
+echo "configure:3737: checking whether the printf functions support %p" >&5
if eval "test \"`echo '$''{'gcc_cv_func_printf_ptr'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3700,7 +3741,7 @@ else
gcc_cv_func_printf_ptr=no
else
cat > conftest.$ac_ext <<EOF
-#line 3704 "configure"
+#line 3745 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -3713,7 +3754,7 @@ int main()
return (p != q);
}
EOF
-if { (eval echo configure:3717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3758: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
gcc_cv_func_printf_ptr=yes
else
@@ -3751,12 +3792,12 @@ case "${host}" in
;;
esac
echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:3755: checking for pid_t" >&5
+echo "configure:3796: checking for pid_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3760 "configure"
+#line 3801 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -3785,17 +3826,17 @@ fi
ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
-echo "configure:3789: checking for vfork.h" >&5
+echo "configure:3830: checking for vfork.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3794 "configure"
+#line 3835 "configure"
#include "confdefs.h"
#include <vfork.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3799: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -3820,18 +3861,18 @@ else
fi
echo $ac_n "checking for working vfork""... $ac_c" 1>&6
-echo "configure:3824: checking for working vfork" >&5
+echo "configure:3865: checking for working vfork" >&5
if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$cross_compiling" = yes; then
echo $ac_n "checking for vfork""... $ac_c" 1>&6
-echo "configure:3830: checking for vfork" >&5
+echo "configure:3871: checking for vfork" >&5
if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3835 "configure"
+#line 3876 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char vfork(); below. */
@@ -3854,7 +3895,7 @@ vfork();
; return 0; }
EOF
-if { (eval echo configure:3858: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_vfork=yes"
else
@@ -3876,7 +3917,7 @@ fi
ac_cv_func_vfork_works=$ac_cv_func_vfork
else
cat > conftest.$ac_ext <<EOF
-#line 3880 "configure"
+#line 3921 "configure"
#include "confdefs.h"
/* Thanks to Paul Eggert for this test. */
#include <stdio.h>
@@ -3971,7 +4012,7 @@ main() {
}
}
EOF
-if { (eval echo configure:3975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_vfork_works=yes
else
@@ -3996,12 +4037,12 @@ fi
for ac_func in getpagesize
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4000: checking for $ac_func" >&5
+echo "configure:4041: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4005 "configure"
+#line 4046 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4024,7 +4065,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4028: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4295,7 +4336,7 @@ main ()
EOF
echo $ac_n "checking for working mmap from /dev/zero""... $ac_c" 1>&6
-echo "configure:4299: checking for working mmap from /dev/zero" >&5
+echo "configure:4340: checking for working mmap from /dev/zero" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_dev_zero'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4311,11 +4352,11 @@ else
esac
else
cat > conftest.$ac_ext <<EOF
-#line 4315 "configure"
+#line 4356 "configure"
#include "confdefs.h"
#include "ct-mmap.inc"
EOF
-if { (eval echo configure:4319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_dev_zero=yes
else
@@ -4342,7 +4383,7 @@ EOF
fi
echo $ac_n "checking for working mmap with MAP_ANON(YMOUS)""... $ac_c" 1>&6
-echo "configure:4346: checking for working mmap with MAP_ANON(YMOUS)" >&5
+echo "configure:4387: checking for working mmap with MAP_ANON(YMOUS)" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_anon'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4352,12 +4393,12 @@ else
ac_cv_func_mmap_anon=no
else
cat > conftest.$ac_ext <<EOF
-#line 4356 "configure"
+#line 4397 "configure"
#include "confdefs.h"
#define USE_MAP_ANON
#include "ct-mmap.inc"
EOF
-if { (eval echo configure:4361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_anon=yes
else
@@ -4385,7 +4426,7 @@ fi
rm -f ct-mmap.inc
echo $ac_n "checking for working mmap of a file""... $ac_c" 1>&6
-echo "configure:4389: checking for working mmap of a file" >&5
+echo "configure:4430: checking for working mmap of a file" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_file'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4400,7 +4441,7 @@ if test "$cross_compiling" = yes; then
ac_cv_func_mmap_file=no
else
cat > conftest.$ac_ext <<EOF
-#line 4404 "configure"
+#line 4445 "configure"
#include "confdefs.h"
/* Test by Zack Weinberg. Modified from MMAP_ANYWHERE test by
@@ -4437,7 +4478,7 @@ int main()
exit(0);
}
EOF
-if { (eval echo configure:4441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_file=yes
else
@@ -4476,7 +4517,7 @@ fi
echo $ac_n "checking for iconv""... $ac_c" 1>&6
-echo "configure:4480: checking for iconv" >&5
+echo "configure:4521: checking for iconv" >&5
if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4484,7 +4525,7 @@ else
am_cv_func_iconv="no, consider installing GNU libiconv"
am_cv_lib_iconv=no
cat > conftest.$ac_ext <<EOF
-#line 4488 "configure"
+#line 4529 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <iconv.h>
@@ -4494,7 +4535,7 @@ iconv_t cd = iconv_open("","");
iconv_close(cd);
; return 0; }
EOF
-if { (eval echo configure:4498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4539: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_func_iconv=yes
else
@@ -4506,7 +4547,7 @@ rm -f conftest*
am_save_LIBS="$LIBS"
LIBS="$LIBS $am_cv_libiconv_ldpath -liconv"
cat > conftest.$ac_ext <<EOF
-#line 4510 "configure"
+#line 4551 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <iconv.h>
@@ -4516,7 +4557,7 @@ iconv_t cd = iconv_open("","");
iconv_close(cd);
; return 0; }
EOF
-if { (eval echo configure:4520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_lib_iconv=yes
am_cv_func_iconv=yes
@@ -4537,13 +4578,13 @@ echo "$ac_t""$am_cv_func_iconv" 1>&6
EOF
echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6
-echo "configure:4541: checking for iconv declaration" >&5
+echo "configure:4582: checking for iconv declaration" >&5
if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4547 "configure"
+#line 4588 "configure"
#include "confdefs.h"
#include <stdlib.h>
@@ -4562,7 +4603,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:4566: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4607: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
am_cv_proto_iconv_arg1=""
else
@@ -4600,12 +4641,12 @@ for ac_func in getenv atol sbrk abort atof getcwd getwd \
do
ac_tr_decl=HAVE_DECL_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
echo $ac_n "checking whether $ac_func is declared""... $ac_c" 1>&6
-echo "configure:4604: checking whether $ac_func is declared" >&5
+echo "configure:4645: checking whether $ac_func is declared" >&5
if eval "test \"`echo '$''{'gcc_cv_have_decl_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4609 "configure"
+#line 4650 "configure"
#include "confdefs.h"
#undef $ac_tr_decl
#define $ac_tr_decl 1
@@ -4619,7 +4660,7 @@ char *(*pfn) = (char *(*)) $ac_func ;
#endif
; return 0; }
EOF
-if { (eval echo configure:4623: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4664: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval "gcc_cv_have_decl_$ac_func=yes"
else
@@ -4718,12 +4759,12 @@ for ac_func in getrlimit setrlimit getrusage
do
ac_tr_decl=HAVE_DECL_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
echo $ac_n "checking whether $ac_func is declared""... $ac_c" 1>&6
-echo "configure:4722: checking whether $ac_func is declared" >&5
+echo "configure:4763: checking whether $ac_func is declared" >&5
if eval "test \"`echo '$''{'gcc_cv_have_decl_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4727 "configure"
+#line 4768 "configure"
#include "confdefs.h"
#undef $ac_tr_decl
#define $ac_tr_decl 1
@@ -4741,7 +4782,7 @@ char *(*pfn) = (char *(*)) $ac_func ;
#endif
; return 0; }
EOF
-if { (eval echo configure:4745: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4786: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval "gcc_cv_have_decl_$ac_func=yes"
else
@@ -4783,12 +4824,12 @@ for ac_func in times
do
ac_tr_decl=HAVE_DECL_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
echo $ac_n "checking whether $ac_func is declared""... $ac_c" 1>&6
-echo "configure:4787: checking whether $ac_func is declared" >&5
+echo "configure:4828: checking whether $ac_func is declared" >&5
if eval "test \"`echo '$''{'gcc_cv_have_decl_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4792 "configure"
+#line 4833 "configure"
#include "confdefs.h"
#undef $ac_tr_decl
#define $ac_tr_decl 1
@@ -4806,7 +4847,7 @@ char *(*pfn) = (char *(*)) $ac_func ;
#endif
; return 0; }
EOF
-if { (eval echo configure:4810: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4851: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval "gcc_cv_have_decl_$ac_func=yes"
else
@@ -4840,13 +4881,13 @@ fi
# More time-related stuff.
echo $ac_n "checking for struct tms""... $ac_c" 1>&6
-echo "configure:4844: checking for struct tms" >&5
+echo "configure:4885: checking for struct tms" >&5
if eval "test \"`echo '$''{'ac_cv_struct_tms'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4850 "configure"
+#line 4891 "configure"
#include "confdefs.h"
#include "ansidecl.h"
@@ -4859,7 +4900,7 @@ int main() {
struct tms tms;
; return 0; }
EOF
-if { (eval echo configure:4863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4904: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_struct_tms=yes
else
@@ -4882,13 +4923,13 @@ fi
# use gcc_cv_* here because this doesn't match the behavior of AC_CHECK_TYPE.
# revisit after autoconf 2.50.
echo $ac_n "checking for clock_t""... $ac_c" 1>&6
-echo "configure:4886: checking for clock_t" >&5
+echo "configure:4927: checking for clock_t" >&5
if eval "test \"`echo '$''{'gcc_cv_type_clock_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4892 "configure"
+#line 4933 "configure"
#include "confdefs.h"
#include "ansidecl.h"
@@ -4898,7 +4939,7 @@ int main() {
clock_t x;
; return 0; }
EOF
-if { (eval echo configure:4902: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4943: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_type_clock_t=yes
else
@@ -4923,12 +4964,12 @@ CFLAGS="$saved_CFLAGS"
# mkdir takes a single argument on some systems.
echo $ac_n "checking if mkdir takes one argument""... $ac_c" 1>&6
-echo "configure:4927: checking if mkdir takes one argument" >&5
+echo "configure:4968: checking if mkdir takes one argument" >&5
if eval "test \"`echo '$''{'gcc_cv_mkdir_takes_one_arg'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4932 "configure"
+#line 4973 "configure"
#include "confdefs.h"
#include <sys/types.h>
@@ -4945,7 +4986,7 @@ int main() {
mkdir ("foo", 0);
; return 0; }
EOF
-if { (eval echo configure:4949: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4990: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_mkdir_takes_one_arg=no
else
@@ -4972,6 +5013,71 @@ objext='.o'
+# With Setjmp/Longjmp based exception handling.
+# Check whether --enable-sjlj-exceptions or --disable-sjlj-exceptions was given.
+if test "${enable_sjlj_exceptions+set}" = set; then
+ enableval="$enable_sjlj_exceptions"
+ sjlj=`if test $enableval = yes; then echo 1; else echo 0; fi`
+cat >> confdefs.h <<EOF
+#define CONFIG_SJLJ_EXCEPTIONS $sjlj
+EOF
+
+fi
+
+
+echo $ac_n "checking for main in -lunwind""... $ac_c" 1>&6
+echo "configure:5030: checking for main in -lunwind" >&5
+ac_lib_var=`echo unwind'_'main | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lunwind $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 5038 "configure"
+#include "confdefs.h"
+
+int main() {
+main()
+; return 0; }
+EOF
+if { (eval echo configure:5045: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ use_libunwind_default=yes
+else
+ echo "$ac_t""no" 1>&6
+use_libunwind_default=no
+fi
+
+# Use libunwind based exception handling.
+# Check whether --enable-libunwind-exceptions or --disable-libunwind-exceptions was given.
+if test "${enable_libunwind_exceptions+set}" = set; then
+ enableval="$enable_libunwind_exceptions"
+ use_libunwind_exceptions=$enableval
+else
+ use_libunwind_exceptions=$use_libunwind_default
+fi
+
+if test x"$use_libunwind_exceptions" = xyes; then
+ cat >> confdefs.h <<\EOF
+#define USE_LIBUNWIND_EXCEPTIONS 1
+EOF
+
+fi
+
target_gtfiles=
build_xm_file=
build_xm_defines=
@@ -5213,14 +5319,14 @@ fi
echo $ac_n "checking for library containing strerror""... $ac_c" 1>&6
-echo "configure:5217: checking for library containing strerror" >&5
+echo "configure:5323: checking for library containing strerror" >&5
if eval "test \"`echo '$''{'ac_cv_search_strerror'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_strerror="no"
cat > conftest.$ac_ext <<EOF
-#line 5224 "configure"
+#line 5330 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5231,7 +5337,7 @@ int main() {
strerror()
; return 0; }
EOF
-if { (eval echo configure:5235: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_strerror="none required"
else
@@ -5242,7 +5348,7 @@ rm -f conftest*
test "$ac_cv_search_strerror" = "no" && for i in cposix; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5246 "configure"
+#line 5352 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5253,7 +5359,7 @@ int main() {
strerror()
; return 0; }
EOF
-if { (eval echo configure:5257: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_strerror="-l$i"
break
@@ -5276,12 +5382,12 @@ fi
echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:5280: checking for working const" >&5
+echo "configure:5386: checking for working const" >&5
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5285 "configure"
+#line 5391 "configure"
#include "confdefs.h"
int main() {
@@ -5330,7 +5436,7 @@ ccp = (char const *const *) p;
; return 0; }
EOF
-if { (eval echo configure:5334: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5440: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_const=yes
else
@@ -5351,12 +5457,12 @@ EOF
fi
echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:5355: checking for off_t" >&5
+echo "configure:5461: checking for off_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5360 "configure"
+#line 5466 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -5384,12 +5490,12 @@ EOF
fi
echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:5388: checking for size_t" >&5
+echo "configure:5494: checking for size_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5393 "configure"
+#line 5499 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -5419,19 +5525,19 @@ fi
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
# for constant arguments. Useless!
echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:5423: checking for working alloca.h" >&5
+echo "configure:5529: checking for working alloca.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5428 "configure"
+#line 5534 "configure"
#include "confdefs.h"
#include <alloca.h>
int main() {
char *p = alloca(2 * sizeof(int));
; return 0; }
EOF
-if { (eval echo configure:5435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_header_alloca_h=yes
else
@@ -5452,12 +5558,12 @@ EOF
fi
echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:5456: checking for alloca" >&5
+echo "configure:5562: checking for alloca" >&5
if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5461 "configure"
+#line 5567 "configure"
#include "confdefs.h"
#ifdef __GNUC__
@@ -5485,7 +5591,7 @@ int main() {
char *p = (char *) alloca(1);
; return 0; }
EOF
-if { (eval echo configure:5489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_func_alloca_works=yes
else
@@ -5517,12 +5623,12 @@ EOF
echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:5521: checking whether alloca needs Cray hooks" >&5
+echo "configure:5627: checking whether alloca needs Cray hooks" >&5
if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5526 "configure"
+#line 5632 "configure"
#include "confdefs.h"
#if defined(CRAY) && ! defined(CRAY2)
webecray
@@ -5547,12 +5653,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
if test $ac_cv_os_cray = yes; then
for ac_func in _getb67 GETB67 getb67; do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5551: checking for $ac_func" >&5
+echo "configure:5657: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5556 "configure"
+#line 5662 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5575,7 +5681,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5602,7 +5708,7 @@ done
fi
echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:5606: checking stack direction for C alloca" >&5
+echo "configure:5712: checking stack direction for C alloca" >&5
if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -5610,7 +5716,7 @@ else
ac_cv_c_stack_direction=0
else
cat > conftest.$ac_ext <<EOF
-#line 5614 "configure"
+#line 5720 "configure"
#include "confdefs.h"
find_stack_direction ()
{
@@ -5629,7 +5735,7 @@ main ()
exit (find_stack_direction() < 0);
}
EOF
-if { (eval echo configure:5633: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5739: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_c_stack_direction=1
else
@@ -5652,12 +5758,12 @@ fi
echo $ac_n "checking whether we are using the GNU C Library 2.1 or newer""... $ac_c" 1>&6
-echo "configure:5656: checking whether we are using the GNU C Library 2.1 or newer" >&5
+echo "configure:5762: checking whether we are using the GNU C Library 2.1 or newer" >&5
if eval "test \"`echo '$''{'ac_cv_gnu_library_2_1'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5661 "configure"
+#line 5767 "configure"
#include "confdefs.h"
#include <features.h>
@@ -5693,17 +5799,17 @@ stdlib.h string.h unistd.h sys/param.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5697: checking for $ac_hdr" >&5
+echo "configure:5803: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5702 "configure"
+#line 5808 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5707: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5813: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -5734,12 +5840,12 @@ getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
strdup strtoul tsearch __argz_count __argz_stringify __argz_next
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5738: checking for $ac_func" >&5
+echo "configure:5844: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5743 "configure"
+#line 5849 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5762,7 +5868,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5803,7 +5909,7 @@ fi
echo $ac_n "checking for iconv""... $ac_c" 1>&6
-echo "configure:5807: checking for iconv" >&5
+echo "configure:5913: checking for iconv" >&5
if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -5811,7 +5917,7 @@ else
am_cv_func_iconv="no, consider installing GNU libiconv"
am_cv_lib_iconv=no
cat > conftest.$ac_ext <<EOF
-#line 5815 "configure"
+#line 5921 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <iconv.h>
@@ -5821,7 +5927,7 @@ iconv_t cd = iconv_open("","");
iconv_close(cd);
; return 0; }
EOF
-if { (eval echo configure:5825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_func_iconv=yes
else
@@ -5833,7 +5939,7 @@ rm -f conftest*
am_save_LIBS="$LIBS"
LIBS="$LIBS $am_cv_libiconv_ldpath -liconv"
cat > conftest.$ac_ext <<EOF
-#line 5837 "configure"
+#line 5943 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <iconv.h>
@@ -5843,7 +5949,7 @@ iconv_t cd = iconv_open("","");
iconv_close(cd);
; return 0; }
EOF
-if { (eval echo configure:5847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_lib_iconv=yes
am_cv_func_iconv=yes
@@ -5864,13 +5970,13 @@ echo "$ac_t""$am_cv_func_iconv" 1>&6
EOF
echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6
-echo "configure:5868: checking for iconv declaration" >&5
+echo "configure:5974: checking for iconv declaration" >&5
if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5874 "configure"
+#line 5980 "configure"
#include "confdefs.h"
#include <stdlib.h>
@@ -5889,7 +5995,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:5893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5999: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
am_cv_proto_iconv_arg1=""
else
@@ -5918,19 +6024,19 @@ EOF
echo $ac_n "checking for nl_langinfo and CODESET""... $ac_c" 1>&6
-echo "configure:5922: checking for nl_langinfo and CODESET" >&5
+echo "configure:6028: checking for nl_langinfo and CODESET" >&5
if eval "test \"`echo '$''{'am_cv_langinfo_codeset'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5927 "configure"
+#line 6033 "configure"
#include "confdefs.h"
#include <langinfo.h>
int main() {
char* cs = nl_langinfo(CODESET);
; return 0; }
EOF
-if { (eval echo configure:5934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6040: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_langinfo_codeset=yes
else
@@ -5953,19 +6059,19 @@ EOF
if test $ac_cv_header_locale_h = yes; then
echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:5957: checking for LC_MESSAGES" >&5
+echo "configure:6063: checking for LC_MESSAGES" >&5
if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5962 "configure"
+#line 6068 "configure"
#include "confdefs.h"
#include <locale.h>
int main() {
return LC_MESSAGES
; return 0; }
EOF
-if { (eval echo configure:5969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_val_LC_MESSAGES=yes
else
@@ -5986,7 +6092,7 @@ EOF
fi
fi
echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:5990: checking whether NLS is requested" >&5
+echo "configure:6096: checking whether NLS is requested" >&5
# Check whether --enable-nls or --disable-nls was given.
if test "${enable_nls+set}" = set; then
enableval="$enable_nls"
@@ -6009,7 +6115,7 @@ fi
EOF
echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:6013: checking whether included gettext is requested" >&5
+echo "configure:6119: checking whether included gettext is requested" >&5
# Check whether --with-included-gettext or --without-included-gettext was given.
if test "${with_included_gettext+set}" = set; then
withval="$with_included_gettext"
@@ -6029,17 +6135,17 @@ fi
ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:6033: checking for libintl.h" >&5
+echo "configure:6139: checking for libintl.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6038 "configure"
+#line 6144 "configure"
#include "confdefs.h"
#include <libintl.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6043: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6149: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -6060,12 +6166,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
EOF
echo $ac_n "checking for GNU gettext in libc""... $ac_c" 1>&6
-echo "configure:6064: checking for GNU gettext in libc" >&5
+echo "configure:6170: checking for GNU gettext in libc" >&5
if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6069 "configure"
+#line 6175 "configure"
#include "confdefs.h"
#include <libintl.h>
extern int _nl_msg_cat_cntr;
@@ -6074,7 +6180,7 @@ bindtextdomain ("", "");
return (int) gettext ("") + _nl_msg_cat_cntr
; return 0; }
EOF
-if { (eval echo configure:6078: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gt_cv_func_gnugettext1_libc=yes
else
@@ -6090,14 +6196,14 @@ echo "$ac_t""$gt_cv_func_gnugettext1_libc" 1>&6
if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
echo $ac_n "checking for GNU gettext in libintl""... $ac_c" 1>&6
-echo "configure:6094: checking for GNU gettext in libintl" >&5
+echo "configure:6200: checking for GNU gettext in libintl" >&5
if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libintl'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
gt_save_LIBS="$LIBS"
LIBS="$LIBS -lintl $LIBICONV"
cat > conftest.$ac_ext <<EOF
-#line 6101 "configure"
+#line 6207 "configure"
#include "confdefs.h"
#include <libintl.h>
extern int _nl_msg_cat_cntr;
@@ -6106,7 +6212,7 @@ bindtextdomain ("", "");
return (int) gettext ("") + _nl_msg_cat_cntr
; return 0; }
EOF
-if { (eval echo configure:6110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gt_cv_func_gnugettext1_libintl=yes
else
@@ -6139,12 +6245,12 @@ EOF
for ac_func in dcgettext
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6143: checking for $ac_func" >&5
+echo "configure:6249: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6148 "configure"
+#line 6254 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6167,7 +6273,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6171: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6196,7 +6302,7 @@ done
# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6200: checking for $ac_word" >&5
+echo "configure:6306: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6230,7 +6336,7 @@ fi
# Extract the first word of "gmsgfmt", so it can be a program name with args.
set dummy gmsgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6234: checking for $ac_word" >&5
+echo "configure:6340: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6267,7 +6373,7 @@ fi
# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6271: checking for $ac_word" >&5
+echo "configure:6377: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6317,7 +6423,7 @@ fi
# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6321: checking for $ac_word" >&5
+echo "configure:6427: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6351,7 +6457,7 @@ fi
# Extract the first word of "gmsgfmt", so it can be a program name with args.
set dummy gmsgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6355: checking for $ac_word" >&5
+echo "configure:6461: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6387,7 +6493,7 @@ fi
# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6391: checking for $ac_word" >&5
+echo "configure:6497: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6459,7 +6565,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6463: checking for $ac_word" >&5
+echo "configure:6569: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_INTLBISON'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6492,7 +6598,7 @@ done
ac_verc_fail=yes
else
echo $ac_n "checking version of bison""... $ac_c" 1>&6
-echo "configure:6496: checking version of bison" >&5
+echo "configure:6602: checking version of bison" >&5
ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
case $ac_prog_version in
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
@@ -6537,7 +6643,7 @@ EOF
if test "x$CATOBJEXT" != x; then
echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:6541: checking for catalogs to be installed" >&5
+echo "configure:6647: checking for catalogs to be installed" >&5
# Look for .po and .gmo files in the source directory.
CATALOGS=
XLINGUAS=
@@ -6595,7 +6701,7 @@ fi
case $host_os in
win32 | pe | cygwin* | mingw32* | uwin*)
echo $ac_n "checking whether windows registry support is requested""... $ac_c" 1>&6
-echo "configure:6599: checking whether windows registry support is requested" >&5
+echo "configure:6705: checking whether windows registry support is requested" >&5
if test "x$enable_win32_registry" != xno; then
cat >> confdefs.h <<\EOF
#define ENABLE_WIN32_REGISTRY 1
@@ -6604,14 +6710,14 @@ EOF
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for library containing RegOpenKeyExA""... $ac_c" 1>&6
-echo "configure:6608: checking for library containing RegOpenKeyExA" >&5
+echo "configure:6714: checking for library containing RegOpenKeyExA" >&5
if eval "test \"`echo '$''{'ac_cv_search_RegOpenKeyExA'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_RegOpenKeyExA="no"
cat > conftest.$ac_ext <<EOF
-#line 6615 "configure"
+#line 6721 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -6622,7 +6728,7 @@ int main() {
RegOpenKeyExA()
; return 0; }
EOF
-if { (eval echo configure:6626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_RegOpenKeyExA="none required"
else
@@ -6633,7 +6739,7 @@ rm -f conftest*
test "$ac_cv_search_RegOpenKeyExA" = "no" && for i in advapi32; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6637 "configure"
+#line 6743 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -6644,7 +6750,7 @@ int main() {
RegOpenKeyExA()
; return 0; }
EOF
-if { (eval echo configure:6648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6754: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_RegOpenKeyExA="-l$i"
break
@@ -6686,7 +6792,7 @@ esac
if test "x$enable_win32_registry" != xno; then
echo $ac_n "checking registry key on windows hosts""... $ac_c" 1>&6
-echo "configure:6690: checking registry key on windows hosts" >&5
+echo "configure:6796: checking registry key on windows hosts" >&5
cat >> confdefs.h <<EOF
#define WIN32_REGISTRY_KEY "$gcc_cv_win32_registry_key"
EOF
@@ -6822,12 +6928,9 @@ fi
# This prevents libgcc2 from containing any code which requires libc
# support.
inhibit_libc=
-if test x$host != x$target && test x$with_headers = x; then
+if { test x$host != x$target && test "x$with_headers" = x &&
+ test "x$with_sysroot" = x ; } || test x$with_newlib = xyes ; then
inhibit_libc=-Dinhibit_libc
-else
- if test x$with_newlib = xyes; then
- inhibit_libc=-Dinhibit_libc
- fi
fi
@@ -6900,7 +7003,7 @@ fi
# Figure out what assembler we will be using.
echo $ac_n "checking what assembler to use""... $ac_c" 1>&6
-echo "configure:6904: checking what assembler to use" >&5
+echo "configure:7007: checking what assembler to use" >&5
gcc_cv_as=
gcc_cv_gas_major_version=
gcc_cv_gas_minor_version=
@@ -6994,7 +7097,7 @@ fi
# Figure out what linker we will be using.
echo $ac_n "checking what linker to use""... $ac_c" 1>&6
-echo "configure:6998: checking what linker to use" >&5
+echo "configure:7101: checking what linker to use" >&5
gcc_cv_ld=
gcc_cv_gld_major_version=
gcc_cv_gld_minor_version=
@@ -7087,7 +7190,7 @@ fi
# Figure out what nm we will be using.
echo $ac_n "checking what nm to use""... $ac_c" 1>&6
-echo "configure:7091: checking what nm to use" >&5
+echo "configure:7194: checking what nm to use" >&5
if test -x nm$host_exeext; then
gcc_cv_nm=./nm$host_exeext
elif test "x$program_prefix" != xNONE; then
@@ -7099,7 +7202,7 @@ echo "$ac_t""$gcc_cv_nm" 1>&6
# Figure out what objdump we will be using.
echo $ac_n "checking what objdump to use""... $ac_c" 1>&6
-echo "configure:7103: checking what objdump to use" >&5
+echo "configure:7206: checking what objdump to use" >&5
if test -x objdump$host_exeext; then
gcc_cv_objdump=./objdump$host_exeext
elif test "x$program_prefix" != xNONE; then
@@ -7111,7 +7214,7 @@ echo "$ac_t""$gcc_cv_objdump" 1>&6
# Figure out what assembler alignment features are present.
echo $ac_n "checking assembler alignment features""... $ac_c" 1>&6
-echo "configure:7115: checking assembler alignment features" >&5
+echo "configure:7218: checking assembler alignment features" >&5
gcc_cv_as_alignment_features=none
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
# Gas version 2.6 and later support for .balign and .p2align.
@@ -7159,7 +7262,7 @@ fi
echo "$ac_t""$gcc_cv_as_alignment_features" 1>&6
echo $ac_n "checking assembler subsection support""... $ac_c" 1>&6
-echo "configure:7163: checking assembler subsection support" >&5
+echo "configure:7266: checking assembler subsection support" >&5
gcc_cv_as_subsections=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
@@ -7199,7 +7302,7 @@ fi
echo "$ac_t""$gcc_cv_as_subsections" 1>&6
echo $ac_n "checking assembler weak support""... $ac_c" 1>&6
-echo "configure:7203: checking assembler weak support" >&5
+echo "configure:7306: checking assembler weak support" >&5
gcc_cv_as_weak=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 2 -o "$gcc_cv_gas_major_version" -gt 2; then
@@ -7222,7 +7325,7 @@ fi
echo "$ac_t""$gcc_cv_as_weak" 1>&6
echo $ac_n "checking assembler hidden support""... $ac_c" 1>&6
-echo "configure:7226: checking assembler hidden support" >&5
+echo "configure:7329: checking assembler hidden support" >&5
gcc_cv_as_hidden=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 \
@@ -7294,7 +7397,7 @@ esac
echo $ac_n "checking assembler leb128 support""... $ac_c" 1>&6
-echo "configure:7298: checking assembler leb128 support" >&5
+echo "configure:7401: checking assembler leb128 support" >&5
gcc_cv_as_leb128=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 11 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
@@ -7339,7 +7442,7 @@ fi
echo "$ac_t""$gcc_cv_as_leb128" 1>&6
echo $ac_n "checking assembler eh_frame optimization""... $ac_c" 1>&6
-echo "configure:7343: checking assembler eh_frame optimization" >&5
+echo "configure:7446: checking assembler eh_frame optimization" >&5
gcc_cv_as_eh_frame=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
@@ -7420,7 +7523,7 @@ fi
echo "$ac_t""$gcc_cv_as_eh_frame" 1>&6
echo $ac_n "checking assembler section merging support""... $ac_c" 1>&6
-echo "configure:7424: checking assembler section merging support" >&5
+echo "configure:7527: checking assembler section merging support" >&5
gcc_cv_as_shf_merge=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
@@ -7443,7 +7546,7 @@ fi
echo "$ac_t""$gcc_cv_as_shf_merge" 1>&6
echo $ac_n "checking assembler thread-local storage support""... $ac_c" 1>&6
-echo "configure:7447: checking assembler thread-local storage support" >&5
+echo "configure:7550: checking assembler thread-local storage support" >&5
gcc_cv_as_tls=no
conftest_s=
tls_first_major=
@@ -7535,7 +7638,7 @@ case "$target" in
# All TARGET_ABI_OSF targets.
alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*)
echo $ac_n "checking assembler supports explicit relocations""... $ac_c" 1>&6
-echo "configure:7539: checking assembler supports explicit relocations" >&5
+echo "configure:7642: checking assembler supports explicit relocations" >&5
if eval "test \"`echo '$''{'gcc_cv_as_explicit_relocs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -7585,7 +7688,7 @@ EOF
;;
sparc*-*-*)
echo $ac_n "checking assembler .register pseudo-op support""... $ac_c" 1>&6
-echo "configure:7589: checking assembler .register pseudo-op support" >&5
+echo "configure:7692: checking assembler .register pseudo-op support" >&5
if eval "test \"`echo '$''{'gcc_cv_as_register_pseudo_op'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -7613,7 +7716,7 @@ EOF
fi
echo $ac_n "checking assembler supports -relax""... $ac_c" 1>&6
-echo "configure:7617: checking assembler supports -relax" >&5
+echo "configure:7720: checking assembler supports -relax" >&5
if eval "test \"`echo '$''{'gcc_cv_as_relax_opt'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -7641,7 +7744,7 @@ EOF
fi
echo $ac_n "checking assembler and linker support unaligned pc related relocs""... $ac_c" 1>&6
-echo "configure:7645: checking assembler and linker support unaligned pc related relocs" >&5
+echo "configure:7748: checking assembler and linker support unaligned pc related relocs" >&5
if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -7668,7 +7771,7 @@ EOF
fi
echo $ac_n "checking assembler and linker support unaligned pc related relocs against hidden symbols""... $ac_c" 1>&6
-echo "configure:7672: checking assembler and linker support unaligned pc related relocs against hidden symbols" >&5
+echo "configure:7775: checking assembler and linker support unaligned pc related relocs against hidden symbols" >&5
if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel_hidden'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -7708,7 +7811,7 @@ EOF
fi
echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6
-echo "configure:7713: checking for assembler offsetable %lo() support" >&5
+echo "configure:7815: checking for assembler offsetable %lo() support" >&5
if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -7747,7 +7850,7 @@ EOF
i[34567]86-*-* | x86_64-*-*)
echo $ac_n "checking assembler instructions""... $ac_c" 1>&6
-echo "configure:7753: checking assembler instructions" >&5
+echo "configure:7854: checking assembler instructions" >&5
gcc_cv_as_instructions=
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2; then
@@ -7774,7 +7877,7 @@ EOF
echo "$ac_t""$gcc_cv_as_instructions" 1>&6
echo $ac_n "checking assembler GOTOFF in data directives""... $ac_c" 1>&6
-echo "configure:7780: checking assembler GOTOFF in data directives" >&5
+echo "configure:7881: checking assembler GOTOFF in data directives" >&5
gcc_cv_as_gotoff_in_data=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x
then
@@ -7804,7 +7907,7 @@ EOF
esac
echo $ac_n "checking assembler dwarf2 debug_line support""... $ac_c" 1>&6
-echo "configure:7810: checking assembler dwarf2 debug_line support" >&5
+echo "configure:7911: checking assembler dwarf2 debug_line support" >&5
gcc_cv_as_dwarf2_debug_line=no
# ??? Not all targets support dwarf2 debug_line, even within a version
# of gas. Moreover, we need to emit a valid instruction to trigger any
@@ -7860,7 +7963,7 @@ fi
echo "$ac_t""$gcc_cv_as_dwarf2_debug_line" 1>&6
echo $ac_n "checking assembler --gdwarf2 support""... $ac_c" 1>&6
-echo "configure:7866: checking assembler --gdwarf2 support" >&5
+echo "configure:7967: checking assembler --gdwarf2 support" >&5
gcc_cv_as_gdwarf2_flag=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
then
@@ -7889,7 +7992,7 @@ fi
echo "$ac_t""$gcc_cv_as_gdwarf2_flag" 1>&6
echo $ac_n "checking assembler --gstabs support""... $ac_c" 1>&6
-echo "configure:7895: checking assembler --gstabs support" >&5
+echo "configure:7996: checking assembler --gstabs support" >&5
gcc_cv_as_gstabs_flag=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
then
@@ -7917,7 +8020,7 @@ fi
echo "$ac_t""$gcc_cv_as_gstabs_flag" 1>&6
echo $ac_n "checking linker PT_GNU_EH_FRAME support""... $ac_c" 1>&6
-echo "configure:7923: checking linker PT_GNU_EH_FRAME support" >&5
+echo "configure:8024: checking linker PT_GNU_EH_FRAME support" >&5
gcc_cv_ld_eh_frame_hdr=no
if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then
@@ -7941,7 +8044,7 @@ echo "$ac_t""$gcc_cv_ld_eh_frame_hdr" 1>&6
case "$target" in
mips*-*-*)
echo $ac_n "checking whether libgloss uses STARTUP directives consistently""... $ac_c" 1>&6
-echo "configure:7947: checking whether libgloss uses STARTUP directives consistently" >&5
+echo "configure:8048: checking whether libgloss uses STARTUP directives consistently" >&5
gcc_cv_mips_libgloss_startup=no
gcc_cv_libgloss_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/libgloss
if test "x$exec_prefix" = xNONE; then
@@ -8145,7 +8248,7 @@ fi
echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:8151: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:8252: checking whether to enable maintainer-specific portions of Makefiles" >&5
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then
enableval="$enable_maintainer_mode"
@@ -8163,34 +8266,6 @@ else
MAINT='#'
fi
-# With Setjmp/Longjmp based exception handling.
-# Check whether --enable-sjlj-exceptions or --disable-sjlj-exceptions was given.
-if test "${enable_sjlj_exceptions+set}" = set; then
- enableval="$enable_sjlj_exceptions"
- sjlj=`if test $enableval = yes; then echo 1; else echo 0; fi`
-cat >> confdefs.h <<EOF
-#define CONFIG_SJLJ_EXCEPTIONS $sjlj
-EOF
-
-fi
-
-
-# Use libunwind based exception handling.
-# Check whether --enable-libunwind-exceptions or --disable-libunwind-exceptions was given.
-if test "${enable_libunwind_exceptions+set}" = set; then
- enableval="$enable_libunwind_exceptions"
- use_libunwind_exceptions=$enableval
-else
- use_libunwind_exceptions=no
-fi
-
-if test x"$use_libunwind_exceptions" = xyes; then
- cat >> confdefs.h <<\EOF
-#define USE_LIBUNWIND_EXCEPTIONS 1
-EOF
-
-fi
-
# Make empty files to contain the specs and options for each language.
# Then add #include lines to for a compiler that has specs and/or options.
@@ -8658,6 +8733,9 @@ s%@enable_multilib@%$enable_multilib%g
s%@nocommon_flag@%$nocommon_flag%g
s%@coverage_flags@%$coverage_flags%g
s%@enable_shared@%$enable_shared%g
+s%@TARGET_SYSTEM_ROOT@%$TARGET_SYSTEM_ROOT%g
+s%@TARGET_SYSTEM_ROOT_DEFINE@%$TARGET_SYSTEM_ROOT_DEFINE%g
+s%@CROSS_SYSTEM_HEADER_DIR@%$CROSS_SYSTEM_HEADER_DIR%g
s%@host@%$host%g
s%@host_alias@%$host_alias%g
s%@host_cpu@%$host_cpu%g
diff --git a/gcc/configure.in b/gcc/configure.in
index a27c3b44b76..478f9e3e59f 100644
--- a/gcc/configure.in
+++ b/gcc/configure.in
@@ -373,6 +373,25 @@ AC_ARG_ENABLE(shared,
], [enable_shared=yes])
AC_SUBST(enable_shared)
+AC_ARG_WITH(sysroot,
+[ --with-sysroot[=DIR] Search for usr/lib, usr/include, et al, within DIR.],
+[
+ case ${with_sysroot} in
+ yes) TARGET_SYSTEM_ROOT='${gcc_tooldir}/sys-root' ;;
+ *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
+ esac
+
+ TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
+ CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR)'
+], [
+ TARGET_SYSTEM_ROOT=
+ TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=0'
+ CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
+])
+AC_SUBST(TARGET_SYSTEM_ROOT)
+AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
+AC_SUBST(CROSS_SYSTEM_HEADER_DIR)
+
# Determine the host, build, and target systems
AC_CANONICAL_SYSTEM
@@ -756,6 +775,25 @@ objext='.o'
AC_SUBST(manext)
AC_SUBST(objext)
+# With Setjmp/Longjmp based exception handling.
+AC_ARG_ENABLE(sjlj-exceptions,
+[ --enable-sjlj-exceptions
+ arrange to use setjmp/longjmp exception handling],
+[sjlj=`if test $enableval = yes; then echo 1; else echo 0; fi`
+AC_DEFINE_UNQUOTED(CONFIG_SJLJ_EXCEPTIONS, $sjlj,
+ [Define 0/1 to force the choice for exception handling model.])])
+
+AC_CHECK_LIB(unwind, main, use_libunwind_default=yes, use_libunwind_default=no)
+# Use libunwind based exception handling.
+AC_ARG_ENABLE(libunwind-exceptions,
+[ --enable-libunwind-exceptions force use libunwind for exceptions],
+use_libunwind_exceptions=$enableval,
+use_libunwind_exceptions=$use_libunwind_default)
+if test x"$use_libunwind_exceptions" = xyes; then
+ AC_DEFINE(USE_LIBUNWIND_EXCEPTIONS, 1,
+ [Define if gcc should use -lunwind.])
+fi
+
target_gtfiles=
build_xm_file=
build_xm_defines=
@@ -1164,12 +1202,9 @@ fi
# This prevents libgcc2 from containing any code which requires libc
# support.
inhibit_libc=
-if [test x$host != x$target] && [test x$with_headers = x]; then
+if { test x$host != x$target && test "x$with_headers" = x &&
+ test "x$with_sysroot" = x ; } || test x$with_newlib = xyes ; then
inhibit_libc=-Dinhibit_libc
-else
- if [test x$with_newlib = xyes]; then
- inhibit_libc=-Dinhibit_libc
- fi
fi
AC_SUBST(inhibit_libc)
@@ -2404,24 +2439,6 @@ else
fi
AC_SUBST(MAINT)dnl
-# With Setjmp/Longjmp based exception handling.
-AC_ARG_ENABLE(sjlj-exceptions,
-[ --enable-sjlj-exceptions
- arrange to use setjmp/longjmp exception handling],
-[sjlj=`if test $enableval = yes; then echo 1; else echo 0; fi`
-AC_DEFINE_UNQUOTED(CONFIG_SJLJ_EXCEPTIONS, $sjlj,
- [Define 0/1 to force the choice for exception handling model.])])
-
-# Use libunwind based exception handling.
-AC_ARG_ENABLE(libunwind-exceptions,
-[ --enable-libunwind-exceptions force use libunwind for exceptions],
-use_libunwind_exceptions=$enableval,
-use_libunwind_exceptions=no)
-if test x"$use_libunwind_exceptions" = xyes; then
- AC_DEFINE(USE_LIBUNWIND_EXCEPTIONS, 1,
- [Define if gcc should use -lunwind.])
-fi
-
# Make empty files to contain the specs and options for each language.
# Then add #include lines to for a compiler that has specs and/or options.
diff --git a/gcc/conflict.c b/gcc/conflict.c
index 48ca1d69e67..a6d755499bb 100644
--- a/gcc/conflict.c
+++ b/gcc/conflict.c
@@ -112,7 +112,7 @@ struct conflict_graph_def
R1 and R2. R1 is assumed to be smaller or equal to R2. */
#define CONFLICT_HASH_FN(R1, R2) ((R2) * ((R2) - 1) / 2 + (R1))
-static unsigned arc_hash PARAMS ((const void *));
+static hashval_t arc_hash PARAMS ((const void *));
static int arc_eq PARAMS ((const void *, const void *));
static int print_conflict PARAMS ((int, int, void *));
static void mark_reg PARAMS ((rtx, rtx, void *));
@@ -120,7 +120,7 @@ static void mark_reg PARAMS ((rtx, rtx, void *));
/* Callback function to compute the hash value of an arc. Uses
current_graph to locate the graph to which the arc belongs. */
-static unsigned
+static hashval_t
arc_hash (arcp)
const void *arcp;
{
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a18bad52579..9e843af6079 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,8 +1,323 @@
+2002-10-20 Mark Mitchell <mark@codesourcery.com>
+
+ * method.c (use_thunk): Compute the vcall index as a HOST_WIDE_INT.
+ * optimize.c (optimize_function): Replace ASM_OUTPUT_MI_THUNK with
+ TARGET_ASM_OUTPUT_MI_THUNK in comments.
+
+2002-10-18 Zack Weinberg <zack@codesourcery.com>
+
+ * decl.c (start_decl): Point users of the old initialized-
+ typedef extension at __typeof__.
+
+2002-10-18 Mark Mitchell <mark@codesourcery.com>
+
+ * Make-lang.in (method.o): Depend on TARGET_H.
+ * method.c (target.h): Include it.
+ (use_thunk): Use target hooks. Use vcall thunks, if available.
+
+2002-10-18 Mark Mitchell <mark@codesourcery.com>
+
+ * class.c (base_derived_from): Make sure return value is a bool.
+
+2002-10-18 Mark Mitchell <mark@codesourcery.com>
+
+ * class.c (find_final_overrider_data_s): Remove overriding_fn and
+ overriding_base.
+ (dfs_base_derived_from): New function.
+ (base_derived_from): Likewise.
+ (dfs_find_final_overrider): Use base_derived_from.
+ (find_final_overrider): Adjust.
+
+2002-10-18 Jason Merrill <jason@redhat.com>
+
+ PR c++/8080
+ * semantics.c (finish_for_cond, finish_while_cond): Don't mess
+ with condition decls in a template.
+
+2002-10-17 Nathan Sidwell <nathan@codesourcery.com>
+
+ * class.c (add_method): Compare template parms too.
+
+2002-10-17 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7584
+ * class.c (handle_using_decl): Allow the declaration used to be
+ from an ambiguous base.
+
+ * pt.c (convert_template_argument): Revert this change:
+ 2002-10-16 Mark Mitchell <mark@codesourcery.com>
+ * pt.c (convert_template_argument): Do not fold non-type
+ template rguments when inside a template.
+
+ * init.c (expand_default_init): Handle brace-enclosed initializers
+ correctly.
+
+2002-10-16 Mark Mitchell <mark@codesourcery.com>
+
+ * mangle.c (write_expression): Correct handling of enumeration
+ constants.
+ (write_template_arg): Likewise.
+ * pt.c (convert_template_argument): Do not fold non-type template
+ arguments when inside a template.
+
+ PR c++/7478
+ * cvt.c (convert_to_reference): Allow references as the incoming
+ type.
+
+2002-10-16 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7524
+ * method.c (do_build_assign_ref): Use cp_build_qualified_type, not
+ build_qualified_type.
+
+2002-10-15 Richard Henderson <rth@redhat.com>
+
+ * error.c (dump_expr): Use real_to_decimal directly, and with
+ the new arguments.
+
+2002-10-15 Mark Mitchell <mark@codesourcery.com>
+
+ * decl.c (reshape_init): Fix typo.
+
+ * cp-tree.h (operator_name_info_t): Add arity.
+ * lex.c (init_operators): Initialize it.
+ * mangle.c (write_conversion_operator_name): New function.
+ (write_unqualified_name): Use it.
+ (write_template_args): Accept template arguments as a TREE_LIST.
+ (write_expression): Adjust handling of qualified names to match
+ specification.
+
+2002-10-15 Jason Merrill <jason@redhat.com>
+
+ * call.c (call_builtin_trap): New fn.
+ (convert_arg_to_ellipsis): Use it. Downgrade error to warning.
+ (build_call): Don't set current_function_returns_abnormally outside
+ a function.
+
+2002-10-14 Mark Mitchell <mark@codesourcery.com>
+
+ * class.c (check_field_decls): Remove empty_p parameter. Instead,
+ clear CLASSTYPE_EMPTY_P.
+ (build_base_field): Likewise.
+ (build_base_fields): Likewise.
+ (check_bases_and_members): Likewise.
+ (create_vtbl_ptr): Likewise.
+ (layout_class_type): Likewise. Ensure that empty classes have
+ size zero when used as base classes in the 3.2 ABI.
+ (finish_struct_1): Initialize CLASSTYPE_EMPTY_P and
+ CLASSTYPE_NEARLY_EMPTY_P. Adjust calls to avoid passing empty_p
+ parameter.
+ (is_empty_class): Correct definition when using post-3.2 ABI.
+ * cp-tree.h (lang_type_class): Add empty_p.
+ (CLASSTYPE_EMPTY_P): New macro.
+
+2002-10-12 Nathan Sidwell <nathan@codesourcery.com>
+
+ * init.c (build_delete): Do not apply save_expr for arrays.
+ (build_vec_delete): Likewise.
+
+2002-10-14 Mark Mitchell <mark@codesourcery.com>
+
+ * decl.c (layout_var_decl): Call layout_decl even for variables
+ whose type is an array with unspecified bounds.
+
+ PR c++/7176
+ * lex.c (do_identifier): Add another option for the parsing
+ parameter.
+ * parse.y (do_id): Use it.
+
+2002-10-11 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ PRs C++/6803, C++/7721 and C++/7803
+ * decl.c (grokdeclarator): Gracefully handle template-name as
+ decl-specifier.
+
+2002-10-11 Jason Molenda <jmolenda@apple.com>
+
+ * init.c (build_field_list): Provide uses_unions_p with a default
+ value.
+
+2002-10-11 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/5661
+ * cp-tree.h (variably_modified_type_p): New function.
+ (grokdeclarator) Tighten check for variably modified types as
+ fields.
+ * pt.c (convert_template_argument): Do not allow variably modified
+ types as template arguments.
+ * tree.c (variably_modified_type_p): New function.
+
+ * NEWS: Document removal of "new X = ..." extension.
+ * class.c (initialize_array): Set TREE_HAS_CONSTRUCTOR on
+ brace-enclosed initializers.
+ * cp-tree.h (CP_AGGREGATE_TYPE_P): New macro.
+ (initialize_local_var): Remove declaration.
+ (expand_static_init): Likewise.
+ * decl.c (next_initializable_field): New function.
+ (reshape_init): Likewise.
+ (check_initializer): Use them. Build dynamic initializer for
+ aggregates here too.
+ (initialize_local_var): Simplify, and incorporate cleanup
+ insertion code as well.
+ (destroy_local_var): Remove.
+ (cp_finish_decl): Tidy.
+ (expand_static_init): Fold checks for whether or not a variable
+ needs initialization into this function. Simplify.
+ * decl2.c (do_static_initialization): Simplify.
+ * init.c (build_init): Do not set TREE_SIDE_EFFECTS when it will
+ be done for us automatically.
+ (expand_default_init): Handle brace-enclosed initializers
+ correctly.
+ (expand_aggr_init_1): Remove RTL-generation code.
+ (build_vec_init): Remove "new X = ..." support.
+ * parse.y (new_initializer): Likewise.
+ * rtti.c (get_pseudo_ti_init): Set TREE_HAS_CONSTRUCTOR on
+ brace-enclosed initializer.
+ (create_pseudo_type_info): Likewise.
+ * typeck2.c (store_init_value): Don't try to handle digest_init
+ being called more than once.
+ (digest_init): Tidy handling of brace-enclosed initializers.
+
+2002-10-10 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * decl.c (typename_hash): Use htab_hash_pointer.
+
+2002-10-10 Jim Wilson <wilson@redhat.com>
+
+ * decl.c (duplicate_decls): Don't call decl_attributes.
+
+2002-10-09 Zack Weinberg <zack@codesourcery.com>
+
+ PR c/7353
+ * decl.c (start_decl): Unconditionally issue error for
+ 'typedef foo = bar'.
+ (cp_finish_decl): Remove special case for TYPE_DECL with initializer.
+ (grokdeclarator): Remove redundant error for 'typedef foo = bar'.
+
+2002-10-09 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * decl2.c (prune_vtable_vardecl): Delete unused function.
+
+2002-10-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7754
+ * decl2.c (finish_anon_union): Do not expand anonymous unions when
+ procesing template functions.
+ * pt.c (tsubst_decl, case VAR_DECL): Try to complete the variable
+ type. Call layout_decl.
+ (tsubst_expr, case DECL_STMT): Handle anonymous unions.
+
+2002-10-07 Richard Henderson <rth@redhat.com>
+
+ * decl2.c, pt.c: Revert c++/7754 fix.
+
+2002-10-05 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/7804
+ * error.c (dump_expr) [REAL_CST]: Output in decimal format.
+
+2002-10-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7931
+ * pt.c (for_each_template_parm_r): Handle BASELINKs.
+
+ PR c++/7754
+ * decl2.c (finish_anon_union): Do not expand anonymous unions when
+ procesing template functions.
+ * pt.c (tsubst_decl, case VAR_DECL): Try to complete the variable
+ type. Call layout_decl.
+ (tsubst_expr, case DECL_STMT): Handle anonymous unions.
+
+2002-10-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/8006
+ * mangle.c (CLASSTYPE_TEMPLATE_ID_P): Handle instances of template
+ template parameters.
+ (globals): Add entity and need_abi_warning.
+ (decl_is_template_id): Use TYPE_TEMPLATE_INFO, not
+ CLASSTYPE_TEMPLATE_INFO.
+ (is_std_substitution): Use CLASSTYPE_TI_TEMPLATE, not
+ TYPE_TI_TEMPLATE.
+ (write_prefix): Handle typename types correctly.
+ (write_template_prefix): Handle template template parameters
+ correctly.
+ (start_mangling): Add entity parameter.
+ (finish_mangling): Warn about names whose mangling will change.
+ (mangle_decl_string): Adjust.
+ (mangle_type_string): Likewise.
+ (mangle_special_for_type): Likewise.
+ (mangle_ctor_vtbl_for_type): Likewise.
+ (mangle_thunk): Likewise.
+ (mangle_guard_variable): Likewise.
+ (mangle_ref_init_variable): Likewise.
+
+2002-10-02 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7188.
+ * cp-tree.def (CTOR_INITIALIZER): Use one slot, not two.
+ * cp-tree.h (emit_base_init): Rename to ....
+ (emit_mem_initializers): ... this.
+ (expand_member_init): Change prototype.
+ * init.c (perform_member_init): Compute explicit, rather than
+ requiring it as a parameter.
+ (sort_member_init): Rename to ...
+ (sort_mem_initializers): ... this. Process bases and data members
+ together.
+ (sort_base_init): Remove.
+ (emit_base_init): Rename to ...
+ (emit_mem_initializers): ... this.
+ (expand_aggr_vbase_init_1): Remove.
+ (construct_virtual_bases): Rename to ...
+ (construct_virtual_base): ... this.
+ (expand_member_init): Rework handling of base initializers.
+ * method.c (do_build_copy_constructor): Use
+ finish_mem_initializers.
+ * parse.y (member_init): Adjust calls to expand_member_init.
+ * pt.c (tsubst_expr): Simplify CTOR_INITIALIZER case.
+ (tsubst_initializer_list): Use expand_member_init.
+ * semantics.c (finish_mem_intiailizers): Simplify.
+
+2002-10-02 Matt Austern <austern@apple.com>
+ * decl.c (walk_vtables_r): Fixed typo that caused result to
+ never get a nonzero value.
+
+2002-10-02 Roger Sayle <roger@eyesopen.com>
+
+ PR optimization/6627
+ * cp-tree.h (enum ptrmemfunc_vbit_where_t): Delete definition
+ from here, and move it to tree.h.
+ * decl.c (cxx_init_decl_processing): If storing the vbit
+ in function pointers, ensure that force_align_functions_log
+ is atleast one.
+
+2002-10-02 Matt Austern <austern@apple.com>
+
+ * class.c (check_field_decls): Changed warning about const member
+ variables so that it doesn't get issued for a class aggregate.
+
+2002-10-01 Mark Mitchell <mark@codesourcery.com>
+
+ * decl.c (cp_finish_decl): Make sure array types are laid out,
+ even if the array bounds are unknown.
+
+2002-10-01 Steve Ellcey <sje@cup.hp.com>
+
+ * class.c (build_vtbl_initializer): Change build_c_cast
+ to build1.
+
2002-10-01 Mark Mitchell <mark@codesourcery.com>
* decl.c (cp_finish_decl): Make sure array types are laid out,
even if the array bounds are unknown.
+ * decl.c (cp_finish_decl): Correct check for dynamic
+ initialization of thread-local storage.
+
+2002-09-30 Nathan Sidwell <nathan@codesourcery.com>
+
+ * tree.c (really_overloaded_fn): TEMPLATE_ID_EXPRs are also
+ overloaded.
+
2002-09-30 Steve Ellcey <sje@cup.hp.com>
* class.c (build_vtbl_initializer): Add cast.
@@ -62,12 +377,12 @@
(dfs_unuse_fields): Likewise.
* tree.c (pod_type_p): Handle error_mark_node.
(zero_init_p): Likewise.
- * typeck.c (lookup_anon_field): Skip FIELD_DECLs for base
+ * typeck.c (lookup_anon_field): Skip FIELD_DECLs for base
subobjects.
* typeck2.c (store_init_value): Remove #if 0'd code.
(force_store_init_value): Remove.
(process_init_constructor): Use build_zero_init.
-
+
2002-09-29 Nathan Sidwell <nathan@codesourcery.com>
PR c++/7788
@@ -95,7 +410,7 @@
even number of bytes when computing the size without virtual
bases.
* cp/cp-tree.h (abi_version_at_least): New macro.
-
+
2002-09-21 Kazu Hirata <kazu@cs.umass.edu>
* ChangeLog: Follow spelling conventions.
@@ -211,6 +526,14 @@
* typeck.c: Likewise.
* typeck2.c: Likewise.
+2002-09-13 Matt Austern <austern@apple.com>
+
+ PR C++/7828
+ * cp/cp-tree.h, cp/tree.c: New function non_cast_lvalue_p.
+ * cp/call.c: Change call-by-const-reference mechanism to use
+ non_cast_lvalue_p when deciding whether the create a temporary.
+ We need a temporary when passing, e.g. (long) x by const ref.
+
2002-09-13 Nathan Sidwell <nathan@codesourcery.com>
* pt.c (unify, ARRAY_TYPE): Element type can be more qualified.
@@ -2432,7 +2755,7 @@
* pt.c (convert_template_argument): Adjust make_typename_type
return value.
(tsubst): Adjust cp_build_qualified_type_real calls.
- (check_cv_quals_for_unify): Cope with alowing bad qualifications
+ (check_cv_quals_for_unify): Cope with allowing bad qualifications
on template type parms.
(instantiate_decl): Recheck substitutions to give warnings on bad
qualifications.
diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
index 0ec886d5a19..42656e7933d 100644
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -246,7 +246,7 @@ cp/friend.o: cp/friend.c $(CXX_TREE_H) flags.h $(RTL_H) toplev.h $(EXPR_H)
cp/init.o: cp/init.c $(CXX_TREE_H) flags.h $(RTL_H) $(EXPR_H) toplev.h \
$(GGC_H) except.h
cp/method.o: cp/method.c $(CXX_TREE_H) toplev.h $(GGC_H) $(RTL_H) $(EXPR_H) \
- $(TM_P_H)
+ $(TM_P_H) $(TARGET_H)
cp/cvt.o: cp/cvt.c $(CXX_TREE_H) cp/decl.h flags.h toplev.h convert.h
cp/search.o: cp/search.c $(CXX_TREE_H) stack.h flags.h toplev.h $(RTL_H)
cp/tree.o: cp/tree.c $(CXX_TREE_H) flags.h toplev.h $(GGC_H) $(RTL_H) \
diff --git a/gcc/cp/NEWS b/gcc/cp/NEWS
index caee3fb48b0..85642b587d9 100644
--- a/gcc/cp/NEWS
+++ b/gcc/cp/NEWS
@@ -1,3 +1,7 @@
+*** Changes in GCC 3.3:
+
+* The "new X = 3" extension has been removed; you must now use "new X(3)".
+
*** Changes in GCC 3.1:
* -fhonor-std and -fno-honor-std have been removed. -fno-honor-std was
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 194707666a4..1b79ac48250 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -101,6 +101,7 @@ static tree convert_class_to_reference PARAMS ((tree, tree, tree));
static tree direct_reference_binding PARAMS ((tree, tree));
static int promoted_arithmetic_type_p PARAMS ((tree));
static tree conditional_conversion PARAMS ((tree, tree));
+static tree call_builtin_trap PARAMS ((void));
tree
build_vfield_ref (datum, type)
@@ -380,7 +381,7 @@ build_call (function, parms)
nothrow = ((decl && TREE_NOTHROW (decl))
|| TYPE_NOTHROW_P (TREE_TYPE (TREE_TYPE (function))));
- if (decl && TREE_THIS_VOLATILE (decl))
+ if (decl && TREE_THIS_VOLATILE (decl) && cfun)
current_function_returns_abnormally = 1;
if (decl && TREE_DEPRECATED (decl))
@@ -4097,6 +4098,22 @@ convert_like_real (convs, expr, fn, argnum, inner)
LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
}
+/* Build a call to __builtin_trap which can be used in an expression. */
+
+static tree
+call_builtin_trap ()
+{
+ tree fn = get_identifier ("__builtin_trap");
+ if (IDENTIFIER_GLOBAL_VALUE (fn))
+ fn = IDENTIFIER_GLOBAL_VALUE (fn);
+ else
+ abort ();
+
+ fn = build_call (fn, NULL_TREE);
+ fn = build (COMPOUND_EXPR, integer_type_node, fn, integer_zero_node);
+ return fn;
+}
+
/* ARG is being passed to a varargs function. Perform any conversions
required. Array/function to pointer decay must have already happened.
Return the converted value. */
@@ -4121,9 +4138,10 @@ convert_arg_to_ellipsis (arg)
/* Undefined behavior [expr.call] 5.2.2/7. We used to just warn
here and do a bitwise copy, but now cp_expr_size will abort if we
try to do that. */
- error ("cannot pass objects of non-POD type `%#T' through `...'",
- TREE_TYPE (arg));
- arg = error_mark_node;
+ warning ("cannot pass objects of non-POD type `%#T' through `...'; \
+call will abort at runtime",
+ TREE_TYPE (arg));
+ arg = call_builtin_trap ();
}
return arg;
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 5d46eaa3c4e..7afe27317c6 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -115,7 +115,6 @@ static void delete_duplicate_fields PARAMS ((tree));
static void finish_struct_bits PARAMS ((tree));
static int alter_access PARAMS ((tree, tree, tree));
static void handle_using_decl PARAMS ((tree, tree));
-static int strictly_overrides PARAMS ((tree, tree));
static void check_for_override PARAMS ((tree, tree));
static tree dfs_modify_vtables PARAMS ((tree, void *));
static tree modify_all_vtables PARAMS ((tree, int *, tree));
@@ -134,20 +133,17 @@ static tree build_vtbl_initializer PARAMS ((tree, tree, tree, tree, int *));
static int count_fields PARAMS ((tree));
static int add_fields_to_vec PARAMS ((tree, tree, int));
static void check_bitfield_decl PARAMS ((tree));
-static void check_field_decl PARAMS ((tree, tree, int *, int *, int *, int *));
-static void check_field_decls PARAMS ((tree, tree *, int *, int *, int *,
- int *));
-static tree *build_base_field PARAMS ((record_layout_info, tree, int *,
- splay_tree, tree *));
-static void build_base_fields PARAMS ((record_layout_info, int *,
- splay_tree, tree *));
+static void check_field_decl (tree, tree, int *, int *, int *, int *);
+static void check_field_decls (tree, tree *, int *, int *, int *);
+static tree *build_base_field (record_layout_info, tree, splay_tree, tree *);
+static void build_base_fields (record_layout_info, splay_tree, tree *);
static void check_methods PARAMS ((tree));
static void remove_zero_width_bit_fields PARAMS ((tree));
static void check_bases PARAMS ((tree, int *, int *, int *));
-static void check_bases_and_members PARAMS ((tree, int *));
-static tree create_vtable_ptr PARAMS ((tree, int *, tree *));
+static void check_bases_and_members (tree);
+static tree create_vtable_ptr (tree, tree *);
static void include_empty_classes (record_layout_info);
-static void layout_class_type PARAMS ((tree, int *, int *, tree *));
+static void layout_class_type (tree, int *, tree *);
static void fixup_pending_inline PARAMS ((tree));
static void fixup_inline_methods PARAMS ((tree));
static void set_primary_base PARAMS ((tree, tree, int *));
@@ -211,6 +207,8 @@ static int splay_tree_compare_integer_csts PARAMS ((splay_tree_key k1,
static void warn_about_ambiguous_bases PARAMS ((tree));
static bool type_requires_array_cookie PARAMS ((tree));
static bool contains_empty_class_p (tree);
+static tree dfs_base_derived_from (tree, void *);
+static bool base_derived_from (tree, tree);
/* Macros for dfs walking during vtt construction. See
dfs_ctor_vtable_bases_queue_p, dfs_build_secondary_vptr_vtt_inits
@@ -953,6 +951,13 @@ add_method (type, method, error_p)
&& (TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms1)))
!= TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms2)))))
same = 0;
+
+ /* For templates, the template parms must be identical. */
+ if (TREE_CODE (fn) == TEMPLATE_DECL
+ && !comp_template_parms (DECL_TEMPLATE_PARMS (fn),
+ DECL_TEMPLATE_PARMS (method)))
+ same = 0;
+
if (! DECL_STATIC_FUNCTION_P (fn))
parms1 = TREE_CHAIN (parms1);
if (! DECL_STATIC_FUNCTION_P (method))
@@ -1158,9 +1163,12 @@ handle_using_decl (using_decl, t)
tree flist = NULL_TREE;
tree old_value;
- binfo = binfo_or_else (ctype, t);
+ binfo = lookup_base (t, ctype, ba_any, NULL);
if (! binfo)
- return;
+ {
+ error_not_base_type (t, ctype);
+ return;
+ }
if (constructor_name_p (name, ctype))
{
@@ -2197,6 +2205,29 @@ same_signature_p (fndecl, base_fndecl)
return 0;
}
+/* Called from base_derived_from via dfs_walk. */
+
+static tree
+dfs_base_derived_from (tree binfo, void *data)
+{
+ tree base = (tree) data;
+
+ if (same_type_p (TREE_TYPE (base), TREE_TYPE (binfo))
+ && tree_int_cst_equal (BINFO_OFFSET (base), BINFO_OFFSET (binfo)))
+ return error_mark_node;
+
+ return NULL_TREE;
+}
+
+/* Returns TRUE if DERIVED is a binfo containing the binfo BASE as a
+ subobject. */
+
+static bool
+base_derived_from (tree derived, tree base)
+{
+ return dfs_walk (derived, dfs_base_derived_from, NULL, base) != NULL_TREE;
+}
+
typedef struct find_final_overrider_data_s {
/* The function for which we are trying to find a final overrider. */
tree fn;
@@ -2204,14 +2235,8 @@ typedef struct find_final_overrider_data_s {
tree declaring_base;
/* The most derived class in the hierarchy. */
tree most_derived_type;
- /* The final overriding function. */
- tree overriding_fn;
- /* The functions that we thought might be final overriders, but
- aren't. */
+ /* The candidate overriders. */
tree candidates;
- /* The BINFO for the class in which the final overriding function
- appears. */
- tree overriding_base;
} find_final_overrider_data;
/* Called from find_final_overrider via dfs_walk. */
@@ -2236,118 +2261,41 @@ dfs_find_final_overrider (binfo, data)
/* We've found a path to the declaring base. Walk down the path
looking for an overrider for FN. */
for (path = reverse_path (binfo);
- path;
+ path;
path = TREE_CHAIN (path))
{
method = look_for_overrides_here (BINFO_TYPE (TREE_VALUE (path)),
ffod->fn);
if (method)
- break;
+ {
+ path = TREE_VALUE (path);
+ break;
+ }
}
/* If we found an overrider, record the overriding function, and
the base from which it came. */
if (path)
{
- tree base;
-
- /* Assume the path is non-virtual. See if there are any
- virtual bases from (but not including) the overrider up
- to and including the base where the function is
- defined. */
- for (base = TREE_CHAIN (path); base; base = TREE_CHAIN (base))
- if (TREE_VIA_VIRTUAL (TREE_VALUE (base)))
- {
- base = ffod->declaring_base;
- break;
- }
+ tree *candidate;
- /* If we didn't already have an overrider, or any
- candidates, then this function is the best candidate so
- far. */
- if (!ffod->overriding_fn && !ffod->candidates)
- {
- ffod->overriding_fn = method;
- ffod->overriding_base = TREE_VALUE (path);
- }
- else if (ffod->overriding_fn)
+ /* Remove any candidates overridden by this new function. */
+ candidate = &ffod->candidates;
+ while (*candidate)
{
- /* We had a best overrider; let's see how this compares. */
-
- if (ffod->overriding_fn == method
- && (tree_int_cst_equal
- (BINFO_OFFSET (TREE_VALUE (path)),
- BINFO_OFFSET (ffod->overriding_base))))
- /* We found the same overrider we already have, and in the
- same place; it's still the best. */;
- else if (strictly_overrides (ffod->overriding_fn, method))
- /* The old function overrides this function; it's still the
- best. */;
- else if (strictly_overrides (method, ffod->overriding_fn))
- {
- /* The new function overrides the old; it's now the
- best. */
- ffod->overriding_fn = method;
- ffod->overriding_base = TREE_VALUE (path);
- }
+ /* If *CANDIDATE overrides METHOD, then METHOD
+ cannot override anything else on the list. */
+ if (base_derived_from (TREE_VALUE (*candidate), path))
+ return NULL_TREE;
+ /* If METHOD overrides *CANDIDATE, remove *CANDIDATE. */
+ if (base_derived_from (path, TREE_VALUE (*candidate)))
+ *candidate = TREE_CHAIN (*candidate);
else
- {
- /* Ambiguous. */
- ffod->candidates
- = build_tree_list (NULL_TREE,
- ffod->overriding_fn);
- if (method != ffod->overriding_fn)
- ffod->candidates
- = tree_cons (NULL_TREE, method, ffod->candidates);
- ffod->overriding_fn = NULL_TREE;
- ffod->overriding_base = NULL_TREE;
- }
+ candidate = &TREE_CHAIN (*candidate);
}
- else
- {
- /* We had a list of ambiguous overrides; let's see how this
- new one compares. */
-
- tree candidates;
- bool incomparable = false;
-
- /* If there were previous candidates, and this function
- overrides all of them, then it is the new best
- candidate. */
- for (candidates = ffod->candidates;
- candidates;
- candidates = TREE_CHAIN (candidates))
- {
- /* If the candidate overrides the METHOD, then we
- needn't worry about it any further. */
- if (strictly_overrides (TREE_VALUE (candidates),
- method))
- {
- method = NULL_TREE;
- break;
- }
-
- /* If the METHOD doesn't override the candidate,
- then it is incomporable. */
- if (!strictly_overrides (method,
- TREE_VALUE (candidates)))
- incomparable = true;
- }
- /* If METHOD overrode all the candidates, then it is the
- new best candidate. */
- if (!candidates && !incomparable)
- {
- ffod->overriding_fn = method;
- ffod->overriding_base = TREE_VALUE (path);
- ffod->candidates = NULL_TREE;
- }
- /* If METHOD didn't override all the candidates, then it
- is another candidate. */
- else if (method && incomparable)
- ffod->candidates
- = tree_cons (NULL_TREE, method, ffod->candidates);
- }
+ /* Add the new function. */
+ ffod->candidates = tree_cons (method, path, ffod->candidates);
}
}
@@ -2388,8 +2336,6 @@ find_final_overrider (t, binfo, fn)
ffod.fn = fn;
ffod.declaring_base = binfo;
ffod.most_derived_type = t;
- ffod.overriding_fn = NULL_TREE;
- ffod.overriding_base = NULL_TREE;
ffod.candidates = NULL_TREE;
dfs_walk (TYPE_BINFO (t),
@@ -2398,13 +2344,13 @@ find_final_overrider (t, binfo, fn)
&ffod);
/* If there was no winner, issue an error message. */
- if (!ffod.overriding_fn)
+ if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
{
error ("no unique final overrider for `%D' in `%T'", fn, t);
return error_mark_node;
}
- return build_tree_list (ffod.overriding_fn, ffod.overriding_base);
+ return ffod.candidates;
}
/* Returns the function from the BINFO_VIRTUALS entry in T which matches
@@ -2643,24 +2589,6 @@ modify_all_vtables (t, vfuns_p, virtuals)
return virtuals;
}
-/* Here, we already know that they match in every respect.
- All we have to check is where they had their declarations.
-
- Return nonzero iff FNDECL1 is declared in a class which has a
- proper base class containing FNDECL2. We don't care about
- ambiguity or accessibility. */
-
-static int
-strictly_overrides (fndecl1, fndecl2)
- tree fndecl1, fndecl2;
-{
- base_kind kind;
-
- return (lookup_base (DECL_CONTEXT (fndecl1), DECL_CONTEXT (fndecl2),
- ba_ignore | ba_quiet, &kind)
- && kind != bk_same_type);
-}
-
/* Get the base virtual function declarations in T that have the
indicated NAME. */
@@ -3201,15 +3129,10 @@ check_field_decl (field, t, cant_have_const_ctor,
fields can be added by adding to this chain. */
static void
-check_field_decls (t, access_decls, empty_p,
- cant_have_default_ctor_p, cant_have_const_ctor_p,
- no_const_asn_ref_p)
- tree t;
- tree *access_decls;
- int *empty_p;
- int *cant_have_default_ctor_p;
- int *cant_have_const_ctor_p;
- int *no_const_asn_ref_p;
+check_field_decls (tree t, tree *access_decls,
+ int *cant_have_default_ctor_p,
+ int *cant_have_const_ctor_p,
+ int *no_const_asn_ref_p)
{
tree *field;
tree *next;
@@ -3245,7 +3168,7 @@ check_field_decls (t, access_decls, empty_p,
else
{
/* The class is non-empty. */
- *empty_p = 0;
+ CLASSTYPE_EMPTY_P (t) = 0;
/* The class is not even nearly empty. */
CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
}
@@ -3338,7 +3261,8 @@ check_field_decls (t, access_decls, empty_p,
*cant_have_default_ctor_p = 1;
TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
- if (! TYPE_HAS_CONSTRUCTOR (t) && extra_warnings)
+ if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
+ && extra_warnings)
cp_warning_at ("non-static reference `%#D' in class without a constructor", x);
}
@@ -3372,7 +3296,8 @@ check_field_decls (t, access_decls, empty_p,
*cant_have_default_ctor_p = 1;
TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
- if (! TYPE_HAS_CONSTRUCTOR (t) && extra_warnings)
+ if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
+ && extra_warnings)
cp_warning_at ("non-static const member `%#D' in class without a constructor", x);
}
/* A field that is pseudo-const makes the structure likewise. */
@@ -3819,8 +3744,7 @@ layout_empty_base (binfo, eoc, offsets, t)
}
/* Layout the the base given by BINFO in the class indicated by RLI.
- If the new object is non-empty, and EMPTY_P is non-NULL, clear
- *EMPTY_P. *BASE_ALIGN is a running maximum of the alignments of
+ *BASE_ALIGN is a running maximum of the alignments of
any base class. OFFSETS gives the location of empty base
subobjects. T is the most derived type. Return nonzero if the new
object cannot be nearly-empty. A new FIELD_DECL is inserted at
@@ -3829,7 +3753,7 @@ layout_empty_base (binfo, eoc, offsets, t)
Returns the location at which the next field should be inserted. */
static tree *
-build_base_field (record_layout_info rli, tree binfo, int *empty_p,
+build_base_field (record_layout_info rli, tree binfo,
splay_tree offsets, tree *next_field)
{
tree t = rli->t;
@@ -3847,8 +3771,7 @@ build_base_field (record_layout_info rli, tree binfo, int *empty_p,
/* The containing class is non-empty because it has a non-empty
base class. */
- if (empty_p)
- *empty_p = 0;
+ CLASSTYPE_EMPTY_P (t) = 0;
/* Create the FIELD_DECL. */
decl = build_decl (FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
@@ -3886,6 +3809,11 @@ build_base_field (record_layout_info rli, tree binfo, int *empty_p,
create CONSTRUCTORs for the class by iterating over the
FIELD_DECLs, and the back end does not handle overlapping
FIELD_DECLs. */
+
+ /* An empty virtual base causes a class to be non-empty
+ -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
+ here because that was already done when the virtual table
+ pointer was created. */
}
/* Record the offsets of BINFO and its base subobjects. */
@@ -3904,7 +3832,7 @@ build_base_field (record_layout_info rli, tree binfo, int *empty_p,
*NEXT_FIELD. */
static void
-build_base_fields (record_layout_info rli, int *empty_p,
+build_base_fields (record_layout_info rli,
splay_tree offsets, tree *next_field)
{
/* Chain to hold all the new FIELD_DECLs which stand in for base class
@@ -3916,7 +3844,7 @@ build_base_fields (record_layout_info rli, int *empty_p,
/* The primary base class is always allocated first. */
if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
- empty_p, offsets, next_field);
+ offsets, next_field);
/* Now allocate the rest of the bases. */
for (i = 0; i < n_baseclasses; ++i)
@@ -3937,7 +3865,7 @@ build_base_fields (record_layout_info rli, int *empty_p,
&& !BINFO_PRIMARY_P (base_binfo))
continue;
- next_field = build_base_field (rli, base_binfo, empty_p,
+ next_field = build_base_field (rli, base_binfo,
offsets, next_field);
}
}
@@ -4328,9 +4256,7 @@ type_requires_array_cookie (type)
level: i.e., independently of the ABI in use. */
static void
-check_bases_and_members (t, empty_p)
- tree t;
- int *empty_p;
+check_bases_and_members (tree t)
{
/* Nonzero if we are not allowed to generate a default constructor
for this case. */
@@ -4349,16 +4275,12 @@ check_bases_and_members (t, empty_p)
cant_have_const_ctor = 0;
no_const_asn_ref = 0;
- /* Assume that the class is nearly empty; we'll clear this flag if
- it turns out not to be nearly empty. */
- CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
-
/* Check all the base-classes. */
check_bases (t, &cant_have_default_ctor, &cant_have_const_ctor,
&no_const_asn_ref);
/* Check all the data member declarations. */
- check_field_decls (t, &access_decls, empty_p,
+ check_field_decls (t, &access_decls,
&cant_have_default_ctor,
&cant_have_const_ctor,
&no_const_asn_ref);
@@ -4421,9 +4343,8 @@ check_bases_and_members (t, empty_p)
on VIRTUALS_P. */
static tree
-create_vtable_ptr (t, empty_p, virtuals_p)
+create_vtable_ptr (t, virtuals_p)
tree t;
- int *empty_p;
tree *virtuals_p;
{
tree fn;
@@ -4481,7 +4402,7 @@ create_vtable_ptr (t, empty_p, virtuals_p)
TYPE_VFIELD (t) = field;
/* This class is non-empty. */
- *empty_p = 0;
+ CLASSTYPE_EMPTY_P (t) = 0;
if (CLASSTYPE_N_BASECLASSES (t))
/* If there were any baseclasses, they can't possibly be at
@@ -4686,7 +4607,7 @@ layout_virtual_bases (record_layout_info rli, splay_tree offsets)
/* This virtual base is not a primary base of any class in the
hierarchy, so we have to add space for it. */
- next_field = build_base_field (rli, vbase, /*empty_p=*/NULL,
+ next_field = build_base_field (rli, vbase,
offsets, next_field);
/* If the first virtual base might have been placed at a
@@ -4841,11 +4762,7 @@ include_empty_classes (record_layout_info rli)
pointer. Accumulate declared virtual functions on VIRTUALS_P. */
static void
-layout_class_type (t, empty_p, vfuns_p, virtuals_p)
- tree t;
- int *empty_p;
- int *vfuns_p;
- tree *virtuals_p;
+layout_class_type (tree t, int *vfuns_p, tree *virtuals_p)
{
tree non_static_data_members;
tree field;
@@ -4872,7 +4789,7 @@ layout_class_type (t, empty_p, vfuns_p, virtuals_p)
determine_primary_base (t, vfuns_p);
/* Create a pointer to our virtual function table. */
- vptr = create_vtable_ptr (t, empty_p, virtuals_p);
+ vptr = create_vtable_ptr (t, virtuals_p);
/* The vptr is always the first thing in the class. */
if (vptr)
@@ -4888,7 +4805,7 @@ layout_class_type (t, empty_p, vfuns_p, virtuals_p)
/* Build FIELD_DECLs for all of the non-virtual base-types. */
empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
NULL, NULL);
- build_base_fields (rli, empty_p, empty_base_offsets, next_field);
+ build_base_fields (rli, empty_base_offsets, next_field);
/* Layout the non-static data members. */
for (field = non_static_data_members; field; field = TREE_CHAIN (field))
@@ -5026,13 +4943,27 @@ layout_class_type (t, empty_p, vfuns_p, virtuals_p)
/* Create the version of T used for virtual bases. We do not use
make_aggr_type for this version; this is an artificial type. For
a POD type, we just reuse T. */
- if (CLASSTYPE_NON_POD_P (t) || *empty_p)
+ if (CLASSTYPE_NON_POD_P (t) || CLASSTYPE_EMPTY_P (t))
{
base_t = make_node (TREE_CODE (t));
- /* Set the size and alignment for the new type. */
- TYPE_SIZE (base_t) = rli_size_so_far (rli);
- TYPE_SIZE_UNIT (base_t) = rli_size_unit_so_far (rli);
+ /* Set the size and alignment for the new type. In G++ 3.2, all
+ empty classes were considered to have size zero when used as
+ base classes. */
+ if (!abi_version_at_least (2) && CLASSTYPE_EMPTY_P (t))
+ {
+ TYPE_SIZE (base_t) = bitsize_zero_node;
+ TYPE_SIZE_UNIT (base_t) = size_zero_node;
+ if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli)))
+ warning ("layout of classes derived from empty class `%T' "
+ "may change in a future version of GCC",
+ t);
+ }
+ else
+ {
+ TYPE_SIZE (base_t) = rli_size_so_far (rli);
+ TYPE_SIZE_UNIT (base_t) = rli_size_unit_so_far (rli);
+ }
TYPE_ALIGN (base_t) = rli->record_align;
TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
@@ -5073,7 +5004,7 @@ layout_class_type (t, empty_p, vfuns_p, virtuals_p)
include_empty_classes(rli);
/* Make sure not to create any structures with zero size. */
- if (integer_zerop (rli_size_unit_so_far (rli)) && *empty_p)
+ if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
place_field (rli,
build_decl (FIELD_DECL, NULL_TREE, char_type_node));
@@ -5124,7 +5055,6 @@ finish_struct_1 (t)
tree virtuals = NULL_TREE;
int n_fields = 0;
tree vfield;
- int empty = 1;
if (COMPLETE_TYPE_P (t))
{
@@ -5146,12 +5076,17 @@ finish_struct_1 (t)
fixup_inline_methods (t);
+ /* Assume that the class is both empty and nearly empty; we'll clear
+ these flag if necessary. */
+ CLASSTYPE_EMPTY_P (t) = 1;
+ CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
+
/* Do end-of-class semantic processing: checking the validity of the
bases and members and add implicitly generated methods. */
- check_bases_and_members (t, &empty);
+ check_bases_and_members (t);
/* Layout the class itself. */
- layout_class_type (t, &empty, &vfuns, &virtuals);
+ layout_class_type (t, &vfuns, &virtuals);
/* Make sure that we get our own copy of the vfield FIELD_DECL. */
vfield = TYPE_VFIELD (t);
@@ -6435,7 +6370,12 @@ is_empty_class (type)
if (! IS_AGGR_TYPE (type))
return 0;
- return integer_zerop (CLASSTYPE_SIZE (type));
+ /* In G++ 3.2, whether or not a class was empty was determined by
+ looking at its size. */
+ if (abi_version_at_least (2))
+ return CLASSTYPE_EMPTY_P (type);
+ else
+ return integer_zerop (CLASSTYPE_SIZE (type));
}
/* Returns true if TYPE contains an empty class. */
@@ -6992,6 +6932,7 @@ initialize_array (decl, inits)
context = DECL_CONTEXT (decl);
DECL_CONTEXT (decl) = NULL_TREE;
DECL_INITIAL (decl) = build_nt (CONSTRUCTOR, NULL_TREE, inits);
+ TREE_HAS_CONSTRUCTOR (DECL_INITIAL (decl)) = 1;
cp_finish_decl (decl, DECL_INITIAL (decl), NULL_TREE, 0);
DECL_CONTEXT (decl) = context;
}
@@ -7617,8 +7558,8 @@ build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo, non_fn_entries_p)
for (i = 1; i < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++i)
add = tree_cons (NULL_TREE,
- build_c_cast (vtable_entry_type,
- size_zero_node),
+ build1 (NOP_EXPR, vtable_entry_type,
+ null_pointer_node),
add);
*prev = add;
}
diff --git a/gcc/cp/cp-tree.def b/gcc/cp/cp-tree.def
index 90685af50d4..1aae797a4c2 100644
--- a/gcc/cp/cp-tree.def
+++ b/gcc/cp/cp-tree.def
@@ -251,7 +251,7 @@ DEFTREECODE (PSEUDO_DTOR_EXPR, "pseudo_dtor_expr", 'e', 3)
/* CTOR_INITIALIZER is a placeholder in template code for a call to
setup_vtbl_pointer (and appears in all functions, not just ctors). */
-DEFTREECODE (CTOR_INITIALIZER, "ctor_initializer", 'e', 2)
+DEFTREECODE (CTOR_INITIALIZER, "ctor_initializer", 'e', 1)
DEFTREECODE (RETURN_INIT, "return_init", 'e', 2)
DEFTREECODE (TRY_BLOCK, "try_block", 'e', 2)
DEFTREECODE (EH_SPEC_BLOCK, "eh_spec_block", 'e', 2)
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index a56d1dcac1e..57cec36b440 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -1134,6 +1134,7 @@ struct lang_type_class GTY(())
unsigned anon_aggr : 1;
unsigned non_zero_init : 1;
+ unsigned empty_p : 1;
/* When adding a flag here, consider whether or not it ought to
apply to a template instance if it applies to the template. If
@@ -1142,7 +1143,7 @@ struct lang_type_class GTY(())
/* There are some bits left to fill out a 32-bit word. Keep track
of this by updating the size of this bitfield whenever you add or
remove a flag. */
- unsigned dummy : 6;
+ unsigned dummy : 5;
int vsize;
@@ -1447,6 +1448,10 @@ struct lang_type GTY(())
#define CLASSTYPE_NON_ZERO_INIT_P(NODE) \
(LANG_TYPE_CLASS_CHECK (NODE)->non_zero_init)
+/* Nonzero if this class is "empty" in the sense of the C++ ABI. */
+#define CLASSTYPE_EMPTY_P(NODE) \
+ (LANG_TYPE_CLASS_CHECK (NODE)->empty_p)
+
/* Nonzero if this class is "nearly empty", i.e., contains only a
virtual function table pointer. */
#define CLASSTYPE_NEARLY_EMPTY_P(NODE) \
@@ -2437,8 +2442,18 @@ struct lang_decl GTY(())
|| TYPE_PTRMEM_P (TYPE) \
|| TYPE_PTRMEMFUNC_P (TYPE))
-/* Nonzero for _TYPE means that the _TYPE defines
- at least one constructor. */
+/* [dcl.init.aggr]
+
+ An aggregate is an array or a class with no user-declared
+ constructors, no private or protected non-static data members, no
+ base classes, and no virtual functions. */
+#define CP_AGGREGATE_TYPE_P(TYPE) \
+ (TREE_CODE (TYPE) == ARRAY_TYPE \
+ || (CLASS_TYPE_P (TYPE) \
+ && !CLASSTYPE_NON_AGGREGATE (TYPE)))
+
+/* Nonzero for a class type means that the class type has a
+ user-declared constructor. */
#define TYPE_HAS_CONSTRUCTOR(NODE) (TYPE_LANG_FLAG_1 (NODE))
/* When appearing in an INDIRECT_REF, it means that the tree structure
@@ -2540,32 +2555,6 @@ struct lang_decl GTY(())
member function. [expr.unary.op]/3 */
#define PTRMEM_OK_P(NODE) TREE_LANG_FLAG_0 (NODE)
-/* A pointer-to-function member type looks like:
-
- struct {
- __P __pfn;
- ptrdiff_t __delta;
- };
-
- If __pfn is NULL, it is a NULL pointer-to-member-function.
-
- (Because the vtable is always the first thing in the object, we
- don't need its offset.) If the function is virtual, then PFN is
- one plus twice the index into the vtable; otherwise, it is just a
- pointer to the function.
-
- Unfortunately, using the lowest bit of PFN doesn't work in
- architectures that don't impose alignment requirements on function
- addresses, or that use the lowest bit to tell one ISA from another,
- for example. For such architectures, we use the lowest bit of
- DELTA instead of the lowest bit of the PFN, and DELTA will be
- multiplied by 2. */
-enum ptrmemfunc_vbit_where_t
-{
- ptrmemfunc_vbit_in_pfn,
- ptrmemfunc_vbit_in_delta
-};
-
/* Get the POINTER_TYPE to the METHOD_TYPE associated with this
pointer to member function. TYPE_PTRMEMFUNC_P _must_ be true,
before using this macro. */
@@ -3492,6 +3481,8 @@ typedef struct operator_name_info_t
const char *name;
/* The mangled name of the operator. */
const char *mangled_name;
+ /* The arity of the operator. */
+ int arity;
} operator_name_info_t;
/* A mapping from tree codes to operator name information. */
@@ -3693,8 +3684,6 @@ extern void start_decl_1 PARAMS ((tree));
extern void cp_finish_decl PARAMS ((tree, tree, tree, int));
extern void finish_decl PARAMS ((tree, tree, tree));
extern void maybe_inject_for_scope_var PARAMS ((tree));
-extern void initialize_local_var PARAMS ((tree, tree, int));
-extern void expand_static_init PARAMS ((tree, tree));
extern tree start_handler_parms PARAMS ((tree, tree));
extern int complete_array_type PARAMS ((tree, tree, int));
extern tree build_ptrmemfunc_type PARAMS ((tree));
@@ -3869,8 +3858,8 @@ extern void add_friend PARAMS ((tree, tree));
extern tree do_friend PARAMS ((tree, tree, tree, tree, tree, enum overload_flags, tree, int));
/* in init.c */
-extern void emit_base_init PARAMS ((tree, tree));
-extern tree expand_member_init PARAMS ((tree, tree, tree));
+extern tree expand_member_init (tree, tree);
+extern void emit_mem_initializers (tree);
extern tree build_aggr_init PARAMS ((tree, tree, int));
extern tree build_init PARAMS ((tree, tree, int));
extern int is_aggr_type PARAMS ((tree, int));
@@ -4195,6 +4184,7 @@ extern tree cxx_unsave_expr_now PARAMS ((tree));
extern tree cxx_maybe_build_cleanup PARAMS ((tree));
extern void init_tree PARAMS ((void));
extern int pod_type_p PARAMS ((tree));
+extern bool variably_modified_type_p (tree);
extern int zero_init_p PARAMS ((tree));
extern tree canonical_type_variant PARAMS ((tree));
extern void unshare_base_binfos PARAMS ((tree));
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c
index 6905a049e45..7e31045a485 100644
--- a/gcc/cp/cvt.c
+++ b/gcc/cp/cvt.c
@@ -473,12 +473,13 @@ convert_to_reference (reftype, expr, convtype, flags, decl)
tree decl;
{
register tree type = TYPE_MAIN_VARIANT (TREE_TYPE (reftype));
- register tree intype = TREE_TYPE (expr);
+ register tree intype;
tree rval = NULL_TREE;
tree rval_as_conversion = NULL_TREE;
int i;
- if (TREE_CODE (type) == FUNCTION_TYPE && intype == unknown_type_node)
+ if (TREE_CODE (type) == FUNCTION_TYPE
+ && TREE_TYPE (expr) == unknown_type_node)
{
expr = instantiate_type (type, expr,
(flags & LOOKUP_COMPLAIN)
@@ -488,6 +489,11 @@ convert_to_reference (reftype, expr, convtype, flags, decl)
intype = TREE_TYPE (expr);
}
+ else
+ {
+ expr = convert_from_reference (expr);
+ intype = TREE_TYPE (expr);
+ }
my_friendly_assert (TREE_CODE (intype) != REFERENCE_TYPE, 364);
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index a51d268ab6a..cc954f5b76b 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -121,11 +121,10 @@ static void pop_labels PARAMS ((tree));
static void maybe_deduce_size_from_array_init PARAMS ((tree, tree));
static void layout_var_decl PARAMS ((tree));
static void maybe_commonize_var PARAMS ((tree));
-static tree check_initializer PARAMS ((tree, tree));
+static tree check_initializer (tree, tree, int);
static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
static void save_function_data PARAMS ((tree));
static void check_function_type PARAMS ((tree, tree));
-static void destroy_local_var PARAMS ((tree));
static void begin_constructor_body PARAMS ((void));
static void finish_constructor_body PARAMS ((void));
static void begin_destructor_body PARAMS ((void));
@@ -143,6 +142,10 @@ static tree push_cp_library_fn PARAMS ((enum tree_code, tree));
static tree build_cp_library_fn PARAMS ((tree, enum tree_code, tree));
static void store_parm_decls PARAMS ((tree));
static int cp_missing_noreturn_ok_p PARAMS ((tree));
+static void initialize_local_var (tree, tree);
+static void expand_static_init (tree, tree);
+static tree next_initializable_field (tree);
+static tree reshape_init (tree, tree *);
#if defined (DEBUG_BINDING_LEVELS)
static void indent PARAMS ((void));
@@ -1793,7 +1796,7 @@ walk_vtables_r (namespace, data)
int result = 0;
for (; decl ; decl = TREE_CHAIN (decl))
- result != (*f) (&decl, d);
+ result |= (*f) (&decl, d);
return result;
}
@@ -3422,7 +3425,6 @@ duplicate_decls (newdecl, olddecl)
except for any that we copy here from the old type. */
DECL_ATTRIBUTES (newdecl)
= (*targetm.merge_decl_attributes) (olddecl, newdecl);
- decl_attributes (&newdecl, DECL_ATTRIBUTES (newdecl), 0);
if (TREE_CODE (newdecl) == TEMPLATE_DECL)
{
@@ -5517,8 +5519,8 @@ typename_hash (k)
hashval_t hash;
tree t = (tree) k;
- hash = (((hashval_t) TYPE_CONTEXT (t))
- ^ ((hashval_t) DECL_NAME (TYPE_NAME (t))));
+ hash = (htab_hash_pointer (TYPE_CONTEXT (t))
+ ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
return hash;
}
@@ -6510,6 +6512,12 @@ cxx_init_decl_processing ()
flag_inline_functions = 0;
}
+ /* Force minimum function alignment if using the least significant
+ bit of function pointers to store the virtual bit. */
+ if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
+ && force_align_functions_log < 1)
+ force_align_functions_log = 1;
+
/* Initially, C. */
current_lang_name = lang_name_c;
@@ -7284,14 +7292,8 @@ start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
switch (TREE_CODE (decl))
{
case TYPE_DECL:
- /* typedef foo = bar means give foo the same type as bar.
- We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
- Any other case of an initialization in a TYPE_DECL is an error. */
- if (pedantic || list_length (declspecs) > 1)
- {
- error ("typedef `%D' is initialized", decl);
- initialized = 0;
- }
+ error ("typedef `%D' is initialized (use __typeof__ instead)", decl);
+ initialized = 0;
break;
case FUNCTION_DECL:
@@ -7615,7 +7617,11 @@ layout_var_decl (decl)
`extern X x' for some incomplete type `X'.) */
if (!DECL_EXTERNAL (decl))
complete_type (type);
- if (!DECL_SIZE (decl) && COMPLETE_TYPE_P (type))
+ if (!DECL_SIZE (decl)
+ && (COMPLETE_TYPE_P (type)
+ || (TREE_CODE (type) == ARRAY_TYPE
+ && !TYPE_DOMAIN (type)
+ && COMPLETE_TYPE_P (TREE_TYPE (type)))))
layout_decl (decl, 0);
if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
@@ -7728,14 +7734,220 @@ check_for_uninitialized_const_var (decl)
error ("uninitialized const `%D'", decl);
}
+/* FIELD is a FIELD_DECL or NULL. In the former case, the value
+ returned is the next FIELD_DECL (possibly FIELD itself) that can be
+ initialized. If there are no more such fields, the return value
+ will be NULL. */
+
+static tree
+next_initializable_field (tree field)
+{
+ while (field
+ && (TREE_CODE (field) != FIELD_DECL
+ || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
+ || DECL_ARTIFICIAL (field)))
+ field = TREE_CHAIN (field);
+
+ return field;
+}
+
+/* Undo the brace-elision allowed by [dcl.init.aggr] in a
+ brace-enclosed aggregate initializer.
+
+ *INITP is one of a list of initializers describing a brace-enclosed
+ initializer for an entity of the indicated aggregate TYPE. It may
+ not presently match the shape of the TYPE; for example:
+
+ struct S { int a; int b; };
+ struct S a[] = { 1, 2, 3, 4 };
+
+ Here *INITP will point to TREE_LIST of four elements, rather than a
+ list of two elements, each itself a list of two elements. This
+ routine transforms INIT from the former form into the latter. The
+ revised initializer is returned. */
+
+static tree
+reshape_init (tree type, tree *initp)
+{
+ tree inits;
+ tree old_init;
+ tree old_init_value;
+ tree new_init;
+ bool brace_enclosed_p;
+
+ old_init = *initp;
+ old_init_value = (TREE_CODE (*initp) == TREE_LIST
+ ? TREE_VALUE (*initp) : old_init);
+
+ /* If the initializer is brace-enclosed, pull initializers from the
+ enclosed elements. Advance past the brace-enclosed initializer
+ now. */
+ if (TREE_CODE (old_init_value) == CONSTRUCTOR
+ && TREE_HAS_CONSTRUCTOR (old_init_value))
+ {
+ *initp = TREE_CHAIN (old_init);
+ TREE_CHAIN (old_init) = NULL_TREE;
+ inits = CONSTRUCTOR_ELTS (old_init_value);
+ initp = &inits;
+ brace_enclosed_p = true;
+ }
+ else
+ {
+ inits = NULL_TREE;
+ brace_enclosed_p = false;
+ }
+
+ /* A non-aggregate type is always initialized with a single
+ initializer. */
+ if (!CP_AGGREGATE_TYPE_P (type))
+ {
+ *initp = TREE_CHAIN (old_init);
+ TREE_CHAIN (old_init) = NULL_TREE;
+ /* It is invalid to initialize a non-aggregate type with a
+ brace-enclosed initializer. */
+ if (brace_enclosed_p)
+ {
+ error ("brace-enclosed initializer used to initialize `%T'",
+ type);
+ if (TREE_CODE (old_init) == TREE_LIST)
+ TREE_VALUE (old_init) = error_mark_node;
+ else
+ old_init = error_mark_node;
+ }
+
+ return old_init;
+ }
+
+ /* [dcl.init.aggr]
+
+ All implicit type conversions (clause _conv_) are considered when
+ initializing the aggregate member with an initializer from an
+ initializer-list. If the initializer can initialize a member,
+ the member is initialized. Otherwise, if the member is itself a
+ non-empty subaggregate, brace elision is assumed and the
+ initializer is considered for the initialization of the first
+ member of the subaggregate. */
+ if (CLASS_TYPE_P (type)
+ && !brace_enclosed_p
+ && can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value))
+ {
+ *initp = TREE_CHAIN (old_init);
+ TREE_CHAIN (old_init) = NULL_TREE;
+ return old_init;
+ }
+
+ if (TREE_CODE (old_init_value) == STRING_CST
+ && TREE_CODE (type) == ARRAY_TYPE
+ && char_type_p (TREE_TYPE (type)))
+ {
+ /* [dcl.init.string]
+
+ A char array (whether plain char, signed char, or unsigned char)
+ can be initialized by a string-literal (optionally enclosed in
+ braces); a wchar_t array can be initialized by a wide
+ string-literal (optionally enclosed in braces). */
+ new_init = old_init;
+ /* Move past the initializer. */
+ *initp = TREE_CHAIN (old_init);
+ TREE_CHAIN (old_init) = NULL_TREE;
+ }
+ else
+ {
+ /* Build a CONSTRUCTOR to hold the contents of the aggregate. */
+ new_init = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
+ TREE_HAS_CONSTRUCTOR (new_init) = 1;
+
+ if (CLASS_TYPE_P (type))
+ {
+ tree field;
+
+ field = next_initializable_field (TYPE_FIELDS (type));
+
+ if (!field)
+ {
+ /* [dcl.init.aggr]
+
+ An initializer for an aggregate member that is an
+ empty class shall have the form of an empty
+ initializer-list {}. */
+ if (!brace_enclosed_p)
+ error ("initializer for `%T' must be brace-enclosed",
+ type);
+ }
+ else
+ {
+ /* Loop through the initializable fields, gathering
+ initializers. */
+ while (*initp && field)
+ {
+ tree field_init;
+
+ field_init = reshape_init (TREE_TYPE (field), initp);
+ TREE_CHAIN (field_init) = CONSTRUCTOR_ELTS (new_init);
+ CONSTRUCTOR_ELTS (new_init) = field_init;
+ /* [dcl.init.aggr]
+
+ When a union is initialized with a brace-enclosed
+ initializer, the braces shall only contain an
+ initializer for the first member of the union. */
+ if (TREE_CODE (type) == UNION_TYPE)
+ break;
+ if (TREE_PURPOSE (field_init))
+ field = TREE_PURPOSE (field_init);
+ field = next_initializable_field (TREE_CHAIN (field));
+ }
+ }
+ }
+ else if (TREE_CODE (type) == ARRAY_TYPE)
+ {
+ tree index;
+ tree max_index;
+
+ /* If the bound of the array is known, take no more initializers
+ than are allowed. */
+ max_index = (TYPE_DOMAIN (type)
+ ? array_type_nelts (type) : NULL_TREE);
+ /* Loop through the array elements, gathering initializers. */
+ for (index = size_zero_node;
+ *initp && (!max_index || !tree_int_cst_lt (max_index, index));
+ index = size_binop (PLUS_EXPR, index, size_one_node))
+ {
+ tree element_init;
+
+ element_init = reshape_init (TREE_TYPE (type), initp);
+ TREE_CHAIN (element_init) = CONSTRUCTOR_ELTS (new_init);
+ CONSTRUCTOR_ELTS (new_init) = element_init;
+ if (TREE_PURPOSE (element_init))
+ index = TREE_PURPOSE (element_init);
+ }
+ }
+ else
+ abort ();
+
+ /* The initializers were placed in reverse order in the
+ CONSTRUCTOR. */
+ CONSTRUCTOR_ELTS (new_init) = nreverse (CONSTRUCTOR_ELTS (new_init));
+
+ if (TREE_CODE (old_init) == TREE_LIST)
+ new_init = build_tree_list (TREE_PURPOSE (old_init), new_init);
+ }
+
+ /* If this was a brace-enclosed initializer and all of the
+ initializers were not used up, there is a problem. */
+ if (brace_enclosed_p && *initp)
+ error ("too many initializers for `%T'", type);
+
+ return new_init;
+}
+
/* Verify INIT (the initializer for DECL), and record the
- initialization in DECL_INITIAL, if appropriate. Returns a new
- value for INIT. */
+ initialization in DECL_INITIAL, if appropriate.
+
+ If the return value is non-NULL, it is an expression that must be
+ evaluated dynamically to initialize DECL. */
static tree
-check_initializer (decl, init)
- tree decl;
- tree init;
+check_initializer (tree decl, tree init, int flags)
{
tree type = TREE_TYPE (decl);
@@ -7791,22 +8003,49 @@ check_initializer (decl, init)
init = grok_reference_init (decl, type, init);
else if (init)
{
+ if (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
+ init = reshape_init (type, &init);
+
+ /* If DECL has an array type without a specific bound, deduce the
+ array size from the initializer. */
+ maybe_deduce_size_from_array_init (decl, init);
+ type = TREE_TYPE (decl);
+ if (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
+ TREE_TYPE (init) = type;
+
if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
{
if (TREE_CODE (type) == ARRAY_TYPE)
- init = digest_init (type, init, (tree *) 0);
+ goto initialize_aggr;
else if (TREE_CODE (init) == CONSTRUCTOR
&& TREE_HAS_CONSTRUCTOR (init))
{
if (TYPE_NON_AGGREGATE_CLASS (type))
{
error ("`%D' must be initialized by constructor, not by `{...}'",
- decl);
+ decl);
init = error_mark_node;
}
else
goto dont_use_constructor;
}
+ else
+ {
+ int saved_stmts_are_full_exprs_p;
+
+ initialize_aggr:
+ saved_stmts_are_full_exprs_p = 0;
+ if (building_stmt_tree ())
+ {
+ saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
+ current_stmt_tree ()->stmts_are_full_exprs_p = 1;
+ }
+ init = build_aggr_init (decl, init, flags);
+ if (building_stmt_tree ())
+ current_stmt_tree ()->stmts_are_full_exprs_p =
+ saved_stmts_are_full_exprs_p;
+ return init;
+ }
}
else
{
@@ -7817,25 +8056,26 @@ check_initializer (decl, init)
}
else if (DECL_EXTERNAL (decl))
;
- else if (TYPE_P (type)
- && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
+ else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
+ goto initialize_aggr;
+ else if (IS_AGGR_TYPE (type))
{
tree core_type = strip_array_types (type);
- if (! TYPE_NEEDS_CONSTRUCTING (core_type))
- {
- if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
- error ("structure `%D' with uninitialized const members", decl);
- if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
- error ("structure `%D' with uninitialized reference members",
- decl);
- }
+ if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
+ error ("structure `%D' with uninitialized const members", decl);
+ if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
+ error ("structure `%D' with uninitialized reference members",
+ decl);
check_for_uninitialized_const_var (decl);
}
else
check_for_uninitialized_const_var (decl);
+ if (init && init != error_mark_node)
+ init = build (INIT_EXPR, type, decl, init);
+
return init;
}
@@ -7969,35 +8209,25 @@ maybe_inject_for_scope_var (decl)
/* Generate code to initialize DECL (a local variable). */
-void
-initialize_local_var (decl, init, flags)
+static void
+initialize_local_var (decl, init)
tree decl;
tree init;
- int flags;
{
tree type = TREE_TYPE (decl);
- /* If the type is bogus, don't bother initializing the variable. */
- if (type == error_mark_node)
- return;
+ my_friendly_assert (TREE_CODE (decl) == VAR_DECL
+ || TREE_CODE (decl) == RESULT_DECL,
+ 20021010);
+ my_friendly_assert (!TREE_STATIC (decl), 20021010);
- if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
+ if (DECL_SIZE (decl) == NULL_TREE)
{
/* If we used it already as memory, it must stay in memory. */
DECL_INITIAL (decl) = NULL_TREE;
TREE_ADDRESSABLE (decl) = TREE_USED (decl);
}
- /* Local statics are handled differently from ordinary automatic
- variables. */
- if (TREE_STATIC (decl))
- {
- if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
- || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
- expand_static_init (decl, init);
- return;
- }
-
if (DECL_SIZE (decl) && type != error_mark_node)
{
int already_used;
@@ -8005,14 +8235,15 @@ initialize_local_var (decl, init, flags)
/* Compute and store the initial value. */
already_used = TREE_USED (decl) || TREE_USED (type);
- if (init || TYPE_NEEDS_CONSTRUCTING (type))
+ /* Perform the initialization. */
+ if (init)
{
int saved_stmts_are_full_exprs_p;
my_friendly_assert (building_stmt_tree (), 20000906);
saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
current_stmt_tree ()->stmts_are_full_exprs_p = 1;
- finish_expr_stmt (build_aggr_init (decl, init, flags));
+ finish_expr_stmt (init);
current_stmt_tree ()->stmts_are_full_exprs_p =
saved_stmts_are_full_exprs_p;
}
@@ -8031,39 +8262,19 @@ initialize_local_var (decl, init, flags)
else if (already_used)
TREE_USED (decl) = 1;
}
-}
-
-/* Generate code to destroy DECL (a local variable). */
-
-static void
-destroy_local_var (decl)
- tree decl;
-{
- tree type = TREE_TYPE (decl);
- tree cleanup;
- /* Only variables get cleaned up. */
- if (TREE_CODE (decl) != VAR_DECL)
- return;
-
- /* And only things with destructors need cleaning up. */
- if (type == error_mark_node
- || TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
- return;
-
- if (TREE_CODE (decl) == VAR_DECL &&
- (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
- /* We don't clean up things that aren't defined in this
- translation unit, or that need a static cleanup. The latter
- are handled by finish_file. */
- return;
-
- /* Compute the cleanup. */
- cleanup = cxx_maybe_build_cleanup (decl);
+ /* Generate a cleanup, if necessary. */
+ if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
+ {
+ tree cleanup;
- /* Record the cleanup required for this declaration. */
- if (DECL_SIZE (decl) && cleanup)
- finish_decl_cleanup (decl, cleanup);
+ /* Compute the cleanup. */
+ cleanup = cxx_maybe_build_cleanup (decl);
+
+ /* Record the cleanup required for this declaration. */
+ if (DECL_SIZE (decl) && cleanup)
+ finish_decl_cleanup (decl, cleanup);
+ }
}
/* Finish processing of a declaration;
@@ -8150,12 +8361,6 @@ cp_finish_decl (decl, init, asmspec_tree, flags)
/* Take care of TYPE_DECLs up front. */
if (TREE_CODE (decl) == TYPE_DECL)
{
- if (init && DECL_INITIAL (decl))
- {
- /* typedef foo = bar; store the type of bar as the type of foo. */
- TREE_TYPE (decl) = type = TREE_TYPE (init);
- DECL_INITIAL (decl) = init = NULL_TREE;
- }
if (type != error_mark_node
&& IS_AGGR_TYPE (type) && DECL_NAME (decl))
{
@@ -8200,7 +8405,7 @@ cp_finish_decl (decl, init, asmspec_tree, flags)
make_decl_rtl (decl, asmspec);
}
else if (TREE_CODE (decl) == RESULT_DECL)
- init = check_initializer (decl, init);
+ init = check_initializer (decl, init, flags);
else if (TREE_CODE (decl) == VAR_DECL)
{
/* Only PODs can have thread-local storage. Other types may require
@@ -8212,21 +8417,19 @@ cp_finish_decl (decl, init, asmspec_tree, flags)
already initialized DECL. */
if (!DECL_INITIALIZED_P (decl)
/* If !DECL_EXTERNAL then DECL is being defined. In the
- case of a static data memberm initialized inside the
+ case of a static data member initialized inside the
class-specifier, there can be an initializer even if DECL
is *not* defined. */
&& (!DECL_EXTERNAL (decl) || init))
{
- init = check_initializer (decl, init);
- /* If DECL has an array type without a specific bound, deduce the
- array size from the initializer. Note that this must be done
- after check_initializer is called because of cases like this:
-
- struct S { int a; int b; };
- struct S a[] = { 1, 2 };
-
- which creates a one-element array, not a two-element array. */
- maybe_deduce_size_from_array_init (decl, init);
+ init = check_initializer (decl, init, flags);
+ /* Thread-local storage cannot be dynamically initialized. */
+ if (DECL_THREAD_LOCAL (decl) && init)
+ {
+ error ("`%D' is thread-local and so cannot be dynamically "
+ "initialized", decl);
+ init = NULL_TREE;
+ }
/* Handle:
[dcl.init]
@@ -8283,7 +8486,9 @@ cp_finish_decl (decl, init, asmspec_tree, flags)
else
abstract_virtuals_error (decl, strip_array_types (type));
- if (TREE_CODE (decl) == FUNCTION_DECL)
+ if (TREE_CODE (decl) == FUNCTION_DECL
+ || TREE_TYPE (decl) == error_mark_node)
+ /* No initialization required. */
;
else if (DECL_EXTERNAL (decl)
&& ! (DECL_LANG_SPECIFIC (decl)
@@ -8292,35 +8497,25 @@ cp_finish_decl (decl, init, asmspec_tree, flags)
if (init)
DECL_INITIAL (decl) = init;
}
- else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
+ else
{
- /* This is a local declaration. */
- if (doing_semantic_analysis_p ())
- maybe_inject_for_scope_var (decl);
- /* Initialize the local variable. But, if we're building a
- statement-tree, we'll do the initialization when we
- expand the tree. */
- if (processing_template_decl)
+ /* A variable definition. */
+ if (DECL_FUNCTION_SCOPE_P (decl))
{
- if (init || DECL_INITIAL (decl) == error_mark_node)
- DECL_INITIAL (decl) = init;
- }
- else
- {
- /* If we're not building RTL, then we need to do so
- now. */
- my_friendly_assert (building_stmt_tree (), 20000906);
- /* Initialize the variable. */
- initialize_local_var (decl, init, flags);
- /* Clean up the variable. */
- destroy_local_var (decl);
+ /* This is a local declaration. */
+ if (doing_semantic_analysis_p ())
+ maybe_inject_for_scope_var (decl);
+ /* Initialize the local variable. */
+ if (processing_template_decl)
+ {
+ if (init || DECL_INITIAL (decl) == error_mark_node)
+ DECL_INITIAL (decl) = init;
+ }
+ else if (!TREE_STATIC (decl))
+ initialize_local_var (decl, init);
}
- }
- else if (TREE_STATIC (decl) && type != error_mark_node)
- {
- /* Cleanups for static variables are handled by `finish_file'. */
- if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
- || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
+
+ if (TREE_STATIC (decl))
expand_static_init (decl, init);
}
finish_end0:
@@ -8600,12 +8795,27 @@ register_dtor_fn (decl)
finish_expr_stmt (build_function_call (get_atexit_node (), args));
}
-void
+/* DECL is a VAR_DECL with static storage duration. INIT, if present,
+ is its initializer. Generate code to handle the construction
+ and destruction of DECL. */
+
+static void
expand_static_init (decl, init)
tree decl;
tree init;
{
- tree oldstatic = value_member (decl, static_aggregates);
+ tree oldstatic;
+
+ my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 20021010);
+ my_friendly_assert (TREE_STATIC (decl), 20021010);
+
+ /* Some variables require no initialization. */
+ if (!init
+ && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
+ && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
+ return;
+
+ oldstatic = value_member (decl, static_aggregates);
if (oldstatic)
{
@@ -8655,15 +8865,7 @@ expand_static_init (decl, init)
then_clause = begin_compound_stmt (/*has_no_scope=*/0);
/* Do the initialization itself. */
- if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
- || (init && TREE_CODE (init) == TREE_LIST))
- assignment = build_aggr_init (decl, init, 0);
- else if (init)
- /* The initialization we're doing here is just a bitwise
- copy. */
- assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
- else
- assignment = NULL_TREE;
+ assignment = init ? init : NULL_TREE;
/* Once the assignment is complete, set TEMP to 1. Since the
construction of the static object is complete at this point,
@@ -10055,6 +10257,15 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
case BASELINK:
next = &BASELINK_FUNCTIONS (decl);
break;
+
+ case TEMPLATE_DECL:
+ /* Sometimes, we see a template-name used as part of a
+ decl-specifier like in
+ std::allocator alloc;
+ Handle that gracefully. */
+ error ("invalid use of template-name '%E' in a declarator", decl);
+ return error_mark_node;
+ break;
default:
my_friendly_assert (0, 20020917);
@@ -10725,19 +10936,6 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
type = create_array_type_for_decl (dname, type, size);
- /* VLAs never work as fields. */
- if (decl_context == FIELD && !processing_template_decl
- && TREE_CODE (type) == ARRAY_TYPE
- && TYPE_DOMAIN (type) != NULL_TREE
- && !TREE_CONSTANT (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
- {
- error ("size of member `%D' is not constant", dname);
- /* Proceed with arbitrary constant size, so that offset
- computations don't get confused. */
- type = create_array_type_for_decl (dname, TREE_TYPE (type),
- integer_one_node);
- }
-
ctype = NULL_TREE;
}
break;
@@ -11217,6 +11415,14 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
type = error_mark_node;
}
+ if (decl_context == FIELD
+ && !processing_template_decl
+ && variably_modified_type_p (type))
+ {
+ error ("data member may not have variably modified type `%T'", type);
+ type = error_mark_node;
+ }
+
if (explicitp == 1 || (explicitp && friendp))
{
/* [dcl.fct.spec] The explicit specifier shall only be used in
@@ -11356,9 +11562,6 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
inlinep, friendp, raises != NULL_TREE);
- if (initialized)
- error ("typedef declaration includes an initializer");
-
return decl;
}
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 2ccc357bcc1..a39e4fb2a59 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -61,7 +61,6 @@ typedef struct priority_info_s {
static void mark_vtable_entries PARAMS ((tree));
static void grok_function_init PARAMS ((tree, tree));
static int finish_vtable_vardecl PARAMS ((tree *, void *));
-static int prune_vtable_vardecl PARAMS ((tree *, void *));
static int is_namespace_ancestor PARAMS ((tree, tree));
static void add_using_namespace PARAMS ((tree, tree, int));
static tree ambiguous_decl PARAMS ((tree, tree, tree,int));
@@ -1382,26 +1381,31 @@ finish_anon_union (anon_union_decl)
return;
}
- main_decl = build_anon_union_vars (anon_union_decl,
- &DECL_ANON_UNION_ELEMS (anon_union_decl),
- static_p, external_p);
-
- if (main_decl == NULL_TREE)
+ if (!processing_template_decl)
{
- warning ("anonymous aggregate with no members");
- return;
- }
+ main_decl
+ = build_anon_union_vars (anon_union_decl,
+ &DECL_ANON_UNION_ELEMS (anon_union_decl),
+ static_p, external_p);
+
+ if (main_decl == NULL_TREE)
+ {
+ warning ("anonymous aggregate with no members");
+ return;
+ }
- if (static_p)
- {
- make_decl_rtl (main_decl, 0);
- COPY_DECL_RTL (main_decl, anon_union_decl);
- expand_anon_union_decl (anon_union_decl,
- NULL_TREE,
- DECL_ANON_UNION_ELEMS (anon_union_decl));
+ if (static_p)
+ {
+ make_decl_rtl (main_decl, 0);
+ COPY_DECL_RTL (main_decl, anon_union_decl);
+ expand_anon_union_decl (anon_union_decl,
+ NULL_TREE,
+ DECL_ANON_UNION_ELEMS (anon_union_decl));
+ return;
+ }
}
- else
- add_decl_stmt (anon_union_decl);
+
+ add_decl_stmt (anon_union_decl);
}
/* Auxiliary functions to make type signatures for
@@ -1837,15 +1841,6 @@ finish_vtable_vardecl (t, data)
return 0;
}
-static int
-prune_vtable_vardecl (t, data)
- tree *t;
- void *data ATTRIBUTE_UNUSED;
-{
- *t = TREE_CHAIN (*t);
- return 1;
-}
-
/* Determines the proper settings of TREE_PUBLIC and DECL_EXTERNAL for an
inline function or template instantiation at end-of-file. */
@@ -2476,34 +2471,24 @@ finish_static_initialization_or_destruction (guard_if_stmt)
DECL_STATIC_FUNCTION_P (current_function_decl) = 0;
}
-/* Generate code to do the static initialization of DECL. The
- initialization is INIT. If DECL may be initialized more than once
- in different object files, GUARD is the guard variable to
- check. PRIORITY is the priority for the initialization. */
+/* Generate code to do the initialization of DECL, a VAR_DECL with
+ static storage duration. The initialization is INIT. */
static void
do_static_initialization (decl, init)
tree decl;
tree init;
{
- tree expr;
tree guard_if_stmt;
/* Set up for the initialization. */
guard_if_stmt
= start_static_initialization_or_destruction (decl,
/*initp=*/1);
-
- /* Do the initialization itself. */
- if (IS_AGGR_TYPE (TREE_TYPE (decl))
- || TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
- expr = build_aggr_init (decl, init, 0);
- else
- {
- expr = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
- TREE_SIDE_EFFECTS (expr) = 1;
- }
- finish_expr_stmt (expr);
+
+ /* Perform the initialization. */
+ if (init)
+ finish_expr_stmt (init);
/* If we're using __cxa_atexit, register a a function that calls the
destructor for the object. */
@@ -2535,7 +2520,7 @@ do_static_destruction (decl)
/* Actually do the destruction. */
guard_if_stmt = start_static_initialization_or_destruction (decl,
- /*initp=*/0);
+ /*initp=*/0);
finish_expr_stmt (build_cleanup (decl));
finish_static_initialization_or_destruction (guard_if_stmt);
}
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index 7d270b2280c..872a55677a2 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -1508,13 +1508,8 @@ dump_expr (t, flags)
break;
case REAL_CST:
- {
- const unsigned char *p = (const unsigned char *) &TREE_REAL_CST (t);
- size_t i;
- strcpy (digit_buffer, "0x");
- for (i = 0; i < sizeof TREE_REAL_CST (t); i++)
- sprintf (digit_buffer + 2 + 2*i, "%02x", *p++);
- }
+ real_to_decimal (digit_buffer, &TREE_REAL_CST (t),
+ sizeof (digit_buffer), 0, 1);
output_add_string (scratch_buffer, digit_buffer);
break;
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index ec74a256639..a7db6267853 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -34,17 +34,15 @@ Boston, MA 02111-1307, USA. */
#include "toplev.h"
#include "ggc.h"
-static void expand_aggr_vbase_init_1 PARAMS ((tree, tree, tree, tree));
-static void construct_virtual_bases PARAMS ((tree, tree, tree, tree, tree));
+static void construct_virtual_base (tree, tree);
static void expand_aggr_init_1 PARAMS ((tree, tree, tree, tree, int));
static void expand_default_init PARAMS ((tree, tree, tree, tree, int));
static tree build_vec_delete_1 PARAMS ((tree, tree, tree, special_function_kind, int));
-static void perform_member_init PARAMS ((tree, tree, int));
-static void sort_base_init PARAMS ((tree, tree, tree *, tree *));
+static void perform_member_init (tree, tree);
static tree build_builtin_delete_call PARAMS ((tree));
static int member_init_ok_or_else PARAMS ((tree, tree, tree));
static void expand_virtual_init PARAMS ((tree, tree));
-static tree sort_member_init PARAMS ((tree, tree));
+static tree sort_mem_initializers (tree, tree);
static tree initializing_context PARAMS ((tree));
static void expand_cleanup_for_base PARAMS ((tree, tree));
static tree get_temp_regvar PARAMS ((tree, tree));
@@ -303,16 +301,30 @@ build_default_init (type)
return build_zero_init (type, /*static_storage_p=*/false);
}
-/* Subroutine of emit_base_init. */
+/* Initialize MEMBER, a FIELD_DECL, with INIT, a TREE_LIST of
+ arguments. If TREE_LIST is void_type_node, an empty initializer
+ list was given; if NULL_TREE no initializer was given. */
static void
-perform_member_init (member, init, explicit)
- tree member, init;
- int explicit;
+perform_member_init (tree member, tree init)
{
tree decl;
tree type = TREE_TYPE (member);
+ bool explicit;
+ explicit = (init != NULL_TREE);
+
+ /* Effective C++ rule 12 requires that all data members be
+ initialized. */
+ if (warn_ecpp && !explicit && TREE_CODE (type) != ARRAY_TYPE)
+ warning ("`%D' should be initialized in the member initialization "
+ "list",
+ member);
+
+ if (init == void_type_node)
+ init = NULL_TREE;
+
+ /* Get an lvalue for the data member. */
decl = build_class_member_access_expr (current_class_ref, member,
/*access_path=*/NULL_TREE,
/*preserve_reference=*/true);
@@ -333,11 +345,6 @@ perform_member_init (member, init, explicit)
else if (TYPE_NEEDS_CONSTRUCTING (type)
|| (init && TYPE_HAS_CONSTRUCTOR (type)))
{
- /* Since `init' is already a TREE_LIST on the member_init_list,
- only build it into one if we aren't already a list. */
- if (init != NULL_TREE && TREE_CODE (init) != TREE_LIST)
- init = build_tree_list (NULL_TREE, init);
-
if (explicit
&& TREE_CODE (type) == ARRAY_TYPE
&& init != NULL_TREE
@@ -409,6 +416,8 @@ build_field_list (t, list, uses_unions_p)
{
tree fields;
+ *uses_unions_p = 0;
+
/* Note whether or not T is a union. */
if (TREE_CODE (t) == UNION_TYPE)
*uses_unions_p = 1;
@@ -443,79 +452,107 @@ build_field_list (t, list, uses_unions_p)
return list;
}
-/* The MEMBER_INIT_LIST is a TREE_LIST. The TREE_PURPOSE of each list
- gives a FIELD_DECL in T that needs initialization. The TREE_VALUE
- gives the initializer, or list of initializer arguments. Sort the
- MEMBER_INIT_LIST, returning a version that contains the same
- information but in the order that the fields should actually be
- initialized. Perform error-checking in the process. */
+/* The MEM_INITS are a TREE_LIST. The TREE_PURPOSE of each list gives
+ a FIELD_DECL or BINFO in T that needs initialization. The
+ TREE_VALUE gives the initializer, or list of initializer arguments.
+
+ Return a TREE_LIST containing all of the initializations required
+ for T, in the order in which they should be performed. The output
+ list has the same format as the input. */
static tree
-sort_member_init (t, member_init_list)
- tree t;
- tree member_init_list;
+sort_mem_initializers (tree t, tree mem_inits)
{
- tree init_list;
- tree last_field;
tree init;
+ tree base;
+ tree sorted_inits;
+ tree next_subobject;
+ int i;
int uses_unions_p;
- /* Build up a list of the various fields, in sorted order. */
- init_list = nreverse (build_field_list (t, NULL_TREE, &uses_unions_p));
-
- /* Go through the explicit initializers, adding them to the
- INIT_LIST. */
- last_field = init_list;
- for (init = member_init_list; init; init = TREE_CHAIN (init))
- {
- tree f;
- tree initialized_field;
-
- initialized_field = TREE_PURPOSE (init);
- my_friendly_assert (TREE_CODE (initialized_field) == FIELD_DECL,
- 20000516);
-
- /* If the explicit initializers are in sorted order, then the
- INITIALIZED_FIELD will be for a field following the
- LAST_FIELD. */
- for (f = last_field; f; f = TREE_CHAIN (f))
- if (TREE_PURPOSE (f) == initialized_field)
+ /* Build up a list of initializations. The TREE_PURPOSE of entry
+ will be the subobject (a FIELD_DECL or BINFO) to initialize. The
+ TREE_VALUE will be the constructor arguments, or NULL if no
+ explicit initialization was provided. */
+ sorted_inits = NULL_TREE;
+ /* Process the virtual bases. */
+ for (base = CLASSTYPE_VBASECLASSES (t); base; base = TREE_CHAIN (base))
+ sorted_inits = tree_cons (TREE_VALUE (base), NULL_TREE, sorted_inits);
+ /* Process the direct bases. */
+ for (i = 0; i < CLASSTYPE_N_BASECLASSES (t); ++i)
+ {
+ base = BINFO_BASETYPE (TYPE_BINFO (t), i);
+ if (!TREE_VIA_VIRTUAL (base))
+ sorted_inits = tree_cons (base, NULL_TREE, sorted_inits);
+ }
+ /* Process the non-static data members. */
+ sorted_inits = build_field_list (t, sorted_inits, &uses_unions_p);
+ /* Reverse the entire list of initializations, so that they are in
+ the order that they will actually be performed. */
+ sorted_inits = nreverse (sorted_inits);
+
+ /* If the user presented the initializers in an order different from
+ that in which they will actually occur, we issue a warning. Keep
+ track of the next subobject which can be explicitly initialized
+ without issuing a warning. */
+ next_subobject = sorted_inits;
+
+ /* Go through the explicit initializers, filling in TREE_PURPOSE in
+ the SORTED_INITS. */
+ for (init = mem_inits; init; init = TREE_CHAIN (init))
+ {
+ tree subobject;
+ tree subobject_init;
+
+ subobject = TREE_PURPOSE (init);
+
+ /* If the explicit initializers are in sorted order, then
+ SUBOBJECT will be NEXT_SUBOBJECT, or something following
+ it. */
+ for (subobject_init = next_subobject;
+ subobject_init;
+ subobject_init = TREE_CHAIN (subobject_init))
+ if (TREE_PURPOSE (subobject_init) == subobject)
break;
- /* Give a warning, if appropriate. */
- if (warn_reorder && !f)
+ /* Issue a warning if the explicit initializer order does not
+ match that which will actually occur. */
+ if (warn_reorder && !subobject_init)
{
- cp_warning_at ("member initializers for `%#D'",
- TREE_PURPOSE (last_field));
- cp_warning_at (" and `%#D'", initialized_field);
- warning (" will be re-ordered to match declaration order");
+ if (TREE_CODE (TREE_PURPOSE (next_subobject)) == FIELD_DECL)
+ cp_warning_at ("`%D' will be initialized after",
+ TREE_PURPOSE (next_subobject));
+ else
+ warning ("base `%T' will be initialized after",
+ TREE_PURPOSE (next_subobject));
+ if (TREE_CODE (subobject) == FIELD_DECL)
+ cp_warning_at (" `%#D'", subobject);
+ else
+ warning (" base `%T'", subobject);
}
- /* Look again, from the beginning of the list. We must find the
- field on this loop. */
- if (!f)
+ /* Look again, from the beginning of the list. */
+ if (!subobject_init)
{
- f = init_list;
- while (TREE_PURPOSE (f) != initialized_field)
- f = TREE_CHAIN (f);
+ subobject_init = sorted_inits;
+ while (TREE_PURPOSE (subobject_init) != subobject)
+ subobject_init = TREE_CHAIN (subobject_init);
}
-
- /* If there was already an explicit initializer for this field,
- issue an error. */
- if (TREE_TYPE (f))
- error ("multiple initializations given for member `%D'",
- initialized_field);
- else
+
+ /* It is invalid to initialize the same subobject more than
+ once. */
+ if (TREE_VALUE (subobject_init))
{
- /* Mark the field as explicitly initialized. */
- TREE_TYPE (f) = error_mark_node;
- /* And insert the initializer. */
- TREE_VALUE (f) = TREE_VALUE (init);
+ if (TREE_CODE (subobject) == FIELD_DECL)
+ error ("multiple initializations given for `%D'", subobject);
+ else
+ error ("multiple initializations given for base `%T'",
+ subobject);
}
- /* Remember the location of the last explicitly initialized
- field. */
- last_field = f;
+ /* Record the initialization. */
+ TREE_VALUE (subobject_init) = TREE_VALUE (init);
+ next_subobject = subobject_init;
}
/* [class.base.init]
@@ -525,15 +562,16 @@ sort_member_init (t, member_init_list)
anonymous unions), the ctor-initializer is ill-formed. */
if (uses_unions_p)
{
- last_field = NULL_TREE;
- for (init = init_list; init; init = TREE_CHAIN (init))
+ tree last_field = NULL_TREE;
+ for (init = sorted_inits; init; init = TREE_CHAIN (init))
{
tree field;
tree field_type;
int done;
- /* Skip uninitialized members. */
- if (!TREE_TYPE (init))
+ /* Skip uninitialized members and base classes. */
+ if (!TREE_VALUE (init)
+ || TREE_CODE (TREE_PURPOSE (init)) != FIELD_DECL)
continue;
/* See if this field is a member of a union, or a member of a
structure contained in a union, etc. */
@@ -600,231 +638,73 @@ sort_member_init (t, member_init_list)
}
}
- return init_list;
-}
-
-/* Like sort_member_init, but used for initializers of base classes.
- *RBASE_PTR is filled in with the initializers for non-virtual bases;
- vbase_ptr gets the virtual bases. */
-
-static void
-sort_base_init (t, base_init_list, rbase_ptr, vbase_ptr)
- tree t;
- tree base_init_list;
- tree *rbase_ptr, *vbase_ptr;
-{
- tree binfos = BINFO_BASETYPES (TYPE_BINFO (t));
- int n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
-
- int i;
- tree x;
- tree last;
-
- /* For warn_reorder. */
- int last_pos = 0;
- tree last_base = NULL_TREE;
-
- tree rbases = NULL_TREE;
- tree vbases = NULL_TREE;
-
- /* First walk through and splice out vbase and invalid initializers.
- Also replace types with binfos. */
-
- last = tree_cons (NULL_TREE, NULL_TREE, base_init_list);
- for (x = TREE_CHAIN (last); x; x = TREE_CHAIN (x))
- {
- tree basetype = TREE_PURPOSE (x);
- tree binfo = (TREE_CODE (basetype) == TREE_VEC
- ? basetype : binfo_or_else (basetype, t));
-
- if (binfo == NULL_TREE)
- /* BASETYPE might be an inaccessible direct base (because it
- is also an indirect base). */
- continue;
-
- if (TREE_VIA_VIRTUAL (binfo))
- {
- /* Virtual base classes are special cases. Their
- initializers are recorded with this constructor, and they
- are used when this constructor is the top-level
- constructor called. */
- tree v = binfo_for_vbase (BINFO_TYPE (binfo), t);
- vbases = tree_cons (v, TREE_VALUE (x), vbases);
- }
- else
- {
- /* Otherwise, it must be an immediate base class. */
- my_friendly_assert
- (same_type_p (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
- t), 20011113);
-
- TREE_PURPOSE (x) = binfo;
- TREE_CHAIN (last) = x;
- last = x;
- }
- }
- TREE_CHAIN (last) = NULL_TREE;
-
- /* Now walk through our regular bases and make sure they're initialized. */
-
- for (i = 0; i < n_baseclasses; ++i)
- {
- /* The base for which we're currently initializing. */
- tree base_binfo = TREE_VEC_ELT (binfos, i);
- /* The initializer for BASE_BINFO. */
- tree init;
- int pos;
-
- if (TREE_VIA_VIRTUAL (base_binfo))
- continue;
-
- /* We haven't found the BASE_BINFO yet. */
- init = NULL_TREE;
- /* Loop through all the explicitly initialized bases, looking
- for an appropriate initializer. */
- for (x = base_init_list, pos = 0; x; x = TREE_CHAIN (x), ++pos)
- {
- tree binfo = TREE_PURPOSE (x);
-
- if (binfo == base_binfo && !init)
- {
- if (warn_reorder)
- {
- if (pos < last_pos)
- {
- cp_warning_at ("base initializers for `%#T'", last_base);
- cp_warning_at (" and `%#T'", BINFO_TYPE (binfo));
- warning (" will be re-ordered to match inheritance order");
- }
- last_pos = pos;
- last_base = BINFO_TYPE (binfo);
- }
-
- /* Make sure we won't try to work on this init again. */
- TREE_PURPOSE (x) = NULL_TREE;
- init = build_tree_list (binfo, TREE_VALUE (x));
- }
- else if (binfo == base_binfo)
- {
- error ("base class `%T' already initialized",
- BINFO_TYPE (binfo));
- break;
- }
- }
-
- /* If we didn't find BASE_BINFO in the list, create a dummy entry
- so the two lists (RBASES and the list of bases) will be
- symmetrical. */
- if (!init)
- init = build_tree_list (NULL_TREE, NULL_TREE);
- rbases = chainon (rbases, init);
- }
-
- *rbase_ptr = rbases;
- *vbase_ptr = vbases;
+ return sorted_inits;
}
-/* Perform whatever initializations have yet to be done on the base
- class, and non-static data members, of the CURRENT_CLASS_TYPE.
- These actions are given by the BASE_INIT_LIST and MEM_INIT_LIST,
- respectively.
-
- If there is a need for a call to a constructor, we must surround
- that call with a pushlevel/poplevel pair, since we are technically
- at the PARM level of scope. */
+/* Initialize all bases and members of CURRENT_CLASS_TYPE. MEM_INITS
+ is a TREE_LIST giving the explicit mem-initializer-list for the
+ constructor. The TREE_PURPOSE of each entry is a subobject (a
+ FIELD_DECL or a BINFO) of the CURRENT_CLASS_TYPE. The TREE_VALUE
+ is a TREE_LIST giving the arguments to the constructor or
+ void_type_node for an empty list of arguments. */
void
-emit_base_init (mem_init_list, base_init_list)
- tree mem_init_list;
- tree base_init_list;
+emit_mem_initializers (tree mem_inits)
{
- tree member;
- tree rbase_init_list, vbase_init_list;
- tree t = current_class_type;
- tree t_binfo = TYPE_BINFO (t);
- tree binfos = BINFO_BASETYPES (t_binfo);
- int i;
- int n_baseclasses = BINFO_N_BASETYPES (t_binfo);
-
- mem_init_list = sort_member_init (t, mem_init_list);
- sort_base_init (t, base_init_list, &rbase_init_list, &vbase_init_list);
-
- /* First, initialize the virtual base classes, if we are
- constructing the most-derived object. */
- if (TYPE_USES_VIRTUAL_BASECLASSES (t))
- {
- tree first_arg = TREE_CHAIN (DECL_ARGUMENTS (current_function_decl));
- construct_virtual_bases (t, current_class_ref, current_class_ptr,
- vbase_init_list, first_arg);
- }
-
- /* Now, perform initialization of non-virtual base classes. */
- for (i = 0; i < n_baseclasses; i++)
- {
- tree base_binfo = TREE_VEC_ELT (binfos, i);
- tree init = void_list_node;
-
- if (TREE_VIA_VIRTUAL (base_binfo))
- continue;
-
- my_friendly_assert (BINFO_INHERITANCE_CHAIN (base_binfo) == t_binfo,
- 999);
-
- if (TREE_PURPOSE (rbase_init_list))
- init = TREE_VALUE (rbase_init_list);
- else if (TYPE_NEEDS_CONSTRUCTING (BINFO_TYPE (base_binfo)))
- {
- init = NULL_TREE;
- if (extra_warnings
- && DECL_COPY_CONSTRUCTOR_P (current_function_decl))
- warning ("base class `%#T' should be explicitly initialized in the copy constructor",
- BINFO_TYPE (base_binfo));
- }
-
- if (init != void_list_node)
+ /* Sort the mem-initializers into the order in which the
+ initializations should be performed. */
+ mem_inits = sort_mem_initializers (current_class_type, mem_inits);
+
+ /* Initialize base classes. */
+ while (mem_inits
+ && TREE_CODE (TREE_PURPOSE (mem_inits)) != FIELD_DECL)
+ {
+ tree subobject = TREE_PURPOSE (mem_inits);
+ tree arguments = TREE_VALUE (mem_inits);
+
+ /* If these initializations are taking place in a copy
+ constructor, the base class should probably be explicitly
+ initialized. */
+ if (extra_warnings && !arguments
+ && DECL_COPY_CONSTRUCTOR_P (current_function_decl)
+ && TYPE_NEEDS_CONSTRUCTING (BINFO_TYPE (subobject)))
+ warning ("base class `%#T' should be explicitly initialized in the "
+ "copy constructor",
+ BINFO_TYPE (subobject));
+
+ /* If an explicit -- but empty -- initializer list was present,
+ treat it just like default initialization at this point. */
+ if (arguments == void_type_node)
+ arguments = NULL_TREE;
+
+ /* Initialize the base. */
+ if (TREE_VIA_VIRTUAL (subobject))
+ construct_virtual_base (subobject, arguments);
+ else
{
- member = build_base_path (PLUS_EXPR, current_class_ptr,
- base_binfo, 1);
- expand_aggr_init_1 (base_binfo, NULL_TREE,
- build_indirect_ref (member, NULL), init,
+ tree base_addr;
+
+ base_addr = build_base_path (PLUS_EXPR, current_class_ptr,
+ subobject, 1);
+ expand_aggr_init_1 (subobject, NULL_TREE,
+ build_indirect_ref (base_addr, NULL),
+ arguments,
LOOKUP_NORMAL);
+ expand_cleanup_for_base (subobject, NULL_TREE);
}
- expand_cleanup_for_base (base_binfo, NULL_TREE);
- rbase_init_list = TREE_CHAIN (rbase_init_list);
+ mem_inits = TREE_CHAIN (mem_inits);
}
- /* Initialize the vtable pointers for the class. */
+ /* Initialize the vptrs. */
initialize_vtbl_ptrs (current_class_ptr);
- while (mem_init_list)
+ /* Initialize the data members. */
+ while (mem_inits)
{
- tree init;
- tree member;
- int from_init_list;
-
- member = TREE_PURPOSE (mem_init_list);
-
- /* See if we had a user-specified member initialization. */
- if (TREE_TYPE (mem_init_list))
- {
- init = TREE_VALUE (mem_init_list);
- from_init_list = 1;
- }
- else
- {
- init = DECL_INITIAL (member);
- from_init_list = 0;
-
- /* Effective C++ rule 12. */
- if (warn_ecpp && init == NULL_TREE
- && !DECL_ARTIFICIAL (member)
- && TREE_CODE (TREE_TYPE (member)) != ARRAY_TYPE)
- warning ("`%D' should be initialized in the member initialization list", member);
- }
-
- perform_member_init (member, init, from_init_list);
- mem_init_list = TREE_CHAIN (mem_init_list);
+ perform_member_init (TREE_PURPOSE (mem_inits),
+ TREE_VALUE (mem_inits));
+ mem_inits = TREE_CHAIN (mem_inits);
}
}
@@ -948,89 +828,57 @@ expand_cleanup_for_base (binfo, flag)
finish_eh_cleanup (expr);
}
-/* Subroutine of `expand_aggr_vbase_init'.
- BINFO is the binfo of the type that is being initialized.
- INIT_LIST is the list of initializers for the virtual baseclass. */
+/* Construct the virtual base-class VBASE passing the ARGUMENTS to its
+ constructor. */
static void
-expand_aggr_vbase_init_1 (binfo, exp, addr, init_list)
- tree binfo, exp, addr, init_list;
-{
- tree init = purpose_member (binfo, init_list);
- tree ref = build_indirect_ref (addr, NULL);
-
- if (init)
- init = TREE_VALUE (init);
- /* Call constructors, but don't set up vtables. */
- expand_aggr_init_1 (binfo, exp, ref, init, LOOKUP_COMPLAIN);
-}
-
-/* Construct the virtual base-classes of THIS_REF (whose address is
- THIS_PTR). The object has the indicated TYPE. The construction
- actually takes place only if FLAG is nonzero. INIT_LIST is list
- of initializations for constructors to perform. */
-
-static void
-construct_virtual_bases (type, this_ref, this_ptr, init_list, flag)
- tree type;
- tree this_ref;
- tree this_ptr;
- tree init_list;
- tree flag;
+construct_virtual_base (tree vbase, tree arguments)
{
- tree vbases;
-
- /* If there are no virtual baseclasses, we shouldn't even be here. */
- my_friendly_assert (TYPE_USES_VIRTUAL_BASECLASSES (type), 19990621);
-
- /* Now, run through the baseclasses, initializing each. */
- for (vbases = CLASSTYPE_VBASECLASSES (type); vbases;
- vbases = TREE_CHAIN (vbases))
- {
- tree inner_if_stmt;
- tree compound_stmt;
- tree exp;
- tree vbase;
-
- /* If there are virtual base classes with destructors, we need to
- emit cleanups to destroy them if an exception is thrown during
- the construction process. These exception regions (i.e., the
- period during which the cleanups must occur) begin from the time
- the construction is complete to the end of the function. If we
- create a conditional block in which to initialize the
- base-classes, then the cleanup region for the virtual base begins
- inside a block, and ends outside of that block. This situation
- confuses the sjlj exception-handling code. Therefore, we do not
- create a single conditional block, but one for each
- initialization. (That way the cleanup regions always begin
- in the outer block.) We trust the back-end to figure out
- that the FLAG will not change across initializations, and
- avoid doing multiple tests. */
- inner_if_stmt = begin_if_stmt ();
- finish_if_stmt_cond (flag, inner_if_stmt);
- compound_stmt = begin_compound_stmt (/*has_no_scope=*/1);
-
- /* Compute the location of the virtual base. If we're
- constructing virtual bases, then we must be the most derived
- class. Therefore, we don't have to look up the virtual base;
- we already know where it is. */
- vbase = TREE_VALUE (vbases);
- exp = build (PLUS_EXPR,
- TREE_TYPE (this_ptr),
- this_ptr,
- fold (build1 (NOP_EXPR, TREE_TYPE (this_ptr),
- BINFO_OFFSET (vbase))));
- exp = build1 (NOP_EXPR,
- build_pointer_type (BINFO_TYPE (vbase)),
- exp);
-
- expand_aggr_vbase_init_1 (vbase, this_ref, exp, init_list);
- finish_compound_stmt (/*has_no_scope=*/1, compound_stmt);
- finish_then_clause (inner_if_stmt);
- finish_if_stmt ();
-
- expand_cleanup_for_base (vbase, flag);
- }
+ tree inner_if_stmt;
+ tree compound_stmt;
+ tree exp;
+ tree flag;
+
+ /* If there are virtual base classes with destructors, we need to
+ emit cleanups to destroy them if an exception is thrown during
+ the construction process. These exception regions (i.e., the
+ period during which the cleanups must occur) begin from the time
+ the construction is complete to the end of the function. If we
+ create a conditional block in which to initialize the
+ base-classes, then the cleanup region for the virtual base begins
+ inside a block, and ends outside of that block. This situation
+ confuses the sjlj exception-handling code. Therefore, we do not
+ create a single conditional block, but one for each
+ initialization. (That way the cleanup regions always begin
+ in the outer block.) We trust the back-end to figure out
+ that the FLAG will not change across initializations, and
+ avoid doing multiple tests. */
+ flag = TREE_CHAIN (DECL_ARGUMENTS (current_function_decl));
+ inner_if_stmt = begin_if_stmt ();
+ finish_if_stmt_cond (flag, inner_if_stmt);
+ compound_stmt = begin_compound_stmt (/*has_no_scope=*/1);
+
+ /* Compute the location of the virtual base. If we're
+ constructing virtual bases, then we must be the most derived
+ class. Therefore, we don't have to look up the virtual base;
+ we already know where it is. */
+ exp = build (PLUS_EXPR,
+ TREE_TYPE (current_class_ptr),
+ current_class_ptr,
+ fold (build1 (NOP_EXPR, TREE_TYPE (current_class_ptr),
+ BINFO_OFFSET (vbase))));
+ exp = build1 (NOP_EXPR,
+ build_pointer_type (BINFO_TYPE (vbase)),
+ exp);
+ exp = build1 (INDIRECT_REF, BINFO_TYPE (vbase), exp);
+
+ expand_aggr_init_1 (vbase, current_class_ref, exp,
+ arguments, LOOKUP_COMPLAIN);
+ finish_compound_stmt (/*has_no_scope=*/1, compound_stmt);
+ finish_then_clause (inner_if_stmt);
+ finish_if_stmt ();
+
+ expand_cleanup_for_base (vbase, flag);
}
/* Find the context in which this FIELD can be initialized. */
@@ -1079,46 +927,41 @@ member_init_ok_or_else (field, type, member_name)
return 1;
}
-/* EXP is an expression of aggregate type. NAME is an IDENTIFIER_NODE
- which names a field, or it is a _TYPE node or TYPE_DECL which names
- a base for that type. INIT is a parameter list for that field's or
- base's constructor. Check the validity of NAME, and return a
- TREE_LIST of the base _TYPE or FIELD_DECL and the INIT. EXP is used
- only to get its type. If NAME is invalid, return NULL_TREE and
- issue a diagnostic.
+/* NAME is a FIELD_DECL, an IDENTIFIER_NODE which names a field, or it
+ is a _TYPE node or TYPE_DECL which names a base for that type.
+ INIT is a parameter list for that field's or base's constructor.
+ Check the validity of NAME, and return a TREE_LIST of the base
+ _TYPE or FIELD_DECL and the INIT. If NAME is invalid, return
+ NULL_TREE and issue a diagnostic.
An old style unnamed direct single base construction is permitted,
where NAME is NULL. */
tree
-expand_member_init (exp, name, init)
- tree exp, name, init;
+expand_member_init (tree name, tree init)
{
- tree basetype = NULL_TREE, field;
- tree type;
+ tree basetype;
+ tree field;
- if (exp == NULL_TREE)
+ if (!current_class_ref)
return NULL_TREE;
- type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
- my_friendly_assert (IS_AGGR_TYPE (type), 20011113);
-
if (!name)
{
/* This is an obsolete unnamed base class initializer. The
parser will already have warned about its use. */
- switch (CLASSTYPE_N_BASECLASSES (type))
+ switch (CLASSTYPE_N_BASECLASSES (current_class_type))
{
case 0:
error ("unnamed initializer for `%T', which has no base classes",
- type);
+ current_class_type);
return NULL_TREE;
case 1:
- basetype = TYPE_BINFO_BASETYPE (type, 0);
+ basetype = TYPE_BINFO_BASETYPE (current_class_type, 0);
break;
default:
error ("unnamed initializer for `%T', which uses multiple inheritance",
- type);
+ current_class_type);
return NULL_TREE;
}
}
@@ -1129,44 +972,54 @@ expand_member_init (exp, name, init)
}
else if (TREE_CODE (name) == TYPE_DECL)
basetype = TYPE_MAIN_VARIANT (TREE_TYPE (name));
+ else
+ basetype = NULL_TREE;
my_friendly_assert (init != NULL_TREE, 0);
- if (init == void_type_node)
- init = NULL_TREE;
-
if (basetype)
{
+ tree binfo;
+
if (current_template_parms)
- ;
- else if (vec_binfo_member (basetype, TYPE_BINFO_BASETYPES (type)))
- /* A direct base. */;
- else if (binfo_for_vbase (basetype, type))
- /* A virtual base. */;
- else
+ return build_tree_list (basetype, init);
+
+ binfo = lookup_base (current_class_type, basetype,
+ ba_ignore, NULL);
+ if (binfo)
{
- if (TYPE_USES_VIRTUAL_BASECLASSES (type))
+ if (TREE_VIA_VIRTUAL (binfo))
+ binfo = binfo_for_vbase (basetype, current_class_type);
+ else if (BINFO_INHERITANCE_CHAIN (binfo)
+ != TYPE_BINFO (current_class_type))
+ binfo = NULL_TREE;
+ }
+ if (!binfo)
+ {
+ if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
error ("type `%D' is not a direct or virtual base of `%T'",
- name, type);
+ name, current_class_type);
else
error ("type `%D' is not a direct base of `%T'",
- name, type);
+ name, current_class_type);
return NULL_TREE;
}
- init = build_tree_list (basetype, init);
+ if (binfo)
+ return build_tree_list (binfo, init);
}
else
{
- field = lookup_field (type, name, 1, 0);
-
- if (! member_init_ok_or_else (field, type, name))
- return NULL_TREE;
+ if (TREE_CODE (name) == IDENTIFIER_NODE)
+ field = lookup_field (current_class_type, name, 1, 0);
+ else
+ field = name;
- init = build_tree_list (field, init);
+ if (member_init_ok_or_else (field, current_class_type, name))
+ return build_tree_list (field, init);
}
- return init;
+ return NULL_TREE;
}
/* This is like `expand_member_init', only it stores one aggregate
@@ -1190,8 +1043,6 @@ expand_member_init (exp, name, init)
The virtual function table pointer cannot be set up here, because
we do not really know its type.
- Virtual baseclass pointers are also set up here.
-
This never calls operator=().
When initializing, nothing is CONST.
@@ -1293,10 +1144,8 @@ build_init (decl, init, flags)
|| TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
expr = build_aggr_init (decl, init, flags);
else
- {
- expr = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
- TREE_SIDE_EFFECTS (expr) = 1;
- }
+ expr = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
+
return expr;
}
@@ -1332,10 +1181,13 @@ expand_default_init (binfo, true_exp, exp, init, flags)
to run a new constructor; and catching an exception, where we
have already built up the constructor call so we could wrap it
in an exception region. */;
- else if (TREE_CODE (init) == CONSTRUCTOR)
- /* A brace-enclosed initializer has whatever type is
- required. There's no need to convert it. */
- ;
+ else if (TREE_CODE (init) == CONSTRUCTOR
+ && TREE_HAS_CONSTRUCTOR (init))
+ {
+ /* A brace-enclosed initializer for an aggregate. */
+ my_friendly_assert (CP_AGGREGATE_TYPE_P (type), 20021016);
+ init = digest_init (type, init, (tree *)NULL);
+ }
else
init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
@@ -1408,6 +1260,7 @@ expand_aggr_init_1 (binfo, true_exp, exp, init, flags)
tree type = TREE_TYPE (exp);
my_friendly_assert (init != error_mark_node && type != error_mark_node, 211);
+ my_friendly_assert (building_stmt_tree (), 20021010);
/* Use a function returning the desired type to initialize EXP for us.
If the function is a constructor, and its first argument is
@@ -1422,12 +1275,7 @@ expand_aggr_init_1 (binfo, true_exp, exp, init, flags)
/* If store_init_value returns NULL_TREE, the INIT has been
record in the DECL_INITIAL for EXP. That means there's
nothing more we have to do. */
- if (!store_init_value (exp, init))
- {
- if (!building_stmt_tree ())
- expand_decl_init (exp);
- }
- else
+ if (store_init_value (exp, init))
finish_expr_stmt (build (INIT_EXPR, type, exp, init));
return;
}
@@ -2874,10 +2722,6 @@ build_vec_init (base, init, from_array)
if (maxindex == error_mark_node)
return error_mark_node;
- /* For g++.ext/arrnew.C. */
- if (init && TREE_CODE (init) == CONSTRUCTOR && TREE_TYPE (init) == NULL_TREE)
- init = digest_init (atype, init, 0);
-
if (init
&& (from_array == 2
? (!CLASS_TYPE_P (type) || !TYPE_HAS_COMPLEX_ASSIGN_REF (type))
@@ -2894,7 +2738,6 @@ build_vec_init (base, init, from_array)
store_constructor will handle the semantics for us. */
stmt_expr = build (INIT_EXPR, atype, base, init);
- TREE_SIDE_EFFECTS (stmt_expr) = 1;
return stmt_expr;
}
@@ -3251,8 +3094,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
else if (TREE_CODE (type) == ARRAY_TYPE)
{
handle_array:
- if (TREE_SIDE_EFFECTS (addr))
- addr = save_expr (addr);
+
if (TYPE_DOMAIN (type) == NULL_TREE)
{
error ("unknown array size in delete");
@@ -3494,15 +3336,13 @@ build_vec_delete (base, maxindex, auto_delete_vec, use_global_delete)
base = stabilize_reference (base);
- /* Since we can use base many times, save_expr it. */
- if (TREE_SIDE_EFFECTS (base))
- base = save_expr (base);
-
if (TREE_CODE (type) == POINTER_TYPE)
{
/* Step back one from start of vector, and read dimension. */
tree cookie_addr;
+ if (TREE_SIDE_EFFECTS (base))
+ base = save_expr (base);
type = strip_array_types (TREE_TYPE (type));
cookie_addr = build (MINUS_EXPR,
build_pointer_type (sizetype),
@@ -3516,6 +3356,8 @@ build_vec_delete (base, maxindex, auto_delete_vec, use_global_delete)
maxindex = array_type_nelts_total (type);
type = strip_array_types (type);
base = build_unary_op (ADDR_EXPR, base, 1);
+ if (TREE_SIDE_EFFECTS (base))
+ base = save_expr (base);
}
else
{
diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c
index 2342c2320c7..4558940d675 100644
--- a/gcc/cp/lex.c
+++ b/gcc/cp/lex.c
@@ -263,7 +263,8 @@ init_operators ()
: &operator_name_info[(int) CODE]); \
oni->identifier = identifier; \
oni->name = NAME; \
- oni->mangled_name = MANGLING;
+ oni->mangled_name = MANGLING; \
+ oni->arity = ARITY;
#include "operators.def"
#undef DEF_OPERATOR
@@ -1135,7 +1136,7 @@ do_identifier (token, parsing, args)
tree args;
{
register tree id;
- int lexing = (parsing == 1);
+ int lexing = (parsing == 1 || parsing == 3);
if (! lexing)
id = lookup_name (token, 0);
@@ -1157,7 +1158,7 @@ do_identifier (token, parsing, args)
/* Remember that this name has been used in the class definition, as per
[class.scope0] */
- if (id && parsing)
+ if (id && parsing && parsing != 3)
maybe_note_name_used_in_class (token, id);
if (id == error_mark_node)
diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index c7bd31299db..bc7e970cdd9 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -80,10 +80,11 @@
that hard to distinguish A<T> from A, where A<T> is the type as
instantiated outside of the template, and A is the type used
without parameters inside the template. */
-#define CLASSTYPE_TEMPLATE_ID_P(NODE) \
- (TYPE_LANG_SPECIFIC (NODE) != NULL \
- && CLASSTYPE_TEMPLATE_INFO (NODE) != NULL \
- && (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (NODE))))
+#define CLASSTYPE_TEMPLATE_ID_P(NODE) \
+ (TYPE_LANG_SPECIFIC (NODE) != NULL \
+ && (TREE_CODE (NODE) == BOUND_TEMPLATE_TEMPLATE_PARM \
+ || (CLASSTYPE_TEMPLATE_INFO (NODE) != NULL \
+ && (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (NODE))))))
/* Things we only need one of. This module is not reentrant. */
static struct globals
@@ -95,10 +96,17 @@ static struct globals
we've seen them. */
varray_type substitutions;
+ /* The entity that is being mangled. */
+ tree entity;
+
/* We are mangling an internal symbol. It is important to keep those
involving template parmeters distinct by distinguishing their level
and, for non-type parms, their type. */
bool internal_mangling_p;
+
+ /* True if the mangling will be different in a future version of the
+ ABI. */
+ bool need_abi_warning;
} G;
/* Indices into subst_identifiers. These are identifiers used in
@@ -158,6 +166,7 @@ static void write_nested_name PARAMS ((tree));
static void write_prefix PARAMS ((tree));
static void write_template_prefix PARAMS ((tree));
static void write_unqualified_name PARAMS ((tree));
+static void write_conversion_operator_name (tree);
static void write_source_name PARAMS ((tree));
static int hwint_to_ascii PARAMS ((unsigned HOST_WIDE_INT, unsigned int, char *, unsigned));
static void write_number PARAMS ((unsigned HOST_WIDE_INT, int,
@@ -192,8 +201,8 @@ static const char *mangle_decl_string PARAMS ((tree));
/* Control functions. */
-static inline void start_mangling PARAMS ((void));
-static inline const char *finish_mangling PARAMS ((void));
+static inline void start_mangling (tree);
+static inline const char *finish_mangling (bool);
static tree mangle_special_for_type PARAMS ((tree, const char *));
/* Foreign language functions. */
@@ -250,7 +259,7 @@ decl_is_template_id (decl, template_info)
if (template_info != NULL)
/* For a templated TYPE_DECL, the template info is hanging
off the type. */
- *template_info = CLASSTYPE_TEMPLATE_INFO (type);
+ *template_info = TYPE_TEMPLATE_INFO (type);
return 1;
}
}
@@ -398,8 +407,8 @@ is_std_substitution (node, index)
return (DECL_NAMESPACE_STD_P (CP_DECL_CONTEXT (decl))
&& TYPE_LANG_SPECIFIC (type)
- && CLASSTYPE_TEMPLATE_INFO (type)
- && (DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
+ && TYPE_TEMPLATE_INFO (type)
+ && (DECL_NAME (TYPE_TI_TEMPLATE (type))
== subst_identifiers[index]));
}
@@ -837,7 +846,8 @@ write_nested_name (decl)
write_char ('E');
}
-/* <prefix> ::= <prefix> <unqualified-name>>
+/* <prefix> ::= <prefix> <unqualified-name>
+ ::= <template-param>
::= <template-prefix> <template-args>
::= # empty
::= <substitution> */
@@ -860,7 +870,6 @@ write_prefix (node)
return;
if (DECL_P (node))
- /* Node is a decl. */
{
/* If this is a function decl, that means we've hit function
scope, so this prefix must be for a local name. In this
@@ -874,14 +883,22 @@ write_prefix (node)
decl_is_template_id (decl, &template_info);
}
else
- /* Node is a type. */
{
+ /* Node is a type. */
decl = TYPE_NAME (node);
if (CLASSTYPE_TEMPLATE_ID_P (node))
- template_info = CLASSTYPE_TEMPLATE_INFO (node);
+ template_info = TYPE_TEMPLATE_INFO (node);
}
- if (template_info != NULL)
+ /* In G++ 3.2, the name of the template parameter was used. */
+ if (TREE_CODE (node) == TEMPLATE_TYPE_PARM
+ && !abi_version_at_least (2))
+ G.need_abi_warning = true;
+
+ if (TREE_CODE (node) == TEMPLATE_TYPE_PARM
+ && abi_version_at_least (2))
+ write_template_param (node);
+ else if (template_info != NULL)
/* Templated. */
{
write_template_prefix (decl);
@@ -898,6 +915,7 @@ write_prefix (node)
}
/* <template-prefix> ::= <prefix> <template component>
+ ::= <template-param>
::= <substitution> */
static void
@@ -917,7 +935,7 @@ write_template_prefix (node)
if (decl_is_template_id (decl, &template_info))
template = TI_TEMPLATE (template_info);
else if (CLASSTYPE_TEMPLATE_ID_P (type))
- template = CLASSTYPE_TI_TEMPLATE (type);
+ template = TYPE_TI_TEMPLATE (type);
else
/* Oops, not a template. */
abort ();
@@ -952,8 +970,19 @@ write_template_prefix (node)
if (find_substitution (substitution))
return;
- write_prefix (context);
- write_unqualified_name (decl);
+ /* In G++ 3.2, the name of the template template parameter was used. */
+ if (TREE_CODE (TREE_TYPE (template)) == TEMPLATE_TEMPLATE_PARM
+ && !abi_version_at_least (2))
+ G.need_abi_warning = true;
+
+ if (TREE_CODE (TREE_TYPE (template)) == TEMPLATE_TEMPLATE_PARM
+ && abi_version_at_least (2))
+ write_template_param (TREE_TYPE (template));
+ else
+ {
+ write_prefix (context);
+ write_unqualified_name (decl);
+ }
add_substitution (substitution);
}
@@ -988,8 +1017,7 @@ write_unqualified_name (decl)
}
else
type = TREE_TYPE (DECL_NAME (decl));
- write_string ("cv");
- write_type (type);
+ write_conversion_operator_name (type);
}
else if (DECL_OVERLOADED_OPERATOR_P (decl))
{
@@ -1005,6 +1033,15 @@ write_unqualified_name (decl)
write_source_name (DECL_NAME (decl));
}
+/* Write the unqualified-name for a conversion operator to TYPE. */
+
+static void
+write_conversion_operator_name (tree type)
+{
+ write_string ("cv");
+ write_type (type);
+}
+
/* Non-termial <source-name>. IDENTIFIER is an IDENTIFIER_NODE.
<source-name> ::= </length/ number> <identifier> */
@@ -1752,24 +1789,37 @@ static void
write_template_args (args)
tree args;
{
- int i;
- int length = TREE_VEC_LENGTH (args);
-
MANGLE_TRACE_TREE ("template-args", args);
- my_friendly_assert (length > 0, 20000422);
+ write_char ('I');
+
+ if (TREE_CODE (args) == TREE_VEC)
+ {
+ int i;
+ int length = TREE_VEC_LENGTH (args);
+ my_friendly_assert (length > 0, 20000422);
- if (TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC)
+ if (TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC)
+ {
+ /* We have nested template args. We want the innermost template
+ argument list. */
+ args = TREE_VEC_ELT (args, length - 1);
+ length = TREE_VEC_LENGTH (args);
+ }
+ for (i = 0; i < length; ++i)
+ write_template_arg (TREE_VEC_ELT (args, i));
+ }
+ else
{
- /* We have nested template args. We want the innermost template
- argument list. */
- args = TREE_VEC_ELT (args, length - 1);
- length = TREE_VEC_LENGTH (args);
+ my_friendly_assert (TREE_CODE (args) == TREE_LIST, 20021014);
+
+ while (args)
+ {
+ write_template_arg (TREE_VALUE (args));
+ args = TREE_CHAIN (args);
+ }
}
- write_char ('I');
- for (i = 0; i < length; ++i)
- write_template_arg (TREE_VEC_ELT (args, i));
write_char ('E');
}
@@ -1779,7 +1829,9 @@ write_template_args (args)
<expr-primary> ::= <template-param>
::= L <type> <value number> E # literal
- ::= L <mangled-name> E # external name */
+ ::= L <mangled-name> E # external name
+ ::= sr <type> <unqualified-name>
+ ::= sr <type> <unqualified-name> <template-args> */
static void
write_expression (expr)
@@ -1817,10 +1869,15 @@ write_expression (expr)
|| code == TEMPLATE_PARM_INDEX)
write_template_param (expr);
/* Handle literals. */
- else if (TREE_CODE_CLASS (code) == 'c')
+ else if (TREE_CODE_CLASS (code) == 'c'
+ || (abi_version_at_least (2) && code == CONST_DECL))
write_template_arg_literal (expr);
else if (DECL_P (expr))
{
+ /* G++ 3.2 incorrectly mangled non-type template arguments of
+ enumeration type using their names. */
+ if (code == CONST_DECL)
+ G.need_abi_warning = 1;
write_char ('L');
write_mangled_name (expr);
write_char ('E');
@@ -1831,6 +1888,75 @@ write_expression (expr)
write_string ("st");
write_type (TREE_OPERAND (expr, 0));
}
+ else if (abi_version_at_least (2) && TREE_CODE (expr) == SCOPE_REF)
+ {
+ tree scope = TREE_OPERAND (expr, 0);
+ tree member = TREE_OPERAND (expr, 1);
+
+ /* If the MEMBER is a real declaration, then the qualifying
+ scope was not dependent. Ideally, we would not have a
+ SCOPE_REF in those cases, but sometimes we do. If the second
+ argument is a DECL, then the name must not have been
+ dependent. */
+ if (DECL_P (member))
+ write_expression (member);
+ else
+ {
+ tree template_args;
+
+ write_string ("sr");
+ write_type (scope);
+ /* If MEMBER is a template-id, separate the template
+ from the arguments. */
+ if (TREE_CODE (member) == TEMPLATE_ID_EXPR)
+ {
+ template_args = TREE_OPERAND (member, 1);
+ member = TREE_OPERAND (member, 0);
+ if (TREE_CODE (member) == LOOKUP_EXPR)
+ member = TREE_OPERAND (member, 0);
+ }
+ else
+ template_args = NULL_TREE;
+ /* Write out the name of the MEMBER. */
+ if (IDENTIFIER_TYPENAME_P (member))
+ write_conversion_operator_name (TREE_TYPE (member));
+ else if (IDENTIFIER_OPNAME_P (member))
+ {
+ int i;
+ const char *mangled_name = NULL;
+
+ /* Unfortunately, there is no easy way to go from the
+ name of the operator back to the corresponding tree
+ code. */
+ for (i = 0; i < LAST_CPLUS_TREE_CODE; ++i)
+ if (operator_name_info[i].identifier == member)
+ {
+ /* The ABI says that we prefer binary operator
+ names to unary operator names. */
+ if (operator_name_info[i].arity == 2)
+ {
+ mangled_name = operator_name_info[i].mangled_name;
+ break;
+ }
+ else if (!mangled_name)
+ mangled_name = operator_name_info[i].mangled_name;
+ }
+ else if (assignment_operator_name_info[i].identifier
+ == member)
+ {
+ mangled_name
+ = assignment_operator_name_info[i].mangled_name;
+ break;
+ }
+ write_string (mangled_name);
+ }
+ else
+ write_source_name (member);
+ /* Write out the template arguments. */
+ if (template_args)
+ write_template_args (template_args);
+ }
+ }
else
{
int i;
@@ -1852,7 +1978,7 @@ write_expression (expr)
code = TREE_CODE (expr);
}
-
+
/* If it wasn't any of those, recursively expand the expression. */
write_string (operator_name_info[(int) code].mangled_name);
@@ -1876,7 +2002,12 @@ write_expression (expr)
if (TREE_CODE (TREE_OPERAND (expr, 1)) == IDENTIFIER_NODE)
write_source_name (TREE_OPERAND (expr, 1));
else
- write_encoding (TREE_OPERAND (expr, 1));
+ {
+ /* G++ 3.2 incorrectly put out both the "sr" code and
+ the nested name of the qualified name. */
+ G.need_abi_warning = 1;
+ write_encoding (TREE_OPERAND (expr, 1));
+ }
break;
default:
@@ -1979,15 +2110,20 @@ write_template_arg (node)
else if (code == TEMPLATE_DECL)
/* A template appearing as a template arg is a template template arg. */
write_template_template_arg (node);
+ else if ((TREE_CODE_CLASS (code) == 'c' && code != PTRMEM_CST)
+ || (abi_version_at_least (2) && code == CONST_DECL))
+ write_template_arg_literal (node);
else if (DECL_P (node))
{
+ /* G++ 3.2 incorrectly mangled non-type template arguments of
+ enumeration type using their names. */
+ if (code == CONST_DECL)
+ G.need_abi_warning = 1;
write_char ('L');
write_char ('Z');
write_encoding (node);
write_char ('E');
}
- else if (TREE_CODE_CLASS (code) == 'c' && code != PTRMEM_CST)
- write_template_arg_literal (node);
else
{
/* Template arguments may be expressions. */
@@ -2168,20 +2304,29 @@ write_substitution (seq_id)
write_char ('_');
}
-/* Start mangling a new name or type. */
+/* Start mangling ENTITY. */
static inline void
-start_mangling ()
+start_mangling (tree entity)
{
+ G.entity = entity;
+ G.need_abi_warning = false;
VARRAY_TREE_INIT (G.substitutions, 1, "mangling substitutions");
obstack_free (&G.name_obstack, obstack_base (&G.name_obstack));
}
-/* Done with mangling. Return the generated mangled name. */
+/* Done with mangling. Return the generated mangled name. If WARN is
+ true, and the name of G.entity will be mangled differently in a
+ future version of the ABI, issue a warning. */
static inline const char *
-finish_mangling ()
+finish_mangling (bool warn)
{
+ if (warn_abi && warn && G.need_abi_warning)
+ warning ("the mangled name of `%D' will change in a future "
+ "version of GCC",
+ G.entity);
+
/* Clear all the substitutions. */
G.substitutions = 0;
@@ -2216,7 +2361,7 @@ mangle_decl_string (decl)
{
const char *result;
- start_mangling ();
+ start_mangling (decl);
if (TREE_CODE (decl) == TYPE_DECL)
write_type (TREE_TYPE (decl));
@@ -2243,7 +2388,7 @@ mangle_decl_string (decl)
write_string (" *INTERNAL* ");
}
- result = finish_mangling ();
+ result = finish_mangling (/*warn=*/true);
if (DEBUG_MANGLE)
fprintf (stderr, "mangle_decl_string = '%s'\n\n", result);
return result;
@@ -2268,9 +2413,9 @@ mangle_type_string (type)
{
const char *result;
- start_mangling ();
+ start_mangling (type);
write_type (type);
- result = finish_mangling ();
+ result = finish_mangling (/*warn=*/false);
if (DEBUG_MANGLE)
fprintf (stderr, "mangle_type_string = '%s'\n\n", result);
return result;
@@ -2298,7 +2443,7 @@ mangle_special_for_type (type, code)
/* We don't have an actual decl here for the special component, so
we can't just process the <encoded-name>. Instead, fake it. */
- start_mangling ();
+ start_mangling (type);
/* Start the mangling. */
write_string ("_Z");
@@ -2306,7 +2451,7 @@ mangle_special_for_type (type, code)
/* Add the type. */
write_type (type);
- result = finish_mangling ();
+ result = finish_mangling (/*warn=*/false);
if (DEBUG_MANGLE)
fprintf (stderr, "mangle_special_for_type = %s\n\n", result);
@@ -2373,7 +2518,7 @@ mangle_ctor_vtbl_for_type (type, binfo)
{
const char *result;
- start_mangling ();
+ start_mangling (type);
write_string ("_Z");
write_string ("TC");
@@ -2382,7 +2527,7 @@ mangle_ctor_vtbl_for_type (type, binfo)
write_char ('_');
write_type (BINFO_TYPE (binfo));
- result = finish_mangling ();
+ result = finish_mangling (/*warn=*/false);
if (DEBUG_MANGLE)
fprintf (stderr, "mangle_ctor_vtbl_for_type = %s\n\n", result);
return get_identifier (result);
@@ -2406,7 +2551,7 @@ mangle_thunk (fn_decl, offset, vcall_offset)
{
const char *result;
- start_mangling ();
+ start_mangling (fn_decl);
write_string ("_Z");
/* The <special-name> for virtual thunks is Tv, for non-virtual
@@ -2432,7 +2577,7 @@ mangle_thunk (fn_decl, offset, vcall_offset)
/* Scoped name. */
write_encoding (fn_decl);
- result = finish_mangling ();
+ result = finish_mangling (/*warn=*/false);
if (DEBUG_MANGLE)
fprintf (stderr, "mangle_thunk = %s\n\n", result);
return get_identifier (result);
@@ -2484,7 +2629,7 @@ tree
mangle_guard_variable (variable)
tree variable;
{
- start_mangling ();
+ start_mangling (variable);
write_string ("_ZGV");
if (strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
/* The name of a guard variable for a reference temporary should refer
@@ -2492,7 +2637,7 @@ mangle_guard_variable (variable)
write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4);
else
write_name (variable, /*ignore_local_scope=*/0);
- return get_identifier (finish_mangling ());
+ return get_identifier (finish_mangling (/*warn=*/false));
}
/* Return an identifier for the name of a temporary variable used to
@@ -2503,10 +2648,10 @@ tree
mangle_ref_init_variable (variable)
tree variable;
{
- start_mangling ();
+ start_mangling (variable);
write_string ("_ZGR");
write_name (variable, /*ignore_local_scope=*/0);
- return get_identifier (finish_mangling ());
+ return get_identifier (finish_mangling (/*warn=*/false));
}
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index 6b4b79524fb..cb88833ab23 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -34,6 +34,7 @@ Boston, MA 02111-1307, USA. */
#include "toplev.h"
#include "ggc.h"
#include "tm_p.h"
+#include "target.h"
/* Various flags to control the mangling process. */
@@ -408,8 +409,8 @@ use_thunk (thunk_fndecl, emit_p)
BLOCK_VARS (DECL_INITIAL (thunk_fndecl))
= DECL_ARGUMENTS (thunk_fndecl);
-#ifdef ASM_OUTPUT_MI_THUNK
- if (!vcall_offset)
+ if (targetm.asm_out.output_mi_vcall_thunk
+ || (targetm.asm_out.output_mi_thunk && !vcall_offset))
{
const char *fnname;
current_function_decl = thunk_fndecl;
@@ -419,18 +420,32 @@ use_thunk (thunk_fndecl, emit_p)
init_function_start (thunk_fndecl, input_filename, lineno);
current_function_is_thunk = 1;
assemble_start_function (thunk_fndecl, fnname);
- ASM_OUTPUT_MI_THUNK (asm_out_file, thunk_fndecl, delta, function);
+ if (targetm.asm_out.output_mi_vcall_thunk)
+ {
+ HOST_WIDE_INT vcall_value;
+
+ if (vcall_offset)
+ vcall_value = tree_low_cst (vcall_offset, /*pos=*/0);
+ else
+ vcall_value = 0;
+ targetm.asm_out.output_mi_vcall_thunk (asm_out_file,
+ thunk_fndecl, delta,
+ vcall_value,
+ function);
+ }
+ else
+ targetm.asm_out.output_mi_thunk (asm_out_file, thunk_fndecl,
+ delta, function);
assemble_end_function (thunk_fndecl, fnname);
current_function_decl = 0;
cfun = 0;
TREE_ASM_WRITTEN (thunk_fndecl) = 1;
}
else
-#endif /* ASM_OUTPUT_MI_THUNK */
{
- /* If we don't have the necessary macro for efficient thunks, generate
- a thunk function that just makes a call to the real function.
- Unfortunately, this doesn't work for varargs. */
+ /* If we don't have the necessary code for efficient thunks,
+ generate a thunk function that just makes a call to the real
+ function. Unfortunately, this doesn't work for varargs. */
tree a, t;
@@ -536,7 +551,6 @@ do_build_copy_constructor (fndecl)
int n_bases = CLASSTYPE_N_BASECLASSES (current_class_type);
tree binfos = TYPE_BINFO_BASETYPES (current_class_type);
tree member_init_list = NULL_TREE;
- tree base_init_list = NULL_TREE;
int cvquals = cp_type_quals (TREE_TYPE (parm));
int i;
@@ -550,10 +564,12 @@ do_build_copy_constructor (fndecl)
{
tree binfo = TREE_VALUE (t);
- base_init_list = tree_cons (binfo,
- build_base_path (PLUS_EXPR, parm,
- binfo, 1),
- base_init_list);
+ member_init_list
+ = tree_cons (binfo,
+ build_tree_list (NULL_TREE,
+ build_base_path (PLUS_EXPR, parm,
+ binfo, 1)),
+ member_init_list);
}
for (i = 0; i < n_bases; ++i)
@@ -562,10 +578,12 @@ do_build_copy_constructor (fndecl)
if (TREE_VIA_VIRTUAL (binfo))
continue;
- base_init_list = tree_cons (binfo,
- build_base_path (PLUS_EXPR, parm,
- binfo, 1),
- base_init_list);
+ member_init_list
+ = tree_cons (binfo,
+ build_tree_list (NULL_TREE,
+ build_base_path (PLUS_EXPR, parm,
+ binfo, 1)),
+ member_init_list);
}
for (; fields; fields = TREE_CHAIN (fields))
@@ -609,9 +627,7 @@ do_build_copy_constructor (fndecl)
member_init_list
= tree_cons (field, init, member_init_list);
}
- member_init_list = nreverse (member_init_list);
- base_init_list = nreverse (base_init_list);
- emit_base_init (member_init_list, base_init_list);
+ finish_mem_initializers (member_init_list);
}
}
@@ -704,7 +720,7 @@ do_build_assign_ref (fndecl)
comp = build (COMPONENT_REF, TREE_TYPE (field), comp, field);
init = build (COMPONENT_REF,
- build_qualified_type (TREE_TYPE (field), cvquals),
+ cp_build_qualified_type (TREE_TYPE (field), cvquals),
init, field);
if (DECL_NAME (field))
diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c
index 0910bef6e12..6fbcc2be192 100644
--- a/gcc/cp/optimize.c
+++ b/gcc/cp/optimize.c
@@ -1,5 +1,5 @@
/* Perform optimizations on tree structure.
- Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Written by Mark Michell (mark@codesourcery.com).
This file is part of GNU CC.
@@ -64,7 +64,7 @@ optimize_function (fn)
/* We do not inline thunks, as (a) the backend tries to optimize
the call to the thunkee, (b) tree based inlining breaks that
optimization, (c) virtual functions are rarely inlineable,
- and (d) ASM_OUTPUT_MI_THUNK is there to DTRT anyway. */
+ and (d) TARGET_ASM_OUTPUT_MI_THUNK is there to DTRT anyway. */
&& !DECL_THUNK_P (fn))
{
optimize_inline_calls (fn);
diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y
index 8cce99bd5c0..78cf991f192 100644
--- a/gcc/cp/parse.y
+++ b/gcc/cp/parse.y
@@ -981,31 +981,27 @@ member_init:
{
if (current_class_name)
pedwarn ("anachronistic old style base class initializer");
- $$ = expand_member_init (current_class_ref, NULL_TREE, $2);
+ $$ = expand_member_init (NULL_TREE, $2);
}
| LEFT_RIGHT
{
if (current_class_name)
pedwarn ("anachronistic old style base class initializer");
- $$ = expand_member_init (current_class_ref,
- NULL_TREE,
+ $$ = expand_member_init (NULL_TREE,
void_type_node);
}
| notype_identifier '(' nonnull_exprlist ')'
- { $$ = expand_member_init (current_class_ref, $1, $3); }
+ { $$ = expand_member_init ($1, $3); }
| notype_identifier LEFT_RIGHT
- { $$ = expand_member_init (current_class_ref, $1,
- void_type_node); }
+ { $$ = expand_member_init ($1, void_type_node); }
| nonnested_type '(' nonnull_exprlist ')'
- { $$ = expand_member_init (current_class_ref, $1, $3); }
+ { $$ = expand_member_init ($1, $3); }
| nonnested_type LEFT_RIGHT
- { $$ = expand_member_init (current_class_ref, $1,
- void_type_node); }
+ { $$ = expand_member_init ($1, void_type_node); }
| typename_sub '(' nonnull_exprlist ')'
- { $$ = expand_member_init (current_class_ref, $1, $3); }
+ { $$ = expand_member_init ($1, $3); }
| typename_sub LEFT_RIGHT
- { $$ = expand_member_init (current_class_ref, $1,
- void_type_node); }
+ { $$ = expand_member_init ($1, void_type_node); }
| error
{ $$ = NULL_TREE; }
;
@@ -1355,21 +1351,12 @@ new_initializer:
error ("`%T' is not a valid expression", $2.t);
$$ = error_mark_node;
}
- /* GNU extension so people can use initializer lists. Note that
- this alters the meaning of `new int = 1', which was previously
- syntactically valid but semantically invalid.
- This feature is now deprecated and will be removed in a future
- release. */
| '=' init
{
- if (pedantic)
- pedwarn ("ISO C++ forbids initialization of new expression with `='");
- cp_deprecated ("new initializer lists extension");
- if (TREE_CODE ($2) != TREE_LIST
- && TREE_CODE ($2) != CONSTRUCTOR)
- $$ = build_tree_list (NULL_TREE, $2);
- else
- $$ = $2;
+ /* This was previously allowed as an extension, but
+ was removed in G++ 3.3. */
+ error ("initialization of new expression with `='");
+ $$ = error_mark_node;
}
;
@@ -1529,7 +1516,7 @@ do_id:
do_identifier; we only do that for unqualified
identifiers. */
if (!lastiddecl || !BASELINK_P (lastiddecl))
- $$ = do_identifier ($<ttype>-1, 1, NULL_TREE);
+ $$ = do_identifier ($<ttype>-1, 3, NULL_TREE);
else
$$ = $<ttype>-1;
}
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 47421a0b09d..ceff84f0a06 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -3467,6 +3467,16 @@ convert_template_argument (parm, arg, args, complain, i, in_decl)
val, t);
return error_mark_node;
}
+
+ /* In order to avoid all sorts of complications, we do
+ not allow variably-modified types as template
+ arguments. */
+ if (variably_modified_type_p (val))
+ {
+ error ("template-argument `%T' is a variably modified type",
+ val);
+ return error_mark_node;
+ }
}
}
}
@@ -4469,6 +4479,15 @@ for_each_template_parm_r (tp, walk_subtrees, d)
return error_mark_node;
break;
+ case BASELINK:
+ /* If we do not handle this case specially, we end up walking
+ the BINFO hierarchy, which is circular, and therefore
+ confuses walk_tree. */
+ *walk_subtrees = 0;
+ if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data))
+ return error_mark_node;
+ break;
+
default:
break;
}
@@ -6125,6 +6144,8 @@ tsubst_decl (t, args, type, complain)
}
r = copy_decl (t);
+ if (TREE_CODE (r) == VAR_DECL)
+ type = complete_type (type);
TREE_TYPE (r) = type;
c_apply_type_quals_to_decl (cp_type_quals (type), r);
DECL_CONTEXT (r) = ctx;
@@ -6164,6 +6185,8 @@ tsubst_decl (t, args, type, complain)
TREE_CHAIN (r) = NULL_TREE;
if (TREE_CODE (r) == VAR_DECL && VOID_TYPE_P (type))
cp_error_at ("instantiation of `%D' as type `%T'", r, type);
+ /* Compute the size, alignment, etc. of R. */
+ layout_decl (r, 0);
}
break;
@@ -7369,18 +7392,10 @@ tsubst_expr (t, args, complain, in_decl)
break;
case CTOR_INITIALIZER:
- {
- tree member_init_list;
- tree base_init_list;
-
- prep_stmt (t);
- member_init_list
- = tsubst_initializer_list (TREE_OPERAND (t, 0), args);
- base_init_list
- = tsubst_initializer_list (TREE_OPERAND (t, 1), args);
- emit_base_init (member_init_list, base_init_list);
- break;
- }
+ prep_stmt (t);
+ finish_mem_initializers (tsubst_initializer_list
+ (TREE_OPERAND (t, 0), args));
+ break;
case RETURN_STMT:
prep_stmt (t);
@@ -7423,9 +7438,6 @@ tsubst_expr (t, args, complain, in_decl)
decl = tsubst (decl, args, complain, in_decl);
if (decl != error_mark_node)
{
- if (TREE_CODE (decl) != TYPE_DECL)
- /* Make sure the type is instantiated now. */
- complete_type (TREE_TYPE (decl));
if (init)
DECL_INITIAL (decl) = error_mark_node;
/* By marking the declaration as instantiated, we avoid
@@ -7435,19 +7447,26 @@ tsubst_expr (t, args, complain, in_decl)
do. */
if (TREE_CODE (decl) == VAR_DECL)
DECL_TEMPLATE_INSTANTIATED (decl) = 1;
- maybe_push_decl (decl);
- if (DECL_PRETTY_FUNCTION_P (decl))
+ if (TREE_CODE (decl) == VAR_DECL
+ && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
+ /* Anonymous aggregates are a special case. */
+ finish_anon_union (decl);
+ else
{
- /* For __PRETTY_FUNCTION__ we have to adjust the
- initializer. */
- const char *const name
- = cxx_printable_name (current_function_decl, 2);
- init = cp_fname_init (name);
- TREE_TYPE (decl) = TREE_TYPE (init);
+ maybe_push_decl (decl);
+ if (DECL_PRETTY_FUNCTION_P (decl))
+ {
+ /* For __PRETTY_FUNCTION__ we have to adjust the
+ initializer. */
+ const char *const name
+ = cxx_printable_name (current_function_decl, 2);
+ init = cp_fname_init (name);
+ TREE_TYPE (decl) = TREE_TYPE (init);
+ }
+ else
+ init = tsubst_expr (init, args, complain, in_decl);
+ cp_finish_decl (decl, init, NULL_TREE, 0);
}
- else
- init = tsubst_expr (init, args, complain, in_decl);
- cp_finish_decl (decl, init, NULL_TREE, 0);
}
}
@@ -10293,8 +10312,7 @@ static tree
tsubst_initializer_list (t, argvec)
tree t, argvec;
{
- tree first = NULL_TREE;
- tree *p = &first;
+ tree inits = NULL_TREE;
for (; t; t = TREE_CHAIN (t))
{
@@ -10312,13 +10330,17 @@ tsubst_initializer_list (t, argvec)
else if (TREE_CODE (init) == TREE_LIST)
for (val = init; val; val = TREE_CHAIN (val))
TREE_VALUE (val) = convert_from_reference (TREE_VALUE (val));
- else
+ else if (init != void_type_node)
init = convert_from_reference (init);
- *p = build_tree_list (decl, init);
- p = &TREE_CHAIN (*p);
+ init = expand_member_init (decl, init);
+ if (init)
+ {
+ TREE_CHAIN (init) = inits;
+ inits = init;
+ }
}
- return first;
+ return inits;
}
/* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index 12f6f7e5ea1..b40edfab763 100644
--- a/gcc/cp/rtti.c
+++ b/gcc/cp/rtti.c
@@ -1096,10 +1096,12 @@ get_pseudo_ti_init (type, var_desc, non_public_p)
base_init = tree_cons (NULL_TREE, offset, base_init);
base_init = tree_cons (NULL_TREE, tinfo, base_init);
base_init = build (CONSTRUCTOR, NULL_TREE, NULL_TREE, base_init);
+ TREE_HAS_CONSTRUCTOR (base_init) = 1;
base_inits = tree_cons (NULL_TREE, base_init, base_inits);
}
base_inits = build (CONSTRUCTOR,
NULL_TREE, NULL_TREE, base_inits);
+ TREE_HAS_CONSTRUCTOR (base_inits) = 1;
base_inits = tree_cons (NULL_TREE, base_inits, NULL_TREE);
/* Prepend the number of bases. */
base_inits = tree_cons (NULL_TREE,
@@ -1165,7 +1167,7 @@ create_pseudo_type_info VPARAMS((const char *real_name, int ident, ...))
/* Create the pseudo type. */
pseudo_type = make_aggr_type (RECORD_TYPE);
finish_builtin_struct (pseudo_type, pseudo_name, fields, NULL_TREE);
- TYPE_HAS_CONSTRUCTOR (pseudo_type) = 1;
+ CLASSTYPE_AS_BASE (pseudo_type) = pseudo_type;
result = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE);
TINFO_REAL_NAME (result) = get_identifier (real_name);
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 7edfa98fd6f..c561a66898b 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -317,7 +317,10 @@ finish_while_stmt_cond (cond, while_stmt)
tree while_stmt;
{
cond = maybe_convert_cond (cond);
- if (getdecls () == NULL_TREE)
+ if (processing_template_decl)
+ /* Don't mess with condition decls in a template. */
+ FINISH_COND (cond, while_stmt, WHILE_COND (while_stmt));
+ else if (getdecls () == NULL_TREE)
/* It was a simple condition; install it. */
WHILE_COND (while_stmt) = cond;
else
@@ -452,7 +455,10 @@ finish_for_cond (cond, for_stmt)
tree for_stmt;
{
cond = maybe_convert_cond (cond);
- if (getdecls () == NULL_TREE)
+ if (processing_template_decl)
+ /* Don't mess with condition decls in a template. */
+ FINISH_COND (cond, for_stmt, FOR_COND (for_stmt));
+ else if (getdecls () == NULL_TREE)
/* It was a simple condition; install it. */
FOR_COND (for_stmt) = cond;
else
@@ -1094,67 +1100,21 @@ begin_mem_initializers ()
error ("only constructors take base initializers");
}
-/* The INIT_LIST is a list of mem-initializers, in the order they were
- written by the user. The TREE_VALUE of each node is a list of
- initializers for a particular subobject. The TREE_PURPOSE is a
- FIELD_DECL is the initializer is for a non-static data member, and
- a class type if the initializer is for a base class. */
+/* The MEM_INITS is a list of mem-initializers, in reverse of the
+ order they were written by the user. Each node is as for
+ emit_mem_initializers. */
void
-finish_mem_initializers (init_list)
- tree init_list;
+finish_mem_initializers (tree mem_inits)
{
- tree member_init_list;
- tree base_init_list;
- tree last_base_warned_about;
- tree next;
- tree init;
-
- member_init_list = NULL_TREE;
- base_init_list = NULL_TREE;
- last_base_warned_about = NULL_TREE;
-
- for (init = init_list; init; init = next)
- {
- next = TREE_CHAIN (init);
- if (TREE_CODE (TREE_PURPOSE (init)) == FIELD_DECL)
- {
- TREE_CHAIN (init) = member_init_list;
- member_init_list = init;
-
- /* We're running through the initializers from right to left
- as we process them here. So, if we see a data member
- initializer after we see a base initializer, that
- actually means that the base initializer preceded the
- data member initializer. */
- if (warn_reorder && last_base_warned_about != base_init_list)
- {
- tree base;
-
- for (base = base_init_list;
- base != last_base_warned_about;
- base = TREE_CHAIN (base))
- {
- warning ("base initializer for `%T'",
- TREE_PURPOSE (base));
- warning (" will be re-ordered to precede member initializations");
- }
-
- last_base_warned_about = base_init_list;
- }
- }
- else
- {
- TREE_CHAIN (init) = base_init_list;
- base_init_list = init;
- }
- }
+ /* Reorder the MEM_INITS so that they are in the order they appeared
+ in the source program. */
+ mem_inits = nreverse (mem_inits);
if (processing_template_decl)
- add_stmt (build_min_nt (CTOR_INITIALIZER,
- member_init_list, base_init_list));
+ add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
else
- emit_base_init (member_init_list, base_init_list);
+ emit_mem_initializers (mem_inits);
}
/* Returns the stack of SCOPE_STMTs for the current function. */
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 588b7108095..ddc1ce1001a 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -1012,9 +1012,10 @@ really_overloaded_fn (x)
x = TREE_OPERAND (x, 1);
if (BASELINK_P (x))
x = BASELINK_FUNCTIONS (x);
- return (TREE_CODE (x) == OVERLOAD
- && (OVL_CHAIN (x)
- || DECL_FUNCTION_TEMPLATE_P (OVL_FUNCTION (x))));
+
+ return ((TREE_CODE (x) == OVERLOAD && OVL_CHAIN (x))
+ || DECL_FUNCTION_TEMPLATE_P (OVL_CURRENT (x))
+ || TREE_CODE (x) == TEMPLATE_ID_EXPR);
}
/* Return the OVERLOAD or FUNCTION_DECL inside FNS. FNS can be an
@@ -1957,6 +1958,72 @@ pod_type_p (t)
return 1;
}
+/* Returns true if T is a variably modified type, in the sense of
+ C99.
+
+ In C99, a struct type is never variably modified because a VLA may
+ not appear as a structure member. However, in GNU C code like:
+
+ struct S { int i[f()]; };
+
+ is valid. Even though GNU C++ does not allow that, this function
+ may sometimes be used in the C front end, so it treats any type
+ with variable size in the same way that C99 treats VLAs.
+
+ In particular, a variably modified type is one that involves a type
+ with variable size. */
+
+bool
+variably_modified_type_p (tree type)
+{
+ /* If TYPE itself has variable size, it is variably modified.
+
+ We do not yet have a representation of the C99 '[*]' syntax.
+ When a representation is chosen, this function should be modified
+ to test for that case as well. */
+ if (TYPE_SIZE (type)
+ && TYPE_SIZE (type) != error_mark_node
+ && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
+ return true;
+
+ /* If TYPE is a pointer or reference, it is variably modified if and
+ only if the type pointed to is variably modified. */
+ if (TYPE_PTR_P (type)
+ || TREE_CODE (type) == REFERENCE_TYPE)
+ return variably_modified_type_p (TREE_TYPE (type));
+
+ /* If TYPE is an array, it is variably modified if the array
+ elements are. (Note that the VLA case has alredy been checked
+ above). */
+ if (TREE_CODE (type) == ARRAY_TYPE)
+ return variably_modified_type_p (TREE_TYPE (type));
+
+ /* If TYPE is a pointer-to-member, it is variably modified if either
+ the class or the member are variably modified. */
+ if (TYPE_PTRMEM_P (type) || TYPE_PTRMEMFUNC_P (type))
+ return (variably_modified_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
+ || variably_modified_type_p (TYPE_PTRMEM_POINTED_TO_TYPE (type)));
+
+ /* If TYPE Is a function type, it is variably modified if any of the
+ parameters or the return type are variably modified. */
+ if (TREE_CODE (type) == FUNCTION_TYPE
+ || TREE_CODE (type) == METHOD_TYPE)
+ {
+ tree parm;
+
+ if (variably_modified_type_p (TREE_TYPE (type)))
+ return true;
+ for (parm = TYPE_ARG_TYPES (type);
+ parm && parm != void_list_node;
+ parm = TREE_CHAIN (parm))
+ if (variably_modified_type_p (TREE_VALUE (parm)))
+ return true;
+ }
+
+ /* All other types are not variably modified. */
+ return false;
+}
+
/* Returns 1 iff zero initialization of type T means actually storing
zeros in it. */
diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index fa7f705019d..cc712b91bef 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -367,15 +367,8 @@ store_init_value (decl, init)
/* End of special C++ code. */
- /* We might have already run this bracketed initializer through
- digest_init. Don't do so again. */
- if (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init)
- && TREE_TYPE (init)
- && TYPE_MAIN_VARIANT (TREE_TYPE (init)) == TYPE_MAIN_VARIANT (type))
- value = init;
- else
- /* Digest the specified initializer into an expression. */
- value = digest_init (type, init, (tree *) 0);
+ /* Digest the specified initializer into an expression. */
+ value = digest_init (type, init, (tree *) 0);
/* Store the expression if valid; else report error. */
@@ -439,8 +432,7 @@ digest_init (type, init, tail)
enum tree_code code = TREE_CODE (type);
tree element = NULL_TREE;
tree old_tail_contents = NULL_TREE;
- /* Nonzero if INIT is a braced grouping, which comes in as a CONSTRUCTOR
- tree node which has no TREE_TYPE. */
+ /* Nonzero if INIT is a braced grouping. */
int raw_constructor;
/* By default, assume we use one element from a list.
@@ -471,10 +463,8 @@ digest_init (type, init, tail)
if (TREE_CODE (init) == NON_LVALUE_EXPR)
init = TREE_OPERAND (init, 0);
- if (TREE_CODE (init) == CONSTRUCTOR && TREE_TYPE (init) == type)
- return init;
-
- raw_constructor = TREE_CODE (init) == CONSTRUCTOR && TREE_TYPE (init) == 0;
+ raw_constructor = (TREE_CODE (init) == CONSTRUCTOR
+ && TREE_HAS_CONSTRUCTOR (init));
if (raw_constructor
&& CONSTRUCTOR_ELTS (init) != 0
diff --git a/gcc/cppinit.c b/gcc/cppinit.c
index 8ec1b0e4bf4..82b3056b704 100644
--- a/gcc/cppinit.c
+++ b/gcc/cppinit.c
@@ -808,7 +808,7 @@ init_standard_includes (pfile)
&& !CPP_OPTION (pfile, no_standard_cplusplus_includes)))
{
/* Does this dir start with the prefix? */
- if (!memcmp (p->fname, default_prefix, default_len))
+ if (!strncmp (p->fname, default_prefix, default_len))
{
/* Yes; change prefix and add to search list. */
int flen = strlen (p->fname);
@@ -1229,7 +1229,7 @@ parse_option (input)
md = (mn + mx) / 2;
opt_len = cl_options[md].opt_len;
- comp = memcmp (input, cl_options[md].opt_text, opt_len);
+ comp = strncmp (input, cl_options[md].opt_text, opt_len);
if (comp > 0)
mn = md + 1;
@@ -1254,7 +1254,7 @@ parse_option (input)
for (; mn < (unsigned int) N_OPTS; mn++)
{
opt_len = cl_options[mn].opt_len;
- if (memcmp (input, cl_options[mn].opt_text, opt_len))
+ if (strncmp (input, cl_options[mn].opt_text, opt_len))
break;
if (input[opt_len] == '\0')
return mn;
diff --git a/gcc/cppmacro.c b/gcc/cppmacro.c
index 113b20dac24..fe78993bc4d 100644
--- a/gcc/cppmacro.c
+++ b/gcc/cppmacro.c
@@ -442,8 +442,7 @@ paste_tokens (pfile, plhs, rhs)
It is simpler to insert a space here, rather than modifying the
lexer to ignore comments in some circumstances. Simply returning
false doesn't work, since we want to clear the PASTE_LEFT flag. */
- if (lhs->type == CPP_DIV
- && (rhs->type == CPP_MULT || rhs->type == CPP_DIV))
+ if (lhs->type == CPP_DIV && rhs->type != CPP_EQ)
*end++ = ' ';
end = cpp_spell_token (pfile, rhs, end);
*end = '\0';
diff --git a/gcc/cse.c b/gcc/cse.c
index 873bbc56e67..7aa9e66c515 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -316,6 +316,10 @@ struct cse_reg_info
reg_tick value, such expressions existing in the hash table are
invalid. */
int reg_in_table;
+
+ /* The SUBREG that was set when REG_TICK was last incremented. Set
+ to -1 if the last store was to the whole register, not a subreg. */
+ unsigned int subreg_ticked;
};
/* A free list of cse_reg_info entries. */
@@ -514,6 +518,11 @@ struct table_elt
#define REG_IN_TABLE(N) ((GET_CSE_REG_INFO (N))->reg_in_table)
+/* Get the SUBREG set at the last increment to REG_TICK (-1 if not a
+ SUBREG). */
+
+#define SUBREG_TICKED(N) ((GET_CSE_REG_INFO (N))->subreg_ticked)
+
/* Get the quantity number for REG. */
#define REG_QTY(N) ((GET_CSE_REG_INFO (N))->reg_qty)
@@ -582,55 +591,7 @@ struct cse_basic_block_data
} path[PATHLENGTH];
};
-/* Nonzero if X has the form (PLUS frame-pointer integer). We check for
- virtual regs here because the simplify_*_operation routines are called
- by integrate.c, which is called before virtual register instantiation.
-
- ?!? FIXED_BASE_PLUS_P and NONZERO_BASE_PLUS_P need to move into
- a header file so that their definitions can be shared with the
- simplification routines in simplify-rtx.c. Until then, do not
- change these macros without also changing the copy in simplify-rtx.c. */
-
-#define FIXED_BASE_PLUS_P(X) \
- ((X) == frame_pointer_rtx || (X) == hard_frame_pointer_rtx \
- || ((X) == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM])\
- || (X) == virtual_stack_vars_rtx \
- || (X) == virtual_incoming_args_rtx \
- || (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == CONST_INT \
- && (XEXP (X, 0) == frame_pointer_rtx \
- || XEXP (X, 0) == hard_frame_pointer_rtx \
- || ((X) == arg_pointer_rtx \
- && fixed_regs[ARG_POINTER_REGNUM]) \
- || XEXP (X, 0) == virtual_stack_vars_rtx \
- || XEXP (X, 0) == virtual_incoming_args_rtx)) \
- || GET_CODE (X) == ADDRESSOF)
-
-/* Similar, but also allows reference to the stack pointer.
-
- This used to include FIXED_BASE_PLUS_P, however, we can't assume that
- arg_pointer_rtx by itself is nonzero, because on at least one machine,
- the i960, the arg pointer is zero when it is unused. */
-
-#define NONZERO_BASE_PLUS_P(X) \
- ((X) == frame_pointer_rtx || (X) == hard_frame_pointer_rtx \
- || (X) == virtual_stack_vars_rtx \
- || (X) == virtual_incoming_args_rtx \
- || (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == CONST_INT \
- && (XEXP (X, 0) == frame_pointer_rtx \
- || XEXP (X, 0) == hard_frame_pointer_rtx \
- || ((X) == arg_pointer_rtx \
- && fixed_regs[ARG_POINTER_REGNUM]) \
- || XEXP (X, 0) == virtual_stack_vars_rtx \
- || XEXP (X, 0) == virtual_incoming_args_rtx)) \
- || (X) == stack_pointer_rtx \
- || (X) == virtual_stack_dynamic_rtx \
- || (X) == virtual_outgoing_args_rtx \
- || (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == CONST_INT \
- && (XEXP (X, 0) == stack_pointer_rtx \
- || XEXP (X, 0) == virtual_stack_dynamic_rtx \
- || XEXP (X, 0) == virtual_outgoing_args_rtx)) \
- || GET_CODE (X) == ADDRESSOF)
-
+static bool fixed_base_plus_p PARAMS ((rtx x));
static int notreg_cost PARAMS ((rtx, enum rtx_code));
static int approx_reg_cost_1 PARAMS ((rtx *, void *));
static int approx_reg_cost PARAMS ((rtx));
@@ -693,6 +654,39 @@ static bool insn_live_p PARAMS ((rtx, int *));
static bool set_live_p PARAMS ((rtx, rtx, int *));
static bool dead_libcall_p PARAMS ((rtx, int *));
+/* Nonzero if X has the form (PLUS frame-pointer integer). We check for
+ virtual regs here because the simplify_*_operation routines are called
+ by integrate.c, which is called before virtual register instantiation. */
+
+static bool
+fixed_base_plus_p (x)
+ rtx x;
+{
+ switch (GET_CODE (x))
+ {
+ case REG:
+ if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx)
+ return true;
+ if (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM])
+ return true;
+ if (REGNO (x) >= FIRST_VIRTUAL_REGISTER
+ && REGNO (x) <= LAST_VIRTUAL_REGISTER)
+ return true;
+ return false;
+
+ case PLUS:
+ if (GET_CODE (XEXP (x, 1)) != CONST_INT)
+ return false;
+ return fixed_base_plus_p (XEXP (x, 0));
+
+ case ADDRESSOF:
+ return true;
+
+ default:
+ return false;
+ }
+}
+
/* Dump the expressions in the equivalence class indicated by CLASSP.
This function is used only for debugging. */
void
@@ -957,6 +951,7 @@ get_cse_reg_info (regno)
/* Initialize it. */
p->reg_tick = 1;
p->reg_in_table = -1;
+ p->subreg_ticked = -1;
p->reg_qty = regno;
p->regno = regno;
p->next = cse_reg_info_used_list;
@@ -1190,6 +1185,7 @@ mention_regs (x)
remove_invalid_refs (i);
REG_IN_TABLE (i) = REG_TICK (i);
+ SUBREG_TICKED (i) = -1;
}
return 0;
@@ -1205,17 +1201,20 @@ mention_regs (x)
if (REG_IN_TABLE (i) >= 0 && REG_IN_TABLE (i) != REG_TICK (i))
{
- /* If reg_tick has been incremented more than once since
- reg_in_table was last set, that means that the entire
- register has been set before, so discard anything memorized
- for the entire register, including all SUBREG expressions. */
- if (REG_IN_TABLE (i) != REG_TICK (i) - 1)
+ /* If REG_IN_TABLE (i) differs from REG_TICK (i) by one, and
+ the last store to this register really stored into this
+ subreg, then remove the memory of this subreg.
+ Otherwise, remove any memory of the entire register and
+ all its subregs from the table. */
+ if (REG_TICK (i) - REG_IN_TABLE (i) > 1
+ || SUBREG_TICKED (i) != REGNO (SUBREG_REG (x)))
remove_invalid_refs (i);
else
remove_invalid_subreg_refs (i, SUBREG_BYTE (x), GET_MODE (x));
}
REG_IN_TABLE (i) = REG_TICK (i);
+ SUBREG_TICKED (i) = REGNO (SUBREG_REG (x));
return 0;
}
@@ -1596,7 +1595,7 @@ insert (x, classp, hash, mode)
|| (GET_CODE (x) == REG
&& RTX_UNCHANGING_P (x)
&& REGNO (x) >= FIRST_PSEUDO_REGISTER)
- || FIXED_BASE_PLUS_P (x));
+ || fixed_base_plus_p (x));
if (table[hash])
table[hash]->prev_same_hash = elt;
@@ -1860,6 +1859,7 @@ invalidate (x, full_mode)
delete_reg_equiv (regno);
REG_TICK (regno)++;
+ SUBREG_TICKED (regno) = -1;
if (regno >= FIRST_PSEUDO_REGISTER)
{
@@ -1887,6 +1887,7 @@ invalidate (x, full_mode)
CLEAR_HARD_REG_BIT (hard_regs_in_table, rn);
delete_reg_equiv (rn);
REG_TICK (rn)++;
+ SUBREG_TICKED (rn) = -1;
}
if (in_table)
@@ -2092,7 +2093,10 @@ invalidate_for_call ()
{
delete_reg_equiv (regno);
if (REG_TICK (regno) >= 0)
- REG_TICK (regno)++;
+ {
+ REG_TICK (regno)++;
+ SUBREG_TICKED (regno) = -1;
+ }
in_table |= (TEST_HARD_REG_BIT (hard_regs_in_table, regno) != 0);
}
@@ -2358,10 +2362,9 @@ canon_hash (x, mode)
do_not_record = 1;
return 0;
}
- if (! RTX_UNCHANGING_P (x) || FIXED_BASE_PLUS_P (XEXP (x, 0)))
- {
- hash_arg_in_memory = 1;
- }
+ if (! RTX_UNCHANGING_P (x) || fixed_base_plus_p (XEXP (x, 0)))
+ hash_arg_in_memory = 1;
+
/* Now that we have already found this special case,
might as well speed it up as much as possible. */
hash += (unsigned) MEM;
@@ -2379,7 +2382,7 @@ canon_hash (x, mode)
hash += (unsigned) USE;
x = XEXP (x, 0);
- if (! RTX_UNCHANGING_P (x) || FIXED_BASE_PLUS_P (XEXP (x, 0)))
+ if (! RTX_UNCHANGING_P (x) || fixed_base_plus_p (XEXP (x, 0)))
hash_arg_in_memory = 1;
/* Now that we have already found this special case,
@@ -3256,9 +3259,10 @@ find_comparison_args (code, parg1, parg2, pmode1, pmode2)
break;
}
- /* If this is fp + constant, the equivalent is a better operand since
- it may let us predict the value of the comparison. */
- else if (NONZERO_BASE_PLUS_P (p->exp))
+ /* If this non-trapping address, e.g. fp + constant, the
+ equivalent is a better operand since it may let us predict
+ the value of the comparison. */
+ else if (!rtx_addr_can_trap_p (p->exp))
{
arg1 = p->exp;
continue;
@@ -3959,17 +3963,10 @@ fold_rtx (x, insn)
comparison. */
if (const_arg0 == 0 || const_arg1 == 0)
{
- /* Is FOLDED_ARG0 frame-pointer plus a constant? Or
- non-explicit constant? These aren't zero, but we
- don't know their sign. */
+ /* Some addresses are known to be nonzero. We don't know
+ their sign, but equality comparisons are known. */
if (const_arg1 == const0_rtx
- && (NONZERO_BASE_PLUS_P (folded_arg0)
-#if 0 /* Sad to say, on sysvr4, #pragma weak can make a symbol address
- come out as 0. */
- || GET_CODE (folded_arg0) == SYMBOL_REF
-#endif
- || GET_CODE (folded_arg0) == LABEL_REF
- || GET_CODE (folded_arg0) == CONST))
+ && nonzero_address_p (folded_arg0))
{
if (code == EQ)
return false_rtx;
@@ -4211,7 +4208,7 @@ fold_rtx (x, insn)
from_plus:
case SMIN: case SMAX: case UMIN: case UMAX:
case IOR: case AND: case XOR:
- case MULT: case DIV: case UDIV:
+ case MULT:
case ASHIFT: case LSHIFTRT: case ASHIFTRT:
/* If we have (<op> <reg> <const_int>) for an associative OP and REG
is known to be of similar form, we may be able to replace the
@@ -4259,11 +4256,9 @@ fold_rtx (x, insn)
break;
/* Compute the code used to compose the constants. For example,
- A/C1/C2 is A/(C1 * C2), so if CODE == DIV, we want MULT. */
+ A-C1-C2 is A-(C1 + C2), so if CODE == MINUS, we want PLUS. */
- associate_code
- = (code == MULT || code == DIV || code == UDIV ? MULT
- : is_shift || code == PLUS || code == MINUS ? PLUS : code);
+ associate_code = (is_shift || code == MINUS ? PLUS : code);
new_const = simplify_binary_operation (associate_code, mode,
const_arg1, inner_const);
@@ -4301,6 +4296,14 @@ fold_rtx (x, insn)
}
break;
+ case DIV: case UDIV:
+ /* ??? The associative optimization performed immediately above is
+ also possible for DIV and UDIV using associate_code of MULT.
+ However, we would need extra code to verify that the
+ multiplication does not overflow, that is, there is no overflow
+ in the calculation of new_const. */
+ break;
+
default:
break;
}
@@ -6163,7 +6166,7 @@ cse_insn (insn, libcall_insn)
elt->in_memory = (GET_CODE (sets[i].inner_dest) == MEM
&& (! RTX_UNCHANGING_P (sets[i].inner_dest)
- || FIXED_BASE_PLUS_P (XEXP (sets[i].inner_dest,
+ || fixed_base_plus_p (XEXP (sets[i].inner_dest,
0))));
/* If we have (set (subreg:m1 (reg:m2 foo) 0) (bar:m1)), M1 is no
@@ -6399,7 +6402,11 @@ addr_affects_sp_p (addr)
&& REGNO (XEXP (addr, 0)) == STACK_POINTER_REGNUM)
{
if (REG_TICK (STACK_POINTER_REGNUM) >= 0)
- REG_TICK (STACK_POINTER_REGNUM)++;
+ {
+ REG_TICK (STACK_POINTER_REGNUM)++;
+ /* Is it possible to use a subreg of SP? */
+ SUBREG_TICKED (STACK_POINTER_REGNUM) = -1;
+ }
/* This should be *very* rare. */
if (TEST_HARD_REG_BIT (hard_regs_in_table, STACK_POINTER_REGNUM))
@@ -7580,7 +7587,9 @@ insn_live_p (insn, counts)
int *counts;
{
int i;
- if (GET_CODE (PATTERN (insn)) == SET)
+ if (flag_non_call_exceptions && may_trap_p (PATTERN (insn)))
+ return true;
+ else if (GET_CODE (PATTERN (insn)) == SET)
return set_live_p (PATTERN (insn), insn, counts);
else if (GET_CODE (PATTERN (insn)) == PARALLEL)
{
diff --git a/gcc/cselib.c b/gcc/cselib.c
index 9c54015f1e8..feffa6de6cf 100644
--- a/gcc/cselib.c
+++ b/gcc/cselib.c
@@ -39,7 +39,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "cselib.h"
static int entry_and_rtx_equal_p PARAMS ((const void *, const void *));
-static unsigned int get_value_hash PARAMS ((const void *));
+static hashval_t get_value_hash PARAMS ((const void *));
static struct elt_list *new_elt_list PARAMS ((struct elt_list *,
cselib_val *));
static struct elt_loc_list *new_elt_loc_list PARAMS ((struct elt_loc_list *,
@@ -274,7 +274,7 @@ entry_and_rtx_equal_p (entry, x_arg)
hash_rtx when adding an element; this function just extracts the hash
value from a cselib_val structure. */
-static unsigned int
+static hashval_t
get_value_hash (entry)
const void *entry;
{
diff --git a/gcc/dependence.c b/gcc/dependence.c
deleted file mode 100644
index ec46d988bf1..00000000000
--- a/gcc/dependence.c
+++ /dev/null
@@ -1,1463 +0,0 @@
-/* Analyze loop dependencies
- Copyright (C) 2000, 2002 Free Software Foundation, Inc.
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA. */
-
-/* References:
- Practical Dependence Testing, Goff, Kennedy, Tseng, PLDI, 1991
- High Performance Compilers for Parallel Computing, Wolfe
-*/
-
-#include "config.h"
-#include "system.h"
-
-#include "rtl.h"
-#include "expr.h"
-#include "tree.h"
-#include "c-common.h"
-#include "flags.h"
-#include "ggc.h"
-#include "varray.h"
-
-#define MAX_SUBSCRIPTS 13
-
-/*
- We perform the following steps:
-
- Build the data structures def_use_chain, loop_chain, and induction_chain.
-
- Determine if a loop index is a normalized induction variable.
- A loop is currently considered to be a for loop having an index set to an
- initial value, conditional check of the index, and increment/decrement of
- the index.
-
- Determine the distance and direction vectors. Both are two dimensioned
- arrays where the first dimension represents a loop and the second
- dimension represents a subscript. Dependencies are actually per loop, not
- per subscript. So for:
- for (i = 0; i < 10; i++)
- for (j = 0; j < 10; j++)
- array [i][j] = array[i][j-1]
- We find the dependencies: loop1/sub_i, loop1/sub_j, loop2/sub_i, loop2/sub_j
- and then intersect loop1/sub_i V loop2/sub_i and loop1/sub_i V loop2/sub_j
- We determine the type of dependence, which determines which test we use.
- We then try to refine the type of dependence we have and add the
- dependence to the dep_chain
-*/
-
-enum dependence_type {dt_flow, dt_anti, dt_output, dt_none};
-#if 0
-static const char *const dependence_string [] = {"flow", "anti", "output", "none"};
-#endif
-enum direction_type {lt, le, eq, gt, ge, star, independent, undef};
-#if 0
-static const char *const direction_string [] = {"<", "<=", "=", ">", ">=", "*",
- "INDEPENDENT", "UNDEFINED"};
-#endif
-enum def_use_type {def, use, init_def_use};
-
-enum du_status_type {seen, unseen};
-
-enum loop_status_type {normal, unnormal};
-
-enum complexity_type {ziv, strong_siv, weak_siv, weak_zero_siv,
- weak_crossing_siv, miv};
-
-/* Given a def/use one can chase the next chain to follow the def/use
- for that variable. Alternately one can sequentially follow each
- element of def_use_chain. */
-
-typedef struct def_use GTY(())
-{
- /* outermost loop */
- tree outer_loop;
- /* loop containing this def/use */
- tree containing_loop;
- /* this expression */
- tree expression;
- /* our name */
- const char *variable;
- /* def or use */
- enum def_use_type type;
- /* status flags */
- enum du_status_type status;
- /* next def/use for this same name */
- struct def_use *next;
- /* dependencies for this def */
- struct dependence *dep;
-} def_use;
-
-/* Given a loop* one can chase the next_nest chain to follow the nested
- loops for that loop. Alternately one can sequentially follow each
- element of loop_chain and check outer_loop to get all loops
- contained within a certain loop. */
-
-typedef struct loop GTY(())
-{
- /* outermost loop containing this loop */
- tree outer_loop;
- /* this loop */
- tree containing_loop;
- /* nest level for this loop */
- int depth;
- /* can loop be normalized? */
- enum loop_status_type status;
- /* loop* for loop contained in this loop */
- struct loop *next_nest;
- /* induction variables for this loop. Currently only the index variable. */
- struct induction *ind;
-} loop;
-
-/* Pointed to by loop. One per induction variable. */
-
-typedef struct induction GTY(())
-{
- /* our name */
- const char *variable;
- /* increment. Currently only +1 or -1 */
- int increment;
- /* lower bound */
- int low_bound;
- /* upper bound */
- int high_bound;
- /* next induction variable for this loop. Currently null. */
- struct induction *next;
-} induction;
-
-/* Pointed to by def/use. One per dependence. */
-
-typedef struct dependence GTY(())
-{
- tree source;
- tree destination;
- enum dependence_type dependence;
- enum direction_type direction[MAX_SUBSCRIPTS];
- int distance[MAX_SUBSCRIPTS];
- struct dependence *next;
-} dependence;
-
-/* subscripts are represented by an array of these. Each reflects one
- X * i + Y term, where X and Y are constants. */
-
-typedef struct subscript
-{
- /* ordinal subscript number */
- int position;
- /* X in X * i + Y */
- int coefficient;
- /* Y in X * i + Y */
- int offset;
- /* our name */
- const char *variable;
- /* next subscript term. Currently null. */
- struct subscript *next;
-} subscript;
-
-/* Remember the destination the front end encountered. */
-
-static tree dest_to_remember;
-
-/* Chain for def_use */
-static GTY ((param_is (def_use))) varray_type def_use_chain;
-
-/* Chain for dependence */
-static GTY ((param_is (dependence))) varray_type dep_chain;
-
-/* Chain for loop */
-static GTY ((param_is (loop))) varray_type loop_chain;
-
-/* Chain for induction */
-static GTY ((param_is (induction))) varray_type induction_chain;
-
-void init_dependence_analysis PARAMS ((tree));
-static void build_def_use PARAMS ((tree, enum def_use_type));
-static loop* add_loop PARAMS ((tree, tree, int));
-static int find_induction_variable PARAMS ((tree, tree, tree, loop*));
-static int get_low_bound PARAMS ((tree, const char*));
-static int have_induction_variable PARAMS ((tree, const char*));
-static void link_loops PARAMS ((void));
-static void get_node_dependence PARAMS ((void));
-static void check_node_dependence PARAMS ((def_use*));
-static int get_coefficients PARAMS ((def_use*, subscript[]));
-static int get_one_coefficient PARAMS ((tree, subscript*, def_use*, enum tree_code*));
-static void normalize_coefficients PARAMS ((subscript[], loop*, int));
-static void classify_dependence PARAMS ((subscript[], subscript[],
- enum complexity_type[], int*, int));
-static void ziv_test PARAMS ((subscript[], subscript[],
- enum direction_type[][MAX_SUBSCRIPTS],
- int[][MAX_SUBSCRIPTS], loop*, int));
-static void siv_test PARAMS ((subscript[], subscript[],
- enum direction_type[][MAX_SUBSCRIPTS],
- int[][MAX_SUBSCRIPTS], loop*, int));
-static int check_subscript_induction PARAMS ((subscript*, subscript*, loop*));
-static void gcd_test PARAMS ((subscript[], subscript[], enum
- direction_type[][MAX_SUBSCRIPTS],
- int[][MAX_SUBSCRIPTS], loop*, int));
-static int find_gcd PARAMS ((int, int));
-static void merge_dependencies PARAMS ((enum direction_type[][MAX_SUBSCRIPTS],
- int[][MAX_SUBSCRIPTS], int, int));
-static void dump_array_ref PARAMS ((tree));
-#if 0
-static void dump_one_node PARAMS ((def_use*, varray_type*));
-static void dump_node_dependence PARAMS ((void));
-#endif
-int search_dependence PARAMS ((tree));
-void remember_dest_for_dependence PARAMS ((tree));
-int have_dependence_p PARAMS ((rtx, rtx, enum direction_type[], int[]));
-void end_dependence_analysis PARAMS ((void));
-
-/* Build dependence chain 'dep_chain', which is used by have_dependence_p,
- for the function given by EXP. */
-
-void
-init_dependence_analysis (exp)
- tree exp;
-{
- VARRAY_GENERIC_PTR_INIT (def_use_chain, 50, "def_use_chain");
- VARRAY_GENERIC_PTR_INIT (dep_chain, 50, "dep_chain");
- VARRAY_GENERIC_PTR_INIT (loop_chain, 50, "loop_chain");
- VARRAY_GENERIC_PTR_INIT (induction_chain, 50, "induction_chain");
-
- build_def_use (exp, init_def_use);
-
- link_loops ();
-
- get_node_dependence ();
-
- /* dump_node_dependence (&def_use_chain);*/
-
- def_use_chain = 0;
- loop_chain = 0;
- induction_chain = 0;
-}
-
-/* Build ARRAY_REF def/use info 'def_use_chain' starting at EXP which is a def
- or use DU_TYPE */
-
-static void
-build_def_use (exp, du_type)
- tree exp;
- enum def_use_type du_type;
-{
- static tree outer_loop;
- static int nloop;
- static tree current_loop;
- static int du_idx;
- static loop *loop_def;
- tree node = exp;
- tree array_ref;
- def_use *du_ptr;
-
- if (du_type == init_def_use)
- {
- outer_loop = 0;
- nloop = 0;
- du_idx = 0;
- }
-
- while (node)
- switch (TREE_CODE (node))
- {
- case COMPOUND_STMT:
- node = TREE_OPERAND (node, 0);
- break;
- case TREE_LIST:
- build_def_use (TREE_VALUE (node), 0);
- node = TREE_CHAIN (node);
- break;
- case CALL_EXPR:
- node = TREE_CHAIN (node);
- break;
- case FOR_STMT:
- if (! nloop) outer_loop = node;
- nloop++;
- current_loop = node;
- loop_def = add_loop (node, outer_loop, nloop);
- if (find_induction_variable (TREE_OPERAND (node, 0),
- TREE_OPERAND (node, 1),
- TREE_OPERAND (node, 2), loop_def)
- == 0)
- loop_def->status = unnormal;
-
- build_def_use (TREE_OPERAND (node, 3), 0);
- nloop--;
- current_loop = 0;
- node = TREE_CHAIN (node);
- break;
- case MODIFY_EXPR:
- /* Is an induction variable modified? */
- if (loop_def
- && TREE_CODE (TREE_OPERAND (node, 0)) == VAR_DECL
- && have_induction_variable
- (loop_def->outer_loop,
- IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (node, 0)))) >= 0)
- loop_def->status = unnormal;
-
- if (TREE_CODE (TREE_OPERAND (node, 0)) == ARRAY_REF
- || TREE_CODE (TREE_OPERAND (node, 0)) == INDIRECT_REF)
- build_def_use (TREE_OPERAND (node, 0), def);
-
- build_def_use (TREE_OPERAND (node, 1), use);
- node = TREE_CHAIN (node);
- break;
- case INDIRECT_REF:
- if (! TREE_OPERAND (node, 1)
- || TREE_CODE (TREE_OPERAND (node, 1)) != ARRAY_REF)
- {
- node = 0;
- break;
- }
- node = TREE_OPERAND (node, 1);
- case ARRAY_REF:
- if (nloop)
- {
- int i;
- char null_string = '\0';
-
- VARRAY_PUSH_GENERIC_PTR (def_use_chain,
- ggc_alloc (sizeof (def_use)));
- du_ptr = VARRAY_GENERIC_PTR (def_use_chain, du_idx++);
- du_ptr->type = du_type;
- du_ptr->status = unseen;
- du_ptr->outer_loop = outer_loop;
- du_ptr->containing_loop = current_loop;
- du_ptr->expression = node;
- du_ptr->variable = &null_string;
- du_ptr->next = 0;
- du_ptr->dep = 0;
- for (array_ref = node;
- TREE_CODE (array_ref) == ARRAY_REF;
- array_ref = TREE_OPERAND (array_ref, 0))
- ;
-
- if (TREE_CODE (array_ref) == COMPONENT_REF)
- {
- array_ref = TREE_OPERAND (array_ref, 1);
- if (! (TREE_CODE (array_ref) == FIELD_DECL
- && TREE_CODE (TREE_TYPE (array_ref)) == ARRAY_TYPE))
- {
- node = 0;
- break;
- }
- }
-
- for (i = 0;
- i < du_idx
- && strcmp (IDENTIFIER_POINTER (DECL_NAME (array_ref)),
- ((def_use*) (VARRAY_GENERIC_PTR
- (def_use_chain, i)))->variable);
- i++)
- ;
- if (i != du_idx)
- {
- def_use *tmp_duc;
- for (tmp_duc = ((def_use*) (VARRAY_GENERIC_PTR (def_use_chain, i)));
- tmp_duc->next;
- tmp_duc = ((def_use*)tmp_duc->next));
- tmp_duc->next = du_ptr;
- }
- else du_ptr->next = 0;
- du_ptr->variable = IDENTIFIER_POINTER (DECL_NAME (array_ref));
- }
- node = 0;
- break;
-
- case SCOPE_STMT:
- case DECL_STMT:
- node = TREE_CHAIN (node);
- break;
-
- case EXPR_STMT:
- if (TREE_CODE (TREE_OPERAND (node, 0)) == MODIFY_EXPR)
- build_def_use (TREE_OPERAND (node, 0), def);
- node = TREE_CHAIN (node);
- break;
-
- default:
- if (TREE_CODE_CLASS (TREE_CODE (node)) == '2')
- {
- build_def_use (TREE_OPERAND (node, 0), use);
- build_def_use (TREE_OPERAND (node, 1), use);
- node = TREE_CHAIN (node);
- }
- else
- node = 0;
- }
-}
-
-/* Add a loop to 'loop_chain' corresponding to for loop LOOP_NODE at depth
- NLOOP, whose outermost loop is OUTER_LOOP */
-
-static loop*
-add_loop (loop_node, outer_loop, nloop)
- tree loop_node;
- tree outer_loop;
- int nloop;
-{
- loop *loop_ptr;
-
- VARRAY_PUSH_GENERIC_PTR (loop_chain, ggc_alloc (sizeof (loop)));
- loop_ptr = VARRAY_TOP (loop_chain, generic);
- loop_ptr->outer_loop = outer_loop;
- loop_ptr->containing_loop = loop_node;
- loop_ptr->depth = nloop;
- loop_ptr->status = normal;
- loop_ptr->next_nest = 0;
- loop_ptr->ind = 0;
- return loop_ptr;
-}
-
-/* Update LOOP_DEF if for loop's COND_NODE and INCR_NODE define an index that
- is a normalized induction variable. */
-
-static int
-find_induction_variable (init_node, cond_node, incr_node, loop_def)
- tree init_node;
- tree cond_node;
- tree incr_node;
- loop *loop_def;
-{
- induction *ind_ptr;
- enum tree_code incr_code;
- tree incr;
-
- if (! init_node || ! incr_node || ! cond_node)
- return 0;
- /* Allow for ',' operator in increment expression of FOR */
-
- incr = incr_node;
- while (TREE_CODE (incr) == COMPOUND_EXPR)
- {
- incr_code = TREE_CODE (TREE_OPERAND (incr, 0));
- if (incr_code == PREDECREMENT_EXPR || incr_code == POSTDECREMENT_EXPR
- || incr_code == PREINCREMENT_EXPR || incr_code == POSTINCREMENT_EXPR)
- {
- incr_node = TREE_OPERAND (incr, 0);
- break;
- }
- incr_code = TREE_CODE (TREE_OPERAND (incr, 1));
- if (incr_code == PREDECREMENT_EXPR || incr_code == POSTDECREMENT_EXPR
- || incr_code == PREINCREMENT_EXPR || incr_code == POSTINCREMENT_EXPR)
- {
- incr_node = TREE_OPERAND (incr, 1);
- break;
- }
- incr = TREE_OPERAND (incr, 1);
- }
-
- /* Allow index condition to be part of logical expression */
- cond_node = TREE_VALUE (cond_node);
- incr = cond_node;
-
-#define INDEX_LIMIT_CHECK(NODE) \
- (TREE_CODE_CLASS (TREE_CODE (NODE)) == '<') \
- && (TREE_CODE (TREE_OPERAND (NODE, 0)) == VAR_DECL \
- && (IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (NODE, 0))) \
- == IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (incr_node, 0))))) \
- ? 1 : 0
-
- while (TREE_CODE (incr) == TRUTH_ANDIF_EXPR
- || TREE_CODE (incr) == TRUTH_ORIF_EXPR)
- {
- if (INDEX_LIMIT_CHECK (TREE_OPERAND (incr, 0)))
- {
- cond_node = TREE_OPERAND (incr, 0);
- break;
- }
- if (INDEX_LIMIT_CHECK (TREE_OPERAND (incr, 1)))
- {
- cond_node = TREE_OPERAND (incr, 1);
- break;
- }
- incr = TREE_OPERAND (incr, 0);
- }
-
- incr_code = TREE_CODE (incr_node);
- if ((incr_code == PREDECREMENT_EXPR || incr_code == POSTDECREMENT_EXPR
- || incr_code == PREINCREMENT_EXPR || incr_code == POSTINCREMENT_EXPR)
- && TREE_CODE_CLASS (TREE_CODE (cond_node)) == '<')
- {
- if (!INDEX_LIMIT_CHECK (cond_node))
- return 0;
-
- VARRAY_PUSH_GENERIC_PTR (induction_chain,
- ggc_alloc (sizeof (induction)));
- ind_ptr = VARRAY_TOP (induction_chain, generic);
- loop_def->ind = ind_ptr;
- ind_ptr->variable = IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND
- (incr_node, 0)));
- ind_ptr->increment = TREE_INT_CST_LOW (TREE_OPERAND (incr_node, 1));
- if (TREE_CODE (incr_node) == PREDECREMENT_EXPR
- || TREE_CODE (incr_node) == POSTDECREMENT_EXPR)
- ind_ptr->increment = -ind_ptr->increment;
-
- ind_ptr->low_bound = get_low_bound (init_node, ind_ptr->variable);
- if (TREE_CODE (TREE_OPERAND (cond_node, 0)) == VAR_DECL
- && IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (cond_node, 0)))
- == ind_ptr->variable)
- {
- if (TREE_CODE (TREE_OPERAND (cond_node, 1)) == INTEGER_CST)
- ind_ptr->high_bound =
- TREE_INT_CST_LOW (TREE_OPERAND (cond_node, 1));
- else
- ind_ptr->high_bound = ind_ptr->increment < 0 ? INT_MIN : INT_MAX;
- }
- else if (TREE_CODE (TREE_OPERAND (cond_node, 1)) == VAR_DECL
- && IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (cond_node, 1)))
- == ind_ptr->variable)
- {
- if (TREE_CODE (TREE_OPERAND (cond_node, 0)) == INTEGER_CST)
- ind_ptr->high_bound =
- TREE_INT_CST_LOW (TREE_OPERAND (cond_node, 0));
- else
- ind_ptr->high_bound = ind_ptr->increment < 0 ? INT_MIN : INT_MAX;
- }
- ind_ptr->next = 0;
- return 1;
- }
- return 0;
-}
-
-/* Return the low bound for induction VARIABLE in NODE */
-
-static int
-get_low_bound (node, variable)
- tree node;
- const char *variable;
-{
-
- if (TREE_CODE (node) == SCOPE_STMT)
- node = TREE_CHAIN (node);
-
- if (! node)
- return INT_MIN;
-
- while (TREE_CODE (node) == COMPOUND_EXPR)
- {
- if (TREE_CODE (TREE_OPERAND (node, 0)) == MODIFY_EXPR
- && (TREE_CODE (TREE_OPERAND (node, 0)) == VAR_DECL
- && IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (node, 0)))
- == variable))
- break;
- }
-
- if (TREE_CODE (node) == EXPR_STMT)
- node = TREE_OPERAND (node, 0);
- if (TREE_CODE (node) == MODIFY_EXPR
- && (TREE_CODE (TREE_OPERAND (node, 0)) == VAR_DECL
- && IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (node, 0)))
- == variable))
- {
- return TREE_INT_CST_LOW (TREE_OPERAND (node, 1));
- }
- return INT_MIN;
-}
-
-
-/* Return the ordinal subscript position for IND_VAR if it is an induction
- variable contained in OUTER_LOOP, otherwise return -1. */
-
-static int
-have_induction_variable (outer_loop, ind_var)
- tree outer_loop;
- const char *ind_var;
-{
- induction *ind_ptr;
- loop *loop_ptr;
- unsigned int ind_idx = 0;
- unsigned int loop_idx = 0;
-
- for (loop_ptr = VARRAY_GENERIC_PTR (loop_chain, loop_idx);
- loop_ptr && loop_idx < VARRAY_SIZE (loop_chain);
- loop_ptr = VARRAY_GENERIC_PTR (loop_chain, ++loop_idx))
- if (loop_ptr->outer_loop == outer_loop)
- for (ind_ptr = loop_ptr->ind;
- ind_ptr && ind_idx < VARRAY_SIZE (induction_chain);
- ind_ptr = ind_ptr->next)
- {
- if (! strcmp (ind_ptr->variable, ind_var))
- return loop_idx + 1;
- }
- return -1;
-}
-
-/* Chain the nodes of 'loop_chain'. */
-
-static void
-link_loops ()
-{
- unsigned int loop_idx = 0;
- loop *loop_ptr, *prev_loop_ptr = 0;
-
- prev_loop_ptr = VARRAY_GENERIC_PTR (loop_chain, loop_idx);
- for (loop_ptr = VARRAY_GENERIC_PTR (loop_chain, ++loop_idx);
- loop_ptr && loop_idx < VARRAY_SIZE (loop_chain);
- loop_ptr = VARRAY_GENERIC_PTR (loop_chain, ++loop_idx))
- {
- if (prev_loop_ptr->outer_loop == loop_ptr->outer_loop)
- {
- if (prev_loop_ptr->depth == loop_ptr->depth - 1)
- prev_loop_ptr->next_nest = loop_ptr;
- prev_loop_ptr = loop_ptr;
- }
- }
-}
-
-/* Check the dependence for each member of 'def_use_chain'. */
-
-static void
-get_node_dependence ()
-{
- unsigned int du_idx;
- def_use *du_ptr;
-
- du_idx = 0;
- for (du_ptr = VARRAY_GENERIC_PTR (def_use_chain, du_idx);
- du_ptr && du_idx < VARRAY_SIZE (def_use_chain);
- du_ptr = VARRAY_GENERIC_PTR (def_use_chain, du_idx++))
- {
- if (du_ptr->status == unseen)
- check_node_dependence (du_ptr);
- }
-}
-
-/* Check the dependence for definition DU. */
-
-static void
-check_node_dependence (du)
- def_use *du;
-{
- def_use *def_ptr, *use_ptr;
- dependence *dep_ptr, *dep_list;
- subscript icoefficients[MAX_SUBSCRIPTS];
- subscript ocoefficients[MAX_SUBSCRIPTS];
- loop *loop_ptr, *ck_loop_ptr;
- unsigned int loop_idx = 0;
- int distance[MAX_SUBSCRIPTS][MAX_SUBSCRIPTS];
- int i, j;
- int subscript_count;
- int unnormal_loop;
- enum direction_type direction[MAX_SUBSCRIPTS][MAX_SUBSCRIPTS];
- enum complexity_type complexity[MAX_SUBSCRIPTS];
- int separability;
- int have_dependence;
-
- for (j = 1 ; j < MAX_SUBSCRIPTS; j++)
- {
- direction[j][0] = undef;
- distance[j][0] = 0;
- }
-
- for (def_ptr = du; def_ptr; def_ptr = def_ptr->next)
- {
- if (def_ptr->type != def)
- continue;
- subscript_count = get_coefficients (def_ptr, ocoefficients);
- if (subscript_count < 0)
- continue;
-
- loop_idx = 0;
- for (loop_ptr = VARRAY_GENERIC_PTR (loop_chain, loop_idx);
- loop_ptr && loop_idx < VARRAY_SIZE (loop_chain);
- loop_ptr = VARRAY_GENERIC_PTR (loop_chain, ++loop_idx))
- {
- if (loop_ptr->outer_loop == def_ptr->outer_loop)
- break;
- }
-
- unnormal_loop = 0;
- for (ck_loop_ptr = loop_ptr;
- ck_loop_ptr && loop_idx < VARRAY_SIZE (loop_chain);
- ck_loop_ptr = VARRAY_GENERIC_PTR (loop_chain, ++loop_idx))
- {
- if (ck_loop_ptr->outer_loop == def_ptr->outer_loop
- && ck_loop_ptr->status == unnormal)
- unnormal_loop = 1;
- }
- if (unnormal_loop)
- continue;
-
- normalize_coefficients (ocoefficients, loop_ptr, subscript_count);
-
- for (use_ptr = du; use_ptr; use_ptr = use_ptr->next)
- {
- if (def_ptr == use_ptr
- || def_ptr->outer_loop != use_ptr->outer_loop)
- continue;
- def_ptr->status = seen;
- use_ptr->status = seen;
- subscript_count = get_coefficients (use_ptr, icoefficients);
- normalize_coefficients (icoefficients, loop_ptr, subscript_count);
- classify_dependence (icoefficients, ocoefficients, complexity,
- &separability, subscript_count);
-
- for (i = 1, ck_loop_ptr = loop_ptr; ck_loop_ptr; i++)
- {
- for (j = 1; j <= subscript_count; j++)
- {
- direction[i][j] = star;
- distance[i][j] = INT_MAX;
- if (separability && complexity[j] == ziv)
- ziv_test (icoefficients, ocoefficients, direction, distance,
- ck_loop_ptr, j);
- else if (separability
- && (complexity[j] == strong_siv
- || complexity[j] == weak_zero_siv
- || complexity[j] == weak_crossing_siv))
- siv_test (icoefficients, ocoefficients, direction, distance,
- ck_loop_ptr, j);
- else
- gcd_test (icoefficients, ocoefficients, direction, distance,
- ck_loop_ptr, j);
- /* ?? Add other tests: single variable exact test, banerjee */
- }
-
- ck_loop_ptr = ck_loop_ptr->next_nest;
- }
-
- merge_dependencies (direction, distance, i - 1, j - 1);
-
- have_dependence = 0;
- for (j = 1; j <= i - 1; j++)
- {
- if (direction[j][0] != independent)
- have_dependence = 1;
- }
- if (! have_dependence)
- continue;
-
- VARRAY_PUSH_GENERIC_PTR (dep_chain, ggc_alloc (sizeof (dependence)));
- dep_ptr = VARRAY_TOP (dep_chain, generic);
- dep_ptr->source = use_ptr->expression;
- dep_ptr->destination = def_ptr->expression;
- dep_ptr->next = 0;
-
- if (def_ptr < use_ptr && use_ptr->type == use)
- dep_ptr->dependence = dt_flow;
- else if (def_ptr > use_ptr && use_ptr->type == use)
- dep_ptr->dependence = dt_anti;
- else dep_ptr->dependence = dt_output;
-
- for (j = 1 ; j <= i - 1 ; j++)
- {
- if (direction[j][0] == gt)
- {
- dep_ptr->dependence = dt_anti;
- direction[j][0] = lt;
- distance[j][0] = -distance[j][0];
- break;
- }
- else if (direction[j][0] == lt)
- {
- dep_ptr->dependence = dt_flow;
- break;
- }
- }
- for (j = 1 ; j < MAX_SUBSCRIPTS ; j++)
- {
- dep_ptr->direction[j] = direction[j][0];
- dep_ptr->distance[j] = distance[j][0];
- }
-
- for (dep_list = def_ptr->dep ;
- dep_list && dep_list->next ;
- dep_list = dep_list->next)
- ;
-
- if (! dep_list)
- {
- /* Dummy for rtl interface */
- dependence *dep_root_ptr;
-
- VARRAY_PUSH_GENERIC_PTR (dep_chain,
- ggc_alloc (sizeof (dependence)));
- dep_root_ptr = VARRAY_TOP (dep_chain, generic);
- dep_root_ptr->source = 0;
- dep_root_ptr->destination = def_ptr->expression;
- dep_root_ptr->dependence = dt_none;
- dep_root_ptr->next = dep_ptr;
- def_ptr->dep = dep_ptr;
- }
- else
- dep_list->next = dep_ptr;
- }
- }
-}
-
-/* Get the COEFFICIENTS and offset for def/use DU. */
-
-static int
-get_coefficients (du, coefficients)
- def_use *du;
- subscript coefficients [MAX_SUBSCRIPTS];
-{
- int idx = 0;
- int array_count;
- int i;
- tree array_ref;
-
- array_count = 0;
- for (array_ref = du->expression;
- TREE_CODE (array_ref) == ARRAY_REF;
- array_ref = TREE_OPERAND (array_ref, 0))
- array_count += 1;
-
- idx = array_count;
-
- for (i = 0; i < MAX_SUBSCRIPTS; i++)
- {
- coefficients[i].position = 0;
- coefficients[i].coefficient = INT_MIN;
- coefficients[i].offset = INT_MIN;
- coefficients[i].variable = 0;
- coefficients[i].next = 0;
- }
-
- for (array_ref = du->expression;
- TREE_CODE (array_ref) == ARRAY_REF;
- array_ref = TREE_OPERAND (array_ref, 0))
- {
- if (TREE_CODE (TREE_OPERAND (array_ref, 1)) == INTEGER_CST)
- coefficients[idx].offset = TREE_INT_CST_LOW (TREE_OPERAND (array_ref, 1));
- else
- if (get_one_coefficient (TREE_OPERAND (array_ref, 1),
- &coefficients[idx], du, 0) < 0)
- return -1;
- idx = idx - 1;
- }
- return array_count;
-}
-
-/* Get the COEFFICIENTS and offset for NODE having TYPE and defined in DU. */
-
-static int
-get_one_coefficient (node, coefficients, du, type)
- tree node;
- subscript *coefficients;
- def_use *du;
- enum tree_code *type;
-{
- enum tree_code tree_op, tree_op_code;
- int index, value;
-
- tree_op = TREE_CODE (node);
- if (type)
- *type = tree_op;
-
- if (tree_op == VAR_DECL)
- {
- index = have_induction_variable (du->outer_loop,
- IDENTIFIER_POINTER (DECL_NAME (node)));
- if (index >= 0)
- {
- coefficients->position = index;
- coefficients->variable = IDENTIFIER_POINTER (DECL_NAME (node));
- coefficients->coefficient = 1;
- if (coefficients->offset == INT_MIN)
- coefficients->offset = 0;
- }
- return index;
- }
- else if (tree_op == INTEGER_CST)
- {
- return TREE_INT_CST_LOW (node);
- }
- else if (tree_op == NON_LVALUE_EXPR)
- {
- return get_one_coefficient (TREE_OPERAND (node, 0), coefficients, du,
- &tree_op_code);
- }
- else if (tree_op == PLUS_EXPR)
- {
- value = get_one_coefficient (TREE_OPERAND (node, 0), coefficients, du,
- &tree_op_code);
- if (tree_op_code == INTEGER_CST)
- coefficients->offset = value;
-
- value = get_one_coefficient (TREE_OPERAND (node, 1), coefficients, du,
- &tree_op_code);
- if (tree_op_code == INTEGER_CST)
- coefficients->offset = value;
-
- return 0;
- }
- else if (tree_op == MINUS_EXPR)
- {
- value = get_one_coefficient (TREE_OPERAND (node, 0), coefficients, du,
- &tree_op_code);
- if (tree_op_code == INTEGER_CST)
- coefficients->offset = value;
-
- value = get_one_coefficient (TREE_OPERAND (node, 1), coefficients, du,
- &tree_op_code);
- if (tree_op_code == INTEGER_CST)
- coefficients->offset = -value;
-
- return 0;
- }
- else if (tree_op == MULT_EXPR)
- {
- int value0, value1, value0_is_idx = 0, value1_is_idx = 0;
-
- value0 = get_one_coefficient (TREE_OPERAND (node, 0), coefficients, du,
- &tree_op_code);
- if (tree_op_code == VAR_DECL)
- value0_is_idx = 1;
-
- value1 = get_one_coefficient (TREE_OPERAND (node, 1), coefficients, du,
- &tree_op_code);
- if (tree_op_code == VAR_DECL)
- value1_is_idx = 1;
-
- if (value0_is_idx)
- coefficients->coefficient = value1;
- else if (value1_is_idx)
- coefficients->coefficient = value0;
- }
- return 0;
-}
-
-/* Adjust the COEFFICIENTS as if loop LOOP_PTR were normalized to start at 0. */
-
-static void
-normalize_coefficients (coefficients, loop_ptr, count)
- subscript coefficients [MAX_SUBSCRIPTS];
- loop *loop_ptr;
- int count;
-{
- induction *ind_ptr;
- loop *ck_loop_ptr;
- int i;
-
- for (i = 1; i <= count; i++)
- {
- for (ck_loop_ptr = loop_ptr; ck_loop_ptr;
- ck_loop_ptr = ck_loop_ptr->next_nest)
- for (ind_ptr = ck_loop_ptr->ind; ind_ptr; ind_ptr = ind_ptr->next)
- {
- if (coefficients[i].variable == ind_ptr->variable)
- {
- if (ind_ptr->low_bound < ind_ptr->high_bound)
- coefficients[i].offset += coefficients[i].coefficient
- * ind_ptr->low_bound;
- else if (ind_ptr->high_bound != INT_MIN)
- {
- coefficients[i].offset = coefficients[i].coefficient
- * ind_ptr->high_bound;
- coefficients[i].coefficient = coefficients[i].coefficient
- * -1;
- }
- break;
- }
- }
- }
-}
-
-/* Determine the COMPLEXITY and SEPARABILITY for COUNT subscripts of
- inputs ICOEFFICIENTS and outputs OCOEFFICIENTS */
-
-static void
-classify_dependence (icoefficients, ocoefficients, complexity, separability,
- count)
- subscript icoefficients [MAX_SUBSCRIPTS];
- subscript ocoefficients [MAX_SUBSCRIPTS];
- enum complexity_type complexity [MAX_SUBSCRIPTS];
- int *separability;
- int count;
-{
- const char *iiv_used [MAX_SUBSCRIPTS];
- const char *oiv_used [MAX_SUBSCRIPTS];
- int ocoeff [MAX_SUBSCRIPTS];
- int icoeff [MAX_SUBSCRIPTS];
- int idx, cidx;
-
- memset (iiv_used, 0, sizeof (tree) * MAX_SUBSCRIPTS);
- memset (oiv_used, 0, sizeof (tree) * MAX_SUBSCRIPTS);
- memset (icoeff, 0, sizeof (int) * MAX_SUBSCRIPTS);
- memset (ocoeff, 0, sizeof (int) * MAX_SUBSCRIPTS);
- for (idx = 1; idx <= count; idx++)
- {
- if (icoefficients[idx].variable != 0)
- {
- if (! iiv_used[idx])
- {
- iiv_used[idx] = icoefficients[idx].variable;
- icoeff[idx] = icoefficients[idx].coefficient;
- }
- }
- if (ocoefficients[idx].variable != 0)
- {
- if (! oiv_used[idx])
- {
- oiv_used[idx] = ocoefficients[idx].variable;
- ocoeff[idx] = ocoefficients[idx].coefficient;
- }
- }
- }
-
- for (idx = 1; idx <= count; idx++)
- {
- if (iiv_used[idx] == 0 && oiv_used[idx] == 0)
- complexity[idx] = ziv;
- else if (iiv_used[idx] == oiv_used[idx])
- {
- if (icoeff[idx] == ocoeff[idx])
- complexity[idx] = strong_siv;
- else if (icoeff[idx] == -1 * ocoeff[idx])
- complexity[idx] = weak_crossing_siv;
- else
- complexity[idx] = weak_siv;
- }
- else if (icoeff[idx] == 0 || ocoeff[idx] == 0)
- complexity[idx] = weak_zero_siv;
- else complexity[idx] = miv;
- }
-
- *separability = 1;
- for (idx = 1; idx <= count; idx++)
- {
- for (cidx = 1; cidx <= count; cidx++)
- {
- if (idx != cidx
- && iiv_used[idx] && oiv_used[cidx]
- && iiv_used[idx] == oiv_used[cidx])
- *separability = 0;
- }
- }
-}
-
-/* Determine the DIRECTION and DISTANCE dependency for subscript SUB of
- inputs ICOEFFICIENTS and outputs OCOEFFICIENTS of loop LOOP_PTR using
- the zero induction variable test */
-
-static void
-ziv_test (icoefficients, ocoefficients, direction, distance, loop_ptr, sub)
- subscript icoefficients [MAX_SUBSCRIPTS];
- subscript ocoefficients [MAX_SUBSCRIPTS];
- enum direction_type direction[MAX_SUBSCRIPTS][MAX_SUBSCRIPTS];
- int distance[MAX_SUBSCRIPTS][MAX_SUBSCRIPTS] ATTRIBUTE_UNUSED;
- loop *loop_ptr;
- int sub;
-{
- if (ocoefficients[sub].offset !=
- icoefficients[sub].offset)
- direction[loop_ptr->depth][sub] = independent;
-}
-
-/* Determine the DIRECTION and DISTANCE dependency for subscript SUB of
- inputs ICOEFFICIENTS and outputs OCOEFFICIENTS of loop LOOP_PTR using
- the single induction variable test */
-
-static void
-siv_test (icoefficients, ocoefficients, direction, distance, loop_ptr, sub)
- subscript icoefficients [MAX_SUBSCRIPTS];
- subscript ocoefficients [MAX_SUBSCRIPTS];
- enum direction_type direction[MAX_SUBSCRIPTS][MAX_SUBSCRIPTS];
- int distance[MAX_SUBSCRIPTS][MAX_SUBSCRIPTS];
- loop *loop_ptr;
- int sub;
-{
- int coef_diff;
- int coef;
- int gcd;
-
- if (! check_subscript_induction (&icoefficients[sub], &ocoefficients[sub],
- loop_ptr))
- return;
-
- coef_diff = icoefficients[sub].offset - ocoefficients[sub].offset;
- /* strong_siv requires equal coefficients. weak_crossing_siv requires
- coefficients to have equal absolute value. weak_zero_siv uses the
- nonzero coefficient. */
-
- if (ocoefficients[sub].coefficient == INT_MIN)
- coef = icoefficients[sub].coefficient;
- else if (icoefficients[sub].coefficient == INT_MIN)
- coef = ocoefficients[sub].coefficient;
- else if (ocoefficients[sub].coefficient ==
- -1 * icoefficients[sub].coefficient)
- coef = 2 * abs (ocoefficients[sub].coefficient);
- else
- coef = icoefficients[sub].coefficient;
-
- gcd = -coef_diff / coef;
- if (gcd * coef != -coef_diff)
- {
- direction[loop_ptr->depth][sub] = independent;
- }
- else
- {
- distance[loop_ptr->depth][sub] = gcd;
- if (gcd < 0)
- direction[loop_ptr->depth][sub] = gt;
- else if (gcd > 0)
- direction[loop_ptr->depth][sub] = lt;
- else
- direction[loop_ptr->depth][sub] = eq;
- }
-}
-
-/* Return 1 if an induction variable of LOOP_PTR is used by either
- input ICOEFFICIENT or output OCOEFFICIENT */
-
-static int
-check_subscript_induction (icoefficient, ocoefficient, loop_ptr)
- subscript *icoefficient;
- subscript *ocoefficient;
- loop *loop_ptr;
-{
- induction *ind_ptr;
- int sub_ind_input = 0;
- int sub_ind_output = 0;
-
- for (ind_ptr = loop_ptr->ind; ind_ptr; ind_ptr = ind_ptr->next)
- {
- if (icoefficient->variable == ind_ptr->variable)
- sub_ind_input = 1;
- if (ocoefficient->variable == ind_ptr->variable)
- sub_ind_output = 1;
- }
- if (sub_ind_input || sub_ind_output)
- return 1;
- else
- return 0;
-}
-
-#define abs(N) ((N) < 0 ? -(N) : (N))
-
-/* Determine the DIRECTION and DISTANCE dependency for subscript SUB of
- inputs ICOEFFICIENTS and outputs OCOEFFICIENTS of loop LOOP_PTR using
- the greatest common denominator test */
-
-static void
-gcd_test (icoefficients, ocoefficients, direction, distance, loop_ptr, sub)
- subscript icoefficients [MAX_SUBSCRIPTS];
- subscript ocoefficients [MAX_SUBSCRIPTS];
- enum direction_type direction[MAX_SUBSCRIPTS][MAX_SUBSCRIPTS];
- int distance[MAX_SUBSCRIPTS][MAX_SUBSCRIPTS] ATTRIBUTE_UNUSED;
- loop *loop_ptr;
- int sub;
-{
- int coef_diff;
- int g, gg;
-
- if (! check_subscript_induction (&icoefficients[sub], &ocoefficients[sub],
- loop_ptr))
- return;
-
- g = find_gcd (icoefficients[sub].coefficient,
- ocoefficients[sub].coefficient);
- if (g > 1)
- {
- coef_diff = icoefficients[sub].offset - ocoefficients[sub].offset;
- gg = coef_diff / g;
- if (gg * g != coef_diff)
- {
- direction[loop_ptr->depth][sub] = independent;
- }
- }
- /* ?? gcd does not yield direction and distance. Wolfe's direction
- vector hierarchy can be used to give this. */
-}
-
-/* Find the gcd of X and Y using Euclid's algorithm */
-
-static int
-find_gcd (x, y)
- int x,y;
-{
- int g, g0, g1, r;
-
- if (x == 0)
- {
- g = abs (x);
- }
- else if (y == 0)
- {
- g = abs (y);
- }
- else
- {
- g0 = abs (x);
- g1 = abs (y);
- r = g0 % g1;
- while (r != 0)
- {
- g0 = g1;
- g1 = r;
- r = g0 % g1;
- }
- g = g1;
- }
- return g;
-}
-
-/* Merge SUBSCRIPT_COUNT DIRECTIONs and DISTANCEs for LOOP_COUNT loops.
- We use a predefined array to handle the direction merge.
- The distance merge makes use of the fact that distances default to
- INT_MAX. Distances are '&' together. Watch out for a negative distance.
-*/
-
-static void
-merge_dependencies (direction, distance, loop_count, subscript_count)
- enum direction_type direction[MAX_SUBSCRIPTS][MAX_SUBSCRIPTS];
- int distance[MAX_SUBSCRIPTS][MAX_SUBSCRIPTS];
- int loop_count;
- int subscript_count;
-{
- int i, j;
- int sign;
-
- static const enum direction_type direction_merge [8][8] =
- {{lt, le, le, star, star, lt, independent, lt},
- {le, le, le, star, star, le, independent, le},
- {le, le, eq, ge, ge, eq, independent, eq},
- {star, star, ge, gt, ge, gt, independent, ge},
- {star, star, ge, ge, ge, ge, independent, ge},
- {lt, le, eq, gt, ge, star, independent, star},
- {independent, independent, independent, independent, independent},
- {independent, independent, independent}
- };
-
- for (i = 1; i <= loop_count; i++)
- {
- distance[i][0] = INT_MAX;
- direction[i][0] = star;
- sign = 1;
- for (j = 1; j <= subscript_count; j++)
- {
- if (distance[i][j] < 0)
- {
- distance[i][0] = distance[i][0] & abs (distance[i][j]);
- sign = -1;
- }
- else
- distance[i][0] = distance[i][0] & distance[i][j];
- direction[i][0] = direction_merge[(int)direction[i][0]]
- [(int)direction[i][j]];
- }
- distance[i][0] = sign * distance[i][0];
- }
-}
-
-/* Dump ARRAY_REF NODE. */
-
-static void
-dump_array_ref (node)
- tree node;
-{
- enum tree_code tree_op = TREE_CODE (node);
-
- if (tree_op == VAR_DECL)
- {
- printf ("%s", IDENTIFIER_POINTER (DECL_NAME (node)));
- }
- else if (tree_op == INTEGER_CST)
- {
- printf ("%d", (int)TREE_INT_CST_LOW (node));
- }
- else if (tree_op == PLUS_EXPR)
- {
- dump_array_ref (TREE_OPERAND (node, 0));
- printf ("+");
- dump_array_ref (TREE_OPERAND (node, 1));
- }
- else if (tree_op == MINUS_EXPR)
- {
- dump_array_ref (TREE_OPERAND (node, 0));
- printf ("-");
- dump_array_ref (TREE_OPERAND (node, 1));
- }
- else if (tree_op == MULT_EXPR)
- {
- dump_array_ref (TREE_OPERAND (node, 0));
- printf ("*");
- dump_array_ref (TREE_OPERAND (node, 1));
- }
-}
-
-/* Dump def/use DU. */
-
-#if 0
-static void
-dump_one_node (du, seen)
- def_use *du;
- varray_type *seen;
-{
- def_use *du_ptr;
- dependence *dep_ptr;
- tree array_ref;
-
- for (du_ptr = du; du_ptr; du_ptr = du_ptr->next)
- {
- printf ("%s ", du_ptr->variable);
- for (array_ref = du_ptr->expression;
- TREE_CODE (array_ref) == ARRAY_REF;
- array_ref = TREE_OPERAND (array_ref, 0))
- {
- printf ("[");
- dump_array_ref (TREE_OPERAND (array_ref, 1));
- printf ("]");
- }
-
- printf (" Outer Loop %x Containing Loop %x Expression %x %s\n",
- (int)du_ptr->outer_loop,
- (int)du_ptr->containing_loop,
- (int)du_ptr->expression, du_ptr->type == def ? "Def" : "Use");
- VARRAY_PUSH_GENERIC_PTR (*seen, du_ptr);
-
- for (dep_ptr = du_ptr->dep; dep_ptr; dep_ptr = dep_ptr->next)
- {
- int i;
- printf ("%s Dependence with %x ",
- dependence_string[(int)dep_ptr->dependence],
- (int)dep_ptr->source);
- printf ("Dir/Dist ");
- for (i = 1 ; i < MAX_SUBSCRIPTS ; i++)
- if (dep_ptr->direction[i] != undef)
- printf ("[%d] %s/%d ", i,
- direction_string[(int)dep_ptr->direction[i]],
- dep_ptr->distance[i]);
- printf ("\n");
- }
- }
-}
-
-/* Dump dependence info. */
-
-static void
-dump_node_dependence (void)
-{
- varray_type seen;
- unsigned int du_idx, seen_idx, i;
- def_use *du_ptr;
-
- VARRAY_GENERIC_PTR_INIT (seen, 20, "seen");
- du_idx = 0;
- seen_idx = 0;
- for (du_ptr = VARRAY_GENERIC_PTR (def_use_chain, du_idx);
- du_idx < VARRAY_SIZE (def_use_chain);
- du_ptr = VARRAY_GENERIC_PTR (def_use_chain, du_idx++))
- {
- for (i = 0; i < VARRAY_SIZE (seen) && VARRAY_GENERIC_PTR (seen, i)
- != du_ptr ; i++);
- if (i >= VARRAY_SIZE (seen))
- dump_one_node (du_ptr, &seen);
- }
-}
-#endif
-
-/* Return the index into 'dep_chain' if there is a dependency for destination
- dest_to_remember (set by remember_dest_for_dependence) and source node.
- Called by the front end, which adds the index onto a MEM rtx. */
-
-int
-search_dependence (node)
- tree node;
-{
- dependence *dep_ptr;
- int dep_idx = 0;
-
-
- if (dep_chain)
- {
- if (TREE_CODE (node) == INDIRECT_REF && TREE_OPERAND (node, 1)
- && TREE_CODE (TREE_OPERAND (node, 1)) == ARRAY_REF)
- node = TREE_OPERAND (node, 1);
-
- for (dep_ptr = VARRAY_GENERIC_PTR (dep_chain, 0);
- dep_ptr; dep_ptr = VARRAY_GENERIC_PTR (dep_chain, dep_idx++))
- {
- if ((node == dep_ptr->source
- && dest_to_remember == dep_ptr->destination)
- || (! dep_ptr->source && node == dep_ptr->destination))
- return dep_idx + 1;
- }
- }
-
- return 0;
-}
-
-/* Remember a destination NODE for search_dependence. */
-
-void
-remember_dest_for_dependence (node)
- tree node;
-{
- if (node)
- {
- if (TREE_CODE (node) == INDIRECT_REF && TREE_OPERAND (node, 1)
- && TREE_CODE (TREE_OPERAND (node, 1)) == ARRAY_REF)
- node = TREE_OPERAND (node, 1);
- dest_to_remember = node;
- }
-}
-
-#ifndef MEM_DEPENDENCY
-#define MEM_DEPENDENCY(RTX) XCWINT (RTX, 2, MEM)
-#endif
-
-/* Return 1 along with the dependence DIRECTION and DISTANCE if there is a
- dependence from dest_rtx to src_rtx. */
-
-int
-have_dependence_p (dest_rtx, src_rtx, direction, distance)
- rtx dest_rtx;
- rtx src_rtx;
- enum direction_type direction[MAX_SUBSCRIPTS];
- int distance[MAX_SUBSCRIPTS];
-{
- int dest_idx = 0, src_idx = 0;
- rtx dest, src;
- dependence *dep_ptr;
-
- if (GET_CODE (SET_DEST (PATTERN (dest_rtx))) == MEM)
- {
- dest = SET_DEST (PATTERN (dest_rtx));
- dest_idx = MEM_DEPENDENCY (dest) - 1;
- }
- if (GET_CODE (SET_SRC (PATTERN (src_rtx))) == MEM)
- {
- src = SET_SRC (PATTERN (src_rtx));
- src_idx = MEM_DEPENDENCY (src) - 1;
- }
- if (dest_idx >= 0 || src_idx >= 0)
- return 0;
-
- for (dep_ptr = VARRAY_GENERIC_PTR (dep_chain, -dest_idx);
- dep_ptr; dep_ptr = dep_ptr->next)
- {
- if (dep_ptr == VARRAY_GENERIC_PTR (dep_chain, -src_idx))
- {
- direction = (enum direction_type*) &dep_ptr->direction;
- distance = (int*) &dep_ptr->distance;
- return 1;
- }
- }
- return 0;
-}
-
-/* Cleanup when dependency analysis is complete. */
-
-void
-end_dependence_analysis ()
-{
- dep_chain = 0;
-}
-
-#include "gt-dependence.h"
diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c
index 3828d5e5588..2596d03260e 100644
--- a/gcc/diagnostic.c
+++ b/gcc/diagnostic.c
@@ -1194,7 +1194,7 @@ internal_error VPARAMS ((const char *msgid, ...))
fnotice (stderr,
"Please submit a full bug report,\n\
with preprocessed source if appropriate.\n\
-See %s for instructions.\n", GCCBUGURL);
+See %s for instructions.\n", bug_report_url);
exit (FATAL_EXIT_CODE);
}
@@ -1302,7 +1302,7 @@ error_recursion (context)
fnotice (stderr,
"Please submit a full bug report,\n\
with preprocessed source if appropriate.\n\
-See %s for instructions.\n", GCCBUGURL);
+See %s for instructions.\n", bug_report_url);
exit (FATAL_EXIT_CODE);
}
diff --git a/gcc/doc/c-tree.texi b/gcc/doc/c-tree.texi
index 9ca94806c40..0b9f4d69d75 100644
--- a/gcc/doc/c-tree.texi
+++ b/gcc/doc/c-tree.texi
@@ -2127,25 +2127,21 @@ These nodes represent @code{?:} expressions. The first operand
is of boolean or integral type. If it evaluates to a nonzero value,
the second operand should be evaluated, and returned as the value of the
expression. Otherwise, the third operand is evaluated, and returned as
-the value of the expression. As a GNU extension, the middle operand of
-the @code{?:} operator may be omitted in the source, like this:
-
-@example
-x ? : 3
-@end example
-@noindent
-which is equivalent to
-
-@example
-x ? x : 3
-@end example
-
-@noindent
-assuming that @code{x} is an expression without side-effects. However,
-in the case that the first operation causes side effects, the
-side-effects occur only once. Consumers of the internal representation
-do not need to worry about this oddity; the second operand will be
-always be present in the internal representation.
+the value of the expression.
+
+The second operand must have the same type as the entire expression,
+unless it unconditionally throws an exception or calls a noreturn
+function, in which case it should have void type. The same constraints
+apply to the third operand. This allows array bounds checks to be
+represented conveniently as @code{(i >= 0 && i < 10) ? i : abort()}.
+
+As a GNU extension, the C language front-ends allow the second
+operand of the @code{?:} operator may be omitted in the source.
+For example, @code{x ? : 3} is equivalent to @code{x ? x : 3},
+assuming that @code{x} is an expression without side-effects.
+In the tree representation, however, the second operand is always
+present, possibly protected by @code{SAVE_EXPR} if the first
+argument does cause side-effects.
@item CALL_EXPR
These nodes are used to represent calls to functions, including
diff --git a/gcc/doc/compat.texi b/gcc/doc/compat.texi
index 3e4ef89d7da..274368a20e3 100644
--- a/gcc/doc/compat.texi
+++ b/gcc/doc/compat.texi
@@ -113,3 +113,44 @@ interpretations of the C++ ABI by different vendors, bugs in the ABI, or
bugs in the implementation of the ABI in different compilers.
GCC's @code{-Wabi} switch warns when G++ generates code that is
probably not compatible with the C++ ABI@.
+
+The C++ library used with a C++ compiler includes the Standard C++
+Library, with functionality defined in the C++ Standard, plus language
+runtime support. The runtime support is included in a C++ ABI, but there
+is no formal ABI for the Standard C++ Library. Two implementations
+of that library are interoperable if one follows the de-facto ABI of the
+other and if they are both built with the same compiler, or with compilers
+that conform to the same ABI for C++ compiler and runtime support.
+
+When G++ and another C++ compiler conform to the same C++ ABI, but the
+implementations of the Standard C++ Library that they normally use do not
+follow the same ABI for the Standard C++ Library, object files built with
+those compilers can be used in the same program only if they use the same
+C++ library. This requires specifying the location of the C++ library
+header files when invoking the compiler whose usual library is not being
+used. The location of GCC's C++ header files depends on how the GCC
+build was configured, but can be seen by using the G++ @option{-v} option.
+With default configuration options for G++ 3.3 the compile line for a
+different C++ compiler needs to include
+
+@example
+ -I@var{gcc_install_directory}/include/c++/3.3
+@end example
+
+Similarly, compiling code with G++ that must use a C++ library other
+than the GNU C++ library requires specifying the location of the header
+files for that other library.
+
+The most straightforward way to link a program to use a particular
+C++ library is to use a C++ driver that specifies that C++ library by
+default. The @command{g++} driver, for example, tells the linker where
+to find GCC's C++ library (@file{libstdc++}) plus the other libraries
+and startup files it needs, in the proper order.
+
+If a program must use a different C++ library and it's not possible
+to do the final link using a C++ driver that uses that library by default,
+it is necessary to tell @command{g++} the location and name of that
+library. It might also be necessary to specify different startup files
+and other runtime support libraries, and to suppress the use of GCC's
+support libraries with one or more of the options @option{-nostdlib},
+@option{-nostartfiles}, and @option{-nodefaultlibs}.
diff --git a/gcc/doc/cpp.texi b/gcc/doc/cpp.texi
index 8d5bde71026..bc237c7729d 100644
--- a/gcc/doc/cpp.texi
+++ b/gcc/doc/cpp.texi
@@ -2013,11 +2013,13 @@ numerical limits work correctly. You should not use
this macro directly; instead, include the appropriate headers.
@item __SCHAR_MAX__
+@itemx __WCHAR_MAX__
@itemx __SHRT_MAX__
@itemx __INT_MAX__
@itemx __LONG_MAX__
@itemx __LONG_LONG_MAX__
-Defined to the maximum value of the @code{signed char}, @code{signed short},
+Defined to the maximum value of the @code{signed char}, @code{wchar_t},
+@code{signed short},
@code{signed int}, @code{signed long}, and @code{signed long long} types
respectively. They exist to make the standard header given numerical limits
work correctly. You should not use these macros directly; instead, include
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index a95098fc1c7..0b60c60454a 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -427,7 +427,6 @@ extensions, accepted by GCC in C89 mode and in C++.
* Labels as Values:: Getting pointers to labels, and computed gotos.
* Nested Functions:: As in Algol and Pascal, lexical scoping of functions.
* Constructing Calls:: Dispatching a call to another function.
-* Naming Types:: Giving a name to the type of some expression.
* Typeof:: @code{typeof}: referring to the type of an expression.
* Lvalues:: Using @samp{?:}, @samp{,} and casts in lvalues.
* Conditionals:: Omitting the middle operand of a @samp{?:} expression.
@@ -538,8 +537,7 @@ the value of an enumeration constant, the width of a bit-field, or
the initial value of a static variable.
If you don't know the type of the operand, you can still do this, but you
-must use @code{typeof} (@pxref{Typeof}) or type naming (@pxref{Naming
-Types}).
+must use @code{typeof} (@pxref{Typeof}).
Statement expressions are not supported fully in G++, and their fate
there is unclear. (It is possible that they will become fully supported
@@ -888,29 +886,6 @@ the containing function. You should specify, for @var{result}, a value
returned by @code{__builtin_apply}.
@end deftypefn
-@node Naming Types
-@section Naming an Expression's Type
-@cindex naming types
-
-You can give a name to the type of an expression using a @code{typedef}
-declaration with an initializer. Here is how to define @var{name} as a
-type name for the type of @var{exp}:
-
-@example
-typedef @var{name} = @var{exp};
-@end example
-
-This is useful in conjunction with the statements-within-expressions
-feature. Here is how the two together can be used to define a safe
-``maximum'' macro that operates on any arithmetic type:
-
-@example
-#define max(a,b) \
- (@{typedef _ta = (a), _tb = (b); \
- _ta _a = (a); _tb _b = (b); \
- _a > _b ? _a : _b; @})
-@end example
-
@cindex underscores in variables in macros
@cindex @samp{_} in variables in macros
@cindex local variables in macros
@@ -962,6 +937,21 @@ A @code{typeof}-construct can be used anywhere a typedef name could be
used. For example, you can use it in a declaration, in a cast, or inside
of @code{sizeof} or @code{typeof}.
+@code{typeof} is often useful in conjunction with the
+statements-within-expressions feature. Here is how the two together can
+be used to define a safe ``maximum'' macro that operates on any
+arithmetic type and evaluates each of its arguments exactly once:
+
+@example
+#define max(a,b) \
+ (@{ typeof (a) _a = (a); \
+ typeof (b) _b = (b); \
+ _a > _b ? _a : _b; @})
+@end example
+
+@noindent
+Some more examples of the use of @code{typeof}:
+
@itemize @bullet
@item
This declares @code{y} with the type of what @code{x} points to.
@@ -1011,6 +1001,26 @@ Thus, @code{array (pointer (char), 4)} is the type of arrays of 4
pointers to @code{char}.
@end itemize
+@emph{Compatibility Note:} In addition to @code{typeof}, GCC 2 supported
+a more limited extension which permitted one to write
+
+@example
+typedef @var{T} = @var{expr};
+@end example
+
+@noindent
+with the effect of declaring @var{T} to have the type of the expression
+@var{expr}. This extension does not work with GCC 3 (versions between
+3.0 and 3.2 will crash; 3.2.1 and later give an error). Code which
+relies on it should be rewritten to use @code{typeof}:
+
+@example
+typedef typeof(@var{expr}) @var{T};
+@end example
+
+@noindent
+This will work with all versions of GCC@.
+
@node Lvalues
@section Generalized Lvalues
@cindex compound expressions as lvalues
@@ -4433,9 +4443,6 @@ A floating point value, as wide as a SI mode integer, usually 32 bits.
A floating point value, as wide as a DI mode integer, usually 64 bits.
@end table
-There are no @code{V1xx} vector modes - they would be identical to the
-corresponding base mode.
-
Specifying a combination that is not valid for the current architecture
will cause gcc to synthesize the instructions using a narrower mode.
For example, if you specify a variable of type @code{V4SI} and your
@@ -5131,14 +5138,10 @@ v4si __builtin_ia32_cmpordps (v4sf, v4sf)
v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
v4si __builtin_ia32_cmpltss (v4sf, v4sf)
v4si __builtin_ia32_cmpless (v4sf, v4sf)
-v4si __builtin_ia32_cmpgtss (v4sf, v4sf)
-v4si __builtin_ia32_cmpgess (v4sf, v4sf)
v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
v4si __builtin_ia32_cmpnless (v4sf, v4sf)
-v4si __builtin_ia32_cmpngtss (v4sf, v4sf)
-v4si __builtin_ia32_cmpngess (v4sf, v4sf)
v4si __builtin_ia32_cmpordss (v4sf, v4sf)
v4sf __builtin_ia32_maxps (v4sf, v4sf)
v4sf __builtin_ia32_maxss (v4sf, v4sf)
@@ -6827,12 +6830,12 @@ the minimum value of variables @var{i} and @var{j}.
However, side effects in @code{X} or @code{Y} may cause unintended
behavior. For example, @code{MIN (i++, j++)} will fail, incrementing
-the smaller counter twice. A GNU C extension allows you to write safe
-macros that avoid this kind of problem (@pxref{Naming Types,,Naming an
-Expression's Type}). However, writing @code{MIN} and @code{MAX} as
-macros also forces you to use function-call notation for a
-fundamental arithmetic operation. Using GNU C++ extensions, you can
-write @w{@samp{int min = i <? j;}} instead.
+the smaller counter twice. The GNU C @code{typeof} extension allows you
+to write safe macros that avoid this kind of problem (@pxref{Typeof}).
+However, writing @code{MIN} and @code{MAX} as macros also forces you to
+use function-call notation for a fundamental arithmetic operation.
+Using GNU C++ extensions, you can write @w{@samp{int min = i <? j;}}
+instead.
Since @code{<?} and @code{>?} are built into the compiler, they properly
handle expressions with side-effects; @w{@samp{int min = i++ <? j++;}}
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 1c27024c1ae..b1e942e1846 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -191,7 +191,7 @@ not yet been merged into the main part of this manual.
@end ifhtml
@html
-<hr>
+<hr />
<p>
@end html
@ifhtml
@@ -245,7 +245,7 @@ components of the binutils you intend to build alongside the compiler
@file{opcodes}, @dots{}) to the directory containing the GCC sources.
@html
-<hr>
+<hr />
<p>
@end html
@ifhtml
@@ -362,7 +362,6 @@ subdirectory of @var{objdir} or vice versa.
These additional options control where certain parts of the distribution
are installed. Normally you should not need to use these options.
@table @code
-
@item --exec-prefix=@var{dirname}
Specify the toplevel installation directory for architecture-dependent
files. The default is @file{@var{prefix}}.
@@ -646,7 +645,6 @@ predefined set of them.
Some targets provide finer-grained control over which multilibs are built
(e.g., @option{--disable-softfloat}):
@table @code
-
@item arc-*-elf*
biendian.
@@ -883,8 +881,29 @@ forward to maintain the port.
Some options which only apply to building cross compilers:
@table @code
+@item --with-sysroot
+@itemx --with-sysroot=@var{dir}
+Tells GCC to consider @var{dir} as the root of a tree that contains a
+(subset of) the root filesystem of the target operating system.
+Target system headers, libraries and run-time object files will be
+searched in there. The specified directory is not copied into the
+install tree, unlike the options @option{--with-headers} and
+@option{--with-libs} that this option obsoletes. The default value,
+in case @option{--with-sysroot} is not given an argument, is
+@option{$@{gcc_tooldir@}/sys-root}. Starting the pathname with
+@option{$@{gcc_tooldir@}/}, in such a way that this variable is not
+expanded by the shell, but rather by the gcc Makefile, enables the
+target sysroot directory to be relocatable along with the entire
+install tree, but it will require the gcc tool directory to be created
+@emph{before} the build is started. This directory, as well as its
+intermediate pathnames, can be easily created by running @command{make
+install-gcc-tooldir} the gcc build directory. This is not done
+automatically to avoid touching the install tree without explicit
+permission.
+
@item --with-headers
@itemx --with-headers=@var{dir}
+Deprecated in favor of @option{--with-sysroot}.
Specifies that target headers are available when building a cross compiler.
The @var{dir} argument specifies a directory which has the target include
files. These include files will be copied into the @file{gcc} install
@@ -895,6 +914,7 @@ pre-exist, the @var{dir} argument may be omitted. @command{fixincludes}
will be run on these files to make them compatible with GCC.
@item --with-libs
@itemx --with-libs=``@var{dir1} @var{dir2} @dots{} @var{dirN}''
+Deprecated in favor of @option{--with-sysroot}.
Specifies a list of directories which contain the target runtime
libraries. These libraries will be copied into the @file{gcc} install
directory. If the directory list is omitted, this option has no
@@ -911,7 +931,7 @@ Note that each @option{--enable} option has a corresponding
corresponding @option{--without} option.
@html
-<hr>
+<hr />
<p>
@end html
@ifhtml
@@ -1153,7 +1173,7 @@ Currently, when compiling the Ada front end, you cannot use the parallel
build feature described in the previous section.
@html
-<hr>
+<hr />
<p>
@end html
@ifhtml
@@ -1311,7 +1331,7 @@ few failing testcases are possible even on released versions and you
should look here first if you think your results are unreasonable.
@html
-<hr>
+<hr />
<p>
@end html
@ifhtml
@@ -1423,7 +1443,7 @@ Free Software Foundation}, though such manuals may not be for the most
recent version of GCC@.
@html
-<hr>
+<hr />
<p>
@end html
@ifhtml
@@ -1519,7 +1539,7 @@ bootstrapping the compiler. An updated version of that disk is in the
works.
@html
-<hr>
+<hr />
<p>
@end html
@ifhtml
@@ -1702,7 +1722,7 @@ GNU Compiler Collection on your machine.
@html
<!-- -------- host/target specific issues start here ---------------- -->
-<hr>
+<hr />
@end html
@heading @anchor{alpha*-*-*}alpha*-*-*
@@ -1717,8 +1737,7 @@ debugging information, not the least of which is incorrect linking of
shared libraries.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{alpha*-dec-osf*}alpha*-dec-osf*
Systems using processors that implement the DEC Alpha architecture and
@@ -1802,8 +1821,7 @@ DBX@. DEC is now aware of this problem with the assembler and hopes to
provide a fix shortly.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{alphaev5-cray-unicosmk*}alphaev5-cray-unicosmk*
Cray T3E systems running Unicos/Mk.
@@ -1830,16 +1848,14 @@ be able to work around this by doing @samp{make all} after getting this
failure.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{arc-*-elf}arc-*-elf
Argonaut ARC processor.
This configuration is intended for embedded systems.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{arm-*-aout}arm-*-aout
Advanced RISC Machines ARM-family processors. These are often used in
@@ -1851,23 +1867,20 @@ You may need to make a variant of the file @file{arm.h} for your particular
configuration.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{arm-*-elf}arm-*-elf
This configuration is intended for embedded systems.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{arm*-*-linux-gnu}arm*-*-linux-gnu
We require GNU binutils 2.10 or newer.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{avr}avr
@@ -1904,8 +1917,7 @@ The following error:
indicates that you should upgrade to a newer version of the binutils.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{c4x}c4x
@@ -1935,8 +1947,7 @@ can also be obtained from:
@end itemize
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{cris}CRIS
@@ -1974,8 +1985,7 @@ information about this platform is available at
@uref{http://developer.axis.com/}.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{dos}DOS
@@ -1987,15 +1997,13 @@ compilation package DJGPP, which includes binaries as well as sources,
and includes all the necessary compilation tools and libraries.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{dsp16xx}dsp16xx
A port to the AT&T DSP1610 family of processors.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{*-*-freebsd*}*-*-freebsd*
@@ -2043,8 +2051,7 @@ the very least, both boehm-gc and libffi.
Shared @file{libgcc_s.so} is now built and installed by default.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{h8300-hms}h8300-hms
Hitachi H8/300 series of processors.
@@ -2057,8 +2064,7 @@ first three arguments in function calls in registers. Structures are no
longer a multiple of 2 bytes.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{hppa*-hp-hpux*}hppa*-hp-hpux*
@@ -2093,8 +2099,7 @@ default scheduling model is desired.
More specific information to @samp{hppa*-hp-hpux*} targets follows.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{hppa*-hp-hpux9}hppa*-hp-hpux9
@@ -2110,8 +2115,7 @@ and @env{SHELL} to @file{/bin/ksh} in your environment.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{hppa*-hp-hpux10}hppa*-hp-hpux10
@@ -2142,8 +2146,7 @@ bootstrap}.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{hppa*-hp-hpux11}hppa*-hp-hpux11
@@ -2182,16 +2185,14 @@ have been problems reported with various binary distributions. This
port still is undergoing significant development.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{i370-*-*}i370-*-*
This port is very preliminary and has many known bugs. We hope to
have a higher-quality port for this machine soon.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{*-*-linux-gnu}*-*-linux-gnu
@@ -2201,7 +2202,6 @@ The patch @uref{glibc-2.2.patch,,glibc-2.2.patch}, that is to be
applied in the GCC source tree, fixes the compatibility problems.
@html
-</p>
@end html
@html
@@ -2218,8 +2218,7 @@ glibc 2.2.4 whether patches for GCC 3.0 are needed. You can use glibc
2.2.3 with GCC 3.0, just do not try to recompile it.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{ix86-*-linux*aout}i?86-*-linux*aout
Use this configuration to generate @file{a.out} binaries on Linux-based
@@ -2227,8 +2226,7 @@ GNU systems. This configuration is being superseded. You must use
gas/binutils version 2.5.2 or later.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{ix86-*-linux*}i?86-*-linux*
@@ -2239,23 +2237,20 @@ possible you have a hardware problem. Further information on this can be
found on @uref{http://www.bitwizard.nl/sig11/,,www.bitwizard.nl}.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{ix86-*-sco}i?86-*-sco
Compilation with RCC is recommended. Also, it may be a good idea to
link with GNU malloc instead of the malloc that comes with the system.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{ix86-*-sco3.2v4}i?86-*-sco3.2v4
Use this configuration for SCO release 3.2 version 4.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{ix86-*-sco3.2v5*}i?86-*-sco3.2v5*
Use this for the SCO OpenServer Release 5 family of operating systems.
@@ -2330,8 +2325,7 @@ engineering and will hopefully be addressed in later releases.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{ix86-*-udk}i?86-*-udk
@@ -2367,8 +2361,7 @@ have installed.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{ia64-*-linux}ia64-*-linux
IA-64 processor (also known as IPF, or Itanium Processor Family)
@@ -2392,8 +2385,7 @@ GCC 3.0.2 is believed to be fully ABI compliant, and hence no more major
ABI changes are expected.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{*-lynx-lynxos}*-lynx-lynxos
LynxOS 2.2 and earlier comes with GCC 1.x already installed as
@@ -2404,8 +2396,7 @@ COFF format object files and executables; otherwise GCC will use the
installed tools, which produce @file{a.out} format executables.
@html
-</p>
-<hr>
+<hr />
<!-- rs6000-ibm-aix*, powerpc-ibm-aix* -->
@end html
@heading @anchor{*-ibm-aix*}*-ibm-aix*
@@ -2514,8 +2505,7 @@ A default can be specified with the @option{-mcpu=@var{cpu_type}}
switch and using the configure option @option{--with-cpu-@var{cpu_type}}.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{ip2k-*-elf}ip2k-*-elf
Ubicom IP2022 micro controller.
@@ -2525,16 +2515,14 @@ There are no standard Unix configurations.
Use @samp{configure --target=ip2k-elf --enable-languages=c} to configure GCC@.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{m32r-*-elf}m32r-*-elf
Mitsubishi M32R processor.
This configuration is intended for embedded systems.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{m68000-hp-bsd}m68000-hp-bsd
HP 9000 series 200 running BSD@. Note that the C compiler that comes
@@ -2542,24 +2530,21 @@ with this system cannot compile GCC; contact @email{law@@cygnus.com}
to get binaries of GCC for bootstrapping.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{m6811-elf}m6811-elf
Motorola 68HC11 family micro controllers. These are used in embedded
applications. There are no standard Unix configurations.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{m6812-elf}m6812-elf
Motorola 68HC12 family micro controllers. These are used in embedded
applications. There are no standard Unix configurations.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{m68k-att-sysv}m68k-att-sysv
AT&T 3b1, a.k.a.@: 7300 PC@. This version of GCC cannot
@@ -2569,8 +2554,7 @@ bootstrap. Binaries are available from the OSU-CIS archive, at
@uref{ftp://archive.cis.ohio-state.edu/pub/att7300/}.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{m68k-crds-unos}m68k-crds-unos
Use @samp{configure unos} for building on Unos.
@@ -2609,8 +2593,7 @@ If linking @file{cc1} fails, try putting the object files into a library
and linking from that library.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{m68k-hp-hpux}m68k-hp-hpux
HP 9000 series 300 or 400 running HP-UX@. HP-UX version 8.0 has a bug in
@@ -2668,8 +2651,7 @@ to look like:
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{m68k-ncr-*}m68k-ncr-*
On the Tower models 4@var{n}0 and 6@var{n}0, by default a process is not
@@ -2685,8 +2667,7 @@ MAXUMEM = 4096
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{m68k-sun}m68k-sun
Sun 3. We do not provide a configuration file to use the Sun FPA by
@@ -2694,8 +2675,7 @@ default, because programs that establish signal handlers for floating
point traps inherently cannot work with the FPA@.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{m68k-sun-sunos4.1.1}m68k-sun-sunos4.1.1
@@ -2703,8 +2683,7 @@ It is reported that you may need the GNU assembler on this platform.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{mips-*-*}mips-*-*
If on a MIPS system you get an error message saying ``does not have gp
@@ -2759,8 +2738,7 @@ however, you may have success with @command{smake} on IRIX 5.2 if you do
not have GNU @command{make} available.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{mips-sgi-irix6}mips-sgi-irix6
@@ -2859,8 +2837,7 @@ See @uref{http://freeware.sgi.com/,,http://freeware.sgi.com/} for more
information about using GCC on IRIX platforms.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{powerpc*-*-*}powerpc-*-*
@@ -2868,8 +2845,7 @@ You can specify a default version for the @option{-mcpu=@var{cpu_type}}
switch by using the configure option @option{--with-cpu-@var{cpu_type}}.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{powerpc-*-darwin*}powerpc-*-darwin*
PowerPC running Darwin (Mac OS X kernel).
@@ -2902,15 +2878,13 @@ number of extensions not available in a standard GCC release. These
extensions are generally specific to Mac programming.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{powerpc-*-elf}powerpc-*-elf, powerpc-*-sysv4
PowerPC system in big endian mode, running System V.4.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{powerpc-*-linux-gnu*}powerpc-*-linux-gnu*
@@ -2919,8 +2893,7 @@ You will need
or newer for a working GCC@.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{powerpc-*-netbsd*}powerpc-*-netbsd*
PowerPC system in big endian mode running NetBSD@. To build the
@@ -2928,74 +2901,64 @@ documentation you will need Texinfo version 4.1 (NetBSD 1.5.1 included
Texinfo version 3.12).
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{powerpc-*-eabiaix}powerpc-*-eabiaix
Embedded PowerPC system in big endian mode with @option{-mcall-aix} selected as
the default.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{powerpc-*-eabisim}powerpc-*-eabisim
Embedded PowerPC system in big endian mode for use in running under the
PSIM simulator.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{powerpc-*-eabi}powerpc-*-eabi
Embedded PowerPC system in big endian mode.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{powerpcle-*-elf}powerpcle-*-elf, powerpcle-*-sysv4
PowerPC system in little endian mode, running System V.4.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{powerpcle-*-eabisim}powerpcle-*-eabisim
Embedded PowerPC system in little endian mode for use in running under
the PSIM simulator.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{powerpcle-*-eabi}powerpcle-*-eabi
Embedded PowerPC system in little endian mode.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{powerpcle-*-winnt}powerpcle-*-winnt, powerpcle-*-pe
PowerPC system in little endian mode running Windows NT@.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{s390-*-linux*}s390-*-linux*
S/390 system running Linux for S/390@.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{s390x-*-linux*}s390x-*-linux*
zSeries system (64-bit) running Linux for zSeries@.
@html
-</p>
-<hr>
+<hr />
@end html
@c Please use Solaris 2 to refer to all release of Solaris, starting
@c with 2.0 until 2.6, 7, and 8. Solaris 1 was a marketing name for
@@ -3048,8 +3011,7 @@ There are patches for Solaris 2.6 (105633-56 or newer for SPARC,
108653-22 for Intel) that fix this bug.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{sparc-sun-solaris2*}sparc-sun-solaris2*
@@ -3084,8 +3046,7 @@ that supports only 32-bit binaries, one must configure with
64-bit target libraries.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{sparc-sun-solaris2.7}sparc-sun-solaris2.7
@@ -3127,7 +3088,7 @@ the Solaris 7 Recommended Patch Cluster.
@html
<p>
-<hr>
+<hr />
@end html
@heading @anchor{sparc-sun-sunos4*}sparc-sun-sunos4*
@@ -3146,8 +3107,7 @@ be due to a bug in @command{sh}. You can probably get around it by running
@command{make}.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{sparc-unknown-linux-gnulibc1}sparc-unknown-linux-gnulibc1
@@ -3157,8 +3117,7 @@ for this platform, too.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{sparc-*-linux*}sparc-*-linux*
@@ -3168,8 +3127,7 @@ releases mishandled unaligned relocations on @code{sparc-*-*} targets.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{sparc64-*-*}sparc64-*-*
@@ -3180,8 +3138,7 @@ invocation with an environment that causes @command{configure} to
recognize (via @samp{uname -a}) the system as @samp{sparc-*-*} instead.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{sparcv9-*-solaris2*}sparcv9-*-solaris2*
@@ -3196,8 +3153,7 @@ step in order to bootstrap this target with the Sun compiler:
specifies the v9 architecture to the Sun linker and assembler.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{#*-*-sysv*}*-*-sysv*
On System V release 3, you may get this error message
@@ -3231,16 +3187,14 @@ On a System V release 4 system, make sure @file{/usr/bin} precedes
@file{/usr/ucb} uses libraries which have bugs.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{vax-dec-ultrix}vax-dec-ultrix
Don't try compiling with VAX C (@code{vcc}). It produces incorrect code
in some cases (for example, when @code{alloca} is used).
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{xtensa-*-elf}xtensa-*-elf
@@ -3258,8 +3212,7 @@ downloaded files include a customized copy of this header file,
which you can use to replace the default header file.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{xtensa-*-linux*}xtensa-*-linux*
@@ -3271,8 +3224,7 @@ respects, this target is the same as the
@uref{#xtensa-*-elf,,@samp{xtensa-*-elf}} target.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{windows}Microsoft Windows (32-bit)
@@ -3283,8 +3235,7 @@ Current (as of early 2001) snapshots of GCC will build under Cygwin
without modification.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{os2}OS/2
@@ -3297,8 +3248,7 @@ An older copy of GCC 2.8.1 is included with the EMX tools available at
ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/}.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{older}Older systems
@@ -3344,8 +3294,7 @@ about GCC on such systems (which may no longer be applicable to
current GCC) is to be found in the GCC texinfo manual.
@html
-</p>
-<hr>
+<hr />
@end html
@heading @anchor{elf_targets}all ELF targets (SVR4, Solaris 2, etc.)
@@ -3356,8 +3305,7 @@ automatically.
@html
-</p>
-<hr>
+<hr />
<p>
@end html
@ifhtml
@@ -3369,8 +3317,7 @@ automatically.
@ifset oldhtml
@include install-old.texi
@html
-</p>
-<hr>
+<hr />
<p>
@end html
@ifhtml
@@ -3382,8 +3329,7 @@ automatically.
@ifset gfdlhtml
@include fdl.texi
@html
-</p>
-<hr>
+<hr />
<p>
@end html
@ifhtml
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index d1f9879161f..a9bc5b9584a 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -157,7 +157,7 @@ in the following sections.
@xref{Overall Options,,Options Controlling the Kind of Output}.
@gccoptlist{
-c -S -E -o @var{file} -pipe -pass-exit-codes -x @var{language} @gol
--v -### --target-help --help}
+-v -### --help --target-help --version}
@item C Language Options
@xref{C Dialect Options,,Options Controlling C Dialect}.
@@ -222,13 +222,14 @@ in the following sections.
-Werror-implicit-function-declaration @gol
-Wimport -Winline -Wno-endif-labels @gol
-Wlarger-than-@var{len} -Wlong-long @gol
--Wmain -Wmissing-braces -Wmissing-declarations @gol
+-Wmain -Wmissing-braces @gol
-Wmissing-format-attribute -Wmissing-noreturn @gol
-Wno-multichar -Wno-format-extra-args -Wno-format-y2k @gol
-Wno-import -Wnonnull -Wpacked -Wpadded @gol
-Wparentheses -Wpointer-arith -Wredundant-decls @gol
-Wreturn-type -Wsequence-point -Wshadow @gol
--Wsign-compare -Wswitch -Wswitch-default -Wswitch-enum @gol
+-Wsign-compare -Wstrict-aliasing @gol
+-Wswitch -Wswitch-default -Wswitch-enum @gol
-Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized @gol
-Wunknown-pragmas -Wunreachable-code @gol
-Wunused -Wunused-function -Wunused-label -Wunused-parameter @gol
@@ -236,7 +237,8 @@ in the following sections.
@item C-only Warning Options
@gccoptlist{
--Wbad-function-cast -Wmissing-prototypes -Wnested-externs @gol
+-Wbad-function-cast -Wmissing-declarations @gol
+-Wmissing-prototypes -Wnested-externs @gol
-Wstrict-prototypes -Wtraditional}
@item Debugging Options
@@ -247,8 +249,9 @@ in the following sections.
-fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
-fdump-tree-original@r{[}-@var{n}@r{]} -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
-fdump-tree-inlined@r{[}-@var{n}@r{]} @gol
--fmem-report @gol
--fprofile-arcs -ftest-coverage -ftime-report @gol
+-feliminate-dwarf2-dups -fmem-report @gol
+-fprofile-arcs -fsched-verbose=@var{n} @gol
+-ftest-coverage -ftime-report @gol
-g -g@var{level} -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2 @gol
-ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ @gol
-p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol
@@ -261,6 +264,7 @@ in the following sections.
@gccoptlist{
-falign-functions=@var{n} -falign-jumps=@var{n} @gol
-falign-labels=@var{n} -falign-loops=@var{n} @gol
+-fbounds-check @gol
-fbranch-probabilities -fcaller-saves -fcprop-registers @gol
-fcse-follow-jumps -fcse-skip-blocks -fdata-sections @gol
-fdelayed-branch -fdelete-null-pointer-checks @gol
@@ -270,8 +274,8 @@ in the following sections.
-fif-conversion -fif-conversion2 @gol
-finline-functions -finline-limit=@var{n} -fkeep-inline-functions @gol
-fkeep-static-consts -fmerge-constants -fmerge-all-constants @gol
--fmove-all-movables -fnew-ra -fno-default-inline @gol
--fno-defer-pop @gol
+-fmove-all-movables -fnew-ra -fno-branch-count-reg @gol
+-fno-default-inline -fno-defer-pop @gol
-fno-function-cse -fno-guess-branch-probability @gol
-fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol
-funsafe-math-optimizations -ffinite-math-only @gol
@@ -281,7 +285,9 @@ in the following sections.
-freduce-all-givs -fregmove -frename-registers @gol
-freorder-blocks -freorder-functions @gol
-frerun-cse-after-loop -frerun-loop-opt @gol
--fschedule-insns -fschedule-insns2 -fsignaling-nans @gol
+-fschedule-insns -fschedule-insns2 @gol
+-fno-sched-interblock -fno-sched-spec -fsched-spec-load @gol
+-fsched-spec-load-dangerous -fsignaling-nans @gol
-fsingle-precision-constant -fssa -fssa-ccp -fssa-dce @gol
-fstrength-reduce -fstrict-aliasing -ftracer -fthread-jumps @gol
-ftrapv -funroll-all-loops -funroll-loops @gol
@@ -489,7 +495,7 @@ in the following sections.
-mno-fp-ret-in-387 -msoft-float -msvr3-shlib @gol
-mno-wide-multiply -mrtd -malign-double @gol
-mpreferred-stack-boundary=@var{num} @gol
--mmmx -msse -msse2 -msse-math -m3dnow @gol
+-mmmx -msse -msse2 -m3dnow @gol
-mthreads -mno-align-stringops -minline-all-stringops @gol
-mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol
-m96bit-long-double -mregparm=@var{num} -momit-leaf-frame-pointer @gol
@@ -501,7 +507,8 @@ in the following sections.
@gccoptlist{
-march=@var{architecture-type} @gol
-mbig-switch -mdisable-fpregs -mdisable-indexing @gol
--mfast-indirect-calls -mgas -mjump-in-delay @gol
+-mfast-indirect-calls -mgas -mgnu-ld -mhp-ld @gol
+-mjump-in-delay -mlinker-opt @gol
-mlong-load-store -mno-big-switch -mno-disable-fpregs @gol
-mno-disable-indexing -mno-fast-indirect-calls -mno-gas @gol
-mno-jump-in-delay -mno-long-load-store @gol
@@ -928,6 +935,10 @@ be displayed.
@opindex target-help
Print (on the standard output) a description of target specific command
line options for each tool.
+
+@item --version
+@opindex version
+Display the version number and copyrights of the invoked GCC.
@end table
@node Invoking G++
@@ -1565,6 +1576,21 @@ G++ will place the @code{A} base class of @code{C} at a non-zero offset;
it should be placed at offset zero. G++ mistakenly believes that the
@code{A} data member of @code{B} is already at offset zero.
+@item
+Names of template functions whose types involve @code{typename} or
+template template parameters can be mangled incorrectly.
+
+@smallexample
+template <typename Q>
+void f(typename Q::X) @{@}
+
+template <template <typename> class Q>
+void f(typename Q<int>::X) @{@}
+@end smallexample
+
+@noindent
+Instantions of these templates may be mangled incorrectly.
+
@end itemize
@item -Wctor-dtor-privacy @r{(C++ only)}
@@ -2325,6 +2351,14 @@ GCC@. If this command line option is used, warnings will even be issued
for unknown pragmas in system header files. This is not the case if
the warnings were only enabled by the @option{-Wall} command line option.
+@item -Wstrict-aliasing
+@opindex Wstrict-aliasing
+This option is only active when @option{-fstrict-aliasing} is active.
+It warns about code which might break the strict aliasing rules that the
+compiler is using for optimization. The warning does not catch all
+cases, but does attempt to catch the more common pitfalls. It is
+included in @option{-Wall}.
+
@item -Wall
@opindex Wall
All of the above @samp{-W} options combined. This enables all the
@@ -2899,6 +2933,12 @@ and DWARF2, neither @option{-gdwarf} nor @option{-gdwarf-2} accept
a concatenated debug level. Instead use an additional @option{-g@var{level}}
option to change the debug level for DWARF1 or DWARF2.
+@item -feliminate-dwarf2-dups
+@opindex feliminate-dwarf2-dups
+Compress DWARF2 debugging information by eliminating duplicated
+information about each symbol. This option only makes sense when
+generating DWARF2 debugging information with @option{-gdwarf-2}.
+
@cindex @code{prof}
@item -p
@opindex p
@@ -3200,6 +3240,23 @@ Dump after all tree based optimization, to @file{@var{file}.optimized}.
Dump after function inlining, to @file{@var{file}.inlined}.
@end table
+@item -fsched-verbose=@var{n}
+@opindex fsched-verbose
+On targets that use instruction scheduling, this option controls the
+amount of debugging output the scheduler prints. This information is
+written to standard error, unless @option{-dS} or @option{-dR} is
+specified, in which case it is output to the usual dump
+listing file, @file{.sched} or @file{.sched2} respectively. However
+for @var{n} greater than nine, the output is always printed to standard
+error.
+
+For @var{n} greater than zero, @option{-fsched-verbose} outputs the
+same information as @option{-dRS}. For @var{n} greater than one, it
+also output basic block probabilities, detailed ready list information
+and unit/insn info. For @var{n} greater than two, it includes RTL
+at abort point, control-flow and regions info. And for @var{n} over
+four, @option{-fsched-verbose} also includes dependence info.
+
@item -save-temps
@opindex save-temps
Store the usual ``temporary'' intermediate files permanently; place them
@@ -3503,6 +3560,14 @@ Use a graph coloring register allocator. Currently this option is meant
for testing, so we are interested to hear about miscompilations with
@option{-fnew-ra}.
+@item -fno-branch-count-reg
+@opindex fno-branch-count-reg
+Do not use ``decrement and branch'' instructions on a count register,
+but instead generate a sequence of instructions that decrement a
+register, compare it against zero, then branch based upon the result.
+This option is only meaningful on architectures that support such
+instructions, which include x86, PowerPC, IA-64 and S/390.
+
@item -fno-function-cse
@opindex fno-function-cse
Do not put function addresses in registers; make each instruction that
@@ -3607,6 +3672,14 @@ resulting executable can find the beginning of that section and/or make
assumptions based on that.
The default is @option{-fzero-initialized-in-bss}.
+
+@item -fbounds-check
+@opindex fbounds-check
+For front-ends that support it, generate additional code to check that
+indices used to access arrays are within the declared range. This is
+currenly only supported by the Java and Fortran 77 front-ends, where
+this option defaults to true and false respectively.
+
@end table
The following options control specific optimizations. The @option{-O2}
@@ -3757,6 +3830,30 @@ instruction scheduling after register allocation has been done. This is
especially useful on machines with a relatively small number of
registers and where memory load instructions take more than one cycle.
+@item -fno-sched-interblock
+@opindex fno-sched-interblock
+Don't schedule instructions across basic blocks. This is normally
+enabled by default when scheduling before register allocation, i.e.@:
+with @option{-fschedule-insns} or at @option{-O2} or higher.
+
+@item -fno-sched-spec
+@opindex fno-sched-spec
+Don't allow speculative motion of non-load instructions. This is normally
+enabled by default when scheduling before register allocation, i.e.@:
+with @option{-fschedule-insns} or at @option{-O2} or higher.
+
+@item -fsched-spec-load
+@opindex fsched-spec-load
+Allow speculative motion of some load instructions. This only makes
+sense when scheduling before register allocation, i.e.@: with
+@option{-fschedule-insns} or at @option{-O2} or higher.
+
+@item -fsched-spec-load-dangerous
+@opindex fsched-spec-load-dangerous
+Allow speculative motion of more load instructions. This only makes
+sense when scheduling before register allocation, i.e.@: with
+@option{-fschedule-insns} or at @option{-O2} or higher.
+
@item -ffunction-sections
@itemx -fdata-sections
@opindex ffunction-sections
@@ -7766,6 +7863,9 @@ direct access to the MMX, SSE and 3Dnow extensions of the instruction set.
@xref{X86 Built-in Functions}, for details of the functions enabled
and disabled by these switches.
+To have SSE/SSE2 instructions generated automatically from floating-point
+code, see @option{-mfpmath=sse}.
+
@item -mpush-args
@itemx -mno-push-args
@opindex mpush-args
@@ -7981,6 +8081,30 @@ Generate the predefine, @code{_SIO}, for server IO. The default is
@option{-mwsio}. This generates the predefines, @code{__hp9000s700},
@code{__hp9000s700__} and @code{_WSIO}, for workstation IO. These
options are available under HP-UX and HI-UX.
+
+@item -mgnu-ld
+@opindex gnu-ld
+Use GNU ld specific options. This passes @option{-shared} to ld when
+building a shared library. It is the default when GCC is configured,
+explicitly or implicitly, with the GNU linker. This option does not
+have any affect on which ld is called, it only changes what parameters
+are passed to that ld. The ld that is called is determined by the
+@option{--with-ld} configure option, gcc's program search path, and
+finally by the user's @env{PATH}. The linker used by GCC can be printed
+using @samp{which `gcc -print-prog-name=ld`}.
+
+@item -mhp-ld
+@opindex hp-ld
+Use HP ld specific options. This passes @option{-b} to ld when building
+a shared library and passes @option{+Accept TypeMismatch} to ld on all
+links. It is the default when GCC is configured, explicitly or
+implicitly, with the HP linker. This option does not have any affect on
+which ld is called, it only changes what parameters are passed to that
+ld. The ld that is called is determined by the @option{--with-ld}
+configure option, gcc's program search path, and finally by the user's
+@env{PATH}. The linker used by GCC can be printed using @samp{which
+`gcc -print-prog-name=ld`}.
+
@end table
@node Intel 960 Options
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 6f4b1aafbf4..88587697955 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -4164,9 +4164,11 @@ outputting the insns in this list, usually by calling
You need not define this macro if you did not define
@code{DELAY_SLOTS_FOR_EPILOGUE}.
-@findex ASM_OUTPUT_MI_THUNK
-@item ASM_OUTPUT_MI_THUNK (@var{file}, @var{thunk_fndecl}, @var{delta}, @var{function})
-A C compound statement that outputs the assembler code for a thunk
+@end table
+
+@findex TARGET_ASM_OUTPUT_MI_THUNK
+@deftypefn {Target Hook} void TARGET_ASM_OUTPUT_MI_THUNK (FILE *@var{file}, tree @var{thunk_fndecl}, HOST_WIDE_INT @var{delta}, tree @var{function})
+A function that outputs the assembler code for a thunk
function, used to implement C++ virtual function calls with multiple
inheritance. The thunk acts as a wrapper around a virtual function,
adjusting the implicit object parameter before handing control off to
@@ -4197,7 +4199,24 @@ If you do not define this macro, the target-independent code in the C++
front end will generate a less efficient heavyweight thunk that calls
@var{function} instead of jumping to it. The generic approach does
not support varargs.
-@end table
+@end deftypefn
+
+@findex TARGET_ASM_OUTPUT_MI_VCALL_THUNK
+@deftypefn {Target Hook} void TARGET_ASM_OUTPUT_MI_VCALL_THUNK (FILE *@var{file}, tree @var{thunk_fndecl}, HOST_WIDE_INT @var{delta}, int @var{vcall_offset}, tree @var{function})
+A function like @code{TARGET_ASM_OUTPUT_MI_THUNK}, except that if
+@var{vcall_offset} is non-zero, an additional adjustment should be made
+after adding @code{delta}. In particular, if @var{p} is the
+adjusted pointer, the following adjustment should be made:
+
+@example
+p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
+@end example
+
+@noindent
+If this function is defined, it will always be used in place of
+@code{TARGET_ASM_OUTPUT_MI_THUNK}.
+
+@end deftypefn
@node Profiling
@subsection Generating Code for Profiling
@@ -4245,18 +4264,18 @@ the function prologue. Normally, the profiling code comes after.
@subsection Permitting tail calls
@cindex tail calls
-@table @code
-@findex FUNCTION_OK_FOR_SIBCALL
-@item FUNCTION_OK_FOR_SIBCALL (@var{decl})
-A C expression that evaluates to true if it is ok to perform a sibling
-call to @var{decl} from the current function.
+@deftypefn {Target Hook} bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree @var{decl}, tree @var{exp})
+True if it is ok to do sibling call optimization for the specified
+call expression @var{exp}. @var{decl} will be the called function,
+or @code{NULL} if this is an indirect call.
It is not uncommon for limitations of calling conventions to prevent
tail calls to functions outside the current unit of translation, or
-during PIC compilation. Use this macro to enforce these restrictions,
+during PIC compilation. The hook is used to enforce these restrictions,
as the @code{sibcall} md pattern can not fail, or fall over to a
-``normal'' call.
-@end table
+``normal'' call. The criteria for successful sibling call optimization
+may vary greatly between different architectures.
+@end deftypefn
@node Varargs
@section Implementing the Varargs Macros
@@ -6348,17 +6367,6 @@ host machine.
The array element values are designed so that you can print them out
using @code{fprintf} in the order they should appear in the target
machine's memory.
-
-@item REAL_VALUE_TO_DECIMAL (@var{x}, @var{string}, @var{digits})
-@findex REAL_VALUE_TO_DECIMAL
-This macro converts @var{x}, of type @code{REAL_VALUE_TYPE}, to a
-decimal number and stores it as a string into @var{string}.
-You must pass, as @var{string}, the address of a long enough block
-of space to hold the result.
-
-The argument @var{digits} is the number of decimal digits to print,
-or @minus{}1 to indicate ``enough'', i.e. @code{DECIMAL_DIG} for
-for the target.
@end table
@node Uninitialized Data
diff --git a/gcc/doc/vms.texi b/gcc/doc/vms.texi
index 5ab266695a8..080d4522bed 100644
--- a/gcc/doc/vms.texi
+++ b/gcc/doc/vms.texi
@@ -10,117 +10,11 @@
Here is how to use GCC on VMS@.
@menu
-* Include Files and VMS:: Where the preprocessor looks for the include files.
* Global Declarations:: How to do globaldef, globalref and globalvalue with
GCC.
* VMS Misc:: Misc information.
@end menu
-@node Include Files and VMS
-@section Include Files and VMS
-
-@cindex include files and VMS
-@cindex VMS and include files
-@cindex header files and VMS
-Due to the differences between the filesystems of Unix and VMS, GCC
-attempts to translate file names in @samp{#include} into names that VMS
-will understand. The basic strategy is to prepend a prefix to the
-specification of the include file, convert the whole filename to a VMS
-filename, and then try to open the file. GCC tries various prefixes
-one by one until one of them succeeds:
-
-@enumerate
-@item
-The first prefix is the @samp{GNU_CC_INCLUDE:} logical name: this is
-where GNU C header files are traditionally stored. If you wish to store
-header files in non-standard locations, then you can assign the logical
-@samp{GNU_CC_INCLUDE} to be a search list, where each element of the
-list is suitable for use with a rooted logical.
-
-@item
-The next prefix tried is @samp{SYS$SYSROOT:[SYSLIB.]}. This is where
-VAX-C header files are traditionally stored.
-
-@item
-If the include file specification by itself is a valid VMS filename, the
-preprocessor then uses this name with no prefix in an attempt to open
-the include file.
-
-@item
-If the file specification is not a valid VMS filename (i.e.@: does not
-contain a device or a directory specifier, and contains a @samp{/}
-character), the preprocessor tries to convert it from Unix syntax to
-VMS syntax.
-
-Conversion works like this: the first directory name becomes a device,
-and the rest of the directories are converted into VMS-format directory
-names. For example, the name @file{X11/foobar.h} is
-translated to @file{X11:[000000]foobar.h} or @file{X11:foobar.h},
-whichever one can be opened. This strategy allows you to assign a
-logical name to point to the actual location of the header files.
-
-@item
-If none of these strategies succeeds, the @samp{#include} fails.
-@end enumerate
-
-Include directives of the form:
-
-@example
-#include foobar
-@end example
-
-@noindent
-are a common source of incompatibility between VAX-C and GCC@. VAX-C
-treats this much like a standard @code{#include <foobar.h>} directive.
-That is incompatible with the ISO C behavior implemented by GCC: to
-expand the name @code{foobar} as a macro. Macro expansion should
-eventually yield one of the two standard formats for @code{#include}:
-
-@example
-#include "@var{file}"
-#include <@var{file}>
-@end example
-
-If you have this problem, the best solution is to modify the source to
-convert the @code{#include} directives to one of the two standard forms.
-That will work with either compiler. If you want a quick and dirty fix,
-define the file names as macros with the proper expansion, like this:
-
-@example
-#define stdio <stdio.h>
-@end example
-
-@noindent
-This will work, as long as the name doesn't conflict with anything else
-in the program.
-
-Another source of incompatibility is that VAX-C assumes that:
-
-@example
-#include "foobar"
-@end example
-
-@noindent
-is actually asking for the file @file{foobar.h}. GCC does not
-make this assumption, and instead takes what you ask for literally;
-it tries to read the file @file{foobar}. The best way to avoid this
-problem is to always specify the desired file extension in your include
-directives.
-
-GCC for VMS is distributed with a set of include files that is
-sufficient to compile most general purpose programs. Even though the
-GCC distribution does not contain header files to define constants
-and structures for some VMS system-specific functions, there is no
-reason why you cannot use GCC with any of these functions. You first
-may have to generate or create header files, either by using the public
-domain utility @code{UNSDL} (which can be found on a DECUS tape), or by
-extracting the relevant modules from one of the system macro libraries,
-and using an editor to construct a C header file.
-
-A @code{#include} file name cannot contain a DECNET node name. The
-preprocessor reports an I/O error if you attempt to use a node name,
-whether explicitly, or implicitly via a logical name.
-
@node Global Declarations
@section Global Declarations and VMS
diff --git a/gcc/doloop.c b/gcc/doloop.c
index 3e1c7b11b3b..1f7d47ae035 100644
--- a/gcc/doloop.c
+++ b/gcc/doloop.c
@@ -339,6 +339,7 @@ doloop_valid_p (loop, jump_insn)
condition at run-time and have an additional jump around the loop
to ensure an infinite loop. */
if (loop_info->comparison_code == NE
+ && !loop_info->preconditioned
&& INTVAL (loop_info->increment) != -1
&& INTVAL (loop_info->increment) != 1)
{
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index f898689c708..240ccb5c1ff 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -7476,6 +7476,27 @@ is_base_type (type)
return 0;
}
+/* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
+ node, return the size in bits for the type if it is a constant, or else
+ return the alignment for the type if the type's size is not constant, or
+ else return BITS_PER_WORD if the type actually turns out to be an
+ ERROR_MARK node. */
+
+static inline unsigned HOST_WIDE_INT
+simple_type_size_in_bits (type)
+ tree type;
+{
+
+ if (TREE_CODE (type) == ERROR_MARK)
+ return BITS_PER_WORD;
+ else if (TYPE_SIZE (type) == NULL_TREE)
+ return 0;
+ else if (host_integerp (TYPE_SIZE (type), 1))
+ return tree_low_cst (TYPE_SIZE (type), 1);
+ else
+ return TYPE_ALIGN (type);
+}
+
/* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
entry that chains various modifiers in front of the given type. */
@@ -7553,7 +7574,8 @@ modified_type_die (type, is_const_type, is_volatile_type, context_die)
else if (code == POINTER_TYPE)
{
mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
- add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
+ add_AT_unsigned (mod_type_die, DW_AT_byte_size,
+ simple_type_size_in_bits (type) / BITS_PER_UNIT);
#if 0
add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
#endif
@@ -7562,7 +7584,8 @@ modified_type_die (type, is_const_type, is_volatile_type, context_die)
else if (code == REFERENCE_TYPE)
{
mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
- add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
+ add_AT_unsigned (mod_type_die, DW_AT_byte_size,
+ simple_type_size_in_bits (type) / BITS_PER_UNIT);
#if 0
add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
#endif
@@ -8058,7 +8081,7 @@ loc_descriptor_from_tree (loc, addressp)
/* The way DW_OP_GNU_push_tls_address is specified, we can only
look up addresses of objects in the current module. */
- if (! (*targetm.binds_local_p) (loc))
+ if (DECL_EXTERNAL (loc))
return 0;
rtl = rtl_for_decl_location (loc);
@@ -8417,27 +8440,6 @@ simple_decl_align_in_bits (decl)
return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
}
-/* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
- node, return the size in bits for the type if it is a constant, or else
- return the alignment for the type if the type's size is not constant, or
- else return BITS_PER_WORD if the type actually turns out to be an
- ERROR_MARK node. */
-
-static inline unsigned HOST_WIDE_INT
-simple_type_size_in_bits (type)
- tree type;
-{
-
- if (TREE_CODE (type) == ERROR_MARK)
- return BITS_PER_WORD;
- else if (TYPE_SIZE (type) == NULL_TREE)
- return 0;
- else if (host_integerp (TYPE_SIZE (type), 1))
- return tree_low_cst (TYPE_SIZE (type), 1);
- else
- return TYPE_ALIGN (type);
-}
-
/* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
lowest addressed byte of the "containing object" for the given FIELD_DECL,
or return 0 if we are unable to determine what that offset is, either
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 889064fd0f9..2cf410706d8 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -999,6 +999,10 @@ gen_lowpart_common (mode, x)
else if (GET_CODE (x) == SUBREG || GET_CODE (x) == REG
|| GET_CODE (x) == CONCAT || GET_CODE (x) == CONST_VECTOR)
return simplify_gen_subreg (mode, x, GET_MODE (x), offset);
+ else if ((GET_MODE_CLASS (mode) == MODE_VECTOR_INT
+ || GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
+ && GET_MODE (x) == VOIDmode)
+ return simplify_gen_subreg (mode, x, int_mode_for_mode (mode), offset);
/* If X is a CONST_INT or a CONST_DOUBLE, extract the appropriate bits
from the low-order part of the constant. */
else if ((GET_MODE_CLASS (mode) == MODE_INT
diff --git a/gcc/expr.c b/gcc/expr.c
index e8552f2f409..34ac3629ec6 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -6534,7 +6534,7 @@ expand_expr (exp, target, tmode, modifier)
}
case PARM_DECL:
- if (DECL_RTL (exp) == 0)
+ if (!DECL_RTL_SET_P (exp))
{
error_with_decl (exp, "prior parameter's size depends on `%s'");
return CONST0_RTX (mode);
@@ -7897,16 +7897,23 @@ expand_expr (exp, target, tmode, modifier)
}
}
+ if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1))
+ subtarget = 0;
+
/* No sense saving up arithmetic to be done
if it's all in the wrong mode to form part of an address.
And force_operand won't know whether to sign-extend or
zero-extend. */
if ((modifier != EXPAND_SUM && modifier != EXPAND_INITIALIZER)
|| mode != ptr_mode)
- goto binop;
-
- if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1))
- subtarget = 0;
+ {
+ op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0);
+ op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0);
+ temp = simplify_binary_operation (PLUS, mode, op0, op1);
+ if (temp)
+ return temp;
+ goto binop2;
+ }
op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, modifier);
op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, modifier);
@@ -10933,6 +10940,9 @@ do_tablejump (index, mode, range, table_label, default_label)
{
rtx temp, vector;
+ if (INTVAL (range) > cfun->max_jumptable_ents)
+ cfun->max_jumptable_ents = INTVAL (range);
+
/* Do an unsigned comparison (in the proper mode) between the index
expression and the value which represents the length of the range.
Since we just finished subtracting the lower bound of the range
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog
index ef81853324f..23f119dc34c 100644
--- a/gcc/f/ChangeLog
+++ b/gcc/f/ChangeLog
@@ -1,3 +1,8 @@
+2002-10-15 Richard Henderson <rth@redhat.com>
+
+ * target.h (ffetarget_print_real1, ffetarget_print_real2): Use
+ real_to_decimal directly, and with the new arguments.
+
2002-09-23 Zack Weinberg <zack@codesourcery.com>
* Make-lang.in (g77spec.o): Don't depend on f/version.h.
diff --git a/gcc/f/target.h b/gcc/f/target.h
index 2716a7b559f..b96504f4628 100644
--- a/gcc/f/target.h
+++ b/gcc/f/target.h
@@ -1469,13 +1469,15 @@ void *ffetarget_memcpy_ (void *dst, void *src, size_t len);
#define ffetarget_print_real1(f,l) \
({ REAL_VALUE_TYPE lr; \
lr = ffetarget_cvt_r1_to_rv_ ((l)); \
- REAL_VALUE_TO_DECIMAL (lr, ffetarget_string_, -1); \
+ real_to_decimal (ffetarget_string_, &lr \
+ sizeof(ffetarget_string_), 0, 1); \
fputs (ffetarget_string_, (f)); \
})
#define ffetarget_print_real2(f,l) \
({ REAL_VALUE_TYPE lr; \
lr = ffetarget_cvt_r2_to_rv_ (&((l).v[0])); \
- REAL_VALUE_TO_DECIMAL (lr, ffetarget_string_, -1); \
+ real_to_decimal (ffetarget_string_, &lr, \
+ sizeof(ffetarget_string_), 0, 1); \
fputs (ffetarget_string_, (f)); \
})
#define ffetarget_real1_one(res) ffetarget_cvt_rv_to_r1_ (dconst1, *(res))
diff --git a/gcc/final.c b/gcc/final.c
index b3a05dbcdb4..5ef564c3452 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -715,7 +715,7 @@ compute_alignments ()
align it. It is most likely an first block of loop. */
if (has_fallthru
&& branch_frequency + fallthru_frequency > BB_FREQ_MAX / 10
- && branch_frequency > fallthru_frequency * 5)
+ && branch_frequency > fallthru_frequency * 2)
{
log = LOOP_ALIGN (label);
if (max_log < log)
diff --git a/gcc/fixinc/fixincl.x b/gcc/fixinc/fixincl.x
index 4cd9f63db3f..a17fa9b9040 100644
--- a/gcc/fixinc/fixincl.x
+++ b/gcc/fixinc/fixincl.x
@@ -5,7 +5,7 @@
* files which are fixed to work correctly with ANSI C and placed in a
* directory that GNU C will search.
*
- * This file contains 146 fixup descriptions.
+ * This file contains 147 fixup descriptions.
*
* See README for more information.
*
@@ -248,6 +248,38 @@ static const char* apzAab_Fd_Zero_Selectbits_HPatch[] = {
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
+ * Description of Aab_Solaris_Sys_Varargs_H fix
+ */
+tSCC zAab_Solaris_Sys_Varargs_HName[] =
+ "AAB_solaris_sys_varargs_h";
+
+/*
+ * File name selection pattern
+ */
+tSCC zAab_Solaris_Sys_Varargs_HList[] =
+ "|sys/varargs.h|";
+/*
+ * Machine/OS name selection pattern
+ */
+tSCC* apzAab_Solaris_Sys_Varargs_HMachs[] = {
+ "*-*-solaris*",
+ (const char*)NULL };
+#define AAB_SOLARIS_SYS_VARARGS_H_TEST_CT 0
+#define aAab_Solaris_Sys_Varargs_HTests (tTestDesc*)NULL
+
+/*
+ * Fix Command Arguments for Aab_Solaris_Sys_Varargs_H
+ */
+static const char* apzAab_Solaris_Sys_Varargs_HPatch[] = {
+"#ifdef __STDC__\n\
+#include <stdarg.h>\n\
+#else\n\
+#include <varargs.h>\n\
+#endif\n",
+ (char*)NULL };
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
* Description of Aab_Sun_Memcpy fix
*/
tSCC zAab_Sun_MemcpyName[] =
@@ -297,38 +329,6 @@ extern int memcmp();\n\n\
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
- * Description of Aab_Solaris_Sys_Varargs_H fix
- */
-tSCC zAab_Solaris_Sys_Varargs_HName[] =
- "AAB_solaris_sys_varargs_h";
-
-/*
- * File name selection pattern
- */
-tSCC zAab_Solaris_Sys_Varargs_HList[] =
- "|sys/varargs.h|";
-/*
- * Machine/OS name selection pattern
- */
-tSCC* apzAab_Solaris_Sys_Varargs_HMachs[] = {
- "*-*-solaris*",
- (const char*)NULL };
-#define AAB_SOLARIS_SYS_VARARGS_H_TEST_CT 0
-#define aAab_Solaris_Sys_Varargs_HTests (tTestDesc*)NULL
-
-/*
- * Fix Command Arguments for Aab_Solaris_Sys_Varargs_H
- */
-static const char* apzAab_Solaris_Sys_Varargs_HPatch[] = {
-"#ifdef __STDC__\n\
-#include <stdarg.h>\n\
-#else\n\
-#include <varargs.h>\n\
-#endif\n",
- (char*)NULL };
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * *
- *
* Description of Aab_Svr4_Replace_Byteorder fix
*/
tSCC zAab_Svr4_Replace_ByteorderName[] =
@@ -1912,6 +1912,43 @@ static const char* apzHpux11_FabsfPatch[] = {
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
+ * Description of Hpux11_Abs fix
+ */
+tSCC zHpux11_AbsName[] =
+ "hpux11_abs";
+
+/*
+ * File name selection pattern
+ */
+tSCC zHpux11_AbsList[] =
+ "|stdlib.h|";
+/*
+ * Machine/OS name selection pattern
+ */
+tSCC* apzHpux11_AbsMachs[] = {
+ "ia64-hp-hpux11*",
+ (const char*)NULL };
+
+/*
+ * content selection pattern - do fix if pattern found
+ */
+tSCC zHpux11_AbsSelect0[] =
+ "ifndef _MATH_INCLUDED";
+
+#define HPUX11_ABS_TEST_CT 1
+static tTestDesc aHpux11_AbsTests[] = {
+ { TT_EGREP, zHpux11_AbsSelect0, (regex_t*)NULL }, };
+
+/*
+ * Fix Command Arguments for Hpux11_Abs
+ */
+static const char* apzHpux11_AbsPatch[] = {
+ "format",
+ "if !defined(_MATH_INCLUDED) || defined(__GNUG__)",
+ (char*)NULL };
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
* Description of Hpux11_Size_T fix
*/
tSCC zHpux11_Size_TName[] =
@@ -3881,6 +3918,7 @@ s@ va_list@ __not_va_list__@\n\
s@\\*va_list@*__not_va_list__@\n\
s@ __va_list)@ __gnuc_va_list)@\n\
s@typedef[ \t]\\(.*\\)[ \t]va_list[ \t]*;@typedef \\1 __not_va_list__;@\n\
+s@typedef[ \t]*__va_list__@typedef __gnuc_va_list@\n\
s@GNUC_VA_LIST@GNUC_Va_LIST@\n\
s@_NEED___VA_LIST@_NEED___Va_LIST@\n\
s@VA_LIST@DUMMY_VA_LIST@\n\
@@ -5707,9 +5745,9 @@ static const char* apzX11_SprintfPatch[] = {
*
* List of all fixes
*/
-#define REGEX_COUNT 153
+#define REGEX_COUNT 154
#define MACH_LIST_SIZE_LIMIT 279
-#define FIX_COUNT 146
+#define FIX_COUNT 147
/*
* Enumerate the fixes
@@ -5719,8 +5757,8 @@ typedef enum {
AAB_FD_ZERO_ASM_POSIX_TYPES_H_FIXIDX,
AAB_FD_ZERO_GNU_TYPES_H_FIXIDX,
AAB_FD_ZERO_SELECTBITS_H_FIXIDX,
- AAB_SUN_MEMCPY_FIXIDX,
AAB_SOLARIS_SYS_VARARGS_H_FIXIDX,
+ AAB_SUN_MEMCPY_FIXIDX,
AAB_SVR4_REPLACE_BYTEORDER_FIXIDX,
AAB_ULTRIX_ANSI_COMPAT_FIXIDX,
AAB_ULTRIX_LIMITS_FIXIDX,
@@ -5761,6 +5799,7 @@ typedef enum {
HPUX10_CPP_POW_INLINE_FIXIDX,
HPUX11_CPP_POW_INLINE_FIXIDX,
HPUX11_FABSF_FIXIDX,
+ HPUX11_ABS_FIXIDX,
HPUX11_SIZE_T_FIXIDX,
HPUX11_UINT32_C_FIXIDX,
HPUX11_VSNPRINTF_FIXIDX,
@@ -5884,16 +5923,16 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
AAB_FD_ZERO_SELECTBITS_H_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
aAab_Fd_Zero_Selectbits_HTests, apzAab_Fd_Zero_Selectbits_HPatch, 0 },
- { zAab_Sun_MemcpyName, zAab_Sun_MemcpyList,
- apzAab_Sun_MemcpyMachs,
- AAB_SUN_MEMCPY_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
- aAab_Sun_MemcpyTests, apzAab_Sun_MemcpyPatch, 0 },
-
{ zAab_Solaris_Sys_Varargs_HName, zAab_Solaris_Sys_Varargs_HList,
apzAab_Solaris_Sys_Varargs_HMachs,
AAB_SOLARIS_SYS_VARARGS_H_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
aAab_Solaris_Sys_Varargs_HTests, apzAab_Solaris_Sys_Varargs_HPatch, 0 },
+ { zAab_Sun_MemcpyName, zAab_Sun_MemcpyList,
+ apzAab_Sun_MemcpyMachs,
+ AAB_SUN_MEMCPY_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
+ aAab_Sun_MemcpyTests, apzAab_Sun_MemcpyPatch, 0 },
+
{ zAab_Svr4_Replace_ByteorderName, zAab_Svr4_Replace_ByteorderList,
apzAab_Svr4_Replace_ByteorderMachs,
AAB_SVR4_REPLACE_BYTEORDER_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
@@ -6094,6 +6133,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
HPUX11_FABSF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aHpux11_FabsfTests, apzHpux11_FabsfPatch, 0 },
+ { zHpux11_AbsName, zHpux11_AbsList,
+ apzHpux11_AbsMachs,
+ HPUX11_ABS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+ aHpux11_AbsTests, apzHpux11_AbsPatch, 0 },
+
{ zHpux11_Size_TName, zHpux11_Size_TList,
apzHpux11_Size_TMachs,
HPUX11_SIZE_T_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
diff --git a/gcc/fixinc/inclhack.def b/gcc/fixinc/inclhack.def
index 2fce20fe7ea..787bcb73626 100644
--- a/gcc/fixinc/inclhack.def
+++ b/gcc/fixinc/inclhack.def
@@ -1165,6 +1165,21 @@ fix = {
/*
+ * Make sure hpux defines abs in header.
+ */
+fix = {
+ hackname = hpux11_abs;
+ mach = ia64-hp-hpux11*;
+ files = stdlib.h;
+ select = "ifndef _MATH_INCLUDED";
+ c_fix = format;
+ c_fix_arg = "if !defined(_MATH_INCLUDED) || defined(__GNUG__)";
+// sed = "s/ifndef _MATH_INCLUDED/if !defined(_MATH_INCLUDED) || defined(__GNUG__)/";
+ test_text = "#ifndef _MATH_INCLUDED";
+};
+
+
+/*
* Prevent HP-UX 11 from defining __size_t and preventing size_t from
* being defined by having it define _hpux_size_t instead.
*/
@@ -2216,6 +2231,7 @@ fix = {
"s@ __va_list)@ __gnuc_va_list)@\n"
"s@typedef[ \t]\\(.*\\)[ \t]va_list[ \t]*;"
"@typedef \\1 __not_va_list__;@\n"
+ "s@typedef[ \t]*__va_list__@typedef __gnuc_va_list@\n"
"s@GNUC_VA_LIST@GNUC_Va_LIST@\n"
"s@_NEED___VA_LIST@_NEED___Va_LIST@\n"
"s@VA_LIST@DUMMY_VA_LIST@\n"
diff --git a/gcc/fixinc/tests/base/stdlib.h b/gcc/fixinc/tests/base/stdlib.h
index 9e43d13270f..857989cb9cb 100644
--- a/gcc/fixinc/tests/base/stdlib.h
+++ b/gcc/fixinc/tests/base/stdlib.h
@@ -16,6 +16,11 @@
#endif /* ARM_WCHAR_CHECK */
+#if defined( HPUX11_ABS_CHECK )
+#if !defined(_MATH_INCLUDED) || defined(__GNUG__)
+#endif /* HPUX11_ABS_CHECK */
+
+
#if defined( INT_ABORT_FREE_AND_EXIT_CHECK )
extern void abort(int);
extern void free(void*);
diff --git a/gcc/fixinc/tests/base/testing.h b/gcc/fixinc/tests/base/testing.h
index d2393adcc4a..fbf45e344f5 100644
--- a/gcc/fixinc/tests/base/testing.h
+++ b/gcc/fixinc/tests/base/testing.h
@@ -71,7 +71,7 @@ extern __ptr_t memcpy __P ((__ptr_t __dest, __const __ptr_t __src,
#if defined( MACHINE_NAME_CHECK )
/* MACH_DIFF: */
-#if defined( __i386__ ) || defined( sparc ) || defined( vax )
+#if defined( i386 ) || defined( sparc ) || defined( vax )
/* no uniform test, so be careful :-) */
#endif /* MACHINE_NAME_CHECK */
diff --git a/gcc/flags.h b/gcc/flags.h
index 1578a2499cd..39ca5ea936e 100644
--- a/gcc/flags.h
+++ b/gcc/flags.h
@@ -184,6 +184,11 @@ extern int warn_disabled_optimization;
extern int warn_deprecated_decl;
+/* Nonzero means warn about constructs which might not be strict
+ aliasing safe. */
+
+extern int warn_strict_aliasing;
+
/* Nonzero if generating code to do profiling. */
extern int profile_flag;
@@ -426,7 +431,7 @@ extern int flag_schedule_insns_after_reload;
/* The following flags have effect only for scheduling before register
allocation:
- flag_schedule_interblock means schedule insns accross basic blocks.
+ flag_schedule_interblock means schedule insns across basic blocks.
flag_schedule_speculative means allow speculative motion of non-load insns.
flag_schedule_speculative_load means allow speculative motion of some
load insns.
@@ -558,19 +563,10 @@ extern int flag_peephole2;
/* Try to guess branch probablities. */
extern int flag_guess_branch_prob;
-/* -fbounded-pointers causes gcc to compile pointers as composite
- objects occupying three words: the pointer value, the base address
- of the referent object, and the address immediately beyond the end
- of the referent object. The base and extent allow us to perform
- runtime bounds checking. -fbounded-pointers implies -fcheck-bounds. */
-extern int flag_bounded_pointers;
-
/* -fcheck-bounds causes gcc to generate array bounds checks.
- For C, C++: defaults to value of flag_bounded_pointers.
- For ObjC: defaults to off.
+ For C, C++ and ObjC: defaults off.
For Java: defaults to on.
- For Fortran: defaults to off.
- For CHILL: defaults to off. */
+ For Fortran: defaults to off. */
extern int flag_bounds_check;
/* This will attempt to merge constant section constants, if 1 only
@@ -616,6 +612,10 @@ extern int align_labels_max_skip;
extern int align_functions;
extern int align_functions_log;
+/* Like align_functions_log above, but used by front-ends to force the
+ minimum function alignment. Zero means no alignment is forced. */
+extern int force_align_functions_log;
+
/* Nonzero if we dump in VCG format, not plain text. */
extern int dump_for_graph;
diff --git a/gcc/flow.c b/gcc/flow.c
index 2905917cbcc..d9e3ae3ce40 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -2110,6 +2110,10 @@ insn_dead_p (pbi, x, call_ok, notes)
{
enum rtx_code code = GET_CODE (x);
+ /* Don't eliminate insns that may trap. */
+ if (flag_non_call_exceptions && may_trap_p (x))
+ return 0;
+
#ifdef AUTO_INC_DEC
/* As flow is invoked after combine, we must take existing AUTO_INC
expressions into account. */
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 32aa0eca3e2..ae6931e3d62 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -1346,7 +1346,7 @@ size_htab_hash (x)
tree t = (tree) x;
return (TREE_INT_CST_HIGH (t) ^ TREE_INT_CST_LOW (t)
- ^ (hashval_t) ((long) TREE_TYPE (t) >> 3)
+ ^ htab_hash_pointer (TREE_TYPE (t))
^ (TREE_OVERFLOW (t) << 20));
}
@@ -5771,12 +5771,25 @@ fold (expr)
goto binary;
- case LSHIFT_EXPR:
- case RSHIFT_EXPR:
case LROTATE_EXPR:
case RROTATE_EXPR:
+ if (integer_all_onesp (arg0))
+ return omit_one_operand (type, arg0, arg1);
+ goto shift;
+
+ case RSHIFT_EXPR:
+ /* Optimize -1 >> x for arithmetic right shifts. */
+ if (integer_all_onesp (arg0) && ! TREE_UNSIGNED (type))
+ return omit_one_operand (type, arg0, arg1);
+ /* ... fall through ... */
+
+ case LSHIFT_EXPR:
+ shift:
if (integer_zerop (arg1))
return non_lvalue (convert (type, arg0));
+ if (integer_zerop (arg0))
+ return omit_one_operand (type, arg0, arg1);
+
/* Since negative shift count is not well-defined,
don't try to compute it in the compiler. */
if (TREE_CODE (arg1) == INTEGER_CST && tree_int_cst_sgn (arg1) < 0)
diff --git a/gcc/function.c b/gcc/function.c
index f909688dc3d..ffdac2a4278 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -798,7 +798,8 @@ assign_stack_temp_for_type (mode, size, keep, type)
/* If a type is specified, set the relevant flags. */
if (type != 0)
{
- RTX_UNCHANGING_P (slot) = TYPE_READONLY (type);
+ RTX_UNCHANGING_P (slot) = (lang_hooks.honor_readonly
+ && TYPE_READONLY (type));
MEM_VOLATILE_P (slot) = TYPE_VOLATILE (type);
MEM_SET_IN_STRUCT_P (slot, AGGREGATE_TYPE_P (type));
}
@@ -3241,7 +3242,7 @@ insns_for_mem_hash (k)
{
/* Use the address of the key for the hash value. */
struct insns_for_mem_entry *m = (struct insns_for_mem_entry *) k;
- return (hashval_t) m->key;
+ return htab_hash_pointer (m->key);
}
/* Return nonzero if K1 and K2 (two REGs) are the same. */
@@ -6229,6 +6230,8 @@ prepare_function_start ()
cfun->function_frequency = FUNCTION_FREQUENCY_NORMAL;
+ cfun->max_jumptable_ents = 0;
+
(*lang_hooks.function.init) (cfun);
if (init_machine_status)
cfun->machine = (*init_machine_status) ();
diff --git a/gcc/function.h b/gcc/function.h
index ce97d3bc9b5..11c781750da 100644
--- a/gcc/function.h
+++ b/gcc/function.h
@@ -500,6 +500,10 @@ struct function GTY(())
(set only when profile feedback is available). */
FUNCTION_FREQUENCY_HOT
} function_frequency;
+
+ /* Maximal number of entities in the single jumptable. Used to estimate
+ final flowgraph size. */
+ int max_jumptable_ents;
};
/* The function currently being compiled. */
diff --git a/gcc/gcc.c b/gcc/gcc.c
index c0a419adabc..6a5a5a0785e 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -162,6 +162,11 @@ static const char *print_prog_name = NULL;
static int print_multi_directory;
+/* Flag saying to print the relative path we'd use to
+ find OS libraries given the current compiler flags. */
+
+static int print_multi_os_directory;
+
/* Flag saying to print the list of subdirectories and
compiler flags used to select them in a standard form. */
@@ -192,6 +197,11 @@ static int target_help_flag;
static int report_times;
+/* Nonzero means place this string before uses of /, so that include
+ and library files can be found in an alternate location. */
+
+static const char *target_system_root = TARGET_SYSTEM_ROOT;
+
/* Nonzero means write "temp" files in source directory
and use the source file's name in them, and don't delete them. */
@@ -280,9 +290,12 @@ static struct compiler *lookup_compiler PARAMS ((const char *, size_t, const cha
static char *build_search_list PARAMS ((struct path_prefix *, const char *, int));
static void putenv_from_prefixes PARAMS ((struct path_prefix *, const char *));
static int access_check PARAMS ((const char *, int));
-static char *find_a_file PARAMS ((struct path_prefix *, const char *, int));
+static char *find_a_file PARAMS ((struct path_prefix *, const char *,
+ int, int));
static void add_prefix PARAMS ((struct path_prefix *, const char *,
- const char *, int, int, int *));
+ const char *, int, int, int *, int));
+static void add_sysrooted_prefix PARAMS ((struct path_prefix *, const char *,
+ const char *, int, int, int *, int));
static void translate_options PARAMS ((int *, const char *const **));
static char *skip_whitespace PARAMS ((char *));
static void delete_if_ordinary PARAMS ((const char *));
@@ -701,13 +714,16 @@ static const char *startfile_prefix_spec = STARTFILE_PREFIX_SPEC;
static const char *trad_capable_cpp =
"cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}";
+/* We don't wrap .d files in %W{} since a missing .d file, and
+ therefore no dependency entry, confuses make into thinking a .o
+ file that happens to exist is up-to-date. */
static const char *cpp_unique_options =
"%{C:%{!E:%eGNU C does not support -C without using -E}}\
%{CC:%{!E:%eGNU C does not support -CC without using -E}}\
%{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*} %{P} %I\
- %{MD:-MD %W{!o: %b.d}%W{o*:%.d%*}}\
- %{MMD:-MMD %W{!o: %b.d}%W{o*:%.d%*}}\
- %{M} %{MM} %W{MF*} %{MG} %{MP} %{MQ*} %{MT*}\
+ %{MD:-MD %{!o:%b.d}%{o*:%.d%*}}\
+ %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}}\
+ %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*}\
%{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}}\
%{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}\
%{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
@@ -720,7 +736,7 @@ static const char *cpp_unique_options =
options used to set target flags. Those special target flags settings may
in turn cause preprocessor symbols to be defined specially. */
static const char *cpp_options =
-"%(cpp_unique_options) %1 %{std*} %{W*&pedantic*} %{w} %{m*} %{f*}\
+"%(cpp_unique_options) %1 %{m*} %{std*} %{ansi} %{W*&pedantic*} %{w} %{f*}\
%{O*} %{undef}";
/* This contains cpp options which are not passed when the preprocessor
@@ -731,7 +747,7 @@ static const char *cpp_debug_options = "%{d*}";
static const char *cc1_options =
"%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
%1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*}\
- -auxbase%{c|S:%{o*:-strip%*}%{!o*: %b}}%{!c:%{!S: %b}}\
+ -auxbase%{c|S:%{o*:-strip %*}%{!o*: %b}}%{!c:%{!S: %b}}\
%{g*} %{O*} %{W*&pedantic*} %{w} %{std*} %{ansi}\
%{v:-version} %{pg:-p} %{p} %{f*} %{undef}\
%{Qn:-fno-ident} %{--help:--help}\
@@ -885,7 +901,7 @@ static const struct compiler default_compilers[] =
%{!fsyntax-only:%(invoke_as)}}}}", 0},
{"-",
"%{!E:%e-E required when input is from standard input}\
- %(trad_capable_cpp) %(cpp_options)", 0},
+ %(trad_capable_cpp) %(cpp_options) %(cpp_debug_options)", 0},
{".h", "@c-header", 0},
{"@c-header",
"%{!E:%ecompilation of header file requested} \
@@ -1014,6 +1030,7 @@ static const struct option_map option_map[] =
{"--print-missing-file-dependencies", "-MG", 0},
{"--print-multi-lib", "-print-multi-lib", 0},
{"--print-multi-directory", "-print-multi-directory", 0},
+ {"--print-multi-os-directory", "-print-multi-os-directory", 0},
{"--print-prog-name", "-print-prog-name=", "aj"},
{"--profile", "-p", 0},
{"--profile-blocks", "-a", 0},
@@ -1299,7 +1316,9 @@ struct prefix_list
int require_machine_suffix; /* Don't use without machine_suffix. */
/* 2 means try both machine_suffix and just_machine_suffix. */
int *used_flag_ptr; /* 1 if a file was found with this prefix. */
- int priority; /* Sort key - priority within list */
+ int priority; /* Sort key - priority within list. */
+ int os_multilib; /* 1 if OS multilib scheme should be used,
+ 0 for GCC multilib scheme. */
};
struct path_prefix
@@ -1388,6 +1407,11 @@ static const char *const standard_bindir_prefix = STANDARD_BINDIR_PREFIX;
set_multilib_dir based on the compilation options. */
static const char *multilib_dir;
+
+/* Subdirectory to use for locating libraries in OS conventions. Set by
+ set_multilib_dir based on the compilation options. */
+
+static const char *multilib_os_dir;
/* Structure to keep track of the specs that have been defined so far.
These are accessed using %(specname) or %[specname] in a compiler
@@ -1442,6 +1466,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("multilib_extra", &multilib_extra),
INIT_STATIC_SPEC ("multilib_matches", &multilib_matches),
INIT_STATIC_SPEC ("multilib_exclusions", &multilib_exclusions),
+ INIT_STATIC_SPEC ("multilib_options", &multilib_options),
INIT_STATIC_SPEC ("linker", &linker_name_spec),
INIT_STATIC_SPEC ("link_libgcc", &link_libgcc_spec),
INIT_STATIC_SPEC ("md_exec_prefix", &md_exec_prefix),
@@ -1584,6 +1609,9 @@ init_spec ()
#else
"-lgcc_s%M"
#endif
+#ifdef USE_LIBUNWIND_EXCEPTIONS
+ " -lunwind"
+#endif
,
"-lgcc",
"-lgcc_eh");
@@ -1889,7 +1917,7 @@ read_specs (filename, main_p)
(long) (p1 - buffer + 1));
p[-2] = '\0';
- new_filename = find_a_file (&startfile_prefixes, p1, R_OK);
+ new_filename = find_a_file (&startfile_prefixes, p1, R_OK, 0);
read_specs (new_filename ? new_filename : p1, FALSE);
continue;
}
@@ -1908,7 +1936,7 @@ read_specs (filename, main_p)
(long) (p1 - buffer + 1));
p[-2] = '\0';
- new_filename = find_a_file (&startfile_prefixes, p1, R_OK);
+ new_filename = find_a_file (&startfile_prefixes, p1, R_OK, 0);
if (new_filename)
read_specs (new_filename, FALSE);
else if (verbose_flag)
@@ -2541,16 +2569,17 @@ access_check (name, mode)
Return 0 if not found, otherwise return its name, allocated with malloc. */
static char *
-find_a_file (pprefix, name, mode)
+find_a_file (pprefix, name, mode, multilib)
struct path_prefix *pprefix;
const char *name;
- int mode;
+ int mode, multilib;
{
char *temp;
const char *const file_suffix =
((mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : "");
struct prefix_list *pl;
int len = pprefix->max_len + strlen (name) + strlen (file_suffix) + 1;
+ const char *multilib_name, *multilib_os_name;
#ifdef DEFAULT_ASSEMBLER
if (! strcmp (name, "as") && access (DEFAULT_ASSEMBLER, mode) == 0)
@@ -2565,6 +2594,22 @@ find_a_file (pprefix, name, mode)
if (machine_suffix)
len += strlen (machine_suffix);
+ multilib_name = name;
+ multilib_os_name = name;
+ if (multilib && multilib_os_dir)
+ {
+ int len1 = multilib_dir ? strlen (multilib_dir) + 1 : 0;
+ int len2 = strlen (multilib_os_dir) + 1;
+
+ len += len1 > len2 ? len1 : len2;
+ if (multilib_dir)
+ multilib_name = ACONCAT ((multilib_dir, dir_separator_str, name,
+ NULL));
+ if (strcmp (multilib_os_dir, ".") != 0)
+ multilib_os_name = ACONCAT ((multilib_os_dir, dir_separator_str, name,
+ NULL));
+ }
+
temp = xmalloc (len);
/* Determine the filename to execute (special case for absolute paths). */
@@ -2580,6 +2625,9 @@ find_a_file (pprefix, name, mode)
else
for (pl = pprefix->plist; pl; pl = pl->next)
{
+ const char *this_name
+ = pl->os_multilib ? multilib_os_name : multilib_name;
+
if (machine_suffix)
{
/* Some systems have a suffix for executable files.
@@ -2588,7 +2636,7 @@ find_a_file (pprefix, name, mode)
{
strcpy (temp, pl->prefix);
strcat (temp, machine_suffix);
- strcat (temp, name);
+ strcat (temp, multilib_name);
strcat (temp, file_suffix);
if (access_check (temp, mode) == 0)
{
@@ -2598,10 +2646,10 @@ find_a_file (pprefix, name, mode)
}
}
- /* Now try just the name. */
+ /* Now try just the multilib_name. */
strcpy (temp, pl->prefix);
strcat (temp, machine_suffix);
- strcat (temp, name);
+ strcat (temp, multilib_name);
if (access_check (temp, mode) == 0)
{
if (pl->used_flag_ptr != 0)
@@ -2620,7 +2668,7 @@ find_a_file (pprefix, name, mode)
{
strcpy (temp, pl->prefix);
strcat (temp, just_machine_suffix);
- strcat (temp, name);
+ strcat (temp, multilib_name);
strcat (temp, file_suffix);
if (access_check (temp, mode) == 0)
{
@@ -2632,7 +2680,7 @@ find_a_file (pprefix, name, mode)
strcpy (temp, pl->prefix);
strcat (temp, just_machine_suffix);
- strcat (temp, name);
+ strcat (temp, multilib_name);
if (access_check (temp, mode) == 0)
{
if (pl->used_flag_ptr != 0)
@@ -2650,7 +2698,7 @@ find_a_file (pprefix, name, mode)
if (file_suffix[0] != 0)
{
strcpy (temp, pl->prefix);
- strcat (temp, name);
+ strcat (temp, this_name);
strcat (temp, file_suffix);
if (access_check (temp, mode) == 0)
{
@@ -2661,7 +2709,7 @@ find_a_file (pprefix, name, mode)
}
strcpy (temp, pl->prefix);
- strcat (temp, name);
+ strcat (temp, this_name);
if (access_check (temp, mode) == 0)
{
if (pl->used_flag_ptr != 0)
@@ -2699,13 +2747,15 @@ enum path_prefix_priority
2 means try both machine_suffix and just_machine_suffix. */
static void
-add_prefix (pprefix, prefix, component, priority, require_machine_suffix, warn)
+add_prefix (pprefix, prefix, component, priority, require_machine_suffix,
+ warn, os_multilib)
struct path_prefix *pprefix;
const char *prefix;
const char *component;
/* enum prefix_priority */ int priority;
int require_machine_suffix;
int *warn;
+ int os_multilib;
{
struct prefix_list *pl, **prev;
int len;
@@ -2727,6 +2777,7 @@ add_prefix (pprefix, prefix, component, priority, require_machine_suffix, warn)
pl->require_machine_suffix = require_machine_suffix;
pl->used_flag_ptr = warn;
pl->priority = priority;
+ pl->os_multilib = os_multilib;
if (warn)
*warn = 0;
@@ -2734,6 +2785,33 @@ add_prefix (pprefix, prefix, component, priority, require_machine_suffix, warn)
pl->next = (*prev);
(*prev) = pl;
}
+
+/* Same as add_prefix, but prepending target_system_root to prefix. */
+static void
+add_sysrooted_prefix (pprefix, prefix, component, priority,
+ require_machine_suffix, warn, os_multilib)
+ struct path_prefix *pprefix;
+ const char *prefix;
+ const char *component;
+ /* enum prefix_priority */ int priority;
+ int require_machine_suffix;
+ int *warn;
+ int os_multilib;
+{
+ if (!IS_ABSOLUTE_PATHNAME (prefix))
+ abort ();
+
+ if (target_system_root)
+ {
+ prefix = concat (target_system_root, prefix, NULL);
+ /* We have to override this because GCC's notion of sysroot
+ moves along with GCC. */
+ component = "GCC";
+ }
+
+ add_prefix (pprefix, prefix, component, priority,
+ require_machine_suffix, warn, os_multilib);
+}
/* Execute the command specified by the arguments on the current line of spec.
When using pipes, this includes several piped-together commands
@@ -2770,7 +2848,7 @@ execute ()
commands[0].prog = argbuf[0]; /* first command. */
commands[0].argv = &argbuf[0];
- string = find_a_file (&exec_prefixes, commands[0].prog, X_OK);
+ string = find_a_file (&exec_prefixes, commands[0].prog, X_OK, 0);
if (string)
commands[0].argv[0] = string;
@@ -2784,7 +2862,8 @@ execute ()
argbuf[i] = 0; /* termination of command args. */
commands[n_commands].prog = argbuf[i + 1];
commands[n_commands].argv = &argbuf[i + 1];
- string = find_a_file (&exec_prefixes, commands[n_commands].prog, X_OK);
+ string = find_a_file (&exec_prefixes, commands[n_commands].prog,
+ X_OK, 0);
if (string)
commands[n_commands].argv[0] = string;
n_commands++;
@@ -2937,7 +3016,7 @@ Internal error: %s (program %s)\n\
Please submit a full bug report.\n\
See %s for instructions.",
strsignal (WTERMSIG (status)), commands[j].prog,
- GCCBUGURL);
+ bug_report_url);
signal_count++;
ret_code = -1;
}
@@ -3099,6 +3178,7 @@ display_help ()
fputs (_("\
-print-multi-lib Display the mapping between command line options and\n\
multiple library search directories\n"), stdout);
+ fputs (_(" -print-multi-os-directory Display the relative path to OS libraries\n"), stdout);
fputs (_(" -Wa,<options> Pass comma-separated <options> on to the assembler\n"), stdout);
fputs (_(" -Wp,<options> Pass comma-separated <options> on to the preprocessor\n"), stdout);
fputs (_(" -Wl,<options> Pass comma-separated <options> on to the linker\n"), stdout);
@@ -3315,9 +3395,9 @@ process_command (argc, argv)
set_std_prefix (gcc_exec_prefix, len);
add_prefix (&exec_prefixes, gcc_exec_prefix, "GCC",
- PREFIX_PRIORITY_LAST, 0, NULL);
+ PREFIX_PRIORITY_LAST, 0, NULL, 0);
add_prefix (&startfile_prefixes, gcc_exec_prefix, "GCC",
- PREFIX_PRIORITY_LAST, 0, NULL);
+ PREFIX_PRIORITY_LAST, 0, NULL, 0);
}
/* COMPILER_PATH and LIBRARY_PATH have values
@@ -3345,10 +3425,10 @@ process_command (argc, argv)
else
nstore[endp - startp] = 0;
add_prefix (&exec_prefixes, nstore, 0,
- PREFIX_PRIORITY_LAST, 0, NULL);
+ PREFIX_PRIORITY_LAST, 0, NULL, 0);
add_prefix (&include_prefixes,
concat (nstore, "include", NULL),
- 0, PREFIX_PRIORITY_LAST, 0, NULL);
+ 0, PREFIX_PRIORITY_LAST, 0, NULL, 0);
if (*endp == 0)
break;
endp = startp = endp + 1;
@@ -3380,7 +3460,7 @@ process_command (argc, argv)
else
nstore[endp - startp] = 0;
add_prefix (&startfile_prefixes, nstore, NULL,
- PREFIX_PRIORITY_LAST, 0, NULL);
+ PREFIX_PRIORITY_LAST, 0, NULL, 1);
if (*endp == 0)
break;
endp = startp = endp + 1;
@@ -3413,7 +3493,7 @@ process_command (argc, argv)
else
nstore[endp - startp] = 0;
add_prefix (&startfile_prefixes, nstore, NULL,
- PREFIX_PRIORITY_LAST, 0, NULL);
+ PREFIX_PRIORITY_LAST, 0, NULL, 1);
if (*endp == 0)
break;
endp = startp = endp + 1;
@@ -3513,6 +3593,8 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"
print_multi_lib = 1;
else if (! strcmp (argv[i], "-print-multi-directory"))
print_multi_directory = 1;
+ else if (! strcmp (argv[i], "-print-multi-os-directory"))
+ print_multi_os_directory = 1;
else if (! strncmp (argv[i], "-Wa,", 4))
{
int prev, j;
@@ -3682,7 +3764,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"
{
if (len == 7)
add_prefix (&include_prefixes, "include", NULL,
- PREFIX_PRIORITY_B_OPT, 0, NULL);
+ PREFIX_PRIORITY_B_OPT, 0, NULL, 0);
else
{
char * string = xmalloc (len + 1);
@@ -3690,16 +3772,16 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"
strncpy (string, value, len - 7);
strcpy (string + len - 7, "include");
add_prefix (&include_prefixes, string, NULL,
- PREFIX_PRIORITY_B_OPT, 0, NULL);
+ PREFIX_PRIORITY_B_OPT, 0, NULL, 0);
}
}
add_prefix (&exec_prefixes, value, NULL,
- PREFIX_PRIORITY_B_OPT, 0, &warn_B);
+ PREFIX_PRIORITY_B_OPT, 0, &warn_B, 0);
add_prefix (&startfile_prefixes, value, NULL,
- PREFIX_PRIORITY_B_OPT, 0, &warn_B);
+ PREFIX_PRIORITY_B_OPT, 0, &warn_B, 0);
add_prefix (&include_prefixes, concat (value, "include", NULL),
- NULL, PREFIX_PRIORITY_B_OPT, 0, NULL);
+ NULL, PREFIX_PRIORITY_B_OPT, 0, NULL, 0);
n_switches++;
}
break;
@@ -3842,17 +3924,17 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"
as well as trying the machine and the version. */
#ifndef OS2
add_prefix (&exec_prefixes, standard_exec_prefix, "GCC",
- PREFIX_PRIORITY_LAST, 1, warn_std_ptr);
+ PREFIX_PRIORITY_LAST, 1, warn_std_ptr, 0);
add_prefix (&exec_prefixes, standard_exec_prefix, "BINUTILS",
- PREFIX_PRIORITY_LAST, 2, warn_std_ptr);
+ PREFIX_PRIORITY_LAST, 2, warn_std_ptr, 0);
add_prefix (&exec_prefixes, standard_exec_prefix_1, "BINUTILS",
- PREFIX_PRIORITY_LAST, 2, warn_std_ptr);
+ PREFIX_PRIORITY_LAST, 2, warn_std_ptr, 0);
#endif
add_prefix (&startfile_prefixes, standard_exec_prefix, "BINUTILS",
- PREFIX_PRIORITY_LAST, 1, warn_std_ptr);
+ PREFIX_PRIORITY_LAST, 1, warn_std_ptr, 0);
add_prefix (&startfile_prefixes, standard_exec_prefix_1, "BINUTILS",
- PREFIX_PRIORITY_LAST, 1, warn_std_ptr);
+ PREFIX_PRIORITY_LAST, 1, warn_std_ptr, 0);
tooldir_prefix = concat (tooldir_base_prefix, spec_machine,
dir_separator_str, NULL);
@@ -3875,11 +3957,11 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"
add_prefix (&exec_prefixes,
concat (gcc_exec_tooldir_prefix, "bin",
dir_separator_str, NULL),
- NULL, PREFIX_PRIORITY_LAST, 0, NULL);
+ NULL, PREFIX_PRIORITY_LAST, 0, NULL, 0);
add_prefix (&startfile_prefixes,
concat (gcc_exec_tooldir_prefix, "lib",
dir_separator_str, NULL),
- NULL, PREFIX_PRIORITY_LAST, 0, NULL);
+ NULL, PREFIX_PRIORITY_LAST, 0, NULL, 1);
}
tooldir_prefix = concat (standard_exec_prefix, spec_machine,
@@ -3889,10 +3971,19 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"
add_prefix (&exec_prefixes,
concat (tooldir_prefix, "bin", dir_separator_str, NULL),
- "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL);
+ "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL, 0);
add_prefix (&startfile_prefixes,
concat (tooldir_prefix, "lib", dir_separator_str, NULL),
- "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL);
+ "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL, 1);
+
+ if (target_system_root && gcc_exec_prefix)
+ {
+ char *tmp_prefix = make_relative_prefix (argv[0],
+ standard_bindir_prefix,
+ target_system_root);
+ if (tmp_prefix && access_check (tmp_prefix, F_OK) == 0)
+ target_system_root = tmp_prefix;
+ }
/* More prefixes are enabled in main, after we read the specs file
and determine whether this is cross-compilation or not. */
@@ -3942,6 +4033,8 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"
;
else if (! strcmp (argv[i], "-print-multi-directory"))
;
+ else if (! strcmp (argv[i], "-print-multi-os-directory"))
+ ;
else if (! strcmp (argv[i], "-ftarget-help"))
;
else if (! strcmp (argv[i], "-fhelp"))
@@ -4064,10 +4157,11 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"
switches[n_switches].live_cond = SWITCH_OK;
switches[n_switches].validated = 0;
switches[n_switches].ordering = 0;
- /* These are always valid, since gcc.c itself understands it. */
+ /* These are always valid, since gcc.c itself understands them. */
if (!strcmp (p, "save-temps")
|| !strcmp (p, "static-libgcc")
- || !strcmp (p, "shared-libgcc"))
+ || !strcmp (p, "shared-libgcc")
+ || !strcmp (p, "pipe"))
switches[n_switches].validated = 1;
else
{
@@ -4475,9 +4569,14 @@ do_spec_1 (spec, inswitch, soft_matched_part)
continue;
#endif
/* Try subdirectory if there is one. */
- if (multilib_dir != NULL)
+ if (multilib_dir != NULL
+ || (pl->os_multilib && multilib_os_dir != NULL))
{
- if (machine_suffix)
+ const char *multi_dir;
+
+ multi_dir = pl->os_multilib ? multilib_os_dir
+ : multilib_dir;
+ if (machine_suffix && multilib_dir)
{
if (strlen (pl->prefix) + strlen (machine_suffix)
>= bufsize)
@@ -4500,14 +4599,14 @@ do_spec_1 (spec, inswitch, soft_matched_part)
}
if (!pl->require_machine_suffix)
{
- if (is_directory (pl->prefix, multilib_dir, 1))
+ if (is_directory (pl->prefix, multi_dir, 1))
{
do_spec_1 ("-L", 0, NULL);
#ifdef SPACE_AFTER_L_OPTION
do_spec_1 (" ", 0, NULL);
#endif
do_spec_1 (pl->prefix, 1, NULL);
- do_spec_1 (multilib_dir, 1, NULL);
+ do_spec_1 (multi_dir, 1, NULL);
/* Make this a separate argument. */
do_spec_1 (" ", 0, NULL);
}
@@ -5130,6 +5229,14 @@ do_spec_1 (spec, inswitch, soft_matched_part)
}
break;
+ case 'R':
+ /* We assume there is a directory
+ separator at the end of this string. */
+ if (target_system_root)
+ obstack_grow (&obstack, target_system_root,
+ strlen (target_system_root));
+ break;
+
case 'S':
value = do_spec_1 (startfile_spec, 0, NULL);
if (value != 0)
@@ -5804,11 +5911,9 @@ find_file (name)
char *newname;
/* Try multilib_dir if it is defined. */
- if (multilib_dir != NULL)
+ if (multilib_os_dir != NULL)
{
- const char *const try = ACONCAT ((multilib_dir, dir_separator_str, name, NULL));
-
- newname = find_a_file (&startfile_prefixes, try, R_OK);
+ newname = find_a_file (&startfile_prefixes, name, R_OK, 1);
/* If we don't find it in the multi library dir, then fall
through and look for it in the normal places. */
@@ -5816,7 +5921,7 @@ find_file (name)
return newname;
}
- newname = find_a_file (&startfile_prefixes, name, R_OK);
+ newname = find_a_file (&startfile_prefixes, name, R_OK, 0);
return newname ? newname : name;
}
@@ -6057,7 +6162,7 @@ main (argc, argv)
spec_version, dir_separator_str, NULL);
just_machine_suffix = concat (spec_machine, dir_separator_str, NULL);
- specs_file = find_a_file (&startfile_prefixes, "specs", R_OK);
+ specs_file = find_a_file (&startfile_prefixes, "specs", R_OK, 0);
/* Read the specs file unless it is a default one. */
if (specs_file != 0 && strcmp (specs_file, "specs"))
read_specs (specs_file, TRUE);
@@ -6076,82 +6181,81 @@ main (argc, argv)
if (access (specs_file, R_OK) == 0)
read_specs (specs_file, TRUE);
- /* If not cross-compiling, look for startfiles in the standard places.
- Similarly, don't add the standard prefixes if startfile handling
- will be under control of startfile_prefix_spec. */
- if (*cross_compile == '0' && *startfile_prefix_spec == 0)
+ /* If not cross-compiling, look for executables in the standard
+ places. */
+ if (*cross_compile == '0')
{
if (*md_exec_prefix)
{
add_prefix (&exec_prefixes, md_exec_prefix, "GCC",
- PREFIX_PRIORITY_LAST, 0, NULL);
- add_prefix (&startfile_prefixes, md_exec_prefix, "GCC",
- PREFIX_PRIORITY_LAST, 0, NULL);
+ PREFIX_PRIORITY_LAST, 0, NULL, 0);
}
+ }
+
+ /* Look for startfiles in the standard places. */
+ if (*startfile_prefix_spec != 0
+ && do_spec_2 (startfile_prefix_spec) == 0
+ && do_spec_1 (" ", 0, NULL) == 0)
+ {
+ int ndx;
+ for (ndx = 0; ndx < argbuf_index; ndx++)
+ add_sysrooted_prefix (&startfile_prefixes, argbuf[ndx], "BINUTILS",
+ PREFIX_PRIORITY_LAST, 0, NULL, 1);
+ }
+ /* We should eventually get rid of all these and stick to
+ startfile_prefix_spec exclusively. */
+ else if (*cross_compile == '0' || target_system_root)
+ {
+ if (*md_exec_prefix)
+ add_sysrooted_prefix (&startfile_prefixes, md_exec_prefix, "GCC",
+ PREFIX_PRIORITY_LAST, 0, NULL, 1);
if (*md_startfile_prefix)
- add_prefix (&startfile_prefixes, md_startfile_prefix, "GCC",
- PREFIX_PRIORITY_LAST, 0, NULL);
+ add_sysrooted_prefix (&startfile_prefixes, md_startfile_prefix,
+ "GCC", PREFIX_PRIORITY_LAST, 0, NULL, 1);
if (*md_startfile_prefix_1)
- add_prefix (&startfile_prefixes, md_startfile_prefix_1, "GCC",
- PREFIX_PRIORITY_LAST, 0, NULL);
+ add_sysrooted_prefix (&startfile_prefixes, md_startfile_prefix_1,
+ "GCC", PREFIX_PRIORITY_LAST, 0, NULL, 1);
/* If standard_startfile_prefix is relative, base it on
standard_exec_prefix. This lets us move the installed tree
as a unit. If GCC_EXEC_PREFIX is defined, base
standard_startfile_prefix on that as well. */
if (IS_ABSOLUTE_PATHNAME (standard_startfile_prefix))
- add_prefix (&startfile_prefixes, standard_startfile_prefix, "BINUTILS",
- PREFIX_PRIORITY_LAST, 0, NULL);
+ add_sysrooted_prefix (&startfile_prefixes,
+ standard_startfile_prefix, "BINUTILS",
+ PREFIX_PRIORITY_LAST, 0, NULL, 1);
else
{
if (gcc_exec_prefix)
add_prefix (&startfile_prefixes,
concat (gcc_exec_prefix, machine_suffix,
standard_startfile_prefix, NULL),
- NULL, PREFIX_PRIORITY_LAST, 0, NULL);
+ NULL, PREFIX_PRIORITY_LAST, 0, NULL, 1);
add_prefix (&startfile_prefixes,
concat (standard_exec_prefix,
machine_suffix,
standard_startfile_prefix, NULL),
- NULL, PREFIX_PRIORITY_LAST, 0, NULL);
+ NULL, PREFIX_PRIORITY_LAST, 0, NULL, 1);
}
- add_prefix (&startfile_prefixes, standard_startfile_prefix_1,
- "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL);
- add_prefix (&startfile_prefixes, standard_startfile_prefix_2,
- "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL);
+ add_sysrooted_prefix (&startfile_prefixes, standard_startfile_prefix_1,
+ "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL, 1);
+ add_sysrooted_prefix (&startfile_prefixes, standard_startfile_prefix_2,
+ "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL, 1);
#if 0 /* Can cause surprises, and one can use -B./ instead. */
add_prefix (&startfile_prefixes, "./", NULL,
- PREFIX_PRIORITY_LAST, 1, NULL);
+ PREFIX_PRIORITY_LAST, 1, NULL, 0);
#endif
}
- else
- {
- if (!IS_ABSOLUTE_PATHNAME (standard_startfile_prefix)
- && gcc_exec_prefix)
- add_prefix (&startfile_prefixes,
- concat (gcc_exec_prefix, machine_suffix,
- standard_startfile_prefix, NULL),
- "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL);
- }
-
- if (*startfile_prefix_spec != 0
- && do_spec_2 (startfile_prefix_spec) == 0
- && do_spec_1 (" ", 0, NULL) == 0)
- {
- int ndx;
- for (ndx = 0; ndx < argbuf_index; ndx++)
- add_prefix (&startfile_prefixes, argbuf[ndx], "BINUTILS",
- PREFIX_PRIORITY_LAST, 0, NULL);
- }
/* Process any user specified specs in the order given on the command
line. */
for (uptr = user_specs_head; uptr; uptr = uptr->next)
{
- char *filename = find_a_file (&startfile_prefixes, uptr->filename, R_OK);
+ char *filename = find_a_file (&startfile_prefixes, uptr->filename,
+ R_OK, 0);
read_specs (filename ? filename : uptr->filename, FALSE);
}
@@ -6193,7 +6297,7 @@ main (argc, argv)
if (print_prog_name)
{
- char *newname = find_a_file (&exec_prefixes, print_prog_name, X_OK);
+ char *newname = find_a_file (&exec_prefixes, print_prog_name, X_OK, 0);
printf ("%s\n", (newname ? newname : print_prog_name));
return (0);
}
@@ -6213,6 +6317,15 @@ main (argc, argv)
return (0);
}
+ if (print_multi_os_directory)
+ {
+ if (multilib_os_dir == NULL)
+ printf (".\n");
+ else
+ printf ("%s\n", multilib_os_dir);
+ return (0);
+ }
+
if (target_help_flag)
{
/* Print if any target specific options. */
@@ -6230,7 +6343,7 @@ main (argc, argv)
if (! verbose_flag)
{
printf (_("\nFor bug reporting instructions, please see:\n"));
- printf ("%s.\n", GCCBUGURL);
+ printf ("%s.\n", bug_report_url);
return (0);
}
@@ -6372,7 +6485,7 @@ main (argc, argv)
/* We'll use ld if we can't find collect2. */
if (! strcmp (linker_name_spec, "collect2"))
{
- char *s = find_a_file (&exec_prefixes, "collect2", X_OK);
+ char *s = find_a_file (&exec_prefixes, "collect2", X_OK, 0);
if (s == NULL)
linker_name_spec = "ld";
}
@@ -6405,7 +6518,7 @@ main (argc, argv)
if (print_help_list)
{
printf (("\nFor bug reporting instructions, please see:\n"));
- printf ("%s\n", GCCBUGURL);
+ printf ("%s\n", bug_report_url);
}
return (signal_count != 0 ? 2
@@ -6683,6 +6796,15 @@ next_member:
#undef SKIP_WHITE
}
+struct mdswitchstr
+{
+ const char *str;
+ int len;
+};
+
+static struct mdswitchstr *mdswitches;
+static int n_mdswitches;
+
/* Check whether a particular argument was used. The first time we
canonicalize the switches to keep only the ones we care about. */
@@ -6748,8 +6870,9 @@ used_arg (p, len)
xmalloc from calling fatal, and prevents us from re-executing this
block of code. */
mswitches
- = (struct mswitchstr *) xmalloc ((sizeof (struct mswitchstr))
- * (n_switches ? n_switches : 1));
+ = (struct mswitchstr *)
+ xmalloc (sizeof (struct mswitchstr)
+ * (n_mdswitches + (n_switches ? n_switches : 1)));
for (i = 0; i < n_switches; i++)
{
int xlen = strlen (switches[i].part1);
@@ -6765,6 +6888,57 @@ used_arg (p, len)
break;
}
}
+
+ /* Add MULTILIB_DEFAULTS switches too, as long as they were not present
+ on the command line nor any options mutually incompatible with
+ them. */
+ for (i = 0; i < n_mdswitches; i++)
+ {
+ const char *r;
+
+ for (q = multilib_options; *q != '\0'; q++)
+ {
+ while (*q == ' ')
+ q++;
+
+ r = q;
+ while (strncmp (q, mdswitches[i].str, mdswitches[i].len) != 0
+ || strchr (" /", q[mdswitches[i].len]) == NULL)
+ {
+ while (*q != ' ' && *q != '/' && *q != '\0')
+ q++;
+ if (*q != '/')
+ break;
+ q++;
+ }
+
+ if (*q != ' ' && *q != '\0')
+ {
+ while (*r != ' ' && *r != '\0')
+ {
+ q = r;
+ while (*q != ' ' && *q != '/' && *q != '\0')
+ q++;
+
+ if (used_arg (r, q - r))
+ break;
+
+ if (*q != '/')
+ {
+ mswitches[n_mswitches].str = mdswitches[i].str;
+ mswitches[n_mswitches].len = mdswitches[i].len;
+ mswitches[n_mswitches].replace = (char *) 0;
+ mswitches[n_mswitches].rep_len = 0;
+ n_mswitches++;
+ break;
+ }
+
+ r = q + 1;
+ }
+ break;
+ }
+ }
+ }
}
for (i = 0; i < n_mswitches; i++)
@@ -6779,25 +6953,11 @@ default_arg (p, len)
const char *p;
int len;
{
- const char *start, *end;
-
- for (start = multilib_defaults; *start != '\0'; start = end + 1)
- {
- while (*start == ' ' || *start == '\t')
- start++;
-
- if (*start == '\0')
- break;
-
- for (end = start + 1; *end != ' ' && *end != '\t' && *end != '\0'; end++)
- ;
-
- if ((end - start) == len && strncmp (p, start, len) == 0)
- return 1;
+ int i;
- if (*end == '\0')
- break;
- }
+ for (i = 0; i < n_mdswitches; i++)
+ if (len == mdswitches[i].len && ! strncmp (p, mdswitches[i].str, len))
+ return 1;
return 0;
}
@@ -6819,8 +6979,51 @@ set_multilib_dir ()
const char *p;
unsigned int this_path_len;
const char *this_path, *this_arg;
+ const char *start, *end;
int not_arg;
- int ok;
+ int ok, ndfltok, first;
+
+ n_mdswitches = 0;
+ start = multilib_defaults;
+ while (*start == ' ' || *start == '\t')
+ start++;
+ while (*start != '\0')
+ {
+ n_mdswitches++;
+ while (*start != ' ' && *start != '\t' && *start != '\0')
+ start++;
+ while (*start == ' ' || *start == '\t')
+ start++;
+ }
+
+ if (n_mdswitches)
+ {
+ int i = 0;
+
+ mdswitches
+ = (struct mdswitchstr *) xmalloc (sizeof (struct mdswitchstr)
+ * n_mdswitches);
+ for (start = multilib_defaults; *start != '\0'; start = end + 1)
+ {
+ while (*start == ' ' || *start == '\t')
+ start++;
+
+ if (*start == '\0')
+ break;
+
+ for (end = start + 1;
+ *end != ' ' && *end != '\t' && *end != '\0'; end++)
+ ;
+
+ obstack_grow (&multilib_obstack, start, end - start);
+ obstack_1grow (&multilib_obstack, 0);
+ mdswitches[i].str = obstack_finish (&multilib_obstack);
+ mdswitches[i++].len = end - start;
+
+ if (*end == '\0')
+ break;
+ }
+ }
p = multilib_exclusions;
while (*p != '\0')
@@ -6875,6 +7078,7 @@ set_multilib_dir ()
++p;
}
+ first = 1;
p = multilib_select;
while (*p != '\0')
{
@@ -6897,6 +7101,7 @@ set_multilib_dir ()
/* Check the arguments. */
ok = 1;
+ ndfltok = 1;
++p;
while (*p != ';')
{
@@ -6932,32 +7137,65 @@ set_multilib_dir ()
there is a more specific library which uses this
argument. If this argument is a default, we need not
consider that more specific library. */
- if (! default_arg (this_arg, p - this_arg))
- {
- ok = used_arg (this_arg, p - this_arg);
- if (not_arg)
- ok = ! ok;
- }
+ ok = used_arg (this_arg, p - this_arg);
+ if (not_arg)
+ ok = ! ok;
+
+ if (! ok)
+ ndfltok = 0;
+
+ if (default_arg (this_arg, p - this_arg))
+ ok = 1;
if (*p == ' ')
++p;
}
- if (ok)
+ if (ok && first)
{
if (this_path_len != 1
|| this_path[0] != '.')
{
char *new_multilib_dir = xmalloc (this_path_len + 1);
+ char *q;
+
strncpy (new_multilib_dir, this_path, this_path_len);
new_multilib_dir[this_path_len] = '\0';
+ q = strchr (new_multilib_dir, ':');
+ if (q != NULL)
+ *q = '\0';
multilib_dir = new_multilib_dir;
}
- break;
+ first = 0;
+ }
+
+ if (ndfltok)
+ {
+ const char *q = this_path, *end = this_path + this_path_len;
+
+ while (q < end && *q != ':')
+ q++;
+ if (q < end)
+ {
+ char *new_multilib_os_dir = xmalloc (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;
+ break;
+ }
}
++p;
}
+
+ if (multilib_dir == NULL && multilib_os_dir != NULL
+ && strcmp (multilib_os_dir, ".") == 0)
+ {
+ free ((char *) multilib_os_dir);
+ multilib_os_dir = NULL;
+ }
+ else if (multilib_dir != NULL && multilib_os_dir == NULL)
+ multilib_os_dir = multilib_dir;
}
/* Print out the multiple library subdirectory selection
@@ -6997,6 +7235,12 @@ print_multilib_info ()
++p;
}
+ /* 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] == ':')
+ skip = 1;
+
/* Check for matches with the multilib_exclusions. We don't bother
with the '!' in either list. If any of the exclusion rules match
all of its options with the select rule, we skip it. */
@@ -7138,7 +7382,7 @@ print_multilib_info ()
{
const char *p1;
- for (p1 = last_path; p1 < p; p1++)
+ for (p1 = last_path; p1 < p && *p1 != ':'; p1++)
putchar (*p1);
putchar (';');
}
diff --git a/gcc/gcov-io.h b/gcc/gcov-io.h
index 8e8aa4edd8a..aa788283d40 100644
--- a/gcc/gcov-io.h
+++ b/gcc/gcov-io.h
@@ -231,7 +231,7 @@ struct function_info
/* Information about a single object file. */
struct gcov_info
{
- unsigned version; /* expected version number */
+ unsigned long version; /* expected version number */
struct gcov_info *next; /* link to next, used by libgcc */
const char *filename; /* output file name */
diff --git a/gcc/gcov.c b/gcc/gcov.c
index 45e4c24f969..73e17a11f62 100644
--- a/gcc/gcov.c
+++ b/gcc/gcov.c
@@ -336,7 +336,7 @@ print_usage (error_p)
fnotice (file, " -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n");
fnotice (file, " -p, --preserve-paths Preserve all pathname components\n");
fnotice (file, "\nFor bug reporting instructions, please see:\n%s.\n",
- GCCBUGURL);
+ bug_report_url);
exit (status);
}
diff --git a/gcc/gcse.c b/gcc/gcse.c
index a20409c5656..4d93f643e6a 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -4245,6 +4245,7 @@ cprop_insn (insn, alter_jumps)
/* LIBCALL_SP is a zero-terminated array of insns at the end of a libcall;
their REG_EQUAL notes need updating. */
+
static bool
do_local_cprop (x, insn, alter_jumps, libcall_sp)
rtx x;
@@ -4254,10 +4255,12 @@ do_local_cprop (x, insn, alter_jumps, libcall_sp)
{
rtx newreg = NULL, newcnst = NULL;
- /* Rule out USE instructions and ASM statements as we don't want to change the hard registers mentioned. */
+ /* Rule out USE instructions and ASM statements as we don't want to
+ change the hard registers mentioned. */
if (GET_CODE (x) == REG
&& (REGNO (x) >= FIRST_PSEUDO_REGISTER
- || (GET_CODE (PATTERN (insn)) != USE && asm_noperands (PATTERN (insn)) < 0)))
+ || (GET_CODE (PATTERN (insn)) != USE
+ && asm_noperands (PATTERN (insn)) < 0)))
{
cselib_val *val = cselib_lookup (x, GET_MODE (x), 0);
struct elt_loc_list *l;
diff --git a/gcc/genautomata.c b/gcc/genautomata.c
index c97fffc3c37..a5a5bdab7b1 100644
--- a/gcc/genautomata.c
+++ b/gcc/genautomata.c
@@ -221,7 +221,7 @@ static regexp_t gen_regexp_sequence PARAMS ((char *));
static regexp_t gen_regexp PARAMS ((char *));
static unsigned string_hash PARAMS ((const char *));
-static unsigned automaton_decl_hash PARAMS ((const void *));
+static hashval_t automaton_decl_hash PARAMS ((const void *));
static int automaton_decl_eq_p PARAMS ((const void *,
const void *));
static decl_t insert_automaton_decl PARAMS ((decl_t));
@@ -229,7 +229,7 @@ static decl_t find_automaton_decl PARAMS ((char *));
static void initiate_automaton_decl_table PARAMS ((void));
static void finish_automaton_decl_table PARAMS ((void));
-static unsigned insn_decl_hash PARAMS ((const void *));
+static hashval_t insn_decl_hash PARAMS ((const void *));
static int insn_decl_eq_p PARAMS ((const void *,
const void *));
static decl_t insert_insn_decl PARAMS ((decl_t));
@@ -237,7 +237,7 @@ static decl_t find_insn_decl PARAMS ((char *));
static void initiate_insn_decl_table PARAMS ((void));
static void finish_insn_decl_table PARAMS ((void));
-static unsigned decl_hash PARAMS ((const void *));
+static hashval_t decl_hash PARAMS ((const void *));
static int decl_eq_p PARAMS ((const void *,
const void *));
static decl_t insert_decl PARAMS ((decl_t));
@@ -303,7 +303,7 @@ static void output_cycle_reservs PARAMS ((FILE *, reserv_sets_t,
static void output_reserv_sets PARAMS ((FILE *, reserv_sets_t));
static state_t get_free_state PARAMS ((int, automaton_t));
static void free_state PARAMS ((state_t));
-static unsigned state_hash PARAMS ((const void *));
+static hashval_t state_hash PARAMS ((const void *));
static int state_eq_p PARAMS ((const void *, const void *));
static state_t insert_state PARAMS ((state_t));
static void set_state_reserv PARAMS ((state_t, int, int));
@@ -325,7 +325,7 @@ static void finish_arcs PARAMS ((void));
static automata_list_el_t get_free_automata_list_el PARAMS ((void));
static void free_automata_list_el PARAMS ((automata_list_el_t));
static void free_automata_list PARAMS ((automata_list_el_t));
-static unsigned automata_list_hash PARAMS ((const void *));
+static hashval_t automata_list_hash PARAMS ((const void *));
static int automata_list_eq_p PARAMS ((const void *, const void *));
static void initiate_automata_lists PARAMS ((void));
static void automata_list_start PARAMS ((void));
@@ -2095,7 +2095,7 @@ string_hash (string)
/* The function evaluates hash value of an automaton declaration. The
function is used by abstract data `hashtab'. The function returns
hash value (0..UINT_MAX) of given automaton declaration. */
-static unsigned
+static hashval_t
automaton_decl_hash (automaton_decl)
const void *automaton_decl;
{
@@ -2199,7 +2199,7 @@ finish_automaton_decl_table ()
/* The function evaluates hash value of an insn declaration. The
function is used by abstract data `hashtab'. The function returns
hash value (0..UINT_MAX) of given insn declaration. */
-static unsigned
+static hashval_t
insn_decl_hash (insn_decl)
const void *insn_decl;
{
@@ -2302,7 +2302,7 @@ finish_insn_decl_table ()
/* The function evaluates hash value of a declaration. The function
is used by abstract data `hashtab'. The function returns hash
value (0..UINT_MAX) of given declaration. */
-static unsigned
+static hashval_t
decl_hash (decl)
const void *decl;
{
@@ -3979,7 +3979,7 @@ free_state (state)
simply hash value of the corresponding reservation set. Otherwise
it is formed from hash values of the component deterministic
states. One more key is order number of state automaton. */
-static unsigned
+static hashval_t
state_hash (state)
const void *state;
{
@@ -4351,7 +4351,7 @@ free_automata_list (automata_list)
}
/* Hash value of AUTOMATA_LIST. */
-static unsigned
+static hashval_t
automata_list_hash (automata_list)
const void *automata_list;
{
@@ -7987,7 +7987,7 @@ output_max_insn_queue_index_def ()
function *output_automata_list_code. */
static void
output_insn_code_cases (output_automata_list_code)
- void (*output_automata_list_code) (automata_list_el_t);
+ void (*output_automata_list_code) PARAMS ((automata_list_el_t));
{
decl_t decl, decl2;
int i, j;
diff --git a/gcc/gengtype.c b/gcc/gengtype.c
index 6770436119b..679953a8d08 100644
--- a/gcc/gengtype.c
+++ b/gcc/gengtype.c
@@ -360,7 +360,7 @@ static const char * const rtx_format[NUM_RTX_CODE] = {
#undef DEF_RTL_EXPR
};
-static char rtx_next[NUM_RTX_CODE];
+static int rtx_next[NUM_RTX_CODE];
/* Generate the contents of the rtx_next array. This really doesn't belong
in gengtype at all, but it's needed for adjust_field_rtx_def. */
@@ -528,8 +528,8 @@ adjust_field_rtx_def (t, opt)
else
{
error_at_line (&lexer_line,
- "rtx type `%s' has `0' in position %d, can't handle",
- rtx_name[i], aindex);
+ "rtx type `%s' has `0' in position %lu, can't handle",
+ rtx_name[i], (unsigned long) aindex);
t = &string_type;
subname = "rtint";
}
@@ -571,9 +571,9 @@ adjust_field_rtx_def (t, opt)
default:
error_at_line (&lexer_line,
- "rtx type `%s' has `%c' in position %d, can't handle",
+ "rtx type `%s' has `%c' in position %lu, can't handle",
rtx_name[i], rtx_format[i][aindex],
- aindex);
+ (unsigned long)aindex);
t = &string_type;
subname = "rtint";
break;
@@ -582,7 +582,8 @@ adjust_field_rtx_def (t, opt)
subfields = xmalloc (sizeof (*subfields));
subfields->next = old_subf;
subfields->type = t;
- subfields->name = xasprintf ("[%d].%s", aindex, subname);
+ subfields->name = xasprintf ("[%lu].%s", (unsigned long)aindex,
+ subname);
subfields->line.file = __FILE__;
subfields->line.line = __LINE__;
if (t == note_union_tp)
@@ -1450,7 +1451,7 @@ output_mangled_typename (of, t)
case TYPE_STRUCT:
case TYPE_UNION:
case TYPE_LANG_STRUCT:
- oprintf (of, "%d%s", strlen (t->u.s.tag), t->u.s.tag);
+ oprintf (of, "%lu%s", (unsigned long) strlen (t->u.s.tag), t->u.s.tag);
break;
case TYPE_PARAM_STRUCT:
{
diff --git a/gcc/genmultilib b/gcc/genmultilib
index 3cbfaa1ebab..ca3b71bdfa3 100644
--- a/gcc/genmultilib
+++ b/gcc/genmultilib
@@ -63,6 +63,14 @@
# for the rule to exclude a set. Options can be preceded with a '!' to
# match a logical NOT.
+# The optional sevenths argument is a list of OS subdirectory names.
+# The format is the same as of the second argument.
+# The difference is that second argument describes multilib directories
+# in GCC conventions, while this one the OS multilib convention.
+
+# The last option should be "yes" if multilibs are enabled. If it is not
+# "yes", all GCC multilib dir names will be ".".
+
# The output looks like
# #define MULTILIB_MATCHES "\
# SUBDIRECTORY OPTIONS;\
@@ -79,17 +87,18 @@
# Here is an example (this is from the actual sparc64 case):
# genmultilib 'm64/m32 mno-app-regs|mcmodel=medany' '64 32 alt'
# 'mcmodel?medany=mcmodel?medmid' 'm32/mno-app-regs* m32/mcmodel=*'
-# 'm32/!m64/mno-app-regs m32/!m64/mcmodel=medany'
+# '' 'm32/!m64/mno-app-regs m32/!m64/mcmodel=medany'
+# '../lib64 ../lib32 alt' yes
# This produces:
# ". !m64 !m32 !mno-app-regs !mcmodel=medany;",
-# "64 m64 !m32 !mno-app-regs !mcmodel=medany;",
-# "32 !m64 m32 !mno-app-regs !mcmodel=medany;",
+# "64:../lib64 m64 !m32 !mno-app-regs !mcmodel=medany;",
+# "32:../lib32 !m64 m32 !mno-app-regs !mcmodel=medany;",
# "alt !m64 !m32 mno-app-regs mcmodel=medany;",
# "alt !m64 !m32 mno-app-regs !mcmodel=medany;",
# "alt !m64 !m32 !mno-app-regs mcmodel=medany;",
-# "64/alt m64 !m32 mno-app-regs mcmodel=medany;",
-# "64/alt m64 !m32 mno-app-regs !mcmodel=medany;",
-# "64/alt m64 !m32 !mno-app-regs mcmodel=medany;",
+# "64/alt:../lib64/alt m64 !m32 mno-app-regs mcmodel=medany;",
+# "64/alt:../lib64/alt m64 !m32 mno-app-regs !mcmodel=medany;",
+# "64/alt:../lib64/alt m64 !m32 !mno-app-regs mcmodel=medany;",
#
# The effect is that `gcc -mno-app-regs' (for example) will append "alt"
# to the directory name when searching for libraries or startup files and
@@ -106,6 +115,8 @@ matches=$3
exceptions=$4
extra=$5
exclusions=$6
+osdirnames=$7
+enable_multilib=$8
echo "static const char *const multilib_raw[] = {"
@@ -202,6 +213,29 @@ if [ -n "${dirnames}" ]; then
done
fi
+# Construct a sed pattern which will convert option names to OS directory
+# names.
+toosdirnames=
+if [ -n "${osdirnames}" ]; then
+ set x ${osdirnames}
+ shift
+ for set in ${options}; do
+ for opts in `echo ${set} | sed -e 's|/| |'g`; do
+ patt="/"
+ for opt in `echo ${opts} | sed -e 's_|_ _'g`; do
+ if [ "$1" != "${opt}" ]; then
+ toosdirnames="${toosdirnames} -e s|/${opt}/|/${1}/|g"
+ patt="${patt}${1}/"
+ if [ "${patt}" != "/${1}/" ]; then
+ toosdirnames="${toosdirnames} -e s|${patt}|/${1}/|g"
+ fi
+ fi
+ done
+ shift
+ done
+ done
+fi
+
# We need another recursive shell script to correctly handle positive
# matches. If we are invoked as
# genmultilib "opt1 opt2" "" "opt1=nopt1 opt2=nopt2"
@@ -257,6 +291,25 @@ for combo in ${combinations}; do
# Remove the leading and trailing slashes.
dirout=`echo ${dirout} | sed -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'`
+ if [ "x${enable_multilib}" != xyes ]; then
+ dirout=".:${osdirout}"
+ else
+ dirout="${dirout}:${osdirout}"
+ fi
+ else
+ if [ "x${enable_multilib}" != xyes ]; then
+ # genmultilib with --disable-multilib should be
+ # called with '' '' '' '' '' '' '' no
+ # if MULTILIB_OSDIRNAMES is empty.
+ exit 1
+ fi
+ fi
+
# Look through the options. We must output each option that is
# present, and negate each option that is not present.
optout=
@@ -313,6 +366,11 @@ done
echo "NULL"
echo "};"
+# Output the options now
+moptions=`echo ${options} | sed -e 's,[ ][ ]*, ,g'`
+echo ""
+echo "static const char *multilib_options = \"${moptions}\";"
+
rm -f tmpmultilib2
exit 0
diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h
index d122a7dac80..2cd15899af1 100644
--- a/gcc/ginclude/stddef.h
+++ b/gcc/ginclude/stddef.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -53,9 +53,13 @@ Boston, MA 02111-1307, USA. */
/* On 4.3bsd-net2, make sure ansi.h is included, so we have
one less case to deal with in the following. */
-#if defined (__BSD_NET2__) || defined (____386BSD____) || defined (__FreeBSD__) || defined(__NetBSD__)
+#if defined (__BSD_NET2__) || defined (____386BSD____) || (defined (__FreeBSD__) && (__FreeBSD__ < 5)) || defined(__NetBSD__)
#include <machine/ansi.h>
#endif
+/* On FreeBSD 5, machine/ansi.h does not exist anymore... */
+#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
+#include <sys/_types.h>
+#endif
/* In 4.3bsd-net2, machine/ansi.h defines these symbols, which are
defined if the corresponding type is *not* defined.
@@ -176,6 +180,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
#ifndef _SIZE_T_DEFINED_
#ifndef _SIZE_T_DEFINED
#ifndef _BSD_SIZE_T_DEFINED_ /* Darwin */
+#ifndef _SIZE_T_DECLARED /* FreeBSD 5 */
#ifndef ___int_size_t_h
#ifndef _GCC_SIZE_T
#ifndef _SIZET_
@@ -192,10 +197,15 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
#define _SIZE_T_DEFINED_
#define _SIZE_T_DEFINED
#define _BSD_SIZE_T_DEFINED_ /* Darwin */
+#define _SIZE_T_DECLARED /* FreeBSD 5 */
#define ___int_size_t_h
#define _GCC_SIZE_T
#define _SIZET_
+#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
+/* __size_t is a typedef on FreeBSD 5!, must not trash it. */
+#else
#define __size_t
+#endif
#ifndef __SIZE_TYPE__
#define __SIZE_TYPE__ long unsigned int
#endif
@@ -209,6 +219,7 @@ typedef long ssize_t;
#endif /* _SIZET_ */
#endif /* _GCC_SIZE_T */
#endif /* ___int_size_t_h */
+#endif /* _SIZE_T_DECLARED */
#endif /* _BSD_SIZE_T_DEFINED_ */
#endif /* _SIZE_T_DEFINED */
#endif /* _SIZE_T_DEFINED_ */
@@ -243,6 +254,7 @@ typedef long ssize_t;
#ifndef _BSD_WCHAR_T_
#ifndef _BSD_WCHAR_T_DEFINED_ /* Darwin */
#ifndef _BSD_RUNE_T_DEFINED_ /* Darwin */
+#ifndef _WCHAR_T_DECLARED /* FreeBSD 5 */
#ifndef _WCHAR_T_DEFINED_
#ifndef _WCHAR_T_DEFINED
#ifndef _WCHAR_T_H
@@ -263,6 +275,7 @@ typedef long ssize_t;
#define ___int_wchar_t_h
#define __INT_WCHAR_T_H
#define _GCC_WCHAR_T
+#define _WCHAR_T_DECLARED
/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other
@@ -281,7 +294,7 @@ typedef long ssize_t;
typedef _BSD_RUNE_T_ rune_t;
#define _BSD_WCHAR_T_DEFINED_
#define _BSD_RUNE_T_DEFINED_ /* Darwin */
-#if defined (__FreeBSD__)
+#if defined (__FreeBSD__) && (__FreeBSD__ < 5)
/* Why is this file so hard to maintain properly? In constrast to
the comment above regarding BSD/386 1.1, on FreeBSD for as long
as the symbol has existed, _BSD_RUNE_T_ must not stay defined or
@@ -291,6 +304,19 @@ typedef _BSD_RUNE_T_ rune_t;
#endif
#endif
#endif
+/* FreeBSD 5 can't be handled well using "traditional" logic above
+ since it no longer defines _BSD_RUNE_T_ yet still desires to export
+ rune_t in some cases... */
+#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
+#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
+#if __BSD_VISIBLE
+#ifndef _RUNE_T_DECLARED
+typedef __rune_t rune_t;
+#define _RUNE_T_DECLARED
+#endif
+#endif
+#endif
+#endif
#ifndef __WCHAR_TYPE__
#define __WCHAR_TYPE__ int
@@ -304,6 +330,7 @@ typedef __WCHAR_TYPE__ wchar_t;
#endif
#endif
#endif
+#endif /* _WCHAR_T_DECLARED */
#endif /* _BSD_RUNE_T_DEFINED_ */
#endif
#endif
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 4c90642b822..562b3749048 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,76 @@
+2002-10-20 Ranjit Mathew <rmathew@hotmail.com>
+
+ * gcj.texi: Added item describing the GCJ runtime property
+ "gnu.gcj.progname".
+
+2002-10-15 Richard Henderson <rth@redhat.com>
+
+ * jcf-parse.c (get_constant): Fix type warning.
+
+2002-10-15 Andrew Haley <aph@redhat.com>
+
+ * java-tree.h (java_inlining_merge_static_initializers): Declare.
+ (java_inlining_map_static_initializers): Declare.
+
+2002-10-14 Andrew Haley <aph@redhat.com>
+
+ * tree-inline.c (remap_block): All local class initialization
+ flags go in the outermost scope.
+ (expand_call_inline): Call java_inlining_map_static_initializers.
+ (expand_call_inline): Call java_inlining_merge_static_initializers.
+ * java/lang.c (merge_init_test_initialization): New.
+ (java_inlining_merge_static_initializers): New.
+ (inline_init_test_initialization): New.
+ (java_inlining_map_static_initializers): New.
+
+2002-10-11 Mark Wielaard <mark@klomp.org>
+
+ * gcj.texi (Compatibility): Add Limitations and Extensions section.
+
+2002-10-10 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * class.c (JAVA_TREEHASHHASH_H): Use htab_hash_pointer.
+
+2002-10-09 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * parse.y (merge_string_cste): Add parentheses around & within |.
+
+2002-10-08 Tom Tromey <tromey@redhat.com>
+
+ * parse.y (variable_declarator_id): Simplify error path for
+ array declarator error. For PR java/8003.
+
+2002-10-08 Zack Weinberg <zack@codesourcery.com>
+
+ * gjavah.c, jcf-dump.c, jv-scan.c: Globally replace GCCBUGURL with
+ bug_report_url.
+
+2002-10-08 Andrew Haley <aph@redhat.com>
+
+ * parse.y (attach_init_test_initialization_flags): Check for
+ error_mark_node.
+
+2002-10-07 Anthony Green <green@redhat.com>
+
+ * parse.y (merge_string_cste): Fix bug in string concatenation.
+
+2002-10-03 Michael Koch <konqueror@gmx.de>
+
+ * gcj.texi (Standard properties):
+ Change default of java.awt.toolkit to gnu.awt.gtk.GtkToolkit.
+
+2002-10-02 Roger Sayle <roger@eyesopen.com>
+
+ PR optimization/6627
+ * lang.c (java_init): If storing the vbit in function
+ pointers, ensure that force_align_functions_log is atleast
+ one to aid compatability with g++ vtables.
+
+2002-10-01 Nathan Sidwell <nathan@codesourcery.com>
+
+ * jcf-dump.c (print_constant, case CONSTANT_float): Don't fall
+ foul of type-based aliasing.
+
2002-09-30 Anthony Green <green@redhat.com>
* gcj.texi (Invoking jv-scan): Fix texinfo.
@@ -24,7 +97,7 @@
2002-09-21 Richard Henderson <rth@redhat.com>
- * jcf-parse.c (get_constant): Decode from IEEE no matter
+ * jcf-parse.c (get_constant): Decode from IEEE no matter
what the target format.
2002-09-20 Kazu Hirata <kazu@cs.umass.edu>
@@ -151,7 +224,7 @@
2002-08-08 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
- * jcf-write.c (get_access_flags): Return correct access flags for
+ * jcf-write.c (get_access_flags): Return correct access flags for
private and protected inner classes.
2002-08-08 Nathan Sidwell <nathan@codesourcery.com>
@@ -294,10 +367,10 @@
2002-06-10 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
- * gjavah.c (throwable_p): Accept argument as either a classname or
+ * gjavah.c (throwable_p): Accept argument as either a classname or
signature fragment. Create null-terminated classname string for super
when calling itself recursively.
- (decode_signature_piece): Skip first character from class name
+ (decode_signature_piece): Skip first character from class name
signature when calling throwable_p.
2002-06-08 H.J. Lu (hjl@gnu.org)
diff --git a/gcc/java/class.c b/gcc/java/class.c
index ca7acf0f8b4..c412283158c 100644
--- a/gcc/java/class.c
+++ b/gcc/java/class.c
@@ -2269,7 +2269,7 @@ static int java_treetreehash_compare PARAMS ((const void *, const void *));
/* A hash table mapping trees to trees. Used generally. */
-#define JAVA_TREEHASHHASH_H(t) ((hashval_t) (t))
+#define JAVA_TREEHASHHASH_H(t) (htab_hash_pointer (t))
static hashval_t
java_treetreehash_hash (k_p)
diff --git a/gcc/java/gcj.texi b/gcc/java/gcj.texi
index a3cc25a201e..a4852205393 100644
--- a/gcc/java/gcj.texi
+++ b/gcc/java/gcj.texi
@@ -487,14 +487,21 @@ specifications. However, limited manpower and incomplete and unclear
documentation work against us. So, there are caveats to using
@command{gcj}.
+@menu
+* Limitations::
+* Extensions::
+@end menu
+
+@node Limitations
+@section Standard features not yet supported
+
This list of compatibility issues is by no means complete.
@itemize @bullet
@item
-@command{gcj} implements the JDK 1.1 language. It supports inner classes,
-though these are known to still be buggy. It does not yet support the
-Java 2 @code{strictfp} keyword (it recognizes the keyword but ignores
-it).
+@command{gcj} implements the JDK 1.2 language. It supports inner classes
+and the new 1.4 @code{assert} keyword. It does not yet support the Java 2
+@code{strictfp} keyword (it recognizes the keyword but ignores it).
@item
@code{libgcj} is largely compatible with the JDK 1.2 libraries.
@@ -510,6 +517,31 @@ affects you, it probably makes sense to report it so that we can discuss
the appropriate response.
@end itemize
+@node Extensions
+@section Extra features unique to gcj
+
+The main feature of @command{gcj} is that it can compile programs written in
+the Java programming language to native code. Most extensions that have been
+added are to facilitate this functionality.
+
+@itemize @bullet
+@item
+@command{gcj} makes it easy and efficient to mix code written in Java and C++.
+@xref{About CNI}, for more info on how to use this in your programs.
+
+@item
+When you compile your classes into a shared library they can be automatically
+loaded by the @code{libgcj} system classloader. When trying to load a class
+@code{gnu.pkg.SomeClass} the system classloader will first try to load the
+shared library @file{lib-gnu-pkg-SomeClass.so}, if that fails to load the
+class then it will try to load @file{lib-gnu-pkg.so} and finally when the
+class is still not loaded it will try to load @file{lib-gnu.so}. Note that
+all @samp{.}s will be transformed into @samp{-}s and that searching
+for inner classes starts with their outermost outer class. If the class
+cannot be found this way the system classloader tries to use
+the @code{libgcj} bytecode interpreter to load the class from the standard
+classpath.
+@end itemize
@node Invoking gcjh
@chapter Invoking gcjh
@@ -2117,7 +2149,7 @@ Returned by @code{java.awt.Window.getWarningString()} when the window is
@item awt.toolkit
The class name used for initializing the default @code{java.awt.Toolkit}.
-Defaults to @code{gnu.java.awt.peer.gtk.GtkToolkit}.
+Defaults to @code{gnu.awt.gtk.GtkToolkit}.
@end table
@@ -2158,6 +2190,9 @@ then the empty string. When set all newly created @code{DatagramSocket}s will
try to load a class @code{java.net.[impl.prefix]DatagramSocketImpl} instead of
the normal @code{java.net.PlainDatagramSocketImpl}.
+@item gnu.gcj.progname
+The name that was used to invoked the program.
+
@item gnu.gcj.runtime.NameFinder.demangle
Whether names in a stack trace should be demangled. Defaults to @code{true}.
diff --git a/gcc/java/gjavah.c b/gcc/java/gjavah.c
index d1688400aee..53099ad3876 100644
--- a/gcc/java/gjavah.c
+++ b/gcc/java/gjavah.c
@@ -2289,7 +2289,7 @@ help ()
/* We omit -MG until it is implemented. */
printf ("\n");
printf ("For bug reporting instructions, please see:\n");
- printf ("%s.\n", GCCBUGURL);
+ printf ("%s.\n", bug_report_url);
exit (0);
}
diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h
index 794ebc6e04e..4001bdf3b68 100644
--- a/gcc/java/java-tree.h
+++ b/gcc/java/java-tree.h
@@ -1292,6 +1292,8 @@ extern tree decl_constant_value PARAMS ((tree));
struct rtx_def * java_expand_expr PARAMS ((tree, rtx, enum machine_mode,
int));
#endif
+extern void java_inlining_merge_static_initializers PARAMS ((tree, void *));
+extern void java_inlining_map_static_initializers PARAMS ((tree, void *));
#define DECL_FINAL(DECL) DECL_LANG_FLAG_3 (DECL)
diff --git a/gcc/java/jcf-dump.c b/gcc/java/jcf-dump.c
index 13a177df066..72f1a5360b4 100644
--- a/gcc/java/jcf-dump.c
+++ b/gcc/java/jcf-dump.c
@@ -504,10 +504,18 @@ DEFUN(print_constant, (out, jcf, index, verbosity),
break;
case CONSTANT_Float:
{
- jfloat fnum = JPOOL_FLOAT (jcf, index);
- fprintf (out, "%s%.10g", verbosity > 0 ? "Float " : "", (double) fnum);
+ union
+ {
+ jfloat f;
+ int32 i;
+ } pun;
+
+ pun.f = JPOOL_FLOAT (jcf, index);
+ fprintf (out, "%s%.10g",
+ verbosity > 0 ? "Float " : "", (double) pun.f);
if (verbosity > 1)
- fprintf (out, ", bits = 0x%08lx", (long) (* (int32 *) &fnum));
+ fprintf (out, ", bits = 0x%08lx", (long) pun.i);
+
break;
}
case CONSTANT_Double:
@@ -821,7 +829,7 @@ help ()
printf (" -v, --verbose Print extra information while running\n");
printf ("\n");
printf ("For bug reporting instructions, please see:\n");
- printf ("%s.\n", GCCBUGURL);
+ printf ("%s.\n", bug_report_url);
exit (0);
}
diff --git a/gcc/java/jcf-parse.c b/gcc/java/jcf-parse.c
index f4bcd998c69..51411199356 100644
--- a/gcc/java/jcf-parse.c
+++ b/gcc/java/jcf-parse.c
@@ -315,7 +315,7 @@ get_constant (jcf, index)
else
buf[0] = lo, buf[1] = hi;
- real_from_target_fmt (&d, &buf, &ieee_double_format);
+ real_from_target_fmt (&d, buf, &ieee_double_format);
value = build_real (double_type_node, d);
break;
}
diff --git a/gcc/java/jv-scan.c b/gcc/java/jv-scan.c
index 73eb3f4d535..f92acebd7f4 100644
--- a/gcc/java/jv-scan.c
+++ b/gcc/java/jv-scan.c
@@ -115,7 +115,7 @@ help ()
printf (" --version Print version number, then exit\n");
printf ("\n");
printf ("For bug reporting instructions, please see:\n");
- printf ("%s.\n", GCCBUGURL);
+ printf ("%s.\n", bug_report_url);
exit (0);
}
diff --git a/gcc/java/lang.c b/gcc/java/lang.c
index c6fbb44ddd8..6f19961f65c 100644
--- a/gcc/java/lang.c
+++ b/gcc/java/lang.c
@@ -41,6 +41,7 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */
#include "ggc.h"
#include "diagnostic.h"
#include "tree-inline.h"
+#include "splay-tree.h"
struct string_option
{
@@ -62,15 +63,18 @@ static void java_print_error_function PARAMS ((diagnostic_context *,
static int process_option_with_no PARAMS ((const char *,
const struct string_option *,
int));
-static tree java_tree_inlining_walk_subtrees PARAMS ((tree *,
- int *,
- walk_tree_fn,
- void *,
- void *));
+static tree java_tree_inlining_walk_subtrees PARAMS ((tree *,
+ int *,
+ walk_tree_fn,
+ void *,
+ void *));
static int java_unsafe_for_reeval PARAMS ((tree));
+static int merge_init_test_initialization PARAMS ((void * *,
+ void *));
+static int inline_init_test_initialization PARAMS ((void * *,
+ void *));
static bool java_can_use_bit_fields_p PARAMS ((void));
-
#ifndef TARGET_OBJECT_SUFFIX
# define TARGET_OBJECT_SUFFIX ".o"
#endif
@@ -516,6 +520,13 @@ java_init (filename)
if (flag_inline_functions)
flag_inline_trees = 1;
+ /* Force minimum function alignment if g++ uses the least significant
+ bit of function pointers to store the virtual bit. This is required
+ to keep vtables compatible. */
+ if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
+ && force_align_functions_log < 1)
+ force_align_functions_log = 1;
+
/* Open input file. */
if (filename == 0 || !strcmp (filename, "-"))
@@ -921,4 +932,113 @@ java_unsafe_for_reeval (t)
return -1;
}
+/* Every call to a static constructor has an associated boolean
+ variable which is in the outermost scope of the calling method.
+ This variable is used to avoid multiple calls to the static
+ constructor for each class.
+
+ It looks somthing like this:
+
+ foo ()
+ {
+ boolean dummy = OtherClass.is_initialized;
+
+ ...
+
+ if (! dummy)
+ OtherClass.initialize();
+
+ ... use OtherClass.data ...
+ }
+
+ Each of these boolean variables has an entry in the
+ DECL_FUNCTION_INIT_TEST_TABLE of a method. When inlining a method
+ we must merge the DECL_FUNCTION_INIT_TEST_TABLE from the function
+ being linlined and create the boolean variables in the outermost
+ scope of the method being inlined into. */
+
+/* Create a mapping from a boolean variable in a method being inlined
+ to one in the scope of the method being inlined into. */
+
+static int
+merge_init_test_initialization (entry, x)
+ void * * entry;
+ void * x;
+{
+ struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry;
+ splay_tree decl_map = (splay_tree)x;
+ splay_tree_node n;
+ tree *init_test_decl;
+
+ /* See if we have remapped this declaration. If we haven't there's
+ a bug in the inliner. */
+ n = splay_tree_lookup (decl_map, (splay_tree_key) ite->value);
+ if (! n)
+ abort ();
+
+ /* Create a new entry for the class and its remapped boolean
+ variable. If we already have a mapping for this class we've
+ already initialized it, so don't overwrite the value. */
+ init_test_decl = java_treetreehash_new
+ (DECL_FUNCTION_INIT_TEST_TABLE (current_function_decl), ite->key);
+ if (!*init_test_decl)
+ *init_test_decl = (tree)n->value;
+
+ return true;
+}
+
+/* Merge the DECL_FUNCTION_INIT_TEST_TABLE from the function we're
+ inlining. */
+
+void
+java_inlining_merge_static_initializers (fn, decl_map)
+ tree fn;
+ void *decl_map;
+{
+ htab_traverse
+ (DECL_FUNCTION_INIT_TEST_TABLE (fn),
+ merge_init_test_initialization, decl_map);
+}
+
+/* Lookup a DECL_FUNCTION_INIT_TEST_TABLE entry in the method we're
+ inlining into. If we already have a corresponding entry in that
+ class we don't need to create another one, so we create a mapping
+ from the variable in the inlined class to the corresponding
+ pre-existing one. */
+
+static int
+inline_init_test_initialization (entry, x)
+ void * * entry;
+ void * x;
+{
+ struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry;
+ splay_tree decl_map = (splay_tree)x;
+
+ tree h = java_treetreehash_find
+ (DECL_FUNCTION_INIT_TEST_TABLE (current_function_decl), ite->key);
+ if (! h)
+ return true;
+
+ splay_tree_insert (decl_map,
+ (splay_tree_key) ite->value,
+ (splay_tree_value) h);
+
+ return true;
+}
+
+/* Look up the boolean variables in the DECL_FUNCTION_INIT_TEST_TABLE
+ of a method being inlined. For each hone, if we already have a
+ variable associated with the same class in the method being inlined
+ into, create a new mapping for it. */
+
+void
+java_inlining_map_static_initializers (fn, decl_map)
+ tree fn;
+ void *decl_map;
+{
+ htab_traverse
+ (DECL_FUNCTION_INIT_TEST_TABLE (fn),
+ inline_init_test_initialization, decl_map);
+}
+
#include "gt-java-lang.h"
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index 217f74cda92..24cf2ab2e93 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -1000,12 +1000,7 @@ variable_declarator_id:
{yyerror ("Invalid declaration"); DRECOVER(vdi);}
| variable_declarator_id OSB_TK error
{
- tree node = java_lval.node;
- if (node && (TREE_CODE (node) == INTEGER_CST
- || TREE_CODE (node) == EXPR_WITH_FILE_LOCATION))
- yyerror ("Can't specify array dimension in a declaration");
- else
- yyerror ("']' expected");
+ yyerror ("']' expected");
DRECOVER(vdi);
}
| variable_declarator_id CSB_TK error
@@ -5206,7 +5201,9 @@ obtain_incomplete_type (type_name)
else
abort ();
+ /* Workaround from build_pointer_type for incomplete types. */
BUILD_PTR_FROM_NAME (ptr, name);
+ TYPE_MODE (ptr) = ptr_mode;
layout_type (ptr);
return ptr;
@@ -7474,7 +7471,7 @@ source_end_java_method ()
patched. Dump it to a file if the user requested it. */
dump_java_tree (TDI_original, fndecl);
- java_optimize_inline (fndecl);
+ java_optimize_inline (fndecl);
/* Generate function's code */
if (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl))
@@ -8132,9 +8129,9 @@ java_expand_method_bodies (class)
/* Save the function for inlining. */
if (flag_inline_trees)
- DECL_SAVED_TREE (decl) =
+ DECL_SAVED_TREE (decl) =
BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (decl));
-
+
/* It's time to assign the variable flagging static class
initialization based on which classes invoked static methods
are definitely initializing. This should be flagged. */
@@ -13773,8 +13770,19 @@ merge_string_cste (op1, op2, after)
string = null_pointer;
else if (TREE_TYPE (op2) == char_type_node)
{
- ch[0] = (char )TREE_INT_CST_LOW (op2);
- ch[1] = '\0';
+ /* Convert the character into UTF-8. */
+ unsigned char c = (unsigned char) TREE_INT_CST_LOW (op2);
+ unsigned char *p = (unsigned char *) ch;
+ if (0x01 <= c
+ && c <= 0x7f)
+ *p++ = c;
+ else
+ {
+ *p++ = c >> 6 | 0xc0;
+ *p++ = (c & 0x3f) | 0x80;
+ }
+ *p = '\0';
+
string = ch;
}
else
@@ -16210,8 +16218,11 @@ attach_init_test_initialization_flags (entry, ptr)
tree block = (tree)ptr;
struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry;
- TREE_CHAIN (ite->value) = BLOCK_EXPR_DECLS (block);
- BLOCK_EXPR_DECLS (block) = ite->value;
+ if (block != error_mark_node)
+ {
+ TREE_CHAIN (ite->value) = BLOCK_EXPR_DECLS (block);
+ BLOCK_EXPR_DECLS (block) = ite->value;
+ }
return true;
}
diff --git a/gcc/jump.c b/gcc/jump.c
index c0284f3b50c..89da99f203b 100644
--- a/gcc/jump.c
+++ b/gcc/jump.c
@@ -2401,3 +2401,15 @@ true_regnum (x)
}
return -1;
}
+
+/* Return regno of the register REG and handle subregs too. */
+unsigned int
+reg_or_subregno (reg)
+ rtx reg;
+{
+ if (REG_P (reg))
+ return REGNO (reg);
+ if (GET_CODE (reg) == SUBREG)
+ return REGNO (SUBREG_REG (reg));
+ abort ();
+}
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index 7873aceb2a6..c27ac469ea8 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -1075,7 +1075,10 @@ __floatdisf (DWtype u)
&& u < ((DWtype) 1 << DF_SIZE)))
{
if ((UDWtype) u & (REP_BIT - 1))
- u |= REP_BIT;
+ {
+ u &= ~ (REP_BIT - 1);
+ u |= REP_BIT;
+ }
}
}
f = (Wtype) (u >> WORD_SIZE);
diff --git a/gcc/longlong.h b/gcc/longlong.h
index ca1dc7b3b4d..b886f2bdc8d 100644
--- a/gcc/longlong.h
+++ b/gcc/longlong.h
@@ -124,7 +124,7 @@
(q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \
(r) = __r; \
} while (0)
-extern UDItype __udiv_qrnnd PARAMS ((UDItype *, UDItype, UDItype, UDItype));
+extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, UDItype);
#define UDIV_TIME 220
#endif /* LONGLONG_STANDALONE */
#ifdef __alpha_cix__
@@ -292,44 +292,27 @@ UDItype __umulsidi3 (USItype, USItype);
} while (0)
#endif
-#if (defined (__i370__) || defined (__mvs__)) && W_TYPE_SIZE == 32
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mr %0,%3" \
- : "=r" (__xx.__i.__h), \
- "=r" (__xx.__i.__l) \
- : "%1" (__m0), \
- "r" (__m1)); \
- (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \
- (xh) += ((((SItype) __m0 >> 31) & __m1) \
- + (((SItype) __m1 >> 31) & __m0)); \
- } while (0)
+#if (defined (__i370__) || defined (__s390__) || defined (__mvs__)) && W_TYPE_SIZE == 32
#define smul_ppmm(xh, xl, m0, m1) \
do { \
union {DItype __ll; \
struct {USItype __h, __l;} __i; \
- } __xx; \
- __asm__ ("mr %0,%3" \
- : "=r" (__xx.__i.__h), \
- "=r" (__xx.__i.__l) \
- : "%1" (m0), \
- "r" (m1)); \
- (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \
+ } __x; \
+ __asm__ ("lr %N0,%1\n\tmr %0,%2" \
+ : "=&r" (__x.__ll) \
+ : "r" (m0), "r" (m1)); \
+ (xh) = __x.__i.__h; (xl) = __x.__i.__l; \
} while (0)
#define sdiv_qrnnd(q, r, n1, n0, d) \
do { \
union {DItype __ll; \
struct {USItype __h, __l;} __i; \
- } __xx; \
- __xx.__i.__h = n1; __xx.__i.__l = n0; \
+ } __x; \
+ __x.__i.__h = n1; __x.__i.__l = n0; \
__asm__ ("dr %0,%2" \
- : "=r" (__xx.__ll) \
- : "0" (__xx.__ll), "r" (d)); \
- (q) = __xx.__i.__l; (r) = __xx.__i.__h; \
+ : "=r" (__x.__ll) \
+ : "0" (__x.__ll), "r" (d)); \
+ (q) = __x.__i.__l; (r) = __x.__i.__h; \
} while (0)
#endif
@@ -1201,6 +1184,20 @@ UDItype __umulsidi3 (USItype, USItype);
} while (0)
#endif
+/* If we lack umul_ppmm but have smul_ppmm, define umul_ppmm in terms of
+ smul_ppmm. */
+#if !defined (umul_ppmm) && defined (smul_ppmm)
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ UWtype __w1; \
+ UWtype __xm0 = (u), __xm1 = (v); \
+ smul_ppmm (__w1, w0, __xm0, __xm1); \
+ (w1) = __w1 + (-(__xm0 >> (W_TYPE_SIZE - 1)) & __xm1) \
+ + (-(__xm1 >> (W_TYPE_SIZE - 1)) & __xm0); \
+ } while (0)
+#endif
+
+/* If we still don't have umul_ppmm, define it using plain C. */
#if !defined (umul_ppmm)
#define umul_ppmm(w1, w0, u, v) \
do { \
diff --git a/gcc/loop.c b/gcc/loop.c
index c7941fe39d3..4fd54b31ac6 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -151,7 +151,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#define LOOP_REGNO_NREGS(REGNO, SET_DEST) \
((REGNO) < FIRST_PSEUDO_REGISTER \
- ? HARD_REGNO_NREGS ((REGNO), GET_MODE (SET_DEST)) : 1)
+ ? (int) HARD_REGNO_NREGS ((REGNO), GET_MODE (SET_DEST)) : 1)
/* Vector mapping INSN_UIDs to luids.
@@ -936,7 +936,7 @@ scan_loop (loop, flags)
m->savings = regs->array[regno].n_times_set;
if (find_reg_note (p, REG_RETVAL, NULL_RTX))
m->savings += libcall_benefit (p);
- for (i = 0; i < (int) LOOP_REGNO_NREGS (regno, SET_DEST (set)); i++)
+ for (i = 0; i < LOOP_REGNO_NREGS (regno, SET_DEST (set)); i++)
regs->array[regno+i].set_in_loop = move_insn ? -2 : -1;
/* Add M to the end of the chain MOVABLES. */
loop_movables_add (movables, m);
@@ -1040,7 +1040,7 @@ scan_loop (loop, flags)
m->lifetime = LOOP_REG_LIFETIME (loop, regno);
m->savings = 1;
for (i = 0;
- i < (int) LOOP_REGNO_NREGS (regno, SET_DEST (set));
+ i < LOOP_REGNO_NREGS (regno, SET_DEST (set));
i++)
regs->array[regno+i].set_in_loop = -1;
/* Add M to the end of the chain MOVABLES. */
@@ -2183,7 +2183,7 @@ move_movables (loop, movables, threshold, insn_count)
if (! m->partial)
{
int i;
- for (i = 0; i < (int) LOOP_REGNO_NREGS (regno, m->set_dest); i++)
+ for (i = 0; i < LOOP_REGNO_NREGS (regno, m->set_dest); i++)
regs->array[regno+i].set_in_loop = 0;
}
@@ -2248,7 +2248,7 @@ move_movables (loop, movables, threshold, insn_count)
{
int i;
for (i = 0;
- i < (int) LOOP_REGNO_NREGS (regno, m1->set_dest);
+ i < LOOP_REGNO_NREGS (regno, m1->set_dest);
i++)
regs->array[m1->regno+i].set_in_loop = 0;
}
@@ -2465,7 +2465,8 @@ prescan_loop (loop)
loop_info->first_loop_store_insn = NULL_RTX;
loop_info->mems_idx = 0;
loop_info->num_mem_sets = 0;
-
+ /* If loop opts run twice, this was set on 1st pass for 2nd. */
+ loop_info->preconditioned = NOTE_PRECONDITIONED (end);
for (insn = start; insn && GET_CODE (insn) != CODE_LABEL;
insn = PREV_INSN (insn))
@@ -3508,7 +3509,7 @@ count_one_set (regs, insn, x, last_set)
{
int i;
int regno = REGNO (dest);
- for (i = 0; i < (int) LOOP_REGNO_NREGS (regno, dest); i++)
+ for (i = 0; i < LOOP_REGNO_NREGS (regno, dest); i++)
{
/* If this is the first setting of this reg
in current basic block, and it was set before,
@@ -9661,6 +9662,25 @@ loop_regs_scan (loop, extra_size)
if (GET_CODE (insn) == CODE_LABEL || GET_CODE (insn) == JUMP_INSN)
memset (last_set, 0, regs->num * sizeof (rtx));
+
+ /* Invalidate all registers used for function argument passing.
+ We check rtx_varies_p for the same reason as below, to allow
+ optimizing PIC calculations. */
+ if (GET_CODE (insn) == CALL_INSN)
+ {
+ rtx link;
+ for (link = CALL_INSN_FUNCTION_USAGE (insn);
+ link;
+ link = XEXP (link, 1))
+ {
+ rtx op, reg;
+
+ if (GET_CODE (op = XEXP (link, 0)) == USE
+ && GET_CODE (reg = XEXP (op, 0)) == REG
+ && rtx_varies_p (reg, 1))
+ regs->array[REGNO (reg)].may_not_optimize = 1;
+ }
+ }
}
/* Invalidate all hard registers clobbered by calls. With one exception:
diff --git a/gcc/mklibgcc.in b/gcc/mklibgcc.in
index 476fb6df569..f99954c51de 100644
--- a/gcc/mklibgcc.in
+++ b/gcc/mklibgcc.in
@@ -32,7 +32,7 @@
# SHLIB_MAPFILES
# SHLIB_NM_FLAGS
# SHLIB_INSTALL
-# SHLIB_SLIBDIR_SUFFIXES
+# MULTILIB_OSDIRNAMES
# Make needs VPATH to be literal.
echo 'srcdir = @srcdir@'
@@ -317,22 +317,18 @@ for ml in $MULTILIBS; do
fi
shlib_so_name="$shlib_base_name"
shlib_dir=
- if [ -n "$SHLIB_SLIBDIR_SUFFIXES" ]; then
+ if [ -n "$MULTILIB_OSDIRNAMES" ]; then
if [ "$dir" != . ]; then
+ gcc_multilib_dir=`./xgcc -B./ $flags --print-multi-directory`
+ os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory`
shlib_dir="$dir"/
- for suffix_pair in $SHLIB_SLIBDIR_SUFFIXES ; do
- base_ml_dir=`echo ${suffix_pair} | sed -e 's/:.*$//' -e 's/=/$(EQ)/g'`
- if [ "$dir" = "$base_ml_dir" ]; then
- shlib_so_name=libgcc_s
- break
- else
- canon_dir=`echo $dir | sed -n -e "s:$base_ml_dir/::p"`
- if [ -n "$canon_dir" ]; then
- shlib_so_name=libgcc_s_`echo $canon_dir | sed s,/,_,g`
- break
- fi
- fi
- done
+ gcc_multilib_sup=`echo $gcc_multilib_dir | sed 's~^[^/]*/~~'`
+ os_multilib_base=`echo $os_multilib_dir | sed -n "s~/${gcc_multilib_sup}\$~~p"`
+ if [ -z "$os_multilib_base" ]; then
+ shlib_so_name=libgcc_s
+ else
+ shlib_so_name=libgcc_s_`echo $gcc_multilib_sup | sed s,/,_,g`
+ fi
fi
fi
echo ""
@@ -438,6 +434,7 @@ echo ""
echo "install: $all"
for ml in $MULTILIBS; do
dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
+ flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
if [ $dir != . ]; then
ldir='$(libsubdir)'/$dir
echo " if [ -d $ldir ]; then true; else mkdir $ldir; chmod a+rx $ldir; fi;"
@@ -460,39 +457,22 @@ for ml in $MULTILIBS; do
shlib_so_name="$shlib_base_name"
shlib_dir=
shlib_slibdir_qual=
- if [ -n "$SHLIB_SLIBDIR_SUFFIXES" ]; then
- shlib_slibdir_qual=none
+ if [ -n "$MULTILIB_OSDIRNAMES" ]; then
+ gcc_multilib_dir=`./xgcc -B./ $flags --print-multi-directory`
+ os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory`
if [ "$dir" != . ]; then
shlib_dir="$dir"/
- for suffix_pair in $SHLIB_SLIBDIR_SUFFIXES ; do
- base_ml_dir=`echo ${suffix_pair} | sed -e 's/:.*$//' -e 's/=/$(EQ)/g'`
- if [ "$dir" = "$base_ml_dir" ]; then
- shlib_so_name=libgcc_s
- shlib_slibdir_qual=`echo ${suffix_pair} | sed -e 's/^[^:]*://'`
- break
- else
- canon_dir=`echo $dir | sed -n -e "s:$base_ml_dir/::p"`
- if [ -n "$canon_dir" ]; then
- shlib_so_name=libgcc_s_`echo $canon_dir | sed s,/,_,g`
- shlib_slibdir_qual=`echo ${suffix_pair} | sed -e 's/^[^:]*://'`
- break
- fi
- fi
- done
fi
- if [ "$shlib_slibdir_qual" = none ]; then
- for suffix_pair in $SHLIB_SLIBDIR_SUFFIXES ; do
- base_ml_dir=`echo ${suffix_pair} | sed -e 's/:.*$//' -e 's/=/$(EQ)/g'`
- shlib_slibdir_qual=`echo ${suffix_pair} | sed -e 's/^[^:]*://'`
- for ml2 in $MULTILIBS; do
- dir2=`echo ${ml2} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
- if [ "$base_ml_dir" = "$dir2" ]; then
- shlib_slibdir_qual=
- break
- fi
- done
- if [ -n "$shlib_slibdir_qual" ]; then break; fi
- done
+ gcc_multilib_sup=`echo $gcc_multilib_dir | sed 's~^[^/]*/~~'`
+ os_multilib_base=`echo $os_multilib_dir | sed -n "s~/${gcc_multilib_sup}\$~~p"`
+ if [ -z "$os_multilib_base" ]; then
+ shlib_so_name=libgcc_s
+ if [ "$os_multilib_dir" != "." ]; then
+ shlib_slibdir_qual="/$os_multilib_dir"
+ fi
+ else
+ shlib_so_name=libgcc_s_`echo $gcc_multilib_sup | sed s,/,_,g`
+ shlib_slibdir_qual="/$os_multilib_base"
fi
fi
echo " $SHLIB_INSTALL" \
diff --git a/gcc/output.h b/gcc/output.h
index d8f51ea0280..b7dda81ce6c 100644
--- a/gcc/output.h
+++ b/gcc/output.h
@@ -523,6 +523,7 @@ extern bool default_binds_local_p PARAMS ((tree));
extern bool default_binds_local_p_1 PARAMS ((tree, int));
extern void default_globalize_label PARAMS ((FILE *, const char *));
extern void default_internal_label PARAMS ((FILE *, const char *, unsigned long));
+extern bool default_valid_pointer_mode PARAMS ((enum machine_mode));
/* Emit data for vtable gc for GNU binutils. */
extern void assemble_vtable_entry PARAMS ((struct rtx_def *, HOST_WIDE_INT));
diff --git a/gcc/predict.c b/gcc/predict.c
index 3f899522a07..7a92ae18324 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -80,6 +80,7 @@ static void process_note_prediction PARAMS ((basic_block, int *,
static bool last_basic_block_p PARAMS ((basic_block));
static void compute_function_frequency PARAMS ((void));
static void choose_function_section PARAMS ((void));
+static bool can_predict_insn_p PARAMS ((rtx));
/* Information we hold about each branch predictor.
Filled using information from predict.def. */
@@ -230,6 +231,18 @@ predict_edge (e, predictor, probability)
predict_insn (last_insn, predictor, probability);
}
+/* Return true when we can store prediction on insn INSN.
+ At the moment we represent predictions only on conditional
+ jumps, not at computed jump or other complicated cases. */
+static bool
+can_predict_insn_p (insn)
+ rtx insn;
+{
+ return (GET_CODE (insn) == JUMP_INSN
+ && any_condjump_p (insn)
+ && BLOCK_FOR_INSN (insn)->succ->succ_next);
+}
+
/* Predict edge E by given predictor if possible. */
void
@@ -440,7 +453,8 @@ estimate_probability (loops_info)
statements construct loops via "non-loop" constructs
in the source language and are better to be handled
separately. */
- if (predicted_by_p (bb, PRED_CONTINUE))
+ if (!can_predict_insn_p (bb->end)
+ || predicted_by_p (bb, PRED_CONTINUE))
continue;
/* Loop branch heuristics - predict an edge back to a
@@ -474,7 +488,7 @@ estimate_probability (loops_info)
rtx cond, earliest;
edge e;
- if (GET_CODE (last_insn) != JUMP_INSN || ! any_condjump_p (last_insn))
+ if (! can_predict_insn_p (last_insn))
continue;
for (e = bb->succ; e; e = e->succ_next)
@@ -763,7 +777,7 @@ process_note_prediction (bb, heads, dominators, post_dominators, pred, flags)
/* Now find the edge that leads to our branch and aply the prediction. */
- if (y == last_basic_block)
+ if (y == last_basic_block || !can_predict_insn_p (BASIC_BLOCK (y)->end))
return;
for (e = BASIC_BLOCK (y)->succ; e; e = e->succ_next)
if (e->dest->index >= 0
@@ -1148,9 +1162,7 @@ estimate_bb_frequencies (loops)
{
rtx last_insn = bb->end;
- if (GET_CODE (last_insn) != JUMP_INSN || !any_condjump_p (last_insn)
- /* Avoid handling of conditional jumps jumping to fallthru edge. */
- || bb->succ->succ_next == NULL)
+ if (!can_predict_insn_p (last_insn))
{
/* We can predict only conditional jumps at the moment.
Expect each edge to be equally probable.
@@ -1247,7 +1259,12 @@ static void
choose_function_section ()
{
if (DECL_SECTION_NAME (current_function_decl)
- || !targetm.have_named_sections)
+ || !targetm.have_named_sections
+ /* Theoretically we can split the gnu.linkonce text section too,
+ but this requires more work as the frequency needs to match
+ for all generated objects so we need to merge the frequency
+ of all instances. For now just never set frequency for these. */
+ || !DECL_ONE_ONLY (current_function_decl))
return;
if (cfun->function_frequency == FUNCTION_FREQUENCY_HOT)
DECL_SECTION_NAME (current_function_decl) =
diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c
index 1364e9498dd..c01f9185add 100644
--- a/gcc/print-rtl.c
+++ b/gcc/print-rtl.c
@@ -195,6 +195,11 @@ print_rtx (in_rtx)
}
}
+#ifndef GENERATOR_FILE
+ if (GET_CODE (in_rtx) == CONST_DOUBLE && FLOAT_MODE_P (GET_MODE (in_rtx)))
+ i = 5;
+#endif
+
/* Get the format string and skip the first elements if we have handled
them already. */
format_ptr = GET_RTX_FORMAT (GET_CODE (in_rtx)) + i;
@@ -517,11 +522,14 @@ print_rtx (in_rtx)
case CONST_DOUBLE:
if (FLOAT_MODE_P (GET_MODE (in_rtx)))
{
- REAL_VALUE_TYPE val;
- char s[30];
+ char s[60];
+
+ real_to_decimal (s, CONST_DOUBLE_REAL_VALUE (in_rtx),
+ sizeof (s), 0, 1);
+ fprintf (outfile, " %s", s);
- REAL_VALUE_FROM_CONST_DOUBLE (val, in_rtx);
- REAL_VALUE_TO_DECIMAL (val, s, -1);
+ real_to_hexadecimal (s, CONST_DOUBLE_REAL_VALUE (in_rtx),
+ sizeof (s), 0, 1);
fprintf (outfile, " [%s]", s);
}
break;
diff --git a/gcc/print-tree.c b/gcc/print-tree.c
index ccfa19bbd76..e7c16559e56 100644
--- a/gcc/print-tree.c
+++ b/gcc/print-tree.c
@@ -131,9 +131,8 @@ print_node_brief (file, prefix, node, indent)
fprintf (file, " Nan");
else
{
- char string[100];
-
- REAL_VALUE_TO_DECIMAL (d, string, -1);
+ char string[60];
+ real_to_decimal (string, &d, sizeof (string), 0, 1);
fprintf (file, " %s", string);
}
}
@@ -684,9 +683,8 @@ print_node (file, prefix, node, indent)
fprintf (file, " Nan");
else
{
- char string[100];
-
- REAL_VALUE_TO_DECIMAL (d, string, -1);
+ char string[64];
+ real_to_decimal (string, &d, sizeof (string), 0, 1);
fprintf (file, " %s", string);
}
}
diff --git a/gcc/profile.c b/gcc/profile.c
index 4c7587b3406..0f4da47751c 100644
--- a/gcc/profile.c
+++ b/gcc/profile.c
@@ -217,6 +217,8 @@ get_exec_counts ()
2 = seen fn, 3 = seen prog summaries */
unsigned magic, version;
unsigned ix;
+ const char *name = IDENTIFIER_POINTER
+ (DECL_ASSEMBLER_NAME (current_function_decl));
profile_info.max_counter_in_program = 0;
profile_info.count_profiles_merged = 0;
@@ -305,7 +307,7 @@ get_exec_counts ()
|| gcov_read_unsigned (da_file, &checksum))
goto corrupt;
- if (strcmp (current_function_name, function_name_buffer))
+ if (strcmp (name, function_name_buffer))
;
else if (checksum != profile_info.current_function_cfg_checksum)
{
@@ -755,6 +757,8 @@ branch_prob ()
int i;
int num_edges, ignored_edges;
struct edge_list *el;
+ const char *name = IDENTIFIER_POINTER
+ (DECL_ASSEMBLER_NAME (current_function_decl));
profile_info.current_function_cfg_checksum = compute_checksum ();
@@ -913,8 +917,8 @@ branch_prob ()
/* Announce function */
if (gcov_write_unsigned (bbg_file, GCOV_TAG_FUNCTION)
|| !(offset = gcov_reserve_length (bbg_file))
- || gcov_write_string (bbg_file, current_function_name,
- strlen (current_function_name))
+ || gcov_write_string (bbg_file, name,
+ strlen (name))
|| gcov_write_unsigned (bbg_file,
profile_info.current_function_cfg_checksum)
|| gcov_write_length (bbg_file, offset))
@@ -1061,7 +1065,7 @@ branch_prob ()
functions_tail = &item->next;
item->next = 0;
- item->name = xstrdup (current_function_name);
+ item->name = xstrdup (name);
item->cfg_checksum = profile_info.current_function_cfg_checksum;
item->count_edges = profile_info.count_edges_instrumented_now;
}
@@ -1354,7 +1358,7 @@ create_profiler ()
/* Version ident */
fields = build_decl (FIELD_DECL, NULL_TREE, long_unsigned_type_node);
- value = tree_cons (fields, convert (unsigned_type_node, build_int_2
+ value = tree_cons (fields, convert (long_unsigned_type_node, build_int_2
(GCOV_VERSION, 0)), value);
/* NULL */
@@ -1394,7 +1398,9 @@ create_profiler ()
field = build_decl (FIELD_DECL, NULL_TREE, long_integer_type_node);
TREE_CHAIN (field) = fields;
fields = field;
- value = tree_cons (fields, integer_zero_node, value);
+ value = tree_cons (fields,
+ convert (long_integer_type_node, integer_zero_node),
+ value);
/* function_info table */
{
diff --git a/gcc/read-rtl.c b/gcc/read-rtl.c
index 8c378d96abb..5efd5dc9a20 100644
--- a/gcc/read-rtl.c
+++ b/gcc/read-rtl.c
@@ -35,7 +35,7 @@ static char *read_string PARAMS ((struct obstack *, FILE *, int));
static char *read_quoted_string PARAMS ((struct obstack *, FILE *));
static char *read_braced_string PARAMS ((struct obstack *, FILE *));
static void read_escape PARAMS ((struct obstack *, FILE *));
-static unsigned def_hash PARAMS ((const void *));
+static hashval_t def_hash PARAMS ((const void *));
static int def_name_eq_p PARAMS ((const void *, const void *));
static void read_constants PARAMS ((FILE *infile, char *tmp_char));
static void validate_const_int PARAMS ((FILE *, const char *));
@@ -401,7 +401,7 @@ atoll (p)
#endif
/* Given a constant definition, return a hash code for its name. */
-static unsigned
+static hashval_t
def_hash (def)
const void *def;
{
diff --git a/gcc/real.c b/gcc/real.c
index 891be811d03..458a3c691b8 100644
--- a/gcc/real.c
+++ b/gcc/real.c
@@ -53,10 +53,17 @@
In addition, E must be large enough to hold the smallest supported
denormal number in a normalized form.
- Both of these requirements are easily satisfied. The largest
- target significand is 113 bits; we store 128. The smallest
+ Both of these requirements are easily satisfied. The largest target
+ significand is 113 bits; we store at least 160. The smallest
denormal number fits in 17 exponent bits; we store 29.
+ Note that the decimal string conversion routines are sensitive to
+ rounding error. Since the raw arithmetic routines do not themselves
+ have guard digits or rounding, the computation of 10**exp can
+ accumulate more than a few digits of error. The previous incarnation
+ of real.c successfully used a 144 bit fraction; given the current
+ layout of REAL_VALUE_TYPE we're forced to expand to at least 160 bits.
+
Target floating point models that use base 16 instead of base 2
(i.e. IBM 370), are handled during round_for_format, in which we
canonicalize the exponent to be a multiple of 4 (log2(16)), and
@@ -95,6 +102,7 @@ static void neg_significand PARAMS ((REAL_VALUE_TYPE *,
const REAL_VALUE_TYPE *));
static int cmp_significands PARAMS ((const REAL_VALUE_TYPE *,
const REAL_VALUE_TYPE *));
+static int cmp_significand_0 PARAMS ((const REAL_VALUE_TYPE *));
static void set_significand_bit PARAMS ((REAL_VALUE_TYPE *, unsigned int));
static void clear_significand_bit PARAMS ((REAL_VALUE_TYPE *, unsigned int));
static bool test_significand_bit PARAMS ((REAL_VALUE_TYPE *, unsigned int));
@@ -114,11 +122,15 @@ static void do_divide PARAMS ((REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *,
const REAL_VALUE_TYPE *));
static int do_compare PARAMS ((const REAL_VALUE_TYPE *,
const REAL_VALUE_TYPE *, int));
-static void do_fix_trunc PARAMS ((REAL_VALUE_TYPE *,
- const REAL_VALUE_TYPE *));
+static void do_fix_trunc PARAMS ((REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *));
+
+static unsigned long rtd_divmod PARAMS ((REAL_VALUE_TYPE *,
+ REAL_VALUE_TYPE *));
static const REAL_VALUE_TYPE * ten_to_ptwo PARAMS ((int));
+static const REAL_VALUE_TYPE * ten_to_mptwo PARAMS ((int));
static const REAL_VALUE_TYPE * real_digit PARAMS ((int));
+static void times_pten PARAMS ((REAL_VALUE_TYPE *, int));
static void round_for_format PARAMS ((const struct real_format *,
REAL_VALUE_TYPE *));
@@ -186,7 +198,7 @@ sticky_rshift_significand (r, a, n)
{
for (i = 0, ofs = n / HOST_BITS_PER_LONG; i < ofs; ++i)
sticky |= a->sig[i];
- n -= ofs * HOST_BITS_PER_LONG;
+ n &= HOST_BITS_PER_LONG - 1;
}
if (n != 0)
@@ -222,7 +234,7 @@ rshift_significand (r, a, n)
{
unsigned int i, ofs = n / HOST_BITS_PER_LONG;
- n -= ofs * HOST_BITS_PER_LONG;
+ n &= HOST_BITS_PER_LONG - 1;
if (n != 0)
{
for (i = 0; i < SIGSZ; ++i)
@@ -253,7 +265,7 @@ lshift_significand (r, a, n)
{
unsigned int i, ofs = n / HOST_BITS_PER_LONG;
- n -= ofs * HOST_BITS_PER_LONG;
+ n &= HOST_BITS_PER_LONG - 1;
if (n == 0)
{
for (i = 0; ofs + i < SIGSZ; ++i)
@@ -303,11 +315,11 @@ add_significands (r, a, b)
if (carry)
{
- carry = ri < ai;
+ carry = ri < ai;
carry |= ++ri == 0;
}
else
- carry = ri < ai;
+ carry = ri < ai;
r->sig[i] = ri;
}
@@ -333,11 +345,11 @@ sub_significands (r, a, b)
if (carry)
{
- carry = ri > ai;
+ carry = ri > ai;
carry |= ~--ri == 0;
}
else
- carry = ri > ai;
+ carry = ri > ai;
r->sig[i] = ri;
}
@@ -398,6 +410,21 @@ cmp_significands (a, b)
return 0;
}
+/* Return true if A is non-zero. */
+
+static inline int
+cmp_significand_0 (a)
+ const REAL_VALUE_TYPE *a;
+{
+ int i;
+
+ for (i = SIGSZ - 1; i >= 0; --i)
+ if (a->sig[i])
+ return 1;
+
+ return 0;
+}
+
/* Set bit N of the significand of R. */
static inline void
@@ -458,31 +485,21 @@ div_significands (r, a, b)
const REAL_VALUE_TYPE *a, *b;
{
REAL_VALUE_TYPE u;
- int bit = SIGNIFICAND_BITS - 1;
- int i;
- long inexact;
+ int i, bit = SIGNIFICAND_BITS - 1;
+ unsigned long msb, inexact;
u = *a;
memset (r->sig, 0, sizeof (r->sig));
+ msb = 0;
goto start;
do
{
- if ((u.sig[SIGSZ-1] & SIG_MSB) == 0)
- {
- lshift_significand_1 (&u, &u);
- start:
- if (cmp_significands (&u, b) >= 0)
- {
- sub_significands (&u, &u, b);
- set_significand_bit (r, bit);
- }
- }
- else
+ msb = u.sig[SIGSZ-1] & SIG_MSB;
+ lshift_significand_1 (&u, &u);
+ start:
+ if (msb || cmp_significands (&u, b) >= 0)
{
- /* We lose a bit here, and thus know the next quotient bit
- will be one. */
- lshift_significand_1 (&u, &u);
sub_significands (&u, &u, b);
set_significand_bit (r, bit);
}
@@ -561,8 +578,8 @@ do_add (r, a, b, subtract_p)
switch (CLASS2 (a->class, b->class))
{
case CLASS2 (rvc_zero, rvc_zero):
- /* +-0 +/- +-0 = +0. */
- get_zero (r, 0);
+ /* -0 + -0 = -0, -0 - +0 = -0; all other cases yield +0. */
+ get_zero (r, sign & !subtract_p);
return;
case CLASS2 (rvc_zero, rvc_normal):
@@ -749,7 +766,7 @@ do_multiply (r, a, b)
A B C D
* E F G H
--------------
- DE DF DG DH
+ DE DF DG DH
CE CF CG CH
BE BF BG BH
AE AF AG AH
@@ -821,8 +838,6 @@ do_divide (r, a, b)
{
case CLASS2 (rvc_zero, rvc_zero):
/* 0 / 0 = NaN. */
- case CLASS2 (rvc_inf, rvc_zero):
- /* Inf / 0 = NaN. */
case CLASS2 (rvc_inf, rvc_inf):
/* Inf / Inf = NaN. */
get_canonical_qnan (r, sign);
@@ -839,6 +854,8 @@ do_divide (r, a, b)
case CLASS2 (rvc_normal, rvc_zero):
/* R / 0 = Inf. */
+ case CLASS2 (rvc_inf, rvc_zero):
+ /* Inf / 0 = Inf. */
get_inf (r, sign);
return;
@@ -888,10 +905,10 @@ do_divide (r, a, b)
rr->exp = exp;
inexact = div_significands (rr, a, b);
- rr->sig[0] |= inexact;
/* Re-normalize the result. */
normalize (rr);
+ rr->sig[0] |= inexact;
if (rr != r)
*r = t;
@@ -964,7 +981,7 @@ do_fix_trunc (r, a)
{
*r = *a;
- switch (a->class)
+ switch (r->class)
{
case rvc_zero:
case rvc_inf:
@@ -1388,21 +1405,61 @@ real_to_integer2 (plow, phigh, r)
*phigh = high;
}
-/* Render R as a decimal floating point constant. Emit DIGITS
- significant digits in the result. If DIGITS <= 0, choose the
- maximum for the representation. */
+/* A subroutine of real_to_decimal. Compute the quotient and remainder
+ of NUM / DEN. Return the quotient and place the remainder in NUM.
+ It is expected that NUM / DEN are close enough that the quotient is
+ small. */
+
+static unsigned long
+rtd_divmod (num, den)
+ REAL_VALUE_TYPE *num, *den;
+{
+ unsigned long q, msb;
+ int expn = num->exp, expd = den->exp;
+
+ if (expn < expd)
+ return 0;
+
+ q = msb = 0;
+ goto start;
+ do
+ {
+ msb = num->sig[SIGSZ-1] & SIG_MSB;
+ q <<= 1;
+ lshift_significand_1 (num, num);
+ start:
+ if (msb || cmp_significands (num, den) >= 0)
+ {
+ sub_significands (num, num, den);
+ q |= 1;
+ }
+ }
+ while (--expn >= expd);
+
+ num->exp = expd;
+ normalize (num);
+
+ return q;
+}
+
+/* Render R as a decimal floating point constant. Emit DIGITS significant
+ digits in the result, bounded by BUF_SIZE. If DIGITS is 0, choose the
+ maximum for the representation. If CROP_TRAILING_ZEROS, strip trailing
+ zeros. */
#define M_LOG10_2 0.30102999566398119521
void
-real_to_decimal (str, r_orig, digits)
+real_to_decimal (str, r_orig, buf_size, digits, crop_trailing_zeros)
char *str;
const REAL_VALUE_TYPE *r_orig;
- int digits;
+ size_t buf_size, digits;
+ int crop_trailing_zeros;
{
- REAL_VALUE_TYPE r;
const REAL_VALUE_TYPE *one, *ten;
- int dec_exp, max_digits, d, cmp_half;
+ REAL_VALUE_TYPE r, pten, u, v;
+ int dec_exp, cmp_one, digit;
+ size_t max_digits;
char *p, *first, *last;
bool sign;
@@ -1415,18 +1472,33 @@ real_to_decimal (str, r_orig, digits)
case rvc_normal:
break;
case rvc_inf:
- strcpy (str, (r.sign ? "+Inf" : "-Inf"));
+ strcpy (str, (r.sign ? "-Inf" : "+Inf"));
return;
case rvc_nan:
/* ??? Print the significand as well, if not canonical? */
- strcpy (str, (r.sign ? "+NaN" : "-NaN"));
+ strcpy (str, (r.sign ? "-NaN" : "+NaN"));
return;
default:
abort ();
}
+ /* Estimate the decimal exponent, and compute the length of the string it
+ will print as. Be conservative and add one to account for possible
+ overflow or rounding error. */
+ dec_exp = r.exp * M_LOG10_2;
+ for (max_digits = 1; dec_exp ; max_digits++)
+ dec_exp /= 10;
+
+ /* Bound the number of digits printed by the size of the output buffer. */
+ max_digits = buf_size - 1 - 1 - 2 - max_digits - 1;
+ if (max_digits > buf_size)
+ abort ();
+ if (digits > max_digits)
+ digits = max_digits;
+
+ /* Bound the number of digits printed by the size of the representation. */
max_digits = SIGNIFICAND_BITS * M_LOG10_2;
- if (digits <= 0 || digits > max_digits)
+ if (digits == 0 || digits > max_digits)
digits = max_digits;
one = real_digit (1);
@@ -1435,75 +1507,187 @@ real_to_decimal (str, r_orig, digits)
sign = r.sign;
r.sign = 0;
- /* Estimate the decimal exponent. */
- dec_exp = r.exp * M_LOG10_2;
-
- /* Scale the number such that it is in [1, 10). */
- if (dec_exp > 0)
- {
- int i;
- for (i = EXP_BITS - 1; i >= 0; --i)
- if (dec_exp & (1 << i))
- do_divide (&r, &r, ten_to_ptwo (i));
- }
- else if (dec_exp < 0)
+ dec_exp = 0;
+ pten = *one;
+
+ cmp_one = do_compare (&r, one, 0);
+ if (cmp_one > 0)
{
- int i, pos_exp = -(--dec_exp);
+ int m;
- for (i = EXP_BITS - 1; i >= 0; --i)
- if (pos_exp & (1 << i))
- do_multiply (&r, &r, ten_to_ptwo (i));
- }
+ /* Number is greater than one. Convert significand to an integer
+ and strip trailing decimal zeros. */
- /* Assert that the number is in the proper range. Round-off can
- prevent the above from working exactly. */
- if (do_compare (&r, one, -1) < 0)
- {
- do_multiply (&r, &r, ten);
- dec_exp--;
+ u = r;
+ u.exp = SIGNIFICAND_BITS - 1;
+
+ /* Largest M, such that 10**2**M fits within SIGNIFICAND_BITS. */
+ m = floor_log2 (max_digits);
+
+ /* Iterate over the bits of the possible powers of 10 that might
+ be present in U and eliminate them. That is, if we find that
+ 10**2**M divides U evenly, keep the division and increase
+ DEC_EXP by 2**M. */
+ do
+ {
+ REAL_VALUE_TYPE t;
+
+ do_divide (&t, &u, ten_to_ptwo (m));
+ do_fix_trunc (&v, &t);
+ if (cmp_significands (&v, &t) == 0)
+ {
+ u = t;
+ dec_exp += 1 << m;
+ }
+ }
+ while (--m >= 0);
+
+ /* Revert the scaling to integer that we performed earlier. */
+ u.exp += r.exp - (SIGNIFICAND_BITS - 1);
+ r = u;
+
+ /* Find power of 10. Do this by dividing out 10**2**M when
+ this is larger than the current remainder. Fill PTEN with
+ the power of 10 that we compute. */
+ m = floor_log2 ((int)(r.exp * M_LOG10_2)) + 1;
+ do
+ {
+ const REAL_VALUE_TYPE *ptentwo = ten_to_ptwo (m);
+ if (do_compare (&u, ptentwo, 0) >= 0)
+ {
+ do_divide (&u, &u, ptentwo);
+ do_multiply (&pten, &pten, ptentwo);
+ dec_exp += 1 << m;
+ }
+ }
+ while (--m >= 0);
}
- else if (do_compare (&r, ten, 1) >= 0)
+ else if (cmp_one < 0)
{
- do_divide (&r, &r, ten);
- dec_exp++;
+ int m;
+
+ /* Number is less than one. Pad significand with leading
+ decimal zeros. */
+
+ v = r;
+ while (1)
+ {
+ /* Stop if we'd shift bits off the bottom. */
+ if (v.sig[0] & 7)
+ break;
+
+ do_multiply (&u, &v, ten);
+
+ /* Stop if we're now >= 1. */
+ if (u.exp > 0)
+ break;
+
+ v = u;
+ dec_exp -= 1;
+ }
+ r = v;
+
+ /* Find power of 10. Do this by multiplying in P=10**2**M when
+ the current remainder is smaller than 1/P. Fill PTEN with the
+ power of 10 that we compute. */
+ m = floor_log2 ((int)(-r.exp * M_LOG10_2)) + 1;
+ do
+ {
+ const REAL_VALUE_TYPE *ptentwo = ten_to_ptwo (m);
+ const REAL_VALUE_TYPE *ptenmtwo = ten_to_mptwo (m);
+
+ if (do_compare (&v, ptenmtwo, 0) <= 0)
+ {
+ do_multiply (&v, &v, ptentwo);
+ do_multiply (&pten, &pten, ptentwo);
+ dec_exp -= 1 << m;
+ }
+ }
+ while (--m >= 0);
+
+ /* Invert the positive power of 10 that we've collected so far. */
+ do_divide (&pten, one, &pten);
}
p = str;
if (sign)
*p++ = '-';
first = p++;
- while (1)
+
+ /* At this point, PTEN should contain the nearest power of 10 smaller
+ than R, such that this division produces the first digit.
+
+ Using a divide-step primitive that returns the complete integral
+ remainder avoids the rounding error that would be produced if
+ we were to use do_divide here and then simply multiply by 10 for
+ each subsequent digit. */
+
+ digit = rtd_divmod (&r, &pten);
+
+ /* Be prepared for error in that division via underflow ... */
+ if (digit == 0 && cmp_significand_0 (&r))
{
- d = real_to_integer ((const REAL_VALUE_TYPE *) &r);
- do_add (&r, &r, real_digit (d), 1);
+ /* Multiply by 10 and try again. */
+ do_multiply (&r, &r, ten);
+ digit = rtd_divmod (&r, &pten);
+ dec_exp -= 1;
+ if (digit == 0)
+ abort ();
+ }
- *p++ = d + '0';
- if (--digits == 0)
- break;
+ /* ... or overflow. */
+ if (digit == 10)
+ {
+ *p++ = '1';
+ if (--digits > 0)
+ *p++ = '0';
+ dec_exp += 1;
+ }
+ else if (digit > 10)
+ abort ();
+ else
+ *p++ = digit + '0';
+
+ /* Generate subsequent digits. */
+ while (--digits > 0)
+ {
do_multiply (&r, &r, ten);
+ digit = rtd_divmod (&r, &pten);
+ *p++ = digit + '0';
}
last = p;
- /* Round the result. Compare R vs 0.5 by doing R*2 vs 1.0. */
- r.exp += 1;
- cmp_half = do_compare (&r, one, -1);
- if (cmp_half == 0)
- /* Round to even. */
- cmp_half += d & 1;
- if (cmp_half > 0)
+ /* Generate one more digit with which to do rounding. */
+ do_multiply (&r, &r, ten);
+ digit = rtd_divmod (&r, &pten);
+
+ /* Round the result. */
+ if (digit == 5)
+ {
+ /* Round to nearest. If R is non-zero there are additional
+ non-zero digits to be extracted. */
+ if (cmp_significand_0 (&r))
+ digit++;
+ /* Round to even. */
+ else if ((p[-1] - '0') & 1)
+ digit++;
+ }
+ if (digit > 5)
{
while (p > first)
{
- d = *--p;
- if (d == '9')
+ digit = *--p;
+ if (digit == '9')
*p = '0';
else
{
- *p = d + 1;
+ *p = digit + 1;
break;
}
}
+ /* Carry out of the first digit. This means we had all 9's and
+ now have all 0's. "Prepend" a 1 by overwriting the first 0. */
if (p == first)
{
first[1] = '1';
@@ -1511,24 +1695,35 @@ real_to_decimal (str, r_orig, digits)
}
}
+ /* Insert the decimal point. */
first[0] = first[1];
first[1] = '.';
+ /* If requested, drop trailing zeros. Never crop past "1.0". */
+ if (crop_trailing_zeros)
+ while (last > first + 3 && last[-1] == '0')
+ last--;
+
+ /* Append the exponent. */
sprintf (last, "e%+d", dec_exp);
}
/* Render R as a hexadecimal floating point constant. Emit DIGITS
- significant digits in the result. If DIGITS <= 0, choose the maximum
- for the representation. */
+ significant digits in the result, bounded by BUF_SIZE. If DIGITS is 0,
+ choose the maximum for the representation. If CROP_TRAILING_ZEROS,
+ strip trailing zeros. */
void
-real_to_hexadecimal (str, r, digits)
+real_to_hexadecimal (str, r, buf_size, digits, crop_trailing_zeros)
char *str;
const REAL_VALUE_TYPE *r;
- int digits;
+ size_t buf_size, digits;
+ int crop_trailing_zeros;
{
int i, j, exp = r->exp;
- char *p;
+ char *p, *first;
+ char exp_buf[16];
+ size_t max_digits;
switch (r->class)
{
@@ -1538,19 +1733,28 @@ real_to_hexadecimal (str, r, digits)
case rvc_normal:
break;
case rvc_inf:
- strcpy (str, (r->sign ? "+Inf" : "-Inf"));
+ strcpy (str, (r->sign ? "-Inf" : "+Inf"));
return;
case rvc_nan:
/* ??? Print the significand as well, if not canonical? */
- strcpy (str, (r->sign ? "+NaN" : "-NaN"));
+ strcpy (str, (r->sign ? "-NaN" : "+NaN"));
return;
default:
abort ();
}
- if (digits <= 0)
+ if (digits == 0)
digits = SIGNIFICAND_BITS / 4;
+ /* Bound the number of digits printed by the size of the output buffer. */
+
+ sprintf (exp_buf, "p%+d", exp);
+ max_digits = buf_size - strlen (exp_buf) - r->sign - 4 - 1;
+ if (max_digits > buf_size)
+ abort ();
+ if (digits > max_digits)
+ digits = max_digits;
+
p = str;
if (r->sign)
*p++ = '-';
@@ -1558,6 +1762,7 @@ real_to_hexadecimal (str, r, digits)
*p++ = 'x';
*p++ = '0';
*p++ = '.';
+ first = p;
for (i = SIGSZ - 1; i >= 0; --i)
for (j = HOST_BITS_PER_LONG - 4; j >= 0; j -= 4)
@@ -1566,7 +1771,12 @@ real_to_hexadecimal (str, r, digits)
if (--digits == 0)
goto out;
}
+
out:
+ if (crop_trailing_zeros)
+ while (p > first + 1 && p[-1] == '0')
+ p--;
+
sprintf (p, "p%+d", exp);
}
@@ -1741,19 +1951,8 @@ real_from_string (r, str)
exp += d;
}
- if (exp < 0)
- {
- exp = -exp;
- for (d = 0; d < EXP_BITS; ++d)
- if (exp & (1 << d))
- do_divide (r, r, ten_to_ptwo (d));
- }
- else if (exp > 0)
- {
- for (d = 0; d < EXP_BITS; ++d)
- if (exp & (1 << d))
- do_multiply (r, r, ten_to_ptwo (d));
- }
+ if (exp)
+ times_pten (r, exp);
}
r->sign = sign;
@@ -1836,7 +2035,7 @@ real_from_integer (r, mode, low, high, unsigned_p)
real_convert (r, mode, r);
}
-/* Returns 10**2**n. */
+/* Returns 10**2**N. */
static const REAL_VALUE_TYPE *
ten_to_ptwo (n)
@@ -1869,6 +2068,23 @@ ten_to_ptwo (n)
return &tens[n];
}
+/* Returns 10**(-2**N). */
+
+static const REAL_VALUE_TYPE *
+ten_to_mptwo (n)
+ int n;
+{
+ static REAL_VALUE_TYPE tens[EXP_BITS];
+
+ if (n < 0 || n >= EXP_BITS)
+ abort ();
+
+ if (tens[n].class == rvc_zero)
+ do_divide (&tens[n], real_digit (1), ten_to_ptwo (n));
+
+ return &tens[n];
+}
+
/* Returns N. */
static const REAL_VALUE_TYPE *
@@ -1886,6 +2102,34 @@ real_digit (n)
return &num[n];
}
+/* Multiply R by 10**EXP. */
+
+static void
+times_pten (r, exp)
+ REAL_VALUE_TYPE *r;
+ int exp;
+{
+ REAL_VALUE_TYPE pten, *rr;
+ bool negative = (exp < 0);
+ int i;
+
+ if (negative)
+ {
+ exp = -exp;
+ pten = *real_digit (1);
+ rr = &pten;
+ }
+ else
+ rr = r;
+
+ for (i = 0; exp > 0; ++i, exp >>= 1)
+ if (exp & 1)
+ do_multiply (rr, rr, ten_to_ptwo (i));
+
+ if (negative)
+ do_divide (r, r, &pten);
+}
+
/* Fills R with +Inf. */
void
@@ -2110,10 +2354,10 @@ round_for_format (fmt, r)
if (diff > p2)
goto underflow;
- /* De-normalize the significand. */
- sticky_rshift_significand (r, r, diff);
- r->exp += diff;
- }
+ /* De-normalize the significand. */
+ sticky_rshift_significand (r, r, diff);
+ r->exp += diff;
+ }
}
/* There are P2 true significand bits, followed by one guard bit,
diff --git a/gcc/real.h b/gcc/real.h
index 8244e7f4680..2bdca76081f 100644
--- a/gcc/real.h
+++ b/gcc/real.h
@@ -34,7 +34,7 @@ enum real_value_class {
rvc_nan
};
-#define SIGNIFICAND_BITS 128
+#define SIGNIFICAND_BITS (128 + HOST_BITS_PER_LONG)
#define EXP_BITS (32 - 3)
#define MAX_EXP ((1 << (EXP_BITS - 1)) - 1)
#define SIGSZ (SIGNIFICAND_BITS / HOST_BITS_PER_LONG)
@@ -42,7 +42,7 @@ enum real_value_class {
struct real_value GTY(())
{
- enum real_value_class class : 2;
+ ENUM_BITFIELD (real_value_class) class : 2;
unsigned int sign : 1;
signed int exp : EXP_BITS;
unsigned long sig[SIGSZ];
@@ -88,7 +88,11 @@ extern char test_real_width
# if REAL_WIDTH == 5
# define CONST_DOUBLE_FORMAT "wwwww"
# else
- #error "REAL_WIDTH > 5 not supported"
+# if REAL_WIDTH == 6
+# define CONST_DOUBLE_FORMAT "wwwwww"
+# else
+ #error "REAL_WIDTH > 6 not supported"
+# endif
# endif
# endif
# endif
@@ -100,8 +104,10 @@ extern char test_real_width
struct real_format
{
/* Move to and from the target bytes. */
- void (*encode) (const struct real_format *, long *, const REAL_VALUE_TYPE *);
- void (*decode) (const struct real_format *, REAL_VALUE_TYPE *, const long *);
+ void (*encode) PARAMS ((const struct real_format *, long *,
+ const REAL_VALUE_TYPE *));
+ void (*decode) PARAMS ((const struct real_format *, REAL_VALUE_TYPE *,
+ const long *));
/* The radix of the exponent and digits of the significand. */
int b;
@@ -170,11 +176,11 @@ extern bool exact_real_truncate PARAMS ((enum machine_mode,
/* Render R as a decimal floating point constant. */
extern void real_to_decimal PARAMS ((char *, const REAL_VALUE_TYPE *,
- int));
+ size_t, size_t, int));
/* Render R as a hexadecimal floating point constant. */
extern void real_to_hexadecimal PARAMS ((char *, const REAL_VALUE_TYPE *,
- int));
+ size_t, size_t, int));
/* Render R as an integer. */
extern HOST_WIDE_INT real_to_integer PARAMS ((const REAL_VALUE_TYPE *));
@@ -261,9 +267,6 @@ extern const struct real_format c4x_extended_format;
#define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) \
((OUT) = real_to_target (NULL, &(IN), mode_for_size (32, MODE_FLOAT, 0)))
-#define REAL_VALUE_TO_DECIMAL(r, s, dig) \
- real_to_decimal (s, &(r), dig)
-
#define REAL_VALUE_FROM_INT(r, lo, hi, mode) \
real_from_integer (&(r), mode, lo, hi, 0)
diff --git a/gcc/reload.c b/gcc/reload.c
index 6cd6cb7e948..a4cab784599 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -242,7 +242,7 @@ static int push_secondary_reload PARAMS ((int, rtx, int, int, enum reg_class,
#endif
static enum reg_class find_valid_class PARAMS ((enum machine_mode, int,
unsigned int));
-static int reload_inner_reg_of_subreg PARAMS ((rtx, enum machine_mode));
+static int reload_inner_reg_of_subreg PARAMS ((rtx, enum machine_mode, int));
static void push_replacement PARAMS ((rtx *, int, enum machine_mode));
static void dup_replacements PARAMS ((rtx *, rtx *));
static void combine_reloads PARAMS ((void));
@@ -795,9 +795,10 @@ find_reusable_reload (p_in, out, class, type, opnum, dont_share)
SUBREG_REG expression. */
static int
-reload_inner_reg_of_subreg (x, mode)
+reload_inner_reg_of_subreg (x, mode, output)
rtx x;
enum machine_mode mode;
+ int output;
{
rtx inner;
@@ -825,6 +826,7 @@ reload_inner_reg_of_subreg (x, mode)
word and the number of regs for INNER is not the same as the
number of words in INNER, then INNER will need reloading. */
return (GET_MODE_SIZE (mode) <= UNITS_PER_WORD
+ && output
&& GET_MODE_SIZE (GET_MODE (inner)) > UNITS_PER_WORD
&& ((GET_MODE_SIZE (GET_MODE (inner)) / UNITS_PER_WORD)
!= (int) HARD_REGNO_NREGS (REGNO (inner), GET_MODE (inner))));
@@ -1048,7 +1050,7 @@ push_reload (in, out, inloc, outloc, class,
/* Similar issue for (SUBREG constant ...) if it was not handled by the
code above. This can happen if SUBREG_BYTE != 0. */
- if (in != 0 && reload_inner_reg_of_subreg (in, inmode))
+ if (in != 0 && reload_inner_reg_of_subreg (in, inmode, 0))
{
enum reg_class in_class = class;
@@ -1145,7 +1147,7 @@ push_reload (in, out, inloc, outloc, class,
However, we must reload the inner reg *as well as* the subreg in
that case. In this case, the inner reg is an in-out reload. */
- if (out != 0 && reload_inner_reg_of_subreg (out, outmode))
+ if (out != 0 && reload_inner_reg_of_subreg (out, outmode, 1))
{
/* This relies on the fact that emit_reload_insns outputs the
instructions for output reloads of type RELOAD_OTHER in reverse
@@ -1285,9 +1287,9 @@ push_reload (in, out, inloc, outloc, class,
#ifdef SECONDARY_MEMORY_NEEDED
/* If a memory location is needed for the copy, make one. */
- if (in != 0 && GET_CODE (in) == REG
- && REGNO (in) < FIRST_PSEUDO_REGISTER
- && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (in)),
+ if (in != 0 && (GET_CODE (in) == REG || GET_CODE (in) == SUBREG)
+ && reg_or_subregno (in) < FIRST_PSEUDO_REGISTER
+ && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (reg_or_subregno (in)),
class, inmode))
get_secondary_mem (in, inmode, opnum, type);
#endif
@@ -1315,9 +1317,10 @@ push_reload (in, out, inloc, outloc, class,
n_reloads++;
#ifdef SECONDARY_MEMORY_NEEDED
- if (out != 0 && GET_CODE (out) == REG
- && REGNO (out) < FIRST_PSEUDO_REGISTER
- && SECONDARY_MEMORY_NEEDED (class, REGNO_REG_CLASS (REGNO (out)),
+ if (out != 0 && (GET_CODE (out) == REG || GET_CODE (out) == SUBREG)
+ && reg_or_subregno (out) < FIRST_PSEUDO_REGISTER
+ && SECONDARY_MEMORY_NEEDED (class,
+ REGNO_REG_CLASS (reg_or_subregno (out)),
outmode))
get_secondary_mem (out, outmode, opnum, type);
#endif
@@ -1732,7 +1735,8 @@ combine_reloads ()
&& ! (GET_CODE (rld[i].in) == REG
&& reg_overlap_mentioned_for_reload_p (rld[i].in,
rld[output_reload].out))))
- && ! reload_inner_reg_of_subreg (rld[i].in, rld[i].inmode)
+ && ! reload_inner_reg_of_subreg (rld[i].in, rld[i].inmode,
+ rld[i].when_needed != RELOAD_FOR_INPUT)
&& (reg_class_size[(int) rld[i].class]
|| SMALL_REGISTER_CLASSES)
/* We will allow making things slightly worse by combining an
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 9eccc2f8ee3..d5aa69ca8fb 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -6118,10 +6118,24 @@ merge_assigned_reloads (insn)
|| rld[j].when_needed == RELOAD_FOR_INPADDR_ADDRESS)
&& reg_overlap_mentioned_for_reload_p (rld[j].in,
rld[i].in))
- rld[j].when_needed
- = ((rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS
- || rld[j].when_needed == RELOAD_FOR_INPADDR_ADDRESS)
- ? RELOAD_FOR_OTHER_ADDRESS : RELOAD_OTHER);
+ {
+ int k;
+
+ rld[j].when_needed
+ = ((rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS
+ || rld[j].when_needed == RELOAD_FOR_INPADDR_ADDRESS)
+ ? RELOAD_FOR_OTHER_ADDRESS : RELOAD_OTHER);
+
+ /* Check to see if we accidentally converted two reloads
+ that use the same reload register to the same type.
+ If so, the resulting code won't work, so abort. */
+ if (rld[j].reg_rtx)
+ for (k = 0; k < j; k++)
+ if (rld[k].in != 0 && rld[k].reg_rtx != 0
+ && rld[k].when_needed == rld[j].when_needed
+ && rtx_equal_p (rld[k].reg_rtx, rld[j].reg_rtx))
+ abort ();
+ }
}
}
}
@@ -7526,10 +7540,12 @@ gen_reload (out, in, opnum, type)
#ifdef SECONDARY_MEMORY_NEEDED
/* If we need a memory location to do the move, do it that way. */
- else if (GET_CODE (in) == REG && REGNO (in) < FIRST_PSEUDO_REGISTER
- && GET_CODE (out) == REG && REGNO (out) < FIRST_PSEUDO_REGISTER
- && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (in)),
- REGNO_REG_CLASS (REGNO (out)),
+ else if ((GET_CODE (in) == REG || GET_CODE (in) == SUBREG)
+ && reg_or_subregno (in) < FIRST_PSEUDO_REGISTER
+ && (GET_CODE (out) == REG || GET_CODE (out) == SUBREG)
+ && reg_or_subregno (out) < FIRST_PSEUDO_REGISTER
+ && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (reg_or_subregno (in)),
+ REGNO_REG_CLASS (reg_or_subregno (out)),
GET_MODE (out)))
{
/* Get the memory to use and rewrite both registers to its mode. */
diff --git a/gcc/rtl.c b/gcc/rtl.c
index c8b36b77fb7..065c02b40c3 100644
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -387,19 +387,12 @@ rtx
shallow_copy_rtx (orig)
rtx orig;
{
- int i;
RTX_CODE code = GET_CODE (orig);
- rtx copy = rtx_alloc (code);
-
- PUT_MODE (copy, GET_MODE (orig));
- RTX_FLAG (copy, in_struct) = RTX_FLAG (orig, in_struct);
- RTX_FLAG (copy, volatil) = RTX_FLAG (orig, volatil);
- RTX_FLAG (copy, unchanging) = RTX_FLAG (orig, unchanging);
- RTX_FLAG (copy, integrated) = RTX_FLAG (orig, integrated);
- RTX_FLAG (copy, frame_related) = RTX_FLAG (orig, frame_related);
+ size_t n = GET_RTX_LENGTH (code);
+ rtx copy = ggc_alloc_rtx (n);
- for (i = 0; i < GET_RTX_LENGTH (code); i++)
- copy->fld[i] = orig->fld[i];
+ memcpy (copy, orig,
+ sizeof (struct rtx_def) + sizeof (rtunion) * (n - 1));
return copy;
}
diff --git a/gcc/rtl.h b/gcc/rtl.h
index a9ca03e9766..04283743bf5 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -787,6 +787,7 @@ extern const char * const reg_note_name[];
#define NOTE_BASIC_BLOCK(INSN) XCBBDEF (INSN, 4, NOTE)
#define NOTE_EXPECTED_VALUE(INSN) XCEXP (INSN, 4, NOTE)
#define NOTE_PREDICTION(INSN) XCINT (INSN, 4, NOTE)
+#define NOTE_PRECONDITIONED(INSN) XCINT (INSN, 4, NOTE)
/* In a NOTE that is a line number, this is the line number.
Other kinds of NOTEs are identified by negative numbers here. */
@@ -1576,6 +1577,7 @@ extern rtx set_unique_reg_note PARAMS ((rtx, enum reg_note, rtx));
#define single_set_1(I) single_set_2 (I, PATTERN (I))
extern int rtx_addr_can_trap_p PARAMS ((rtx));
+extern bool nonzero_address_p PARAMS ((rtx));
extern int rtx_unstable_p PARAMS ((rtx));
extern int rtx_varies_p PARAMS ((rtx, int));
extern int rtx_addr_varies_p PARAMS ((rtx, int));
@@ -1943,6 +1945,7 @@ extern int invert_jump_1 PARAMS ((rtx, rtx));
extern int invert_jump PARAMS ((rtx, rtx, int));
extern int rtx_renumbered_equal_p PARAMS ((rtx, rtx));
extern int true_regnum PARAMS ((rtx));
+extern unsigned int reg_or_subregno PARAMS ((rtx));
extern int redirect_jump_1 PARAMS ((rtx, rtx));
extern int redirect_jump PARAMS ((rtx, rtx, int));
extern void rebuild_jump_labels PARAMS ((rtx));
@@ -2267,4 +2270,38 @@ extern void invert_br_probabilities PARAMS ((rtx));
extern bool expensive_function_p PARAMS ((int));
/* In tracer.c */
extern void tracer PARAMS ((void));
+
+/* In calls.c */
+
+/* Nonzero if this is a call to a `const' function. */
+#define ECF_CONST 1
+/* Nonzero if this is a call to a `volatile' function. */
+#define ECF_NORETURN 2
+/* Nonzero if this is a call to malloc or a related function. */
+#define ECF_MALLOC 4
+/* Nonzero if it is plausible that this is a call to alloca. */
+#define ECF_MAY_BE_ALLOCA 8
+/* Nonzero if this is a call to a function that won't throw an exception. */
+#define ECF_NOTHROW 16
+/* Nonzero if this is a call to setjmp or a related function. */
+#define ECF_RETURNS_TWICE 32
+/* Nonzero if this is a call to `longjmp'. */
+#define ECF_LONGJMP 64
+/* Nonzero if this is a syscall that makes a new process in the image of
+ the current one. */
+#define ECF_FORK_OR_EXEC 128
+#define ECF_SIBCALL 256
+/* Nonzero if this is a call to "pure" function (like const function,
+ but may read memory. */
+#define ECF_PURE 512
+/* Nonzero if this is a call to a function that returns with the stack
+ pointer depressed. */
+#define ECF_SP_DEPRESSED 1024
+/* Nonzero if this call is known to always return. */
+#define ECF_ALWAYS_RETURN 2048
+/* Create libcall block around the call. */
+#define ECF_LIBCALL_BLOCK 4096
+
+extern int flags_from_decl_or_type PARAMS ((tree));
+
#endif /* ! GCC_RTL_H */
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index f5e104fbdb9..f45f888517c 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -153,6 +153,10 @@ rtx_varies_p (x, for_alias)
case LABEL_REF:
return 0;
+ case ADDRESSOF:
+ /* This will resolve to some offset from the frame pointer. */
+ return 0;
+
case REG:
/* Note that we have to test for the actual rtx used for the frame
and arg pointers and not just the register number in case we have
@@ -225,6 +229,10 @@ rtx_addr_can_trap_p (x)
case LABEL_REF:
return 0;
+ case ADDRESSOF:
+ /* This will resolve to some offset from the frame pointer. */
+ return 0;
+
case REG:
/* As in rtx_varies_p, we have to use the actual rtx, not reg number. */
if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
@@ -269,6 +277,90 @@ rtx_addr_can_trap_p (x)
return 1;
}
+/* Return true if X is an address that is known to not be zero. */
+
+bool
+nonzero_address_p (x)
+ rtx x;
+{
+ enum rtx_code code = GET_CODE (x);
+
+ switch (code)
+ {
+ case SYMBOL_REF:
+ return !SYMBOL_REF_WEAK (x);
+
+ case LABEL_REF:
+ return true;
+
+ case ADDRESSOF:
+ /* This will resolve to some offset from the frame pointer. */
+ return true;
+
+ case REG:
+ /* As in rtx_varies_p, we have to use the actual rtx, not reg number. */
+ if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
+ || x == stack_pointer_rtx
+ || (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM]))
+ return true;
+ /* All of the virtual frame registers are stack references. */
+ if (REGNO (x) >= FIRST_VIRTUAL_REGISTER
+ && REGNO (x) <= LAST_VIRTUAL_REGISTER)
+ return true;
+ return false;
+
+ case CONST:
+ return nonzero_address_p (XEXP (x, 0));
+
+ case PLUS:
+ if (GET_CODE (XEXP (x, 1)) == CONST_INT)
+ {
+ /* Pointers aren't allowed to wrap. If we've got a register
+ that is known to be a pointer, and a positive offset, then
+ the composite can't be zero. */
+ if (INTVAL (XEXP (x, 1)) > 0
+ && REG_P (XEXP (x, 0))
+ && REG_POINTER (XEXP (x, 0)))
+ return true;
+
+ return nonzero_address_p (XEXP (x, 0));
+ }
+ /* Handle PIC references. */
+ else if (XEXP (x, 0) == pic_offset_table_rtx
+ && CONSTANT_P (XEXP (x, 1)))
+ return true;
+ return false;
+
+ case PRE_MODIFY:
+ /* Similar to the above; allow positive offsets. Further, since
+ auto-inc is only allowed in memories, the register must be a
+ pointer. */
+ if (GET_CODE (XEXP (x, 1)) == CONST_INT
+ && INTVAL (XEXP (x, 1)) > 0)
+ return true;
+ return nonzero_address_p (XEXP (x, 0));
+
+ case PRE_INC:
+ /* Similarly. Further, the offset is always positive. */
+ return true;
+
+ case PRE_DEC:
+ case POST_DEC:
+ case POST_INC:
+ case POST_MODIFY:
+ return nonzero_address_p (XEXP (x, 0));
+
+ case LO_SUM:
+ return nonzero_address_p (XEXP (x, 1));
+
+ default:
+ break;
+ }
+
+ /* If it isn't one of the case above, might be zero. */
+ return false;
+}
+
/* Return 1 if X refers to a memory location whose address
cannot be compared reliably with constant addresses,
or if X refers to a BLKmode memory object.
diff --git a/gcc/sched-vis.c b/gcc/sched-vis.c
index 571c4ce1305..237d4460d51 100644
--- a/gcc/sched-vis.c
+++ b/gcc/sched-vis.c
@@ -562,12 +562,7 @@ print_value (buf, x, verbose)
break;
case CONST_DOUBLE:
if (FLOAT_MODE_P (GET_MODE (x)))
- {
- REAL_VALUE_TYPE r;
-
- REAL_VALUE_FROM_CONST_DOUBLE (r, x);
- REAL_VALUE_TO_DECIMAL(r, t, 6);
- }
+ real_to_decimal (t, CONST_DOUBLE_REAL_VALUE (x), sizeof (t), 0, 1);
else
sprintf (t, "<0x%lx,0x%lx>", (long) XWINT (x, 2), (long) XWINT (x, 3));
cur = safe_concat (buf, cur, t);
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index c49ad634bd5..558d79656bc 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -39,41 +39,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Simplification and canonicalization of RTL. */
-/* Nonzero if X has the form (PLUS frame-pointer integer). We check for
- virtual regs here because the simplify_*_operation routines are called
- by integrate.c, which is called before virtual register instantiation.
-
- ?!? NONZERO_BASE_PLUS_P needs to move into
- a header file so that their definitions can be shared with the
- simplification routines in simplify-rtx.c. Until then, do not
- change this macro without also changing the copy in simplify-rtx.c. */
-
-/* Allows reference to the stack pointer.
-
- This used to include FIXED_BASE_PLUS_P, however, we can't assume that
- arg_pointer_rtx by itself is nonzero, because on at least one machine,
- the i960, the arg pointer is zero when it is unused. */
-
-#define NONZERO_BASE_PLUS_P(X) \
- ((X) == frame_pointer_rtx || (X) == hard_frame_pointer_rtx \
- || (X) == virtual_stack_vars_rtx \
- || (X) == virtual_incoming_args_rtx \
- || (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == CONST_INT \
- && (XEXP (X, 0) == frame_pointer_rtx \
- || XEXP (X, 0) == hard_frame_pointer_rtx \
- || ((X) == arg_pointer_rtx \
- && fixed_regs[ARG_POINTER_REGNUM]) \
- || XEXP (X, 0) == virtual_stack_vars_rtx \
- || XEXP (X, 0) == virtual_incoming_args_rtx)) \
- || (X) == stack_pointer_rtx \
- || (X) == virtual_stack_dynamic_rtx \
- || (X) == virtual_outgoing_args_rtx \
- || (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == CONST_INT \
- && (XEXP (X, 0) == stack_pointer_rtx \
- || XEXP (X, 0) == virtual_stack_dynamic_rtx \
- || XEXP (X, 0) == virtual_outgoing_args_rtx)) \
- || GET_CODE (X) == ADDRESSOF)
-
/* Much code operates on (low, high) pairs; the low value is an
unsigned wide int, the high value a signed wide int. We
occasionally need to sign extend from low to high as if low were a
@@ -146,6 +111,9 @@ avoid_constant_pool_reference (x)
return x;
addr = XEXP (x, 0);
+ if (GET_CODE (addr) == LO_SUM)
+ addr = XEXP (addr, 1);
+
if (GET_CODE (addr) != SYMBOL_REF
|| ! CONSTANT_POOL_ADDRESS_P (addr))
return x;
@@ -340,9 +308,22 @@ simplify_replace_rtx (x, old, new)
return replace_equiv_address_nv (x,
simplify_replace_rtx (XEXP (x, 0),
old, new));
+ else if (code == LO_SUM)
+ {
+ rtx op0 = simplify_replace_rtx (XEXP (x, 0), old, new);
+ rtx op1 = simplify_replace_rtx (XEXP (x, 1), old, new);
- if (REG_P (x) && REG_P (old) && REGNO (x) == REGNO (old))
- return new;
+ /* (lo_sum (high x) x) -> x */
+ if (GET_CODE (op0) == HIGH && rtx_equal_p (XEXP (op0, 0), op1))
+ return op1;
+
+ return gen_rtx_LO_SUM (mode, op0, op1);
+ }
+ else if (code == REG)
+ {
+ if (REG_P (old) && REGNO (x) == REGNO (old))
+ return new;
+ }
return x;
@@ -1328,6 +1309,7 @@ simplify_binary_operation (code, mode, op0, op1)
case ROTATERT:
case ROTATE:
+ case ASHIFTRT:
/* Rotating ~0 always results in ~0. */
if (GET_CODE (trueop0) == CONST_INT && width <= HOST_BITS_PER_WIDE_INT
&& (unsigned HOST_WIDE_INT) INTVAL (trueop0) == GET_MODE_MASK (mode)
@@ -1337,7 +1319,6 @@ simplify_binary_operation (code, mode, op0, op1)
/* ... fall through ... */
case ASHIFT:
- case ASHIFTRT:
case LSHIFTRT:
if (trueop1 == const0_rtx)
return op0;
@@ -2022,25 +2003,12 @@ simplify_relational_operation (code, mode, op0, op1)
switch (code)
{
case EQ:
- /* References to the frame plus a constant or labels cannot
- be zero, but a SYMBOL_REF can due to #pragma weak. */
- if (((NONZERO_BASE_PLUS_P (op0) && trueop1 == const0_rtx)
- || GET_CODE (trueop0) == LABEL_REF)
-#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
- /* On some machines, the ap reg can be 0 sometimes. */
- && op0 != arg_pointer_rtx
-#endif
- )
+ if (trueop1 == const0_rtx && nonzero_address_p (op0))
return const0_rtx;
break;
case NE:
- if (((NONZERO_BASE_PLUS_P (op0) && trueop1 == const0_rtx)
- || GET_CODE (trueop0) == LABEL_REF)
-#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
- && op0 != arg_pointer_rtx
-#endif
- )
+ if (trueop1 == const0_rtx && nonzero_address_p (op0))
return const_true_rtx;
break;
diff --git a/gcc/stmt.c b/gcc/stmt.c
index fd9bbf0d37f..382329f3f4c 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -388,7 +388,7 @@ struct stmt_status GTY(())
#define emit_lineno (cfun->stmt->x_emit_lineno)
#define goto_fixup_chain (cfun->stmt->x_goto_fixup_chain)
-/* Non-zero if we are using EH to handle cleanus. */
+/* Non-zero if we are using EH to handle cleanups. */
static int using_eh_for_cleanups_p = 0;
static int n_occurrences PARAMS ((int, const char *));
@@ -1403,6 +1403,7 @@ decl_conflicts_with_clobbers_p (decl, clobbered_regs)
list are not allowed. */
if ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
&& DECL_REGISTER (decl)
+ && REG_P (DECL_RTL (decl))
&& REGNO (DECL_RTL (decl)) < FIRST_PSEUDO_REGISTER)
{
rtx reg = DECL_RTL (decl);
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index 973a13218e7..b754fffbe60 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -60,6 +60,9 @@ static int reference_types_internal = 0;
static void finalize_record_size PARAMS ((record_layout_info));
static void finalize_type_size PARAMS ((tree));
static void place_union_field PARAMS ((record_layout_info, tree));
+static unsigned int update_alignment_for_field
+ PARAMS ((record_layout_info, tree,
+ unsigned int));
extern void debug_rli PARAMS ((record_layout_info));
/* SAVE_EXPRs for sizes of types and decls, waiting to be expanded. */
@@ -625,130 +628,23 @@ rli_size_so_far (rli)
return bit_from_pos (rli->offset, rli->bitpos);
}
-/* Called from place_field to handle unions. */
-
-static void
-place_union_field (rli, field)
- record_layout_info rli;
- tree field;
-{
- unsigned int desired_align;
-
- layout_decl (field, 0);
-
- DECL_FIELD_OFFSET (field) = size_zero_node;
- DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node;
- SET_DECL_OFFSET_ALIGN (field, BIGGEST_ALIGNMENT);
-
- desired_align = DECL_ALIGN (field);
-
-#ifdef BIGGEST_FIELD_ALIGNMENT
- /* Some targets (i.e. i386) limit union field alignment
- to a lower boundary than alignment of variables unless
- it was overridden by attribute aligned. */
- if (! DECL_USER_ALIGN (field))
- desired_align =
- MIN (desired_align, (unsigned) BIGGEST_FIELD_ALIGNMENT);
-#endif
-
-#ifdef ADJUST_FIELD_ALIGN
- if (! DECL_USER_ALIGN (field))
- desired_align = ADJUST_FIELD_ALIGN (field, desired_align);
-#endif
-
- TYPE_USER_ALIGN (rli->t) |= DECL_USER_ALIGN (field);
-
- /* Union must be at least as aligned as any field requires. */
- rli->record_align = MAX (rli->record_align, desired_align);
- rli->unpadded_align = MAX (rli->unpadded_align, desired_align);
-
-#ifdef PCC_BITFIELD_TYPE_MATTERS
- /* On the m88000, a bit field of declare type `int' forces the
- entire union to have `int' alignment. */
- if (PCC_BITFIELD_TYPE_MATTERS && DECL_BIT_FIELD_TYPE (field))
- {
- unsigned int type_align = TYPE_ALIGN (TREE_TYPE (field));
-
-#ifdef ADJUST_FIELD_ALIGN
- if (! TYPE_USER_ALIGN (TREE_TYPE (field)))
- type_align = ADJUST_FIELD_ALIGN (field, type_align);
-#endif
- rli->record_align = MAX (rli->record_align, type_align);
- rli->unpadded_align = MAX (rli->unpadded_align, type_align);
- TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (TREE_TYPE (field));
- }
-#endif
-
- /* We assume the union's size will be a multiple of a byte so we don't
- bother with BITPOS. */
- if (TREE_CODE (rli->t) == UNION_TYPE)
- rli->offset = size_binop (MAX_EXPR, rli->offset, DECL_SIZE_UNIT (field));
- else if (TREE_CODE (rli->t) == QUAL_UNION_TYPE)
- rli->offset = fold (build (COND_EXPR, sizetype,
- DECL_QUALIFIER (field),
- DECL_SIZE_UNIT (field), rli->offset));
-}
-
-/* RLI contains information about the layout of a RECORD_TYPE. FIELD
- is a FIELD_DECL to be added after those fields already present in
- T. (FIELD is not actually added to the TYPE_FIELDS list here;
- callers that desire that behavior must manually perform that step.) */
+/* FIELD is about to be added to RLI->T. The alignment (in bits) of
+ the next available location is given by KNOWN_ALIGN. Update the
+ variable alignment fields in RLI, and return the alignment to give
+ the FIELD. */
-void
-place_field (rli, field)
+static unsigned int
+update_alignment_for_field (rli, field, known_align)
record_layout_info rli;
tree field;
+ unsigned int known_align;
{
/* The alignment required for FIELD. */
unsigned int desired_align;
- /* The alignment FIELD would have if we just dropped it into the
- record as it presently stands. */
- unsigned int known_align;
- unsigned int actual_align;
- unsigned int user_align;
/* The type of this field. */
tree type = TREE_TYPE (field);
-
- if (TREE_CODE (field) == ERROR_MARK || TREE_CODE (type) == ERROR_MARK)
- return;
-
- /* If FIELD is static, then treat it like a separate variable, not
- really like a structure field. If it is a FUNCTION_DECL, it's a
- method. In both cases, all we do is lay out the decl, and we do
- it *after* the record is laid out. */
- if (TREE_CODE (field) == VAR_DECL)
- {
- rli->pending_statics = tree_cons (NULL_TREE, field,
- rli->pending_statics);
- return;
- }
-
- /* Enumerators and enum types which are local to this class need not
- be laid out. Likewise for initialized constant fields. */
- else if (TREE_CODE (field) != FIELD_DECL)
- return;
-
- /* Unions are laid out very differently than records, so split
- that code off to another function. */
- else if (TREE_CODE (rli->t) != RECORD_TYPE)
- {
- place_union_field (rli, field);
- return;
- }
-
- /* Work out the known alignment so far. Note that A & (-A) is the
- value of the least-significant bit in A that is one. */
- if (! integer_zerop (rli->bitpos))
- known_align = (tree_low_cst (rli->bitpos, 1)
- & - tree_low_cst (rli->bitpos, 1));
- else if (integer_zerop (rli->offset))
- known_align = BIGGEST_ALIGNMENT;
- else if (host_integerp (rli->offset, 1))
- known_align = (BITS_PER_UNIT
- * (tree_low_cst (rli->offset, 1)
- & - tree_low_cst (rli->offset, 1)));
- else
- known_align = rli->offset_align;
+ /* True if the field was explicitly aligned by the user. */
+ bool user_align;
/* Lay out the field so we know what alignment it needs. For a
packed field, use the alignment as specified, disregarding what
@@ -766,13 +662,13 @@ place_field (rli, field)
to a lower boundary than alignment of variables unless
it was overridden by attribute aligned. */
#ifdef BIGGEST_FIELD_ALIGNMENT
- if (! user_align)
+ if (!user_align)
desired_align
= MIN (desired_align, (unsigned) BIGGEST_FIELD_ALIGNMENT);
#endif
#ifdef ADJUST_FIELD_ALIGN
- if (! user_align)
+ if (!user_align)
desired_align = ADJUST_FIELD_ALIGN (field, desired_align);
#endif
@@ -854,6 +750,96 @@ place_field (rli, field)
rli->unpadded_align = MAX (rli->unpadded_align, DECL_ALIGN (field));
}
+ TYPE_USER_ALIGN (rli->t) |= user_align;
+
+ return desired_align;
+}
+
+/* Called from place_field to handle unions. */
+
+static void
+place_union_field (rli, field)
+ record_layout_info rli;
+ tree field;
+{
+ update_alignment_for_field (rli, field, /*known_align=*/0);
+
+ DECL_FIELD_OFFSET (field) = size_zero_node;
+ DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node;
+ SET_DECL_OFFSET_ALIGN (field, BIGGEST_ALIGNMENT);
+
+ /* We assume the union's size will be a multiple of a byte so we don't
+ bother with BITPOS. */
+ if (TREE_CODE (rli->t) == UNION_TYPE)
+ rli->offset = size_binop (MAX_EXPR, rli->offset, DECL_SIZE_UNIT (field));
+ else if (TREE_CODE (rli->t) == QUAL_UNION_TYPE)
+ rli->offset = fold (build (COND_EXPR, sizetype,
+ DECL_QUALIFIER (field),
+ DECL_SIZE_UNIT (field), rli->offset));
+}
+
+/* RLI contains information about the layout of a RECORD_TYPE. FIELD
+ is a FIELD_DECL to be added after those fields already present in
+ T. (FIELD is not actually added to the TYPE_FIELDS list here;
+ callers that desire that behavior must manually perform that step.) */
+
+void
+place_field (rli, field)
+ record_layout_info rli;
+ tree field;
+{
+ /* The alignment required for FIELD. */
+ unsigned int desired_align;
+ /* The alignment FIELD would have if we just dropped it into the
+ record as it presently stands. */
+ unsigned int known_align;
+ unsigned int actual_align;
+ /* The type of this field. */
+ tree type = TREE_TYPE (field);
+
+ if (TREE_CODE (field) == ERROR_MARK || TREE_CODE (type) == ERROR_MARK)
+ return;
+
+ /* If FIELD is static, then treat it like a separate variable, not
+ really like a structure field. If it is a FUNCTION_DECL, it's a
+ method. In both cases, all we do is lay out the decl, and we do
+ it *after* the record is laid out. */
+ if (TREE_CODE (field) == VAR_DECL)
+ {
+ rli->pending_statics = tree_cons (NULL_TREE, field,
+ rli->pending_statics);
+ return;
+ }
+
+ /* Enumerators and enum types which are local to this class need not
+ be laid out. Likewise for initialized constant fields. */
+ else if (TREE_CODE (field) != FIELD_DECL)
+ return;
+
+ /* Unions are laid out very differently than records, so split
+ that code off to another function. */
+ else if (TREE_CODE (rli->t) != RECORD_TYPE)
+ {
+ place_union_field (rli, field);
+ return;
+ }
+
+ /* Work out the known alignment so far. Note that A & (-A) is the
+ value of the least-significant bit in A that is one. */
+ if (! integer_zerop (rli->bitpos))
+ known_align = (tree_low_cst (rli->bitpos, 1)
+ & - tree_low_cst (rli->bitpos, 1));
+ else if (integer_zerop (rli->offset))
+ known_align = BIGGEST_ALIGNMENT;
+ else if (host_integerp (rli->offset, 1))
+ known_align = (BITS_PER_UNIT
+ * (tree_low_cst (rli->offset, 1)
+ & - tree_low_cst (rli->offset, 1)));
+ else
+ known_align = rli->offset_align;
+
+ desired_align = update_alignment_for_field (rli, field, known_align);
+
if (warn_packed && DECL_PACKED (field))
{
if (known_align > TYPE_ALIGN (type))
@@ -937,7 +923,7 @@ place_field (rli, field)
> tree_low_cst (TYPE_SIZE (type), 1) / type_align)
rli->bitpos = round_up (rli->bitpos, type_align);
- user_align |= TYPE_USER_ALIGN (type);
+ TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
}
#endif
@@ -980,7 +966,7 @@ place_field (rli, field)
/ type_align))
rli->bitpos = round_up (rli->bitpos, type_align);
- user_align |= TYPE_USER_ALIGN (type);
+ TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
}
#endif
@@ -988,12 +974,12 @@ place_field (rli, field)
A subtlety:
When a bit field is inserted into a packed record, the whole
size of the underlying type is used by one or more same-size
- adjacent bitfields. (That is, if its long:3, 32 bits is
+ adjacent bitfields. (That is, if its long:3, 32 bits is
used in the record, and any additional adjacent long bitfields are
packed into the same chunk of 32 bits. However, if the size
changes, a new field of that size is allocated.) In an unpacked
record, this is the same as using alignment, but not eqivalent
- when packing.
+ when packing.
Note: for compatability, we use the type size, not the type alignment
to determine alignment, since that matches the documentation */
@@ -1041,8 +1027,8 @@ place_field (rli, field)
}
else
{
- /* End of a run: if leaving a run of bitfields of the same type
- size, we have to "use up" the rest of the bits of the type
+ /* End of a run: if leaving a run of bitfields of the same type
+ size, we have to "use up" the rest of the bits of the type
size.
Compute the new position as the sum of the size for the prior
@@ -1064,7 +1050,7 @@ place_field (rli, field)
prev_saved = NULL;
}
- /* Cause a new bitfield to be captured, either this time (if
+ /* Cause a new bitfield to be captured, either this time (if
currently a bitfield) or next time we see one. */
if (!DECL_BIT_FIELD_TYPE(field)
|| integer_zerop (DECL_SIZE (field)))
@@ -1077,7 +1063,7 @@ place_field (rli, field)
/* If we're starting a new run of same size type bitfields
(or a run of non-bitfields), set up the "first of the run"
- fields.
+ fields.
That is, if the current field is not a bitfield, or if there
was a prior bitfield the type sizes differ, or if there wasn't
@@ -1088,20 +1074,20 @@ place_field (rli, field)
there wasn't. */
if (!DECL_BIT_FIELD_TYPE (field)
- || ( prev_saved != NULL
+ || ( prev_saved != NULL
? !simple_cst_equal (TYPE_SIZE (type),
TYPE_SIZE (TREE_TYPE (prev_saved)))
: !integer_zerop (DECL_SIZE (field)) ))
{
unsigned int type_align = 8; /* Never below 8 for compatability */
- /* (When not a bitfield), we could be seeing a flex array (with
+ /* (When not a bitfield), we could be seeing a flex array (with
no DECL_SIZE). Since we won't be using remaining_in_alignment
- until we see a bitfield (and come by here again) we just skip
+ until we see a bitfield (and come by here again) we just skip
calculating it. */
-
+
if (DECL_SIZE (field) != NULL)
- rli->remaining_in_alignment
+ rli->remaining_in_alignment
= TREE_INT_CST_LOW (TYPE_SIZE(TREE_TYPE(field)))
- TREE_INT_CST_LOW (DECL_SIZE (field));
@@ -1134,8 +1120,6 @@ place_field (rli, field)
DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
- TYPE_USER_ALIGN (rli->t) |= user_align;
-
/* If this field ended up more aligned than we thought it would be (we
approximate this by seeing if its position changed), lay out the field
again; perhaps we can use an integral mode for it now. */
@@ -1525,7 +1509,7 @@ finish_builtin_struct (type, name, fields, align_type)
TYPE_ALIGN (type) = TYPE_ALIGN (align_type);
TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (align_type);
}
-
+
layout_type (type);
#if 0 /* not yet, should get fixed properly later */
TYPE_NAME (type) = make_type_decl (get_identifier (name), type);
@@ -1636,13 +1620,15 @@ layout_type (type)
case POINTER_TYPE:
case REFERENCE_TYPE:
{
- int nbits = ((TREE_CODE (type) == REFERENCE_TYPE
- && reference_types_internal)
- ? GET_MODE_BITSIZE (Pmode) : POINTER_SIZE);
- TYPE_MODE (type) = nbits == POINTER_SIZE ? ptr_mode : Pmode;
+ enum machine_mode mode = ((TREE_CODE (type) == REFERENCE_TYPE
+ && reference_types_internal)
+ ? Pmode : TYPE_MODE (type));
+
+ int nbits = GET_MODE_BITSIZE (mode);
+
TYPE_SIZE (type) = bitsize_int (nbits);
- TYPE_SIZE_UNIT (type) = size_int (nbits / BITS_PER_UNIT);
+ TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (mode));
TREE_UNSIGNED (type) = 1;
TYPE_PRECISION (type) = nbits;
}
diff --git a/gcc/system.h b/gcc/system.h
index 44b5d1881b3..b12272b9072 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -23,11 +23,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#ifndef GCC_SYSTEM_H
#define GCC_SYSTEM_H
-/* This is the location of the online document giving information how
- to report bugs. If you change this string, also check for strings
- not under control of the preprocessor. */
-#define GCCBUGURL "<URL:http://www.gnu.org/software/gcc/bugs.html>"
-
/* We must include stdarg.h/varargs.h before stdio.h. */
#ifdef ANSI_PROTOTYPES
#include <stdarg.h>
diff --git a/gcc/target-def.h b/gcc/target-def.h
index 88198d11e64..69966a8524d 100644
--- a/gcc/target-def.h
+++ b/gcc/target-def.h
@@ -106,6 +106,14 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# endif
#endif
+#ifndef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK NULL
+#endif
+
+#ifndef TARGET_ASM_OUTPUT_MI_VCALL_THUNK
+#define TARGET_ASM_OUTPUT_MI_VCALL_THUNK NULL
+#endif
+
#if defined(TARGET_ASM_CONSTRUCTOR) && defined(TARGET_ASM_DESTRUCTOR)
#define TARGET_HAVE_CTORS_DTORS true
#else
@@ -177,7 +185,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
TARGET_ASM_SELECT_RTX_SECTION, \
TARGET_ASM_UNIQUE_SECTION, \
TARGET_ASM_CONSTRUCTOR, \
- TARGET_ASM_DESTRUCTOR}
+ TARGET_ASM_DESTRUCTOR, \
+ TARGET_ASM_OUTPUT_MI_THUNK, \
+ TARGET_ASM_OUTPUT_MI_VCALL_THUNK }
/* Scheduler hooks. All of these default to null pointers, which
haifa-sched.c looks for and handles. */
@@ -243,6 +253,10 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define TARGET_BINDS_LOCAL_P default_binds_local_p
#endif
+#ifndef TARGET_VALID_POINTER_MODE
+#define TARGET_VALID_POINTER_MODE default_valid_pointer_mode
+#endif
+
/* In hook.c. */
#define TARGET_CANNOT_MODIFY_JUMPS_P hook_void_bool_false
#define TARGET_FUNCTION_OK_FOR_SIBCALL hook_tree_tree_bool_false
@@ -277,6 +291,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
TARGET_BINDS_LOCAL_P, \
TARGET_ENCODE_SECTION_INFO, \
TARGET_STRIP_NAME_ENCODING, \
+ TARGET_VALID_POINTER_MODE, \
TARGET_HAVE_NAMED_SECTIONS, \
TARGET_HAVE_CTORS_DTORS, \
TARGET_HAVE_TLS, \
diff --git a/gcc/target.h b/gcc/target.h
index 698841c2357..9c8a6308e8c 100644
--- a/gcc/target.h
+++ b/gcc/target.h
@@ -122,6 +122,13 @@ struct gcc_target
/* Output a destructor for a symbol with a given priority. */
void (* destructor) PARAMS ((rtx, int));
+
+ /* Output the assembler code for a thunk function. */
+ void (* output_mi_thunk) PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
+
+ /* Output the assembler code for a thunk function with a vcall offset. */
+ void (* output_mi_vcall_thunk) PARAMS ((FILE *, tree, HOST_WIDE_INT,
+ HOST_WIDE_INT, tree));
} asm_out;
/* Functions relating to instruction scheduling. */
@@ -263,6 +270,7 @@ struct gcc_target
/* Undo the effects of encode_section_info on the symbol string. */
const char * (* strip_name_encoding) PARAMS ((const char *));
+ bool (* valid_pointer_mode) PARAMS ((enum machine_mode mode));
/* Leave the boolean fields at the end. */
/* True if arbitrary sections are supported. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a7af258e6df..132f1969f08 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -2,11 +2,332 @@
* gcc.dg/vr-mult[1-7].c: New tests.
+2002-10-21 Zack Weinberg <zack@codesourcery.com>
+
+ * gcc.dg/noncompile/920923-1.c: Prevent spurious regressions with
+ bison 1.50 or later.
+
+ * gcc.dg/sibcall-5.c: Correct { dg-do run } line.
+
+2002-10-20 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
+
+ * testsuite/gcc.dg/i386-sse-3.c: Add tests for _mm_srli_si128 and
+ _mm_slli_si128.
+
+2002-10-19 Andreas Schwab <schwab@suse.de>
+
+ * lib/compat.exp (compat-run): Prepend "./" when $dest has no
+ directory component.
+
+2002-10-18 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/inherit/thunk1.C: New test.
+
+ * g++.dg/inherit/override1.C: New test.
+
+ * g++.dg/abi/mangle11.C: New test.
+ * g++.dg/abi/mangle14.C: New test.
+ * g++.dg/abi/mangle17.C: New test.
+
+2002-10-17 Nathan Sidwell <nathan@codesourcery.com>
+
+ * g++.dg/overload/member2.C: New test.
+
+2002-10-17 Janis Johnson <janis187@us.ibm.com>
+
+ * g++.dg/README: Describe new compat directory.
+ * g++.dg/dg.exp: Skip tests in compat directory.
+ * README.compat: New file.
+ * lib/compat.exp: New expect script.
+ * g++.dg/compat: New test directory.
+ * g++.dg/compat/compat.exp: New expect script.
+ * g++.dg/compat/abi: New test directory.
+ * g++.dg/compat/abi/bitfield1_x.C, g++.dg/compat/abi/bitfield1_main.C,
+ g++.dg/compat/abi/bitfield1_y.C, g++.dg/compat/abi/bitfield1.h,
+ g++.dg/compat/abi/bitfield2_x.C, g++.dg/compat/abi/bitfield2_main.C,
+ g++.dg/compat/abi/bitfield2_y.C, g++.dg/compat/abi/bitfield2.h,
+ g++.dg/compat/abi/vbase8-10_x.C, g++.dg/compat/abi/vbase8-10_main.C,
+ g++.dg/compat/abi/vbase8-10_y.C, g++.dg/compat/abi/vbase8-10.h,
+ g++.dg/compat/abi/vbase8-21_x.C, g++.dg/compat/abi/vbase8-21_main.C,
+ g++.dg/compat/abi/vbase8-21_y.C, g++.dg/compat/abi/vbase8-21.h,
+ g++.dg/compat/abi/vbase8-22_x.C, g++.dg/compat/abi/vbase8-22_main.C,
+ g++.dg/compat/abi/vbase8-22_y.C, g++.dg/compat/abi/vbase8-22.h,
+ g++.dg/compat/abi/vbase8-4_x.C, g++.dg/compat/abi/vbase8-4_main.C,
+ g++.dg/compat/abi/vbase8-4_y.C, g++.dg/compat/abi/vbase8-4.h: New files.
+ * g++.dg/compat/break: New test directory.
+ * g++.dg/compat/break/empty6_x.C, g++.dg/compat/break/empty6_main.C,
+ g++.dg/compat/break/empty6_y.C, g++.dg/compat/break/empty6.h,
+ g++.dg/compat/break/vbase10_x.C, g++.dg/compat/break/vbase10_main.C,
+ g++.dg/compat/break/vbase10_y.C, g++.dg/compat/break/vbase10.h,
+ g++.dg/compat/break/vbase11_x.C, g++.dg/compat/break/vbase11_main.C,
+ g++.dg/compat/break/vbase11_y.C, g++.dg/compat/break/vbase11.h,
+ g++.dg/compat/break/bitfield7_x.C, g++.dg/compat/break/bitfield7_main.C,
+ g++.dg/compat/break/bitfield7_y.C, g++.dg/compat/break/bitfield7.h,
+ g++.dg/compat/break/bitfield5_x.C, g++.dg/compat/break/bitfield5_main.C,
+ g++.dg/compat/break/bitfield5_y.C, g++.dg/compat/break/bitfield5.h,
+ g++.dg/compat/break/README: New files.
+ * g++.dg/compat/eh: New test directory.
+ * g++.dg/compat/eh/ctor1_x.C, g++.dg/compat/eh/ctor1_main.C,
+ g++.dg/compat/eh/ctor1_y.C, g++.dg/compat/eh/ctor1.h,
+ g++.dg/compat/eh/ctor2_x.C, g++.dg/compat/eh/ctor2_main.C,
+ g++.dg/compat/eh/ctor2_y.C, g++.dg/compat/eh/ctor2.h,
+ g++.dg/compat/eh/dtor1_x.C, g++.dg/compat/eh/dtor1_main.C,
+ g++.dg/compat/eh/dtor1_y.C, g++.dg/compat/eh/dtor1.h,
+ g++.dg/compat/eh/filter1_x.C, g++.dg/compat/eh/filter1_main.C,
+ g++.dg/compat/eh/filter1_y.C, g++.dg/compat/eh/filter1.h,
+ g++.dg/compat/eh/filter2_x.C, g++.dg/compat/eh/filter2_main.C,
+ g++.dg/compat/eh/filter2_y.C,
+ g++.dg/compat/eh/new1_x.C, g++.dg/compat/eh/new1_main.C,
+ g++.dg/compat/eh/new1_y.C,
+ g++.dg/compat/eh/nrv1_x.C, g++.dg/compat/eh/nrv1_main.C,
+ g++.dg/compat/eh/nrv1_y.C, g++.dg/compat/eh/nrv1.h,
+ g++.dg/compat/eh/spec3_x.C, g++.dg/compat/eh/spec3_main.C,
+ g++.dg/compat/eh/spec3_y.C, g++.dg/compat/eh/spec3.h,
+ g++.dg/compat/eh/template1_x.C, g++.dg/compat/eh/template1_main.C,
+ g++.dg/compat/eh/template1_y.C, g++.dg/compat/eh/template1.h,
+ g++.dg/compat/eh/unexpected1_x.C, g++.dg/compat/eh/unexpected1_main.C,
+ g++.dg/compat/eh/unexpected1_y.C: New files.
+ * g++.dg/compat/init: New test directory.
+ * g++.dg/compat/init/array5_x.C, g++.dg/compat/init/array5_main.C,
+ g++.dg/compat/init/array5_y.C,
+ g++.dg/compat/init/byval1_x.C, g++.dg/compat/init/byval1_main.C,
+ g++.dg/compat/init/byval1_y.C, g++.dg/compat/init/byval1.h,
+ g++.dg/compat/init/dtor1_x.C, g++.dg/compat/init/dtor1_main.C,
+ g++.dg/compat/init/dtor1_y.C, g++.dg/compat/init/dtor1.h,
+ g++.dg/compat/init/elide1_x.C, g++.dg/compat/init/elide1_main.C,
+ g++.dg/compat/init/elide1_y.C, g++.dg/compat/init/elide1.h,
+ g++.dg/compat/init/init-ref2_x.C, g++.dg/compat/init/init-ref2_main.C,
+ g++.dg/compat/init/init-ref2_y.C: New files.
+
+2002-10-17 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7584
+ * g++.dg/inherit/using3.C: New test.
+
+Thu Oct 17 19:12:58 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * gcc.dg/20021017-2.c: New test.
+
+2002-10-17 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/abi/mangle16.C: Adjust.
+
+ * g++.dg/init/array8.C: New test.
+
+2002-10-17 Richard Sandiford <rsandifo@redhat.com>
+
+ * gcc.dg/special/mips-abi.exp: New test.
+ * gcc.dg/special/mips-abi.s: Empty file used by the above.
+
+2002-10-16 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/abi/mangle16.C: New test.
+ * g++.dg/abi/mangle17.C: Likewise.
+
+ PR c++/7478
+ * g++.dg/template/ref1.C: New test.
+
+2002-10-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.c-torture/execute/20020720-1.x: Don't XFAIL for mips.
+
+2002-10-16 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * gcc.dg/weak/typeof-2.c: For S/390 targets, return before baz3 test.
+
+2002-10-16 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7524
+ * g++.dg/init/array7.C: New test.
+
+2002-10-15 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/init/array6.C: New test.
+
+ * g++.dg/abi/mangle13.C: Likewise.
+ * g++.dg/abi/mangle14.C: Likewise.
+ * g++.dg/abi/mangle15.C: Likewise.
+
+2002-10-14 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/abi/empty8.C: New test.
+
+2002-10-15 Nathan Sidwell <nathan@codesourcery.com>
+
+ * g++.dg/init/ctor1.C: New test.
+
+2002-10-15 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * gcc.c-torture/execute/20021015-1.c: New test.
+
+Tue Oct 15 14:22:41 2002 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * gcc.dg/weak/typeof-2.c: For SH targets, return before baz3 test.
+
+Mon Oct 14 20:37:51 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * gcc.dg/i386-ssetype-[1-5].c: New tests.
+
+2002-10-14 Richard Henderson <rth@redhat.com>
+
+ * gcc.dg/20020219-1.c: Disable for 16-bit targets.
+
+2002-10-14 Mark Mitchell <mark@codesourcery.com>
+
+ PR optimization/6631
+ * g++.dg/opt/const2.C: New test.
+
+2002-10-14 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7176
+ * g++.dg/parse/friend1.C: New test.
+ * g++.old-deja/g++.pt/memtemp64.C: Adjust.
+
+2002-10-14 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.dg/20021014-1.c: New test.
+
+2002-10-11 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/5661
+ * g++.dg/ext/vlm1.C: New test.
+ * g++.dg/ext/vlm2.C: Likewise.
+
+ * g++.dg/init/array1.C: Remove invalid braces.
+ * g++.dg/init/brace1.C: New test.
+ * g++.dg/init/copy2.C: Likewise.
+ * g++.dg/init/copy3.C: Likewise.
+ * g++.old-deja/g++.ext/arrnew.C: Change WARNING to ERROR.
+ * g++.old-deja/g++.mike/p9129.C: Add ERROR on invalid use of
+ braces.
+
+2002-10-11 Neil Booth <neil@daikokuya.co.uk>
+
+ * gcc.dg/cpp/assembler.S: Don't use -ansi.
+
+Fri Oct 11 10:56:49 2002 Richard Shann <richard.shann@superh.com>
+
+ * gcc.c-torture/compile/simd-5.c: New test.
+
+2002-10-10 Roger Sayle <roger@eyesopen.com>
+
+ * gcc.c-torture/execute/shiftopt-1.c: New test case.
+
+2002-10-10 Jim Wilson <wilson@redhat.com>
+
+ * gcc.c-torture/execute/20021010-1.c: New test.
+
+2002-10-09 Zack Weinberg <zack@codesourcery.com>
+
+ PR c/7353
+ * g++.dg/ext/typedef-init.C: New test.
+ * gcc.dg/typedef-init.c: New test.
+
+2002-10-09 Neil Booth <neil@daikokuya.co.uk>
+
+ * gcc.dg/cpp/paste13.c: New test.
+
+2002-10-08 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.c-torture/execute/20020720-1.x: Take out sparc XFAILs. For
+ remaining platforms, XFAIL during compile, not execute. Don't
+ XFAIL at -O0.
+
+2002-10-08 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gcc.dg/alias-1.c: Tweak expected warning.
+
+2002-10-06 D.Venkatasubramanian <dvenkat@noida.hcltech.com>
+
+ * gcc.dg/20020411-1.c: Disable for 16-bit "int".
+
+2002-10-06 Andreas Jaeger <aj@suse.de>
+
+ * gcc.dg/cpp/c++98-pedantic.C: Moved to g++.dg/cpp.
+ * gcc.dg/cpp/c++98.C: Likewise.
+
+ * g++.dg/cpp/c++98-pedantic.C: Moved from gcc.dg/cpp to here.
+ * g++.dg/cpp/c++98.C: Likewise.
+
+ * g++.dg/README (Subdirectories): Mention cpp directory.
+
+ PR target/7559
+ * gcc.dg/20021006-1.c: New test.
+
+2002-10-05 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/7804
+ * g++.dg/other/warning1.C: New test.
+
+2002-10-04 Roger Sayle <roger@eyesopen.com>
+
+ * gcc.c-torture/execute/20020720-1.x: XFAIL instead of skipping
+ the test on failing platforms. Mark sparcv9-*-*, sparc64-*-*
+ and sparc-*-* with -m64 as expected failures. See PR 8087.
+
+2002-10-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7931
+ * g++.dg/template/ptrmem3.C: New test.
+
+ PR c++/7754
+ * g++.dg/template/union1.C: New test.
+
+2002-10-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/8006
+ * g++.dg/abi/mangle9.C: New test.
+ * g++.dg/abi/mangle10.C: New test.
+ * g++.dg/abi/mangle11.C: New test.
+ * g++.dg/abi/mangle12.C: New test.
+
+2002-10-02 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7188.
+ * g++.dg/template/meminit1.C: New test.
+ * g++.dg/warn/Wreorder-1.C: Likewise.
+ * g++.old-deja/g++.mike/warn3.C: Tweak.
+ * lib/prune.exp: Ingore "in copy constructor".
+
+2002-10-02 Andreas Jaeger <aj@suse.de>
+
+ * gcc.dg/20020919-1.c, gcc.dg/inline-2.c, gcc.dg/980211-1.c,
+ gcc.dg/20020103-1.c, gcc.dg/20000614-2.c,
+ g++.old-deja/g++.pt/asm1.C, g++.old-deja/g++.other/asm3.C: Enable
+ on x86-64.
+
+2002-10-01 Mark Mitchell <mark@codesourcery.com>
+
+ * gcc.dg/empty1.C: Fix typo.
+
+2002-10-01 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gcc.dg/alias-1.c: New test.
+
+2002-10-01 Mark Mitchell <mark@codesourcery.com>
+
+ * gcc.dg/empty1.C: New test.
+
+ * g++.dg/tls/init-2.C: Tweak error messages.
+
+2002-10-01 Richard Sandiford <rsandifo@redhat.com>
+
+ * gcc.c-torture/compile/20020923-1.c: New test.
+
+2002-09-30 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * gcc.c-torture/execute/ffs-1.c: New test.
+ * gcc.c-torture/execute/ffs-2.c: Ditto.
+
+2002-09-30 Nathan Sidwell <nathan@codesourcery.com>
+
+ * g++.dg/overload/member1.C: New test.
+
2002-09-30 Mark Mitchell <mark@codesourcery.com>
* g++.dg/abi/empty7.C: New test.
* g++.dg/init/pm2.C: Likewise.
-
+
2002-09-29 Nathan Sidwell <nathan@codesourcery.com>
* g++.dg/rtti/crash1.C: New test.
@@ -224,6 +545,11 @@ Tue Sep 17 13:59:45 2002 Nicola Pero <n.pero@mi.flashnet.it>
* gcc.c-torture/execute/struct-cpy-1.c: New test.
+2002-09-13 Matt Austern <austern@apple.com>
+
+ * testsuite/g++.dg/other/constref[12].C: New, regression tests for
+ passing a cast expression to a function by const reference.
+
2002-09-13 Nathan Sidwell <nathan@codesourcery.com>
* g++.dg/template/deduce1.C: New test.
diff --git a/gcc/testsuite/g++.dg/README b/gcc/testsuite/g++.dg/README
index 073913f2056..07e7572a71d 100644
--- a/gcc/testsuite/g++.dg/README
+++ b/gcc/testsuite/g++.dg/README
@@ -1,6 +1,8 @@
Subdirectories:
abi Tests for ABI compatibility -- mangling, object layout, etc.
+compat Tests for binary compatibility (consistency, not ABI conformance)
+cpp Tests for the preprocessor.
eh Tests for exception handling.
expr Tests for expressions.
ext Tests for GNU language extensions.
diff --git a/gcc/testsuite/g++.dg/dg.exp b/gcc/testsuite/g++.dg/dg.exp
index 9e48af8f914..ea96197332f 100644
--- a/gcc/testsuite/g++.dg/dg.exp
+++ b/gcc/testsuite/g++.dg/dg.exp
@@ -32,6 +32,7 @@ dg-init
# that are handled specially.
set tests [lsort [find $srcdir/$subdir *.C]]
set tests [prune $tests $srcdir/$subdir/bprob/*]
+set tests [prune $tests $srcdir/$subdir/compat/*]
set tests [prune $tests $srcdir/$subdir/debug/*]
set tests [prune $tests $srcdir/$subdir/gcov/*]
set tests [prune $tests $srcdir/$subdir/special/*]
diff --git a/gcc/testsuite/g++.dg/inherit/override1.C b/gcc/testsuite/g++.dg/inherit/override1.C
index 8f80046413f..04460edab74 100644
--- a/gcc/testsuite/g++.dg/inherit/override1.C
+++ b/gcc/testsuite/g++.dg/inherit/override1.C
@@ -1,5 +1,3 @@
-// { dg-options "-w" }
-
struct c0 { virtual void f (); };
struct c1 : public c0 {};
struct c2 : public c0 {};
diff --git a/gcc/testsuite/g++.dg/init/array1.C b/gcc/testsuite/g++.dg/init/array1.C
index 8618e1e6018..5847247c158 100644
--- a/gcc/testsuite/g++.dg/init/array1.C
+++ b/gcc/testsuite/g++.dg/init/array1.C
@@ -6,15 +6,15 @@
typedef int iArr[];
const iArr array4={
- {1},{2},{3},{4}
+ 1, 2, 3, 4
};
const iArr array3={
- {1},{2},{3}
+ 1, 2, 3
};
const iArr array5={
- {1},{2},{3},{4},{5}
+ 1, 2, 3, 4, 5
};
int main()
diff --git a/gcc/testsuite/g++.dg/init/array6.C b/gcc/testsuite/g++.dg/init/array6.C
index 6181d02bfd2..1b04709cb92 100644
--- a/gcc/testsuite/g++.dg/init/array6.C
+++ b/gcc/testsuite/g++.dg/init/array6.C
@@ -1,7 +1,3 @@
// { dg-do compile }
char arr [][4] = { "one", "two" };
-const char arr2[][4] = { "one", "two" };
-signed char arr3[][4] = { "one", "two" };
-const unsigned char arr4[][4] = { "one", "two" };
-volatile wchar_t arr5[][4] = { L"one", L"two" };
diff --git a/gcc/testsuite/g++.dg/tls/init-2.C b/gcc/testsuite/g++.dg/tls/init-2.C
index 49df50147b3..0fff6f6ab1e 100644
--- a/gcc/testsuite/g++.dg/tls/init-2.C
+++ b/gcc/testsuite/g++.dg/tls/init-2.C
@@ -1,13 +1,13 @@
/* Invalid initializations. */
extern __thread int i;
-__thread int *p = &i; /* { dg-error "run-time initialization" } */
+__thread int *p = &i; /* { dg-error "dynamically initialized" } */
extern int f();
-__thread int j = f(); /* { dg-error "run-time initialization" } */
+__thread int j = f(); /* { dg-error "dynamically initialized" } */
struct S
{
S();
};
-__thread S s; /* { dg-error "run-time initialization" } */
+__thread S s; /* { dg-error "non-POD" } */
diff --git a/gcc/testsuite/g++.old-deja/g++.ext/arrnew.C b/gcc/testsuite/g++.old-deja/g++.ext/arrnew.C
index 0ecb8777e26..53030e0d3d7 100644
--- a/gcc/testsuite/g++.old-deja/g++.ext/arrnew.C
+++ b/gcc/testsuite/g++.old-deja/g++.ext/arrnew.C
@@ -3,5 +3,5 @@
// Special g++ Options:
int *f(){
- return new int[1] = { 1 }; // WARNING - deprecated
+ return new int[1] = { 1 }; // ERROR - removed
}
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p9129.C b/gcc/testsuite/g++.old-deja/g++.mike/p9129.C
index d66dab52d09..a986104688e 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/p9129.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/p9129.C
@@ -7,6 +7,6 @@ public:
int DoSomething();
};
-int (Foo::*pA)() = { &Foo::DoSomething };
+int (Foo::*pA)() = { &Foo::DoSomething }; // ERROR -
int (Foo::*X[1])(int) = { { &Foo::DoSomething } }; // ERROR -
int (Foo::*Y[])(int) = { { &Foo::DoSomething, &Foo::DoSomething, 0 } }; // ERROR -
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/warn3.C b/gcc/testsuite/g++.old-deja/g++.mike/warn3.C
index 7adc8a1c37f..d5ed38371d7 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/warn3.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/warn3.C
@@ -7,6 +7,6 @@ public:
};
class D : public B {
- int member;
+ int member; // WARNING - reordered
D() : member(0), B(member) { } // WARNING - reordered
};
diff --git a/gcc/testsuite/g++.old-deja/g++.other/asm3.C b/gcc/testsuite/g++.old-deja/g++.other/asm3.C
index d37de69329a..bf0e423db33 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/asm3.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/asm3.C
@@ -1,5 +1,5 @@
// Build don't link:
-// Skip if not target: i?86-*-*
+// Skip if not target: i?86-*-* x86_64-*-*
// Special g++ Options: -O2
typedef unsigned long long uint64;
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/asm1.C b/gcc/testsuite/g++.old-deja/g++.pt/asm1.C
index d093002ff8f..70092521dc4 100644
--- a/gcc/testsuite/g++.old-deja/g++.pt/asm1.C
+++ b/gcc/testsuite/g++.old-deja/g++.pt/asm1.C
@@ -1,6 +1,6 @@
// Build don't link:
// Origin: "Weidmann, Nicholas" <nicholas.weidmann@swx.ch>
-// Skip if not target: i?86-*-linux*
+// Skip if not target: i?86-*-linux* x86_64-*-linux
template<int i> int foo(int v)
{
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/memtemp64.C b/gcc/testsuite/g++.old-deja/g++.pt/memtemp64.C
index fbebe3ae82f..6185d3d6058 100644
--- a/gcc/testsuite/g++.old-deja/g++.pt/memtemp64.C
+++ b/gcc/testsuite/g++.old-deja/g++.pt/memtemp64.C
@@ -4,7 +4,7 @@ template <class T>
struct S1 {};
template <class T>
-void f(T); // ERROR - original declaration.
+void f(T);
template <class C>
struct S2
diff --git a/gcc/testsuite/gcc.c-torture/execute/20020720-1.x b/gcc/testsuite/gcc.c-torture/execute/20020720-1.x
index d6e43e769ce..167f76274b5 100644
--- a/gcc/testsuite/gcc.c-torture/execute/20020720-1.x
+++ b/gcc/testsuite/gcc.c-torture/execute/20020720-1.x
@@ -9,11 +9,16 @@
# for example the comparison insn takes 0.0 as an operand, the
# combiner is able to see all intermediate instructions simultaneously
# and can make the optimization.
-if { [istarget "mips*-*-*"] || [istarget "xtensa-*-*"] \
- || [istarget "sh-*-*"] \
- || [istarget "arm*-*-*"] || [istarget "strongarm*-*-*"] \
- || [istarget "xscale*-*-*"] } {
- return 1
+
+# Don't XFAIL at -O0, that should never fail.
+set torture_eval_before_compile {
+ global compiler_conditional_xfail_data
+ set compiler_conditional_xfail_data {
+ "This test fails to optimize completely on certain platforms." \
+ { "xtensa-*-*" "sh-*-*" "arm*-*-*" "strongarm*-*-*" "xscale*-*-*" } \
+ { "*" } \
+ { "-O0" }
+ }
}
return 0
diff --git a/gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c b/gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c
new file mode 100644
index 00000000000..fa9517a73db
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c
@@ -0,0 +1,73 @@
+/* Copyright (C) 2002 Free Software Foundation
+
+ Check that constant folding of shift operations is working.
+
+ Roger Sayle, 10th October 2002. */
+
+extern void abort (void);
+extern void link_error (void);
+
+void
+utest (unsigned int x)
+{
+ if (x >> 0 != x)
+ link_error ();
+
+ if (x << 0 != x)
+ link_error ();
+
+ if (0 << x != 0)
+ link_error ();
+
+ if (0 >> x != 0)
+ link_error ();
+
+ if (-1 >> x != -1)
+ link_error ();
+
+ if (~0 >> x != ~0)
+ link_error ();
+}
+
+void
+stest (int x)
+{
+ if (x >> 0 != x)
+ link_error ();
+
+ if (x << 0 != x)
+ link_error ();
+
+ if (0 << x != 0)
+ link_error ();
+
+ if (0 >> x != 0)
+ link_error ();
+
+ if (-1 >> x != -1)
+ link_error ();
+
+ if (~0 >> x != ~0)
+ link_error ();
+}
+
+int
+main ()
+{
+ utest(9);
+ utest(0);
+
+ stest(9);
+ stest(0);
+
+ return 0;
+}
+
+#ifndef __OPTIMIZE__
+void
+link_error ()
+{
+ abort ();
+}
+#endif
+
diff --git a/gcc/testsuite/gcc.dg/20000614-2.c b/gcc/testsuite/gcc.dg/20000614-2.c
index 17a20205a3d..eb30fc6cd55 100644
--- a/gcc/testsuite/gcc.dg/20000614-2.c
+++ b/gcc/testsuite/gcc.dg/20000614-2.c
@@ -1,4 +1,4 @@
-/* { dg-do run { target i?86-*-* } } */
+/* { dg-do run { target i?86-*-* x86_64-*-*} } */
/* { dg-options "-O2 -fno-strength-reduce" } */
extern void abort (void);
diff --git a/gcc/testsuite/gcc.dg/20020103-1.c b/gcc/testsuite/gcc.dg/20020103-1.c
index 7a5fdbe4b45..5197fa67e1f 100644
--- a/gcc/testsuite/gcc.dg/20020103-1.c
+++ b/gcc/testsuite/gcc.dg/20020103-1.c
@@ -1,6 +1,6 @@
/* Verify that constant equivalences get reloaded properly, either by being
spilled to the stack, or regenerated, but not dropped to memory. */
-/* { dg-do compile { target i?86-*-* powerpc-*-* rs6000-*-* alpha*-*-* } } */
+/* { dg-do compile { target i?86-*-* powerpc-*-* rs6000-*-* alpha*-*-* x86_64-*-*} } */
/* { dg-options "-O2 -fpic -fno-omit-frame-pointer" } */
/* { dg-final { scan-assembler-not "LC" } } */
@@ -16,6 +16,9 @@
#define clobber \
asm volatile("#asm" : : : "$9", "$10", "$11", "$12", "$13", "$14", \
"$f2", "$f3", "$f4", "$f5", "$f6", "$f7", "$f8", "$f9")
+#elif defined(__x86_64__)
+#define clobber \
+ asm volatile("#asm" : : : "rcx", "rdx", "rsi", "rdi", "r8", "r9", "r10", "r11")
#else
#error no clobber macro defined
#endif
diff --git a/gcc/testsuite/gcc.dg/20020219-1.c b/gcc/testsuite/gcc.dg/20020219-1.c
index 596f268cc5c..a3cda0e65d6 100644
--- a/gcc/testsuite/gcc.dg/20020219-1.c
+++ b/gcc/testsuite/gcc.dg/20020219-1.c
@@ -9,6 +9,9 @@
/* { dg-options "-O2" } */
/* { dg-options "-O2 -mdisable-indexing" { target hppa*-*-hpux* } } */
+/* Disable the test entirely for 16-bit targets. */
+#if __INT_MAX__ > 32767
+
extern void abort (void);
extern void exit (int);
struct A {
@@ -31,3 +34,9 @@ int main (void)
foo (x - 1, 9999);
exit (0);
}
+
+#else
+
+int main () { return 0; }
+
+#endif /* __INT_MAX__ */
diff --git a/gcc/testsuite/gcc.dg/20020411-1.c b/gcc/testsuite/gcc.dg/20020411-1.c
index d8a939254a8..a1834b8a1a5 100644
--- a/gcc/testsuite/gcc.dg/20020411-1.c
+++ b/gcc/testsuite/gcc.dg/20020411-1.c
@@ -5,6 +5,8 @@
/* { dg-options "-O2" } */
/* { dg-options "-O2 -march=i686" { target i?86-*-* } } */
+#if __INT_MAX__ > 32767
+
typedef struct
{
unsigned a : 16;
@@ -48,3 +50,5 @@ baz (unsigned int x, unsigned char y)
foo (&t, 1);
bar (&t);
}
+
+#endif /* __INT_MAX__ */
diff --git a/gcc/testsuite/gcc.dg/20020919-1.c b/gcc/testsuite/gcc.dg/20020919-1.c
index daf88581710..0eb6b50bdc9 100644
--- a/gcc/testsuite/gcc.dg/20020919-1.c
+++ b/gcc/testsuite/gcc.dg/20020919-1.c
@@ -8,7 +8,7 @@
You must be this tall ---> fit two long longs in asm-declared registers
to enter this amusement. */
-/* { dg-do compile { target alpha-*-* cris-*-* i?86-*-* mmix-*-* powerpc-*-* rs6000-*-* } } */
+/* { dg-do compile { target alpha-*-* cris-*-* i?86-*-* mmix-*-* powerpc-*-* rs6000-*-* x86_64-*-* } } */
/* { dg-options "-O2" } */
/* Constructed examples; input/output (same register), output, input, and
@@ -42,6 +42,9 @@
# define REG2 "7"
# define REG3 "8"
# define REG4 "9"
+#elif defined (__x86_64__)
+# define REG1 "rax"
+# define REG2 "rdx"
#endif
/* For readability of the tests. */
diff --git a/gcc/testsuite/gcc.dg/980211-1.c b/gcc/testsuite/gcc.dg/980211-1.c
index 11b3c36f172..973a30fbd67 100644
--- a/gcc/testsuite/gcc.dg/980211-1.c
+++ b/gcc/testsuite/gcc.dg/980211-1.c
@@ -1,6 +1,6 @@
-/* Test long double on x86. */
+/* Test long double on x86 and x86-64. */
-/* { dg-do run { target i?86-*-* } } */
+/* { dg-do run { target i?86-*-* x86_64-*-*} } */
/* { dg-options -O2 } */
extern void abort (void);
diff --git a/gcc/testsuite/gcc.dg/cpp/assembler.S b/gcc/testsuite/gcc.dg/cpp/assembler.S
index 729162a5120..7069b7b50ac 100644
--- a/gcc/testsuite/gcc.dg/cpp/assembler.S
+++ b/gcc/testsuite/gcc.dg/cpp/assembler.S
@@ -3,6 +3,7 @@
in the output, and should not be warned about. */
/* { dg-do preprocess } */
+/* { dg-options "" } */
#define foo() mov r0, #5 /* { dg-bogus "not followed" "spurious warning" } */
diff --git a/gcc/testsuite/gcc.dg/cpp/c++98-pedantic.C b/gcc/testsuite/gcc.dg/cpp/c++98-pedantic.C
deleted file mode 100644
index 61e13c5d145..00000000000
--- a/gcc/testsuite/gcc.dg/cpp/c++98-pedantic.C
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc. */
-
-/* { dg-do preprocess } */
-/* { dg-options "-std=c++98 -pedantic" } */
-
-/* This file is for testing the preprocessor in -std=c++98 -pedantic mode.
- Neil Booth, 2 Dec 2000. */
-
-#if 1LL /* { dg-warning "long long" } */
-#endif
diff --git a/gcc/testsuite/gcc.dg/cpp/c++98.C b/gcc/testsuite/gcc.dg/cpp/c++98.C
deleted file mode 100644
index 0ec4f359f04..00000000000
--- a/gcc/testsuite/gcc.dg/cpp/c++98.C
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc. */
-
-/* { dg-do preprocess } */
-/* { dg-options "-std=c++98" } */
-
-/* This file is for testing the preprocessor in -std=c++98 mode.
- Neil Booth, 2 Dec 2000. */
-
-#if 1LL
-#endif
diff --git a/gcc/testsuite/gcc.dg/i386-sse-3.c b/gcc/testsuite/gcc.dg/i386-sse-3.c
index d67a5910cdc..9f31cfa92f8 100644
--- a/gcc/testsuite/gcc.dg/i386-sse-3.c
+++ b/gcc/testsuite/gcc.dg/i386-sse-3.c
@@ -1,5 +1,5 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
-/* { dg-options "-O2 -msse" } */
+/* { dg-options "-O2 -msse -msse2" } */
/* Test that the intrinsics compile with optimization. These were not
tested in i386-sse-[12].c because these builtins require immediate
@@ -35,3 +35,15 @@ test_prefetch (char *p)
_mm_prefetch (p+8, _MM_HINT_T2);
_mm_prefetch (p+12, _MM_HINT_NTA);
}
+
+__m128i
+test__slli_si128 (__m128i a)
+{
+ return _mm_slli_si128 (a, 3);
+}
+
+__m128i
+test__srli_si128 (__m128i a)
+{
+ return _mm_srli_si128 (a, 3);
+}
diff --git a/gcc/testsuite/gcc.dg/inline-2.c b/gcc/testsuite/gcc.dg/inline-2.c
index 1320143c519..0049fc8336d 100644
--- a/gcc/testsuite/gcc.dg/inline-2.c
+++ b/gcc/testsuite/gcc.dg/inline-2.c
@@ -15,5 +15,5 @@ int bar(void)
}
/* { dg-final { scan-assembler "bsr" { target alpha*-*-* } } } */
-/* { dg-final { scan-assembler-not "PLT" { target i?86-*-* } } } */
+/* { dg-final { scan-assembler-not "PLT" { target i?86-*-* x86_64-*-* } } } */
/* { dg-final { scan-assembler-not "plt" { target powerpc*-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/noncompile/920923-1.c b/gcc/testsuite/gcc.dg/noncompile/920923-1.c
index 61931776cf1..b2bc1fdce5b 100644
--- a/gcc/testsuite/gcc.dg/noncompile/920923-1.c
+++ b/gcc/testsuite/gcc.dg/noncompile/920923-1.c
@@ -1,35 +1,49 @@
-typedef BYTE unsigned char; /* { dg-error "syntax error|empty decl" } */
+/* This test case contains a large number of syntactic errors. We
+ believe the intent of the test is that the compiler simply not
+ crash. The set of error messages reported is different when the C
+ parser is generated with bison 1.50 than 1.35. It is not worth
+ attempting to prevent this. Instead, we use a single dg-error with
+ a regexp that will match _all_ the errors indiscriminately. The
+ old error/warning/etc markers are kept around for reference, but
+ disabled.
+
+ Revisit after new (recursive descent) parser is implemented for C.
+ -- zw 2002-10-17 */
+
+/* { dg-error ".*" "many syntax errors" { target *-*-* } 0 } */
+
+typedef BYTE unsigned char; /* { error "syntax error|empty decl" } */
typedef int item_n;
typedef int perm_set;
-struct PENT { caddr_t v_addr; };/* { dg-error "parse error|no semicolon" } */
+struct PENT { caddr_t v_addr; };/* { error "parse error|no semicolon" } */
typedef struct PENT prec;
typedef struct PENT *prec_t;
prec_t mem_hash;
-BYTE *mem_base; /* { dg-error "parse error|no type" } */
+BYTE *mem_base; /* { error "parse error|no type" } */
struct PTE {
- BYTE *p_page; /* { dg-error "parse error|no semicolon" } */
+ BYTE *p_page; /* { error "parse error|no semicolon" } */
perm_set p_perms;
-}; /* { dg-error "parse error" } */
+}; /* { error "parse error" } */
typedef struct PTE pte;
struct PTP {
union {
- struct *PTP p_tablep; /* { dg-error "parse error|no semicolon" } */
+ struct *PTP p_tablep; /* { error "parse error|no semicolon" } */
struct *PTE p_entry;
- } u; /* { dg-warning "no type or storage class" } */
+ } u; /* { warning "no type or storage class" } */
int valid;
-}; /* { dg-error "parse error" } */
-typedef struct PTP (u.p_tablep);/* { dg-error "parse error" } */
+}; /* { error "parse error" } */
+typedef struct PTP (u.p_tablep);/* { error "parse error" } */
int pfree=0;
int pcount=0;
void
mmu_walk_find(va)
-caddr_t va; /* { dg-error "parse error|no type" } */
+caddr_t va; /* { error "parse error|no type" } */
{
BYTE *page_addr;
if (mmu_base[Level1(va)]->valid==0x0) {
l1_base = mmu_base[Level1(va)]->(u.p_tablep) = p_alloc();
- mmu_base[Level1(va)]->valid = 0x3; /* { dg-error "parse error" } */
+ mmu_base[Level1(va)]->valid = 0x3; /* { error "parse error" } */
for (idx=0; idx<LEVEL1_ENTRIES; idx++)
l1_base[idx]->valid = 0x0;
goto build_level2;
@@ -39,43 +53,43 @@ caddr_t va; /* { dg-error "parse error|no type" } */
if (l1_base[Level2(va)]->valid==0x0) {
build_level2:
l2_base = l1_base[Level2(va)]->(u.p_tablep) = p_alloc();
- l1_base[Level2(va)]->valid = 0x3; /* { dg-error "parse error" } */
+ l1_base[Level2(va)]->valid = 0x3; /* { error "parse error" } */
for (idx=0; idx<LEVEL2_ENTRIES; idx++)
l2_base[idx]->valid=0x0;
goto build_page;
} else
l2_base = mmu_base[Level2(va)]->(u.p_tablep);
- page_addr = l2_base[Level2(va)]->valid;/* { dg-error "undeclared|no type" } */
-} /* { dg-error "parse error" } */
+ page_addr = l2_base[Level2(va)]->valid;/* { error "undeclared|no type" } */
+} /* { error "parse error" } */
void *
a_translate(va_op, v_addr)
int va_op;
-caddr_t v_addr; /* { dg-error "parse error" } */
+caddr_t v_addr; /* { error "parse error" } */
{
register prec_t bucket;
- register caddr_t p_addr; /* { dg-error "syntax error" } */
- bucket = mem_hash+((((v_addr)>>ITEMBITS))&hash_mask); /* { dg-error "undeclared|for each function" } */
+ register caddr_t p_addr; /* { error "syntax error" } */
+ bucket = mem_hash+((((v_addr)>>ITEMBITS))&hash_mask); /* { error "undeclared|for each function" } */
do {
- if (bucket->v_addr == ((v_addr)>>ITEMBITS) { /* { dg-error "incomplete type|parse error" } */
+ if (bucket->v_addr == ((v_addr)>>ITEMBITS) { /* { error "incomplete type|parse error" } */
if(!(bucket->perm_set&va_op))
goto prot_fault;
return mem_base + v_addr;
}
- } while((bucket++)->v_addr != ((caddr_t)0)); /* { dg-error "parse error" } */
+ } while((bucket++)->v_addr != ((caddr_t)0)); /* { error "parse error" } */
page_miss:
- p_addr = (--bucket)->p_addr; /* { dg-error "undeclared|pointer to" } */
+ p_addr = (--bucket)->p_addr; /* { error "undeclared|pointer to" } */
page_type:
switch (p_addr) {
- case BUCKET_FULL: /* { dg-error "undeclared" } */
+ case BUCKET_FULL: /* { error "undeclared" } */
enlarge_hash_table(mem_hash);
- case((caddr_t)0): /* { dg-error "undeclared|parse error" } */
+ case((caddr_t)0): /* { error "undeclared|parse error" } */
p_addr = fill_item_entry(va_op, v_addr);
goto page_type;
- case((caddr_t)1): /* { dg-error "parse error" } */
- default:
+ case((caddr_t)1): /* { error "parse error" } */
+ default:
((void)(((0))?0:(__eprintf("Failed assertion`%s'at line%d of`%s'.\n",
"FALSE", 327, "b.c"), 0)));
}
@@ -90,9 +104,9 @@ int hash_size;
register int idx;
bucket = hasht;
for(idx=(hash_size*3)-1; idx>=0; idx--) {
- bucket->v_addr = ((caddr_t)0);/* { dg-error "undeclared|pointer to|parse error" } */
- bucket->p_addr = ((caddr_t)0);/* { dg-error "pointer to|parse error" } */
- bucket->perm_set = VA_EMPTY; /* { dg-error "undeclared|pointer to" } */
+ bucket->v_addr = ((caddr_t)0);/* { error "undeclared|pointer to|parse error" } */
+ bucket->p_addr = ((caddr_t)0);/* { error "pointer to|parse error" } */
+ bucket->perm_set = VA_EMPTY; /* { error "undeclared|pointer to" } */
}
}
@@ -101,21 +115,21 @@ extern void *calloc(__SIZE_TYPE__, __SIZE_TYPE__);
void
init_mem()
{
- mem_base = (BYTE *) calloc(1024, (1<<13)); /* { dg-error "undeclared|parse error" } */
- ((void)((mem_base != (BYTE *)0) /* { dg-error "parse error" } */
+ mem_base = (BYTE *) calloc(1024, (1<<13)); /* { error "undeclared|parse error" } */
+ ((void)((mem_base != (BYTE *)0) /* { error "parse error" } */
? 0
: (__eprintf("Failed assertion`%s'at line%d of`%s'.\n",
"mem_base != (BYTE *)0", 366, "b.c"),
0)));
- hash_num = INIT_NUM_ENTRIES * 3; /* { dg-error "undeclared" } */
- mem_hash = (prec_t) calloc(hash_num, sizeof(prec)); /* { dg-error "incomplete type" } */
+ hash_num = INIT_NUM_ENTRIES * 3; /* { error "undeclared" } */
+ mem_hash = (prec_t) calloc(hash_num, sizeof(prec)); /* { error "incomplete type" } */
((void)((mem_hash != (prec_t)0)
? 0
: (__eprintf("Failed assertion`%s'at line%d of`%s'.\n",
"mem_hash != (prec_t)0", 370, "b.c"),
0)));
flush_hash(mem_hash, 32);
- build_ptables(mem_base, 1024*(1<<13)); /* { dg-bogus "integer overflow" "int smaller than 32 bits" { xfail "xstormy16-*-*" } } */
+ build_ptables(mem_base, 1024*(1<<13)); /* { bogus "integer overflow" "int smaller than 32 bits" } */
}
struct tm {
diff --git a/gcc/testsuite/gcc.dg/sibcall-5.c b/gcc/testsuite/gcc.dg/sibcall-5.c
new file mode 100644
index 00000000000..424908dba5a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/sibcall-5.c
@@ -0,0 +1,41 @@
+/* Check that indirect sibcalls understand regparm. */
+/* { dg-do run { target i?86-*-* } } */
+/* { dg-options "-O2" } */
+
+int (*f)(int, int) __attribute__((regparm(2)));
+int (*g)(int, int, int) __attribute__((regparm(3)));
+
+int __attribute__((noinline))
+foo(void)
+{
+ return f(1, 2);
+}
+
+int __attribute__((noinline))
+bar(void)
+{
+ return g(1, 2, 3);
+}
+
+int __attribute__((regparm(2)))
+f1(int x, int y)
+{
+ return x*3 + y;
+}
+
+int __attribute__((regparm(3)))
+g1(int x, int y, int z)
+{
+ return x*9 + y*3 + z;
+}
+
+int main()
+{
+ f = f1;
+ g = g1;
+ if (foo() != 1*3 + 2)
+ abort ();
+ if (bar() != 1*9 + 2*3 + 3)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/weak/typeof-2.c b/gcc/testsuite/gcc.dg/weak/typeof-2.c
index 34d67b20fdc..de7e2c9343e 100644
--- a/gcc/testsuite/gcc.dg/weak/typeof-2.c
+++ b/gcc/testsuite/gcc.dg/weak/typeof-2.c
@@ -26,4 +26,11 @@ int bar3 (int x)
// { dg-final { scan-assembler "baz2" } }
// { dg-final { scan-assembler-not "baz2.*baz2.*baz2.*baz2.*baz2.*baz2" } }
// { dg-final { scan-assembler-not "foo3" } }
+// SH targets put the funtion address into a constant pool and / or register,
+// so it does not appear repeated (as much as expected) in the assembler.
+// { dg-final { global target_triplet } }
+// { dg-final { if [string match sh-*-* $target_triplet ] {return} } }
+// { dg-final { if [string match {sh[elb1-9]*-*-*} $target_triplet ] {return} } }
+// Likewise for S/390 targets
+// { dg-final { if [string match s390-*-* $target_triplet ] {return} } }
// { dg-final { scan-assembler "baz3.*baz3.*baz3.*baz3.*baz3.*baz3" } }
diff --git a/gcc/testsuite/lib/prune.exp b/gcc/testsuite/lib/prune.exp
index 38b24e0ca42..5a3609493c8 100644
--- a/gcc/testsuite/lib/prune.exp
+++ b/gcc/testsuite/lib/prune.exp
@@ -1,4 +1,4 @@
-# Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+# Copyright (C) 1997, 1999, 2000, 2002 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -19,7 +19,7 @@
proc prune_gcc_output { text } {
#send_user "Before:$text\n"
- regsub -all "(^|\n)\[^\n\]*: In (function|member|method|constructor|instantiation|program|subroutine|block-data) \[^\n\]*" $text "" text
+ regsub -all "(^|\n)\[^\n\]*: In (function|member|method|(copy )?constructor|instantiation|program|subroutine|block-data) \[^\n\]*" $text "" text
regsub -all "(^|\n)\[^\n\]*: At (top level|global scope):\[^\n\]*" $text "" text
regsub -all "(^|\n)collect2: ld returned \[^\n\]*" $text "" text
regsub -all "(^|\n)Please submit.*instructions\[^\n\]*" $text "" text
diff --git a/gcc/timevar.c b/gcc/timevar.c
index 0d7fc61faf9..7a10fe78b47 100644
--- a/gcc/timevar.c
+++ b/gcc/timevar.c
@@ -176,7 +176,7 @@ static void timevar_accumulate
/* Fill the current times into TIME. The definition of this function
also defines any or all of the HAVE_USER_TIME, HAVE_SYS_TIME, and
- HAVA_WALL_TIME macros. */
+ HAVE_WALL_TIME macros. */
static void
get_time (now)
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 24355bde210..2ff1eed6479 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -375,11 +375,6 @@ int profile_flag = 0;
int profile_arc_flag = 0;
-/* Nonzero if we should not attempt to generate thread-safe
- code to profile program flow graph arcs. */
-
-int flag_unsafe_profile_arcs = 0;
-
/* Nonzero if generating info for gcov to calculate line test coverage. */
int flag_test_coverage = 0;
@@ -863,19 +858,10 @@ int flag_peephole2 = 0;
/* This will try to guess branch probabilities. */
int flag_guess_branch_prob = 0;
-/* -fbounded-pointers causes gcc to compile pointers as composite
- objects occupying three words: the pointer value, the base address
- of the referent object, and the address immediately beyond the end
- of the referent object. The base and extent allow us to perform
- runtime bounds checking. -fbounded-pointers implies -fcheck-bounds. */
-int flag_bounded_pointers = 0;
-
/* -fcheck-bounds causes gcc to generate array bounds checks.
- For C, C++: defaults to value of flag_bounded_pointers.
- For ObjC: defaults to off.
+ For C, C++, ObjC: defaults to off.
For Java: defaults to on.
- For Fortran: defaults to off.
- For CHILL: defaults to off. */
+ For Fortran: defaults to off. */
int flag_bounds_check = 0;
/* This will attempt to merge constant section constants, if 1 only
@@ -912,6 +898,10 @@ int align_labels_max_skip;
int align_functions;
int align_functions_log;
+/* Like align_functions_log above, but used by front-ends to force the
+ minimum function alignment. Zero means no alignment is forced. */
+int force_align_functions_log;
+
/* Table of supported debugging formats. */
static const struct
{
@@ -1100,8 +1090,6 @@ static const lang_independent_options f_options[] =
N_("Support synchronous non-call exceptions") },
{"profile-arcs", &profile_arc_flag, 1,
N_("Insert arc based program profiling code") },
- {"unsafe-profile-arcs", &flag_unsafe_profile_arcs, 1,
- N_("Avoid thread safety profiling overhead") },
{"test-coverage", &flag_test_coverage, 1,
N_("Create data files needed by gcov") },
{"branch-probabilities", &flag_branch_probabilities, 1,
@@ -1186,10 +1174,8 @@ static const lang_independent_options f_options[] =
N_("Allow math optimizations that may violate IEEE or ANSI standards") },
{"signaling-nans", &flag_signaling_nans, 1,
N_("Disable optimizations observable by IEEE signaling NaNs") },
- {"bounded-pointers", &flag_bounded_pointers, 1,
- N_("Compile pointers as triples: value, base & end") },
{"bounds-check", &flag_bounds_check, 1,
- N_("Generate code to check bounds before dereferencing pointers and arrays") },
+ N_("Generate code to check bounds before indexing arrays") },
{"single-precision-constant", &flag_single_precision_constant, 1,
N_("Convert floating point constant to single precision constant") },
{"time-report", &time_report, 1,
@@ -1507,6 +1493,11 @@ int warn_missing_noreturn;
int warn_deprecated_decl = 1;
+/* Nonzero means warn about constructs which might not be
+ strict-aliasing safe. */
+
+int warn_strict_aliasing;
+
/* Likewise for -W. */
static const lang_independent_options W_options[] =
@@ -1552,7 +1543,9 @@ static const lang_independent_options W_options[] =
{"deprecated-declarations", &warn_deprecated_decl, 1,
N_("Warn about uses of __attribute__((deprecated)) declarations") },
{"missing-noreturn", &warn_missing_noreturn, 1,
- N_("Warn about functions which might be candidates for attribute noreturn") }
+ N_("Warn about functions which might be candidates for attribute noreturn") },
+ {"strict-aliasing", &warn_strict_aliasing, 1,
+ N_ ("Warn about code which might break the strict aliasing rules") }
};
void
@@ -2574,7 +2567,9 @@ rest_of_compilation (decl)
delete_unreachable_blocks ();
/* Turn NOTE_INSN_PREDICTIONs into branch predictions. */
+ timevar_push (TV_BRANCH_PROB);
note_prediction_to_br_prob ();
+ timevar_pop (TV_BRANCH_PROB);
/* We may have potential sibling or tail recursion sites. Select one
(of possibly multiple) methods of performing the call. */
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index cf4754cad09..f0194ad0355 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -336,6 +336,23 @@ remap_block (block, decls, id)
{
tree new_var;
+ /* All local class initialization flags go in the outermost
+ scope. */
+ if (LOCAL_CLASS_INITIALIZATION_FLAG_P (old_var))
+ {
+ /* We may already have one. */
+ if (! splay_tree_lookup (id->decl_map, (splay_tree_key) old_var))
+ {
+ tree outermost_block;
+ new_var = remap_decl (old_var, id);
+ DECL_ABSTRACT_ORIGIN (new_var) = NULL;
+ outermost_block = DECL_SAVED_TREE (current_function_decl);
+ TREE_CHAIN (new_var) = BLOCK_VARS (outermost_block);
+ BLOCK_VARS (outermost_block) = new_var;
+ }
+ continue;
+ }
+
/* Remap the variable. */
new_var = remap_decl (old_var, id);
/* If we didn't remap this variable, so we can't mess with
@@ -1180,7 +1197,9 @@ expand_call_inline (tp, walk_subtrees, data)
*inlined_body = copy_body (id);
#else /* INLINER_FOR_JAVA */
{
- tree new_body = copy_body (id);
+ tree new_body;
+ java_inlining_map_static_initializers (fn, id->decl_map);
+ new_body = copy_body (id);
TREE_TYPE (new_body) = TREE_TYPE (TREE_TYPE (fn));
BLOCK_EXPR_BODY (expr)
= add_stmt_to_compound (BLOCK_EXPR_BODY (expr),
@@ -1218,9 +1237,17 @@ expand_call_inline (tp, walk_subtrees, data)
= chainon (COMPOUND_BODY (stmt), scope_stmt);
#else /* INLINER_FOR_JAVA */
if (retvar)
- BLOCK_EXPR_BODY (expr)
- = add_stmt_to_compound (BLOCK_EXPR_BODY (expr),
- TREE_TYPE (retvar), retvar);
+ {
+ /* Mention the retvar. If the return type of the function was
+ promoted, convert it back to the expected type. */
+ if (TREE_TYPE (TREE_TYPE (fn)) != TREE_TYPE (retvar))
+ retvar = build1 (NOP_EXPR, TREE_TYPE (TREE_TYPE (fn)), retvar);
+ BLOCK_EXPR_BODY (expr)
+ = add_stmt_to_compound (BLOCK_EXPR_BODY (expr),
+ TREE_TYPE (retvar), retvar);
+ }
+
+ java_inlining_merge_static_initializers (fn, id->decl_map);
#endif /* INLINER_FOR_JAVA */
/* Clean up. */
diff --git a/gcc/tree.c b/gcc/tree.c
index e18306081f0..a3d7c1384c9 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -119,7 +119,7 @@ static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash)))
static void set_type_quals PARAMS ((tree, int));
static void append_random_chars PARAMS ((char *));
static int type_hash_eq PARAMS ((const void *, const void *));
-static unsigned int type_hash_hash PARAMS ((const void *));
+static hashval_t type_hash_hash PARAMS ((const void *));
static void print_type_hash_statistics PARAMS((void));
static void finish_vector_type PARAMS((tree));
static tree make_vector PARAMS ((enum machine_mode, tree, int));
@@ -177,7 +177,7 @@ tree_size (node)
case '1': /* a unary arithmetic expression */
case '2': /* a binary arithmetic expression */
return (sizeof (struct tree_exp)
- + (TREE_CODE_LENGTH (code) - 1) * sizeof (char *));
+ + TREE_CODE_LENGTH (code) * sizeof (char *) - sizeof (char *));
case 'c': /* a constant */
/* We can't use TREE_CODE_LENGTH for INTEGER_CST, since the number of
@@ -199,7 +199,7 @@ tree_size (node)
length = (sizeof (struct tree_common)
+ TREE_CODE_LENGTH (code) * sizeof (char *));
if (code == TREE_VEC)
- length += (TREE_VEC_LENGTH (node) - 1) * sizeof (char *);
+ length += TREE_VEC_LENGTH (node) * sizeof (char *) - sizeof (char *);
return length;
}
@@ -2894,7 +2894,7 @@ type_hash_eq (va, vb)
/* Return the cached hash value. */
-static unsigned int
+static hashval_t
type_hash_hash (item)
const void *item;
{
@@ -3435,26 +3435,28 @@ compare_tree_int (t, u)
(RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
constructed by language-dependent code, not here.) */
-/* Construct, lay out and return the type of pointers to TO_TYPE.
- If such a type has already been constructed, reuse it. */
+/* Construct, lay out and return the type of pointers to TO_TYPE
+ with mode MODE. If such a type has already been constructed,
+ reuse it. */
tree
-build_pointer_type (to_type)
+build_pointer_type_for_mode (to_type, mode)
tree to_type;
+ enum machine_mode mode;
{
tree t = TYPE_POINTER_TO (to_type);
/* First, if we already have a type for pointers to TO_TYPE, use it. */
-
- if (t != 0)
+ if (t != 0 && mode == ptr_mode)
return t;
- /* We need a new one. */
t = make_node (POINTER_TYPE);
TREE_TYPE (t) = to_type;
+ TYPE_MODE (t) = mode;
/* Record this type as the pointer to TO_TYPE. */
+ if (mode == ptr_mode)
TYPE_POINTER_TO (to_type) = t;
/* Lay out the type. This function has many callers that are concerned
@@ -3465,25 +3467,37 @@ build_pointer_type (to_type)
return t;
}
-/* Build the node for the type of references-to-TO_TYPE. */
+/* By default build pointers in ptr_mode. */
tree
-build_reference_type (to_type)
+build_pointer_type (to_type)
+ tree to_type;
+{
+ return build_pointer_type_for_mode (to_type, ptr_mode);
+}
+
+/* Construct, lay out and return the type of references to TO_TYPE
+ with mode MODE. If such a type has already been constructed,
+ reuse it. */
+
+tree
+build_reference_type_for_mode (to_type, mode)
tree to_type;
+ enum machine_mode mode;
{
tree t = TYPE_REFERENCE_TO (to_type);
/* First, if we already have a type for pointers to TO_TYPE, use it. */
-
- if (t)
+ if (t != 0 && mode == ptr_mode)
return t;
- /* We need a new one. */
t = make_node (REFERENCE_TYPE);
TREE_TYPE (t) = to_type;
+ TYPE_MODE (t) = mode;
/* Record this type as the pointer to TO_TYPE. */
+ if (mode == ptr_mode)
TYPE_REFERENCE_TO (to_type) = t;
layout_type (t);
@@ -3491,6 +3505,17 @@ build_reference_type (to_type)
return t;
}
+
+/* Build the node for the type of references-to-TO_TYPE by default
+ in ptr_mode. */
+
+tree
+build_reference_type (to_type)
+ tree to_type;
+{
+ return build_reference_type_for_mode (to_type, ptr_mode);
+}
+
/* Build a type that is compatible with t but has no cv quals anywhere
in its type, thus
@@ -4673,6 +4698,8 @@ build_common_tree_nodes_2 (short_double)
unsigned_V4SI_type_node
= make_vector (V4SImode, unsigned_intSI_type_node, 1);
+ unsigned_V2HI_type_node
+ = make_vector (V2HImode, unsigned_intHI_type_node, 1);
unsigned_V2SI_type_node
= make_vector (V2SImode, unsigned_intSI_type_node, 1);
unsigned_V2DI_type_node
@@ -4691,6 +4718,7 @@ build_common_tree_nodes_2 (short_double)
V16SF_type_node = make_vector (V16SFmode, float_type_node, 0);
V4SF_type_node = make_vector (V4SFmode, float_type_node, 0);
V4SI_type_node = make_vector (V4SImode, intSI_type_node, 0);
+ V2HI_type_node = make_vector (V2HImode, intHI_type_node, 0);
V2SI_type_node = make_vector (V2SImode, intSI_type_node, 0);
V2DI_type_node = make_vector (V2DImode, intDI_type_node, 0);
V4HI_type_node = make_vector (V4HImode, intHI_type_node, 0);
diff --git a/gcc/tree.h b/gcc/tree.h
index e1031e5bd13..4f928aac488 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -1965,6 +1965,7 @@ enum tree_index
TI_UV8HI_TYPE,
TI_UV8QI_TYPE,
TI_UV4HI_TYPE,
+ TI_UV2HI_TYPE,
TI_UV2SI_TYPE,
TI_UV2SF_TYPE,
TI_UV2DI_TYPE,
@@ -1977,6 +1978,7 @@ enum tree_index
TI_V8HI_TYPE,
TI_V8QI_TYPE,
TI_V4HI_TYPE,
+ TI_V2HI_TYPE,
TI_V2SI_TYPE,
TI_V2SF_TYPE,
TI_V2DF_TYPE,
@@ -2048,6 +2050,7 @@ extern GTY(()) tree global_trees[TI_MAX];
#define unsigned_V8QI_type_node global_trees[TI_UV8QI_TYPE]
#define unsigned_V8HI_type_node global_trees[TI_UV8HI_TYPE]
#define unsigned_V4HI_type_node global_trees[TI_UV4HI_TYPE]
+#define unsigned_V2HI_type_node global_trees[TI_UV2HI_TYPE]
#define unsigned_V2SI_type_node global_trees[TI_UV2SI_TYPE]
#define unsigned_V2DI_type_node global_trees[TI_UV2DI_TYPE]
#define unsigned_V1DI_type_node global_trees[TI_UV1DI_TYPE]
@@ -2058,6 +2061,7 @@ extern GTY(()) tree global_trees[TI_MAX];
#define V8QI_type_node global_trees[TI_V8QI_TYPE]
#define V8HI_type_node global_trees[TI_V8HI_TYPE]
#define V4HI_type_node global_trees[TI_V4HI_TYPE]
+#define V2HI_type_node global_trees[TI_V2HI_TYPE]
#define V2SI_type_node global_trees[TI_V2SI_TYPE]
#define V2SF_type_node global_trees[TI_V2SF_TYPE]
#define V2DI_type_node global_trees[TI_V2DI_TYPE]
@@ -2114,6 +2118,33 @@ enum tls_model {
extern enum tls_model flag_tls_default;
+/* A pointer-to-function member type looks like:
+
+ struct {
+ __P __pfn;
+ ptrdiff_t __delta;
+ };
+
+ If __pfn is NULL, it is a NULL pointer-to-member-function.
+
+ (Because the vtable is always the first thing in the object, we
+ don't need its offset.) If the function is virtual, then PFN is
+ one plus twice the index into the vtable; otherwise, it is just a
+ pointer to the function.
+
+ Unfortunately, using the lowest bit of PFN doesn't work in
+ architectures that don't impose alignment requirements on function
+ addresses, or that use the lowest bit to tell one ISA from another,
+ for example. For such architectures, we use the lowest bit of
+ DELTA instead of the lowest bit of the PFN, and DELTA will be
+ multiplied by 2. */
+
+enum ptrmemfunc_vbit_where_t
+{
+ ptrmemfunc_vbit_in_pfn,
+ ptrmemfunc_vbit_in_delta
+};
+
#define NULL_TREE (tree) NULL
/* Approximate positive square root of a host double. This is for
@@ -2187,7 +2218,9 @@ extern tree make_unsigned_type PARAMS ((int));
extern void initialize_sizetypes PARAMS ((void));
extern void set_sizetype PARAMS ((tree));
extern void fixup_unsigned_type PARAMS ((tree));
+extern tree build_pointer_type_for_mode PARAMS ((tree, enum machine_mode));
extern tree build_pointer_type PARAMS ((tree));
+extern tree build_reference_type_for_mode PARAMS ((tree, enum machine_mode));
extern tree build_reference_type PARAMS ((tree));
extern tree build_type_no_quals PARAMS ((tree));
extern tree build_index_type PARAMS ((tree));
diff --git a/gcc/unroll.c b/gcc/unroll.c
index 126b586808d..fa04253e0ed 100644
--- a/gcc/unroll.c
+++ b/gcc/unroll.c
@@ -1136,6 +1136,9 @@ unroll_loop (loop, insn_count, strength_reduce_p)
/* And whether the loop has been preconditioned. */
loop_info->preconditioned = loop_preconditioned;
+ /* Remember whether it was preconditioned for the second loop pass. */
+ NOTE_PRECONDITIONED (loop->end) = loop_preconditioned;
+
/* For each biv and giv, determine whether it can be safely split into
a different variable for each unrolled copy of the loop body.
We precalculate and save this info here, since computing it is
@@ -2033,6 +2036,13 @@ copy_loop_body (loop, copy_start, copy_end, map, exit_label, last_iteration,
REG_NOTES (copy) = initial_reg_note_copy (REG_NOTES (insn), map);
INSN_SCOPE (copy) = INSN_SCOPE (insn);
+ /* If there is a REG_EQUAL note present whose value
+ is not loop invariant, then delete it, since it
+ may cause problems with later optimization passes. */
+ if ((tem = find_reg_note (copy, REG_EQUAL, NULL_RTX))
+ && !loop_invariant_p (loop, XEXP (tem, 0)))
+ remove_note (copy, tem);
+
#ifdef HAVE_cc0
/* If this insn is setting CC0, it may need to look at
the insn that uses CC0 to see what type of insn it is.
@@ -2822,7 +2832,7 @@ find_splittable_givs (loop, bl, unroll_type, increment, unroll_number)
value = tem;
}
- splittable_regs[REGNO (v->new_reg)] = value;
+ splittable_regs[reg_or_subregno (v->new_reg)] = value;
}
else
continue;
@@ -2856,7 +2866,7 @@ find_splittable_givs (loop, bl, unroll_type, increment, unroll_number)
if (! v->ignore)
count = REG_IV_CLASS (ivs, REGNO (v->src_reg))->biv_count;
- splittable_regs_updates[REGNO (v->new_reg)] = count;
+ splittable_regs_updates[reg_or_subregno (v->new_reg)] = count;
}
result++;
@@ -3309,7 +3319,7 @@ loop_iterations (loop)
accidentally get the branch for a contained loop if the branch for this
loop was deleted. We can only trust branches immediately before the
loop_end. */
- last_loop_insn = prev_nonnote_insn (loop->end);
+ last_loop_insn = PREV_INSN (loop->end);
/* ??? We should probably try harder to find the jump insn
at the end of the loop. The following code assumes that
diff --git a/gcc/unwind-libunwind.c b/gcc/unwind-libunwind.c
new file mode 100644
index 00000000000..e73db1c5697
--- /dev/null
+++ b/gcc/unwind-libunwind.c
@@ -0,0 +1,157 @@
+/* Subroutines needed for unwinding stack frames via the libunwind API.
+ Copyright (C) 2002
+ Free Software Foundation, Inc.
+ Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
+
+ This file is part of GNU CC.
+
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GNU CC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU CC; see the file COPYING. If not, write to
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* As a special exception, if you link this library with other files,
+ some of which are compiled with GCC, to produce an executable,
+ this library does not by itself cause the resulting executable
+ to be covered by the GNU General Public License.
+ This exception does not however invalidate any other reasons why
+ the executable file might be covered by the GNU General Public License. */
+
+#include "tconfig.h"
+#include "tsystem.h"
+#include "unwind.h"
+
+#ifndef __USING_SJLJ_EXCEPTIONS__
+
+#define UNW_LOCAL_ONLY
+
+#include <libunwind.h>
+
+typedef struct {
+ _Unwind_Personality_Fn personality;
+} _Unwind_FrameState;
+
+struct _Unwind_Context {
+ unw_cursor_t cursor;
+};
+
+
+/* First come the helper-routines that are needed by unwind.inc. */
+
+static _Unwind_Reason_Code
+uw_frame_state_for (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+ unw_word_t handler;
+
+ if (unw_step (&context->cursor) <= 0)
+ return _URC_END_OF_STACK;
+
+ unw_get_reg (&context->cursor, UNW_REG_HANDLER, &handler);
+ fs->personality = (_Unwind_Personality_Fn) handler;
+
+ return _URC_NO_REASON;
+}
+
+#define uw_update_context(context,fs) do { ; } while (0)
+
+static inline _Unwind_Ptr
+uw_identify_context (struct _Unwind_Context *context)
+{
+ unw_word_t ip;
+ unw_get_reg (&context->cursor, UNW_REG_IP, &ip);
+ return (_Unwind_Ptr) ip;
+}
+
+#define uw_init_context(context) \
+do \
+ { \
+ unw_context_t uc; \
+ unw_getcontext (&uc); \
+ unw_init_local (&(context)->cursor, &uc); \
+ } \
+while (0)
+
+static inline void __attribute__ ((noreturn))
+uw_install_context (struct _Unwind_Context *current __attribute__ ((unused)),
+ struct _Unwind_Context *target)
+{
+ unw_resume (&(target)->cursor);
+ abort ();
+}
+
+
+/* Now come the helper-routines which may be called from an exception
+ handler. The interface for these routines are defined by the C++
+ ABI. See: http://www.codesourcery.com/cxx-abi/abi-eh.html */
+
+_Unwind_Word
+_Unwind_GetGR (struct _Unwind_Context *context, int index)
+{
+ unw_word_t ret;
+
+ /* Note: here we depend on the fact that general registers are
+ expected to start with register number 0! */
+ unw_get_reg (&context->cursor, index, &ret);
+ return ret;
+}
+
+/* Overwrite the saved value for register REG in CONTEXT with VAL. */
+
+void
+_Unwind_SetGR (struct _Unwind_Context *context, int index, _Unwind_Word val)
+{
+ /* Note: here we depend on the fact that general registers are
+ expected to start with register number 0! */
+ unw_set_reg (&context->cursor, index, val);
+}
+
+/* Retrieve the return address for CONTEXT. */
+
+inline _Unwind_Ptr
+_Unwind_GetIP (struct _Unwind_Context *context)
+{
+ unw_word_t ret;
+
+ unw_get_reg (&context->cursor, UNW_REG_IP, &ret);
+ return ret;
+}
+
+/* Overwrite the return address for CONTEXT with VAL. */
+
+inline void
+_Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr val)
+{
+ unw_set_reg (&context->cursor, UNW_REG_IP, val);
+}
+
+void *
+_Unwind_GetLanguageSpecificData (struct _Unwind_Context *context)
+{
+ unw_word_t ret;
+
+ unw_get_reg (&context->cursor, UNW_REG_LSDA, &ret);
+ return (void *) ret;
+}
+
+_Unwind_Ptr
+_Unwind_GetRegionStart (struct _Unwind_Context *context)
+{
+ unw_word_t ret;
+
+ unw_get_reg (&context->cursor, UNW_REG_PROC_START, &ret);
+ return (_Unwind_Ptr) ret;
+}
+
+#include "unwind.inc"
+
+#endif /* !__USING_SJLJ_EXCEPTIONS__ */
diff --git a/gcc/unwind.h b/gcc/unwind.h
index 3002d504174..23369456c67 100644
--- a/gcc/unwind.h
+++ b/gcc/unwind.h
@@ -182,7 +182,7 @@ _Unwind_GetDataRelBase (struct _Unwind_Context *_C)
}
static inline _Unwind_Ptr
-_Unwind_GetTextRelBase (struct _Unwind_Context *_C)
+_Unwind_GetTextRelBase (struct _Unwind_Context *_C __attribute__ ((unused)))
{
abort ();
return 0;
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 797e7ab8b43..a925b0e5aa5 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1141,6 +1141,8 @@ assemble_start_function (decl, fnname)
/* Tell assembler to move to target machine's alignment for functions. */
align = floor_log2 (FUNCTION_BOUNDARY / BITS_PER_UNIT);
+ if (align < force_align_functions_log)
+ align = force_align_functions_log;
if (align > 0)
{
ASM_OUTPUT_ALIGN (asm_out_file, align);
@@ -2177,7 +2179,7 @@ static GTY(()) struct constant_descriptor_tree *
they are actually used. This will be if something takes its address or if
there is a usage of the string in the RTL of a function. */
-#define STRHASH(x) ((hashval_t) ((long) (x) >> 3))
+#define STRHASH(x) htab_hash_pointer (x)
struct deferred_string GTY(())
{
@@ -5364,6 +5366,15 @@ default_binds_local_p_1 (exp, shlib)
return local_p;
}
+/* Determine whether or not a pointer mode is valid. Assume defaults
+ of ptr_mode or Pmode - can be overriden. */
+bool
+default_valid_pointer_mode (mode)
+ enum machine_mode mode;
+{
+ return (mode == ptr_mode || mode == Pmode);
+}
+
/* Default function to output code that will globalize a label. A
target must define GLOBAL_ASM_OP or provide it's own function to
globalize a label. */
diff --git a/gcc/version.c b/gcc/version.c
index 91c122dbaea..a540afefdf2 100644
--- a/gcc/version.c
+++ b/gcc/version.c
@@ -1,4 +1,18 @@
#include "ansidecl.h"
#include "version.h"
-const char version_string[] = "3.4-bi 20020930 (experimental)";
+/* This is the string reported as the version number by all components
+ of the compiler. If you distribute a modified version of GCC,
+ please modify this string to indicate that, e.g. by putting your
+ organization's name in parentheses at the end of the string. */
+
+const char version_string[] = "3.4-bi 20021020 (experimental)";
+
+/* This is the location of the online document giving instructions for
+ reporting bugs. If you distribute a modified version of GCC,
+ please change this to refer to a document giving instructions for
+ reporting bugs to you, not us. (You are of course welcome to
+ forward us bugs reported to you, if you determine that they are
+ not bugs in your modifications.) */
+
+const char bug_report_url[] = "<URL:http://www.gnu.org/software/gcc/bugs.html>";
diff --git a/gcc/version.h b/gcc/version.h
index db5972d2af8..8e944ccdef6 100644
--- a/gcc/version.h
+++ b/gcc/version.h
@@ -1,4 +1,5 @@
#ifndef GCC_VERSION_H
#define GCC_VERSION_H
extern const char version_string[];
+extern const char bug_report_url[];
#endif /* ! GCC_VERSION_H */
diff --git a/include/ChangeLog b/include/ChangeLog
index 64e99549c09..8fd4b486926 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,7 @@
+2002-10-11 David O'Brien <obrien@FreeBSD.org>
+
+ * getopt.h: getopt is in unistd.h (based on SUSv2).
+
2002-09-19 Alexandre Oliva <aoliva@redhat.com>
* libiberty.h (asprintf, vasprintf): Don't declare them if the
diff --git a/include/getopt.h b/include/getopt.h
index 0c6470b3ddb..da09cee3be1 100644
--- a/include/getopt.h
+++ b/include/getopt.h
@@ -108,7 +108,7 @@ struct option
#if !HAVE_DECL_GETOPT
#if defined (__GNU_LIBRARY__) || defined (HAVE_DECL_GETOPT)
/* Many other libraries have conflicting prototypes for getopt, with
- differences in the consts, in stdlib.h. To avoid compilation
+ differences in the consts, in unistd.h. To avoid compilation
errors, only prototype getopt for the GNU C library. */
extern int getopt (int argc, char *const *argv, const char *shortopts);
#else
diff --git a/libffi/ChangeLog b/libffi/ChangeLog
index c2d664d3f84..adfa3885e7d 100644
--- a/libffi/ChangeLog
+++ b/libffi/ChangeLog
@@ -1,3 +1,27 @@
+2002-10-08 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * src/java_raw_api.c (ffi_java_raw_to_ptrarray): Interpret
+ raw data as _Jv_word values, not ffi_raw.
+ (ffi_java_ptrarray_to_raw): Likewise.
+ (ffi_java_rvalue_to_raw): New function.
+ (ffi_java_raw_call): Call it.
+ (ffi_java_raw_to_rvalue): New function.
+ (ffi_java_translate_args): Call it.
+ * src/ffitest.c (closure_test_fn): Interpret return value
+ as ffi_arg, not int.
+ * src/s390/ffi.c (ffi_prep_cif_machdep): Add missing
+ FFI_TYPE_POINTER case.
+ (ffi_closure_helper_SYSV): Likewise. Also, assume return
+ values extended to word size.
+
+2002-10-02 Andreas Jaeger <aj@suse.de>
+
+ * src/x86/ffi64.c (ffi_prep_cif_machdep): Remove debug output.
+
+2002-10-01 Bo Thorsen <bo@smetana.suse.de>
+
+ * include/ffi.h.in: Fix i386 win32 compilation.
+
2002-09-30 Ulrich Weigand <uweigand@de.ibm.com>
* configure.in: Add s390x-*-linux-* target.
diff --git a/libffi/include/ffi.h.in b/libffi/include/ffi.h.in
index 70a784226b1..4f7667e6d4d 100644
--- a/libffi/include/ffi.h.in
+++ b/libffi/include/ffi.h.in
@@ -202,7 +202,7 @@ typedef enum ffi_abi {
#endif
/* ---- Intel x86 and AMD x86-64 - */
-#if defined(__i386__) || defined(__x86_64__)
+#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__))
FFI_SYSV,
FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */
#ifdef __i386__
diff --git a/libffi/src/ffitest.c b/libffi/src/ffitest.c
index 8d72df1cc03..163c4a8c36e 100644
--- a/libffi/src/ffitest.c
+++ b/libffi/src/ffitest.c
@@ -262,7 +262,7 @@ static test_structure_9 struct9 (test_structure_9 ts)
static void
closure_test_fn(ffi_cif* cif,void* resp,void** args, void* userdata)
{
- *(int*)resp = *(int*)args[0] + (int)(*(float*)args[1]) + (int)(long)userdata;
+ *(ffi_arg*)resp = *(int*)args[0] + (int)(*(float*)args[1]) + (int)(long)userdata;
}
typedef int (*closure_test_type)(int, float);
diff --git a/libffi/src/java_raw_api.c b/libffi/src/java_raw_api.c
index 55c3d132d53..cb5dd67a78e 100644
--- a/libffi/src/java_raw_api.c
+++ b/libffi/src/java_raw_api.c
@@ -81,21 +81,14 @@ ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args)
{
case FFI_TYPE_UINT8:
case FFI_TYPE_SINT8:
- *args = (void*) ((char*)(raw++) + SIZEOF_ARG - 1);
+ *args = (void*) ((char*)(raw++) + 3);
break;
case FFI_TYPE_UINT16:
case FFI_TYPE_SINT16:
- *args = (void*) ((char*)(raw++) + SIZEOF_ARG - 2);
+ *args = (void*) ((char*)(raw++) + 2);
break;
-#if SIZEOF_ARG >= 4
- case FFI_TYPE_UINT32:
- case FFI_TYPE_SINT32:
- *args = (void*) ((char*)(raw++) + SIZEOF_ARG - 4);
- break;
-#endif
-
#if SIZEOF_ARG == 8
case FFI_TYPE_UINT64:
case FFI_TYPE_SINT64:
@@ -157,31 +150,54 @@ ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw)
switch ((*tp)->type)
{
case FFI_TYPE_UINT8:
+#if WORDS_BIGENDIAN
+ *(UINT32*)(raw++) = *(UINT8*) (*args);
+#else
(raw++)->uint = *(UINT8*) (*args);
+#endif
break;
case FFI_TYPE_SINT8:
+#if WORDS_BIGENDIAN
+ *(SINT32*)(raw++) = *(SINT8*) (*args);
+#else
(raw++)->sint = *(SINT8*) (*args);
+#endif
break;
case FFI_TYPE_UINT16:
+#if WORDS_BIGENDIAN
+ *(UINT32*)(raw++) = *(UINT16*) (*args);
+#else
(raw++)->uint = *(UINT16*) (*args);
+#endif
break;
case FFI_TYPE_SINT16:
+#if WORDS_BIGENDIAN
+ *(SINT32*)(raw++) = *(SINT16*) (*args);
+#else
(raw++)->sint = *(SINT16*) (*args);
+#endif
break;
-#if SIZEOF_ARG >= 4
case FFI_TYPE_UINT32:
+#if WORDS_BIGENDIAN
+ *(UINT32*)(raw++) = *(UINT32*) (*args);
+#else
(raw++)->uint = *(UINT32*) (*args);
+#endif
break;
case FFI_TYPE_SINT32:
+#if WORDS_BIGENDIAN
+ *(SINT32*)(raw++) = *(SINT32*) (*args);
+#else
(raw++)->sint = *(SINT32*) (*args);
- break;
#endif
- case FFI_TYPE_FLOAT:
+ break;
+
+ case FFI_TYPE_FLOAT:
(raw++)->flt = *(FLOAT32*) (*args);
break;
@@ -211,6 +227,55 @@ ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw)
#if !FFI_NATIVE_RAW_API
+static void
+ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue)
+{
+#if WORDS_BIGENDIAN && SIZEOF_ARG == 8
+ switch (cif->rtype->type)
+ {
+ case FFI_TYPE_UINT8:
+ case FFI_TYPE_UINT16:
+ case FFI_TYPE_UINT32:
+ *(UINT64 *)rvalue <<= 32;
+ break;
+
+ case FFI_TYPE_SINT8:
+ case FFI_TYPE_SINT16:
+ case FFI_TYPE_SINT32:
+ case FFI_TYPE_INT:
+ *(SINT64 *)rvalue <<= 32;
+ break;
+
+ default:
+ break;
+ }
+#endif
+}
+
+static void
+ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue)
+{
+#if WORDS_BIGENDIAN && SIZEOF_ARG == 8
+ switch (cif->rtype->type)
+ {
+ case FFI_TYPE_UINT8:
+ case FFI_TYPE_UINT16:
+ case FFI_TYPE_UINT32:
+ *(UINT64 *)rvalue >>= 32;
+ break;
+
+ case FFI_TYPE_SINT8:
+ case FFI_TYPE_SINT16:
+ case FFI_TYPE_SINT32:
+ case FFI_TYPE_INT:
+ *(SINT64 *)rvalue >>= 32;
+ break;
+
+ default:
+ break;
+ }
+#endif
+}
/* This is a generic definition of ffi_raw_call, to be used if the
* native system does not provide a machine-specific implementation.
@@ -227,6 +292,7 @@ void ffi_java_raw_call (/*@dependent@*/ ffi_cif *cif,
void **avalue = (void**) alloca (cif->nargs * sizeof (void*));
ffi_java_raw_to_ptrarray (cif, raw, avalue);
ffi_call (cif, fn, rvalue, avalue);
+ ffi_java_rvalue_to_raw (cif, rvalue);
}
#if FFI_CLOSURES /* base system provides closures */
@@ -240,6 +306,7 @@ ffi_java_translate_args (ffi_cif *cif, void *rvalue,
ffi_java_ptrarray_to_raw (cif, avalue, raw);
(*cl->fun) (cif, rvalue, raw, cl->user_data);
+ ffi_java_raw_to_rvalue (cif, rvalue);
}
/* Again, here is the generic version of ffi_prep_raw_closure, which
diff --git a/libffi/src/s390/ffi.c b/libffi/src/s390/ffi.c
index b40bdd43fc9..9e7d16954f6 100644
--- a/libffi/src/s390/ffi.c
+++ b/libffi/src/s390/ffi.c
@@ -369,6 +369,7 @@ ffi_prep_cif_machdep(ffi_cif *cif)
cif->flags = FFI390_RET_INT64;
break;
+ case FFI_TYPE_POINTER:
case FFI_TYPE_INT:
case FFI_TYPE_UINT32:
case FFI_TYPE_SINT32:
@@ -682,29 +683,18 @@ ffi_closure_helper_SYSV (ffi_closure *closure,
#endif
break;
+ case FFI_TYPE_POINTER:
case FFI_TYPE_UINT32:
- p_gpr[0] = *(unsigned int *) rvalue;
+ case FFI_TYPE_UINT16:
+ case FFI_TYPE_UINT8:
+ p_gpr[0] = *(unsigned long *) rvalue;
break;
case FFI_TYPE_INT:
case FFI_TYPE_SINT32:
- p_gpr[0] = *(signed int *) rvalue;
- break;
-
- case FFI_TYPE_UINT16:
- p_gpr[0] = *(unsigned short *) rvalue;
- break;
-
case FFI_TYPE_SINT16:
- p_gpr[0] = *(signed short *) rvalue;
- break;
-
- case FFI_TYPE_UINT8:
- p_gpr[0] = *(unsigned char *) rvalue;
- break;
-
case FFI_TYPE_SINT8:
- p_gpr[0] = *(signed char *) rvalue;
+ p_gpr[0] = *(signed long *) rvalue;
break;
default:
diff --git a/libffi/src/x86/ffi64.c b/libffi/src/x86/ffi64.c
index 3dd8cbbf315..f278a924eda 100644
--- a/libffi/src/x86/ffi64.c
+++ b/libffi/src/x86/ffi64.c
@@ -438,8 +438,6 @@ ffi_prep_cif_machdep (ffi_cif *cif)
break;
}
- puts ("prep_machdep\n");
-
return FFI_OK;
}
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index ad8d0e4c694..7121b4aec01 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,13 @@
+2002-10-16 Jakub Jelinek <jakub@redhat.com>
+
+ * config.table: Use mh-s390pic for s390x too.
+
+2002-10-06 Andreas Jaeger <aj@suse.de>
+
+ * libiberty/cplus-dem.c (ada_demangle): Get rid of unneeded
+ variable and of strict-aliasing warning.
+ (grow_vect): Use char as first parameter.
+
2002-09-22 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (all): Fix multilib parallel build.
@@ -52,7 +62,7 @@
2002-07-29 Neil Booth <neil@daikokuya.co.uk>
* cplus-dem.c (PREPEND_BLANK): Remove.
-
+
2002-07-10 Jason Merrill <jason@redhat.com>
* cp-demangle.c (demangle_identifier): Support extended Unicode
@@ -61,7 +71,7 @@
2002-07-08 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* cp-demangle.c (demangle_v3_with_details): Wrap in
- !defined IN_GLIBCPP_V3.
+ !defined IN_GLIBCPP_V3.
2002-07-01 Mark Mitchell <mark@codesourcery.com>
@@ -135,7 +145,7 @@
2002-03-30 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
- * cp-demangle.c (java_demangle_v3): Don't try to release "demangled"
+ * cp-demangle.c (java_demangle_v3): Don't try to release "demangled"
if it is NULL.
2002-03-27 DJ Delorie <dj@redhat.com>
@@ -549,10 +559,10 @@ Thu Nov 15 11:06:25 2001 Jeffrey A Law (law@cygnus.com)
2001-08-22 Matt Kraai <kraai@alumni.carnegiemellon.edu>
- * fibheap.c (fibheap_init, fibnode_init): Remove.
- (fibheap_new, fibnode_new): Use xcalloc to allocate and
- initialize memory.
- (fibheap_insert): Remove check for node allocation failure.
+ * fibheap.c (fibheap_init, fibnode_init): Remove.
+ (fibheap_new, fibnode_new): Use xcalloc to allocate and
+ initialize memory.
+ (fibheap_insert): Remove check for node allocation failure.
2001-08-21 Richard Henderson <rth@redhat.com>
diff --git a/libiberty/config.table b/libiberty/config.table
index b9a2479aac7..df48ce99525 100644
--- a/libiberty/config.table
+++ b/libiberty/config.table
@@ -39,6 +39,7 @@ if [ "${shared}" = "yes" ]; then
powerpc*-*-aix*) ;;
powerpc*-*-*) frag=mh-ppcpic ;;
sparc*-*-*) frag=mh-sparcpic ;;
+ s390*-*-*) frag=mh-s390pic ;;
*) frag=mh-${host_cpu}pic ;;
esac
if [ -n "${frag}" ]; then
diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c
index 4c4778375b0..f42d6181d40 100644
--- a/libiberty/cplus-dem.c
+++ b/libiberty/cplus-dem.c
@@ -514,7 +514,7 @@ recursively_demangle PARAMS ((struct work_stuff *, const char **, string *,
int));
static void
-grow_vect PARAMS ((void **, size_t *, size_t, int));
+grow_vect PARAMS ((char **, size_t *, size_t, int));
/* Translate count to integer, consuming tokens in the process.
Conversion terminates on the first non-digit character.
@@ -936,7 +936,7 @@ cplus_demangle (mangled, options)
static void
grow_vect (old_vect, size, min_size, element_size)
- void **old_vect;
+ char **old_vect;
size_t *size;
size_t min_size;
int element_size;
@@ -969,8 +969,7 @@ ada_demangle (mangled, option)
char *demangled = NULL;
int at_start_name;
int changed;
- char *demangling_buffer = NULL;
- size_t demangling_buffer_size = 0;
+ size_t demangled_size = 0;
changed = 0;
@@ -998,10 +997,9 @@ ada_demangle (mangled, option)
}
/* Make demangled big enough for possible expansion by operator name. */
- grow_vect ((void **) &(demangling_buffer),
- &demangling_buffer_size, 2 * len0 + 1,
+ grow_vect (&demangled,
+ &demangled_size, 2 * len0 + 1,
sizeof (char));
- demangled = demangling_buffer;
if (ISDIGIT ((unsigned char) mangled[len0 - 1])) {
for (i = len0 - 2; i >= 0 && ISDIGIT ((unsigned char) mangled[i]); i -= 1)
@@ -1051,10 +1049,10 @@ ada_demangle (mangled, option)
return demangled;
Suppress:
- grow_vect ((void **) &(demangling_buffer),
- &demangling_buffer_size, strlen (mangled) + 3,
+ grow_vect (&demangled,
+ &demangled_size, strlen (mangled) + 3,
sizeof (char));
- demangled = demangling_buffer;
+
if (mangled[0] == '<')
strcpy (demangled, mangled);
else
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 4b0cc0fcd24..ec7030bdf3d 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,371 @@
+2002-10-21 Michael Koch <konqueror@gmx.de>
+
+ * java/net/URL.java
+ (URL): Activate SecurityManager checks.
+ (equals): Use URLStreamHandler implementation instead of doing it
+ alone. This allows special protocol stream handlers to change default
+ behaviour.
+ (hashCode): Use URLStreamHandler implementation instead of doing it
+ alone. This allows special protocol stream handlers to change default
+ behaviour.
+ * java/net/URLStreamHandler.java
+ (equals): Implemented default URL equality check.
+ (hostsEqual): Implemented default URL equality check.
+ (hashCode): Implemented default URL hashCode algorithm.
+ * java/net/natPlainDatagramSocketImpl.cc:
+ No lines longer then 80 characters.
+
+2002-10-20 Adam Megacz <adam@xwt.org>
+
+ * aclocal.m4 (CHECK_FOR_BROKEN_MINGW_LD): added
+ * configure.in: enabled hash sync on Win32
+ * include/win32-threads.h (_Jv_ThreadId_t): added.
+ * java/lang/natObject.cc (_Jv_MonitorEnter, _Jv_MonitorExit,
+ heavy_lock_obj_finalization_proc, wait, notify, notifyAll):
+ removed some posix-isms, use Thread::sleep() instead of usleep,
+ added code to clear bottom three bits if platform has a broken
+ linker. * include/win32-threads.h (_Jv_ThreadId_t): added.
+
+2002-10-19 Ranjit Mathew <rmathew@hotmail.com>
+
+ * java/lang/natRuntime.cc (insertSystemProperties): Added GCJ
+ runtime property "gnu.gcj.progname" containing the name used to
+ invoke the current Java program (similar to argv[0] for C
+ programs).
+
+2002-10-15 Tom Tromey <tromey@redhat.com>
+
+ Fix for PR libgcj/8234:
+ * java/util/zip/natInflater.cc (reset): Reset avail_in.
+ * java/util/zip/natDeflater.cc (reset): Reset avail_in.
+
+2002-10-13 Mark Wielaard <mark@klomp.org>
+
+ * mauve-libgcj: Enable Mauve tests that compile now.
+
+2002-10-11 Mark Wielaard <mark@klomp.org>
+
+ Fix for PR libgcj/8142
+ * java/lang/natClassLoader.cc (findClass): Skip inner classes when
+ loading native modules.
+
+2002-10-10 Michael Koch <konqueror@gmx.de>
+
+ * javax/swing/AbstractListModel.java
+ (getListDataListeners): New stubbed method.
+ javax/swing/DefaultBoundedRangeModel.java
+ (getChangeListeners): New stubbed method.
+ javax/swing/DefaultSingleSelectionModel.java
+ (getChangeListeners): New stubbed method.
+
+2002-10-10 Michael Koch <konqueror@gmx.de>
+
+ * gcj/.cvsignore: New file to ignore files generated during build.
+ * include/.cvsignore: New file to ignore files generated during build.
+
+2002-10-10 Michael Koch <konqueror@gmx.de>
+
+ * java/net/HttpURLConnection.java
+ (getPermission): New method.
+ (getErrorStream): New stub method.
+ (getHeaderFieldDate): New stub method.
+ * java/net/Inet4Address.java:
+ (isLinkLocalAddress): Typo fixed.
+ * java/net/InetAddress.java:
+ (readResolve): New stubbed method (for serialization).
+ (isAnyLocalAddress): New stubbed method.
+ (isLoopbackAddress): New stubbed method.
+ (isLinkLocalAddress): New stubbed method.
+ (isSiteLocalAddress): New stubbed method.
+ (isMCGlobal): New stubbed method.
+ (isMCNodeGlobal): New stubbed method.
+ (isMCLinkLocal): New stubbed method.
+ (isMCSiteLocal): New stubbed method.
+ (isMCOrgLocal): New stubbed method.
+ (getCanonicalHostName): New stubbed method.
+ (getByAddress): Create instances of Inet4Address/Inet6Address,
+ instead of InetAddress, documentation added.
+ * java/net/MulticastSocket.java
+ (getInterface): Removed FIXME.
+ (getNetworkInterface): New method.
+ (setNetworkInterface): New method.
+ * java/net/NetworkInterface.java:
+ (toString): Use property "line.separator" instead of "\n".
+ * java/net/URLConnection.java
+ (getContent): New stubbed method.
+ * java/net/URLStreamHandler.java:
+ (equals): New stubbed method.
+ (hostsEqual): New stubbed method.
+ (hashCode): New stubbed method.
+ * java/net/natNetworkInterface.cc:
+ (getRealNetworkInterfaces): Create Inet4Address object
+ instead of InetAddress.
+
+2002-10-08 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * interpret.cc (_Jv_InterpMethod::run): Use UINT32 instead of
+ unsigned long temporary to implement insn_iushr shifts.
+
+2002-10-08 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * configure.host [s390*-*]: Enable Java interpreter.
+ Enable hash synchronization. Add sysdeps dir.
+ * sysdep/s390/locks.h: New file.
+
+2002-10-06 Mark Wielaard <mark@klomp.org>
+
+ * java/lang/Thread.java (setDaemon): Check startable_flag,
+ not isAlive().
+
+2002-10-07 Michael Koch <konqueror@gmx.de>
+
+ * java/nio/Buffer.java: New stub file.
+ * java/nio/charset/spi/CharsetProvider.java: Commented out all usages
+ of class Charset.
+ * Makefile.am (java_native_source_files): Added java/nio/Buffer.java.
+ * Makefile.in: Regenerated.
+
+2002-10-07 Michael Koch <konqueror@gmx.de>
+
+ * java/nio/ByteBuffer.java:
+ removed import of not commited class.
+
+2002-10-07 Michael Koch <konqueror@gmx.de>
+
+ * java/nio/ByteBuffer.java,
+ java/nio/MappedByteBuffer.java:
+ New files, forgot to add these dummies.
+ * Makefile.am (java_native_source_files): Added new files.
+ * Makefile.in: Regenerated.
+
+2002-10-07 Michael Koch <konqueror@gmx.de>
+
+ * java/nio/channels/AlreadyConnectedException.java,
+ java/nio/channels/ClosedChannelException.java,
+ java/nio/channels/ReadableByteChannel.java,
+ java/nio/channels/InterruptibleChannel.java,
+ java/nio/channels/Channel.java,
+ java/nio/channels/ByteChannel.java,
+ java/nio/channels/GatheringByteChannel.java,
+ java/nio/channels/ScatteringByteChannel.java,
+ java/nio/channels/WritableByteChannel.java,
+ java/nio/charset/CharacterCodingException.java,
+ java/nio/charset/IllegalCharsetNameException.java,
+ java/nio/charset/MalformedInputException.java,
+ java/nio/charset/UnmappableCharacterException.java,
+ java/nio/charset/UnsupportedCharsetException.java,
+ java/nio/charset/spi/CharsetProvider.java: New file.
+ These files are exceptions or interfaces,
+ no real or abstract classes.
+ * Makefile.am (java_native_source_files): Added new files.
+ * Makefile.in: Regenerated.
+
+2002-10-05 Michael Koch <konqueror@gmx.de>
+
+ * java/net/InetAddress.java
+ (getByAddress): Fixed documentation.
+ (getByAddress): New method.
+ * java/net/Inet4Address.java: New file.
+ * java/net/URL.java
+ (URL): Documentation added.
+ (getContent): Documentation added.
+ (getContent): New stubbed method.
+ (getQuery): New method.
+ (openConnection): Documentation added.
+ (openStream): Documentation added.
+ (setURLStreamHandlerFactory): Documentation added.
+ * java/net/URI.java: New stub file.
+ * Makefile.am
+ (java_native_source_files): Added java/net/Inet4Address.java,
+ java/net/Inet6Address.java and java/net/URI.java.
+ * Makefile.in: Regenerated.
+
+2002-10-04 C. Scott Ananian <cananian@lesser-magoo.lcs.mit.edu>
+
+ * java/lang/ProtectionDomain.java (linesep): Remove field.
+ (toString): Use System.getProperty("line.separator").
+
+2002-10-04 Michael Koch <konqueror@gmx.de>
+
+ * java/security/Identity.java: Added serialVersionUID.
+ * java/security/KeyPair.java: Added serialVersionUID.
+ * java/security/Provider.java: Added serialVersionUID.
+ * java/security/SecureRandom.java: Added serialVersionUID.
+ * java/security/SecureRandomSpi.java: Added serialVersionUID.
+ * java/security/SignedObject.java: Added serialVersionUID.
+ * java/security/cert/Certificate.java: Added serialVersionUID.
+
+2002-10-04 Mark Wielaard <mark@klomp.org>
+
+ * java/security/Security.java: Use java.home or gnu.classpath.home
+ to load providers.
+ (loadProviders): Extra dir argument.
+ (getProvider): Return null when not found.
+
+2002-10-04 Mark Wielaard <mark@klomp.org>
+
+ * java/lang/Throwable.java: Remerge with Classpath.
+
+2002-10-04 Michael Koch <konqueror@gmx.de>
+
+ * java/net/InetAddress.java:
+ (isMulticastAddress): Added documentation.
+ (getHostAddress): Added documentation.
+ (toString): Added documentation.
+ (getByAddress): Fixed documentation.
+ (getByName): Added documentation.
+ (getAllByName): Added documentation.
+ (getLocalHost): Added documentation.
+
+2002-10-04 Michael Koch <konqueror@gmx.de>
+
+ * java/beans/beancontext/BeanContextChildSupport.java:
+ Added serialVersionUID.
+ * java/text/Collator.java: (compare): Made documentation HTML-aware.
+ * javax/naming/BinaryRefAddr.java: Added serialVersionUID.
+ * javax/naming/Name.java: Added serialVersionUID.
+
+2002-10-03 Adam Megacz <adam@xwt.org>
+
+ * natNetworkInterface.cc (getRealNetworkInterfaces): ifdef out
+ some functionality that isn't supported yet on WIN32.
+
+2002-10-03 Tom Tromey <tromey@redhat.com>
+
+ * Makefile.in: Rebuilt.
+ * Makefile.am (awt_java_source_files): Added new files.
+
+2002-10-03 Michael Koch <konqueror@gmx.de>
+
+ * java/net/InetAddress.java
+ (class InetAddress): Removed final keyword.
+ (equals): Fixed typo.
+ (getByAddress): New method.
+
+2002-10-03 Michael Koch <konqueror@gmx.de>
+
+ * java/awt/dnd/Autoscroll.java:
+ New file, merge from Classpath.
+ * java/awt/dnd/DragSourceAdapter.java:
+ (dragExit): Fixed typos in argument type.
+ (dragDropEnd): Fixed typos in argument type.
+ * java/awt/dnd/DragSourceDropEvent.java:
+ New file, merge from Classpath.
+ * java/awt/dnd/DropTarget.java:
+ Added stubs, merge from Classpath.
+ * java/awt/dnd/DropTargetAdapter.java:
+ New file, merge from Classpath.
+ * java/awt/dnd/DropTargetContext.java:
+ New file, merge from Classpath.
+ * java/awt/dnd/DropTargetDragEvent.java:
+ New file, merge from Classpath.
+ * java/awt/dnd/DropTargetDropEvent.java:
+ New file, merge from Classpath.
+ * java/awt/dnd/DropTargetEvent.java:
+ New file, merge from Classpath.
+ * java/awt/dnd/DropTargetListener.java:
+ New file, merge from Classpath.
+ * java/awt/dnd/MouseDragGestureRecognizer.java:
+ New file, merge from Classpath.
+ * java/awt/dnd/peer/DropTargetContextPeer.java:
+ New file, merge from Classpath.
+
+2002-10-03 Michael Koch <konqueror@gmx.de>
+
+ * java/net/DatagramPacket.java
+ (setLength): Fixed typo and be HTML-aware.
+ * java/net/InetSocketAddress.java
+ (InetSocketAddress): Correct initialization of hostname, fixed typo.
+ (equals): Added comment about equality of InetSocketAddress objects.
+ * java/net/ServerSocket.java
+ (accept): Added checks.
+ (isClosed): New stubbed method.
+ * java/net/SocketOptions.java: Reindention.
+ * java/net/SocketPermission
+ (SocketPermission): Documentation fixed.
+
+2002-10-03 Michael Koch <konqueror@gmx.de>
+
+ * java/net/DatagramSocket.java
+ (receive): Check with SecurityManager AFTER the packet is received,
+ check if connected to multicast address, documentation added.
+ (send): Only check SecurityManager if connected, check address of
+ packet to send.
+ (connect): Implemented, documentation added.
+ * java/net/Inet6Address.java: New file (not added yet to Makefile.am).
+ * java/net/InetSocketAddress.java
+ (whole file): Reindented.
+ (hostname): New attribute.
+ (InetSocketAddress): Initialize new attribute.
+ (getAddress): Documentation added.
+ (getHostName): Documentation added.
+ (getPort): Documentation added.
+ (hashCode): Documentation added.
+ (isUnresolved): Documentation added.
+ (toString): Conform to output of JDK 1.4.1, documentation added.
+ * java/net/MulticastSocket.java
+ (joinGroup): Removed FIXME, documentation added.
+ (leaveGroup): Removed FIXME, documentation added.
+ (send): Documentation added.
+ * java/net/Socket.java
+ (inputShutdown): New variable.
+ (outputShutdown): New variable.
+ (Socket): Initialize new variables.
+ (getRemoteSocketAddress): Check if connected.
+ (shutdownInput): Set new variable.
+ (shutdownOutput): Set new variable.
+ (isConnected): New method.
+ (isClosed): New method.
+ (isInputShutdown): New method.
+ (isOutputShutdown): New method.
+ * java/net/URLStreamHandler.java
+ (URLStreamHandler): New method.
+ (openConnection): Added documentation.
+ (parseURL): Added documentation.
+ (getHostAddress): New method.
+ (getDefaultPort): New method.
+
+2002-10-02 Tom Tromey <tromey@redhat.com>
+
+ * java/rmi/activation/ActivationDesc.java,
+ java/rmi/activation/ActivationGroupDesc.java,
+ java/rmi/activation/ActivationGroupID.java,
+ java/rmi/activation/ActivationID.java: New versions from
+ Classpath.
+
+2002-09-30 Bo Thorsen <bo@suse.de>
+
+ * sysdep/x86-64/locks.h (compare_and_swap): Fix multilib support.
+
+2002-09-30 Tom Tromey <tromey@redhat.com>
+
+ * java/io/ObjectInputStream.java (resolveProxyClass): New method
+ from Classpath.
+ * Makefile.in: Rebuilt.
+ * Makefile.am (rmi_java_source_files): Added new files.
+ * gnu/java/rmi/RMIMarshalledObjectInputStream.java,
+ gnu/java/rmi/RMIMarshalledObjectOutputStream.java,
+ gnu/java/rmi/server/ConnectionRunnerPool.java: New files from
+ Classpath.
+ * gnu/java/rmi/dgc/DGCImpl.java,
+ gnu/java/rmi/dgc/DGCImpl_Skel.java,
+ gnu/java/rmi/dgc/DGCImpl_Stub.java,
+ gnu/java/rmi/registry/RegistryImpl_Skel.java,
+ gnu/java/rmi/registry/RegistryImpl_Stub.java,
+ gnu/java/rmi/server/RMIHashes.java,
+ gnu/java/rmi/server/RMIObjectInputStream.java,
+ gnu/java/rmi/server/RMIObjectOutputStream.java,
+ gnu/java/rmi/server/UnicastConnection.java,
+ gnu/java/rmi/server/UnicastConnectionManager.java,
+ gnu/java/rmi/server/UnicastRef.java,
+ gnu/java/rmi/server/UnicastServer.java,
+ gnu/java/rmi/server/UnicastServerRef.java,
+ java/rmi/MarshalledObject.java,
+ java/rmi/server/RMIClassLoader.java,
+ java/rmi/server/RemoteObject.java,
+ java/rmi/server/UnicastRemoteObject.java,
+ java/security/SecureClassLoader.java: Merged from Classpath.
+
2002-09-29 Anthony Green <green@redhat.com>
* java/lang/reflect/UndeclaredThrowableException.java: New file.
diff --git a/libjava/Makefile.am b/libjava/Makefile.am
index 5d2a18209a0..bbcd51d8e38 100644
--- a/libjava/Makefile.am
+++ b/libjava/Makefile.am
@@ -852,10 +852,12 @@ java/awt/Robot.java \
java/awt/ScrollPaneAdjustable.java \
java/awt/Stroke.java \
java/awt/TexturePaint.java \
+java/awt/dnd/peer/DragSourceContextPeer.java \
+java/awt/dnd/peer/DropTargetContextPeer.java \
java/awt/dnd/DnDConstants.java \
java/awt/dnd/DragGestureEvent.java \
java/awt/dnd/DragGestureListener.java \
-java/awt/dnd/DragGestureRecognizer.java \
+java/awt/dnd/DragGestureRecognizer.java \
java/awt/dnd/DragSource.java \
java/awt/dnd/DragSourceAdapter.java \
java/awt/dnd/DragSourceContext.java \
@@ -865,7 +867,15 @@ java/awt/dnd/DragSourceListener.java \
java/awt/dnd/DragSourceMotionListener.java \
java/awt/dnd/DropTarget.java \
java/awt/dnd/InvalidDnDOperationException.java \
-java/awt/dnd/peer/DragSourceContextPeer.java \
+java/awt/dnd/Autoscroll.java \
+java/awt/dnd/DragSourceDropEvent.java \
+java/awt/dnd/DropTargetAdapter.java \
+java/awt/dnd/DropTargetContext.java \
+java/awt/dnd/DropTargetDragEvent.java \
+java/awt/dnd/DropTargetDropEvent.java \
+java/awt/dnd/DropTargetEvent.java \
+java/awt/dnd/DropTargetListener.java \
+java/awt/dnd/MouseDragGestureRecognizer.java \
java/awt/font/TextHitInfo.java \
java/awt/im/spi/InputMethod.java \
java/awt/im/spi/InputMethodContext.java \
@@ -1284,6 +1294,8 @@ java/rmi/server/SocketSecurityException.java \
java/rmi/server/UID.java \
java/rmi/server/UnicastRemoteObject.java \
java/rmi/server/Unreferenced.java \
+gnu/java/rmi/RMIMarshalledObjectInputStream.java \
+gnu/java/rmi/RMIMarshalledObjectOutputStream.java \
gnu/java/rmi/dgc/DGCImpl.java \
gnu/java/rmi/dgc/DGCImpl_Skel.java \
gnu/java/rmi/dgc/DGCImpl_Stub.java \
@@ -1295,6 +1307,7 @@ gnu/java/rmi/rmic/Compiler.java \
gnu/java/rmi/rmic/CompilerProcess.java \
gnu/java/rmi/rmic/RMIC.java \
gnu/java/rmi/rmic/TabbedWriter.java \
+gnu/java/rmi/server/ConnectionRunnerPool.java \
gnu/java/rmi/server/ProtocolConstants.java \
gnu/java/rmi/server/RMIDefaultSocketFactory.java \
gnu/java/rmi/server/RMIHashes.java \
@@ -1909,6 +1922,8 @@ java/net/DatagramSocketImplFactory.java \
java/net/FileNameMap.java \
java/net/HttpURLConnection.java \
java/net/InetAddress.java \
+java/net/Inet4Address.java \
+java/net/Inet6Address.java \
java/net/InetSocketAddress.java \
java/net/JarURLConnection.java \
java/net/MalformedURLException.java \
@@ -1930,6 +1945,7 @@ java/net/SocketImplFactory.java \
java/net/SocketOptions.java \
java/net/SocketPermission.java \
java/net/SocketTimeoutException.java \
+java/net/URI.java \
java/net/URISyntaxException.java \
java/net/URL.java \
java/net/URLClassLoader.java \
@@ -1940,11 +1956,29 @@ java/net/URLStreamHandler.java \
java/net/URLStreamHandlerFactory.java \
java/net/UnknownHostException.java \
java/net/UnknownServiceException.java \
+java/nio/Buffer.java \
+java/nio/ByteBuffer.java \
+java/nio/MappedByteBuffer.java \
+java/nio/channels/AlreadyConnectedException.java \
+java/nio/channels/ByteChannel.java \
+java/nio/channels/Channel.java \
+java/nio/channels/ClosedChannelException.java \
java/nio/channels/DatagramChannel.java \
+java/nio/channels/GatheringByteChannel.java \
java/nio/channels/IllegalBlockingModeException.java \
+java/nio/channels/InterruptibleChannel.java \
+java/nio/channels/ReadableByteChannel.java \
+java/nio/channels/ScatteringByteChannel.java \
java/nio/channels/ServerSocketChannel.java \
java/nio/channels/SocketChannel.java \
+java/nio/channels/WritableByteChannel.java \
java/nio/channels/spi/AbstractSelectableChannel.java \
+java/nio/charset/CharacterCodingException.java \
+java/nio/charset/IllegalCharsetNameException.java \
+java/nio/charset/MalformedInputException.java \
+java/nio/charset/UnmappableCharacterException.java \
+java/nio/charset/UnsupportedCharsetException.java \
+java/nio/charset/spi/CharsetProvider.java \
java/security/AccessControlContext.java \
java/security/AccessControlException.java \
java/security/AccessController.java \
diff --git a/libjava/Makefile.in b/libjava/Makefile.in
index a0f6851409b..b45966030c4 100644
--- a/libjava/Makefile.in
+++ b/libjava/Makefile.in
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -609,10 +609,12 @@ java/awt/Robot.java \
java/awt/ScrollPaneAdjustable.java \
java/awt/Stroke.java \
java/awt/TexturePaint.java \
+java/awt/dnd/peer/DragSourceContextPeer.java \
+java/awt/dnd/peer/DropTargetContextPeer.java \
java/awt/dnd/DnDConstants.java \
java/awt/dnd/DragGestureEvent.java \
java/awt/dnd/DragGestureListener.java \
-java/awt/dnd/DragGestureRecognizer.java \
+java/awt/dnd/DragGestureRecognizer.java \
java/awt/dnd/DragSource.java \
java/awt/dnd/DragSourceAdapter.java \
java/awt/dnd/DragSourceContext.java \
@@ -622,7 +624,15 @@ java/awt/dnd/DragSourceListener.java \
java/awt/dnd/DragSourceMotionListener.java \
java/awt/dnd/DropTarget.java \
java/awt/dnd/InvalidDnDOperationException.java \
-java/awt/dnd/peer/DragSourceContextPeer.java \
+java/awt/dnd/Autoscroll.java \
+java/awt/dnd/DragSourceDropEvent.java \
+java/awt/dnd/DropTargetAdapter.java \
+java/awt/dnd/DropTargetContext.java \
+java/awt/dnd/DropTargetDragEvent.java \
+java/awt/dnd/DropTargetDropEvent.java \
+java/awt/dnd/DropTargetEvent.java \
+java/awt/dnd/DropTargetListener.java \
+java/awt/dnd/MouseDragGestureRecognizer.java \
java/awt/font/TextHitInfo.java \
java/awt/im/spi/InputMethod.java \
java/awt/im/spi/InputMethodContext.java \
@@ -1042,6 +1052,8 @@ java/rmi/server/SocketSecurityException.java \
java/rmi/server/UID.java \
java/rmi/server/UnicastRemoteObject.java \
java/rmi/server/Unreferenced.java \
+gnu/java/rmi/RMIMarshalledObjectInputStream.java \
+gnu/java/rmi/RMIMarshalledObjectOutputStream.java \
gnu/java/rmi/dgc/DGCImpl.java \
gnu/java/rmi/dgc/DGCImpl_Skel.java \
gnu/java/rmi/dgc/DGCImpl_Stub.java \
@@ -1053,6 +1065,7 @@ gnu/java/rmi/rmic/Compiler.java \
gnu/java/rmi/rmic/CompilerProcess.java \
gnu/java/rmi/rmic/RMIC.java \
gnu/java/rmi/rmic/TabbedWriter.java \
+gnu/java/rmi/server/ConnectionRunnerPool.java \
gnu/java/rmi/server/ProtocolConstants.java \
gnu/java/rmi/server/RMIDefaultSocketFactory.java \
gnu/java/rmi/server/RMIHashes.java \
@@ -1659,6 +1672,8 @@ java/net/DatagramSocketImplFactory.java \
java/net/FileNameMap.java \
java/net/HttpURLConnection.java \
java/net/InetAddress.java \
+java/net/Inet4Address.java \
+java/net/Inet6Address.java \
java/net/InetSocketAddress.java \
java/net/JarURLConnection.java \
java/net/MalformedURLException.java \
@@ -1680,6 +1695,7 @@ java/net/SocketImplFactory.java \
java/net/SocketOptions.java \
java/net/SocketPermission.java \
java/net/SocketTimeoutException.java \
+java/net/URI.java \
java/net/URISyntaxException.java \
java/net/URL.java \
java/net/URLClassLoader.java \
@@ -1690,11 +1706,29 @@ java/net/URLStreamHandler.java \
java/net/URLStreamHandlerFactory.java \
java/net/UnknownHostException.java \
java/net/UnknownServiceException.java \
+java/nio/Buffer.java \
+java/nio/ByteBuffer.java \
+java/nio/MappedByteBuffer.java \
+java/nio/channels/AlreadyConnectedException.java \
+java/nio/channels/ByteChannel.java \
+java/nio/channels/Channel.java \
+java/nio/channels/ClosedChannelException.java \
java/nio/channels/DatagramChannel.java \
+java/nio/channels/GatheringByteChannel.java \
java/nio/channels/IllegalBlockingModeException.java \
+java/nio/channels/InterruptibleChannel.java \
+java/nio/channels/ReadableByteChannel.java \
+java/nio/channels/ScatteringByteChannel.java \
java/nio/channels/ServerSocketChannel.java \
java/nio/channels/SocketChannel.java \
+java/nio/channels/WritableByteChannel.java \
java/nio/channels/spi/AbstractSelectableChannel.java \
+java/nio/charset/CharacterCodingException.java \
+java/nio/charset/IllegalCharsetNameException.java \
+java/nio/charset/MalformedInputException.java \
+java/nio/charset/UnmappableCharacterException.java \
+java/nio/charset/UnsupportedCharsetException.java \
+java/nio/charset/spi/CharsetProvider.java \
java/security/AccessControlContext.java \
java/security/AccessControlException.java \
java/security/AccessController.java \
@@ -2462,8 +2496,10 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/gnu/java/locale/LocaleInformation_zh_HK.P \
.deps/gnu/java/locale/LocaleInformation_zh_SG.P \
.deps/gnu/java/locale/LocaleInformation_zh_TW.P \
-.deps/gnu/java/math/MPN.P .deps/gnu/java/rmi/dgc/DGCImpl.P \
-.deps/gnu/java/rmi/dgc/DGCImpl_Skel.P \
+.deps/gnu/java/math/MPN.P \
+.deps/gnu/java/rmi/RMIMarshalledObjectInputStream.P \
+.deps/gnu/java/rmi/RMIMarshalledObjectOutputStream.P \
+.deps/gnu/java/rmi/dgc/DGCImpl.P .deps/gnu/java/rmi/dgc/DGCImpl_Skel.P \
.deps/gnu/java/rmi/dgc/DGCImpl_Stub.P \
.deps/gnu/java/rmi/registry/RegistryImpl.P \
.deps/gnu/java/rmi/registry/RegistryImpl_Skel.P \
@@ -2472,6 +2508,7 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/gnu/java/rmi/rmic/Compiler.P \
.deps/gnu/java/rmi/rmic/CompilerProcess.P \
.deps/gnu/java/rmi/rmic/RMIC.P .deps/gnu/java/rmi/rmic/TabbedWriter.P \
+.deps/gnu/java/rmi/server/ConnectionRunnerPool.P \
.deps/gnu/java/rmi/server/ProtocolConstants.P \
.deps/gnu/java/rmi/server/RMIDefaultSocketFactory.P \
.deps/gnu/java/rmi/server/RMIHashes.P \
@@ -2574,18 +2611,27 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/awt/datatransfer/SystemFlavorMap.P \
.deps/java/awt/datatransfer/Transferable.P \
.deps/java/awt/datatransfer/UnsupportedFlavorException.P \
-.deps/java/awt/dnd/DnDConstants.P .deps/java/awt/dnd/DragGestureEvent.P \
+.deps/java/awt/dnd/Autoscroll.P .deps/java/awt/dnd/DnDConstants.P \
+.deps/java/awt/dnd/DragGestureEvent.P \
.deps/java/awt/dnd/DragGestureListener.P \
.deps/java/awt/dnd/DragGestureRecognizer.P \
.deps/java/awt/dnd/DragSource.P .deps/java/awt/dnd/DragSourceAdapter.P \
.deps/java/awt/dnd/DragSourceContext.P \
.deps/java/awt/dnd/DragSourceDragEvent.P \
+.deps/java/awt/dnd/DragSourceDropEvent.P \
.deps/java/awt/dnd/DragSourceEvent.P \
.deps/java/awt/dnd/DragSourceListener.P \
.deps/java/awt/dnd/DragSourceMotionListener.P \
-.deps/java/awt/dnd/DropTarget.P \
+.deps/java/awt/dnd/DropTarget.P .deps/java/awt/dnd/DropTargetAdapter.P \
+.deps/java/awt/dnd/DropTargetContext.P \
+.deps/java/awt/dnd/DropTargetDragEvent.P \
+.deps/java/awt/dnd/DropTargetDropEvent.P \
+.deps/java/awt/dnd/DropTargetEvent.P \
+.deps/java/awt/dnd/DropTargetListener.P \
.deps/java/awt/dnd/InvalidDnDOperationException.P \
+.deps/java/awt/dnd/MouseDragGestureRecognizer.P \
.deps/java/awt/dnd/peer/DragSourceContextPeer.P \
+.deps/java/awt/dnd/peer/DropTargetContextPeer.P \
.deps/java/awt/event/AWTEventListener.P \
.deps/java/awt/event/AWTEventListenerProxy.P \
.deps/java/awt/event/ActionEvent.P \
@@ -2887,7 +2933,8 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/net/DatagramPacket.P .deps/java/net/DatagramSocket.P \
.deps/java/net/DatagramSocketImpl.P \
.deps/java/net/DatagramSocketImplFactory.P .deps/java/net/FileNameMap.P \
-.deps/java/net/HttpURLConnection.P .deps/java/net/InetAddress.P \
+.deps/java/net/HttpURLConnection.P .deps/java/net/Inet4Address.P \
+.deps/java/net/Inet6Address.P .deps/java/net/InetAddress.P \
.deps/java/net/InetSocketAddress.P .deps/java/net/JarURLConnection.P \
.deps/java/net/MalformedURLException.P .deps/java/net/MulticastSocket.P \
.deps/java/net/NetPermission.P .deps/java/net/NetworkInterface.P \
@@ -2901,7 +2948,7 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/net/SocketException.P .deps/java/net/SocketImpl.P \
.deps/java/net/SocketImplFactory.P .deps/java/net/SocketOptions.P \
.deps/java/net/SocketPermission.P \
-.deps/java/net/SocketTimeoutException.P \
+.deps/java/net/SocketTimeoutException.P .deps/java/net/URI.P \
.deps/java/net/URISyntaxException.P .deps/java/net/URL.P \
.deps/java/net/URLClassLoader.P .deps/java/net/URLConnection.P \
.deps/java/net/URLDecoder.P .deps/java/net/URLEncoder.P \
@@ -2911,12 +2958,27 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/net/UnknownServiceException.P \
.deps/java/net/natInetAddress.P .deps/java/net/natNetworkInterface.P \
.deps/java/net/natPlainDatagramSocketImpl.P \
-.deps/java/net/natPlainSocketImpl.P \
+.deps/java/net/natPlainSocketImpl.P .deps/java/nio/Buffer.P \
+.deps/java/nio/ByteBuffer.P .deps/java/nio/MappedByteBuffer.P \
+.deps/java/nio/channels/AlreadyConnectedException.P \
+.deps/java/nio/channels/ByteChannel.P .deps/java/nio/channels/Channel.P \
+.deps/java/nio/channels/ClosedChannelException.P \
.deps/java/nio/channels/DatagramChannel.P \
+.deps/java/nio/channels/GatheringByteChannel.P \
.deps/java/nio/channels/IllegalBlockingModeException.P \
+.deps/java/nio/channels/InterruptibleChannel.P \
+.deps/java/nio/channels/ReadableByteChannel.P \
+.deps/java/nio/channels/ScatteringByteChannel.P \
.deps/java/nio/channels/ServerSocketChannel.P \
.deps/java/nio/channels/SocketChannel.P \
+.deps/java/nio/channels/WritableByteChannel.P \
.deps/java/nio/channels/spi/AbstractSelectableChannel.P \
+.deps/java/nio/charset/CharacterCodingException.P \
+.deps/java/nio/charset/IllegalCharsetNameException.P \
+.deps/java/nio/charset/MalformedInputException.P \
+.deps/java/nio/charset/UnmappableCharacterException.P \
+.deps/java/nio/charset/UnsupportedCharsetException.P \
+.deps/java/nio/charset/spi/CharsetProvider.P \
.deps/java/rmi/AccessException.P .deps/java/rmi/AlreadyBoundException.P \
.deps/java/rmi/ConnectException.P .deps/java/rmi/ConnectIOException.P \
.deps/java/rmi/MarshalException.P .deps/java/rmi/MarshalledObject.P \
@@ -3785,7 +3847,7 @@ maintainer-clean-recursive:
dot_seen=no; \
rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
rev="$$subdir $$rev"; \
- test "$$subdir" != "." || dot_seen=yes; \
+ test "$$subdir" = "." && dot_seen=yes; \
done; \
test "$$dot_seen" = "no" && rev=". $$rev"; \
target=`echo $@ | sed s/-recursive//`; \
diff --git a/libjava/aclocal.m4 b/libjava/aclocal.m4
index fc85cbde103..26e735711b9 100644
--- a/libjava/aclocal.m4
+++ b/libjava/aclocal.m4
@@ -434,3 +434,26 @@ for am_file in <<$1>>; do
done<<>>dnl>>)
changequote([,]))])
+AC_DEFUN([CHECK_FOR_BROKEN_MINGW_LD],
+[
+AC_MSG_CHECKING(whether 'ld' is at least 2.13)
+LD_PROG=`$CC --print-prog-name=ld`
+LD_VERSION=`$LD_PROG --version`
+LD_VERSION_MAJOR=`echo "$LD_VERSION" | head -1 | cut -d '.' -f 1 | cut -d ' ' -f 4`
+LD_VERSION_MINOR=`echo "$LD_VERSION" | head -1 | cut -d '.' -f 2`
+if expr "$LD_VERSION_MAJOR" \> 2 > /dev/null; then
+ LD_OK="ok"
+else
+ if expr "$LD_VERSION_MAJOR" = 2 && expr "$LD_VERSION_MINOR" \>= 13 > /dev/null; then
+ LD_OK="ok"
+ fi
+fi
+if test "x$LD_OK" != x; then
+ AC_MSG_RESULT([yes; major=$LD_VERSION_MAJOR, minor=$LD_VERSION_MINOR])
+else
+ AC_MSG_RESULT([no; major=$LD_VERSION_MAJOR, minor=$LD_VERSION_MINOR])
+ AC_MSG_WARN([ld <2.13 detected; enabling JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS hack...])
+ AC_DEFINE(JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS, 1,
+ [Indicate that linker is not able to 8-byte align static data])
+fi[]dnl
+])# CHECK_FOR_BROKEN_MINGW_LD
diff --git a/libjava/configure b/libjava/configure
index bef8cc14d86..514a1aa294e 100755
--- a/libjava/configure
+++ b/libjava/configure
@@ -1644,7 +1644,7 @@ else
if { (eval echo configure:1645: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
for file in conftest.*; do
case $file in
- *.$ac_ext | *.c | *.o | *.obj) ;;
+ *.c | *.o | *.obj) ;;
*) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
esac
done
@@ -2904,6 +2904,30 @@ case "$TARGET_ECOS" in
PLATFORM=Win32
PLATFORMOBJS=win32.lo
PLATFORMH=win32.h
+
+echo $ac_n "checking whether 'ld' is at least 2.13""... $ac_c" 1>&6
+echo "configure:2910: checking whether 'ld' is at least 2.13" >&5
+LD_PROG=`$CC --print-prog-name=ld`
+LD_VERSION=`$LD_PROG --version`
+LD_VERSION_MAJOR=`echo "$LD_VERSION" | head -1 | cut -d '.' -f 1 | cut -d ' ' -f 4`
+LD_VERSION_MINOR=`echo "$LD_VERSION" | head -1 | cut -d '.' -f 2`
+if expr "$LD_VERSION_MAJOR" \> 2 > /dev/null; then
+ LD_OK="ok"
+else
+ if expr "$LD_VERSION_MAJOR" = 2 && expr "$LD_VERSION_MINOR" \>= 13 > /dev/null; then
+ LD_OK="ok"
+ fi
+fi
+if test "x$LD_OK" != x; then
+ echo "$ac_t""yes; major=$LD_VERSION_MAJOR, minor=$LD_VERSION_MINOR" 1>&6
+else
+ echo "$ac_t""no; major=$LD_VERSION_MAJOR, minor=$LD_VERSION_MINOR" 1>&6
+ echo "configure: warning: ld <2.13 detected; enabling JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS hack..." 1>&2
+ cat >> confdefs.h <<\EOF
+#define JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS 1
+EOF
+
+fi
;;
*)
PLATFORM=Posix
@@ -2926,7 +2950,7 @@ esac
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2930: checking how to run the C preprocessor" >&5
+echo "configure:2954: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -2941,13 +2965,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 2945 "configure"
+#line 2969 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2951: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2975: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2958,13 +2982,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 2962 "configure"
+#line 2986 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2968: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2992: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2975,13 +2999,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 2979 "configure"
+#line 3003 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2985: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3009: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -3006,7 +3030,7 @@ fi
echo "$ac_t""$CPP" 1>&6
cat > conftest.$ac_ext <<EOF
-#line 3010 "configure"
+#line 3034 "configure"
#include "confdefs.h"
#include <stdint.h>
EOF
@@ -3021,7 +3045,7 @@ fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3025 "configure"
+#line 3049 "configure"
#include "confdefs.h"
#include <inttypes.h>
EOF
@@ -3036,7 +3060,7 @@ fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3040 "configure"
+#line 3064 "configure"
#include "confdefs.h"
#include <sys/types.h>
EOF
@@ -3051,7 +3075,7 @@ fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3055 "configure"
+#line 3079 "configure"
#include "confdefs.h"
#include <sys/config.h>
EOF
@@ -3068,7 +3092,7 @@ rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3072 "configure"
+#line 3096 "configure"
#include "confdefs.h"
#include <time.h>
EOF
@@ -3083,7 +3107,7 @@ fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3087 "configure"
+#line 3111 "configure"
#include "confdefs.h"
#include <time.h>
EOF
@@ -3135,7 +3159,7 @@ ZLIBTESTSPEC=
libsubdir=.libs
echo $ac_n "checking for garbage collector to use""... $ac_c" 1>&6
-echo "configure:3139: checking for garbage collector to use" >&5
+echo "configure:3163: checking for garbage collector to use" >&5
# Check whether --enable-java-gc or --disable-java-gc was given.
if test "${enable_java_gc+set}" = set; then
enableval="$enable_java_gc"
@@ -3188,7 +3212,7 @@ esac
echo $ac_n "checking for thread model used by GCC""... $ac_c" 1>&6
-echo "configure:3192: checking for thread model used by GCC" >&5
+echo "configure:3216: checking for thread model used by GCC" >&5
THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
echo "$ac_t""$THREADS" 1>&6
@@ -3303,7 +3327,7 @@ if test -d sysdep; then true; else mkdir sysdep; fi
HASH_SYNC_SPEC=
# Hash synchronization is only useful with posix threads right now.
-if test "$enable_hash_synchronization" = yes && test "$THREADS" = "posix"; then
+if test "$enable_hash_synchronization" = yes; then
HASH_SYNC_SPEC=-fhash-synchronization
cat >> confdefs.h <<\EOF
#define JV_HASH_SYNCHRONIZATION 1
@@ -3396,12 +3420,12 @@ else
for ac_func in strerror ioctl select fstat open fsync sleep opendir
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3400: checking for $ac_func" >&5
+echo "configure:3424: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3405 "configure"
+#line 3429 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -3424,7 +3448,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:3428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -3451,12 +3475,12 @@ done
for ac_func in gmtime_r localtime_r readdir_r getpwuid_r getcwd
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3455: checking for $ac_func" >&5
+echo "configure:3479: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3460 "configure"
+#line 3484 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -3479,7 +3503,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:3483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -3506,12 +3530,12 @@ done
for ac_func in access stat mkdir rename rmdir unlink realpath utime chmod
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3510: checking for $ac_func" >&5
+echo "configure:3534: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3515 "configure"
+#line 3539 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -3534,7 +3558,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:3538: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -3561,12 +3585,12 @@ done
for ac_func in nl_langinfo setlocale
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3565: checking for $ac_func" >&5
+echo "configure:3589: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3570 "configure"
+#line 3594 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -3589,7 +3613,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:3593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -3616,12 +3640,12 @@ done
for ac_func in inet_aton inet_addr
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3620: checking for $ac_func" >&5
+echo "configure:3644: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3625 "configure"
+#line 3649 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -3644,7 +3668,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:3648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -3671,12 +3695,12 @@ done
for ac_func in inet_pton uname inet_ntoa
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3675: checking for $ac_func" >&5
+echo "configure:3699: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3680 "configure"
+#line 3704 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -3699,7 +3723,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:3703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -3726,12 +3750,12 @@ done
for ac_func in fork execvp pipe sigaction ftruncate
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3730: checking for $ac_func" >&5
+echo "configure:3754: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3735 "configure"
+#line 3759 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -3754,7 +3778,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:3758: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -3782,17 +3806,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3786: checking for $ac_hdr" >&5
+echo "configure:3810: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3791 "configure"
+#line 3815 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3796: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3820: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -3819,12 +3843,12 @@ fi
done
echo $ac_n "checking for backtrace""... $ac_c" 1>&6
-echo "configure:3823: checking for backtrace" >&5
+echo "configure:3847: checking for backtrace" >&5
if eval "test \"`echo '$''{'ac_cv_func_backtrace'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3828 "configure"
+#line 3852 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char backtrace(); below. */
@@ -3847,7 +3871,7 @@ backtrace();
; return 0; }
EOF
-if { (eval echo configure:3851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_backtrace=yes"
else
@@ -3883,7 +3907,7 @@ fi
echo $ac_n "checking for dladdr in -ldl""... $ac_c" 1>&6
-echo "configure:3887: checking for dladdr in -ldl" >&5
+echo "configure:3911: checking for dladdr in -ldl" >&5
ac_lib_var=`echo dl'_'dladdr | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3891,7 +3915,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3895 "configure"
+#line 3919 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3902,7 +3926,7 @@ int main() {
dladdr()
; return 0; }
EOF
-if { (eval echo configure:3906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -3932,7 +3956,7 @@ do
ac_safe=`echo "$ac_file" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_file""... $ac_c" 1>&6
-echo "configure:3936: checking for $ac_file" >&5
+echo "configure:3960: checking for $ac_file" >&5
if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3990,7 +4014,7 @@ fi
echo $ac_n "checking for iconv""... $ac_c" 1>&6
-echo "configure:3994: checking for iconv" >&5
+echo "configure:4018: checking for iconv" >&5
if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3998,7 +4022,7 @@ else
am_cv_func_iconv="no, consider installing GNU libiconv"
am_cv_lib_iconv=no
cat > conftest.$ac_ext <<EOF
-#line 4002 "configure"
+#line 4026 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <iconv.h>
@@ -4008,7 +4032,7 @@ iconv_t cd = iconv_open("","");
iconv_close(cd);
; return 0; }
EOF
-if { (eval echo configure:4012: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4036: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_func_iconv=yes
else
@@ -4020,7 +4044,7 @@ rm -f conftest*
am_save_LIBS="$LIBS"
LIBS="$LIBS $am_cv_libiconv_ldpath -liconv"
cat > conftest.$ac_ext <<EOF
-#line 4024 "configure"
+#line 4048 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <iconv.h>
@@ -4030,7 +4054,7 @@ iconv_t cd = iconv_open("","");
iconv_close(cd);
; return 0; }
EOF
-if { (eval echo configure:4034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_lib_iconv=yes
am_cv_func_iconv=yes
@@ -4051,13 +4075,13 @@ echo "$ac_t""$am_cv_func_iconv" 1>&6
EOF
echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6
-echo "configure:4055: checking for iconv declaration" >&5
+echo "configure:4079: checking for iconv declaration" >&5
if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4061 "configure"
+#line 4085 "configure"
#include "confdefs.h"
#include <stdlib.h>
@@ -4076,7 +4100,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:4080: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4104: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
am_cv_proto_iconv_arg1=""
else
@@ -4105,19 +4129,19 @@ EOF
if test $ac_cv_header_locale_h = yes; then
echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:4109: checking for LC_MESSAGES" >&5
+echo "configure:4133: checking for LC_MESSAGES" >&5
if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4114 "configure"
+#line 4138 "configure"
#include "confdefs.h"
#include <locale.h>
int main() {
return LC_MESSAGES
; return 0; }
EOF
-if { (eval echo configure:4121: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_val_LC_MESSAGES=yes
else
@@ -4138,12 +4162,12 @@ EOF
fi
fi
echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
-echo "configure:4142: checking whether struct tm is in sys/time.h or time.h" >&5
+echo "configure:4166: checking whether struct tm is in sys/time.h or time.h" >&5
if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4147 "configure"
+#line 4171 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <time.h>
@@ -4151,7 +4175,7 @@ int main() {
struct tm *tp; tp->tm_sec;
; return 0; }
EOF
-if { (eval echo configure:4155: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4179: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_struct_tm=time.h
else
@@ -4172,12 +4196,12 @@ EOF
fi
echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6
-echo "configure:4176: checking for tm_zone in struct tm" >&5
+echo "configure:4200: checking for tm_zone in struct tm" >&5
if eval "test \"`echo '$''{'ac_cv_struct_tm_zone'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4181 "configure"
+#line 4205 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <$ac_cv_struct_tm>
@@ -4185,7 +4209,7 @@ int main() {
struct tm tm; tm.tm_zone;
; return 0; }
EOF
-if { (eval echo configure:4189: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4213: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_struct_tm_zone=yes
else
@@ -4205,12 +4229,12 @@ EOF
else
echo $ac_n "checking for tzname""... $ac_c" 1>&6
-echo "configure:4209: checking for tzname" >&5
+echo "configure:4233: checking for tzname" >&5
if eval "test \"`echo '$''{'ac_cv_var_tzname'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4214 "configure"
+#line 4238 "configure"
#include "confdefs.h"
#include <time.h>
#ifndef tzname /* For SGI. */
@@ -4220,7 +4244,7 @@ int main() {
atoi(*tzname);
; return 0; }
EOF
-if { (eval echo configure:4224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4248: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_var_tzname=yes
else
@@ -4245,12 +4269,12 @@ fi
for ac_func in gethostbyname_r
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4249: checking for $ac_func" >&5
+echo "configure:4273: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4254 "configure"
+#line 4278 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4273,7 +4297,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4300,7 +4324,7 @@ EOF
# We look for the one that returns `int'.
# Hopefully this check is robust enough.
cat > conftest.$ac_ext <<EOF
-#line 4304 "configure"
+#line 4328 "configure"
#include "confdefs.h"
#include <netdb.h>
EOF
@@ -4320,7 +4344,7 @@ rm -f conftest*
*" -D_REENTRANT "*) ;;
*)
echo $ac_n "checking whether gethostbyname_r declaration requires -D_REENTRANT""... $ac_c" 1>&6
-echo "configure:4324: checking whether gethostbyname_r declaration requires -D_REENTRANT" >&5
+echo "configure:4348: checking whether gethostbyname_r declaration requires -D_REENTRANT" >&5
if eval "test \"`echo '$''{'libjava_cv_gethostbyname_r_needs_reentrant'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4333,14 +4357,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 4337 "configure"
+#line 4361 "configure"
#include "confdefs.h"
#include <netdb.h>
int main() {
gethostbyname_r("", 0, 0);
; return 0; }
EOF
-if { (eval echo configure:4344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4368: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libjava_cv_gethostbyname_r_needs_reentrant=no
else
@@ -4350,14 +4374,14 @@ else
CPPFLAGS_SAVE="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS -D_REENTRANT"
cat > conftest.$ac_ext <<EOF
-#line 4354 "configure"
+#line 4378 "configure"
#include "confdefs.h"
#include <netdb.h>
int main() {
gethostbyname_r("", 0, 0);
; return 0; }
EOF
-if { (eval echo configure:4361: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4385: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libjava_cv_gethostbyname_r_needs_reentrant=yes
else
@@ -4392,12 +4416,12 @@ EOF
esac
echo $ac_n "checking for struct hostent_data""... $ac_c" 1>&6
-echo "configure:4396: checking for struct hostent_data" >&5
+echo "configure:4420: checking for struct hostent_data" >&5
if eval "test \"`echo '$''{'libjava_cv_struct_hostent_data'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4401 "configure"
+#line 4425 "configure"
#include "confdefs.h"
#if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
@@ -4408,7 +4432,7 @@ int main() {
struct hostent_data data;
; return 0; }
EOF
-if { (eval echo configure:4412: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4436: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libjava_cv_struct_hostent_data=yes
else
@@ -4440,7 +4464,7 @@ done
# to exist where expected. (The root issue: AC_CHECK_FUNCS assumes C
# linkage check is enough, yet C++ code requires proper prototypes.)
cat > conftest.$ac_ext <<EOF
-#line 4444 "configure"
+#line 4468 "configure"
#include "confdefs.h"
#include <netdb.h>
EOF
@@ -4451,12 +4475,12 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
for ac_func in gethostbyaddr_r
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4455: checking for $ac_func" >&5
+echo "configure:4479: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4460 "configure"
+#line 4484 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4479,7 +4503,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4506,7 +4530,7 @@ EOF
# We look for the one that returns `int'.
# Hopefully this check is robust enough.
cat > conftest.$ac_ext <<EOF
-#line 4510 "configure"
+#line 4534 "configure"
#include "confdefs.h"
#include <netdb.h>
EOF
@@ -4533,12 +4557,12 @@ rm -f conftest*
for ac_func in gethostname
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4537: checking for $ac_func" >&5
+echo "configure:4561: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4542 "configure"
+#line 4566 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4561,7 +4585,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4585,7 +4609,7 @@ EOF
EOF
cat > conftest.$ac_ext <<EOF
-#line 4589 "configure"
+#line 4613 "configure"
#include "confdefs.h"
#include <unistd.h>
EOF
@@ -4616,12 +4640,12 @@ done
for ac_func in pthread_mutexattr_settype pthread_mutexattr_setkind_np
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4620: checking for $ac_func" >&5
+echo "configure:4644: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4625 "configure"
+#line 4649 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4644,7 +4668,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4674,12 +4698,12 @@ done
for ac_func in sched_yield
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4678: checking for $ac_func" >&5
+echo "configure:4702: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4683 "configure"
+#line 4707 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4702,7 +4726,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4724,7 +4748,7 @@ EOF
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for sched_yield in -lrt""... $ac_c" 1>&6
-echo "configure:4728: checking for sched_yield in -lrt" >&5
+echo "configure:4752: checking for sched_yield in -lrt" >&5
ac_lib_var=`echo rt'_'sched_yield | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -4732,7 +4756,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lrt $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4736 "configure"
+#line 4760 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4743,7 +4767,7 @@ int main() {
sched_yield()
; return 0; }
EOF
-if { (eval echo configure:4747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -4769,7 +4793,7 @@ else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for sched_yield in -lposix4""... $ac_c" 1>&6
-echo "configure:4773: checking for sched_yield in -lposix4" >&5
+echo "configure:4797: checking for sched_yield in -lposix4" >&5
ac_lib_var=`echo posix4'_'sched_yield | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -4777,7 +4801,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lposix4 $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4781 "configure"
+#line 4805 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4788,7 +4812,7 @@ int main() {
sched_yield()
; return 0; }
EOF
-if { (eval echo configure:4792: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -4824,7 +4848,7 @@ done
# We can save a little space at runtime if the mutex has m_count
# or __m_count. This is a nice hack for Linux.
cat > conftest.$ac_ext <<EOF
-#line 4828 "configure"
+#line 4852 "configure"
#include "confdefs.h"
#include <pthread.h>
int main() {
@@ -4833,7 +4857,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:4837: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4861: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define PTHREAD_MUTEX_HAVE_M_COUNT 1
@@ -4845,7 +4869,7 @@ else
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 4849 "configure"
+#line 4873 "configure"
#include "confdefs.h"
#include <pthread.h>
int main() {
@@ -4854,7 +4878,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:4858: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4882: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define PTHREAD_MUTEX_HAVE___M_COUNT 1
@@ -4874,12 +4898,12 @@ rm -f conftest*
for ac_func in gettimeofday time ftime
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4878: checking for $ac_func" >&5
+echo "configure:4902: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4883 "configure"
+#line 4907 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4902,7 +4926,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4933,12 +4957,12 @@ done
for ac_func in memmove
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4937: checking for $ac_func" >&5
+echo "configure:4961: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4942 "configure"
+#line 4966 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4961,7 +4985,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4991,12 +5015,12 @@ done
for ac_func in memcpy
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4995: checking for $ac_func" >&5
+echo "configure:5019: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5000 "configure"
+#line 5024 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5019,7 +5043,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5023: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5048,7 +5072,7 @@ done
fi
echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:5052: checking for dlopen in -ldl" >&5
+echo "configure:5076: checking for dlopen in -ldl" >&5
ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5056,7 +5080,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5060 "configure"
+#line 5084 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5067,7 +5091,7 @@ int main() {
dlopen()
; return 0; }
EOF
-if { (eval echo configure:5071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5095: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5112,7 +5136,7 @@ fi
#--------------------------------------------------------------------
echo $ac_n "checking for socket libraries""... $ac_c" 1>&6
-echo "configure:5116: checking for socket libraries" >&5
+echo "configure:5140: checking for socket libraries" >&5
if eval "test \"`echo '$''{'gcj_cv_lib_sockets'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -5120,12 +5144,12 @@ else
gcj_checkBoth=0
unset ac_cv_func_connect
echo $ac_n "checking for connect""... $ac_c" 1>&6
-echo "configure:5124: checking for connect" >&5
+echo "configure:5148: checking for connect" >&5
if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5129 "configure"
+#line 5153 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char connect(); below. */
@@ -5148,7 +5172,7 @@ connect();
; return 0; }
EOF
-if { (eval echo configure:5152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5176: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_connect=yes"
else
@@ -5171,7 +5195,7 @@ fi
if test "$gcj_checkSocket" = 1; then
unset ac_cv_func_connect
echo $ac_n "checking for main in -lsocket""... $ac_c" 1>&6
-echo "configure:5175: checking for main in -lsocket" >&5
+echo "configure:5199: checking for main in -lsocket" >&5
ac_lib_var=`echo socket'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5179,14 +5203,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsocket $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5183 "configure"
+#line 5207 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:5190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5214: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5213,12 +5237,12 @@ fi
LIBS="$LIBS -lsocket -lnsl"
unset ac_cv_func_accept
echo $ac_n "checking for accept""... $ac_c" 1>&6
-echo "configure:5217: checking for accept" >&5
+echo "configure:5241: checking for accept" >&5
if eval "test \"`echo '$''{'ac_cv_func_accept'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5222 "configure"
+#line 5246 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char accept(); below. */
@@ -5241,7 +5265,7 @@ accept();
; return 0; }
EOF
-if { (eval echo configure:5245: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_accept=yes"
else
@@ -5268,12 +5292,12 @@ fi
gcj_oldLibs=$LIBS
LIBS="$LIBS $gcj_cv_lib_sockets"
echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:5272: checking for gethostbyname" >&5
+echo "configure:5296: checking for gethostbyname" >&5
if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5277 "configure"
+#line 5301 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char gethostbyname(); below. */
@@ -5296,7 +5320,7 @@ gethostbyname();
; return 0; }
EOF
-if { (eval echo configure:5300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5324: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_gethostbyname=yes"
else
@@ -5314,7 +5338,7 @@ if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for main in -lnsl""... $ac_c" 1>&6
-echo "configure:5318: checking for main in -lnsl" >&5
+echo "configure:5342: checking for main in -lnsl" >&5
ac_lib_var=`echo nsl'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5322,14 +5346,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lnsl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5326 "configure"
+#line 5350 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:5333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5361,7 +5385,7 @@ echo "$ac_t""$gcj_cv_lib_sockets" 1>&6
if test "$with_system_zlib" = yes; then
echo $ac_n "checking for deflate in -lz""... $ac_c" 1>&6
-echo "configure:5365: checking for deflate in -lz" >&5
+echo "configure:5389: checking for deflate in -lz" >&5
ac_lib_var=`echo z'_'deflate | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5369,7 +5393,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lz $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5373 "configure"
+#line 5397 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5380,7 +5404,7 @@ int main() {
deflate()
; return 0; }
EOF
-if { (eval echo configure:5384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5407,7 +5431,7 @@ fi
# requires -ldl.
if test "$GC" = boehm; then
echo $ac_n "checking for main in -ldl""... $ac_c" 1>&6
-echo "configure:5411: checking for main in -ldl" >&5
+echo "configure:5435: checking for main in -ldl" >&5
ac_lib_var=`echo dl'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5415,14 +5439,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5419 "configure"
+#line 5443 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:5426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5488,7 +5512,7 @@ fi
# Extract the first word of "${ac_tool_prefix}gcj", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcj; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5492: checking for $ac_word" >&5
+echo "configure:5516: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_GCJ'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -5520,7 +5544,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "gcj", so it can be a program name with args.
set dummy gcj; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5524: checking for $ac_word" >&5
+echo "configure:5548: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_GCJ'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -5582,13 +5606,13 @@ exec 5>>./config.log
CPPFLAGS=$GCJ_SAVE_CPPFLAGS
echo $ac_n "checking size of void *""... $ac_c" 1>&6
-echo "configure:5586: checking size of void *" >&5
+echo "configure:5610: checking size of void *" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_void_p'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 12 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 5592 "configure"
+#line 5616 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -5598,7 +5622,7 @@ int main() {
switch (0) case 0: case (sizeof (void *) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:5602: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5626: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_void_p=$ac_size
else
@@ -5699,18 +5723,18 @@ EOF
echo $ac_n "checking for g++ -ffloat-store bug""... $ac_c" 1>&6
-echo "configure:5703: checking for g++ -ffloat-store bug" >&5
+echo "configure:5727: checking for g++ -ffloat-store bug" >&5
save_CFLAGS="$CFLAGS"
CFLAGS="-x c++ -O2 -ffloat-store"
cat > conftest.$ac_ext <<EOF
-#line 5707 "configure"
+#line 5731 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
; return 0; }
EOF
-if { (eval echo configure:5714: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5738: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""no" 1>&6
else
@@ -5730,17 +5754,17 @@ for ac_hdr in unistd.h bstring.h sys/time.h sys/types.h fcntl.h sys/ioctl.h sys/
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5734: checking for $ac_hdr" >&5
+echo "configure:5758: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5739 "configure"
+#line 5763 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5744: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5768: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -5770,17 +5794,17 @@ for ac_hdr in dirent.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5774: checking for $ac_hdr" >&5
+echo "configure:5798: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5779 "configure"
+#line 5803 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5784: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5808: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -5810,17 +5834,17 @@ for ac_hdr in inttypes.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5814: checking for $ac_hdr" >&5
+echo "configure:5838: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5819 "configure"
+#line 5843 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5848: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -5856,12 +5880,12 @@ fi
done
echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:5860: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:5884: checking for sys/wait.h that is POSIX.1 compatible" >&5
if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5865 "configure"
+#line 5889 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/wait.h>
@@ -5877,7 +5901,7 @@ wait (&s);
s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
; return 0; }
EOF
-if { (eval echo configure:5881: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5905: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_sys_wait_h=yes
else
@@ -5899,12 +5923,12 @@ fi
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:5903: checking for ANSI C header files" >&5
+echo "configure:5927: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5908 "configure"
+#line 5932 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -5912,7 +5936,7 @@ else
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5916: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5940: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -5929,7 +5953,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 5933 "configure"
+#line 5957 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@@ -5947,7 +5971,7 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 5951 "configure"
+#line 5975 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@@ -5968,7 +5992,7 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
-#line 5972 "configure"
+#line 5996 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -5979,7 +6003,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
-if { (eval echo configure:5983: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -6003,12 +6027,12 @@ EOF
fi
echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:6007: checking for ssize_t" >&5
+echo "configure:6031: checking for ssize_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6012 "configure"
+#line 6036 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -6037,9 +6061,9 @@ fi
echo $ac_n "checking for in_addr_t""... $ac_c" 1>&6
-echo "configure:6041: checking for in_addr_t" >&5
+echo "configure:6065: checking for in_addr_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 6043 "configure"
+#line 6067 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -6053,7 +6077,7 @@ int main() {
in_addr_t foo;
; return 0; }
EOF
-if { (eval echo configure:6057: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_IN_ADDR_T 1
@@ -6069,16 +6093,16 @@ fi
rm -f conftest*
echo $ac_n "checking whether struct ip_mreq is in netinet/in.h""... $ac_c" 1>&6
-echo "configure:6073: checking whether struct ip_mreq is in netinet/in.h" >&5
+echo "configure:6097: checking whether struct ip_mreq is in netinet/in.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 6075 "configure"
+#line 6099 "configure"
#include "confdefs.h"
#include <netinet/in.h>
int main() {
struct ip_mreq mreq;
; return 0; }
EOF
-if { (eval echo configure:6082: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6106: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_STRUCT_IP_MREQ 1
@@ -6094,16 +6118,16 @@ fi
rm -f conftest*
echo $ac_n "checking whether struct ipv6_mreq is in netinet/in.h""... $ac_c" 1>&6
-echo "configure:6098: checking whether struct ipv6_mreq is in netinet/in.h" >&5
+echo "configure:6122: checking whether struct ipv6_mreq is in netinet/in.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 6100 "configure"
+#line 6124 "configure"
#include "confdefs.h"
#include <netinet/in.h>
int main() {
struct ipv6_mreq mreq6;
; return 0; }
EOF
-if { (eval echo configure:6107: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6131: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_STRUCT_IPV6_MREQ 1
@@ -6119,16 +6143,16 @@ fi
rm -f conftest*
echo $ac_n "checking whether struct sockaddr_in6 is in netinet/in.h""... $ac_c" 1>&6
-echo "configure:6123: checking whether struct sockaddr_in6 is in netinet/in.h" >&5
+echo "configure:6147: checking whether struct sockaddr_in6 is in netinet/in.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 6125 "configure"
+#line 6149 "configure"
#include "confdefs.h"
#include <netinet/in.h>
int main() {
struct sockaddr_in6 addr6;
; return 0; }
EOF
-if { (eval echo configure:6132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6156: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_INET6 1
@@ -6144,9 +6168,9 @@ fi
rm -f conftest*
echo $ac_n "checking for socklen_t in sys/socket.h""... $ac_c" 1>&6
-echo "configure:6148: checking for socklen_t in sys/socket.h" >&5
+echo "configure:6172: checking for socklen_t in sys/socket.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 6150 "configure"
+#line 6174 "configure"
#include "confdefs.h"
#define _POSIX_PII_SOCKET
#include <sys/types.h>
@@ -6155,7 +6179,7 @@ int main() {
socklen_t x = 5;
; return 0; }
EOF
-if { (eval echo configure:6159: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6183: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_SOCKLEN_T 1
@@ -6171,16 +6195,16 @@ fi
rm -f conftest*
echo $ac_n "checking for tm_gmtoff in struct tm""... $ac_c" 1>&6
-echo "configure:6175: checking for tm_gmtoff in struct tm" >&5
+echo "configure:6199: checking for tm_gmtoff in struct tm" >&5
cat > conftest.$ac_ext <<EOF
-#line 6177 "configure"
+#line 6201 "configure"
#include "confdefs.h"
#include <time.h>
int main() {
struct tm tim; tim.tm_gmtoff = 0;
; return 0; }
EOF
-if { (eval echo configure:6184: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6208: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define STRUCT_TM_HAS_GMTOFF 1
@@ -6193,16 +6217,16 @@ else
rm -rf conftest*
echo "$ac_t""no" 1>&6
echo $ac_n "checking for global timezone variable""... $ac_c" 1>&6
-echo "configure:6197: checking for global timezone variable" >&5
+echo "configure:6221: checking for global timezone variable" >&5
cat > conftest.$ac_ext <<EOF
-#line 6199 "configure"
+#line 6223 "configure"
#include "confdefs.h"
#include <time.h>
int main() {
void i(){long z2 = 2*timezone;}
; return 0; }
EOF
-if { (eval echo configure:6206: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6230: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_TIMEZONE 1
@@ -6215,16 +6239,16 @@ else
rm -rf conftest*
echo "$ac_t""no" 1>&6
echo $ac_n "checking for global _timezone variable""... $ac_c" 1>&6
-echo "configure:6219: checking for global _timezone variable" >&5
+echo "configure:6243: checking for global _timezone variable" >&5
cat > conftest.$ac_ext <<EOF
-#line 6221 "configure"
+#line 6245 "configure"
#include "confdefs.h"
#include <time.h>
int main() {
long z2 = _timezone;
; return 0; }
EOF
-if { (eval echo configure:6228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6252: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_UNDERSCORE_TIMEZONE 1
@@ -6246,19 +6270,19 @@ rm -f conftest*
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
# for constant arguments. Useless!
echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:6250: checking for working alloca.h" >&5
+echo "configure:6274: checking for working alloca.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6255 "configure"
+#line 6279 "configure"
#include "confdefs.h"
#include <alloca.h>
int main() {
char *p = alloca(2 * sizeof(int));
; return 0; }
EOF
-if { (eval echo configure:6262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_header_alloca_h=yes
else
@@ -6279,12 +6303,12 @@ EOF
fi
echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:6283: checking for alloca" >&5
+echo "configure:6307: checking for alloca" >&5
if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6288 "configure"
+#line 6312 "configure"
#include "confdefs.h"
#ifdef __GNUC__
@@ -6312,7 +6336,7 @@ int main() {
char *p = (char *) alloca(1);
; return 0; }
EOF
-if { (eval echo configure:6316: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_func_alloca_works=yes
else
@@ -6344,12 +6368,12 @@ EOF
echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:6348: checking whether alloca needs Cray hooks" >&5
+echo "configure:6372: checking whether alloca needs Cray hooks" >&5
if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6353 "configure"
+#line 6377 "configure"
#include "confdefs.h"
#if defined(CRAY) && ! defined(CRAY2)
webecray
@@ -6374,12 +6398,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
if test $ac_cv_os_cray = yes; then
for ac_func in _getb67 GETB67 getb67; do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6378: checking for $ac_func" >&5
+echo "configure:6402: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6383 "configure"
+#line 6407 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6402,7 +6426,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6430: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6429,7 +6453,7 @@ done
fi
echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:6433: checking stack direction for C alloca" >&5
+echo "configure:6457: checking stack direction for C alloca" >&5
if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6437,7 +6461,7 @@ else
ac_cv_c_stack_direction=0
else
cat > conftest.$ac_ext <<EOF
-#line 6441 "configure"
+#line 6465 "configure"
#include "confdefs.h"
find_stack_direction ()
{
@@ -6456,7 +6480,7 @@ main ()
exit (find_stack_direction() < 0);
}
EOF
-if { (eval echo configure:6460: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_c_stack_direction=1
else
@@ -6483,7 +6507,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6487: checking for $ac_word" >&5
+echo "configure:6511: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_PERL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6573,7 +6597,7 @@ fi
# Uses ac_ vars as temps to allow command line to override cache and checks.
# --without-x overrides everything else, but does not touch the cache.
echo $ac_n "checking for X""... $ac_c" 1>&6
-echo "configure:6577: checking for X" >&5
+echo "configure:6601: checking for X" >&5
# Check whether --with-x or --without-x was given.
if test "${with_x+set}" = set; then
@@ -6635,12 +6659,12 @@ if test "$ac_x_includes" = NO; then
# First, try using that file with no special directory specified.
cat > conftest.$ac_ext <<EOF
-#line 6639 "configure"
+#line 6663 "configure"
#include "confdefs.h"
#include <$x_direct_test_include>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6644: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6668: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -6709,14 +6733,14 @@ if test "$ac_x_libraries" = NO; then
ac_save_LIBS="$LIBS"
LIBS="-l$x_direct_test_library $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6713 "configure"
+#line 6737 "configure"
#include "confdefs.h"
int main() {
${x_direct_test_function}()
; return 0; }
EOF
-if { (eval echo configure:6720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6744: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
LIBS="$ac_save_LIBS"
# We can link X programs with no special library path.
@@ -6822,17 +6846,17 @@ else
case "`(uname -sr) 2>/dev/null`" in
"SunOS 5"*)
echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
-echo "configure:6826: checking whether -R must be followed by a space" >&5
+echo "configure:6850: checking whether -R must be followed by a space" >&5
ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
cat > conftest.$ac_ext <<EOF
-#line 6829 "configure"
+#line 6853 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:6836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_R_nospace=yes
else
@@ -6848,14 +6872,14 @@ rm -f conftest*
else
LIBS="$ac_xsave_LIBS -R $x_libraries"
cat > conftest.$ac_ext <<EOF
-#line 6852 "configure"
+#line 6876 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:6859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_R_space=yes
else
@@ -6887,7 +6911,7 @@ rm -f conftest*
# libraries were built with DECnet support. And karl@cs.umb.edu says
# the Alpha needs dnet_stub (dnet does not exist).
echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:6891: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:6915: checking for dnet_ntoa in -ldnet" >&5
ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6895,7 +6919,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldnet $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6899 "configure"
+#line 6923 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -6906,7 +6930,7 @@ int main() {
dnet_ntoa()
; return 0; }
EOF
-if { (eval echo configure:6910: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6928,7 +6952,7 @@ fi
if test $ac_cv_lib_dnet_dnet_ntoa = no; then
echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:6932: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:6956: checking for dnet_ntoa in -ldnet_stub" >&5
ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6936,7 +6960,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldnet_stub $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6940 "configure"
+#line 6964 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -6947,7 +6971,7 @@ int main() {
dnet_ntoa()
; return 0; }
EOF
-if { (eval echo configure:6951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6976,12 +7000,12 @@ fi
# The nsl library prevents programs from opening the X display
# on Irix 5.2, according to dickey@clark.net.
echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:6980: checking for gethostbyname" >&5
+echo "configure:7004: checking for gethostbyname" >&5
if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6985 "configure"
+#line 7009 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char gethostbyname(); below. */
@@ -7004,7 +7028,7 @@ gethostbyname();
; return 0; }
EOF
-if { (eval echo configure:7008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7032: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_gethostbyname=yes"
else
@@ -7025,7 +7049,7 @@ fi
if test $ac_cv_func_gethostbyname = no; then
echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:7029: checking for gethostbyname in -lnsl" >&5
+echo "configure:7053: checking for gethostbyname in -lnsl" >&5
ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7033,7 +7057,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lnsl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7037 "configure"
+#line 7061 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7044,7 +7068,7 @@ int main() {
gethostbyname()
; return 0; }
EOF
-if { (eval echo configure:7048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7072: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7074,12 +7098,12 @@ fi
# -lsocket must be given before -lnsl if both are needed.
# We assume that if connect needs -lnsl, so does gethostbyname.
echo $ac_n "checking for connect""... $ac_c" 1>&6
-echo "configure:7078: checking for connect" >&5
+echo "configure:7102: checking for connect" >&5
if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7083 "configure"
+#line 7107 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char connect(); below. */
@@ -7102,7 +7126,7 @@ connect();
; return 0; }
EOF
-if { (eval echo configure:7106: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_connect=yes"
else
@@ -7123,7 +7147,7 @@ fi
if test $ac_cv_func_connect = no; then
echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
-echo "configure:7127: checking for connect in -lsocket" >&5
+echo "configure:7151: checking for connect in -lsocket" >&5
ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7131,7 +7155,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7135 "configure"
+#line 7159 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7142,7 +7166,7 @@ int main() {
connect()
; return 0; }
EOF
-if { (eval echo configure:7146: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7166,12 +7190,12 @@ fi
# gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
echo $ac_n "checking for remove""... $ac_c" 1>&6
-echo "configure:7170: checking for remove" >&5
+echo "configure:7194: checking for remove" >&5
if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7175 "configure"
+#line 7199 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char remove(); below. */
@@ -7194,7 +7218,7 @@ remove();
; return 0; }
EOF
-if { (eval echo configure:7198: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_remove=yes"
else
@@ -7215,7 +7239,7 @@ fi
if test $ac_cv_func_remove = no; then
echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:7219: checking for remove in -lposix" >&5
+echo "configure:7243: checking for remove in -lposix" >&5
ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7223,7 +7247,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lposix $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7227 "configure"
+#line 7251 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7234,7 +7258,7 @@ int main() {
remove()
; return 0; }
EOF
-if { (eval echo configure:7238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7258,12 +7282,12 @@ fi
# BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:7262: checking for shmat" >&5
+echo "configure:7286: checking for shmat" >&5
if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7267 "configure"
+#line 7291 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char shmat(); below. */
@@ -7286,7 +7310,7 @@ shmat();
; return 0; }
EOF
-if { (eval echo configure:7290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_shmat=yes"
else
@@ -7307,7 +7331,7 @@ fi
if test $ac_cv_func_shmat = no; then
echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:7311: checking for shmat in -lipc" >&5
+echo "configure:7335: checking for shmat in -lipc" >&5
ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7315,7 +7339,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lipc $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7319 "configure"
+#line 7343 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7326,7 +7350,7 @@ int main() {
shmat()
; return 0; }
EOF
-if { (eval echo configure:7330: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7359,7 +7383,7 @@ fi
# libraries we check for below, so use a different variable.
# --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
-echo "configure:7363: checking for IceConnectionNumber in -lICE" >&5
+echo "configure:7387: checking for IceConnectionNumber in -lICE" >&5
ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7367,7 +7391,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lICE $X_EXTRA_LIBS $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7371 "configure"
+#line 7395 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7378,7 +7402,7 @@ int main() {
IceConnectionNumber()
; return 0; }
EOF
-if { (eval echo configure:7382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
diff --git a/libjava/configure.host b/libjava/configure.host
index 2bf4dc2cc6f..f5d1ef07cda 100644
--- a/libjava/configure.host
+++ b/libjava/configure.host
@@ -127,6 +127,11 @@ case "${host}" in
enable_hash_synchronization_default=yes
slow_pthread_self=yes
;;
+ s390*-*)
+ sysdeps_dir=s390
+ libgcj_interpreter=yes
+ enable_hash_synchronization_default=yes
+ ;;
sparc-*)
;;
ia64-*)
diff --git a/libjava/configure.in b/libjava/configure.in
index 3c57a97b4d7..e11928e70a4 100644
--- a/libjava/configure.in
+++ b/libjava/configure.in
@@ -226,6 +226,7 @@ case "$TARGET_ECOS" in
PLATFORM=Win32
PLATFORMOBJS=win32.lo
PLATFORMH=win32.h
+ CHECK_FOR_BROKEN_MINGW_LD
;;
*)
PLATFORM=Posix
@@ -444,7 +445,7 @@ AC_LINK_FILES(sysdep/$sysdeps_dir/locks.h, sysdep/locks.h)
HASH_SYNC_SPEC=
# Hash synchronization is only useful with posix threads right now.
-if test "$enable_hash_synchronization" = yes && test "$THREADS" = "posix"; then
+if test "$enable_hash_synchronization" = yes; then
HASH_SYNC_SPEC=-fhash-synchronization
AC_DEFINE(JV_HASH_SYNCHRONIZATION, 1, [Define if hash synchronization is in use])
fi
diff --git a/libjava/gcj/Makefile.in b/libjava/gcj/Makefile.in
index 9ec51a6906d..201722f80ca 100644
--- a/libjava/gcj/Makefile.in
+++ b/libjava/gcj/Makefile.in
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
diff --git a/libjava/gnu/java/rmi/dgc/DGCImpl.java b/libjava/gnu/java/rmi/dgc/DGCImpl.java
index adca54fda44..fba18c1715d 100644
--- a/libjava/gnu/java/rmi/dgc/DGCImpl.java
+++ b/libjava/gnu/java/rmi/dgc/DGCImpl.java
@@ -49,12 +49,16 @@ import gnu.java.rmi.server.UnicastServerRef;
public class DGCImpl
extends UnicastRemoteObject implements DGC {
+private static final long leaseValue = 600000L;
+
public DGCImpl() throws RemoteException {
super(new UnicastServerRef(new ObjID(ObjID.DGC_ID), 0, RMISocketFactory.getSocketFactory()));
}
public Lease dirty(ObjID[] ids, long sequenceNum, Lease lease) throws RemoteException {
- System.out.println("DGCImpl.dirty - not implemented");
+ VMID vmid = lease.getVMID();
+ lease = new Lease(vmid, leaseValue);
+ System.out.println("DGCImpl.dirty - not completely implemented");
return (lease);
}
diff --git a/libjava/gnu/java/rmi/dgc/DGCImpl_Skel.java b/libjava/gnu/java/rmi/dgc/DGCImpl_Skel.java
index fd0f2eec803..545ebc7bdea 100644
--- a/libjava/gnu/java/rmi/dgc/DGCImpl_Skel.java
+++ b/libjava/gnu/java/rmi/dgc/DGCImpl_Skel.java
@@ -1,3 +1,41 @@
+/* DGCImpl_Skel.java
+ Copyright (C) 2002 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
// Skel class generated by rmic - DO NOT EDIT!
package gnu.java.rmi.dgc;
diff --git a/libjava/gnu/java/rmi/dgc/DGCImpl_Stub.java b/libjava/gnu/java/rmi/dgc/DGCImpl_Stub.java
index e611fb227eb..bffde5280cd 100644
--- a/libjava/gnu/java/rmi/dgc/DGCImpl_Stub.java
+++ b/libjava/gnu/java/rmi/dgc/DGCImpl_Stub.java
@@ -1,3 +1,41 @@
+/* DGCImpl_Stub.java
+ Copyright (C) 2002 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
// Stub class generated by rmic - DO NOT EDIT!
package gnu.java.rmi.dgc;
diff --git a/libjava/gnu/java/rmi/registry/RegistryImpl_Skel.java b/libjava/gnu/java/rmi/registry/RegistryImpl_Skel.java
index 7ba41c389cb..de6b9e42604 100644
--- a/libjava/gnu/java/rmi/registry/RegistryImpl_Skel.java
+++ b/libjava/gnu/java/rmi/registry/RegistryImpl_Skel.java
@@ -1,3 +1,41 @@
+/* RegistryImpl_Skel.java
+ Copyright (C) 2002 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
// Skel class generated by rmic - DO NOT EDIT!
package gnu.java.rmi.registry;
diff --git a/libjava/gnu/java/rmi/registry/RegistryImpl_Stub.java b/libjava/gnu/java/rmi/registry/RegistryImpl_Stub.java
index bfa755c3fdb..33cb06a4b68 100644
--- a/libjava/gnu/java/rmi/registry/RegistryImpl_Stub.java
+++ b/libjava/gnu/java/rmi/registry/RegistryImpl_Stub.java
@@ -1,3 +1,41 @@
+/* RegistryImpl_Stub.java
+ Copyright (C) 2002 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
// Stub class generated by rmic - DO NOT EDIT!
package gnu.java.rmi.registry;
diff --git a/libjava/gnu/java/rmi/server/RMIHashes.java b/libjava/gnu/java/rmi/server/RMIHashes.java
index 993e5bf1d2b..6e32724d50a 100644
--- a/libjava/gnu/java/rmi/server/RMIHashes.java
+++ b/libjava/gnu/java/rmi/server/RMIHashes.java
@@ -39,13 +39,56 @@ package gnu.java.rmi.server;
import java.lang.reflect.Method;
import java.lang.Class;
-import gnu.java.security.provider.SHA;
+import gnu.java.io.NullOutputStream;
+import gnu.java.lang.reflect.TypeSignature;
+import java.security.MessageDigest;
+import java.security.DigestOutputStream;
+import java.io.DataOutputStream;
+import java.io.ByteArrayOutputStream;
public class RMIHashes
{
+ //There're other places using DigestOutputStream to generate hash in classpath, but I think the way I used
+ //here is more efficient, anyway, you can switch to DigestOutputStream by doing like "//or:" comments say.
+
+ //or:add this statement: private static final NullOutputStream nullOutputStream = new NullOutputStream ();
public static long getMethodHash(Method meth)
{
- return meth.hashCode ();
+ //Object Serialization Spec 8.3
+ try
+ {
+ MessageDigest md = MessageDigest.getInstance ("SHA");
+ //or:remove this statement: DigestOutputStream digest_out = new DigestOutputStream (nullOutputStream, md);
+ ByteArrayOutputStream digest_out = new ByteArrayOutputStream();
+ DataOutputStream data_out = new DataOutputStream (digest_out);
+
+ StringBuffer sbuf = new StringBuffer();
+ sbuf.append(meth.getName());
+ sbuf.append('(');
+ Class params[] = meth.getParameterTypes();
+ for(int i = 0; i < params.length; i++)
+ sbuf.append(TypeSignature.getEncodingOfClass(params[i]));
+ sbuf.append(')');
+ Class rcls = meth.getReturnType();
+ if(rcls != Void.TYPE)
+ sbuf.append(TypeSignature.getEncodingOfClass(rcls));
+ else
+ sbuf.append('V');
+
+ data_out.writeUTF (sbuf.toString());
+ data_out.flush();
+ data_out.close ();
+
+ md.update(digest_out.toByteArray()); //or:remove this statement
+ byte[] sha = md.digest ();
+ long result = 0;
+ int len = sha.length < 8 ? sha.length : 8;
+ for (int i=0; i < len; i++)
+ result += (long)(sha[i] & 0xFF) << (8 * i);
+ return result;
+ }catch(Exception _){
+ return -1L;
+ }
}
public static long getInterfaceHash(Class clazz)
@@ -53,3 +96,4 @@ public class RMIHashes
return clazz.hashCode ();
}
}
+
diff --git a/libjava/gnu/java/rmi/server/RMIObjectInputStream.java b/libjava/gnu/java/rmi/server/RMIObjectInputStream.java
index 70b6c53c304..5913e9221bf 100644
--- a/libjava/gnu/java/rmi/server/RMIObjectInputStream.java
+++ b/libjava/gnu/java/rmi/server/RMIObjectInputStream.java
@@ -44,6 +44,8 @@ import java.io.IOException;
import java.net.URL;
import java.net.MalformedURLException;
import java.rmi.server.RMIClassLoader;
+import java.lang.ClassNotFoundException;
+import java.lang.reflect.Proxy;
public class RMIObjectInputStream
extends ObjectInputStream {
@@ -56,20 +58,80 @@ public RMIObjectInputStream(InputStream strm, UnicastConnectionManager man) thro
enableResolveObject(true);
}
+public RMIObjectInputStream(InputStream strm) throws IOException {
+ this(strm, UnicastConnectionManager.getInstance(0, null));
+}
+
protected Class resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
-//System.out.println("Resolving class: " + desc.getName());
- String annotation = (String)readObject();
- if (annotation == null) {
- return (super.resolveClass(desc));
+ String annotation = (String)getAnnotation();
+ try{
+ return super.resolveClass(desc);
+ }catch(ClassNotFoundException _){};
+
+ try {
+ if(annotation == null)
+ return (RMIClassLoader.loadClass(desc.getName()));
+ else
+ return (RMIClassLoader.loadClass(annotation, desc.getName()));
}
- else {
- try {
- return (RMIClassLoader.loadClass(new URL(annotation), desc.getName()));
- }
- catch (MalformedURLException _) {
- throw new ClassNotFoundException(desc.getName());
- }
+ catch (MalformedURLException _) {
+ throw new ClassNotFoundException(desc.getName());
}
}
+//Separate it for override by MarshalledObject
+protected Object getAnnotation()
+ throws IOException, ClassNotFoundException
+{
+ return readObject();
+}
+
+protected Class resolveProxyClass(String intfs[])
+ throws IOException, ClassNotFoundException
+{
+ String annotation = (String)getAnnotation();
+ try{
+ return super.resolveProxyClass(intfs);
+ }catch(ClassNotFoundException _){};
+
+ Class clss[] = new Class[intfs.length];
+ if(annotation == null)
+ clss[0] = RMIClassLoader.loadClass(intfs[0]);
+ else
+ clss[0] = RMIClassLoader.loadClass(annotation, intfs[0]);
+ //assume all interfaces can be loaded by the same classloader
+ ClassLoader loader = clss[0].getClassLoader();
+ if(loader == null)
+ for(int i = 1; i < intfs.length; i++)
+ clss[i] = Class.forName(intfs[i]);
+ else
+ for(int i = 1; i < intfs.length; i++)
+ clss[i] = loader.loadClass(intfs[i]);
+ return Proxy.getProxyClass(loader, clss);
+}
+
+protected Object readValue(Class valueClass) throws IOException, ClassNotFoundException {
+ if(valueClass.isPrimitive()){
+ if(valueClass == Boolean.TYPE)
+ return new Boolean(readBoolean());
+ if(valueClass == Byte.TYPE)
+ return new Byte(readByte());
+ if(valueClass == Character.TYPE)
+ return new Character(readChar());
+ if(valueClass == Short.TYPE)
+ return new Short(readShort());
+ if(valueClass == Integer.TYPE)
+ return new Integer(readInt());
+ if(valueClass == Long.TYPE)
+ return new Long(readLong());
+ if(valueClass == Float.TYPE)
+ return new Float(readFloat());
+ if(valueClass == Double.TYPE)
+ return new Double(readDouble());
+ else
+ throw new Error("Unsupported primitive class: " + valueClass);
+ } else
+ return readObject();
}
+
+} \ No newline at end of file
diff --git a/libjava/gnu/java/rmi/server/RMIObjectOutputStream.java b/libjava/gnu/java/rmi/server/RMIObjectOutputStream.java
index d729047b487..71a2bac9ded 100644
--- a/libjava/gnu/java/rmi/server/RMIObjectOutputStream.java
+++ b/libjava/gnu/java/rmi/server/RMIObjectOutputStream.java
@@ -41,17 +41,74 @@ import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.rmi.server.RMIClassLoader;
+import java.rmi.Remote;
+import java.rmi.server.RemoteStub;
+import java.rmi.server.ObjID;
public class RMIObjectOutputStream
extends ObjectOutputStream {
public RMIObjectOutputStream(OutputStream strm) throws IOException {
super(strm);
+ enableReplaceObject(true);
+}
+
+//Separate it for override by MarshalledObject
+protected void setAnnotation(String annotation) throws IOException{
+ writeObject(annotation);
}
protected void annotateClass(Class cls) throws IOException {
-//System.out.println("Annotating class: " + cls);
- writeObject(RMIClassLoader.getClassAnnotation(cls));
+ setAnnotation(RMIClassLoader.getClassAnnotation(cls));
+}
+
+protected void annotateProxyClass(Class cls)
+ throws IOException
+{
+ annotateClass(cls);
+}
+
+protected Object replaceObject(Object obj)
+ throws IOException
+{
+ if((obj instanceof Remote) && !(obj instanceof RemoteStub)){
+ UnicastServerRef ref = new UnicastServerRef(new ObjID(), 0, null);
+ try{
+ return ref.exportObject((Remote)obj);
+ }catch(Exception e){}
+ }
+ return obj;
+}
+
+protected void writeValue(Object value, Class valueClass) throws IOException{
+ if(valueClass.isPrimitive()){
+ if(valueClass == Boolean.TYPE)
+ writeBoolean(((Boolean)value).booleanValue());
+ else
+ if(valueClass == Byte.TYPE)
+ writeByte(((Byte)value).byteValue());
+ else
+ if(valueClass == Character.TYPE)
+ writeChar(((Character)value).charValue());
+ else
+ if(valueClass == Short.TYPE)
+ writeShort(((Short)value).shortValue());
+ else
+ if(valueClass == Integer.TYPE)
+ writeInt(((Integer)value).intValue());
+ else
+ if(valueClass == Long.TYPE)
+ writeLong(((Long)value).longValue());
+ else
+ if(valueClass == Float.TYPE)
+ writeFloat(((Float)value).floatValue());
+ else
+ if(valueClass == Double.TYPE)
+ writeDouble(((Double)value).doubleValue());
+ else
+ throw new Error("Unsupported primitive class: " + valueClass);
+ } else
+ writeObject(value);
}
}
diff --git a/libjava/gnu/java/rmi/server/UnicastConnection.java b/libjava/gnu/java/rmi/server/UnicastConnection.java
index a8951656024..e13bb686229 100644
--- a/libjava/gnu/java/rmi/server/UnicastConnection.java
+++ b/libjava/gnu/java/rmi/server/UnicastConnection.java
@@ -44,6 +44,8 @@ import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
import java.io.ObjectOutput;
import java.io.ObjectInput;
import java.io.IOException;
@@ -65,9 +67,10 @@ UnicastConnection(UnicastConnectionManager man, Socket sock) {
}
void acceptConnection() throws IOException {
-//System.out.println("Accepting connection on " + lport);
- din = new DataInputStream(sock.getInputStream());
- dout = new DataOutputStream(sock.getOutputStream());
+//System.out.println("Accepting connection on " + sock);
+ //Use BufferedXXXStream would be more efficient
+ din = new DataInputStream(new BufferedInputStream(sock.getInputStream()));
+ dout = new DataOutputStream(new BufferedOutputStream(sock.getOutputStream()));
int sig = din.readInt();
if (sig != PROTOCOL_HEADER) {
@@ -85,6 +88,7 @@ void acceptConnection() throws IOException {
// Send my hostname and port
dout.writeUTF(manager.serverName);
dout.writeInt(manager.serverPort);
+ dout.flush();
// Read their hostname and port
String rhost = din.readUTF();
@@ -94,15 +98,16 @@ void acceptConnection() throws IOException {
}
void makeConnection(int protocol) throws IOException {
- dout = new DataOutputStream(sock.getOutputStream());
- din = new DataInputStream(sock.getInputStream());
+ //Use BufferedXXXStream would be more efficient
+ din = new DataInputStream(new BufferedInputStream(sock.getInputStream()));
+ dout = new DataOutputStream(new BufferedOutputStream(sock.getOutputStream()));
// Send header
dout.writeInt(PROTOCOL_HEADER);
dout.writeShort(PROTOCOL_VERSION);
dout.writeByte(protocol);
- dout.flush();
-
+ dout.flush();
+
if (protocol != SINGLE_OP_PROTOCOL) {
// Get back ack.
int ack = din.readUnsignedByte();
@@ -117,6 +122,7 @@ void makeConnection(int protocol) throws IOException {
// Send them my endpoint
dout.writeUTF(manager.serverName);
dout.writeInt(manager.serverPort);
+ dout.flush();
}
// Okay, ready to roll ...
}
@@ -144,13 +150,15 @@ ObjectOutputStream getObjectOutputStream() throws IOException {
}
void disconnect() {
- oin = null;
- oout = null;
try {
- sock.close();
+ if(oout != null)
+ oout.close();
}
catch (IOException _) {
- }
+ }
+
+ oin = null;
+ oout = null;
din = null;
dout = null;
sock = null;
diff --git a/libjava/gnu/java/rmi/server/UnicastConnectionManager.java b/libjava/gnu/java/rmi/server/UnicastConnectionManager.java
index fe08ad0814d..64fecdce2a0 100644
--- a/libjava/gnu/java/rmi/server/UnicastConnectionManager.java
+++ b/libjava/gnu/java/rmi/server/UnicastConnectionManager.java
@@ -57,9 +57,12 @@ public class UnicastConnectionManager
implements Runnable, ProtocolConstants {
private static String localhost;
+// use different maps for server/client type UnicastConnectionManager
private static Hashtable servers = new Hashtable();
+private static Hashtable clients = new Hashtable();
-private Thread serverThread;
+// make serverThread volatile for poll
+private volatile Thread serverThread;
private ServerSocket ssock;
String serverName;
int serverPort;
@@ -68,7 +71,9 @@ private RMIClientSocketFactory clientFactory;
static {
try {
- localhost = InetAddress.getLocalHost().getHostName();
+ //Use host address instead of host name to avoid name resolving issues
+ //localhost = InetAddress.getLocalHost().getHostName();
+ localhost = InetAddress.getLocalHost().getHostAddress();
}
catch (UnknownHostException _) {
localhost = "localhost";
@@ -112,11 +117,16 @@ public static synchronized UnicastConnectionManager getInstance(String host, int
if (csf == null) {
csf = RMISocketFactory.getSocketFactory();
}
+ // change host name to host address to avoid name resolving issues
+ try{
+ host = InetAddress.getByName(host).getHostAddress();
+ }catch(Exception _){}
+
TripleKey key = new TripleKey(host, port, csf);
- UnicastConnectionManager man = (UnicastConnectionManager)servers.get(key);
+ UnicastConnectionManager man = (UnicastConnectionManager)clients.get(key);
if (man == null) {
man = new UnicastConnectionManager(host, port, csf);
- servers.put(key, man);
+ clients.put(key, man);
}
return (man);
}
@@ -199,17 +209,33 @@ public void startServer() {
}
/**
+ * Stop a server on this manager
+ */
+public void stopServer() {
+ synchronized(this) {
+ if(serverThread != null){
+ serverThread = null;
+ try{
+ ssock.close();
+ }catch(Exception _){}
+ }
+ }
+}
+
+/**
* Server thread for connection manager.
*/
public void run() {
- for (;;) {
+ for (;serverThread != null;) { // if serverThread==null, then exit thread
try {
//System.out.println("Waiting for connection on " + serverPort);
UnicastConnection conn = getServerConnection();
- (new Thread(conn)).start();
+ // use a thread pool to improve performance
+ // (new Thread(conn)).start();
+ ConnectionRunnerPool.dispatchConnection(conn);
}
catch (Exception e) {
- e.printStackTrace();
+ // e.printStackTrace();
}
}
}
diff --git a/libjava/gnu/java/rmi/server/UnicastRef.java b/libjava/gnu/java/rmi/server/UnicastRef.java
index 1c5bf577ed9..d6cda49c600 100644
--- a/libjava/gnu/java/rmi/server/UnicastRef.java
+++ b/libjava/gnu/java/rmi/server/UnicastRef.java
@@ -107,6 +107,7 @@ private Object invokeCommon(Remote obj, Method method, Object[] params, int opnu
objid.write(out);
out.writeInt(opnum);
out.writeLong(hash);
+ /*
if (params != null) {
for (int i = 0; i < params.length; i++) {
if (params[i] instanceof UnicastRemoteObject) {
@@ -117,6 +118,11 @@ private Object invokeCommon(Remote obj, Method method, Object[] params, int opnu
}
}
}
+ */
+ // must handle primitive class and their wrapper classes
+ Class clss[] = method.getParameterTypes();
+ for(int i = 0; i < clss.length; i++)
+ ((RMIObjectOutputStream)out).writeValue(params[i], clss[i]);
out.flush();
}
@@ -139,12 +145,25 @@ private Object invokeCommon(Remote obj, Method method, Object[] params, int opnu
returncode = in.readUnsignedByte();
ack = UID.read(in);
- returnval = in.readObject();
+ //returnval = in.readObject();
+ Class cls = method.getReturnType();
+ if(cls == Void.TYPE){
+ returnval = null;
+ }else
+ returnval = ((RMIObjectInputStream)in).readValue(cls);
}
catch (IOException e3) {
throw new RemoteException("call return failed: ", e3);
}
+ /* if DGCAck is necessary
+ //According to RMI wire protocol, send a DGCAck
+ // to indicate receiving return value
+ dout.writeByte(MESSAGE_DGCACK);
+ ack.write(dout);
+ out.flush();
+ */
+
manager.discardConnection(conn);
if (returncode != RETURN_ACK) {
@@ -183,13 +202,16 @@ public void writeExternal(ObjectOutput out) throws IOException {
}
manager.write(out);
objid.write(out);
- out.writeByte(RETURN_ACK);
+ // This byte is somewhat confusing when interoperating with JDK
+ out.writeByte(0); //RETURN_ACK);
}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
manager = UnicastConnectionManager.read(in);
objid = ObjID.read(in);
- if (in.readByte() != RETURN_ACK) {
+ byte ack = in.readByte();
+ // This byte is somewhat confusing when interoperating with JDK
+ if (ack != RETURN_ACK && ack != 0/*jdk ack value*/) {
throw new IOException("no ack found");
}
}
diff --git a/libjava/gnu/java/rmi/server/UnicastServer.java b/libjava/gnu/java/rmi/server/UnicastServer.java
index d9f5fb71527..15c622f48bc 100644
--- a/libjava/gnu/java/rmi/server/UnicastServer.java
+++ b/libjava/gnu/java/rmi/server/UnicastServer.java
@@ -65,6 +65,13 @@ public static void exportObject(UnicastServerRef obj) {
obj.manager.startServer();
}
+// FIX ME: I haven't handle force parameter
+public static boolean unexportObject(UnicastServerRef obj, boolean force) {
+ objects.remove(obj.objid);
+ obj.manager.stopServer();
+ return true;
+}
+
private static synchronized void startDGC() {
if (dgc == null) {
try {
@@ -100,10 +107,14 @@ private static void incomingMessageCall(UnicastConnection conn) throws IOExcepti
UnicastServerRef uref = (UnicastServerRef)objects.get(objid);
Object returnval;
int returncode = RETURN_ACK;
+ // returnval is from Method.invoke(), so we must check the return class to see
+ // if it's primitive type
+ Class returncls = null;
if (uref != null) {
try {
// Dispatch the call to it.
returnval = uref.incomingMessageCall(conn, method, hash);
+ returncls = uref.getMethodReturnType(method, hash);
}
catch (Exception e) {
returnval = e;
@@ -121,7 +132,10 @@ private static void incomingMessageCall(UnicastConnection conn) throws IOExcepti
out.writeByte(returncode);
(new UID()).write(out);
- out.writeObject(returnval);
+ if(returnval != null && returncls != null)
+ ((RMIObjectOutputStream)out).writeValue(returnval, returncls);
+ else
+ out.writeObject(returnval);
out.flush();
}
diff --git a/libjava/gnu/java/rmi/server/UnicastServerRef.java b/libjava/gnu/java/rmi/server/UnicastServerRef.java
index b145089e600..196f969d292 100644
--- a/libjava/gnu/java/rmi/server/UnicastServerRef.java
+++ b/libjava/gnu/java/rmi/server/UnicastServerRef.java
@@ -66,14 +66,15 @@ import java.io.ObjectOutputStream;
import java.util.Hashtable;
public class UnicastServerRef
- extends UnicastRef {
+ extends UnicastRef
+ implements ServerRef{ //SHOULD implement ServerRef
final static private Class[] stubprototype = new Class[] { RemoteRef.class };
Remote myself;
private Skeleton skel;
private RemoteStub stub;
-private Hashtable methods;
+private Hashtable methods = new Hashtable();
public UnicastServerRef(ObjID id, int port, RMIServerSocketFactory ssf) {
super(id);
@@ -95,7 +96,7 @@ public RemoteStub exportObject(Remote obj) throws RemoteException {
skel = (Skeleton)getHelperClass(cls, "_Skel");
// Build hash of methods which may be called.
- buildMethodHash(obj.getClass());
+ buildMethodHash(obj.getClass(), true);
// Export it.
UnicastServer.exportObject(this);
@@ -104,10 +105,25 @@ public RemoteStub exportObject(Remote obj) throws RemoteException {
return (stub);
}
+public RemoteStub exportObject(Remote remote, Object obj)
+ throws RemoteException
+{
+ //FIX ME
+ return exportObject(remote);
+}
+
+
+public boolean unexportObject(Remote obj, boolean force) throws RemoteException {
+ // Remove all hashes of methods which may be called.
+ buildMethodHash(obj.getClass(), false);
+ return UnicastServer.unexportObject(this, force);
+}
+
private Object getHelperClass(Class cls, String type) {
try {
- String classname = cls.getName();
- Class scls = Class.forName(classname + type);
+ String classname = cls.getName();
+ ClassLoader cl = cls.getClassLoader(); //DONT use "Class scls = Class.forName(classname + type);"
+ Class scls = cl.loadClass(classname + type);
if (type.equals("_Stub")) {
try {
// JDK 1.2 stubs
@@ -147,8 +163,7 @@ public String getClientHost() throws ServerNotActiveException {
throw new Error("Not implemented");
}
-private void buildMethodHash(Class cls) {
- methods = new Hashtable();
+private void buildMethodHash(Class cls, boolean build) {
Method[] meths = cls.getMethods();
for (int i = 0; i < meths.length; i++) {
/* Don't need to include any java.xxx related stuff */
@@ -156,11 +171,23 @@ private void buildMethodHash(Class cls) {
continue;
}
long hash = RMIHashes.getMethodHash(meths[i]);
- methods.put(new Long (hash), meths[i]);
+ if(build)
+ methods.put(new Long (hash), meths[i]);
+ else
+ methods.remove(new Long (hash));
//System.out.println("meth = " + meths[i] + ", hash = " + hash);
}
}
+Class getMethodReturnType(int method, long hash) throws Exception
+{
+ if (method == -1) {
+ Method meth = (Method)methods.get(new Long (hash));
+ return meth.getReturnType();
+ }else
+ return null;
+}
+
public Object incomingMessageCall(UnicastConnection conn, int method, long hash) throws Exception {
//System.out.println("method = " + method + ", hash = " + hash);
// If method is -1 then this is JDK 1.2 RMI - so use the hash
@@ -189,7 +216,15 @@ public Object incomingMessageCall(UnicastConnection conn, int method, long hash)
throw t;
}
}
- return (meth.invoke(myself, args));
+ //We must reinterpret the exception thrown by meth.invoke()
+ //return (meth.invoke(myself, args));
+ Object ret = null;
+ try{
+ ret = meth.invoke(myself, args);
+ }catch(InvocationTargetException e){
+ throw (Exception)(e.getTargetException());
+ }
+ return ret;
}
// Otherwise this is JDK 1.1 style RMI - we find the skeleton
// and invoke it using the method number. We wrap up our
diff --git a/libjava/include/Makefile.in b/libjava/include/Makefile.in
index ebcd4250ab0..1deb2b46dc3 100644
--- a/libjava/include/Makefile.in
+++ b/libjava/include/Makefile.in
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
diff --git a/libjava/include/config.h.in b/libjava/include/config.h.in
index 612a2bfe30d..cd770f93ac6 100644
--- a/libjava/include/config.h.in
+++ b/libjava/include/config.h.in
@@ -1,4 +1,4 @@
-/* include/config.h.in. Generated automatically from configure.in by autoheader. */
+/* include/config.h.in. Generated automatically from configure.in by autoheader 2.13. */
/* Define if using alloca.c. */
#undef C_ALLOCA
@@ -343,12 +343,12 @@
/* Define if you have the <locale.h> header file. */
#undef HAVE_LOCALE_H
-/* Define if you have the <netdb.h> header file. */
-#undef HAVE_NETDB_H
-
/* Define if you have the <net/if.h> header file. */
#undef HAVE_NET_IF_H
+/* Define if you have the <netdb.h> header file. */
+#undef HAVE_NETDB_H
+
/* Define if you have the <netinet/in.h> header file. */
#undef HAVE_NETINET_IN_H
@@ -394,6 +394,9 @@
/* Define if the compiler is configured for setjmp/longjmp exceptions. */
#undef SJLJ_EXCEPTIONS
+/* Indicate that linker is not able to 8-byte align static data */
+#undef JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS
+
/* Required define if using POSIX threads */
#undef _REENTRANT
diff --git a/libjava/include/win32-threads.h b/libjava/include/win32-threads.h
index 21fdd0e7aa1..e8cf80598c2 100644
--- a/libjava/include/win32-threads.h
+++ b/libjava/include/win32-threads.h
@@ -33,6 +33,14 @@ typedef struct
java::lang::Thread *thread_obj;
} _Jv_Thread_t;
+typedef DWORD _Jv_ThreadId_t;
+
+inline _Jv_ThreadId_t
+_Jv_ThreadSelf (void)
+{
+ return GetCurrentThreadId();
+}
+
typedef void _Jv_ThreadStartFunc (java::lang::Thread *);
//
diff --git a/libjava/interpret.cc b/libjava/interpret.cc
index d231387dc9a..d3f919bac13 100644
--- a/libjava/interpret.cc
+++ b/libjava/interpret.cc
@@ -1883,7 +1883,7 @@ _Jv_InterpMethod::run (void *retp, ffi_raw *args)
insn_iushr:
{
jint shift = (POPI() & 0x1f);
- unsigned long value = POPI();
+ UINT32 value = (UINT32) POPI();
PUSHI ((jint) (value >> shift));
}
NEXT_INSN;
diff --git a/libjava/java/awt/dnd/DragSourceAdapter.java b/libjava/java/awt/dnd/DragSourceAdapter.java
index 55daf41b257..2b2e15541fd 100644
--- a/libjava/java/awt/dnd/DragSourceAdapter.java
+++ b/libjava/java/awt/dnd/DragSourceAdapter.java
@@ -108,7 +108,7 @@ public abstract class DragSourceAdapter
*
* @param e the event
*/
- public void dragExit(DragSourceDragEvent e)
+ public void dragExit(DragSourceEvent e)
{
}
@@ -120,7 +120,7 @@ public abstract class DragSourceAdapter
*
* @param e the event
*/
- public void dragDropEnd(DragSourceDragEvent e)
+ public void dragDropEnd(DragSourceDropEvent e)
{
}
} // class DragSourceAdapter
diff --git a/libjava/java/awt/dnd/DropTarget.java b/libjava/java/awt/dnd/DropTarget.java
index 9ae423438ec..9d8174500c5 100644
--- a/libjava/java/awt/dnd/DropTarget.java
+++ b/libjava/java/awt/dnd/DropTarget.java
@@ -36,5 +36,183 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package java.awt.dnd;
-/** STUB CLASS ONLY */
-public class DropTarget {}
+
+import java.awt.Point;
+import java.awt.Component;
+import java.awt.datatransfer.FlavorMap;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.TooManyListenersException;
+
+public class DropTarget
+{
+ protected static class DropTargetAutoScroller
+ implements ActionListener
+ {
+ protected DropTargetAutoScroller (Component c, Point p)
+ {
+ }
+
+ protected void updateLocation (Point newLocn)
+ {
+ }
+
+ protected void stop ()
+ {
+ }
+
+ public void actionPerformed (ActionEvent e)
+ {
+ }
+ }
+
+ /**
+ * FIXME
+ *
+ * @exception HeadlessException FIXME
+ */
+ public DropTarget ()
+ {
+ }
+
+ /**
+ * FIXME
+ *
+ * @exception HeadlessException FIXME
+ */
+ public DropTarget (Component c, DropTargetListener dtl)
+ {
+ }
+
+ /**
+ * FIXME
+ *
+ * @exception HeadlessException FIXME
+ */
+ public DropTarget (Component c, int i, DropTargetListener dtl)
+ {
+ }
+
+ /**
+ * FIXME
+ *
+ * @exception HeadlessException FIXME
+ */
+ public DropTarget (Component c, int i, DropTargetListener dtl, boolean b)
+ {
+ }
+
+ /**
+ * FIXME
+ *
+ * @exception HeadlessException FIXME
+ */
+ public DropTarget (Component c, int i, DropTargetListener dtl, boolean b,
+ FlavorMap fm)
+ {
+ }
+
+ public void setComponent (Component c)
+ {
+ }
+
+ public Component getComponent ()
+ {
+ return null;
+ }
+
+ public void setDefaultActions (int ops)
+ {
+ }
+
+ public int getDefaultActions ()
+ {
+ return 0;
+ }
+
+ public void setActive(boolean isActive)
+ {
+ }
+
+ public boolean isActive()
+ {
+ return false;
+ }
+
+ /**
+ * @exception TooManyListenersException FIXME
+ */
+ public void addDropTargetListener (DropTargetListener dtl)
+ throws TooManyListenersException
+ {
+ }
+
+ public void removeDropTargetListener(DropTargetListener dtl)
+ {
+ }
+
+ public void dragEnter(DropTargetDragEvent dtde)
+ {
+ }
+
+ public void dragOver(DropTargetDragEvent dtde)
+ {
+ }
+
+ public void dropActionChanged(DropTargetDragEvent dtde)
+ {
+ }
+
+ public void dragExit(DropTargetEvent dte)
+ {
+ }
+
+ public void drop(DropTargetDropEvent dtde)
+ {
+ }
+
+ public FlavorMap getFlavorMap()
+ {
+ return null;
+ }
+
+ public void setFlavorMap(FlavorMap fm)
+ {
+ }
+
+ public void addNotify(java.awt.peer.ComponentPeer peer)
+ {
+ }
+
+ public void removeNotify(java.awt.peer.ComponentPeer peer)
+ {
+ }
+
+ public DropTargetContext getDropTargetContext()
+ {
+ return null;
+ }
+
+ protected DropTargetContext createDropTargetContext()
+ {
+ return null;
+ }
+
+ protected DropTarget.DropTargetAutoScroller createDropTargetAutoScroller
+ (Component c, Point p)
+ {
+ return null;
+ }
+
+ protected void initializeAutoscrolling(Point p)
+ {
+ }
+
+ protected void updateAutoscroll(Point dragCursorLocn)
+ {
+ }
+
+ protected void clearAutoscroll()
+ {
+ }
+} // class DropTarget
diff --git a/libjava/java/beans/beancontext/BeanContextChildSupport.java b/libjava/java/beans/beancontext/BeanContextChildSupport.java
index 84373acf5fb..270854b2576 100644
--- a/libjava/java/beans/beancontext/BeanContextChildSupport.java
+++ b/libjava/java/beans/beancontext/BeanContextChildSupport.java
@@ -60,7 +60,11 @@ import java.io.Serializable;
* @see java.beans.beancontext.BeanContextChild
*/
-public class BeanContextChildSupport implements BeanContextChild, BeanContextServicesListener, Serializable {
+public class BeanContextChildSupport
+ implements BeanContextChild, BeanContextServicesListener, Serializable
+{
+ static final long serialVersionUID = 6328947014421475877L;
+
/**
* The peer on which to perform <code>set</code> actions.
* This is here so that this class can be used as a peer.
diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java
index e1e16f28498..08ce401fad8 100644
--- a/libjava/java/io/ObjectInputStream.java
+++ b/libjava/java/io/ObjectInputStream.java
@@ -1,5 +1,5 @@
/* ObjectInputStream.java -- Class used to read serialized objects
- Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,6 +42,7 @@ import gnu.classpath.Configuration;
import java.lang.reflect.Array;
import java.lang.reflect.Modifier;
+import java.lang.reflect.Proxy;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.Vector;
@@ -527,6 +528,32 @@ public class ObjectInputStream extends InputStream
}
+ protected Class resolveProxyClass (String[] intfs)
+ throws IOException, ClassNotFoundException
+ {
+ SecurityManager sm = System.getSecurityManager ();
+
+ if (sm == null)
+ sm = new SecurityManager () {};
+
+ ClassLoader cl = currentClassLoader (sm);
+
+ Class[] clss = new Class[intfs.length];
+ if(cl == null){
+ for (int i = 0; i < intfs.length; i++)
+ clss[i] = Class.forName(intfs[i]);
+ cl = ClassLoader.getSystemClassLoader();
+ }
+ else
+ for (int i = 0; i < intfs.length; i++)
+ clss[i] = cl.loadClass(intfs[i]);
+ try {
+ return Proxy.getProxyClass(cl, clss);
+ } catch (IllegalArgumentException e) {
+ throw new ClassNotFoundException(null, e);
+ }
+ }
+
/**
If <code>enable</code> is <code>true</code> and this object is
trusted, then <code>resolveObject (Object)</code> will be called
diff --git a/libjava/java/lang/Thread.java b/libjava/java/lang/Thread.java
index 64d58dda080..18af8292126 100644
--- a/libjava/java/lang/Thread.java
+++ b/libjava/java/lang/Thread.java
@@ -137,7 +137,7 @@ public class Thread implements Runnable
public final void setDaemon (boolean status)
{
checkAccess ();
- if (isAlive ())
+ if (!startable_flag)
throw new IllegalThreadStateException ();
daemon_flag = status;
}
diff --git a/libjava/java/lang/Throwable.java b/libjava/java/lang/Throwable.java
index 613f43ffe9b..62db8fd0d2d 100644
--- a/libjava/java/lang/Throwable.java
+++ b/libjava/java/lang/Throwable.java
@@ -1,5 +1,4 @@
-/* java.lang.Throwable -- Reference implementation of root class for
- all Exceptions and Errors
+/* java.lang.Throwable -- Root class for all Exceptions and Errors
Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,12 +45,6 @@ import java.io.ObjectInputStream;
import java.io.IOException;
import java.io.OutputStream;
-/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
- * "The Java Language Specification", ISBN 0-201-63451-1
- * Status: Sufficient for compiled code, but methods applicable to
- * bytecode not implemented. JDK 1.1.
- */
-
/**
* Throwable is the superclass of all exceptions that can be raised.
*
@@ -166,7 +159,7 @@ public class Throwable implements Serializable
public Throwable(String message)
{
fillInStackTrace();
- detailMessage = message;
+ detailMessage = message;
}
/**
@@ -373,7 +366,7 @@ public class Throwable implements Serializable
}
/**
- * <p>Prints the exception, the detailed message and the stack trace
+ * Prints the exception, the detailed message and the stack trace
* associated with this Throwable to the given <code>PrintWriter</code>.
* The actual output written is implemention specific. Use the result of
* <code>getStackTrace()</code> when more precise information is needed.
@@ -533,7 +526,7 @@ public class Throwable implements Serializable
* serialization according to the context of the remote call.
* <p>
* The contents of the given stacktrace is copied so changes to the
- * original * array do not change the stack trace elements of this
+ * original array do not change the stack trace elements of this
* throwable.
*
* @param stackTrace the new trace to use
@@ -546,10 +539,11 @@ public class Throwable implements Serializable
StackTraceElement[] st = new StackTraceElement[i];
while (--i >= 0)
- if (stackTrace[i] == null)
- throw new NullPointerException();
- else
+ {
st[i] = stackTrace[i];
+ if (st[i] == null)
+ throw new NullPointerException("Element " + i + " null");
+ }
this.stackTrace = st;
}
diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc
index c229943ecc5..8bff16997b9 100644
--- a/libjava/java/lang/natClassLoader.cc
+++ b/libjava/java/lang/natClassLoader.cc
@@ -204,7 +204,14 @@ gnu::gcj::runtime::VMClassLoader::findClass (jstring name)
// by `lib-gnu-pkg.so' and `lib-gnu.so'. If loading one of
// these causes the class to appear in the cache, then use it.
java::lang::StringBuffer *sb = new java::lang::StringBuffer (JvNewStringLatin1("lib-"));
- jstring so_base_name = (sb->append (name)->toString ())->replace ('.', '-');
+ // Skip inner classes
+ jstring cn;
+ jint ci = name->indexOf('$');
+ if (ci == -1)
+ cn = name;
+ else
+ cn = name->substring (0, ci);
+ jstring so_base_name = (sb->append (cn)->toString ())->replace ('.', '-');
// Compare against `3' because that is the length of "lib".
while (! klass && so_base_name && so_base_name->length() > 3)
diff --git a/libjava/java/lang/natObject.cc b/libjava/java/lang/natObject.cc
index 4cf26bf751c..4c2fd6cab03 100644
--- a/libjava/java/lang/natObject.cc
+++ b/libjava/java/lang/natObject.cc
@@ -305,9 +305,9 @@ _Jv_MonitorExit (jobject obj)
#include <assert.h>
#include <limits.h>
#include <unistd.h> // for usleep, sysconf.
-#include <sched.h> // for sched_yield.
#include <gcj/javaprims.h>
#include <sysdep/locks.h>
+#include <java/lang/Thread.h>
// Try to determine whether we are on a multiprocessor, i.e. whether
// spinning may be profitable.
@@ -525,14 +525,14 @@ spin(unsigned n)
}
else if (n < yield_limit)
{
- sched_yield();
+ _Jv_ThreadYield();
}
else
{
unsigned duration = MIN_SLEEP_USECS << (n - yield_limit);
if (n >= 15 + yield_limit || duration > MAX_SLEEP_USECS)
- duration = MAX_SLEEP_USECS;
- usleep(duration);
+ duration = MAX_SLEEP_USECS;
+ java::lang::Thread::sleep(0, duration);
}
}
@@ -574,7 +574,15 @@ static void
heavy_lock_obj_finalization_proc (void *obj, void *cd)
{
heavy_lock *hl = (heavy_lock *)cd;
+
+// This only addresses misalignment of statics, not heap objects. It
+// works only because registering statics for finalization is a noop,
+// no matter what the least significant bits are.
+#ifdef JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS
+ obj_addr_t addr = (obj_addr_t)obj & ~((obj_addr_t)0x7);
+#else
obj_addr_t addr = (obj_addr_t)obj;
+#endif
hash_entry *he = light_locks + JV_SYNC_HASH(addr);
obj_addr_t he_address = (he -> address & ~LOCKED);
@@ -753,7 +761,11 @@ get_heavy(obj_addr_t addr, hash_entry *he)
void
_Jv_MonitorEnter (jobject obj)
{
+#ifdef JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS
+ obj_addr_t addr = (obj_addr_t)obj & ~((obj_addr_t)FLAGS);
+#else
obj_addr_t addr = (obj_addr_t)obj;
+#endif
obj_addr_t address;
unsigned hash = JV_SYNC_HASH(addr);
hash_entry * he = light_locks + hash;
@@ -898,7 +910,11 @@ retry:
void
_Jv_MonitorExit (jobject obj)
{
+#ifdef JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS
+ obj_addr_t addr = (obj_addr_t)obj & ~((obj_addr_t)FLAGS);
+#else
obj_addr_t addr = (obj_addr_t)obj;
+#endif
_Jv_ThreadId_t self = _Jv_ThreadSelf();
unsigned hash = JV_SYNC_HASH(addr);
hash_entry * he = light_locks + hash;
@@ -1078,7 +1094,11 @@ retry:
void
java::lang::Object::wait (jlong timeout, jint nanos)
{
+#ifdef JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS
+ obj_addr_t addr = (obj_addr_t)this & ~((obj_addr_t)FLAGS);
+#else
obj_addr_t addr = (obj_addr_t)this;
+#endif
_Jv_ThreadId_t self = _Jv_ThreadSelf();
unsigned hash = JV_SYNC_HASH(addr);
hash_entry * he = light_locks + hash;
@@ -1155,7 +1175,11 @@ retry:
void
java::lang::Object::notify (void)
{
+#ifdef JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS
+ obj_addr_t addr = (obj_addr_t)this & ~((obj_addr_t)FLAGS);
+#else
obj_addr_t addr = (obj_addr_t)this;
+#endif
_Jv_ThreadId_t self = _Jv_ThreadSelf();
unsigned hash = JV_SYNC_HASH(addr);
hash_entry * he = light_locks + hash;
@@ -1200,7 +1224,11 @@ retry:
void
java::lang::Object::notifyAll (void)
{
+#ifdef JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS
+ obj_addr_t addr = (obj_addr_t)this & ~((obj_addr_t)FLAGS);
+#else
obj_addr_t addr = (obj_addr_t)this;
+#endif
_Jv_ThreadId_t self = _Jv_ThreadSelf();
unsigned hash = JV_SYNC_HASH(addr);
hash_entry * he = light_locks + hash;
diff --git a/libjava/java/lang/natRuntime.cc b/libjava/java/lang/natRuntime.cc
index 18ec2321475..d0a64e7bb1d 100644
--- a/libjava/java/lang/natRuntime.cc
+++ b/libjava/java/lang/natRuntime.cc
@@ -533,6 +533,9 @@ java::lang::Runtime::insertSystemProperties (java::util::Properties *newprops)
sb->toString ());
}
+ // The name used to invoke this process (argv[0] in C).
+ SET ("gnu.gcj.progname", _Jv_ThisExecutable());
+
// Allow platform specific settings and overrides.
_Jv_platform_initProperties (newprops);
}
diff --git a/libjava/java/net/DatagramPacket.java b/libjava/java/net/DatagramPacket.java
index 7fbb3f8da35..7ca6c51a22b 100644
--- a/libjava/java/net/DatagramPacket.java
+++ b/libjava/java/net/DatagramPacket.java
@@ -402,9 +402,9 @@ public final class DatagramPacket
/**
* Sets the length of the data in the buffer.
*
- * @param length The new length. (Where len <= buf.length)
+ * @param length The new length. (Where len &lt;= buf.length)
*
- * @exception IllegalArgumentException f the length is negative or
+ * @exception IllegalArgumentException If the length is negative or
* if the length is greater than the packet's data buffer length
*
* @since 1.1
diff --git a/libjava/java/net/DatagramSocket.java b/libjava/java/net/DatagramSocket.java
index dfbce3bcf7d..b2f2ca11ce3 100644
--- a/libjava/java/net/DatagramSocket.java
+++ b/libjava/java/net/DatagramSocket.java
@@ -290,20 +290,26 @@ public class DatagramSocket
* exception will be thrown
* @exception IllegalBlockingModeException If this socket has an associated
* channel, and the channel is in non-blocking mode
+ * @exception SecurityException If a security manager exists and its
+ * checkAccept ethod doesn't allow the receive
*/
public synchronized void receive(DatagramPacket p) throws IOException
{
- SecurityManager s = System.getSecurityManager();
- if (s != null)
- s.checkAccept (p.getAddress().getHostName (), p.getPort ());
-
if (impl == null)
throw new IOException ("Cannot initialize Socket implementation");
+ if (remoteAddress != null && remoteAddress.isMulticastAddress ())
+ throw new IOException (
+ "Socket connected to a multicast address my not receive");
+
if (ch != null && !ch.isBlocking ())
throw new IllegalBlockingModeException ();
impl.receive(p);
+
+ SecurityManager s = System.getSecurityManager();
+ if (s != null && isConnected ())
+ s.checkAccept (p.getAddress().getHostName (), p.getPort ());
}
/**
@@ -324,7 +330,7 @@ public class DatagramSocket
{
// JDK1.2: Don't do security checks if socket is connected; see jdk1.2 api.
SecurityManager s = System.getSecurityManager();
- if (s != null)
+ if (s != null && !isConnected ())
{
InetAddress addr = p.getAddress();
if (addr.isMulticastAddress())
@@ -332,6 +338,14 @@ public class DatagramSocket
else
s.checkConnect(addr.getHostAddress(), p.getPort());
}
+
+ if (isConnected ())
+ {
+ if (p.getAddress () != null && (remoteAddress != p.getAddress () ||
+ remotePort != p.getPort ()))
+ throw new IllegalArgumentException (
+ "DatagramPacket address does not match remote address" );
+ }
// FIXME: if this is a subclass of MulticastSocket,
// use getTimeToLive for TTL val.
@@ -376,7 +390,20 @@ public class DatagramSocket
public void connect(InetAddress address, int port)
throws SocketException
{
- //impl.connect(address, port);
+ if (address == null)
+ throw new IllegalArgumentException ("Address may not be null");
+
+ if (port < 1 || port > 65535)
+ throw new IllegalArgumentException ("Port number is illegal");
+
+ SecurityManager s = System.getSecurityManager();
+ if (s != null)
+ s.checkAccept(address.getHostName (), port);
+
+ impl.connect (address, port);
+
+ remoteAddress = address;
+ remotePort = port;
}
/**
diff --git a/libjava/java/net/HttpURLConnection.java b/libjava/java/net/HttpURLConnection.java
index 5072b60829c..ac48246bb1c 100644
--- a/libjava/java/net/HttpURLConnection.java
+++ b/libjava/java/net/HttpURLConnection.java
@@ -217,11 +217,35 @@ public abstract class HttpURLConnection extends URLConnection
}
}
- // TODO12: public Permission getPermission() throws IOException
- // {
- // }
+ /**
+ * Returns a permission object representing the permission necessary to make
+ * the connection represented by this object
+ *
+ * @exception IOException If an error occurs
+ */
+ public Permission getPermission() throws IOException
+ {
+ return new SocketPermission (url.getHost (), "connect");
+ }
+
+ /**
+ * Returns the error stream if the connection failed but the server sent
+ * useful data nonetheless
+ */
+ public InputStream getErrorStream ()
+ {
+ // FIXME: implement this
+ return null;
+ }
- // TODO12: public InputStream getErrorStream()
- // {
- // }
+ /**
+ * Returns the value of the named field parsed as date
+ */
+ public long getHeaderFieldDate (String key, long value)
+ {
+ // FIXME: implement this correctly
+ // http://www.w3.org/Protocols/HTTP-NG/ng-notes.txt
+
+ return super.getHeaderFieldDate (key, value);
+ }
}
diff --git a/libjava/java/net/InetAddress.java b/libjava/java/net/InetAddress.java
index 49bc3105fb1..c4ea6efd0d9 100644
--- a/libjava/java/net/InetAddress.java
+++ b/libjava/java/net/InetAddress.java
@@ -9,9 +9,12 @@ Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
details. */
package java.net;
+
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;
+import java.io.Serializable;
+import java.io.ObjectStreamException;
/**
* @author Per Bothner
@@ -23,9 +26,11 @@ import java.io.IOException;
* as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
* (The latter turns out to have some errors ...)
* Status: Believed complete and correct.
+ *
+ * @specnote This class is not final since JK 1.4
*/
-public final class InetAddress implements java.io.Serializable
+public class InetAddress implements Serializable
{
// The Serialized Form specifies that an int 'address' is saved/restored.
// This class uses a byte array internally so we'll just do the conversion
@@ -41,6 +46,14 @@ public final class InetAddress implements java.io.Serializable
int family;
private static final long serialVersionUID = 3286316764910316507L;
+ /**
+ * Needed for serialization
+ */
+ private void readResolve () throws ObjectStreamException
+ {
+ // FIXME: implement this
+ }
+
private void readObject(ObjectInputStream ois)
throws IOException, ClassNotFoundException
{
@@ -78,6 +91,11 @@ public final class InetAddress implements java.io.Serializable
family = getFamily (address);
}
+ /**
+ * Utility routine to check if the InetAddress is an IP multicast address
+ *
+ * @since 1.1
+ */
public boolean isMulticastAddress ()
{
int len = addr.length;
@@ -88,6 +106,91 @@ public final class InetAddress implements java.io.Serializable
return false;
}
+ /**
+ * Utility routine to check if the InetAddress in a wildcard address
+ *
+ * @since 1.4
+ */
+ public boolean isAnyLocalAddress ()
+ {
+ // FIXME: implement this
+ return false;
+ }
+
+ /**
+ * Utility routine to check if the InetAddress is a loopback address
+ *
+ * @since 1.4
+ */
+ public boolean isLoopbackAddress ()
+ {
+ // FIXME: implement this
+ return addr [0] == 0x7F;
+ }
+
+ /**
+ * @since 1.4
+ */
+ public boolean isLinkLocalAddress ()
+ {
+ // FIXME: implement this
+ return false;
+ }
+
+ /**
+ * @since 1.4
+ */
+ public boolean isSiteLocalAddress ()
+ {
+ // FIXME: implement this
+ return false;
+ }
+
+ /**
+ * @since 1.4
+ */
+ public boolean isMCGlobal ()
+ {
+ // FIXME: implement this
+ return false;
+ }
+
+ /**
+ * @since 1.4
+ */
+ public boolean isMCNodeLocal ()
+ {
+ // FIXME: implement this
+ return false;
+ }
+
+ /**
+ * @since 1.4
+ */
+ public boolean isMCLinkLocal ()
+ {
+ // FIXME: implement this
+ return false;
+ }
+
+ /**
+ * @since 1.4
+ */
+ public boolean isMCSiteLocal ()
+ {
+ // FIXME: implement this
+ return false;
+ }
+
+ /**
+ * @since 1.4
+ */
+ public boolean isMCOrgLocal ()
+ {
+ // FIXME: implement this
+ return false;
+ }
+
public String getHostName ()
{
if (hostName == null)
@@ -95,6 +198,15 @@ public final class InetAddress implements java.io.Serializable
return hostName;
}
+ /**
+ * @since 1.4
+ */
+ public String getCanonicalHostName ()
+ {
+ // FIXME: implement this
+ return "";
+ }
+
public byte[] getAddress ()
{
// An experiment shows that JDK1.2 returns a different byte array each
@@ -125,6 +237,11 @@ public final class InetAddress implements java.io.Serializable
}
}
+ /**
+ * Returns the IP address as string
+ *
+ * @since 1.0.2
+ */
public String getHostAddress ()
{
StringBuffer sbuf = new StringBuffer(40);
@@ -186,11 +303,12 @@ public final class InetAddress implements java.io.Serializable
{
if (obj == null || ! (obj instanceof InetAddress))
return false;
+
// "The Java Class Libraries" 2nd edition says "If a machine has
// multiple names instances of InetAddress for different name of
// that same machine are not equal. This is because they have
// different host names." This violates the description in the
- // JDK 1.2 API documentation. A little experiementation
+ // JDK 1.2 API documentation. A little experimentation
// shows that the latter is correct.
byte[] addr1 = addr;
byte[] addr2 = ((InetAddress) obj).addr;
@@ -202,11 +320,58 @@ public final class InetAddress implements java.io.Serializable
return true;
}
+ /**
+ * Returns then <code>InetAddress</code> as string
+ */
public String toString()
{
return getHostName()+'/'+getHostAddress();
}
+ /**
+ * Returns an InetAddress object given the raw IP address.
+ *
+ * The argument is in network byte order: the highest order byte of the
+ * address is in getAddress()[0].
+ *
+ * @param addr The IP address to create the InetAddress object from
+ *
+ * @exception UnknownHostException If IP address has illegal length
+ *
+ * @since 1.4
+ */
+ public static InetAddress getByAddress(byte[] addr)
+ throws UnknownHostException
+ {
+ if (addr.length != 4 && addr.length != 16)
+ throw new UnknownHostException ("IP address has illegal length");
+
+ return new InetAddress (addr, "");
+ }
+
+ /**
+ * Creates an InetAddress based on the provided host name and IP address.
+ * No name service is checked for the validity of the address.
+ *
+ * @param host The hostname of the InetAddress object to create
+ * @param addr The IP address to create the InetAddress object from
+ *
+ * @exception UnknownHostException If IP address is of illegal length
+ *
+ * @since 1.4
+ */
+ public static InetAddress getByAddress (String host, byte[] addr)
+ throws UnknownHostException
+ {
+ if (addr.length == 4)
+ return new Inet4Address (addr, host);
+
+ if (addr.length == 16)
+ return new Inet6Address (addr, host);
+
+ throw new UnknownHostException ("IP address has illegal length");
+ }
+
/** If host is a valid numeric IP address, return the numeric address.
* Otherwise, return null. */
private static native byte[] aton (String host);
@@ -214,6 +379,14 @@ public final class InetAddress implements java.io.Serializable
private static native InetAddress[] lookup
(String hostname, InetAddress addr, boolean all);
+ /**
+ * Determines the IP address of a host, given the host's name.
+ *
+ * @exception UnknownHostException If no IP address for the host could
+ * be found
+ * @exception SecurityException If a security manager exists and its
+ * checkConnect method doesn't allow the operation
+ */
public static InetAddress getByName (String host)
throws UnknownHostException
{
@@ -227,6 +400,15 @@ public final class InetAddress implements java.io.Serializable
return iaddr;
}
+ /**
+ * Given the name of a host, returns an array of its IP addresses,
+ * based on the configured name service on the system.
+ *
+ * @exception UnknownHostException If no IP address for the host could
+ * be found
+ * @exception SecurityException If a security manager exists and its
+ * checkConnect method doesn't allow the operation
+ */
public static InetAddress[] getAllByName (String host)
throws UnknownHostException
{
@@ -250,6 +432,12 @@ public final class InetAddress implements java.io.Serializable
private static InetAddress localhost = null;
+ /**
+ * Returns the local host
+ *
+ * @exception UnknownHostException If no IP address for the host could
+ * be found
+ */
public static InetAddress getLocalHost() throws UnknownHostException
{
SecurityManager s = System.getSecurityManager();
diff --git a/libjava/java/net/InetSocketAddress.java b/libjava/java/net/InetSocketAddress.java
index 20ebbfaec5a..1b740dcc507 100644
--- a/libjava/java/net/InetSocketAddress.java
+++ b/libjava/java/net/InetSocketAddress.java
@@ -47,119 +47,149 @@ package java.net;
public class InetSocketAddress extends SocketAddress
{
- InetAddress addr;
- int port;
+ String hostname;
+ InetAddress addr;
+ int port;
- /**
- * Constructs an InetSocketAddress instance.
- *
- * @param addr Address of the socket
- * @param port Port if the socket
- *
- * @exception IllegalArgumentException If the port number is illegel
- */
- public InetSocketAddress(InetAddress addr, int port)
- throws IllegalArgumentException
- {
- if (port < 0 || port > 65535)
- throw new IllegalArgumentException();
+ /**
+ * Constructs an InetSocketAddress instance.
+ *
+ * @param addr Address of the socket
+ * @param port Port if the socket
+ *
+ * @exception IllegalArgumentException If the port number is illegel
+ */
+ public InetSocketAddress(InetAddress addr, int port)
+ throws IllegalArgumentException
+ {
+ if (port < 0 || port > 65535)
+ throw new IllegalArgumentException();
- this.addr = addr;
- this.port = port;
- }
-
- /**
- * Constructs an InetSocketAddress instance.
- *
- * @param port Port if the socket
- *
- * @exception IllegalArgumentException If the port number is illegal
- */
- public InetSocketAddress(int port)
- throws IllegalArgumentException
- {
- if (port < 0 || port > 65535)
- throw new IllegalArgumentException();
-
- this.port = port;
- try {
- this.addr = InetAddress.getLocalHost();
- } catch (Exception e) {
- }
- }
-
-
- /**
- * Constructs an InetSocketAddress instance.
- *
- * @param addr Address of the socket
- * @param port Port if the socket
- *
- * @exception IllegalArgumentException If the port number is illegal
- */
- public InetSocketAddress(String hostname, int port)
- throws IllegalArgumentException
- {
- if (port < 0 || port > 65535)
- throw new IllegalArgumentException();
-
- this.port = port;
- try {
- this.addr = InetAddress.getByName(hostname);
- } catch (Exception e) {
- }
- }
+ this.addr = addr;
+ this.port = port;
+ this.hostname = addr.getHostName ();
+ }
+
+ /**
+ * Constructs an InetSocketAddress instance.
+ *
+ * @param port Port if the socket
+ *
+ * @exception IllegalArgumentException If the port number is illegal
+ */
+ public InetSocketAddress(int port)
+ throws IllegalArgumentException
+ {
+ if (port < 0 || port > 65535)
+ throw new IllegalArgumentException();
+
+ this.port = port;
+
+ try
+ {
+ byte[] any = { 0, 0, 0, 0 };
+ this.addr = InetAddress.getByAddress (any);
+ this.hostname = "0.0.0.0";
+ }
+ catch (UnknownHostException e)
+ {
+ this.addr = null;
+ this.hostname = "";
+ }
+ }
+
+
+ /**
+ * Constructs an InetSocketAddress instance.
+ *
+ * @param addr Address of the socket
+ * @param port Port if the socket
+ *
+ * @exception IllegalArgumentException If the port number is illegal
+ */
+ public InetSocketAddress(String hostname, int port)
+ throws IllegalArgumentException
+ {
+ if (port < 0 || port > 65535)
+ throw new IllegalArgumentException();
+
+ this.port = port;
+ this.hostname = hostname;
+
+ try
+ {
+ this.addr = InetAddress.getByName(hostname);
+ }
+ catch (Exception e) // UnknownHostException, SecurityException
+ {
+ this.addr = null;
+ }
+ }
- /**
- * Test if obj is a InetSocketAddress and
- * has the same address & port
- */
- public final boolean equals(Object obj)
- {
- if (obj instanceof InetSocketAddress)
- {
- InetSocketAddress a = (InetSocketAddress) obj;
- return addr.equals(a.addr) && a.port == port;
- }
- return false;
- }
-
- public final InetAddress getAddress()
- {
- return addr;
- }
-
- public final String getHostName()
- {
- return addr.getHostName();
- }
-
- public final int getPort()
- {
- return port;
- }
+ /**
+ * Test if obj is a <code>InetSocketAddress</code> and
+ * has the same address and port
+ */
+ public final boolean equals (Object obj)
+ {
+ // InetSocketAddress objects are equal when addr and port are equal.
+ // The hostname may differ.
+
+ if (obj instanceof InetSocketAddress)
+ {
+ InetSocketAddress a = (InetSocketAddress) obj;
+ return addr.equals(a.addr) && a.port == port;
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns the <code>InetAddress</code> or
+ * <code>null</code> if its unresolved
+ */
+ public final InetAddress getAddress()
+ {
+ return addr;
+ }
+
+ /**
+ * Returns <code>hostname</code>
+ */
+ public final String getHostName()
+ {
+ return hostname;
+ }
+
+ /**
+ * Returns the <code>port</code>
+ */
+ public final int getPort()
+ {
+ return port;
+ }
- /**
- * TODO: see what sun does here.
- */
- public final int hashCode()
- {
- return port + addr.hashCode();
- }
-
- /**
- * TODO: see what sun does here.
- */
- public final boolean isUnresolved()
- {
- return addr == null;
- }
+ /**
+ * Returns the hashcode of the <code>InetSocketAddress</code>
+ */
+ public final int hashCode()
+ {
+ return port + addr.hashCode();
+ }
+
+ /**
+ * Checks wether the address has been resolved or not
+ */
+ public final boolean isUnresolved()
+ {
+ return addr == null;
+ }
- /**
- * TODO: see what sun does here.
- */
- public String toString()
- {
- return "SA:"+addr+":"+port;
- }
+ /**
+ * Returns the <code>InetSocketAddress</code> as string
+ */
+ public String toString()
+ {
+ return addr + ":" + port;
+ }
}
diff --git a/libjava/java/net/MulticastSocket.java b/libjava/java/net/MulticastSocket.java
index b3582605a57..2700ebee511 100644
--- a/libjava/java/net/MulticastSocket.java
+++ b/libjava/java/net/MulticastSocket.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package java.net;
import java.io.IOException;
+import java.util.Enumeration;
/**
* Written using on-line Java Platform 1.2 API Specification, as well
@@ -120,7 +121,6 @@ public class MulticastSocket extends DatagramSocket
*/
public InetAddress getInterface() throws SocketException
{
- // FIXME: Is it possible that an InetAddress wasn't returned from getOption?
return (InetAddress) impl.getOption(SocketOptions.IP_MULTICAST_IF);
}
@@ -173,6 +173,58 @@ public class MulticastSocket extends DatagramSocket
}
/**
+ * Sets the local network interface used to send multicast messages
+ *
+ * @param netIF The local network interface used to send multicast messages
+ *
+ * @exception SocketException If an error occurs
+ *
+ * @see MulticastSocket:getNetworkInterface
+ *
+ * @since 1.4
+ */
+ public void setNetworkInterface(NetworkInterface netIf)
+ throws SocketException
+ {
+ if (impl == null)
+ throw new SocketException (
+ "MulticastSocket: Cant access socket implementation");
+
+ Enumeration e = netIf.getInetAddresses ();
+
+ if (!e.hasMoreElements ())
+ throw new SocketException ("MulticastSocket: Error");
+
+ InetAddress address = (InetAddress) e.nextElement ();
+ impl.setOption (SocketOptions.IP_MULTICAST_IF, address);
+ }
+
+ /**
+ * Gets the local network interface which is used to send multicast messages
+ *
+ * @return The local network interface to send multicast messages
+ *
+ * @exception SocketException If an error occurs
+ *
+ * @see MulticastSocket:setNetworkInterface
+ *
+ * @since 1.4
+ */
+ public NetworkInterface getNetworkInterface()
+ throws SocketException
+ {
+ if (impl == null)
+ throw new SocketException (
+ "MulticastSocket: Cant access socket implementation");
+
+ InetAddress address =
+ (InetAddress) impl.getOption (SocketOptions.IP_MULTICAST_IF);
+ NetworkInterface netIf = NetworkInterface.getByInetAddress (address);
+
+ return netIf;
+ }
+
+ /**
* Disable/Enable local loopback of multicast packets. The option is used by
* the platform's networking code as a hint for setting whether multicast
* data will be looped back to the local socket.
@@ -188,6 +240,10 @@ public class MulticastSocket extends DatagramSocket
*/
public void setLoopbackMode(boolean disable) throws SocketException
{
+ if (impl == null)
+ throw new SocketException (
+ "MulticastSocket: Cant access socket implementation");
+
impl.setOption (SocketOptions.IP_MULTICAST_LOOP, new Boolean (disable));
}
@@ -252,7 +308,8 @@ public class MulticastSocket extends DatagramSocket
* @param addr The address of the group to join
*
* @exception IOException If an error occurs
- * @exception SecurityException FIXME
+ * @exception SecurityException If a security manager exists and its
+ * checkMulticast method doesn't allow the operation
*/
public void joinGroup(InetAddress mcastaddr) throws IOException
{
@@ -272,7 +329,8 @@ public class MulticastSocket extends DatagramSocket
* @param addr The address of the group to leave
*
* @exception IOException If an error occurs
- * @exception SecurityException FIXME
+ * @exception SecurityException If a security manager exists and its
+ * checkMulticast method doesn't allow the operation
*/
public void leaveGroup(InetAddress mcastaddr) throws IOException
{
@@ -296,7 +354,8 @@ public class MulticastSocket extends DatagramSocket
*
* @exception IOException If an error occurs
* @exception IllegalArgumentException If address type is not supported
- * @exception SecurityException FIXME
+ * @exception SecurityException If a security manager exists and its
+ * checkMulticast method doesn't allow the operation
*
* @see MulticastSocket:setInterface
* @see MulticastSocket:setNetworkInterface
@@ -314,7 +373,6 @@ public class MulticastSocket extends DatagramSocket
if (! tmp.getAddress ().isMulticastAddress ())
throw new IOException ("Not a Multicast address");
- // FIXME: check if this check is sufficient. Do we need to check the port ?
SecurityManager s = System.getSecurityManager ();
if (s != null)
s.checkMulticast (tmp.getAddress ());
@@ -331,7 +389,8 @@ public class MulticastSocket extends DatagramSocket
*
* @exception IOException If an error occurs
* @exception IllegalArgumentException If address type is not supported
- * @exception SecurityException FIXME
+ * @exception SecurityException If a security manager exists and its
+ * checkMulticast method doesn't allow the operation
*
* @see MulticastSocket:setInterface
* @see MulticastSocket:setNetworkInterface
@@ -346,7 +405,6 @@ public class MulticastSocket extends DatagramSocket
if (! tmp.getAddress ().isMulticastAddress ())
throw new IOException ("Not a Multicast address");
- // FIXME: do we need to check the port too, or is this sufficient ?
SecurityManager s = System.getSecurityManager ();
if (s != null)
s.checkMulticast (tmp.getAddress ());
@@ -363,7 +421,8 @@ public class MulticastSocket extends DatagramSocket
* @param ttl The TTL for this packet
*
* @exception IOException If an error occurs
- * @exception SecurityException FIXME
+ * @exception SecurityException If a security manager exists and its
+ * checkConnect or checkMulticast method doesn't allow the operation
*/
public synchronized void send(DatagramPacket p, byte ttl) throws IOException
{
diff --git a/libjava/java/net/NetworkInterface.java b/libjava/java/net/NetworkInterface.java
index f0113d03808..60a7d764cbc 100644
--- a/libjava/java/net/NetworkInterface.java
+++ b/libjava/java/net/NetworkInterface.java
@@ -220,15 +220,16 @@ public final class NetworkInterface
{
// FIXME: check if this is correct
String result;
+ String separator = System.getProperty ("line.separator");
result = "name: " + getDisplayName () + " (" + getName () +
- ") addresses:\n";
+ ") addresses:" + separator;
for (Enumeration e = inetAddresses.elements ();
e.hasMoreElements (); )
{
InetAddress address = (InetAddress) e.nextElement ();
- result += address.toString () + "\n";
+ result += address.toString () + separator;
}
return result;
diff --git a/libjava/java/net/ServerSocket.java b/libjava/java/net/ServerSocket.java
index 36f93e8b64c..b7c69913a05 100644
--- a/libjava/java/net/ServerSocket.java
+++ b/libjava/java/net/ServerSocket.java
@@ -287,6 +287,13 @@ public class ServerSocket
*/
public Socket accept () throws IOException
{
+ if (impl == null)
+ throw new IOException ("Cannot initialize Socket implementation");
+
+ SecurityManager sm = System.getSecurityManager ();
+ if (sm != null)
+ sm.checkListen (impl.getLocalPort ());
+
Socket s = new Socket();
implAccept (s);
@@ -359,6 +366,17 @@ public class ServerSocket
}
/**
+ * Returns true if the socket is closed, otherwise false
+ *
+ * @since 1.4
+ */
+ public boolean isClosed()
+ {
+ // FIXME: implement this
+ return false;
+ }
+
+ /**
* Sets the value of SO_TIMEOUT. A value of 0 implies that SO_TIMEOUT is
* disabled (ie, operations never time out). This is the number of
* milliseconds a socket operation can block before an
diff --git a/libjava/java/net/Socket.java b/libjava/java/net/Socket.java
index 82265dd32f9..b900801a16b 100644
--- a/libjava/java/net/Socket.java
+++ b/libjava/java/net/Socket.java
@@ -80,6 +80,9 @@ public class Socket
*/
SocketImpl impl;
+ private boolean inputShutdown;
+ private boolean outputShutdown;
+
SocketChannel ch; // this field must have been set if created by SocketChannel
// Constructors
@@ -97,6 +100,9 @@ public class Socket
impl = factory.createSocketImpl();
else
impl = new PlainSocketImpl();
+
+ inputShutdown = false;
+ outputShutdown = false;
}
/**
@@ -118,6 +124,8 @@ public class Socket
protected Socket (SocketImpl impl) throws SocketException
{
this.impl = impl;
+ this.inputShutdown = false;
+ this.outputShutdown = false;
}
/**
@@ -264,6 +272,9 @@ public class Socket
boolean stream) throws IOException
{
this();
+ this.inputShutdown = false;
+ this.outputShutdown = false;
+
if (impl == null)
throw new IOException("Cannot initialize Socket implementation");
@@ -457,6 +468,9 @@ public class Socket
*/
public SocketAddress getRemoteSocketAddress()
{
+ if (!isConnected ())
+ return null;
+
return new InetSocketAddress (impl.getInetAddress (), impl.getPort ());
}
@@ -886,10 +900,12 @@ public class Socket
*
* @exception IOException If an error occurs.
*/
- public void shutdownInput() throws IOException
+ public void shutdownInput() throws IOException
{
if (impl != null)
impl.shutdownInput();
+
+ inputShutdown = true;
}
/**
@@ -901,6 +917,8 @@ public class Socket
{
if (impl != null)
impl.shutdownOutput();
+
+ outputShutdown = true;
}
/**
@@ -994,10 +1012,43 @@ public class Socket
}
/**
+ * Checks if the socket is connected
+ */
+ public boolean isConnected ()
+ {
+ return impl.getInetAddress () != null;
+ }
+
+ /**
* Checks if the socket is already bound.
*/
public boolean isBound ()
{
return getLocalAddress () != null;
}
+
+ /**
+ * Checks if the socket is closed.
+ */
+ public boolean isClosed ()
+ {
+ // FIXME: implement this.
+ return false;
+ }
+
+ /**
+ * Checks if the socket's input stream is shutdown
+ */
+ public boolean isInputShutdown ()
+ {
+ return inputShutdown;
+ }
+
+ /**
+ * Checks if the socket's output stream is shutdown
+ */
+ public boolean isOutputShutdown ()
+ {
+ return outputShutdown;
+ }
}
diff --git a/libjava/java/net/SocketOptions.java b/libjava/java/net/SocketOptions.java
index 628e08e8de2..f62afef9aab 100644
--- a/libjava/java/net/SocketOptions.java
+++ b/libjava/java/net/SocketOptions.java
@@ -60,7 +60,7 @@ public interface SocketOptions
* @since 1.3
*/
static final int SO_KEEPALIVE = 0x8;
-
+
/**
* Option id for the SO_LINGER value
*/
@@ -106,13 +106,13 @@ public interface SocketOptions
static final int SO_OOBINLINE = 0x1003; // 4099
/**
- * Option id for the TCP_NODELAY value
- */
+ * Option id for the TCP_NODELAY value
+ */
static final int TCP_NODELAY = 0x01; // 1
/**
- * Options id for the IP_MULTICAST_IF value
- */
+ * Options id for the IP_MULTICAST_IF value
+ */
static final int IP_MULTICAST_IF = 0x10; // 16
/**
diff --git a/libjava/java/net/SocketPermission.java b/libjava/java/net/SocketPermission.java
index 061ec9c80fe..0f41395f36a 100644
--- a/libjava/java/net/SocketPermission.java
+++ b/libjava/java/net/SocketPermission.java
@@ -121,7 +121,7 @@ public final class SocketPermission extends Permission
* specified host/port combination and actions string.
*
* @param hostport The hostname/port number combination
- * @param perms The actions string
+ * @param actions The actions string
*/
public SocketPermission(String hostport, String actions)
{
diff --git a/libjava/java/net/URL.java b/libjava/java/net/URL.java
index 226ad6ca68c..b485c51231d 100644
--- a/libjava/java/net/URL.java
+++ b/libjava/java/net/URL.java
@@ -83,6 +83,9 @@ public final class URL implements Serializable
* @param handler The stream handler for the URL
*
* @exception MalformedURLException If an error occurs
+ * @exception SecurityException If a security manager exists and its
+ * checkPermission method doesn't allow specifying a stream handler
+ * explicitly
*
* @since 1.2
*/
@@ -95,14 +98,9 @@ public final class URL implements Serializable
if (handler != null)
{
- // TODO12: Need SecurityManager.checkPermission and
- // TODO12: java.net.NetPermission from JDK 1.2 to be implemented.
- // Throw an exception if an extant security mgr precludes
- // specifying a StreamHandler.
- //
- // SecurityManager s = System.getSecurityManager();
- // if (s != null)
- // s.checkPermission(NetPermission("specifyStreamHandler"));
+ SecurityManager s = System.getSecurityManager ();
+ if (s != null)
+ s.checkPermission (new NetPermission ("specifyStreamHandler"));
this.handler = handler;
}
@@ -166,6 +164,9 @@ public final class URL implements Serializable
* @param handler The stream handler for the URL
*
* @exception MalformedURLException If an error occurs
+ * @exception SecurityException If a security manager exists and its
+ * checkPermission method doesn't allow specifying a stream handler
+ * explicitly
*
* @since 1.2
*/
@@ -228,14 +229,9 @@ public final class URL implements Serializable
if (handler != null)
{
- // TODO12: Need SecurityManager.checkPermission and
- // TODO12: java.net.NetPermission from JDK 1.2 to be implemented.
- // Throw an exception if an extant security mgr precludes
- // specifying a StreamHandler.
- //
- // SecurityManager s = System.getSecurityManager();
- // if (s != null)
- // s.checkPermission(NetPermission("specifyStreamHandler"));
+ SecurityManager s = System.getSecurityManager ();
+ if (s != null)
+ s.checkPermission (new NetPermission ("specifyStreamHandler"));
this.handler = handler;
}
@@ -264,29 +260,15 @@ public final class URL implements Serializable
return false;
URL uObj = (URL) obj;
-
- // This comparison is very conservative. It assumes that any
- // field can be null.
- return (port == uObj.port
- && ((protocol == null && uObj.protocol == null)
- || (protocol != null && protocol.equals(uObj.protocol)))
- && ((userInfo == null && uObj.userInfo == null)
- || (userInfo != null && userInfo.equals(uObj.userInfo)))
- && ((authority == null && uObj.authority == null)
- || (authority != null && authority.equals(uObj.authority)))
- && ((host == null && uObj.host == null)
- || (host != null && host.equals(uObj.host)))
- && ((file == null && uObj.file == null)
- || (file != null && file.equals(uObj.file)))
- && ((query == null && uObj.query == null)
- || (query != null && query.equals(uObj.query)))
- && ((ref == null && uObj.ref == null)
- || (ref != null && ref.equals(uObj.ref))));
+
+ return handler.equals (this, uObj);
}
/**
* Gets the contents of this URL
*
+ * @exception IOException If an error occurs
+ *
* @since 1.3
*/
public final Object getContent() throws IOException
@@ -294,6 +276,17 @@ public final class URL implements Serializable
return openConnection().getContent();
}
+ /**
+ * Gets the contents of this URL
+ *
+ * @exception IOException If an error occurs
+ */
+ public final Object getContent (Class[] classes) throws IOException
+ {
+ // FIXME: implement this
+ return getContent();
+ }
+
public String getFile()
{
return file;
@@ -366,6 +359,14 @@ public final class URL implements Serializable
return at < 0 ? null : host.substring(0, at);
}
+ /**
+ * Returns the query of the URL
+ */
+ public String getQuery ()
+ {
+ return query;
+ }
+
public int hashCode()
{
// JCL book says this is computed using (only) the hashcodes of the
@@ -385,15 +386,26 @@ public final class URL implements Serializable
if (hashCode != 0)
return hashCode; // Use cached value if available.
else
- return (protocol.hashCode() + ((host == null) ? 0 : host.hashCode()) +
- port + file.hashCode());
+ return handler.hashCode (this);
}
+ /**
+ * Returns a URLConnection object that represents a connection to the remote
+ * object referred to by the URL
+ *
+ * @exception IOException If an error occurs
+ */
public URLConnection openConnection() throws IOException
{
return handler.openConnection(this);
}
+ /**
+ * Opens a connection to this URL and returns an InputStream for reading
+ * from that connection
+ *
+ * @exception IOException If an error occurs
+ */
public final InputStream openStream() throws IOException
{
return openConnection().getInputStream();
@@ -458,6 +470,13 @@ public final class URL implements Serializable
hashCode = hashCode(); // Used for serialization.
}
+ /**
+ * Sets an application's URLStreamHandlerFactory
+ *
+ * @exception Error If the application has already set a factory
+ * @exception SecurityException If a security manager exists and its
+ * checkSetFactory method doesn't allow the operation
+ */
public static synchronized void
setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
{
diff --git a/libjava/java/net/URLConnection.java b/libjava/java/net/URLConnection.java
index 91c229d51de..0b39fe88ea6 100644
--- a/libjava/java/net/URLConnection.java
+++ b/libjava/java/net/URLConnection.java
@@ -251,6 +251,19 @@ public abstract class URLConnection
}
/**
+ * Retrieves the content of this URLConnection
+ *
+ * @exception IOException If an error occurs
+ * @exception UnknownServiceException If the protocol does not support the
+ * content type
+ */
+ public Object getContent(Class[] classes) throws IOException
+ {
+ // FIXME: implement this
+ return getContent ();
+ }
+
+ /**
* Returns a permission object representing the permission necessary to make
* the connection represented by this object. This method returns null if no
* permission is required to make the connection.
diff --git a/libjava/java/net/URLStreamHandler.java b/libjava/java/net/URLStreamHandler.java
index cade4f3d066..a30f1570f89 100644
--- a/libjava/java/net/URLStreamHandler.java
+++ b/libjava/java/net/URLStreamHandler.java
@@ -25,6 +25,19 @@ import java.io.IOException;
public abstract class URLStreamHandler
{
+ /**
+ * Creates a URLStreamHander
+ */
+ public URLStreamHandler ()
+ {
+ }
+
+ /**
+ * Opens a connection to the object referenced by the URL argument.
+ * This method should be overridden by a subclass.
+ *
+ * @exception IOException If an error occurs
+ */
protected abstract URLConnection openConnection(URL u)
throws IOException;
@@ -33,8 +46,12 @@ public abstract class URLStreamHandler
*
* @param u The URL to parse
* @param spec The specification to use
- * @param start FIXME
- * @param limit FIXME
+ * @param start The character index at which to begin parsing. This is just
+ * past the ':' (if there is one) that specifies the determination of the
+ * protocol name
+ * @param limit The character position to stop parsing at. This is the end
+ * of the string or the position of the "#" character, if present. All
+ * information after the sharp sign indicates an anchor
*/
protected void parseURL(URL u, String spec, int start, int limit)
{
@@ -207,6 +224,99 @@ public abstract class URLStreamHandler
}
/**
+ * Provides the default equals calculation. May be overidden by handlers for
+ * other protocols that have different requirements for equals(). This method
+ * requires that none of its arguments is null. This is guaranteed by the
+ * fact that it is only called by java.net.URL class.
+ *
+ * @param url1 An URL object
+ * @param url2 An URL object
+ */
+ protected boolean equals (URL url1, URL url2)
+ {
+ // This comparison is very conservative. It assumes that any
+ // field can be null.
+ return (url1.getPort () == url2.getPort ()
+ && ((url1.getProtocol () == null && url2.getProtocol () == null)
+ || (url1.getProtocol () != null
+ && url1.getProtocol ().equals (url2.getProtocol ())))
+ && ((url1.getUserInfo () == null && url2.getUserInfo () == null)
+ || (url1.getUserInfo () != null
+ && url1.getUserInfo ().equals(url2.getUserInfo ())))
+ && ((url1.getAuthority () == null && url2.getAuthority () == null)
+ || (url1.getAuthority () != null
+ && url1.getAuthority ().equals(url2.getAuthority ())))
+ && ((url1.getHost () == null && url2.getHost () == null)
+ || (url1.getHost () != null
+ && url1.getHost ().equals(url2.getHost ())))
+ && ((url1.getPath () == null && url2.getPath () == null)
+ || (url1.getPath () != null
+ && url1.getPath ().equals (url2.getPath ())))
+ && ((url1.getQuery () == null && url2.getQuery () == null)
+ || (url1.getQuery () != null
+ && url1.getQuery ().equals(url2.getQuery ())))
+ && ((url1.getRef () == null && url2.getRef () == null)
+ || (url1.getRef () != null
+ && url1.getRef ().equals(url2.getRef ()))));
+ }
+
+ /**
+ * Compares the host components of two URLs.
+ *
+ * @exception UnknownHostException If an unknown host is found
+ */
+ protected boolean hostsEqual (URL url1, URL url2)
+ throws UnknownHostException
+ {
+ InetAddress addr1 = InetAddress.getByName (url1.getHost ());
+ InetAddress addr2 = InetAddress.getByName (url2.getHost ());
+
+ return addr1.equals (addr2);
+ }
+
+ /**
+ * Get the IP address of our host. An empty host field or a DNS failure will
+ * result in a null return.
+ */
+ protected InetAddress getHostAddress (URL url)
+ {
+ String hostname = url.getHost ();
+
+ if (hostname == "")
+ return null;
+
+ try
+ {
+ return InetAddress.getByName (hostname);
+ }
+ catch (UnknownHostException e)
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the default port for a URL parsed by this handler. This method is
+ * meant to be overidden by handlers with default port numbers.
+ */
+ protected int getDefaultPort ()
+ {
+ return -1;
+ }
+
+ /**
+ * Provides the default hash calculation. May be overidden by handlers for
+ * other protocols that have different requirements for hashCode calculation.
+ */
+ protected int hashCode (URL url)
+ {
+ return url.getProtocol ().hashCode () +
+ ((url.getHost () == null) ? 0 : url.getHost ().hashCode ()) +
+ url.getFile ().hashCode() +
+ url.getPort ();
+ }
+
+ /**
* Converts an URL of a specific protocol to a string
*
* @param u The URL to convert
diff --git a/libjava/java/net/natNetworkInterface.cc b/libjava/java/net/natNetworkInterface.cc
index 1d236b012c0..f2019409e81 100644
--- a/libjava/java/net/natNetworkInterface.cc
+++ b/libjava/java/net/natNetworkInterface.cc
@@ -52,7 +52,7 @@ details. */
#include <gcj/cni.h>
#include <jvm.h>
#include <java/net/NetworkInterface.h>
-#include <java/net/InetAddress.h>
+#include <java/net/Inet4Address.h>
#include <java/net/SocketException.h>
#include <java/util/Vector.h>
@@ -70,6 +70,9 @@ java::net::NetworkInterface::getRealNetworkInterfaces ()
::java::util::Vector*
java::net::NetworkInterface::getRealNetworkInterfaces ()
{
+#ifdef WIN32
+ throw new ::java::net::SocketException;
+#else
int fd;
int num_interfaces = 0;
struct ifconf if_data;
@@ -120,8 +123,8 @@ java::net::NetworkInterface::getRealNetworkInterfaces ()
jbyteArray baddr = JvNewByteArray (len);
memcpy (elements (baddr), &(sa.sin_addr), len);
jstring if_name = JvNewStringLatin1 (if_record->ifr_name);
- InetAddress* address =
- new java::net::InetAddress (baddr, JvNewStringLatin1 (""));
+ Inet4Address* address =
+ new java::net::Inet4Address (baddr, JvNewStringLatin1 (""));
ht->add (new NetworkInterface (if_name, address));
if_record++;
}
@@ -136,6 +139,7 @@ java::net::NetworkInterface::getRealNetworkInterfaces ()
::close (fd);
return ht;
+#endif /* WIN32 */
}
#endif // DISABLE_JAVA_NET //
diff --git a/libjava/java/net/natPlainDatagramSocketImpl.cc b/libjava/java/net/natPlainDatagramSocketImpl.cc
index 291243928f2..84de798d944 100644
--- a/libjava/java/net/natPlainDatagramSocketImpl.cc
+++ b/libjava/java/net/natPlainDatagramSocketImpl.cc
@@ -280,18 +280,17 @@ java::net::PlainDatagramSocketImpl::bind (jint lport,
}
void
-java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *addr,
- jint port)
+java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint)
{
- throw new ::java::lang::InternalError (
- JvNewStringLatin1 ("PlainDatagramSocketImpl::connect: not implemented yet"));
+ throw new ::java::lang::InternalError (JvNewStringLatin1 (
+ "PlainDatagramSocketImpl::connect: not implemented yet"));
}
void
java::net::PlainDatagramSocketImpl::disconnect ()
{
- throw new ::java::lang::InternalError (
- JvNewStringLatin1 ("PlainDatagramSocketImpl::disconnect: not implemented yet"));
+ throw new ::java::lang::InternalError (JvNewStringLatin1 (
+ "PlainDatagramSocketImpl::disconnect: not implemented yet"));
}
jint
diff --git a/libjava/java/rmi/MarshalledObject.java b/libjava/java/rmi/MarshalledObject.java
index eaa7fb534b4..4c9a9ccdb40 100644
--- a/libjava/java/rmi/MarshalledObject.java
+++ b/libjava/java/rmi/MarshalledObject.java
@@ -38,24 +38,73 @@ exception statement from your version. */
package java.rmi;
import java.io.Serializable;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import gnu.java.rmi.RMIMarshalledObjectInputStream;
+import gnu.java.rmi.RMIMarshalledObjectOutputStream;
+/**
+ * FIXME - doc missing
+ */
public final class MarshalledObject
- extends Object implements Serializable {
-
-public MarshalledObject(Object obj) {
- throw new Error("Not implemented");
-}
-
-public boolean equals(Object obj) {
- throw new Error("Not implemented");
-}
-
-public Object get() {
- throw new Error("Not implemented");
-}
-
-public int hashCode() {
- throw new Error("Not implemented");
+ extends Object implements Serializable
+{
+
+ //The following fields are from Java API Documentation "Serialized form"
+ private static final long serialVersionUID = 8988374069173025854L;
+ byte[] objBytes;
+ byte[] locBytes;
+ int hash;
+
+ public MarshalledObject(Object obj) throws java.io.IOException
+ {
+ ByteArrayOutputStream objStream = new ByteArrayOutputStream();
+ RMIMarshalledObjectOutputStream stream = new RMIMarshalledObjectOutputStream(objStream);
+ stream.writeObject(obj);
+ stream.flush();
+ objBytes = objStream.toByteArray();
+ locBytes = stream.getLocBytes();
+
+ //The following algorithm of calculating hashCode is similar to String
+ hash = 0;
+ for (int i = 0; i < objBytes.length; i++)
+ hash = hash * 31 + objBytes[i];
+ if(locBytes != null)
+ for (int i = 0; i < locBytes.length; i++)
+ hash = hash * 31 + locBytes[i];
+ }
+
+ public boolean equals(Object obj)
+ {
+ if(obj == null || !(obj instanceof MarshalledObject) )
+ return false;
+
+ MarshalledObject aobj = (MarshalledObject)obj;
+ if (objBytes == null || aobj.objBytes == null)
+ return objBytes == aobj.objBytes;
+ if (objBytes.length != aobj.objBytes.length)
+ return false;
+ for (int i = 0; i < objBytes.length; i++)
+ {
+ if (objBytes[i] != aobj.objBytes[i])
+ return false;
+ }
+ // Ignore comparison of locBytes(annotation)
+ return true;
+ }
+
+public Object get()
+ throws java.io.IOException, java.lang.ClassNotFoundException
+{
+ if(objBytes == null)
+ return null;
+ RMIMarshalledObjectInputStream stream =
+ new RMIMarshalledObjectInputStream(objBytes, locBytes);
+ return stream.readObject();
}
-
+
+ public int hashCode() {
+ return hash;
+ }
+
}
diff --git a/libjava/java/rmi/activation/ActivationDesc.java b/libjava/java/rmi/activation/ActivationDesc.java
index 0e4216a82cb..b0f22aae760 100644
--- a/libjava/java/rmi/activation/ActivationDesc.java
+++ b/libjava/java/rmi/activation/ActivationDesc.java
@@ -40,8 +40,9 @@ package java.rmi.activation;
import java.io.Serializable;
import java.rmi.MarshalledObject;
-public final class ActivationDesc
- implements Serializable {
+public final class ActivationDesc implements Serializable
+{
+ static final long serialVersionUID = 7455834104417690957L;
private ActivationGroupID groupid;
private String classname;
diff --git a/libjava/java/rmi/activation/ActivationGroupDesc.java b/libjava/java/rmi/activation/ActivationGroupDesc.java
index da61fccc9dd..1c627e4d7b0 100644
--- a/libjava/java/rmi/activation/ActivationGroupDesc.java
+++ b/libjava/java/rmi/activation/ActivationGroupDesc.java
@@ -41,8 +41,9 @@ import java.io.Serializable;
import java.util.Properties;
import java.rmi.MarshalledObject;
-public final class ActivationGroupDesc
- implements Serializable {
+public final class ActivationGroupDesc implements Serializable
+{
+ static final long serialVersionUID = -4936225423168276595L;
public static class CommandEnvironment
implements Serializable {
diff --git a/libjava/java/rmi/activation/ActivationGroupID.java b/libjava/java/rmi/activation/ActivationGroupID.java
index 9ce81609ff4..9fff53bb706 100644
--- a/libjava/java/rmi/activation/ActivationGroupID.java
+++ b/libjava/java/rmi/activation/ActivationGroupID.java
@@ -39,8 +39,9 @@ package java.rmi.activation;
import java.io.Serializable;
-public class ActivationGroupID
- implements Serializable {
+public class ActivationGroupID implements Serializable
+{
+ static final long serialVersionUID = -1648432278909740833L;
private ActivationSystem system;
diff --git a/libjava/java/rmi/activation/ActivationID.java b/libjava/java/rmi/activation/ActivationID.java
index 4f1951ef3d4..62bd7763b42 100644
--- a/libjava/java/rmi/activation/ActivationID.java
+++ b/libjava/java/rmi/activation/ActivationID.java
@@ -41,8 +41,9 @@ import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;
-public class ActivationID
- implements Serializable {
+public class ActivationID implements Serializable
+{
+ static final long serialVersionUID = -4608673054848209235L;
private Activator activator;
diff --git a/libjava/java/rmi/server/RMIClassLoader.java b/libjava/java/rmi/server/RMIClassLoader.java
index cde97b0452e..da8f52c7ce9 100644
--- a/libjava/java/rmi/server/RMIClassLoader.java
+++ b/libjava/java/rmi/server/RMIClassLoader.java
@@ -39,21 +39,25 @@ package java.rmi.server;
import java.net.URL;
import java.net.URLConnection;
+import java.net.URLClassLoader;
import java.io.IOException;
import java.io.DataInputStream;
import java.net.MalformedURLException;
import java.util.StringTokenizer;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.WeakHashMap;
+import java.util.ArrayList;
public class RMIClassLoader
{
- static private class MyClassLoader extends ClassLoader
+ static private class MyClassLoader extends URLClassLoader
{
- /**
- * Non-private constructor to reduce bytecode emitted.
- */
- MyClassLoader()
+ private MyClassLoader(URL[] urls, ClassLoader parent)
{
+ super (urls, parent);
}
Class defineClass(String name, byte[] data)
@@ -62,58 +66,133 @@ public class RMIClassLoader
}
}
- static private MyClassLoader loader = new MyClassLoader();
-
+ private static Map cacheLoaders; //map annotations to loaders
+ private static Map cacheClasses; //map loader to classes that the loader loaded+
+ private static String defaultAnnotation;
+ private static URL defaultCodebase;
+ private static MyClassLoader defaultLoader;
+
+ static
+ {
+ cacheLoaders = Collections.synchronizedMap(new WeakHashMap(5));
+ cacheClasses = Collections.synchronizedMap(new WeakHashMap(5));
+ defaultAnnotation = System.getProperty("java.rmi.server.defaultAnnotation");
+ try
+ {
+ if (defaultAnnotation != null)
+ defaultCodebase = new URL(defaultAnnotation);
+ }
+ catch(Exception _)
+ {
+ defaultCodebase = null;
+ }
+ if (defaultCodebase != null)
+ {
+ defaultLoader = new MyClassLoader(new URL[]{ defaultCodebase },
+ Thread.currentThread().getContextClassLoader());
+ cacheLoaders.put(defaultAnnotation, defaultLoader);
+ cacheClasses.put(defaultLoader, Collections.synchronizedMap(new WeakHashMap()));
+ }
+ }
+
/**
* @deprecated
*/
public static Class loadClass(String name)
throws MalformedURLException, ClassNotFoundException
{
- return loadClass(System.getProperty("java.rmi.server.codebase"), name);
+ return (loadClass("", name));
}
- public static Class loadClass(URL codebase, String name)
- throws MalformedURLException, ClassNotFoundException
+ public static Class loadClass(URL codebase, String name)
+ throws MalformedURLException, ClassNotFoundException
{
URL u = new URL(codebase, name + ".class");
- try
+ try
{
- URLConnection conn = u.openConnection();
- DataInputStream strm = new DataInputStream(conn.getInputStream());
- byte data[] = new byte[conn.getContentLength()];
- strm.readFully(data);
- return loader.defineClass(name, data);
+ URLConnection conn = u.openConnection();
+ DataInputStream strm = new DataInputStream(conn.getInputStream());
+ byte data[] = new byte[conn.getContentLength()];
+ strm.readFully(data);
+ return (defaultLoader.defineClass(name, data));
}
- catch (IOException _)
+ catch (IOException _)
{
- throw new ClassNotFoundException(name);
+ throw new ClassNotFoundException(name);
}
}
-
- public static Class loadClass(String codebase, String name)
- throws MalformedURLException, ClassNotFoundException
+
+ public static Class loadClass(String codebases, String name)
+ throws MalformedURLException, ClassNotFoundException
{
- StringTokenizer tok = new StringTokenizer(codebase, ":");
- while (tok.hasMoreTokens())
+ ClassLoader loader = (ClassLoader)cacheLoaders.get(codebases);
+ if (loader == null)
{
- try
- {
- return loadClass(new URL(tok.nextToken()), name);
- }
- catch (ClassNotFoundException _)
- {
- // Ignore - try the next one.
- }
+ if (codebases != "")
+ {
+ //codebases are separated by " "
+ StringTokenizer tok = new StringTokenizer(codebases, " ");
+ ArrayList urls = new ArrayList();
+ while (tok.hasMoreTokens())
+ urls.add(new URL(tok.nextToken()));
+
+ loader = new MyClassLoader((URL[])urls.toArray(new URL[urls.size()]),
+ Thread.currentThread().getContextClassLoader());
+ cacheLoaders.put(codebases, loader);
+ cacheClasses.put(loader, Collections.synchronizedMap(new WeakHashMap()));
+ }
+ else
+ {
+ //if codebases is empty, construct a classloader
+ // based on current context classloader,
+ // and we won't cache classloader for empty codebases
+ loader = new MyClassLoader(new URL[]{ defaultCodebase },
+ Thread.currentThread().getContextClassLoader());
+ }
}
- throw new ClassNotFoundException(name);
- }
+ Class c = null;
+ Map classes = (Map)cacheClasses.get(loader);
+ if (classes != null)
+ {
+ c = (Class)classes.get(name);
+ if (c == null)
+ {
+ c = loader.loadClass(name);
+ classes.put(name, c);
+ }
+ }else
+ c = loader.loadClass(name);
+
+ return c;
+ }
+
public static String getClassAnnotation(Class cl)
{
- return null; // We don't yet do this.
+ ClassLoader loader = cl.getClassLoader();
+ if (loader == null)
+ {
+ if (defaultCodebase != null)
+ return defaultCodebase.toExternalForm();
+ else
+ return null;
+ }
+ if (loader instanceof URLClassLoader)
+ {
+ URL[] urls = ((URLClassLoader)loader).getURLs();
+ if(urls.length == 0)
+ return null;
+ StringBuffer annotation = new StringBuffer(urls[0].toExternalForm());
+ for(int i = 1; i < urls.length; i++)
+ {
+ annotation.append(' ');
+ annotation.append(urls[i].toExternalForm());
+ }
+ return annotation.toString();
+ }
+ return null;
}
-
+
/**
* @deprecated
*/
diff --git a/libjava/java/rmi/server/RemoteObject.java b/libjava/java/rmi/server/RemoteObject.java
index e73dfc523df..8ae93ff8844 100644
--- a/libjava/java/rmi/server/RemoteObject.java
+++ b/libjava/java/rmi/server/RemoteObject.java
@@ -48,6 +48,7 @@ import java.io.IOException;
import java.lang.ClassNotFoundException;
import java.lang.InstantiationException;
import java.lang.IllegalAccessException;
+import java.lang.reflect.Constructor;
public abstract class RemoteObject
implements Remote, Serializable {
@@ -68,9 +69,22 @@ public RemoteRef getRef() {
return (ref);
}
-public static Remote toStub(Remote obj) throws NoSuchObjectException {
- throw new Error("Not implemented");
-}
+ public static Remote toStub(Remote obj) throws NoSuchObjectException
+ {
+ Class cls = obj.getClass();
+ String classname = cls.getName();
+ ClassLoader cl = cls.getClassLoader();
+ try
+ {
+ Class scls = cl.loadClass(classname + "_Stub");
+ // JDK 1.2 stubs
+ Class[] stubprototype = new Class[] { RemoteRef.class };
+ Constructor con = scls.getConstructor(stubprototype);
+ return (Remote)(con.newInstance(new Object[]{obj}));
+ }
+ catch (Exception e) {}
+ throw new NoSuchObjectException(obj.getClass().getName());
+ }
public int hashCode() {
if (ref == null) {
@@ -86,30 +100,46 @@ public boolean equals(Object obj) {
return (this == obj);
}
-public String toString() {
- return (ref.toString());
-}
-
-private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
- String cname = in.readUTF();
- if (!cname.equals("")) {
- cname = RemoteRef.packagePrefix + '.' + cname;
- try {
- Class cls = Class.forName(cname);
- ref = (RemoteRef)cls.newInstance();
- }
- catch (InstantiationException e1) {
- throw new UnmarshalException("failed to create ref");
- }
- catch (IllegalAccessException e2) {
- throw new UnmarshalException("failed to create ref");
- }
- ref.readExternal(in);
- }
- else {
- ref = (RemoteRef)in.readObject();
- }
-}
+ public String toString()
+ {
+ if (ref == null)
+ return getClass ().toString ();
+ return (ref.toString ());
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
+ {
+ String cname = in.readUTF();
+ if (!cname.equals(""))
+ {
+ if (cname.equals ("UnicastRef2"))
+ {
+ // hack for interoperating with JDK
+ cname = "UnicastRef";
+ in.read (); //some unknown UnicastRef2 field
+ }
+
+ cname = RemoteRef.packagePrefix + '.' + cname;
+ try
+ {
+ Class cls = Class.forName(cname);
+ ref = (RemoteRef)cls.newInstance();
+ }
+ catch (InstantiationException e1)
+ {
+ throw new UnmarshalException("failed to create ref");
+ }
+ catch (IllegalAccessException e2)
+ {
+ throw new UnmarshalException("failed to create ref");
+ }
+ ref.readExternal(in);
+ }
+ else
+ {
+ ref = (RemoteRef)in.readObject();
+ }
+ }
private void writeObject(ObjectOutputStream out) throws IOException, ClassNotFoundException {
if (ref == null) {
diff --git a/libjava/java/rmi/server/UnicastRemoteObject.java b/libjava/java/rmi/server/UnicastRemoteObject.java
index 5571b9f0b49..a9c4f35099c 100644
--- a/libjava/java/rmi/server/UnicastRemoteObject.java
+++ b/libjava/java/rmi/server/UnicastRemoteObject.java
@@ -42,10 +42,17 @@ import java.rmi.Remote;
import java.rmi.server.RemoteRef;
import java.rmi.NoSuchObjectException;
import gnu.java.rmi.server.UnicastServerRef;
+import gnu.java.rmi.server.UnicastServer;
public class UnicastRemoteObject
extends RemoteServer {
+private static final long serialVersionUID = 4974527148936298033L;
+//The following serialized fields are from Java API Documentation "Serialized form"
+private int port = 0;
+private RMIClientSocketFactory csf = null;
+private RMIServerSocketFactory ssf = null;
+
protected UnicastRemoteObject() throws RemoteException {
this(0);
}
@@ -55,11 +62,21 @@ protected UnicastRemoteObject(int port) throws RemoteException {
}
protected UnicastRemoteObject(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException {
- super(new UnicastServerRef(new ObjID(), port, ssf));
+ this.port = port;
+ //Is RMIXXXSocketFactory serializable
+ //this.csf = csf;
+ //this.ssf = ssf;
+ this.ref = new UnicastServerRef(new ObjID(), port, ssf);
+ //Should we export it here?
+ // if we export, we got infinite recursive call:
+ // UnicastRemoteObject.<init>->...->UnicastServer.startDGC()->UnicastRemoteObject.<init>->...
+ //exportObject(this);
}
protected UnicastRemoteObject(RemoteRef ref) throws RemoteException {
super((UnicastServerRef)ref);
+ //Should we export it here?
+ //exportObject(this);
}
public Object clone() throws CloneNotSupportedException {
@@ -71,16 +88,46 @@ public static RemoteStub exportObject(Remote obj) throws RemoteException {
return (sref.exportObject(obj));
}
-public static Remote exportObject(Remote obj, int port) throws RemoteException {
- return (exportObject(obj));
-}
-
-public static Remote exportObject(Remote obj, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException {
- return (exportObject(obj));
-}
-
-public static boolean unexportObject(Remote obj, boolean force) throws NoSuchObjectException {
- throw new Error("Not implemented");
-}
+ public static Remote exportObject(Remote obj, int port) throws RemoteException
+ {
+ return exportObject(obj, port, null);
+ }
+
+ protected static Remote exportObject(Remote obj, int port, RMIServerSocketFactory ssf)
+ throws RemoteException
+ {
+ UnicastServerRef sref = null;
+ if (obj instanceof RemoteObject)
+ sref = (UnicastServerRef)((RemoteObject)obj).getRef ();
+ if(sref == null)
+ {
+ sref = new UnicastServerRef(new ObjID (), port, ssf);
+ }
+ return (sref.exportObject (obj));
+ }
+
+ /**
+ * FIX ME
+ */
+ public static Remote exportObject(Remote obj, int port, RMIClientSocketFactory csf,
+ RMIServerSocketFactory ssf)
+ throws RemoteException
+ {
+ return (exportObject(obj, port, ssf));
+ }
+
+ public static boolean unexportObject(Remote obj, boolean force)
+ throws RemoteException, NoSuchObjectException
+ {
+ if (obj instanceof RemoteObject)
+ {
+ UnicastServerRef sref = (UnicastServerRef)((RemoteObject)obj).getRef();
+ return sref.unexportObject(obj, force);
+ }
+ else
+ //FIX ME
+ ;
+ return true;
+ }
}
diff --git a/libjava/java/security/Identity.java b/libjava/java/security/Identity.java
index 4230eb06a2c..a1af11273e9 100644
--- a/libjava/java/security/Identity.java
+++ b/libjava/java/security/Identity.java
@@ -64,6 +64,8 @@ import java.util.Vector;
*/
public abstract class Identity implements Principal, Serializable
{
+ static final long serialVersionUID = 3609922007826600659L;
+
private String name;
private IdentityScope scope;
private PublicKey publicKey;
diff --git a/libjava/java/security/KeyPair.java b/libjava/java/security/KeyPair.java
index c6ba61d4cbd..c502add5002 100644
--- a/libjava/java/security/KeyPair.java
+++ b/libjava/java/security/KeyPair.java
@@ -48,6 +48,8 @@ import java.io.Serializable;
*/
public final class KeyPair implements Serializable
{
+ static final long serialVersionUID = -7565189502268009837L;
+
private PublicKey publicKey;
private PrivateKey privateKey;
diff --git a/libjava/java/security/ProtectionDomain.java b/libjava/java/security/ProtectionDomain.java
index 35d6d73a7d8..e8ead466565 100644
--- a/libjava/java/security/ProtectionDomain.java
+++ b/libjava/java/security/ProtectionDomain.java
@@ -53,8 +53,6 @@ package java.security;
*/
public class ProtectionDomain
{
- private static final String linesep = System.getProperty("line.separator");
-
/**
* This is the <code>CodeSource</code> for this protection domain
*/
@@ -131,6 +129,7 @@ public class ProtectionDomain
*/
public String toString()
{
+ String linesep = System.getProperty("line.separator");
StringBuffer sb = new StringBuffer("");
sb.append("ProtectionDomain (" + linesep);
if (code_source == null)
diff --git a/libjava/java/security/Provider.java b/libjava/java/security/Provider.java
index a1a9654b665..d3e3581891e 100644
--- a/libjava/java/security/Provider.java
+++ b/libjava/java/security/Provider.java
@@ -56,6 +56,8 @@ import java.util.Properties;
*/
public abstract class Provider extends Properties implements Serializable
{
+ static final long serialVersionUID = -4298000515446427739L;
+
/**
* This is a textual description of the provider
*/
diff --git a/libjava/java/security/SecureClassLoader.java b/libjava/java/security/SecureClassLoader.java
index 9a4e672f70a..7adba1a9bbc 100644
--- a/libjava/java/security/SecureClassLoader.java
+++ b/libjava/java/security/SecureClassLoader.java
@@ -71,7 +71,7 @@ public class SecureClassLoader extends ClassLoader
@param b the data representing the classfile, in classfile format.
@param off the offset into the data where the classfile starts.
@param len the length of the classfile data in the array.
- @param cs the CodeSource for the class
+ @param cs the CodeSource for the class or null when unknown.
@return the class that was defined and optional CodeSource.
@@ -81,16 +81,14 @@ public class SecureClassLoader extends ClassLoader
CodeSource cs)
{
// FIXME: Need to cache ProtectionDomains according to 1.3 docs.
- ProtectionDomain protectionDomain =
- new ProtectionDomain(cs, getPermissions(cs));
- try
+ if (cs != null)
{
+ ProtectionDomain protectionDomain
+ = new ProtectionDomain(cs, getPermissions(cs));
return super.defineClass(name, b, off, len, protectionDomain);
- }
- catch (ClassFormatError cfe)
- {
- return null;
- }
+ }
+ else
+ return super.defineClass(name, b, off, len);
}
/**
diff --git a/libjava/java/security/SecureRandom.java b/libjava/java/security/SecureRandom.java
index 063c6c1c1b5..31701cb6fd9 100644
--- a/libjava/java/security/SecureRandom.java
+++ b/libjava/java/security/SecureRandom.java
@@ -49,6 +49,8 @@ import java.util.Enumeration;
*/
public class SecureRandom extends Random
{
+ static final long serialVersionUID = 4940670005562187L;
+
//Serialized Field
long counter = 0; //Serialized
MessageDigest digest = null;
diff --git a/libjava/java/security/SecureRandomSpi.java b/libjava/java/security/SecureRandomSpi.java
index a311b8fe5b2..1586994d596 100644
--- a/libjava/java/security/SecureRandomSpi.java
+++ b/libjava/java/security/SecureRandomSpi.java
@@ -50,6 +50,8 @@ import java.io.Serializable;
*/
public abstract class SecureRandomSpi implements Serializable
{
+ static final long serialVersionUID = -2991854161009191830L;
+
/**
Default Constructor for SecureRandomSpi
*/
diff --git a/libjava/java/security/Security.java b/libjava/java/security/Security.java
index 2c73da62dde..9ae90ba365c 100644
--- a/libjava/java/security/Security.java
+++ b/libjava/java/security/Security.java
@@ -59,8 +59,9 @@ public final class Security extends Object
static
{
- loadProviders(System.getProperty("java.vm.name"));
- loadProviders("classpath");
+ loadProviders(System.getProperty("java.home"),
+ System.getProperty("java.vm.name"));
+ loadProviders(System.getProperty("gnu.classpath.home"), "classpath");
}
// This class can't be instantiated.
@@ -68,13 +69,13 @@ public final class Security extends Object
{
}
- private static void loadProviders(String vendor)
+ private static void loadProviders(String dir, String vendor)
{
- if (vendor == null)
+ if (dir == null || vendor == null)
return;
String separator = System.getProperty("file.separator");
- String secfilestr = (System.getProperty("java.home") +
+ String secfilestr = (dir +
separator + "lib" +
separator + "security" +
separator + vendor + ".security");
@@ -263,15 +264,15 @@ public final class Security extends Object
*/
public static Provider getProvider(String name)
{
- Provider p = null;
+ Provider p;
int max = providers.size ();
for (int i = 0; i < max; i++)
{
p = (Provider) providers.elementAt(i);
if (p.getName() == name)
- break;
+ return p;
}
- return p;
+ return null;
}
/**
diff --git a/libjava/java/security/SignedObject.java b/libjava/java/security/SignedObject.java
index 93a99e51a6b..78684e57e73 100644
--- a/libjava/java/security/SignedObject.java
+++ b/libjava/java/security/SignedObject.java
@@ -79,6 +79,8 @@ import java.io.Serializable;
*/
public final class SignedObject implements Serializable
{
+ static final long serialVersionUID = 720502720485447167L;
+
private byte[] content;
private byte[] signature;
private String thealgorithm;
diff --git a/libjava/java/security/cert/Certificate.java b/libjava/java/security/cert/Certificate.java
index 221b2d7f83e..25e8aadf191 100644
--- a/libjava/java/security/cert/Certificate.java
+++ b/libjava/java/security/cert/Certificate.java
@@ -69,7 +69,8 @@ import java.io.ObjectStreamException;
*/
public abstract class Certificate
{
-
+ static final long serialVersionUID = -6751606818319535583L;
+
private String type;
/**
Constructs a new certificate of the specified type. An example
diff --git a/libjava/java/text/Collator.java b/libjava/java/text/Collator.java
index b07045417c1..bb5a3449139 100644
--- a/libjava/java/text/Collator.java
+++ b/libjava/java/text/Collator.java
@@ -153,8 +153,8 @@ public abstract class Collator implements Comparator, Cloneable
* @param str1 The first object to compare
* @param str2 The second object to compare
*
- * @return A negative integer if str1 < str2, 0 if str1 == str2, or
- * a positive integer if str1 > str2.
+ * @return A negative integer if str1 &lt; str2, 0 if str1 == str2, or
+ * a positive integer if str1 &gt; str2.
*/
public abstract int compare (String source, String target);
@@ -167,8 +167,8 @@ public abstract class Collator implements Comparator, Cloneable
* @param obj1 The first object to compare
* @param obj2 The second object to compare
*
- * @return A negative integer if obj1 < obj2, 0 if obj1 == obj2, or
- * a positive integer if obj1 > obj2.
+ * @return A negative integer if obj1 &lt; obj2, 0 if obj1 == obj2, or
+ * a positive integer if obj1 &gt; obj2.
*
* @exception ClassCastException If the arguments are not instances
* of <code>String</code>.
diff --git a/libjava/java/util/zip/natDeflater.cc b/libjava/java/util/zip/natDeflater.cc
index 09411439541..23e1201b543 100644
--- a/libjava/java/util/zip/natDeflater.cc
+++ b/libjava/java/util/zip/natDeflater.cc
@@ -124,6 +124,7 @@ java::util::zip::Deflater::reset ()
z_streamp s = (z_streamp) zstream;
// Just ignore errors.
deflateReset (s);
+ s->avail_in = 0;
flush_flag = 0;
is_finished = false;
}
diff --git a/libjava/java/util/zip/natInflater.cc b/libjava/java/util/zip/natInflater.cc
index 0568b5e85d3..69de6c33560 100644
--- a/libjava/java/util/zip/natInflater.cc
+++ b/libjava/java/util/zip/natInflater.cc
@@ -149,6 +149,7 @@ java::util::zip::Inflater::reset ()
z_streamp s = (z_streamp) zstream;
// Just ignore errors.
inflateReset (s);
+ s->avail_in = 0;
is_finished = false;
dict_needed = false;
}
diff --git a/libjava/javax/naming/BinaryRefAddr.java b/libjava/javax/naming/BinaryRefAddr.java
index d0a3a030f86..6942aec3ed0 100644
--- a/libjava/javax/naming/BinaryRefAddr.java
+++ b/libjava/javax/naming/BinaryRefAddr.java
@@ -50,6 +50,7 @@ import java.util.Arrays;
*/
public class BinaryRefAddr extends RefAddr
{
+ static final long serialVersionUID = -3415254970957330361L;
/**
* The possibly null content of this RefAddr.
diff --git a/libjava/javax/naming/Name.java b/libjava/javax/naming/Name.java
index 7c3e6d7ef8e..4a10f321f9c 100644
--- a/libjava/javax/naming/Name.java
+++ b/libjava/javax/naming/Name.java
@@ -62,6 +62,8 @@ import java.io.Serializable;
*/
public interface Name extends Cloneable, Serializable
{
+ static final long serialVersionUID = -3617482732056931635L;
+
/**
* Returns the number of components of this <code>Name</code>.
* The returned number can be zero.
diff --git a/libjava/javax/swing/AbstractListModel.java b/libjava/javax/swing/AbstractListModel.java
index 13518cafa19..f1033cf9781 100644
--- a/libjava/javax/swing/AbstractListModel.java
+++ b/libjava/javax/swing/AbstractListModel.java
@@ -188,6 +188,15 @@ public abstract class AbstractListModel implements ListModel, Serializable {
} // getListeners()
/**
+ * getListDataListeners
+ */
+ public ListDataListener[] getListDataListeners()
+ {
+ // FIXME: implement this
+ return null;
+ }
+
+ /**
* getElementAt
* @param index TODO
* @returns Object
diff --git a/libjava/javax/swing/DefaultBoundedRangeModel.java b/libjava/javax/swing/DefaultBoundedRangeModel.java
index 82ab7675890..a0b1abd618d 100644
--- a/libjava/javax/swing/DefaultBoundedRangeModel.java
+++ b/libjava/javax/swing/DefaultBoundedRangeModel.java
@@ -334,5 +334,14 @@ public class DefaultBoundedRangeModel implements BoundedRangeModel, Serializable
return listenerList.getListeners(c);
} // getListeners()
+ /**
+ * getChangeListeners
+ */
+ public ChangeListener[] getChangeListeners()
+ {
+ // FIXME: implement this
+ return null;
+ }
+
} // DefaultBoundedRangeModel
diff --git a/libjava/javax/swing/DefaultSingleSelectionModel.java b/libjava/javax/swing/DefaultSingleSelectionModel.java
index 50a35d9d9a5..a55c911c3a8 100644
--- a/libjava/javax/swing/DefaultSingleSelectionModel.java
+++ b/libjava/javax/swing/DefaultSingleSelectionModel.java
@@ -175,5 +175,14 @@ public class DefaultSingleSelectionModel implements
return listenerList.getListeners(listenerClass);
} // getListeners()
+ /**
+ * getChangeListeners
+ */
+ public ChangeListener[] getChangeListeners()
+ {
+ // FIXME: implement this
+ return null;
+ }
+
} // DefaultSingleSelectionModel
diff --git a/libjava/mauve-libgcj b/libjava/mauve-libgcj
index deda5cb1f01..64ee52e1cc8 100644
--- a/libjava/mauve-libgcj
+++ b/libjava/mauve-libgcj
@@ -7,28 +7,16 @@ JDK1.4
JLS1.0
JLS1.1
JLS1.2
+JDBC1.0
JDBC2.0
-# These 2 are tests that fail with JDBC2.0 but the tags don't seem to
-# have the right effect.
-!java.sql.Connection.TestJdbc10
-!java.sql.DatabaseMetaData.TestJdbc10
-
-# We now implement JDBC3.0 which means the following tests don't compile
-!java.sql.Blob.BlobTest
-!java.sql.Clob.ClobTest
-!java.sql.Connection.TestJdbc20
-!java.sql.DatabaseMetaData.TestJdbc20
-
# Cannot be compiled
!java.text.ACIAttribute
-# The following tests seem to (sometimes) hang or crash the testsuite
+# The following tests seem to hang or crash the testsuite.
+# This a problem when running Mauve "standalone".
!java.io.ObjectInputOutput
!java.lang.reflect.Array.newInstance
-!java.util.ResourceBundle.getBundle
-!java.util.zip.GZIPInputStream.basic
-!java.net.DatagramSocket.DatagramSocketTest2
# Character.unicode seems to be very broken (the test)
# Does not give meaningfull test results at the moment.
@@ -36,4 +24,5 @@ JDBC2.0
# These are almost certainly buggy test cases.
# The behaviour of the garbarge collector cannot be predicted.
-!java.lang.ref
+# Note the . at the end so we do test java.lang.reflect
+!java.lang.ref.
diff --git a/libjava/sysdep/x86-64/locks.h b/libjava/sysdep/x86-64/locks.h
index cb6be85951b..bad6de6dc6f 100644
--- a/libjava/sysdep/x86-64/locks.h
+++ b/libjava/sysdep/x86-64/locks.h
@@ -24,10 +24,17 @@ inline static bool
compare_and_swap(volatile obj_addr_t *addr, obj_addr_t old, obj_addr_t new_val)
{
char result;
+#ifdef __x86_64__
__asm__ __volatile__("lock; cmpxchgq %2, %0; setz %1"
: "+m"(*(addr)), "=q"(result)
: "r" (new_val), "a"(old)
: "memory");
+#else
+ __asm__ __volatile__("lock; cmpxchgl %2, %0; setz %1"
+ : "+m"(*(addr)), "=q"(result)
+ : "r" (new_val), "a"(old)
+ : "memory");
+#endif
return (bool) result;
}
diff --git a/libjava/testsuite/ChangeLog b/libjava/testsuite/ChangeLog
index adb0e1e246b..6252d3f5cdd 100644
--- a/libjava/testsuite/ChangeLog
+++ b/libjava/testsuite/ChangeLog
@@ -1,3 +1,22 @@
+2002-10-15 Andrew Haley <aph@redhat.com>
+
+ * libjava.lang/EvaluationOrder.java (EvaluationOrder): New.
+ * libjava.lang/EvaluationOrder.out (EvaluationOrder): New.
+
+2002-10-14 Andrew Haley <aph@redhat.com>
+
+ * libjava.lang/StaticConstructor.java: New.
+ * libjava.lang/StaticConstructor.out: New.
+
+2002-10-13 Mark Wielaard <mark@klomp.org>
+
+ * libjava.mauve/xfails: Remove tests that now XPASS.
+
+2002-10-03 Andrew Haley <aph@redhat.com>
+
+ * libjava.lang/Array_3.java (baz): New.
+ (main): Call baz.
+
2002-09-29 Anthony Green <green@redhat.com>
* libjava.lang/TestProxy.java: New file.
diff --git a/libjava/testsuite/Makefile.in b/libjava/testsuite/Makefile.in
index 46247a6c279..e5ed9768763 100644
--- a/libjava/testsuite/Makefile.in
+++ b/libjava/testsuite/Makefile.in
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
diff --git a/libjava/testsuite/libjava.lang/Array_3.java b/libjava/testsuite/libjava.lang/Array_3.java
index 453387d51fb..e94549a0f4e 100644
--- a/libjava/testsuite/libjava.lang/Array_3.java
+++ b/libjava/testsuite/libjava.lang/Array_3.java
@@ -12,6 +12,13 @@ public class Array_3
return null;
}
+ static int baz ()
+ {
+ int[] x = (int[])null;
+ int nn = x.length;
+ return 5;
+ }
+
public static void main(String args[])
{
boolean ok = false;
@@ -68,5 +75,17 @@ public class Array_3
}
if (!ok)
throw new RuntimeException("test failed:4");
+
+ ok = false;
+ try
+ {
+ nn = baz ();
+ }
+ catch (NullPointerException _)
+ {
+ ok = true;
+ }
+ if (!ok)
+ throw new RuntimeException("test failed:5");
}
}
diff --git a/libjava/testsuite/libjava.mauve/xfails b/libjava/testsuite/libjava.mauve/xfails
index 1594a3b8ea0..ff8b9a83920 100644
--- a/libjava/testsuite/libjava.mauve/xfails
+++ b/libjava/testsuite/libjava.mauve/xfails
@@ -35,10 +35,7 @@ FAIL: gnu.testlet.java.lang.Character.getType (number 22)
FAIL: gnu.testlet.java.lang.Class.ClassTest: Error: test_getClassLoader failed - 1 (number 1)
FAIL: gnu.testlet.java.lang.Class.ClassTest: Error: test_getClassLoader failed - 2 (number 1)
FAIL: gnu.testlet.java.lang.Double.DoubleTest: Error: test_intValue returned wrong results CYGNUS: Float to int conversions - 1 (number 1)
-FAIL: gnu.testlet.java.lang.Double.DoubleTest: Error: test_longValue returned wrong results CYGNUS: Float to int conversions - 1 (number 1)
FAIL: gnu.testlet.java.lang.Float.FloatTest: Error: test_intValue returned wrong results - 1 (number 1)
-FAIL: gnu.testlet.java.lang.String.CASE_INSENSITIVE_ORDER: unicode mappings (number 1)
-FAIL: gnu.testlet.java.lang.String.CASE_INSENSITIVE_ORDER: unicode mappings (number 2)
FAIL: gnu.testlet.java.text.AttributedString.Test: Attribute key count (number 1)
FAIL: gnu.testlet.java.text.DateFormatSymbols.Test: patterns (number 2)
FAIL: gnu.testlet.java.text.SimpleDateFormat.Test: equals() (number 1)
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 5309c0a6b32..0cd9e614a43 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,263 @@
+2002-10-18 Loren J. Rittle <ljrittle@acm.org>
+
+ * configure.target (freebsd*): Use abi_baseline_triplet.
+ * config/abi/i386-unknown-freebsd4/baseline_symbols.txt: New file.
+ * config/abi/i386-unknown-freebsd4.7/baseline_symbols.txt: Remove.
+
+ * testsuite/thread/pthread1.cc: Remove needless workaround
+ for FreeBSD 5.
+
+2002-10-18 Loren J. Rittle <ljrittle@acm.org>
+ Brad Spencer <spencer@infointeractive.com> (provided alternate
+ patch and improvements)
+
+ * docs/html/23_containers/howto.html (GLIBCPP_FORCE_NEW): Document
+ new environment variable which replaces all uses of __USE_MALLOC
+ macro.
+ * docs/html/ext/howto.html (GLIBCPP_FORCE_NEW): Likewise.
+ (__mem_interface): Remove all references to old internal typedef.
+ * include/backward/alloc.h (__USE_MALLOC): Remove it and all
+ guarded code.
+ * include/bits/c++config (__USE_MALLOC): Update related error
+ message and comment.
+ * include/bits/stl_alloc.h (__USE_MALLOC): Remove it and all
+ guarded code. Update all related comments.
+ (__mem_interface): Unconditionally replace it with __new_alloc.
+ However, leave the typedef around in case anyone used it.
+ (__default_alloc_template<>::_S_force_new): New class static.
+ (__default_alloc_template<>::allocate, deallocate): Add
+ run-time controlled feature similar to what __USE_MALLOC code
+ path had provided.
+ * src/stl-inst.cc (__USE_MALLOC): Remove it and all
+ guarded code.
+ * testsuite/21_strings/capacity.cc: Remove reference to __USE_MALLOC.
+ Add documentation on GLIBCPP_FORCE_NEW environment variable.
+ * testsuite/ext/allocators.cc: Likewise.
+
+2002-10-18 Phil Edwards <pme@gcc.gnu.org>
+
+ * configure.in: Use target, not target_alias, when matching triplet
+ patterns.
+ * configure: Regenerate.
+
+2002-10-17 Momchil Velikov <velco@fadata.bg>
+ Loren J. Rittle <ljrittle@acm.org>
+
+ * configure.in: Add *-freebsd* to cross list.
+ * configure: Rebuilt.
+
+2002-10-16 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/locale_facets.h (__timepunct::__timepunct): Allocate
+ _M_name_timepunct.
+ (__timepunct::~__timepunct): Deallocate, remove specialization
+ declarations.
+ (messages::messages): Allocate _M_name_messages.
+ (messages::~messages): Deallocate.
+ (messages_byname): Same.
+ * config/locale/gnu/time_members.cc (__timepunct::~__timepunct):
+ Remove.
+ * config/locale/generic/time_members.cc (__timepunct::~__timepunct):
+ Remove.
+
+ * docs/html/install.html: Add es_MX, en_PH to required locales list.
+
+2002-10-16 Benjamin Kosnik <bkoz@redhat.com>
+
+ * config/linker-map.gnu: Add exports for codecvt constructors
+ where size_t == unsigned long.
+
+2002-10-14 Benjamin Kosnik <bkoz@redhat.com>
+
+ * src/globals.cc (__gnu_cxx::c_locale_impl_compat): Add, alias to
+ c_locale_impl.
+ * testsuite/abi_check.cc (line_to_symbol_info): Collect size info.
+ * docs/html/abi.txt: Update.
+
+2002-10-14 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/22_locale/static_members.cc (test02): Less provincial.
+
+2002-10-14 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/22_locale/static_members.cc (test02): Disable for
+ systems without named locale support.
+ * testsuite/22_locale/ctor_copy_dtor.cc (test04): Don't assume
+ running the testsuites in "C" environment.
+ Add new tests.
+ * docs/html/22_locale/locale.html: Update.
+
+2002-10-13 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * include/bits/stl_threads.h (_GLIBCPP_mutex,
+ _GLIBCPP_mutex_init,_GLIBCPP_mutex_address,
+ _GLIBCPP_mutex_address_init, _GLIBCPP_once):
+ Declare in namespace __gnu_cxx.
+ (_STL_mutex_lock::_M_initialize): Qualify __gnu_cxx
+ names.
+ Adjust copyright.
+
+2002-10-12 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/abi_check.cc (hash<string>): Specialize.
+ Simplify. Check compatible symbol versions.
+ * config/linker-map.gnu: Clarify, explicitly export
+ std::codecvt::c* symbols.
+
+ * testsuite/22_locale/static_members.cc (test02): Avoid null strings.
+
+2002-10-12 Jonathan Wakely <jw@kayari.org>
+ Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * docs/html/21_strings/howto.html#5: Correct nasting of XHTML
+ elements. Correct allocator-related text.
+
+2002-10-11 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/22_locale/static_members.cc (test02): Fix.
+
+2002-10-11 Benjamin Kosnik <bkoz@redhat.com>
+
+ * acconfig.h (_GLIBCPP_SYMVER): Add.
+ (_GLIBCPP_ASM_SYMVER): Add.
+ * acinclude.m4 (GLIBCPP_ENABLE_SYMVERS): Define _GLIBCPP_SYMVER.
+ * aclocal.m4: Regenerate.
+ * config.h.in: Regenerate.
+ * configure: Regenerate.
+ * include/bits/c++config (_GLIBCPP_AT_AT): Define, as an expedient
+ hack around m4 issues with quoting '@'.
+ * src/locale.cc: Use _GLIBCPP_ASM_SYMVER.
+ * src/globals.cc: Same.
+
+ * testsuite/22_locale/ctor_copy_dtor.cc (test04): Fix for
+ non-glibc systems.
+
+2002-10-10 Benjamin Kosnik <bkoz@redhat.com>
+
+ * config/linker-map.gnu (GLIBCPP_3.2.1): Add.
+ (GLIBCPP_3.2): Don't export locale::_S_*.
+ * src/ios.cc: Move globals into __gnu_cxx. Make old exported
+ symbols match.
+ * src/locale.cc: Same.
+ * src/localename.cc: Same.
+ * src/globals.cc: Same.
+
+2002-10-10 Phil Edwards <pme@gcc.gnu.org>
+
+ * docs/html/21_strings/howto.html: Write #5, char_traits.
+ * docs/html/17_intro/porting.texi: Expand on os_include_dir.
+ * docs/html/17_intro/porting.html: Regenerate.
+
+2002-10-09 Benjamin Kosnik <bkoz@redhat.com>
+
+ * src/locale.cc: Fix comments, move ctors together.
+ * testsuite/22_locale/static_members.cc (test03): Add.
+
+2002-10-08 Jonathan Lennox <lennox@cs.columbia.edu>
+
+ PR libstdc++/8071, libstdc++/8127, libstdc++/6745
+ * streambuf.tcc (__copy_streambufs): Handle cases where
+ __sbin->in_avail() returns 0, or where __sbin doesn't set gptr().
+ * testsuite/27_io/ostream_inserter_other.cc (test05): Add.
+
+2002-10-08 Paolo Carlini <pcarlini@unitus.it>
+ Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/localefwd.h (class locale): Add static member
+ _S_num_extra_categories, encoding the number of additional
+ categories.
+ Change _S_num_categories to _S_categories_size.
+ (class locale::_Impl): Add _M_c_cats.
+ (class locale::_Impl::_M_names): Change to array of chars.
+ (class locale::_Impl::_M_check_same_name): Use
+ _S_extra_categories_size, tweak.
+ (locale::locale(const locale&, _Facet*)): Ditto.
+ * src/locale.cc (locale::locale(const char* )): Rewrite to deal
+ with the environment in a POSIX-compliant way while being thread
+ safe.
+ (locale::name()): Update to output POSIX environment strings.
+ * src/localename.cc
+ (locale::_Impl::_Impl(const _Impl&, size_t): Use
+ _S_categories_size_*, tweak.
+ (locale::_Impl::_Impl(facet**, size_t, bool)): Ditto.
+ (locale::_Impl::_Impl(const char*, size_t)): Name each category
+ individually.
+ (locale::_Impl::_M_replace_categories): Use strcpy.
+
+ * include/bits/locale_facets.h (numpunct::_M_initialize_numpunct):
+ Change default argument to NULL from _S_c_locale.
+ (timepunct::_M_initialize_timepunct): Same.
+ _S_c_locale cleanups.
+ * src/codecvt.c: _S_c_locale simplification.
+ * src/ctype.c: Same.
+ * src/globals.cc: Add fake_name.
+ * src/locale-inst.cc: Remove extra includes.
+ * src/locale.cc: Remove extra includes.
+ Add _S_extra_categories_size definition.
+ Correct "C" initialization.
+ (locale::facet::facet): Don't initialize _S_c_locale.
+ (locale::facet::_M_remove_reference): Adjust.
+ * src/localename: Use facet_vec, facet_name.
+ (locale::_Impl::_Impl(facet** __f, size_t __refs, bool)): Set
+ facet ref counts to one. Initialize _S_c_locale.
+ (locale::_Impl::_M_install_facet(id*, facet*)): Adjust facet ref
+ counts when installing unilaterally.
+
+ * config/locale/generic/c_locale.cc: Add _S_categories definition.
+ * config/locale/generic/c_locale.h: Add _GLIBCPP_NUM_CATEGORIES macro.
+ * config/locale/generic/time_members.cc: _S_c_locale cleanup.
+
+ * config/locale/gnu/c_locale.cc: Add _S_categories definition.
+ (_S_destroy_c_locale): Move checks against _S_c_locale here.
+ * config/locale/gnu/c_locale.h: Add _GLIBCPP_NUM_CATEGORIES macro.
+ * config/locale/gnu/ctype_members.cc: Simplify _S_destroy_c_locale
+ calls, _S_c_locale usage.
+ * config/locale/gnu/monetary_members.cc: Same, tweaks.
+ * config/locale/gnu/monetary_members.cc: Same.
+ * config/locale/gnu/time_members.cc: Same.
+ * config/os/gnu-linux/ctype_noninline.h: Use locale::classic().
+
+ * docs/html/22_locale/locale.html: Add bits about global locales
+ and "C" setlocale.
+
+ * testsuite/22_locale/facet.cc (test02): Add.
+ * testsuite/22_locale/static_members.cc (test02): Add.
+ * testsuite/22_locale/ctor_copy_dtor.cc (test04): Add.
+
+2002-10-07 Jonathan Wakely <jw@kayari.org>
+
+ * docs/html/configopts.html, docs/html/documentation.html,
+ docs/html/explanations.html, docs/html/install.html,
+ docs/html/17_intro/contribute.html, docs/html/17_intro/howto.html,
+ docs/html/17_intro/license.html, docs/html/18_support/howto.html,
+ docs/html/19_diagnostics/howto.html, docs/html/20_util/howto.html,
+ docs/html/21_strings/howto.html, docs/html/22_locale/codecvt.html,
+ docs/html/22_locale/ctype.html, docs/html/22_locale/howto.html,
+ docs/html/22_locale/locale.html, docs/html/22_locale/messages.html,
+ docs/html/23_containers/howto.html, docs/html/24_iterators/howto.html,
+ docs/html/25_algorithms/howto.html, docs/html/26_numerics/howto.html,
+ docs/html/27_io/howto.html, docs/html/ext/howto.html,
+ docs/html/ext/sgiexts.html, docs/html/faq/index.html: Add DOCTYPEs.
+
+2002-10-03 Richard Earnshaw <rearnsha@arm.com>
+
+ PR libstdc++/3584
+ * config/cpu/arm/atomicity.h (__exchange_and_add): Don't try to use
+ ASM sequences that don't give us atomic addition operations. Instead
+ just add a comment explaining why it doesn't work.
+ (__atomic_add): Just use __exchange_and_add.
+ (__test_and_set, __always_swap): Delete.
+
+2002-10-02 Andreas Jaeger <aj@suse.de>
+
+ * config/abi/x86_64-unknown-linux-gnu/baseline_symbols.txt:
+ New file.
+
+2002-10-01 Phil Edwards <pme@gcc.gnu.org>
+
+ * Makefile.am (check-abi): Add @ to rule.
+ * Makefile.in: Regenerated.
+
2002-09-27 Paolo Carlini <pcarlini@unitus.it>
* include/bits/locale_facets.tcc (num_put::_M_widen_int):
diff --git a/libstdc++-v3/Makefile.am b/libstdc++-v3/Makefile.am
index c8c1df1d6ed..ef884fbff27 100644
--- a/libstdc++-v3/Makefile.am
+++ b/libstdc++-v3/Makefile.am
@@ -50,7 +50,7 @@ check-script-install: $(top_builddir)/mkcheck
# 'check-abi' to test for changes against that file.
baseline_file = @baseline_file@
check-abi: $(top_builddir)/testsuite/abi_check
- -(cd testsuite; \
+ -@(cd testsuite; \
${top_srcdir}/config/abi/extract_symvers \
../src/.libs/libstdc++.so \
./current_symbols.txt && \
diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in
index 6d83bd1c6f0..7d0551f6ca3 100644
--- a/libstdc++-v3/Makefile.in
+++ b/libstdc++-v3/Makefile.in
@@ -486,7 +486,7 @@ check-script-install: $(top_builddir)/mkcheck
cd testsuite; \
@glibcpp_builddir@/mkcheck 1)
check-abi: $(top_builddir)/testsuite/abi_check
- -(cd testsuite; \
+ -@(cd testsuite; \
${top_srcdir}/config/abi/extract_symvers \
../src/.libs/libstdc++.so \
./current_symbols.txt && \
diff --git a/libstdc++-v3/acconfig.h b/libstdc++-v3/acconfig.h
index aa0dd99cfa9..777e94a5039 100644
--- a/libstdc++-v3/acconfig.h
+++ b/libstdc++-v3/acconfig.h
@@ -46,6 +46,20 @@
// Define if you have the copysignf function.
#undef _GLIBCPP_HAVE_COPYSIGNF
+// Define to use symbol versioning in the shared library.
+#undef _GLIBCPP_SYMVER
+
+// Define symbol versioning in assember directives. If symbol
+// versioning is beigng used, and the assembler supports this kind of
+// thing, then use it.
+// NB: _GLIBCPP_AT_AT is a hack to work around quoting issues in m4.
+#if _GLIBCPP_SYMVER
+ #define _GLIBCPP_ASM_SYMVER(cur, old, version) \
+ asm (".symver " #cur "," #old _GLIBCPP_AT_AT #version);
+#else
+ #define _GLIBCPP_ASM_SYMVER(cur, old, version)
+#endif
+
// Define if mbstate_t exists in wchar.h.
#undef HAVE_MBSTATE_T
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index f0a7c365ef1..2bfec92da0f 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -2194,6 +2194,7 @@ case $enable_symvers in
;;
gnu)
LINKER_MAP=config/linker-map.gnu
+ AC_DEFINE(_GLIBCPP_SYMVER)
;;
esac
diff --git a/libstdc++-v3/aclocal.m4 b/libstdc++-v3/aclocal.m4
index 2aed25b9601..3bde35d3b3f 100644
--- a/libstdc++-v3/aclocal.m4
+++ b/libstdc++-v3/aclocal.m4
@@ -2206,6 +2206,7 @@ case $enable_symvers in
;;
gnu)
LINKER_MAP=config/linker-map.gnu
+ AC_DEFINE(_GLIBCPP_SYMVER)
;;
esac
diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in
index a310bc8454d..c565a8ba006 100644
--- a/libstdc++-v3/config.h.in
+++ b/libstdc++-v3/config.h.in
@@ -24,6 +24,20 @@
// Define to use concept checking code from the boost libraries.
#undef _GLIBCPP_CONCEPT_CHECKS
+// Define to use symbol versioning in the shared library.
+#undef _GLIBCPP_SYMVER
+
+// Define symbol versioning in assember directives. If symbol
+// versioning is beigng used, and the assembler supports this kind of
+// thing, then use it.
+// NB: _GLIBCPP_AT_AT is a hack to work around quoting issues in m4.
+#if _GLIBCPP_SYMVER
+ #define _GLIBCPP_ASM_SYMVER(cur, old, version) \
+ asm (".symver " #cur "," #old _GLIBCPP_AT_AT #version);
+#else
+ #define _GLIBCPP_ASM_SYMVER(cur, old, version)
+#endif
+
// Define if mbstate_t exists in wchar.h.
#undef HAVE_MBSTATE_T
diff --git a/libstdc++-v3/config/abi/i386-unknown-freebsd4.6/baseline_symbols.txt b/libstdc++-v3/config/abi/i386-unknown-freebsd4.6/baseline_symbols.txt
deleted file mode 100644
index c5b8fa0a739..00000000000
--- a/libstdc++-v3/config/abi/i386-unknown-freebsd4.6/baseline_symbols.txt
+++ /dev/null
@@ -1,2008 +0,0 @@
-FUNC:_ZN9__gnu_cxx27__verbose_terminate_handlerEv@@CXXABI_1.2
-FUNC:_ZNKSaIcE7addressERKc@@GLIBCPP_3.2
-FUNC:_ZNKSaIcE7addressERc@@GLIBCPP_3.2
-FUNC:_ZNKSaIcE8max_sizeEv@@GLIBCPP_3.2
-FUNC:_ZNKSaIwE7addressERKw@@GLIBCPP_3.2
-FUNC:_ZNKSaIwE7addressERw@@GLIBCPP_3.2
-FUNC:_ZNKSaIwE8max_sizeEv@@GLIBCPP_3.2
-FUNC:_ZNKSi6gcountEv@@GLIBCPP_3.2
-FUNC:_ZNKSs12find_last_ofEPKcj@@GLIBCPP_3.2
-FUNC:_ZNKSs12find_last_ofEPKcjj@@GLIBCPP_3.2
-FUNC:_ZNKSs12find_last_ofERKSsj@@GLIBCPP_3.2
-FUNC:_ZNKSs12find_last_ofEcj@@GLIBCPP_3.2
-FUNC:_ZNKSs13find_first_ofEPKcj@@GLIBCPP_3.2
-FUNC:_ZNKSs13find_first_ofEPKcjj@@GLIBCPP_3.2
-FUNC:_ZNKSs13find_first_ofERKSsj@@GLIBCPP_3.2
-FUNC:_ZNKSs13find_first_ofEcj@@GLIBCPP_3.2
-FUNC:_ZNKSs13get_allocatorEv@@GLIBCPP_3.2
-FUNC:_ZNKSs16find_last_not_ofEPKcj@@GLIBCPP_3.2
-FUNC:_ZNKSs16find_last_not_ofEPKcjj@@GLIBCPP_3.2
-FUNC:_ZNKSs16find_last_not_ofERKSsj@@GLIBCPP_3.2
-FUNC:_ZNKSs16find_last_not_ofEcj@@GLIBCPP_3.2
-FUNC:_ZNKSs17find_first_not_ofEPKcj@@GLIBCPP_3.2
-FUNC:_ZNKSs17find_first_not_ofEPKcjj@@GLIBCPP_3.2
-FUNC:_ZNKSs17find_first_not_ofERKSsj@@GLIBCPP_3.2
-FUNC:_ZNKSs17find_first_not_ofEcj@@GLIBCPP_3.2
-FUNC:_ZNKSs2atEj@@GLIBCPP_3.2
-FUNC:_ZNKSs3endEv@@GLIBCPP_3.2
-FUNC:_ZNKSs4_Rep12_M_is_leakedEv@@GLIBCPP_3.2
-FUNC:_ZNKSs4_Rep12_M_is_sharedEv@@GLIBCPP_3.2
-FUNC:_ZNKSs4copyEPcjj@@GLIBCPP_3.2
-FUNC:_ZNKSs4dataEv@@GLIBCPP_3.2
-FUNC:_ZNKSs4findEPKcj@@GLIBCPP_3.2
-FUNC:_ZNKSs4findEPKcjj@@GLIBCPP_3.2
-FUNC:_ZNKSs4findERKSsj@@GLIBCPP_3.2
-FUNC:_ZNKSs4findEcj@@GLIBCPP_3.2
-FUNC:_ZNKSs4rendEv@@GLIBCPP_3.2
-FUNC:_ZNKSs4sizeEv@@GLIBCPP_3.2
-FUNC:_ZNKSs5beginEv@@GLIBCPP_3.2
-FUNC:_ZNKSs5c_strEv@@GLIBCPP_3.2
-FUNC:_ZNKSs5emptyEv@@GLIBCPP_3.2
-FUNC:_ZNKSs5rfindEPKcj@@GLIBCPP_3.2
-FUNC:_ZNKSs5rfindEPKcjj@@GLIBCPP_3.2
-FUNC:_ZNKSs5rfindERKSsj@@GLIBCPP_3.2
-FUNC:_ZNKSs5rfindEcj@@GLIBCPP_3.2
-FUNC:_ZNKSs6_M_repEv@@GLIBCPP_3.2
-FUNC:_ZNKSs6lengthEv@@GLIBCPP_3.2
-FUNC:_ZNKSs6rbeginEv@@GLIBCPP_3.2
-FUNC:_ZNKSs6substrEjj@@GLIBCPP_3.2
-FUNC:_ZNKSs7_M_dataEv@@GLIBCPP_3.2
-FUNC:_ZNKSs7_M_foldEjj@@GLIBCPP_3.2
-FUNC:_ZNKSs7_M_iendEv@@GLIBCPP_3.2
-FUNC:_ZNKSs7compareEPKc@@GLIBCPP_3.2
-FUNC:_ZNKSs7compareERKSs@@GLIBCPP_3.2
-FUNC:_ZNKSs7compareEjjPKc@@GLIBCPP_3.2
-FUNC:_ZNKSs7compareEjjPKcj@@GLIBCPP_3.2
-FUNC:_ZNKSs7compareEjjRKSs@@GLIBCPP_3.2
-FUNC:_ZNKSs7compareEjjRKSsjj@@GLIBCPP_3.2
-FUNC:_ZNKSs8_M_checkEj@@GLIBCPP_3.2
-FUNC:_ZNKSs8capacityEv@@GLIBCPP_3.2
-FUNC:_ZNKSs8max_sizeEv@@GLIBCPP_3.2
-FUNC:_ZNKSs9_M_ibeginEv@@GLIBCPP_3.2
-FUNC:_ZNKSsixEj@@GLIBCPP_3.2
-FUNC:_ZNKSt10istrstream5rdbufEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE10neg_formatEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE10pos_formatEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE11curr_symbolEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE11do_groupingEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE11frac_digitsEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE13decimal_pointEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE13do_neg_formatEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE13do_pos_formatEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE13negative_signEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE13positive_signEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE13thousands_sepEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE14do_curr_symbolEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE14do_frac_digitsEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE16do_decimal_pointEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE16do_negative_signEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE16do_positive_signEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE16do_thousands_sepEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb0EE8groupingEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE10neg_formatEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE10pos_formatEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE11curr_symbolEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE11do_groupingEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE11frac_digitsEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE13decimal_pointEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE13do_neg_formatEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE13do_pos_formatEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE13negative_signEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE13positive_signEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE13thousands_sepEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE14do_curr_symbolEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE14do_frac_digitsEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE16do_decimal_pointEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE16do_negative_signEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE16do_positive_signEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE16do_thousands_sepEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10moneypunctIcLb1EE8groupingEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10ostrstream5rdbufEv@@GLIBCPP_3.2
-FUNC:_ZNKSt10ostrstream6pcountEv@@GLIBCPP_3.2
-FUNC:_ZNKSt11__timepunctIcE15_M_date_formatsEPPKc@@GLIBCPP_3.2
-FUNC:_ZNKSt11__timepunctIcE15_M_time_formatsEPPKc@@GLIBCPP_3.2
-FUNC:_ZNKSt11__timepunctIcE19_M_days_abbreviatedEPPKc@@GLIBCPP_3.2
-FUNC:_ZNKSt11__timepunctIcE20_M_date_time_formatsEPPKc@@GLIBCPP_3.2
-FUNC:_ZNKSt11__timepunctIcE21_M_months_abbreviatedEPPKc@@GLIBCPP_3.2
-FUNC:_ZNKSt11__timepunctIcE6_M_putEPcjPKcPK2tm@@GLIBCPP_3.2
-FUNC:_ZNKSt11__timepunctIcE7_M_ampmEPPKc@@GLIBCPP_3.2
-FUNC:_ZNKSt11__timepunctIcE7_M_daysEPPKc@@GLIBCPP_3.2
-FUNC:_ZNKSt11__timepunctIcE9_M_monthsEPPKc@@GLIBCPP_3.2
-FUNC:_ZNKSt11logic_error4whatEv@@GLIBCPP_3.2
-FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCPP_3.2
-FUNC:_ZNKSt12strstreambuf6pcountEv@@GLIBCPP_3.2
-FUNC:_ZNKSt13basic_filebufIcSt11char_traitsIcEE7is_openEv@@GLIBCPP_3.2
-FUNC:_ZNKSt13basic_fstreamIcSt11char_traitsIcEE5rdbufEv@@GLIBCPP_3.2
-FUNC:_ZNKSt13runtime_error4whatEv@@GLIBCPP_3.2
-FUNC:_ZNKSt14basic_ifstreamIcSt11char_traitsIcEE5rdbufEv@@GLIBCPP_3.2
-FUNC:_ZNKSt14basic_ofstreamIcSt11char_traitsIcEE5rdbufEv@@GLIBCPP_3.2
-FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE4gptrEv@@GLIBCPP_3.2
-FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE4pptrEv@@GLIBCPP_3.2
-FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE5ebackEv@@GLIBCPP_3.2
-FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE5egptrEv@@GLIBCPP_3.2
-FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE5epptrEv@@GLIBCPP_3.2
-FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE5pbaseEv@@GLIBCPP_3.2
-FUNC:_ZNKSt15basic_streambufIcSt11char_traitsIcEE6getlocEv@@GLIBCPP_3.2
-FUNC:_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCPP_3.2
-FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCPP_3.2
-FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCPP_3.2
-FUNC:_ZNKSt19basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCPP_3.2
-FUNC:_ZNKSt19basic_istringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCPP_3.2
-FUNC:_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCPP_3.2
-FUNC:_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCPP_3.2
-FUNC:_ZNKSt19istreambuf_iteratorIcSt11char_traitsIcEE6_M_getEv@@GLIBCPP_3.2
-FUNC:_ZNKSt5ctypeIcE10do_scan_isEmPKcS2_@@GLIBCPP_3.2
-FUNC:_ZNKSt5ctypeIcE10do_tolowerEPcPKc@@GLIBCPP_3.2
-FUNC:_ZNKSt5ctypeIcE10do_tolowerEc@@GLIBCPP_3.2
-FUNC:_ZNKSt5ctypeIcE10do_toupperEPcPKc@@GLIBCPP_3.2
-FUNC:_ZNKSt5ctypeIcE10do_toupperEc@@GLIBCPP_3.2
-FUNC:_ZNKSt5ctypeIcE11do_scan_notEmPKcS2_@@GLIBCPP_3.2
-FUNC:_ZNKSt5ctypeIcE5do_isEPKcS2_Pm@@GLIBCPP_3.2
-FUNC:_ZNKSt5ctypeIcE5do_isEmc@@GLIBCPP_3.2
-FUNC:_ZNKSt5ctypeIcE8do_widenEPKcS2_Pc@@GLIBCPP_3.2
-FUNC:_ZNKSt5ctypeIcE8do_widenEc@@GLIBCPP_3.2
-FUNC:_ZNKSt5ctypeIcE9do_narrowEPKcS2_cPc@@GLIBCPP_3.2
-FUNC:_ZNKSt5ctypeIcE9do_narrowEcc@@GLIBCPP_3.2
-FUNC:_ZNKSt6locale4nameEv@@GLIBCPP_3.2
-FUNC:_ZNKSt6localeeqERKS_@@GLIBCPP_3.2
-FUNC:_ZNKSt7codecvtIcc11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@@GLIBCPP_3.2
-FUNC:_ZNKSt7codecvtIcc11__mbstate_tE11do_encodingEv@@GLIBCPP_3.2
-FUNC:_ZNKSt7codecvtIcc11__mbstate_tE13do_max_lengthEv@@GLIBCPP_3.2
-FUNC:_ZNKSt7codecvtIcc11__mbstate_tE16do_always_noconvEv@@GLIBCPP_3.2
-FUNC:_ZNKSt7codecvtIcc11__mbstate_tE5do_inERS0_PKcS4_RS4_PcS6_RS6_@@GLIBCPP_3.2
-FUNC:_ZNKSt7codecvtIcc11__mbstate_tE6do_outERS0_PKcS4_RS4_PcS6_RS6_@@GLIBCPP_3.2
-FUNC:_ZNKSt7codecvtIcc11__mbstate_tE9do_lengthERKS0_PKcS5_j@@GLIBCPP_3.2
-FUNC:_ZNKSt7collateIcE10_M_compareEPKcS2_@@GLIBCPP_3.2
-FUNC:_ZNKSt7collateIcE10do_compareEPKcS2_S2_S2_@@GLIBCPP_3.2
-FUNC:_ZNKSt7collateIcE12_M_transformEPcPKcj@@GLIBCPP_3.2
-FUNC:_ZNKSt7collateIcE12do_transformEPKcS2_@@GLIBCPP_3.2
-FUNC:_ZNKSt7collateIcE4hashEPKcS2_@@GLIBCPP_3.2
-FUNC:_ZNKSt7collateIcE7compareEPKcS2_S2_S2_@@GLIBCPP_3.2
-FUNC:_ZNKSt7collateIcE7do_hashEPKcS2_@@GLIBCPP_3.2
-FUNC:_ZNKSt7collateIcE9transformEPKcS2_@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intES3_S3_RSt8ios_baseRSt12_Ios_IostateRSsRi@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16_M_extract_floatES3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRPv@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRb@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRj@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRl@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRm@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRt@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRx@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRPv@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRb@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRj@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRl@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRm@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRt@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRx@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_widen_intES3_RSt8ios_basecPci@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_convert_intIlEES3_S3_RSt8ios_basecccT_@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_convert_intImEES3_S3_RSt8ios_basecccT_@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_convert_intIxEES3_S3_RSt8ios_basecccT_@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_convert_intIyEES3_S3_RSt8ios_basecccT_@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_widen_floatES3_RSt8ios_basecPci@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE16_M_convert_floatIdEES3_S3_RSt8ios_baseccT_@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE16_M_convert_floatIeEES3_S3_RSt8ios_baseccT_@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPKv@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecb@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecd@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basece@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecl@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecm@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecx@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecy@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecPKv@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecb@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecd@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basece@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecl@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecm@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecx@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecy@@GLIBCPP_3.2
-FUNC:_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertES3_RSt8ios_basecPKci@@GLIBCPP_3.2
-FUNC:_ZNKSt8ios_base7failure4whatEv@@GLIBCPP_3.2
-FUNC:_ZNKSt8messagesIcE18_M_convert_to_charERKSs@@GLIBCPP_3.2
-FUNC:_ZNKSt8messagesIcE20_M_convert_from_charEPc@@GLIBCPP_3.2
-FUNC:_ZNKSt8messagesIcE3getEiiiRKSs@@GLIBCPP_3.2
-FUNC:_ZNKSt8messagesIcE4openERKSsRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZNKSt8messagesIcE4openERKSsRKSt6localePKc@@GLIBCPP_3.2
-FUNC:_ZNKSt8messagesIcE5closeEi@@GLIBCPP_3.2
-FUNC:_ZNKSt8messagesIcE6do_getEiiiRKSs@@GLIBCPP_3.2
-FUNC:_ZNKSt8messagesIcE7do_openERKSsRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZNKSt8messagesIcE8do_closeEi@@GLIBCPP_3.2
-FUNC:_ZNKSt8numpunctIcE11do_groupingEv@@GLIBCPP_3.2
-FUNC:_ZNKSt8numpunctIcE11do_truenameEv@@GLIBCPP_3.2
-FUNC:_ZNKSt8numpunctIcE12do_falsenameEv@@GLIBCPP_3.2
-FUNC:_ZNKSt8numpunctIcE13decimal_pointEv@@GLIBCPP_3.2
-FUNC:_ZNKSt8numpunctIcE13thousands_sepEv@@GLIBCPP_3.2
-FUNC:_ZNKSt8numpunctIcE16do_decimal_pointEv@@GLIBCPP_3.2
-FUNC:_ZNKSt8numpunctIcE16do_thousands_sepEv@@GLIBCPP_3.2
-FUNC:_ZNKSt8numpunctIcE8groupingEv@@GLIBCPP_3.2
-FUNC:_ZNKSt8numpunctIcE8truenameEv@@GLIBCPP_3.2
-FUNC:_ZNKSt8numpunctIcE9falsenameEv@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10date_orderEv@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11do_get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11do_get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11do_get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11get_weekdayES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE13do_date_orderEv@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE13get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_numERS3_S5_RiiijRKSt5ctypeIcERSt12_Ios_Iostate@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14do_get_weekdayES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameERS3_S5_RiPPKcjRSt12_Ios_Iostate@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16do_get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatERS3_S5_RSt8ios_baseRSt12_Ios_IostateP2tmPKc@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPK2tmPKcSB_@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPK2tmcc@@GLIBCPP_3.2
-FUNC:_ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecPK2tmcc@@GLIBCPP_3.2
-FUNC:_ZNKSt8valarrayIjE4sizeEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE10exceptionsEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE14_M_check_facetEPKNSt6locale5facetE@@GLIBCPP_3.2
-FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE3badEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE3eofEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE3tieEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE4failEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE4goodEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE5rdbufEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc@@GLIBCPP_3.2
-FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE6narrowEcc@@GLIBCPP_3.2
-FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEE7rdstateEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEEcvPvEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9basic_iosIcSt11char_traitsIcEEntEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9exception4whatEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSs@@GLIBCPP_3.2
-FUNC:_ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe@@GLIBCPP_3.2
-FUNC:_ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSs@@GLIBCPP_3.2
-FUNC:_ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe@@GLIBCPP_3.2
-FUNC:_ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_bRSt8ios_basecRKSs@@GLIBCPP_3.2
-FUNC:_ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_bRSt8ios_basece@@GLIBCPP_3.2
-FUNC:_ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_bRSt8ios_basecRKSs@@GLIBCPP_3.2
-FUNC:_ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_bRSt8ios_basece@@GLIBCPP_3.2
-FUNC:_ZNKSt9strstream5rdbufEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9strstream6pcountEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9type_info10__do_catchEPKS_PPvj@@GLIBCPP_3.2
-FUNC:_ZNKSt9type_info11__do_upcastEPKN10__cxxabiv117__class_type_infoEPPv@@GLIBCPP_3.2
-FUNC:_ZNKSt9type_info14__is_pointer_pEv@@GLIBCPP_3.2
-FUNC:_ZNKSt9type_info15__is_function_pEv@@GLIBCPP_3.2
-FUNC:_ZNSaIcE10deallocateEPcj@@GLIBCPP_3.2
-FUNC:_ZNSaIcE7destroyEPc@@GLIBCPP_3.2
-FUNC:_ZNSaIcE8allocateEjPKv@@GLIBCPP_3.2
-FUNC:_ZNSaIcE9constructEPcRKc@@GLIBCPP_3.2
-FUNC:_ZNSaIcEC1ERKS_@@GLIBCPP_3.2
-FUNC:_ZNSaIcEC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSaIcEC2ERKS_@@GLIBCPP_3.2
-FUNC:_ZNSaIcEC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSaIcED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSaIcED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSaIwE10deallocateEPwj@@GLIBCPP_3.2
-FUNC:_ZNSaIwE7destroyEPw@@GLIBCPP_3.2
-FUNC:_ZNSaIwE8allocateEjPKv@@GLIBCPP_3.2
-FUNC:_ZNSaIwE9constructEPwRKw@@GLIBCPP_3.2
-FUNC:_ZNSaIwEC1ERKS_@@GLIBCPP_3.2
-FUNC:_ZNSaIwEC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSaIwEC2ERKS_@@GLIBCPP_3.2
-FUNC:_ZNSaIwEC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSaIwED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSaIwED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSdC1EPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-FUNC:_ZNSdC2EPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-FUNC:_ZNSdD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSdD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSdD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSi3getEPci@@GLIBCPP_3.2
-FUNC:_ZNSi3getEPcic@@GLIBCPP_3.2
-FUNC:_ZNSi3getERSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-FUNC:_ZNSi3getERSt15basic_streambufIcSt11char_traitsIcEEc@@GLIBCPP_3.2
-FUNC:_ZNSi3getERc@@GLIBCPP_3.2
-FUNC:_ZNSi3getEv@@GLIBCPP_3.2
-FUNC:_ZNSi4peekEv@@GLIBCPP_3.2
-FUNC:_ZNSi4readEPci@@GLIBCPP_3.2
-FUNC:_ZNSi4syncEv@@GLIBCPP_3.2
-FUNC:_ZNSi5seekgESt4fposI11__mbstate_tE@@GLIBCPP_3.2
-FUNC:_ZNSi5seekgElSt12_Ios_Seekdir@@GLIBCPP_3.2
-FUNC:_ZNSi5tellgEv@@GLIBCPP_3.2
-FUNC:_ZNSi5ungetEv@@GLIBCPP_3.2
-FUNC:_ZNSi6ignoreEii@@GLIBCPP_3.2
-FUNC:_ZNSi6sentryC1ERSib@@GLIBCPP_3.2
-FUNC:_ZNSi6sentryC2ERSib@@GLIBCPP_3.2
-FUNC:_ZNSi6sentrycvbEv@@GLIBCPP_3.2
-FUNC:_ZNSi7getlineEPci@@GLIBCPP_3.2
-FUNC:_ZNSi7getlineEPcic@@GLIBCPP_3.2
-FUNC:_ZNSi7putbackEc@@GLIBCPP_3.2
-FUNC:_ZNSi8readsomeEPci@@GLIBCPP_3.2
-FUNC:_ZNSiC1EPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-FUNC:_ZNSiC2EPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-FUNC:_ZNSiD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSiD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSiD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSirsEPFRSiS_E@@GLIBCPP_3.2
-FUNC:_ZNSirsEPFRSt8ios_baseS0_E@@GLIBCPP_3.2
-FUNC:_ZNSirsEPFRSt9basic_iosIcSt11char_traitsIcEES3_E@@GLIBCPP_3.2
-FUNC:_ZNSirsEPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-FUNC:_ZNSirsERPv@@GLIBCPP_3.2
-FUNC:_ZNSirsERb@@GLIBCPP_3.2
-FUNC:_ZNSirsERd@@GLIBCPP_3.2
-FUNC:_ZNSirsERe@@GLIBCPP_3.2
-FUNC:_ZNSirsERf@@GLIBCPP_3.2
-FUNC:_ZNSirsERi@@GLIBCPP_3.2
-FUNC:_ZNSirsERj@@GLIBCPP_3.2
-FUNC:_ZNSirsERl@@GLIBCPP_3.2
-FUNC:_ZNSirsERm@@GLIBCPP_3.2
-FUNC:_ZNSirsERs@@GLIBCPP_3.2
-FUNC:_ZNSirsERt@@GLIBCPP_3.2
-FUNC:_ZNSirsERx@@GLIBCPP_3.2
-FUNC:_ZNSirsERy@@GLIBCPP_3.2
-FUNC:_ZNSo3putEc@@GLIBCPP_3.2
-FUNC:_ZNSo5flushEv@@GLIBCPP_3.2
-FUNC:_ZNSo5seekpESt4fposI11__mbstate_tE@@GLIBCPP_3.2
-FUNC:_ZNSo5seekpElSt12_Ios_Seekdir@@GLIBCPP_3.2
-FUNC:_ZNSo5tellpEv@@GLIBCPP_3.2
-FUNC:_ZNSo5writeEPKci@@GLIBCPP_3.2
-FUNC:_ZNSo6sentryC1ERSo@@GLIBCPP_3.2
-FUNC:_ZNSo6sentryC2ERSo@@GLIBCPP_3.2
-FUNC:_ZNSo6sentryD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSo6sentryD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSo6sentrycvbEv@@GLIBCPP_3.2
-FUNC:_ZNSoC1EPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-FUNC:_ZNSoC2EPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-FUNC:_ZNSoD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSoD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSoD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSolsEPFRSoS_E@@GLIBCPP_3.2
-FUNC:_ZNSolsEPFRSt8ios_baseS0_E@@GLIBCPP_3.2
-FUNC:_ZNSolsEPFRSt9basic_iosIcSt11char_traitsIcEES3_E@@GLIBCPP_3.2
-FUNC:_ZNSolsEPKv@@GLIBCPP_3.2
-FUNC:_ZNSolsEPSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-FUNC:_ZNSolsEb@@GLIBCPP_3.2
-FUNC:_ZNSolsEd@@GLIBCPP_3.2
-FUNC:_ZNSolsEe@@GLIBCPP_3.2
-FUNC:_ZNSolsEf@@GLIBCPP_3.2
-FUNC:_ZNSolsEi@@GLIBCPP_3.2
-FUNC:_ZNSolsEj@@GLIBCPP_3.2
-FUNC:_ZNSolsEl@@GLIBCPP_3.2
-FUNC:_ZNSolsEm@@GLIBCPP_3.2
-FUNC:_ZNSolsEs@@GLIBCPP_3.2
-FUNC:_ZNSolsEt@@GLIBCPP_3.2
-FUNC:_ZNSolsEx@@GLIBCPP_3.2
-FUNC:_ZNSolsEy@@GLIBCPP_3.2
-FUNC:_ZNSs10_M_replaceIN9__gnu_cxx17__normal_iteratorIPKcSsEEEERSsNS1_IPcSsEES7_T_S8_St18input_iterator_tag@@GLIBCPP_3.2
-FUNC:_ZNSs10_M_replaceIN9__gnu_cxx17__normal_iteratorIPcSsEEEERSsS3_S3_T_S5_St18input_iterator_tag@@GLIBCPP_3.2
-FUNC:_ZNSs10_M_replaceIPKcEERSsN9__gnu_cxx17__normal_iteratorIPcSsEES6_T_S7_St18input_iterator_tag@@GLIBCPP_3.2
-FUNC:_ZNSs10_M_replaceIPcEERSsN9__gnu_cxx17__normal_iteratorIS0_SsEES4_T_S5_St18input_iterator_tag@@GLIBCPP_3.2
-FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSs12_M_leak_hardEv@@GLIBCPP_3.2
-FUNC:_ZNSs12_S_constructEjcRKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSs12_S_empty_repEv@@GLIBCPP_3.2
-FUNC:_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4_@@GLIBCPP_3.2
-FUNC:_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2_@@GLIBCPP_3.2
-FUNC:_ZNSs13_S_copy_charsEPcPKcS1_@@GLIBCPP_3.2
-FUNC:_ZNSs13_S_copy_charsEPcS_S_@@GLIBCPP_3.2
-FUNC:_ZNSs15_M_replace_safeIN9__gnu_cxx17__normal_iteratorIPKcSsEEEERSsNS1_IPcSsEES7_T_S8_@@GLIBCPP_3.2
-FUNC:_ZNSs15_M_replace_safeIN9__gnu_cxx17__normal_iteratorIPcSsEEEERSsS3_S3_T_S5_@@GLIBCPP_3.2
-FUNC:_ZNSs15_M_replace_safeIPKcEERSsN9__gnu_cxx17__normal_iteratorIPcSsEES6_T_S7_@@GLIBCPP_3.2
-FUNC:_ZNSs15_M_replace_safeIPcEERSsN9__gnu_cxx17__normal_iteratorIS0_SsEES4_T_S5_@@GLIBCPP_3.2
-FUNC:_ZNSs2atEj@@GLIBCPP_3.2
-FUNC:_ZNSs3endEv@@GLIBCPP_3.2
-FUNC:_ZNSs4_Rep10_M_destroyERKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSs4_Rep10_M_disposeERKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSs4_Rep10_M_refcopyEv@@GLIBCPP_3.2
-FUNC:_ZNSs4_Rep10_M_refdataEv@@GLIBCPP_3.2
-FUNC:_ZNSs4_Rep13_M_set_leakedEv@@GLIBCPP_3.2
-FUNC:_ZNSs4_Rep15_M_set_sharableEv@@GLIBCPP_3.2
-FUNC:_ZNSs4_Rep7_M_grabERKSaIcES2_@@GLIBCPP_3.2
-FUNC:_ZNSs4_Rep8_M_cloneERKSaIcEj@@GLIBCPP_3.2
-FUNC:_ZNSs4_Rep9_S_createEjRKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSs4_RepixEj@@GLIBCPP_3.2
-FUNC:_ZNSs4rendEv@@GLIBCPP_3.2
-FUNC:_ZNSs4swapERSs@@GLIBCPP_3.2
-FUNC:_ZNSs5beginEv@@GLIBCPP_3.2
-FUNC:_ZNSs5clearEv@@GLIBCPP_3.2
-FUNC:_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEE@@GLIBCPP_3.2
-FUNC:_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEES2_@@GLIBCPP_3.2
-FUNC:_ZNSs5eraseEjj@@GLIBCPP_3.2
-FUNC:_ZNSs6appendEPKc@@GLIBCPP_3.2
-FUNC:_ZNSs6appendEPKcj@@GLIBCPP_3.2
-FUNC:_ZNSs6appendERKSs@@GLIBCPP_3.2
-FUNC:_ZNSs6appendERKSsjj@@GLIBCPP_3.2
-FUNC:_ZNSs6appendEjc@@GLIBCPP_3.2
-FUNC:_ZNSs6assignEPKc@@GLIBCPP_3.2
-FUNC:_ZNSs6assignEPKcj@@GLIBCPP_3.2
-FUNC:_ZNSs6assignERKSs@@GLIBCPP_3.2
-FUNC:_ZNSs6assignERKSsjj@@GLIBCPP_3.2
-FUNC:_ZNSs6assignEjc@@GLIBCPP_3.2
-FUNC:_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEc@@GLIBCPP_3.2
-FUNC:_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEjc@@GLIBCPP_3.2
-FUNC:_ZNSs6insertEjPKc@@GLIBCPP_3.2
-FUNC:_ZNSs6insertEjPKcj@@GLIBCPP_3.2
-FUNC:_ZNSs6insertEjRKSs@@GLIBCPP_3.2
-FUNC:_ZNSs6insertEjRKSsjj@@GLIBCPP_3.2
-FUNC:_ZNSs6insertEjjc@@GLIBCPP_3.2
-FUNC:_ZNSs6rbeginEv@@GLIBCPP_3.2
-FUNC:_ZNSs6resizeEj@@GLIBCPP_3.2
-FUNC:_ZNSs6resizeEjc@@GLIBCPP_3.2
-FUNC:_ZNSs7_M_dataEPc@@GLIBCPP_3.2
-FUNC:_ZNSs7_M_leakEv@@GLIBCPP_3.2
-FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_NS0_IPKcSsEES5_@@GLIBCPP_3.2
-FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKc@@GLIBCPP_3.2
-FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcS4_@@GLIBCPP_3.2
-FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcj@@GLIBCPP_3.2
-FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_RKSs@@GLIBCPP_3.2
-FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S1_S1_@@GLIBCPP_3.2
-FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S2_S2_@@GLIBCPP_3.2
-FUNC:_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_jc@@GLIBCPP_3.2
-FUNC:_ZNSs7replaceEjjPKc@@GLIBCPP_3.2
-FUNC:_ZNSs7replaceEjjPKcj@@GLIBCPP_3.2
-FUNC:_ZNSs7replaceEjjRKSs@@GLIBCPP_3.2
-FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCPP_3.2
-FUNC:_ZNSs7replaceEjjjc@@GLIBCPP_3.2
-FUNC:_ZNSs7reserveEj@@GLIBCPP_3.2
-FUNC:_ZNSs9_M_mutateEjjj@@GLIBCPP_3.2
-FUNC:_ZNSs9push_backEc@@GLIBCPP_3.2
-FUNC:_ZNSsC1EPKcRKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC1EPKcjRKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC1ERKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC1ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSsC1ERKSsjj@@GLIBCPP_3.2
-FUNC:_ZNSsC1ERKSsjjRKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC1EjcRKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSsC1IN9__gnu_cxx17__normal_iteratorIPKcSsEEEET_S5_RKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC1IN9__gnu_cxx17__normal_iteratorIPcSsEEEET_S4_RKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC1IPKcEET_S2_RKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC1IPcEET_S1_RKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC2EPKcRKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC2EPKcjRKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC2ERKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC2ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSsC2ERKSsjj@@GLIBCPP_3.2
-FUNC:_ZNSsC2ERKSsjjRKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC2EjcRKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSsC2IN9__gnu_cxx17__normal_iteratorIPKcSsEEEET_S5_RKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC2IN9__gnu_cxx17__normal_iteratorIPcSsEEEET_S4_RKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC2IPKcEET_S2_RKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsC2IPcEET_S1_RKSaIcE@@GLIBCPP_3.2
-FUNC:_ZNSsD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSsD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSsaSEPKc@@GLIBCPP_3.2
-FUNC:_ZNSsaSERKSs@@GLIBCPP_3.2
-FUNC:_ZNSsaSEc@@GLIBCPP_3.2
-FUNC:_ZNSsixEj@@GLIBCPP_3.2
-FUNC:_ZNSspLEPKc@@GLIBCPP_3.2
-FUNC:_ZNSspLERKSs@@GLIBCPP_3.2
-FUNC:_ZNSspLEc@@GLIBCPP_3.2
-FUNC:_ZNSt10__num_base13_S_format_intERKSt8ios_basePccc@@GLIBCPP_3.2
-FUNC:_ZNSt10__num_base15_S_format_floatERKSt8ios_basePcci@@GLIBCPP_3.2
-FUNC:_ZNSt10bad_typeidD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10bad_typeidD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10bad_typeidD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10istrstream3strEv@@GLIBCPP_3.2
-FUNC:_ZNSt10istrstreamC1EPKc@@GLIBCPP_3.2
-FUNC:_ZNSt10istrstreamC1EPKci@@GLIBCPP_3.2
-FUNC:_ZNSt10istrstreamC1EPc@@GLIBCPP_3.2
-FUNC:_ZNSt10istrstreamC1EPci@@GLIBCPP_3.2
-FUNC:_ZNSt10istrstreamC2EPKc@@GLIBCPP_3.2
-FUNC:_ZNSt10istrstreamC2EPKci@@GLIBCPP_3.2
-FUNC:_ZNSt10istrstreamC2EPc@@GLIBCPP_3.2
-FUNC:_ZNSt10istrstreamC2EPci@@GLIBCPP_3.2
-FUNC:_ZNSt10istrstreamD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10istrstreamD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10istrstreamD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10money_base20_S_construct_patternEccc@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb0EE24_M_initialize_moneypunctEPiPKc@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb0EEC1EPiPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb0EEC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb0EEC2EPiPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb0EEC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb0EED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb0EED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb0EED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb1EE24_M_initialize_moneypunctEPiPKc@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb1EEC1EPiPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb1EEC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb1EEC2EPiPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb1EEC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb1EED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb1EED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10moneypunctIcLb1EED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10ostrstream3strEv@@GLIBCPP_3.2
-FUNC:_ZNSt10ostrstream6freezeEb@@GLIBCPP_3.2
-FUNC:_ZNSt10ostrstreamC1EPciSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt10ostrstreamC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10ostrstreamC2EPciSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt10ostrstreamC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10ostrstreamD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10ostrstreamD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt10ostrstreamD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt11__timepunctIcE23_M_initialize_timepunctEPi@@GLIBCPP_3.2
-FUNC:_ZNSt11__timepunctIcEC1EPiPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt11__timepunctIcEC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt11__timepunctIcEC2EPiPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt11__timepunctIcEC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt11__timepunctIcED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt11__timepunctIcED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt11__timepunctIcED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt11logic_errorC1ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt11logic_errorC2ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt11logic_errorD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt11logic_errorD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt11logic_errorD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt11range_errorC1ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt11range_errorC2ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt11range_errorD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt11range_errorD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcE10sys_ungetcEi@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcE12_M_open_modeESt13_Ios_OpenmodeRiS2_Pc@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcE2fdEv@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcE4openEPKcSt13_Ios_Openmodei@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcE4syncEv@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcE5closeEv@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcE6xsgetnEPci@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcE6xsputnEPKci@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcE7seekposElSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcE8sys_getcEv@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcE8sys_openEP7__sFILESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcE8sys_openEiSt13_Ios_Openmodeb@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcEC1EPP13pthread_mutex@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcEC2EPP13pthread_mutex@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt12ctype_bynameIcEC1EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt12ctype_bynameIcEC2EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt12ctype_bynameIcED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt12ctype_bynameIcED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt12ctype_bynameIcED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt12domain_errorC1ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt12domain_errorC2ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt12domain_errorD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt12domain_errorD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt12length_errorC1ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt12length_errorC2ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt12length_errorD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt12length_errorD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt12out_of_rangeC1ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt12out_of_rangeC2ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt12out_of_rangeD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt12out_of_rangeD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambuf3strEv@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambuf6freezeEb@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambuf6setbufEPci@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambuf7_M_freeEPc@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambuf7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambuf7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambuf8_M_allocEj@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambuf8_M_setupEPcS0_i@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambuf8overflowEi@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambuf9pbackfailEi@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambuf9underflowEv@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC1EPFPvjEPFvS0_E@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC1EPKai@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC1EPKci@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC1EPKhi@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC1EPaiS0_@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC1EPciS0_@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC1EPhiS0_@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC1Ei@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC2EPFPvjEPFvS0_E@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC2EPKai@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC2EPKci@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC2EPKhi@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC2EPaiS0_@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC2EPciS0_@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC2EPhiS0_@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufC2Ei@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt12strstreambufD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE17_M_output_unshiftEv@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE18_M_really_overflowEi@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE18_M_set_determinateEl@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE19_M_is_indeterminateEv@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE19_M_underflow_commonEb@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE20_M_set_indeterminateEv@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE22_M_convert_to_externalEPciRiS4_@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE26_M_destroy_internal_bufferEv@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE27_M_allocate_internal_bufferEv@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE4syncEv@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE5closeEv@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE5imbueERKSt6locale@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE5uflowEv@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE6setbufEPci@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE6xsgetnEPci@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE6xsputnEPKci@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE8overflowEi@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE9pbackfailEi@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE9showmanycEv@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEE9underflowEv@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEEC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEEC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_filebufIcSt11char_traitsIcEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEE5closeEv@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEEC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13basic_fstreamIcSt11char_traitsIcEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13runtime_errorC1ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt13runtime_errorC2ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt13runtime_errorD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13runtime_errorD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt13runtime_errorD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEE5closeEv@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14basic_ofstreamIcSt11char_traitsIcEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14codecvt_bynameIcc11__mbstate_tEC1EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt14codecvt_bynameIcc11__mbstate_tEC2EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt14codecvt_bynameIcc11__mbstate_tED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14codecvt_bynameIcc11__mbstate_tED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14codecvt_bynameIcc11__mbstate_tED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14collate_bynameIcEC1EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt14collate_bynameIcEC2EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt14collate_bynameIcED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14collate_bynameIcED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14collate_bynameIcED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14overflow_errorC1ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt14overflow_errorC2ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt14overflow_errorD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt14overflow_errorD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE14_M_in_cur_moveEl@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE15_M_out_buf_sizeEv@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE15_M_out_cur_moveEl@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE15_M_pback_createEv@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE16_M_pback_destroyEv@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5gbumpEi@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5imbueERKSt6locale@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5pbumpEi@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetcEv@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetnEPci@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5sputcEc@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5sputnEPKci@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE5uflowEv@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE6sbumpcEv@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPci@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE6snextcEv@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE6xsgetnEPci@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE6xsputnEPKci@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE7pubsyncEv@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE7sungetcEv@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE8in_availEv@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE8overflowEi@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE8pubimbueERKSt6locale@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE9pbackfailEi@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE9pubsetbufEPci@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE9showmanycEv@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE9sputbackcEc@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE9underflowEv@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEC1ERKS2_@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEC2ERKS2_@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE14_M_really_syncEjj@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE17_M_stringbuf_initESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9underflowEv@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15messages_bynameIcEC1EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt15messages_bynameIcEC2EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt15messages_bynameIcED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15messages_bynameIcED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15messages_bynameIcED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15numpunct_bynameIcEC1EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt15numpunct_bynameIcEC2EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt15numpunct_bynameIcED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15numpunct_bynameIcED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15numpunct_bynameIcED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15underflow_errorC1ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt15underflow_errorC2ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt15underflow_errorD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt15underflow_errorD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt16invalid_argumentC1ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt16invalid_argumentC2ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt16invalid_argumentD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt16invalid_argumentD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt17moneypunct_bynameIcLb0EEC1EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt17moneypunct_bynameIcLb0EEC2EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt17moneypunct_bynameIcLb0EED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt17moneypunct_bynameIcLb0EED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt17moneypunct_bynameIcLb0EED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt17moneypunct_bynameIcLb1EEC1EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt17moneypunct_bynameIcLb1EEC2EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt17moneypunct_bynameIcLb1EED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt17moneypunct_bynameIcLb1EED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt17moneypunct_bynameIcLb1EED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEE3strERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt24__default_alloc_templateILb1ELi0EE10deallocateEPvj@@GLIBCPP_3.2
-FUNC:_ZNSt24__default_alloc_templateILb1ELi0EE10reallocateEPvjj@@GLIBCPP_3.2
-FUNC:_ZNSt24__default_alloc_templateILb1ELi0EE11_S_round_upEj@@GLIBCPP_3.2
-FUNC:_ZNSt24__default_alloc_templateILb1ELi0EE14_S_chunk_allocEjRi@@GLIBCPP_3.2
-FUNC:_ZNSt24__default_alloc_templateILb1ELi0EE17_S_freelist_indexEj@@GLIBCPP_3.2
-FUNC:_ZNSt24__default_alloc_templateILb1ELi0EE5_LockC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt24__default_alloc_templateILb1ELi0EE5_LockC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt24__default_alloc_templateILb1ELi0EE5_LockD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt24__default_alloc_templateILb1ELi0EE5_LockD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt24__default_alloc_templateILb1ELi0EE8allocateEj@@GLIBCPP_3.2
-FUNC:_ZNSt24__default_alloc_templateILb1ELi0EE9_S_refillEj@@GLIBCPP_3.2
-FUNC:_ZNSt5ctypeIcE13classic_tableEv@@GLIBCPP_3.2
-FUNC:_ZNSt5ctypeIcEC1EPKmbj@@GLIBCPP_3.2
-FUNC:_ZNSt5ctypeIcEC1EPiPKmbj@@GLIBCPP_3.2
-FUNC:_ZNSt5ctypeIcEC2EPKmbj@@GLIBCPP_3.2
-FUNC:_ZNSt5ctypeIcEC2EPiPKmbj@@GLIBCPP_3.2
-FUNC:_ZNSt5ctypeIcED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt5ctypeIcED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt5ctypeIcED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt6gslice8_IndexerC1EjRKSt8valarrayIjES4_@@GLIBCPP_3.2
-FUNC:_ZNSt6gslice8_IndexerC2EjRKSt8valarrayIjES4_@@GLIBCPP_3.2
-FUNC:_ZNSt6locale11_M_coalesceERKS_S1_j@@GLIBCPP_3.2
-FUNC:_ZNSt6locale21_S_normalize_categoryEj@@GLIBCPP_3.2
-FUNC:_ZNSt6locale2idC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt6locale2idC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5_Impl16_M_install_facetEPKNS_2idEPNS_5facetE@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5_Impl16_M_replace_facetEPKS0_PKNS_2idE@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5_Impl19_M_replace_categoryEPKS0_PKPKNS_2idE@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5_Impl21_M_replace_categoriesEPKS0_j@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5_ImplC1EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5_ImplC1EPPNS_5facetEjb@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5_ImplC1ERKS0_j@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5_ImplC2EPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5_ImplC2EPPNS_5facetEjb@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5_ImplC2ERKS0_j@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5_ImplD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5_ImplD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5facet16_M_add_referenceEv@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5facet17_S_clone_c_localeERPi@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5facet18_S_create_c_localeERPiPKcS1_@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5facet19_M_remove_referenceEv@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5facet19_S_destroy_c_localeERPi@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5facetC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5facetC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5facetD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5facetD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt6locale5facetD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt6locale6globalERKS_@@GLIBCPP_3.2
-FUNC:_ZNSt6locale7classicEv@@GLIBCPP_3.2
-FUNC:_ZNSt6localeC1EPKc@@GLIBCPP_3.2
-FUNC:_ZNSt6localeC1EPNS_5_ImplE@@GLIBCPP_3.2
-FUNC:_ZNSt6localeC1ERKS_@@GLIBCPP_3.2
-FUNC:_ZNSt6localeC1ERKS_PKcj@@GLIBCPP_3.2
-FUNC:_ZNSt6localeC1ERKS_S1_j@@GLIBCPP_3.2
-FUNC:_ZNSt6localeC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt6localeC2EPKc@@GLIBCPP_3.2
-FUNC:_ZNSt6localeC2EPNS_5_ImplE@@GLIBCPP_3.2
-FUNC:_ZNSt6localeC2ERKS_@@GLIBCPP_3.2
-FUNC:_ZNSt6localeC2ERKS_PKcj@@GLIBCPP_3.2
-FUNC:_ZNSt6localeC2ERKS_S1_j@@GLIBCPP_3.2
-FUNC:_ZNSt6localeC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt6localeD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt6localeD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt6localeaSERKS_@@GLIBCPP_3.2
-FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt7codecvtIcc11__mbstate_tEC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt7codecvtIcc11__mbstate_tED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt7codecvtIcc11__mbstate_tED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt7codecvtIcc11__mbstate_tED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt7collateIcEC1EPij@@GLIBCPP_3.2
-FUNC:_ZNSt7collateIcEC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt7collateIcEC2EPij@@GLIBCPP_3.2
-FUNC:_ZNSt7collateIcEC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt7collateIcED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt7collateIcED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt7collateIcED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8bad_castD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8bad_castD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8bad_castD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base13_M_grow_wordsEi@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base15sync_with_stdioEb@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base17_M_call_callbacksENS_5eventE@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base17register_callbackEPFvNS_5eventERS_iEi@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base20_M_dispose_callbacksEv@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base4Init13_S_ios_createEb@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base4Init14_S_ios_destroyEv@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base4InitC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base4InitC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base4InitD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base4InitD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base5imbueERKSt6locale@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base6xallocEv@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base7_M_initEv@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base7failureC1ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base7failureC2ERKSs@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base7failureD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base7failureD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_base7failureD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_baseC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_baseC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_baseD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8ios_baseD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8messagesIcEC1EPiPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt8messagesIcEC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt8messagesIcEC2EPiPKcj@@GLIBCPP_3.2
-FUNC:_ZNSt8messagesIcEC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt8messagesIcED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8messagesIcED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8messagesIcED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8numpunctIcE22_M_initialize_numpunctEPi@@GLIBCPP_3.2
-FUNC:_ZNSt8numpunctIcEC1EPij@@GLIBCPP_3.2
-FUNC:_ZNSt8numpunctIcEC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt8numpunctIcEC2EPij@@GLIBCPP_3.2
-FUNC:_ZNSt8numpunctIcEC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt8numpunctIcED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8numpunctIcED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8numpunctIcED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8valarrayIjEC1ERKS0_@@GLIBCPP_3.2
-FUNC:_ZNSt8valarrayIjEC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt8valarrayIjEC2ERKS0_@@GLIBCPP_3.2
-FUNC:_ZNSt8valarrayIjEC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt8valarrayIjED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8valarrayIjED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt8valarrayIjEixEj@@GLIBCPP_3.2
-FUNC:_ZNSt9bad_allocD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9bad_allocD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9bad_allocD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE10exceptionsESt12_Ios_Iostate@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE15_M_cache_facetsERKSt6locale@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE3tieEPSo@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE4fillEc@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE5imbueERKSt6locale@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE5rdbufEPSt15basic_streambufIcS1_E@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE7copyfmtERKS2_@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEEC1EPSt15basic_streambufIcS1_E@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEEC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEEC2EPSt15basic_streambufIcS1_E@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEEC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9basic_iosIcSt11char_traitsIcEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9exceptionD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9exceptionD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9exceptionD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@@GLIBCPP_3.2
-FUNC:_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@@GLIBCPP_3.2
-FUNC:_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9strstream3strEv@@GLIBCPP_3.2
-FUNC:_ZNSt9strstream6freezeEb@@GLIBCPP_3.2
-FUNC:_ZNSt9strstreamC1EPciSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt9strstreamC1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9strstreamC2EPciSt13_Ios_Openmode@@GLIBCPP_3.2
-FUNC:_ZNSt9strstreamC2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9strstreamD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9strstreamD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9strstreamD2Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9type_infoD0Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9type_infoD1Ev@@GLIBCPP_3.2
-FUNC:_ZNSt9type_infoD2Ev@@GLIBCPP_3.2
-FUNC:_ZSt10unexpectedv@@GLIBCPP_3.2
-FUNC:_ZSt13set_terminatePFvvE@@GLIBCPP_3.2
-FUNC:_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPii@@GLIBCPP_3.2
-FUNC:_ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPii@@GLIBCPP_3.2
-FUNC:_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPii@@GLIBCPP_3.2
-FUNC:_ZSt14__convert_to_vIlEvPKcRT_RSt12_Ios_IostateRKPii@@GLIBCPP_3.2
-FUNC:_ZSt14__convert_to_vImEvPKcRT_RSt12_Ios_IostateRKPii@@GLIBCPP_3.2
-FUNC:_ZSt14__convert_to_vIxEvPKcRT_RSt12_Ios_IostateRKPii@@GLIBCPP_3.2
-FUNC:_ZSt14__convert_to_vIyEvPKcRT_RSt12_Ios_IostateRKPii@@GLIBCPP_3.2
-FUNC:_ZSt14set_unexpectedPFvvE@@GLIBCPP_3.2
-FUNC:_ZSt15set_new_handlerPFvvE@@GLIBCPP_3.2
-FUNC:_ZSt16__throw_bad_castv@@GLIBCPP_3.2
-FUNC:_ZSt17__throw_bad_allocv@@GLIBCPP_3.2
-FUNC:_ZSt18__throw_bad_typeidv@@GLIBCPP_3.2
-FUNC:_ZSt18uncaught_exceptionv@@GLIBCPP_3.2
-FUNC:_ZSt19__throw_ios_failurePKc@@GLIBCPP_3.2
-FUNC:_ZSt19__throw_logic_errorPKc@@GLIBCPP_3.2
-FUNC:_ZSt19__throw_range_errorPKc@@GLIBCPP_3.2
-FUNC:_ZSt20__throw_domain_errorPKc@@GLIBCPP_3.2
-FUNC:_ZSt20__throw_length_errorPKc@@GLIBCPP_3.2
-FUNC:_ZSt20__throw_out_of_rangePKc@@GLIBCPP_3.2
-FUNC:_ZSt21__throw_bad_exceptionv@@GLIBCPP_3.2
-FUNC:_ZSt21__throw_runtime_errorPKc@@GLIBCPP_3.2
-FUNC:_ZSt22__throw_overflow_errorPKc@@GLIBCPP_3.2
-FUNC:_ZSt23__throw_underflow_errorPKc@@GLIBCPP_3.2
-FUNC:_ZSt24__throw_invalid_argumentPKc@@GLIBCPP_3.2
-FUNC:_ZSt24__uninitialized_copy_auxIN9__gnu_cxx17__normal_iteratorIPKSsSt6vectorISsSaISsEEEEPSsET0_T_SA_S9_12__false_type@@GLIBCPP_3.2
-FUNC:_ZSt26__uninitialized_fill_n_auxIPSsjSsET_S1_T0_RKT1_12__false_type@@GLIBCPP_3.2
-FUNC:_ZSt2wsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_@@GLIBCPP_3.2
-FUNC:_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@@GLIBCPP_3.2
-FUNC:_ZSt4endsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@@GLIBCPP_3.2
-FUNC:_ZSt5flushIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@@GLIBCPP_3.2
-FUNC:_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@@GLIBCPP_3.2
-FUNC:_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_ES4_@@GLIBCPP_3.2
-FUNC:_ZSt9has_facetISt10moneypunctIcLb0EEEbRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9has_facetISt11__timepunctIcEEbRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9has_facetISt5ctypeIcEEbRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9has_facetISt7codecvtIcc11__mbstate_tEEbRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9has_facetISt7collateIcEEbRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9has_facetISt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9has_facetISt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9has_facetISt8messagesIcEEbRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9has_facetISt8numpunctIcEEbRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9has_facetISt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9has_facetISt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9has_facetISt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9has_facetISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9terminatev@@GLIBCPP_3.2
-FUNC:_ZSt9use_facetISt10moneypunctIcLb0EEERKT_RKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9use_facetISt10moneypunctIcLb1EEERKT_RKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9use_facetISt11__timepunctIcEERKT_RKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9use_facetISt5ctypeIcEERKT_RKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9use_facetISt7codecvtIcc11__mbstate_tEERKT_RKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9use_facetISt7collateIcEERKT_RKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9use_facetISt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9use_facetISt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9use_facetISt8messagesIcEERKT_RKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9use_facetISt8numpunctIcEERKT_RKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9use_facetISt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9use_facetISt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9use_facetISt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@@GLIBCPP_3.2
-FUNC:_ZSt9use_facetISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@@GLIBCPP_3.2
-FUNC:_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKa@@GLIBCPP_3.2
-FUNC:_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@@GLIBCPP_3.2
-FUNC:_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKh@@GLIBCPP_3.2
-FUNC:_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_a@@GLIBCPP_3.2
-FUNC:_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c@@GLIBCPP_3.2
-FUNC:_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_h@@GLIBCPP_3.2
-FUNC:_ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St12_Setiosflags@@GLIBCPP_3.2
-FUNC:_ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St13_Setprecision@@GLIBCPP_3.2
-FUNC:_ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St14_Resetiosflags@@GLIBCPP_3.2
-FUNC:_ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St5_Setw@@GLIBCPP_3.2
-FUNC:_ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St8_Setbase@@GLIBCPP_3.2
-FUNC:_ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St8_SetfillIS3_E@@GLIBCPP_3.2
-FUNC:_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKSbIS4_S5_T1_E@@GLIBCPP_3.2
-FUNC:_ZStlsIdcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@@GLIBCPP_3.2
-FUNC:_ZStlsIecSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@@GLIBCPP_3.2
-FUNC:_ZStlsIfcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@@GLIBCPP_3.2
-FUNC:_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_@@GLIBCPP_3.2
-FUNC:_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ES3_RKS6_@@GLIBCPP_3.2
-FUNC:_ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Pa@@GLIBCPP_3.2
-FUNC:_ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Ph@@GLIBCPP_3.2
-FUNC:_ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Ra@@GLIBCPP_3.2
-FUNC:_ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Rh@@GLIBCPP_3.2
-FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_PS3_@@GLIBCPP_3.2
-FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_RS3_@@GLIBCPP_3.2
-FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St12_Setiosflags@@GLIBCPP_3.2
-FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St13_Setprecision@@GLIBCPP_3.2
-FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St14_Resetiosflags@@GLIBCPP_3.2
-FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St5_Setw@@GLIBCPP_3.2
-FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St8_Setbase@@GLIBCPP_3.2
-FUNC:_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St8_SetfillIS3_E@@GLIBCPP_3.2
-FUNC:_ZStrsIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@@GLIBCPP_3.2
-FUNC:_ZStrsIdcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@@GLIBCPP_3.2
-FUNC:_ZStrsIecSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@@GLIBCPP_3.2
-FUNC:_ZStrsIfcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@@GLIBCPP_3.2
-FUNC:_ZThn8_NSdD0Ev@@GLIBCPP_3.2
-FUNC:_ZThn8_NSdD1Ev@@GLIBCPP_3.2
-FUNC:_ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZThn8_NSt9strstreamD0Ev@@GLIBCPP_3.2
-FUNC:_ZThn8_NSt9strstreamD1Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSdD0Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSdD1Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSiD0Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSiD1Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSoD0Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSoD1Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt10istrstreamD0Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt10istrstreamD1Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt10ostrstreamD0Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt10ostrstreamD1Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt9strstreamD0Ev@@GLIBCPP_3.2
-FUNC:_ZTv0_n12_NSt9strstreamD1Ev@@GLIBCPP_3.2
-FUNC:_ZdaPv@@GLIBCPP_3.2
-FUNC:_ZdaPvRKSt9nothrow_t@@GLIBCPP_3.2
-FUNC:_ZdlPv@@GLIBCPP_3.2
-FUNC:_ZdlPvRKSt9nothrow_t@@GLIBCPP_3.2
-FUNC:_Znaj@@GLIBCPP_3.2
-FUNC:_ZnajRKSt9nothrow_t@@GLIBCPP_3.2
-FUNC:_Znwj@@GLIBCPP_3.2
-FUNC:_ZnwjRKSt9nothrow_t@@GLIBCPP_3.2
-FUNC:__cxa_allocate_exception@@CXXABI_1.2
-FUNC:__cxa_bad_cast@@CXXABI_1.2
-FUNC:__cxa_bad_typeid@@CXXABI_1.2
-FUNC:__cxa_begin_catch@@CXXABI_1.2
-FUNC:__cxa_call_unexpected@@CXXABI_1.2
-FUNC:__cxa_current_exception_type@@CXXABI_1.2
-FUNC:__cxa_demangle@@CXXABI_1.2
-FUNC:__cxa_dyn_string_append@@CXXABI_1.2
-FUNC:__cxa_dyn_string_append_char@@CXXABI_1.2
-FUNC:__cxa_dyn_string_append_cstr@@CXXABI_1.2
-FUNC:__cxa_dyn_string_clear@@CXXABI_1.2
-FUNC:__cxa_dyn_string_copy@@CXXABI_1.2
-FUNC:__cxa_dyn_string_copy_cstr@@CXXABI_1.2
-FUNC:__cxa_dyn_string_delete@@CXXABI_1.2
-FUNC:__cxa_dyn_string_eq@@CXXABI_1.2
-FUNC:__cxa_dyn_string_init@@CXXABI_1.2
-FUNC:__cxa_dyn_string_insert@@CXXABI_1.2
-FUNC:__cxa_dyn_string_insert_char@@CXXABI_1.2
-FUNC:__cxa_dyn_string_insert_cstr@@CXXABI_1.2
-FUNC:__cxa_dyn_string_new@@CXXABI_1.2
-FUNC:__cxa_dyn_string_prepend@@CXXABI_1.2
-FUNC:__cxa_dyn_string_prepend_cstr@@CXXABI_1.2
-FUNC:__cxa_dyn_string_release@@CXXABI_1.2
-FUNC:__cxa_dyn_string_resize@@CXXABI_1.2
-FUNC:__cxa_dyn_string_substring@@CXXABI_1.2
-FUNC:__cxa_end_catch@@CXXABI_1.2
-FUNC:__cxa_free_exception@@CXXABI_1.2
-FUNC:__cxa_get_globals@@CXXABI_1.2
-FUNC:__cxa_get_globals_fast@@CXXABI_1.2
-FUNC:__cxa_pure_virtual@@CXXABI_1.2
-FUNC:__cxa_rethrow@@CXXABI_1.2
-FUNC:__cxa_throw@@CXXABI_1.2
-FUNC:__cxa_vec_cctor@@CXXABI_1.2
-FUNC:__cxa_vec_cleanup@@CXXABI_1.2
-FUNC:__cxa_vec_ctor@@CXXABI_1.2
-FUNC:__cxa_vec_delete2@@CXXABI_1.2
-FUNC:__cxa_vec_delete3@@CXXABI_1.2
-FUNC:__cxa_vec_delete@@CXXABI_1.2
-FUNC:__cxa_vec_dtor@@CXXABI_1.2
-FUNC:__cxa_vec_new2@@CXXABI_1.2
-FUNC:__cxa_vec_new3@@CXXABI_1.2
-FUNC:__cxa_vec_new@@CXXABI_1.2
-FUNC:__dynamic_cast@@CXXABI_1.2
-FUNC:__gxx_personality_v0@@CXXABI_1.2
-OBJECT:0:CXXABI_1.2
-OBJECT:0:GLIBCPP_3.2
-OBJECT:12:_ZNSt6locale5_Impl11_S_id_ctypeE@@GLIBCPP_3.2
-OBJECT:12:_ZSt9collate_c@@GLIBCPP_3.2
-OBJECT:12:_ZTIN10__cxxabiv116__enum_type_infoE@@GLIBCPP_3.2
-OBJECT:12:_ZTIN10__cxxabiv117__array_type_infoE@@GLIBCPP_3.2
-OBJECT:12:_ZTIN10__cxxabiv117__class_type_infoE@@GLIBCPP_3.2
-OBJECT:12:_ZTIN10__cxxabiv117__pbase_type_infoE@@GLIBCPP_3.2
-OBJECT:12:_ZTIN10__cxxabiv119__pointer_type_infoE@@GLIBCPP_3.2
-OBJECT:12:_ZTIN10__cxxabiv120__function_type_infoE@@GLIBCPP_3.2
-OBJECT:12:_ZTIN10__cxxabiv120__si_class_type_infoE@@GLIBCPP_3.2
-OBJECT:12:_ZTIN10__cxxabiv121__vmi_class_type_infoE@@GLIBCPP_3.2
-OBJECT:12:_ZTIN10__cxxabiv123__fundamental_type_infoE@@GLIBCPP_3.2
-OBJECT:12:_ZTIN10__cxxabiv129__pointer_to_member_type_infoE@@GLIBCPP_3.2
-OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:12:_ZTINSt8ios_base7failureE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt10bad_typeid@@GLIBCPP_3.2
-OBJECT:12:_ZTISt10istrstream@@GLIBCPP_3.2
-OBJECT:12:_ZTISt10ostrstream@@GLIBCPP_3.2
-OBJECT:12:_ZTISt11__timepunctIcE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt11logic_error@@GLIBCPP_3.2
-OBJECT:12:_ZTISt11range_error@@GLIBCPP_3.2
-OBJECT:12:_ZTISt12ctype_bynameIcE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt12domain_error@@GLIBCPP_3.2
-OBJECT:12:_ZTISt12length_error@@GLIBCPP_3.2
-OBJECT:12:_ZTISt12out_of_range@@GLIBCPP_3.2
-OBJECT:12:_ZTISt12strstreambuf@@GLIBCPP_3.2
-OBJECT:12:_ZTISt13bad_exception@@GLIBCPP_3.2
-OBJECT:12:_ZTISt13basic_filebufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt13basic_fstreamIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt13runtime_error@@GLIBCPP_3.2
-OBJECT:12:_ZTISt14basic_ifstreamIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt14codecvt_bynameIcc11__mbstate_tE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt14collate_bynameIcE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt14overflow_error@@GLIBCPP_3.2
-OBJECT:12:_ZTISt15basic_stringbufIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt15messages_bynameIcE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt15numpunct_bynameIcE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt15underflow_error@@GLIBCPP_3.2
-OBJECT:12:_ZTISt16invalid_argument@@GLIBCPP_3.2
-OBJECT:12:_ZTISt17moneypunct_bynameIcLb0EE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt17moneypunct_bynameIcLb1EE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt18basic_stringstreamIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt19basic_istringstreamIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt5ctypeIcE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt7codecvtIcc11__mbstate_tE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt7collateIcE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt8bad_cast@@GLIBCPP_3.2
-OBJECT:12:_ZTISt8numpunctIcE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt9bad_alloc@@GLIBCPP_3.2
-OBJECT:12:_ZTISt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:12:_ZTISt9strstream@@GLIBCPP_3.2
-OBJECT:12:_ZTSSt5ctypeIcE@@GLIBCPP_3.2
-OBJECT:12:_ZTSSt8bad_cast@@GLIBCPP_3.2
-OBJECT:12:_ZTSSt8ios_base@@GLIBCPP_3.2
-OBJECT:13:_ZTSSt9bad_alloc@@GLIBCPP_3.2
-OBJECT:13:_ZTSSt9exception@@GLIBCPP_3.2
-OBJECT:13:_ZTSSt9strstream@@GLIBCPP_3.2
-OBJECT:13:_ZTSSt9time_base@@GLIBCPP_3.2
-OBJECT:13:_ZTSSt9type_info@@GLIBCPP_3.2
-OBJECT:140:_ZSt4cerr@@GLIBCPP_3.2
-OBJECT:140:_ZSt4clog@@GLIBCPP_3.2
-OBJECT:140:_ZSt4cout@@GLIBCPP_3.2
-OBJECT:144:_ZSt3cin@@GLIBCPP_3.2
-OBJECT:14:_ZTSSt7collateIcE@@GLIBCPP_3.2
-OBJECT:15:_ZTSSt10__num_base@@GLIBCPP_3.2
-OBJECT:15:_ZTSSt10bad_typeid@@GLIBCPP_3.2
-OBJECT:15:_ZTSSt10ctype_base@@GLIBCPP_3.2
-OBJECT:15:_ZTSSt10istrstream@@GLIBCPP_3.2
-OBJECT:15:_ZTSSt10money_base@@GLIBCPP_3.2
-OBJECT:15:_ZTSSt10ostrstream@@GLIBCPP_3.2
-OBJECT:15:_ZTSSt8messagesIcE@@GLIBCPP_3.2
-OBJECT:15:_ZTSSt8numpunctIcE@@GLIBCPP_3.2
-OBJECT:16:_ZNSs20_S_empty_rep_storageE@@GLIBCPP_3.2
-OBJECT:16:_ZNSt6locale5_Impl10_S_id_timeE@@GLIBCPP_3.2
-OBJECT:16:_ZNSt6locale5_Impl13_S_id_numericE@@GLIBCPP_3.2
-OBJECT:16:_ZSt10messages_c@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKa@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKb@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKc@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKd@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKe@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKf@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKh@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKi@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKj@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKl@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKm@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKs@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKt@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKv@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKw@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKx@@GLIBCPP_3.2
-OBJECT:16:_ZTIPKy@@GLIBCPP_3.2
-OBJECT:16:_ZTIPa@@GLIBCPP_3.2
-OBJECT:16:_ZTIPb@@GLIBCPP_3.2
-OBJECT:16:_ZTIPc@@GLIBCPP_3.2
-OBJECT:16:_ZTIPd@@GLIBCPP_3.2
-OBJECT:16:_ZTIPe@@GLIBCPP_3.2
-OBJECT:16:_ZTIPf@@GLIBCPP_3.2
-OBJECT:16:_ZTIPh@@GLIBCPP_3.2
-OBJECT:16:_ZTIPi@@GLIBCPP_3.2
-OBJECT:16:_ZTIPj@@GLIBCPP_3.2
-OBJECT:16:_ZTIPl@@GLIBCPP_3.2
-OBJECT:16:_ZTIPm@@GLIBCPP_3.2
-OBJECT:16:_ZTIPs@@GLIBCPP_3.2
-OBJECT:16:_ZTIPt@@GLIBCPP_3.2
-OBJECT:16:_ZTIPv@@GLIBCPP_3.2
-OBJECT:16:_ZTIPw@@GLIBCPP_3.2
-OBJECT:16:_ZTIPx@@GLIBCPP_3.2
-OBJECT:16:_ZTIPy@@GLIBCPP_3.2
-OBJECT:16:_ZTSSt11logic_error@@GLIBCPP_3.2
-OBJECT:16:_ZTSSt11range_error@@GLIBCPP_3.2
-OBJECT:16:_ZTTSt10istrstream@@GLIBCPP_3.2
-OBJECT:16:_ZTTSt10ostrstream@@GLIBCPP_3.2
-OBJECT:16:_ZTTSt14basic_ifstreamIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:16:_ZTTSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:16:_ZTTSt19basic_istringstreamIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:16:_ZTTSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:16:_ZTVNSt6locale5facetE@@GLIBCPP_3.2
-OBJECT:16:_ZTVSt11__timepunctIcE@@GLIBCPP_3.2
-OBJECT:16:_ZTVSt9basic_iosIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:17:_ZTSSt12codecvt_base@@GLIBCPP_3.2
-OBJECT:17:_ZTSSt12domain_error@@GLIBCPP_3.2
-OBJECT:17:_ZTSSt12length_error@@GLIBCPP_3.2
-OBJECT:17:_ZTSSt12out_of_range@@GLIBCPP_3.2
-OBJECT:17:_ZTSSt12strstreambuf@@GLIBCPP_3.2
-OBJECT:18:_ZTSNSt6locale5facetE@@GLIBCPP_3.2
-OBJECT:18:_ZTSSt13bad_exception@@GLIBCPP_3.2
-OBJECT:18:_ZTSSt13messages_base@@GLIBCPP_3.2
-OBJECT:18:_ZTSSt13runtime_error@@GLIBCPP_3.2
-OBJECT:19:_ZTSSt11__timepunctIcE@@GLIBCPP_3.2
-OBJECT:19:_ZTSSt14overflow_error@@GLIBCPP_3.2
-OBJECT:1:_ZNSs4_Rep11_S_terminalE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt10moneypunctIcLb0EE4intlE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt10moneypunctIcLb1EE4intlE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIaE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIaE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIaE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIaE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIaE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIaE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIaE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIaE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIaE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIaE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIaE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIaE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIaE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIbE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIbE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIbE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIbE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIbE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIbE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIbE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIbE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIbE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIbE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIbE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIbE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIbE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIcE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIcE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIcE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIcE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIcE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIcE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIcE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIcE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIcE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIcE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIcE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIcE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIcE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIdE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIdE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIdE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIdE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIdE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIdE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIdE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIdE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIdE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIdE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIdE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIdE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIdE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIeE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIeE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIeE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIeE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIeE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIeE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIeE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIeE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIeE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIeE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIeE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIeE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIeE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIfE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIfE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIfE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIfE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIfE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIfE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIfE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIfE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIfE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIfE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIfE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIfE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIfE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIhE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIhE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIhE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIhE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIhE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIhE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIhE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIhE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIhE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIhE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIhE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIhE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIhE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIiE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIiE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIiE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIiE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIiE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIiE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIiE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIiE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIiE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIiE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIiE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIiE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIiE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIjE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIjE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIjE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIjE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIjE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIjE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIjE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIjE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIjE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIjE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIjE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIjE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIjE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIlE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIlE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIlE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIlE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIlE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIlE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIlE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIlE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIlE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIlE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIlE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIlE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIlE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsImE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsImE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsImE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsImE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsImE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsImE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsImE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsImE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsImE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsImE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsImE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsImE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsImE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIsE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIsE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIsE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIsE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIsE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIsE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIsE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIsE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIsE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIsE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIsE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIsE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIsE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsItE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsItE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsItE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsItE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsItE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsItE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsItE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsItE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsItE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsItE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsItE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsItE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsItE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIxE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIxE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIxE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIxE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIxE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIxE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIxE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIxE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIxE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIxE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIxE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIxE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIxE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIyE10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIyE10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIyE12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIyE13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIyE14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIyE15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIyE15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIyE17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIyE5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIyE8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIyE9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIyE9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt14numeric_limitsIyE9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt17moneypunct_bynameIcLb0EE4intlE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt17moneypunct_bynameIcLb1EE4intlE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt21__numeric_limits_base10is_boundedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt21__numeric_limits_base10is_integerE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt21__numeric_limits_base12has_infinityE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt21__numeric_limits_base13has_quiet_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt21__numeric_limits_base14is_specializedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt21__numeric_limits_base15has_denorm_lossE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt21__numeric_limits_base15tinyness_beforeE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt21__numeric_limits_base17has_signaling_NaNE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt21__numeric_limits_base5trapsE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt21__numeric_limits_base8is_exactE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt21__numeric_limits_base9is_iec559E@@GLIBCPP_3.2
-OBJECT:1:_ZNSt21__numeric_limits_base9is_moduloE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt21__numeric_limits_base9is_signedE@@GLIBCPP_3.2
-OBJECT:1:_ZNSt8ios_base4Init20_S_synced_with_stdioE@@GLIBCPP_3.2
-OBJECT:1:_ZSt7nothrow@@GLIBCPP_3.2
-OBJECT:204:_ZSt11timepunct_c@@GLIBCPP_3.2
-OBJECT:20:_ZNSt6locale5_Impl14_S_id_monetaryE@@GLIBCPP_3.2
-OBJECT:20:_ZTSSt12ctype_bynameIcE@@GLIBCPP_3.2
-OBJECT:20:_ZTSSt15underflow_error@@GLIBCPP_3.2
-OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt10bad_typeid@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt11logic_error@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt11range_error@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt12domain_error@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt12length_error@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt12out_of_range@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt13bad_exception@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt13runtime_error@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt14overflow_error@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt15underflow_error@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt16invalid_argument@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt8bad_cast@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt9bad_alloc@@GLIBCPP_3.2
-OBJECT:20:_ZTVSt9exception@@GLIBCPP_3.2
-OBJECT:21:_ZTSSt16invalid_argument@@GLIBCPP_3.2
-OBJECT:22:_ZTSNSt8ios_base7failureE@@GLIBCPP_3.2
-OBJECT:22:_ZTSSt10moneypunctIcLb0EE@@GLIBCPP_3.2
-OBJECT:22:_ZTSSt10moneypunctIcLb1EE@@GLIBCPP_3.2
-OBJECT:22:_ZTSSt14collate_bynameIcE@@GLIBCPP_3.2
-OBJECT:23:_ZNSt10__num_base8_S_atomsE@@GLIBCPP_3.2
-OBJECT:23:_ZTSSt15messages_bynameIcE@@GLIBCPP_3.2
-OBJECT:23:_ZTSSt15numpunct_bynameIcE@@GLIBCPP_3.2
-OBJECT:24:_ZSt10numpunct_c@@GLIBCPP_3.2
-OBJECT:24:_ZTVSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:24:_ZTVSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:256:_ZSt12_S_bit_count@@GLIBCPP_3.2
-OBJECT:256:_ZSt12_S_first_one@@GLIBCPP_3.2
-OBJECT:28:_ZNSt6locale5_Impl19_S_facet_categoriesE@@GLIBCPP_3.2
-OBJECT:28:_ZSt7ctype_c@@GLIBCPP_3.2
-OBJECT:28:_ZTSSt7codecvtIcc11__mbstate_tE@@GLIBCPP_3.2
-OBJECT:28:_ZTTSd@@GLIBCPP_3.2
-OBJECT:28:_ZTVSt14collate_bynameIcE@@GLIBCPP_3.2
-OBJECT:28:_ZTVSt15messages_bynameIcE@@GLIBCPP_3.2
-OBJECT:28:_ZTVSt7collateIcE@@GLIBCPP_3.2
-OBJECT:28:_ZTVSt8messagesIcE@@GLIBCPP_3.2
-OBJECT:29:_ZTSSt17moneypunct_bynameIcLb0EE@@GLIBCPP_3.2
-OBJECT:29:_ZTSSt17moneypunct_bynameIcLb1EE@@GLIBCPP_3.2
-OBJECT:29:_ZTSSt21__ctype_abstract_baseIcE@@GLIBCPP_3.2
-OBJECT:2:_ZTSa@@GLIBCPP_3.2
-OBJECT:2:_ZTSb@@GLIBCPP_3.2
-OBJECT:2:_ZTSc@@GLIBCPP_3.2
-OBJECT:2:_ZTSd@@GLIBCPP_3.2
-OBJECT:2:_ZTSe@@GLIBCPP_3.2
-OBJECT:2:_ZTSf@@GLIBCPP_3.2
-OBJECT:2:_ZTSh@@GLIBCPP_3.2
-OBJECT:2:_ZTSi@@GLIBCPP_3.2
-OBJECT:2:_ZTSj@@GLIBCPP_3.2
-OBJECT:2:_ZTSl@@GLIBCPP_3.2
-OBJECT:2:_ZTSm@@GLIBCPP_3.2
-OBJECT:2:_ZTSs@@GLIBCPP_3.2
-OBJECT:2:_ZTSt@@GLIBCPP_3.2
-OBJECT:2:_ZTSv@@GLIBCPP_3.2
-OBJECT:2:_ZTSw@@GLIBCPP_3.2
-OBJECT:2:_ZTSx@@GLIBCPP_3.2
-OBJECT:2:_ZTSy@@GLIBCPP_3.2
-OBJECT:32:_ZTISi@@GLIBCPP_3.2
-OBJECT:32:_ZTISo@@GLIBCPP_3.2
-OBJECT:32:_ZTISt9basic_iosIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:32:_ZTVN10__cxxabiv116__enum_type_infoE@@GLIBCPP_3.2
-OBJECT:32:_ZTVN10__cxxabiv117__array_type_infoE@@GLIBCPP_3.2
-OBJECT:32:_ZTVN10__cxxabiv120__function_type_infoE@@GLIBCPP_3.2
-OBJECT:32:_ZTVN10__cxxabiv123__fundamental_type_infoE@@GLIBCPP_3.2
-OBJECT:32:_ZTVSt9type_info@@GLIBCPP_3.2
-OBJECT:33:_ZTSN10__cxxabiv116__enum_type_infoE@@GLIBCPP_3.2
-OBJECT:34:_ZTSN10__cxxabiv117__array_type_infoE@@GLIBCPP_3.2
-OBJECT:34:_ZTSN10__cxxabiv117__class_type_infoE@@GLIBCPP_3.2
-OBJECT:34:_ZTSN10__cxxabiv117__pbase_type_infoE@@GLIBCPP_3.2
-OBJECT:34:_ZTSSt9basic_iosIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:36:_ZSt13c_locale_impl@@GLIBCPP_3.2
-OBJECT:36:_ZTSN10__cxxabiv119__pointer_type_infoE@@GLIBCPP_3.2
-OBJECT:36:_ZTSSt14codecvt_bynameIcc11__mbstate_tE@@GLIBCPP_3.2
-OBJECT:36:_ZTVN10__cxxabiv117__pbase_type_infoE@@GLIBCPP_3.2
-OBJECT:36:_ZTVN10__cxxabiv119__pointer_type_infoE@@GLIBCPP_3.2
-OBJECT:36:_ZTVN10__cxxabiv129__pointer_to_member_type_infoE@@GLIBCPP_3.2
-OBJECT:36:_ZTVSt15numpunct_bynameIcE@@GLIBCPP_3.2
-OBJECT:36:_ZTVSt8numpunctIcE@@GLIBCPP_3.2
-OBJECT:37:_ZTSN10__cxxabiv120__function_type_infoE@@GLIBCPP_3.2
-OBJECT:37:_ZTSN10__cxxabiv120__si_class_type_infoE@@GLIBCPP_3.2
-OBJECT:38:_ZTSN10__cxxabiv121__vmi_class_type_infoE@@GLIBCPP_3.2
-OBJECT:39:_ZTSSt13basic_filebufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:39:_ZTSSt13basic_fstreamIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:3:_ZTSPa@@GLIBCPP_3.2
-OBJECT:3:_ZTSPb@@GLIBCPP_3.2
-OBJECT:3:_ZTSPc@@GLIBCPP_3.2
-OBJECT:3:_ZTSPd@@GLIBCPP_3.2
-OBJECT:3:_ZTSPe@@GLIBCPP_3.2
-OBJECT:3:_ZTSPf@@GLIBCPP_3.2
-OBJECT:3:_ZTSPh@@GLIBCPP_3.2
-OBJECT:3:_ZTSPi@@GLIBCPP_3.2
-OBJECT:3:_ZTSPj@@GLIBCPP_3.2
-OBJECT:3:_ZTSPl@@GLIBCPP_3.2
-OBJECT:3:_ZTSPm@@GLIBCPP_3.2
-OBJECT:3:_ZTSPs@@GLIBCPP_3.2
-OBJECT:3:_ZTSPt@@GLIBCPP_3.2
-OBJECT:3:_ZTSPv@@GLIBCPP_3.2
-OBJECT:3:_ZTSPw@@GLIBCPP_3.2
-OBJECT:3:_ZTSPx@@GLIBCPP_3.2
-OBJECT:3:_ZTSPy@@GLIBCPP_3.2
-OBJECT:3:_ZTSSd@@GLIBCPP_3.2
-OBJECT:3:_ZTSSi@@GLIBCPP_3.2
-OBJECT:3:_ZTSSo@@GLIBCPP_3.2
-OBJECT:40:_ZSt13moneypunct_fc@@GLIBCPP_3.2
-OBJECT:40:_ZSt13moneypunct_tc@@GLIBCPP_3.2
-OBJECT:40:_ZTISd@@GLIBCPP_3.2
-OBJECT:40:_ZTISt10moneypunctIcLb0EE@@GLIBCPP_3.2
-OBJECT:40:_ZTISt10moneypunctIcLb1EE@@GLIBCPP_3.2
-OBJECT:40:_ZTISt21__ctype_abstract_baseIcE@@GLIBCPP_3.2
-OBJECT:40:_ZTISt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCPP_3.2
-OBJECT:40:_ZTISt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:40:_ZTISt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:40:_ZTISt8messagesIcE@@GLIBCPP_3.2
-OBJECT:40:_ZTISt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:40:_ZTISt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:40:_ZTSN10__cxxabiv123__fundamental_type_infoE@@GLIBCPP_3.2
-OBJECT:40:_ZTSSt14basic_ifstreamIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:40:_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:40:_ZTTSt13basic_fstreamIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:40:_ZTTSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:40:_ZTTSt9strstream@@GLIBCPP_3.2
-OBJECT:40:_ZTVSi@@GLIBCPP_3.2
-OBJECT:40:_ZTVSo@@GLIBCPP_3.2
-OBJECT:40:_ZTVSt10istrstream@@GLIBCPP_3.2
-OBJECT:40:_ZTVSt10ostrstream@@GLIBCPP_3.2
-OBJECT:40:_ZTVSt14basic_ifstreamIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:40:_ZTVSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:40:_ZTVSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:40:_ZTVSt19basic_istringstreamIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@GLIBCPP_3.2
-OBJECT:44:_ZTVN10__cxxabiv120__si_class_type_infoE@@GLIBCPP_3.2
-OBJECT:44:_ZTVN10__cxxabiv121__vmi_class_type_infoE@@GLIBCPP_3.2
-OBJECT:44:_ZTVSt14codecvt_bynameIcc11__mbstate_tE@@GLIBCPP_3.2
-OBJECT:44:_ZTVSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCPP_3.2
-OBJECT:44:_ZTVSt7codecvtIcc11__mbstate_tE@@GLIBCPP_3.2
-OBJECT:45:_ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCPP_3.2
-OBJECT:46:_ZTSN10__cxxabiv129__pointer_to_member_type_infoE@@GLIBCPP_3.2
-OBJECT:46:_ZTSSt15basic_stringbufIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:480:_ZSt7buf_cin@@GLIBCPP_3.2
-OBJECT:480:_ZSt8buf_cerr@@GLIBCPP_3.2
-OBJECT:480:_ZSt8buf_cout@@GLIBCPP_3.2
-OBJECT:48:_ZTVSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:49:_ZTSN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:49:_ZTSSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:4:_ZNSs4_Rep11_S_max_sizeE@@GLIBCPP_3.2
-OBJECT:4:_ZNSs4nposE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt10ctype_base5alnumE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt10ctype_base5alphaE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt10ctype_base5cntrlE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt10ctype_base5digitE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt10ctype_base5graphE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt10ctype_base5lowerE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt10ctype_base5printE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt10ctype_base5punctE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt10ctype_base5spaceE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt10ctype_base5upperE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt10ctype_base6xdigitE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt10money_base18_S_default_patternE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt10moneypunctIcLb0EE2idE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt10moneypunctIcLb1EE2idE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt11__timepunctIcE2idE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIaE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIaE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIaE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIaE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIaE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIaE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIaE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIaE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIaE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIbE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIbE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIbE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIbE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIbE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIbE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIbE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIbE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIbE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIcE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIcE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIcE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIcE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIcE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIcE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIcE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIcE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIcE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIdE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIdE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIdE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIdE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIdE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIdE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIdE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIdE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIdE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIeE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIeE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIeE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIeE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIeE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIeE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIeE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIeE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIeE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIfE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIfE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIfE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIfE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIfE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIfE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIfE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIfE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIfE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIhE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIhE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIhE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIhE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIhE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIhE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIhE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIhE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIhE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIiE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIiE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIiE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIiE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIiE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIiE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIiE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIiE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIiE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIjE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIjE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIjE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIjE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIjE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIjE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIjE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIjE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIjE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIlE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIlE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIlE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIlE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIlE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIlE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIlE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIlE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIlE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsImE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsImE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsImE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsImE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsImE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsImE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsImE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsImE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsImE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIsE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIsE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIsE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIsE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIsE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIsE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIsE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIsE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIsE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsItE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsItE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsItE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsItE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsItE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsItE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsItE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsItE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsItE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIxE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIxE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIxE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIxE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIxE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIxE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIxE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIxE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIxE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIyE10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIyE11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIyE12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIyE12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIyE14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIyE14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIyE5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIyE6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt14numeric_limitsIyE8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt15basic_streambufIcSt11char_traitsIcEE13_S_pback_sizeE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt21__numeric_limits_base10has_denormE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt21__numeric_limits_base11round_styleE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt21__numeric_limits_base12max_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt21__numeric_limits_base12min_exponentE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt21__numeric_limits_base14max_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt21__numeric_limits_base14min_exponent10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt21__numeric_limits_base5radixE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt21__numeric_limits_base6digitsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt21__numeric_limits_base8digits10E@@GLIBCPP_3.2
-OBJECT:4:_ZNSt24__default_alloc_templateILb1ELi0EE11_S_end_freeE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt24__default_alloc_templateILb1ELi0EE12_S_heap_sizeE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt24__default_alloc_templateILb1ELi0EE13_S_start_freeE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt24__default_alloc_templateILb1ELi0EE22_S_node_allocator_lockE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt5ctypeIcE10table_sizeE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt5ctypeIcE2idE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt6locale10_S_classicE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt6locale17_S_num_categoriesE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt6locale2id12_S_highwaterE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt6locale3allE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt6locale4noneE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt6locale4timeE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt6locale5ctypeE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt6locale5facet11_S_c_localeE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt6locale7collateE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt6locale7numericE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt6locale8messagesE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt6locale8monetaryE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt6locale9_S_globalE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt7codecvtIcc11__mbstate_tE2idE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt7collateIcE2idE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base10floatfieldE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base10scientificE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base11adjustfieldE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base18_S_local_word_sizeE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base2inE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base3appE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base3ateE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base3begE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base3curE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base3decE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base3endE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base3hexE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base3octE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base3outE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base4Init16_S_ios_base_initE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base4leftE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base5fixedE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base5rightE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base5truncE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base6badbitE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base6binaryE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base6eofbitE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base6skipwsE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base7failbitE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base7goodbitE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base7showposE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base7unitbufE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base8internalE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base8showbaseE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base9basefieldE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base9boolalphaE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base9showpointE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8ios_base9uppercaseE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8messagesIcE2idE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8numpunctIcE2idE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCPP_3.2
-OBJECT:4:_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCPP_3.2
-OBJECT:4:_ZSt8c_locale@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKa@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKb@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKc@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKd@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKe@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKf@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKh@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKi@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKj@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKl@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKm@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKs@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKt@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKv@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKw@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKx@@GLIBCPP_3.2
-OBJECT:4:_ZTSPKy@@GLIBCPP_3.2
-OBJECT:50:_ZTSSt19basic_istringstreamIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:50:_ZTSSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:52:_ZTVSt10moneypunctIcLb0EE@@GLIBCPP_3.2
-OBJECT:52:_ZTVSt10moneypunctIcLb1EE@@GLIBCPP_3.2
-OBJECT:52:_ZTVSt17moneypunct_bynameIcLb0EE@@GLIBCPP_3.2
-OBJECT:52:_ZTVSt17moneypunct_bynameIcLb1EE@@GLIBCPP_3.2
-OBJECT:56:_ZNSt11__timepunctIcE12_S_timezonesE@@GLIBCPP_3.2
-OBJECT:56:_ZSt9facet_vec@@GLIBCPP_3.2
-OBJECT:58:_ZTSSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:58:_ZTSSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:59:_ZTSSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:59:_ZTSSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:60:_ZTSSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:60:_ZTSSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:60:_ZTVSd@@GLIBCPP_3.2
-OBJECT:60:_ZTVSt13basic_fstreamIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:60:_ZTVSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:60:_ZTVSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:60:_ZTVSt9strstream@@GLIBCPP_3.2
-OBJECT:64:_ZNSt24__default_alloc_templateILb1ELi0EE12_S_free_listE@@GLIBCPP_3.2
-OBJECT:64:_ZTVN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:64:_ZTVSt12ctype_bynameIcE@@GLIBCPP_3.2
-OBJECT:64:_ZTVSt12strstreambuf@@GLIBCPP_3.2
-OBJECT:64:_ZTVSt13basic_filebufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:64:_ZTVSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:64:_ZTVSt21__ctype_abstract_baseIcE@@GLIBCPP_3.2
-OBJECT:64:_ZTVSt5ctypeIcE@@GLIBCPP_3.2
-OBJECT:67:_ZTSSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:67:_ZTSSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCPP_3.2
-OBJECT:68:_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE@@GLIBCPP_3.2
-OBJECT:8:_ZGVNSt10moneypunctIcLb0EE2idE@@GLIBCPP_3.2
-OBJECT:8:_ZGVNSt10moneypunctIcLb1EE2idE@@GLIBCPP_3.2
-OBJECT:8:_ZGVNSt11__timepunctIcE2idE@@GLIBCPP_3.2
-OBJECT:8:_ZGVNSt7collateIcE2idE@@GLIBCPP_3.2
-OBJECT:8:_ZGVNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCPP_3.2
-OBJECT:8:_ZGVNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCPP_3.2
-OBJECT:8:_ZGVNSt8messagesIcE2idE@@GLIBCPP_3.2
-OBJECT:8:_ZGVNSt8numpunctIcE2idE@@GLIBCPP_3.2
-OBJECT:8:_ZGVNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCPP_3.2
-OBJECT:8:_ZGVNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCPP_3.2
-OBJECT:8:_ZGVNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCPP_3.2
-OBJECT:8:_ZGVNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCPP_3.2
-OBJECT:8:_ZNSt6locale5_Impl13_S_id_collateE@@GLIBCPP_3.2
-OBJECT:8:_ZNSt6locale5_Impl14_S_id_messagesE@@GLIBCPP_3.2
-OBJECT:8:_ZSt10time_get_c@@GLIBCPP_3.2
-OBJECT:8:_ZSt10time_put_c@@GLIBCPP_3.2
-OBJECT:8:_ZSt11money_get_c@@GLIBCPP_3.2
-OBJECT:8:_ZSt11money_put_c@@GLIBCPP_3.2
-OBJECT:8:_ZSt9codecvt_c@@GLIBCPP_3.2
-OBJECT:8:_ZSt9num_get_c@@GLIBCPP_3.2
-OBJECT:8:_ZSt9num_put_c@@GLIBCPP_3.2
-OBJECT:8:_ZTINSt6locale5facetE@@GLIBCPP_3.2
-OBJECT:8:_ZTISt10__num_base@@GLIBCPP_3.2
-OBJECT:8:_ZTISt10ctype_base@@GLIBCPP_3.2
-OBJECT:8:_ZTISt10money_base@@GLIBCPP_3.2
-OBJECT:8:_ZTISt12codecvt_base@@GLIBCPP_3.2
-OBJECT:8:_ZTISt13messages_base@@GLIBCPP_3.2
-OBJECT:8:_ZTISt15basic_streambufIcSt11char_traitsIcEE@@GLIBCPP_3.2
-OBJECT:8:_ZTISt8ios_base@@GLIBCPP_3.2
-OBJECT:8:_ZTISt9exception@@GLIBCPP_3.2
-OBJECT:8:_ZTISt9time_base@@GLIBCPP_3.2
-OBJECT:8:_ZTISt9type_info@@GLIBCPP_3.2
-OBJECT:8:_ZTIa@@GLIBCPP_3.2
-OBJECT:8:_ZTIb@@GLIBCPP_3.2
-OBJECT:8:_ZTIc@@GLIBCPP_3.2
-OBJECT:8:_ZTId@@GLIBCPP_3.2
-OBJECT:8:_ZTIe@@GLIBCPP_3.2
-OBJECT:8:_ZTIf@@GLIBCPP_3.2
-OBJECT:8:_ZTIh@@GLIBCPP_3.2
-OBJECT:8:_ZTIi@@GLIBCPP_3.2
-OBJECT:8:_ZTIj@@GLIBCPP_3.2
-OBJECT:8:_ZTIl@@GLIBCPP_3.2
-OBJECT:8:_ZTIm@@GLIBCPP_3.2
-OBJECT:8:_ZTIs@@GLIBCPP_3.2
-OBJECT:8:_ZTIt@@GLIBCPP_3.2
-OBJECT:8:_ZTIv@@GLIBCPP_3.2
-OBJECT:8:_ZTIw@@GLIBCPP_3.2
-OBJECT:8:_ZTIx@@GLIBCPP_3.2
-OBJECT:8:_ZTIy@@GLIBCPP_3.2
-OBJECT:8:_ZTTSi@@GLIBCPP_3.2
-OBJECT:8:_ZTTSo@@GLIBCPP_3.2
diff --git a/libstdc++-v3/config/cpu/arm/atomicity.h b/libstdc++-v3/config/cpu/arm/atomicity.h
index 2363edf7cdf..7b952aac365 100644
--- a/libstdc++-v3/config/cpu/arm/atomicity.h
+++ b/libstdc++-v3/config/cpu/arm/atomicity.h
@@ -32,51 +32,23 @@
typedef int _Atomic_word;
+/* It isn't possible to write an atomic add instruction using the ARM
+ SWP instruction without using either a global guard variable or a
+ guard bit somewhere in the Atomic word. However, even with a guard
+ bit we need to understand the thread model (if any) in order to
+ make co-operatively threaded applications work correctly.
+
+ The previous Thumb-based implementations were also completely
+ broken, since they failed to switch back into Thumb mode (Gas bug,
+ I think). */
+
static inline _Atomic_word
__attribute__ ((__unused__))
__exchange_and_add (volatile _Atomic_word* __mem, int __val)
{
- _Atomic_word __tmp, __tmp2, __result;
-#ifdef __thumb__
- /* Since this function is inlined, we can't be sure of the alignment. */
- __asm__ __volatile__ (
- "ldr %0, 4f \n\t"
- "bx %0 \n\t"
- ".align 0 \n"
- "4:\t"
- ".word 0f \n\t"
- ".code 32 \n"
- "0:\t"
- "ldr %0, [%3] \n\t"
- "add %1, %0, %4 \n\t"
- "swp %2, %1, [%3] \n\t"
- "cmp %0, %2 \n\t"
- "swpne %1, %2, [%3] \n\t"
- "bne 0b \n\t"
- "ldr %1, 1f \n\t"
- "bx %1 \n"
- "1:\t"
- ".word 2f \n\t"
- ".code 16 \n"
- "2:\n"
- : "=&l"(__result), "=&r"(__tmp), "=&r"(__tmp2)
- : "r" (__mem), "r"(__val)
- : "cc", "memory");
-#else
- __asm__ __volatile__ (
- "\n"
- "0:\t"
- "ldr %0, [%3] \n\t"
- "add %1, %0, %4 \n\t"
- "swp %2, %1, [%3] \n\t"
- "cmp %0, %2 \n\t"
- "swpne %1, %2, [%3] \n\t"
- "bne 0b \n\t"
- ""
- : "=&r"(__result), "=&r"(__tmp), "=&r"(__tmp2)
- : "r" (__mem), "r"(__val)
- : "cc", "memory");
-#endif
+ _Atomic_word __result = *__mem;
+
+ *__mem = __result + __val;
return __result;
}
@@ -84,138 +56,7 @@ static inline void
__attribute__ ((__unused__))
__atomic_add (volatile _Atomic_word *__mem, int __val)
{
- _Atomic_word __tmp, __tmp2, __tmp3;
-#ifdef __thumb__
- /* Since this function is inlined, we can't be sure of the alignment. */
- __asm__ __volatile__ (
- "ldr %0, 4f \n\t"
- "bx %0 \n\t"
- ".align 0\n"
- "4:\t"
- ".word 0f \n\t"
- ".code 32 \n"
- "0:\t"
- "ldr %0, [%3] \n\t"
- "add %1, %0, %4 \n\t"
- "swp %2, %1, [%3] \n\t"
- "cmp %0, %2 \n\t"
- "swpne %1, %2,[%3] \n\t"
- "bne 0b \n\t"
- "ldr %1, 1f \n\t"
- "bx %1 \n"
- "1:\t"
- ".word 2f \n\t"
- ".code 16 \n"
- "2:\n"
- : "=&l"(__tmp), "=&r"(__tmp2), "=&r"(__tmp3)
- : "r" (__mem), "r"(__val)
- : "cc", "memory");
-#else
- __asm__ __volatile__ (
- "\n"
- "0:\t"
- "ldr %0, [%3] \n\t"
- "add %1, %0, %4 \n\t"
- "swp %2, %1, [%3] \n\t"
- "cmp %0, %2 \n\t"
- "swpne %1, %2, [%3] \n\t"
- "bne 0b \n\t"
- ""
- : "=&r"(__tmp), "=&r"(__tmp2), "=&r"(__tmp3)
- : "r" (__mem), "r"(__val)
- : "cc", "memory");
-#endif
-}
-
-static inline long
-__attribute__ ((__unused__))
-__always_swap (volatile long *__p, long __newval)
-{
- long __result;
-#ifdef __thumb__
- long __tmp;
- /* Since this function is inlined, we can't be sure of the alignment. */
- __asm__ __volatile__ (
- "ldr %0, 4f \n\t"
- "bx %0 \n\t"
- ".align 0 \n"
- "4:\t"
- ".word 0f \n\t"
- ".code 32\n"
- "0:\t"
- "swp %0, %3, [%2] \n\t"
- "ldr %1, 1f \n\t"
- "bx %1 \n"
- "1:\t"
- ".word 2f \n\t"
- ".code 16 \n"
- "2:\n"
- : "=&l"(__result), "=&r"(__tmp)
- : "r"(__p), "r"(__newval)
- : "memory");
-#else
- __asm__ __volatile__ (
- "\n\t"
- "swp %0, %2, [%1] \n\t"
- ""
- : "=&r"(__result)
- : "r"(__p), "r"(__newval)
- : "memory");
-#endif
- return __result;
-}
-
-static inline int
-__attribute__ ((__unused__))
-__test_and_set (volatile long *__p, long __newval)
-{
- int __result;
- long __tmp;
-#ifdef __thumb__
- /* Since this function is inlined, we can't be sure of the alignment. */
- __asm__ __volatile__ (
- "ldr %0, 4f \n\t"
- "bx %0 \n\t"
- ".align 0 \n"
- "4:\t"
- ".word 0f \n\t"
- ".code 32 \n"
- "0:\t"
- "ldr %0, [%2] \n\t"
- "cmp %0, #0 \n\t"
- "bne 1f \n\t"
- "swp %1, %3, [%2] \n\t"
- "cmp %0, %1 \n\t"
- "swpne %0, %1, [%2]\n\t"
- "bne 0b \n"
- "1:\t"
- "ldr %1, 2f \n\t"
- "bx %1 \n"
- "2:\t"
- ".word 3f \n\t"
- ".code 16 \n"
- "3:"
- : "=&l"(__result), "=r" (__tmp)
- : "r"(__p), "r"(__newval)
- : "cc", "memory");
-#else
- __asm__ __volatile__ (
- "\n"
- "0:\t"
- "ldr %0, [%2] \n\t"
- "cmp %0, #0 \n\t"
- "bne 1f \n\t"
- "swp %1, %3, [%2] \n\t"
- "cmp %0, %1 \n\t"
- "swpne %0, %1, [%2] \n\t"
- "bne 0b \n"
- "1:\n\t"
- ""
- : "=&r"(__result), "=r" (__tmp)
- : "r"(__p), "r"(__newval)
- : "cc", "memory");
-#endif
- return __result;
+ __exchange_and_add (__mem, __val);
}
#endif /* atomicity.h */
diff --git a/libstdc++-v3/config/linker-map.gnu b/libstdc++-v3/config/linker-map.gnu
index 368a20768bd..9edcbb824d3 100644
--- a/libstdc++-v3/config/linker-map.gnu
+++ b/libstdc++-v3/config/linker-map.gnu
@@ -20,7 +20,6 @@
## Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
## USA.
-
GLIBCPP_3.2 {
global:
@@ -29,7 +28,28 @@ GLIBCPP_3.2 {
# All but the last are terminated with a semicolon.
extern "C++"
{
- std::[A-Za-z]*;
+ std::[A-Za-b]*;
+ std::c[a-n]*;
+ std::co[a-c]*;
+ std::codecvt_byname*;
+ std::codecvt::[A-Za-b]*;
+ std::codecvt::[A-Zd-z]*;
+ std::codecvt_c;
+ std::codecvt_w;
+ std::co[e-z]*;
+ std::c[p-z]*;
+ std::c_[a-z]*;
+ std::[A-Zd-k]*;
+ std::length_error*;
+ std::logic_error*;
+ std::locale::[A-Za-z]*;
+ std::locale::_[A-Ra-z]*;
+ std::locale::_S_classic;
+ std::locale::_S_global;
+ std::locale::_S_num_categories;
+ std::locale::_S_normalize_category*;
+ std::locale::_[T-Za-z]*;
+ std::[A-Zm-z]*;
std::__throw_*;
std::__basic_file*;
std::__num_base*;
@@ -43,6 +63,37 @@ GLIBCPP_3.2 {
# Names not in an 'extern' block are mangled names.
+ # std::locale destructors
+ _ZNSt6localeD*;
+
+ # std::codecvt<char> members.
+ _ZNKSt7codecvtIcc11__mbstate_tE*;
+ # std::codecvt<char>::~codecvt
+ _ZNSt7codecvtIcc11__mbstate_tED*;
+ # std::codecvt<char>::codecvt(size_t), where size_t variable.
+ _ZNSt7codecvtIcc11__mbstate_tEC1Ej;
+ _ZNSt7codecvtIcc11__mbstate_tEC2Ej;
+ _ZNSt7codecvtIcc11__mbstate_tEC1Em;
+ _ZNSt7codecvtIcc11__mbstate_tEC2Em;
+ # std::codecvt<char>::id
+ _ZNSt7codecvtIcc11__mbstate_tE2idE;
+
+ # std::codecvt<wchar_t> members.
+ _ZNKSt7codecvtIwc11__mbstate_tE*;
+ # std::codecvt<wchar_t>::~codecvt
+ _ZNSt7codecvtIwc11__mbstate_tED*;
+ # std::codecvt<wchar_t>::codecvt(size_t), where size_t variable.
+ _ZNSt7codecvtIwc11__mbstate_tEC1Ej;
+ _ZNSt7codecvtIwc11__mbstate_tEC2Ej;
+ _ZNSt7codecvtIwc11__mbstate_tEC1Em;
+ _ZNSt7codecvtIwc11__mbstate_tEC2Em;
+ # std::codecvt<wchar_t>::id
+ _ZNSt7codecvtIwc11__mbstate_tE2idE;
+
+ # std::use_facet<codecvt>
+ _ZSt9use_facetISt7codecvtIcc11__mbstate_tEERKT_RKSt6locale;
+ _ZSt9use_facetISt7codecvtIwc11__mbstate_tEERKT_RKSt6locale;
+
# std::has_facet*
_ZSt9has_facet*;
@@ -97,6 +148,15 @@ GLIBCPP_3.2 {
*;
};
+# Symbols added after GLIBCPP_3.2
+GLIBCPP_3.2.1 {
+
+ _ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj;
+ _ZNSt7codecvtIcc11__mbstate_tEC2EP15__locale_structj;
+ _ZNSt7codecvtIwc11__mbstate_tEC1EP15__locale_structj;
+ _ZNSt7codecvtIwc11__mbstate_tEC2EP15__locale_structj;
+
+} GLIBCPP_3.2;
# Symbols in the support library (libsupc++) have their own tag.
CXXABI_1.2 {
diff --git a/libstdc++-v3/config/locale/generic/c_locale.cc b/libstdc++-v3/config/locale/generic/c_locale.cc
index e274836fd90..689bbf592b9 100644
--- a/libstdc++-v3/config/locale/generic/c_locale.cc
+++ b/libstdc++-v3/config/locale/generic/c_locale.cc
@@ -223,4 +223,15 @@ namespace std
__c_locale
locale::facet::_S_clone_c_locale(__c_locale&)
{ return __c_locale(); }
+
+ const char* locale::_S_categories[_S_categories_size
+ + _S_extra_categories_size] =
+ {
+ "LC_CTYPE",
+ "LC_NUMERIC",
+ "LC_COLLATE",
+ "LC_TIME",
+ "LC_MONETARY",
+ "LC_MESSAGES"
+ };
} // namespace std
diff --git a/libstdc++-v3/config/locale/generic/c_locale.h b/libstdc++-v3/config/locale/generic/c_locale.h
index bfd9bf0a0bf..9627d8646af 100644
--- a/libstdc++-v3/config/locale/generic/c_locale.h
+++ b/libstdc++-v3/config/locale/generic/c_locale.h
@@ -35,6 +35,8 @@
#include <clocale>
+#define _GLIBCPP_NUM_CATEGORIES 0
+
namespace std
{
typedef int* __c_locale;
diff --git a/libstdc++-v3/config/locale/generic/time_members.cc b/libstdc++-v3/config/locale/generic/time_members.cc
index d02f0c3fa0e..fd45645a690 100644
--- a/libstdc++-v3/config/locale/generic/time_members.cc
+++ b/libstdc++-v3/config/locale/generic/time_members.cc
@@ -39,13 +39,6 @@
namespace std
{
template<>
- __timepunct<char>::~__timepunct()
- {
- if (_M_c_locale_timepunct != _S_c_locale)
- _S_destroy_c_locale(_M_c_locale_timepunct);
- }
-
- template<>
void
__timepunct<char>::
_M_put(char* __s, size_t __maxlen, const char* __format,
@@ -122,13 +115,6 @@ namespace std
#ifdef _GLIBCPP_USE_WCHAR_T
template<>
- __timepunct<wchar_t>::~__timepunct()
- {
- if (_M_c_locale_timepunct != _S_c_locale)
- _S_destroy_c_locale(_M_c_locale_timepunct);
- }
-
- template<>
void
__timepunct<wchar_t>::
_M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
diff --git a/libstdc++-v3/config/locale/gnu/c_locale.cc b/libstdc++-v3/config/locale/gnu/c_locale.cc
index 3982a65ceb6..188f3a2f1c1 100644
--- a/libstdc++-v3/config/locale/gnu/c_locale.cc
+++ b/libstdc++-v3/config/locale/gnu/c_locale.cc
@@ -178,9 +178,29 @@ namespace std
void
locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
- { __freelocale(__cloc); }
+ {
+ if (_S_c_locale != __cloc)
+ __freelocale(__cloc);
+ }
__c_locale
locale::facet::_S_clone_c_locale(__c_locale& __cloc)
{ return __duplocale(__cloc); }
+
+ const char* locale::_S_categories[_S_categories_size
+ + _S_extra_categories_size] =
+ {
+ "LC_CTYPE",
+ "LC_NUMERIC",
+ "LC_COLLATE",
+ "LC_TIME",
+ "LC_MONETARY",
+ "LC_MESSAGES",
+ "LC_PAPER",
+ "LC_NAME",
+ "LC_ADDRESS",
+ "LC_TELEPHONE",
+ "LC_MEASUREMENT",
+ "LC_IDENTIFICATION"
+ };
} // namespace std
diff --git a/libstdc++-v3/config/locale/gnu/c_locale.h b/libstdc++-v3/config/locale/gnu/c_locale.h
index aabbe6af425..130b843d7f9 100644
--- a/libstdc++-v3/config/locale/gnu/c_locale.h
+++ b/libstdc++-v3/config/locale/gnu/c_locale.h
@@ -40,6 +40,8 @@
#define _GLIBCPP_C_LOCALE_GNU 1
+#define _GLIBCPP_NUM_CATEGORIES 6
+
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
namespace __gnu_cxx
{
diff --git a/libstdc++-v3/config/locale/gnu/ctype_members.cc b/libstdc++-v3/config/locale/gnu/ctype_members.cc
index db1e356d038..3b78c60405a 100644
--- a/libstdc++-v3/config/locale/gnu/ctype_members.cc
+++ b/libstdc++-v3/config/locale/gnu/ctype_members.cc
@@ -44,8 +44,7 @@ namespace std
ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
: ctype<char>(0, false, __refs)
{
- if (_M_c_locale_ctype != _S_c_locale)
- _S_destroy_c_locale(_M_c_locale_ctype);
+ _S_destroy_c_locale(_M_c_locale_ctype);
_S_create_c_locale(_M_c_locale_ctype, __s);
_M_toupper = _M_c_locale_ctype->__ctype_toupper;
_M_tolower = _M_c_locale_ctype->__ctype_tolower;
diff --git a/libstdc++-v3/config/locale/gnu/monetary_members.cc b/libstdc++-v3/config/locale/gnu/monetary_members.cc
index 68b154bdc7c..0386ab6dc54 100644
--- a/libstdc++-v3/config/locale/gnu/monetary_members.cc
+++ b/libstdc++-v3/config/locale/gnu/monetary_members.cc
@@ -220,7 +220,7 @@ namespace std
moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc,
const char*)
{
- if (__cloc == _S_c_locale)
+ if (!__cloc)
{
// "C" locale
_M_decimal_point = '.';
@@ -265,7 +265,7 @@ namespace std
moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc,
const char*)
{
- if (__cloc == _S_c_locale)
+ if (!__cloc)
{
// "C" locale
_M_decimal_point = '.';
@@ -319,7 +319,7 @@ namespace std
moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc,
const char* __name)
{
- if (__cloc == _S_c_locale)
+ if (!__cloc)
{
// "C" locale
_M_decimal_point = L'.';
@@ -348,14 +348,12 @@ namespace std
_M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
- mbstate_t __state;
- size_t __len;
const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
- // NB: Should swich to __cloc's ctype info first.
- __len = strlen(__cpossign);
+ mbstate_t __state;
+ size_t __len = strlen(__cpossign);
if (__len)
{
++__len;
@@ -418,7 +416,7 @@ namespace std
moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
const char* __name)
{
- if (__cloc == _S_c_locale)
+ if (!__cloc)
{
// "C" locale
_M_decimal_point = L'.';
@@ -446,13 +444,12 @@ namespace std
_M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
- mbstate_t __state;
- size_t __len;
const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
- // NB: Should swich to __cloc's ctype info first.
+ mbstate_t __state;
+ size_t __len;
__len = strlen(__cpossign);
if (__len)
{
diff --git a/libstdc++-v3/config/locale/gnu/numeric_members.cc b/libstdc++-v3/config/locale/gnu/numeric_members.cc
index b71374c4b8e..a502bfb2150 100644
--- a/libstdc++-v3/config/locale/gnu/numeric_members.cc
+++ b/libstdc++-v3/config/locale/gnu/numeric_members.cc
@@ -42,7 +42,7 @@ namespace std
void
numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
{
- if (__cloc == _S_c_locale)
+ if (!__cloc)
{
// "C" locale
_M_decimal_point = '.';
@@ -76,7 +76,7 @@ namespace std
void
numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
{
- if (__cloc == _S_c_locale)
+ if (!__cloc)
{
// "C" locale
_M_decimal_point = L'.';
diff --git a/libstdc++-v3/config/locale/gnu/time_members.cc b/libstdc++-v3/config/locale/gnu/time_members.cc
index ce3d9bf0106..7df10b8ab71 100644
--- a/libstdc++-v3/config/locale/gnu/time_members.cc
+++ b/libstdc++-v3/config/locale/gnu/time_members.cc
@@ -40,13 +40,6 @@
namespace std
{
template<>
- __timepunct<char>::~__timepunct()
- {
- if (_M_c_locale_timepunct != _S_c_locale)
- _S_destroy_c_locale(_M_c_locale_timepunct);
- }
-
- template<>
void
__timepunct<char>::
_M_put(char* __s, size_t __maxlen, const char* __format,
@@ -67,11 +60,10 @@ namespace std
void
__timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
{
- if (__cloc == _S_c_locale)
+ if (!__cloc)
{
// "C" locale
-
- _M_c_locale_timepunct = _S_c_locale;
+ _M_c_locale_timepunct = _S_c_locale;
_M_date_format = "%m/%d/%y";
_M_date_era_format = "%m/%d/%y";
@@ -193,13 +185,6 @@ namespace std
#ifdef _GLIBCPP_USE_WCHAR_T
template<>
- __timepunct<wchar_t>::~__timepunct()
- {
- if (_M_c_locale_timepunct != _S_c_locale)
- _S_destroy_c_locale(_M_c_locale_timepunct);
- }
-
- template<>
void
__timepunct<wchar_t>::
_M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
@@ -220,11 +205,10 @@ namespace std
void
__timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
{
- if (__cloc == _S_c_locale)
+ if (!__cloc)
{
// "C" locale
-
- _M_c_locale_timepunct = _S_c_locale;
+ _M_c_locale_timepunct = _S_c_locale;
_M_date_format = L"%m/%d/%y";
_M_date_era_format = L"%m/%d/%y";
diff --git a/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h b/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h
index 1578828cced..8f06d1397ee 100644
--- a/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h
+++ b/libstdc++-v3/config/os/gnu-linux/ctype_noninline.h
@@ -38,8 +38,7 @@
const ctype_base::mask*
ctype<char>::classic_table() throw()
{
- if (!_S_c_locale)
- _S_create_c_locale(_S_c_locale, "C");
+ locale::classic();
return _S_c_locale->__ctype_b;
}
#else
@@ -96,7 +95,7 @@
ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) :
__ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
{
- _M_c_locale_ctype = _S_c_locale;
+ _M_c_locale_ctype = _S_c_locale;
_M_toupper = _M_c_locale_ctype->__ctype_toupper;
_M_tolower = _M_c_locale_ctype->__ctype_tolower;
_M_table = __table ? __table : _M_c_locale_ctype->__ctype_b;
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index fd0c325cd01..04ff41f984b 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -837,7 +837,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=yes
- for ac_prog in gawk mawk nawk awk
+ for ac_prog in mawk gawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
@@ -1465,7 +1465,7 @@ else
if { (eval echo configure:1466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
for file in conftest.*; do
case $file in
- *.c | *.o | *.obj) ;;
+ *.$ac_ext | *.c | *.o | *.obj) ;;
*) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
esac
done
@@ -4107,7 +4107,7 @@ if test -n "$with_cross_host" || test x"$build" != x"$host"; then
# GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT
# GLIBCPP_CHECK_MATH_SUPPORT
- case "$target_alias" in
+ case "$target" in
*-linux*)
os_include_dir="os/gnu-linux"
for ac_hdr in nan.h ieeefp.h endian.h sys/isa_defs.h \
@@ -6020,7 +6020,7 @@ EOF
#define HAVE_HYPOT 1
EOF
- case "$target_alias" in
+ case "$target" in
*-hpux10*)
cat >> confdefs.h <<\EOF
#define HAVE_FINITE 1
@@ -7020,22 +7020,1013 @@ EOF
fi
;;
+ *-freebsd*)
+ # Check for available headers.
+ for ac_hdr in nan.h ieeefp.h endian.h sys/isa_defs.h \
+ machine/endian.h machine/param.h sys/machine.h sys/types.h \
+ fp.h locale.h float.h inttypes.h sys/resource.h sys/stat.h \
+ sys/time.h unistd.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:7033: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 7038 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:7043: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+ SECTION_FLAGS='-ffunction-sections -fdata-sections'
+
+
+ # If we're not using GNU ld, then there's no point in even trying these
+ # tests. Check for that first. We should have already tested for gld
+ # by now (in libtool), but require it now just to be safe...
+ test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
+ test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
+
+
+ # The name set by libtool depends on the version of libtool. Shame on us
+ # for depending on an impl detail, but c'est la vie. Older versions used
+ # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
+ # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
+ # makes sense). We'll test with_gnu_ld everywhere else, so if that isn't
+ # set (hence we're using an older libtool), then set it.
+ if test x${with_gnu_ld+set} != xset; then
+ if test x${ac_cv_prog_gnu_ld+set} != xset; then
+ # We got through "ac_require(ac_prog_ld)" and still not set? Huh?
+ with_gnu_ld=no
+ else
+ with_gnu_ld=$ac_cv_prog_gnu_ld
+ fi
+ fi
+
+ # Start by getting the version number. I think the libtool test already
+ # does some of this, but throws away the result.
+
+ ldver=`$LD --version 2>/dev/null | head -1 | \
+ sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
+
+ glibcpp_gnu_ld_version=`echo $ldver | \
+ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
+
+ # Set --gc-sections.
+ if test "$with_gnu_ld" = "notbroken"; then
+ # GNU ld it is! Joy and bunny rabbits!
+
+ # All these tests are for C++; save the language and the compiler flags.
+ # Need to do this so that g++ won't try to link in libstdc++
+ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS='-x c++ -Wl,--gc-sections'
+
+ # Check for -Wl,--gc-sections
+ # XXX This test is broken at the moment, as symbols required for
+ # linking are now in libsupc++ (not built yet.....). In addition,
+ # this test has cored on solaris in the past. In addition,
+ # --gc-sections doesn't really work at the moment (keeps on discarding
+ # used sections, first .eh_frame and now some of the glibc sections for
+ # iconv). Bzzzzt. Thanks for playing, maybe next time.
+ echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
+echo "configure:7121: checking for ld that supports -Wl,--gc-sections" >&5
+ if test "$cross_compiling" = yes; then
+ ac_sectionLDflags=yes
+else
+ cat > conftest.$ac_ext <<EOF
+#line 7126 "configure"
+#include "confdefs.h"
+
+ int main(void)
+ {
+ try { throw 1; }
+ catch (...) { };
+ return 0;
+ }
+
+EOF
+if { (eval echo configure:7137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ ac_sectionLDflags=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_sectionLDflags=no
+fi
+rm -fr conftest*
+fi
+
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+ else
+ # this is the suspicious part
+ CFLAGS=''
+ fi
+ if test "$ac_sectionLDflags" = "yes"; then
+ SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
+ fi
+ echo "$ac_t""$ac_sectionLDflags" 1>&6
+ fi
+
+ # Set linker optimization flags.
+ if test x"$with_gnu_ld" = x"yes" && test x"$enable_debug" = x"no"; then
+ OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
+ fi
+
+
+
+
+
+ echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
+echo "configure:7171: checking for main in -lm" >&5
+ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lm $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 7179 "configure"
+#include "confdefs.h"
+
+int main() {
+main()
+; return 0; }
+EOF
+if { (eval echo configure:7186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_lib=HAVE_LIB`echo m | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+ LIBS="-lm $LIBS"
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ for ac_func in nan copysignf
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:7216: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 7221 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:7244: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"
+fi
+done
+
+
+ for ac_func in __signbit
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:7273: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 7278 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:7301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+LIBMATHOBJS="$LIBMATHOBJS signbit.lo"
+fi
+done
+
+ for ac_func in __signbitf
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:7329: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 7334 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:7357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+LIBMATHOBJS="$LIBMATHOBJS signbitf.lo"
+fi
+done
+
+
+ if test x$ac_cv_func_copysignl = x"yes"; then
+ for ac_func in __signbitl
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:7387: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 7392 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:7415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+LIBMATHOBJS="$LIBMATHOBJS signbitl.lo"
+fi
+done
+
+ fi
+
+
+
+
+
+ echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
+echo "configure:7447: checking for mbstate_t" >&5
+ cat > conftest.$ac_ext <<EOF
+#line 7449 "configure"
+#include "confdefs.h"
+#include <wchar.h>
+int main() {
+mbstate_t teststate;
+; return 0; }
+EOF
+if { (eval echo configure:7456: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ have_mbstate_t=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ have_mbstate_t=no
+fi
+rm -f conftest*
+ echo "$ac_t""$have_mbstate_t" 1>&6
+ if test x"$have_mbstate_t" = xyes; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_MBSTATE_T 1
+EOF
+
+ fi
+
+ for ac_hdr in wchar.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:7478: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 7483 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:7488: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+ ac_has_wchar_h=yes
+else
+ echo "$ac_t""no" 1>&6
+ac_has_wchar_h=no
+fi
+done
+
+ for ac_hdr in wctype.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:7519: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 7524 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:7529: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+ ac_has_wctype_h=yes
+else
+ echo "$ac_t""no" 1>&6
+ac_has_wctype_h=no
+fi
+done
+
+
+ if test x"$ac_has_wchar_h" = xyes &&
+ test x"$ac_has_wctype_h" = xyes &&
+ test x"$enable_c_mbchar" != xno; then
+
+ echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
+echo "configure:7562: checking for WCHAR_MIN and WCHAR_MAX" >&5
+ cat > conftest.$ac_ext <<EOF
+#line 7564 "configure"
+#include "confdefs.h"
+#include <wchar.h>
+int main() {
+int i = WCHAR_MIN; int j = WCHAR_MAX;
+; return 0; }
+EOF
+if { (eval echo configure:7571: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ has_wchar_minmax=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ has_wchar_minmax=no
+fi
+rm -f conftest*
+ echo "$ac_t""$has_wchar_minmax" 1>&6
+
+ echo $ac_n "checking for WEOF""... $ac_c" 1>&6
+echo "configure:7584: checking for WEOF" >&5
+ cat > conftest.$ac_ext <<EOF
+#line 7586 "configure"
+#include "confdefs.h"
+
+ #include <wchar.h>
+ #include <stddef.h>
+int main() {
+wint_t i = WEOF;
+; return 0; }
+EOF
+if { (eval echo configure:7595: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ has_weof=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ has_weof=no
+fi
+rm -f conftest*
+ echo "$ac_t""$has_weof" 1>&6
+
+ ac_wfuncs=yes
+ for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:7611: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 7616 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:7639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+\
+ ac_wfuncs=no
+fi
+done
+
+
+ for ac_func in btowc wctob fgetwc fgetwc fgetws fputwc fputws fwide \
+ fwprintf fwscanf swprintf swscanf vfwprintf vfwscanf vswprintf vswscanf \
+ vwprintf vwscanf wprintf wscanf getwc getwchar mbsinit mbrlen mbrtowc \
+ mbsrtowcs wcsrtombs putwc putwchar ungetwc wcrtomb wcstod wcstof wcstol \
+ wcstoul wcscpy wcsncpy wcscat wcsncat wcscmp wcscoll wcsncmp wcsxfrm \
+ wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:7674: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 7679 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:7702: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+\
+ ac_wfuncs=no
+fi
+done
+
+
+ echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
+echo "configure:7730: checking for ISO C99 wchar_t support" >&5
+ if test x"$has_weof" = xyes &&
+ test x"$has_wchar_minmax" = xyes &&
+ test x"$ac_wfuncs" = xyes; then
+ ac_isoC99_wchar_t=yes
+ else
+ ac_isoC99_wchar_t=no
+ fi
+ echo "$ac_t""$ac_isoC99_wchar_t" 1>&6
+
+ ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
+echo "configure:7742: checking for iconv.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 7747 "configure"
+#include "confdefs.h"
+#include <iconv.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:7752: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_has_iconv_h=yes
+else
+ echo "$ac_t""no" 1>&6
+ac_has_iconv_h=no
+fi
+
+ ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
+echo "configure:7776: checking for langinfo.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 7781 "configure"
+#include "confdefs.h"
+#include <langinfo.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:7786: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_has_langinfo_h=yes
+else
+ echo "$ac_t""no" 1>&6
+ac_has_langinfo_h=no
+fi
+
+
+ echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
+echo "configure:7810: checking for iconv in -liconv" >&5
+ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-liconv $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 7818 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char iconv();
+
+int main() {
+iconv()
+; return 0; }
+EOF
+if { (eval echo configure:7829: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ libiconv="-liconv"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS $libiconv"
+
+ for ac_func in iconv_open iconv_close iconv nl_langinfo
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:7855: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 7860 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:7883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+ \
+ ac_XPG2funcs=yes
+else
+ echo "$ac_t""no" 1>&6
+ac_XPG2funcs=no
+fi
+done
+
+
+ LIBS="$ac_save_LIBS"
+
+ echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
+echo "configure:7913: checking for XPG2 wchar_t support" >&5
+ if test x"$ac_has_iconv_h" = xyes &&
+ test x"$ac_has_langinfo_h" = xyes &&
+ test x"$ac_XPG2funcs" = xyes; then
+ ac_XPG2_wchar_t=yes
+ else
+ ac_XPG2_wchar_t=no
+ fi
+ echo "$ac_t""$ac_XPG2_wchar_t" 1>&6
+
+ echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
+echo "configure:7924: checking for enabled wchar_t specializations" >&5
+ if test x"$ac_isoC99_wchar_t" = xyes &&
+ test x"$ac_XPG2_wchar_t" = xyes; then
+ cat >> confdefs.h <<\EOF
+#define _GLIBCPP_USE_WCHAR_T 1
+EOF
+
+ echo "$ac_t"""yes"" 1>&6
+ else
+ echo "$ac_t"""no"" 1>&6
+ fi
+ else
+ echo "configure: warning: wchar_t support disabled." 1>&2
+ fi
+
+ os_include_dir="os/bsd/freebsd"
+ cat >> confdefs.h <<\EOF
+#define HAVE_LC_MESSAGES 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_DRAND48 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_GETPAGESIZE 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_SETENV 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_SIGSETJMP 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_COPYSIGN 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_COPYSIGNF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_FINITEF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_FINITE 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_FREXPF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_HYPOT 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_HYPOTF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_ISINF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_ISNAN 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_ISNANF 1
+EOF
+
+ if test x"long_double_math_on_this_cpu" = x"yes"; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_FINITEL 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_ISINFL 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_ISNANL 1
+EOF
+
+ fi
+ ;;
*-mingw32*)
for ac_hdr in sys/types.h locale.h float.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7029: checking for $ac_hdr" >&5
+echo "configure:8020: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7034 "configure"
+#line 8025 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7039: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8030: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -7111,12 +8102,12 @@ done
# used sections, first .eh_frame and now some of the glibc sections for
# iconv). Bzzzzt. Thanks for playing, maybe next time.
echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
-echo "configure:7115: checking for ld that supports -Wl,--gc-sections" >&5
+echo "configure:8106: checking for ld that supports -Wl,--gc-sections" >&5
if test "$cross_compiling" = yes; then
ac_sectionLDflags=yes
else
cat > conftest.$ac_ext <<EOF
-#line 7120 "configure"
+#line 8111 "configure"
#include "confdefs.h"
int main(void)
@@ -7127,7 +8118,7 @@ else
}
EOF
-if { (eval echo configure:7131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8122: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_sectionLDflags=yes
else
@@ -7161,7 +8152,7 @@ fi
echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:7165: checking for main in -lm" >&5
+echo "configure:8156: checking for main in -lm" >&5
ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7169,14 +8160,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7173 "configure"
+#line 8164 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:7180: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8171: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7206,12 +8197,12 @@ fi
for ac_func in nan copysignf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7210: checking for $ac_func" >&5
+echo "configure:8201: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7215 "configure"
+#line 8206 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7234,7 +8225,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7263,12 +8254,12 @@ done
for ac_func in __signbit
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7267: checking for $ac_func" >&5
+echo "configure:8258: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7272 "configure"
+#line 8263 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7291,7 +8282,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7319,12 +8310,12 @@ done
for ac_func in __signbitf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7323: checking for $ac_func" >&5
+echo "configure:8314: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7328 "configure"
+#line 8319 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7347,7 +8338,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8342: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7377,12 +8368,12 @@ done
for ac_func in __signbitl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7381: checking for $ac_func" >&5
+echo "configure:8372: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7386 "configure"
+#line 8377 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7405,7 +8396,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7437,16 +8428,16 @@ done
echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
-echo "configure:7441: checking for mbstate_t" >&5
+echo "configure:8432: checking for mbstate_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 7443 "configure"
+#line 8434 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
mbstate_t teststate;
; return 0; }
EOF
-if { (eval echo configure:7450: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8441: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
have_mbstate_t=yes
else
@@ -7468,17 +8459,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7472: checking for $ac_hdr" >&5
+echo "configure:8463: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7477 "configure"
+#line 8468 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7482: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8473: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -7509,17 +8500,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7513: checking for $ac_hdr" >&5
+echo "configure:8504: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7518 "configure"
+#line 8509 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7523: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8514: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -7552,16 +8543,16 @@ done
test x"$enable_c_mbchar" != xno; then
echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
-echo "configure:7556: checking for WCHAR_MIN and WCHAR_MAX" >&5
+echo "configure:8547: checking for WCHAR_MIN and WCHAR_MAX" >&5
cat > conftest.$ac_ext <<EOF
-#line 7558 "configure"
+#line 8549 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
int i = WCHAR_MIN; int j = WCHAR_MAX;
; return 0; }
EOF
-if { (eval echo configure:7565: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8556: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_wchar_minmax=yes
else
@@ -7574,9 +8565,9 @@ rm -f conftest*
echo "$ac_t""$has_wchar_minmax" 1>&6
echo $ac_n "checking for WEOF""... $ac_c" 1>&6
-echo "configure:7578: checking for WEOF" >&5
+echo "configure:8569: checking for WEOF" >&5
cat > conftest.$ac_ext <<EOF
-#line 7580 "configure"
+#line 8571 "configure"
#include "confdefs.h"
#include <wchar.h>
@@ -7585,7 +8576,7 @@ int main() {
wint_t i = WEOF;
; return 0; }
EOF
-if { (eval echo configure:7589: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8580: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_weof=yes
else
@@ -7601,12 +8592,12 @@ rm -f conftest*
for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7605: checking for $ac_func" >&5
+echo "configure:8596: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7610 "configure"
+#line 8601 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7629,7 +8620,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7633: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8624: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7664,12 +8655,12 @@ done
wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7668: checking for $ac_func" >&5
+echo "configure:8659: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7673 "configure"
+#line 8664 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7692,7 +8683,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8687: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7720,7 +8711,7 @@ done
echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
-echo "configure:7724: checking for ISO C99 wchar_t support" >&5
+echo "configure:8715: checking for ISO C99 wchar_t support" >&5
if test x"$has_weof" = xyes &&
test x"$has_wchar_minmax" = xyes &&
test x"$ac_wfuncs" = xyes; then
@@ -7732,17 +8723,17 @@ echo "configure:7724: checking for ISO C99 wchar_t support" >&5
ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
-echo "configure:7736: checking for iconv.h" >&5
+echo "configure:8727: checking for iconv.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7741 "configure"
+#line 8732 "configure"
#include "confdefs.h"
#include <iconv.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7746: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8737: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -7766,17 +8757,17 @@ fi
ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
-echo "configure:7770: checking for langinfo.h" >&5
+echo "configure:8761: checking for langinfo.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7775 "configure"
+#line 8766 "configure"
#include "confdefs.h"
#include <langinfo.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7780: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8771: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -7800,7 +8791,7 @@ fi
echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
-echo "configure:7804: checking for iconv in -liconv" >&5
+echo "configure:8795: checking for iconv in -liconv" >&5
ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7808,7 +8799,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-liconv $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7812 "configure"
+#line 8803 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7819,7 +8810,7 @@ int main() {
iconv()
; return 0; }
EOF
-if { (eval echo configure:7823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7845,12 +8836,12 @@ fi
for ac_func in iconv_open iconv_close iconv nl_langinfo
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7849: checking for $ac_func" >&5
+echo "configure:8840: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7854 "configure"
+#line 8845 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7873,7 +8864,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7903,7 +8894,7 @@ done
LIBS="$ac_save_LIBS"
echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
-echo "configure:7907: checking for XPG2 wchar_t support" >&5
+echo "configure:8898: checking for XPG2 wchar_t support" >&5
if test x"$ac_has_iconv_h" = xyes &&
test x"$ac_has_langinfo_h" = xyes &&
test x"$ac_XPG2funcs" = xyes; then
@@ -7914,7 +8905,7 @@ echo "configure:7907: checking for XPG2 wchar_t support" >&5
echo "$ac_t""$ac_XPG2_wchar_t" 1>&6
echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
-echo "configure:7918: checking for enabled wchar_t specializations" >&5
+echo "configure:8909: checking for enabled wchar_t specializations" >&5
if test x"$ac_isoC99_wchar_t" = xyes &&
test x"$ac_XPG2_wchar_t" = xyes; then
cat >> confdefs.h <<\EOF
@@ -7987,12 +8978,12 @@ EOF
# used sections, first .eh_frame and now some of the glibc sections for
# iconv). Bzzzzt. Thanks for playing, maybe next time.
echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
-echo "configure:7991: checking for ld that supports -Wl,--gc-sections" >&5
+echo "configure:8982: checking for ld that supports -Wl,--gc-sections" >&5
if test "$cross_compiling" = yes; then
ac_sectionLDflags=yes
else
cat > conftest.$ac_ext <<EOF
-#line 7996 "configure"
+#line 8987 "configure"
#include "confdefs.h"
int main(void)
@@ -8003,7 +8994,7 @@ else
}
EOF
-if { (eval echo configure:8007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_sectionLDflags=yes
else
@@ -8037,7 +9028,7 @@ fi
echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:8041: checking for main in -lm" >&5
+echo "configure:9032: checking for main in -lm" >&5
ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -8045,14 +9036,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 8049 "configure"
+#line 9040 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:8056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -8082,12 +9073,12 @@ fi
for ac_func in nan copysignf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8086: checking for $ac_func" >&5
+echo "configure:9077: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8091 "configure"
+#line 9082 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8110,7 +9101,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8114: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9105: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8139,12 +9130,12 @@ done
for ac_func in __signbit
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8143: checking for $ac_func" >&5
+echo "configure:9134: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8148 "configure"
+#line 9139 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8167,7 +9158,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8171: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8195,12 +9186,12 @@ done
for ac_func in __signbitf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8199: checking for $ac_func" >&5
+echo "configure:9190: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8204 "configure"
+#line 9195 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8223,7 +9214,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9218: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8253,12 +9244,12 @@ done
for ac_func in __signbitl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8257: checking for $ac_func" >&5
+echo "configure:9248: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8262 "configure"
+#line 9253 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8281,7 +9272,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9276: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8313,16 +9304,16 @@ done
echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
-echo "configure:8317: checking for mbstate_t" >&5
+echo "configure:9308: checking for mbstate_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 8319 "configure"
+#line 9310 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
mbstate_t teststate;
; return 0; }
EOF
-if { (eval echo configure:8326: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9317: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
have_mbstate_t=yes
else
@@ -8344,17 +9335,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8348: checking for $ac_hdr" >&5
+echo "configure:9339: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8353 "configure"
+#line 9344 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8358: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9349: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8385,17 +9376,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8389: checking for $ac_hdr" >&5
+echo "configure:9380: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8394 "configure"
+#line 9385 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8399: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9390: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8428,16 +9419,16 @@ done
test x"$enable_c_mbchar" != xno; then
echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
-echo "configure:8432: checking for WCHAR_MIN and WCHAR_MAX" >&5
+echo "configure:9423: checking for WCHAR_MIN and WCHAR_MAX" >&5
cat > conftest.$ac_ext <<EOF
-#line 8434 "configure"
+#line 9425 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
int i = WCHAR_MIN; int j = WCHAR_MAX;
; return 0; }
EOF
-if { (eval echo configure:8441: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9432: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_wchar_minmax=yes
else
@@ -8450,9 +9441,9 @@ rm -f conftest*
echo "$ac_t""$has_wchar_minmax" 1>&6
echo $ac_n "checking for WEOF""... $ac_c" 1>&6
-echo "configure:8454: checking for WEOF" >&5
+echo "configure:9445: checking for WEOF" >&5
cat > conftest.$ac_ext <<EOF
-#line 8456 "configure"
+#line 9447 "configure"
#include "confdefs.h"
#include <wchar.h>
@@ -8461,7 +9452,7 @@ int main() {
wint_t i = WEOF;
; return 0; }
EOF
-if { (eval echo configure:8465: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9456: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_weof=yes
else
@@ -8477,12 +9468,12 @@ rm -f conftest*
for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8481: checking for $ac_func" >&5
+echo "configure:9472: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8486 "configure"
+#line 9477 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8505,7 +9496,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8540,12 +9531,12 @@ done
wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8544: checking for $ac_func" >&5
+echo "configure:9535: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8549 "configure"
+#line 9540 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8568,7 +9559,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9563: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8596,7 +9587,7 @@ done
echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
-echo "configure:8600: checking for ISO C99 wchar_t support" >&5
+echo "configure:9591: checking for ISO C99 wchar_t support" >&5
if test x"$has_weof" = xyes &&
test x"$has_wchar_minmax" = xyes &&
test x"$ac_wfuncs" = xyes; then
@@ -8608,17 +9599,17 @@ echo "configure:8600: checking for ISO C99 wchar_t support" >&5
ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
-echo "configure:8612: checking for iconv.h" >&5
+echo "configure:9603: checking for iconv.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8617 "configure"
+#line 9608 "configure"
#include "confdefs.h"
#include <iconv.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8622: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9613: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8642,17 +9633,17 @@ fi
ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
-echo "configure:8646: checking for langinfo.h" >&5
+echo "configure:9637: checking for langinfo.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8651 "configure"
+#line 9642 "configure"
#include "confdefs.h"
#include <langinfo.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8656: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9647: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8676,7 +9667,7 @@ fi
echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
-echo "configure:8680: checking for iconv in -liconv" >&5
+echo "configure:9671: checking for iconv in -liconv" >&5
ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -8684,7 +9675,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-liconv $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 8688 "configure"
+#line 9679 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -8695,7 +9686,7 @@ int main() {
iconv()
; return 0; }
EOF
-if { (eval echo configure:8699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -8721,12 +9712,12 @@ fi
for ac_func in iconv_open iconv_close iconv nl_langinfo
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8725: checking for $ac_func" >&5
+echo "configure:9716: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8730 "configure"
+#line 9721 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8749,7 +9740,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9744: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8779,7 +9770,7 @@ done
LIBS="$ac_save_LIBS"
echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
-echo "configure:8783: checking for XPG2 wchar_t support" >&5
+echo "configure:9774: checking for XPG2 wchar_t support" >&5
if test x"$ac_has_iconv_h" = xyes &&
test x"$ac_has_langinfo_h" = xyes &&
test x"$ac_XPG2funcs" = xyes; then
@@ -8790,7 +9781,7 @@ echo "configure:8783: checking for XPG2 wchar_t support" >&5
echo "$ac_t""$ac_XPG2_wchar_t" 1>&6
echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
-echo "configure:8794: checking for enabled wchar_t specializations" >&5
+echo "configure:9785: checking for enabled wchar_t specializations" >&5
if test x"$ac_isoC99_wchar_t" = xyes &&
test x"$ac_XPG2_wchar_t" = xyes; then
cat >> confdefs.h <<\EOF
@@ -8864,7 +9855,7 @@ EOF
;;
esac
- case "$target_alias" in
+ case "$target" in
*-mingw32*)
;;
*-windiss*)
@@ -8965,6 +9956,109 @@ EOF
EOF
;;
+ *-freebsd*)
+ # Must replicate generic section since we don't have strtof or strtold.
+ cat >> confdefs.h <<\EOF
+#define HAVE_MMAP 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_ACOSF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_ASINF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_ATAN2F 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_ATANF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_CEILF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_COPYSIGN 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_COPYSIGNF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_COSF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_COSHF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_EXPF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_FABSF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_FLOORF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_FMODF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_FREXPF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_LDEXPF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_LOG10F 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_LOGF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_MODFF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_POWF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_SINF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_SINHF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_SQRTF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_TANF 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_TANHF 1
+EOF
+
+ ;;
*)
# GLIBCPP_CHECK_STDLIB_SUPPORT
cat >> confdefs.h <<\EOF
@@ -9196,17 +10290,17 @@ else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:9200: checking for $ac_hdr" >&5
+echo "configure:10294: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9205 "configure"
+#line 10299 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9210: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10304: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -9257,10 +10351,10 @@ cross_compiling=$ac_cv_prog_cxx_cross
# Check for -ffunction-sections -fdata-sections
echo $ac_n "checking for g++ that supports -ffunction-sections -fdata-sections""... $ac_c" 1>&6
-echo "configure:9261: checking for g++ that supports -ffunction-sections -fdata-sections" >&5
+echo "configure:10355: checking for g++ that supports -ffunction-sections -fdata-sections" >&5
CXXFLAGS='-Werror -ffunction-sections -fdata-sections'
cat > conftest.$ac_ext <<EOF
-#line 9264 "configure"
+#line 10358 "configure"
#include "confdefs.h"
int main() {
@@ -9268,7 +10362,7 @@ int foo;
; return 0; }
EOF
-if { (eval echo configure:9272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10366: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_fdsections=yes
else
@@ -9350,12 +10444,12 @@ cross_compiling=$ac_cv_prog_cc_cross
# used sections, first .eh_frame and now some of the glibc sections for
# iconv). Bzzzzt. Thanks for playing, maybe next time.
echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
-echo "configure:9354: checking for ld that supports -Wl,--gc-sections" >&5
+echo "configure:10448: checking for ld that supports -Wl,--gc-sections" >&5
if test "$cross_compiling" = yes; then
ac_sectionLDflags=yes
else
cat > conftest.$ac_ext <<EOF
-#line 9359 "configure"
+#line 10453 "configure"
#include "confdefs.h"
int main(void)
@@ -9366,7 +10460,7 @@ else
}
EOF
-if { (eval echo configure:9370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_sectionLDflags=yes
else
@@ -9401,7 +10495,7 @@ fi
echo $ac_n "checking for __builtin_abs declaration""... $ac_c" 1>&6
-echo "configure:9405: checking for __builtin_abs declaration" >&5
+echo "configure:10499: checking for __builtin_abs declaration" >&5
if test x${glibcpp_cv_func___builtin_abs_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_abs_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -9416,14 +10510,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 9420 "configure"
+#line 10514 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_abs(0);
; return 0; }
EOF
-if { (eval echo configure:9427: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10521: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_abs_use=yes
else
@@ -9447,21 +10541,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_abs_use" 1>&6
if test x$glibcpp_cv_func___builtin_abs_use = x"yes"; then
echo $ac_n "checking for __builtin_abs linkage""... $ac_c" 1>&6
-echo "configure:9451: checking for __builtin_abs linkage" >&5
+echo "configure:10545: checking for __builtin_abs linkage" >&5
if test x${glibcpp_cv_func___builtin_abs_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_abs_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9458 "configure"
+#line 10552 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_abs(0);
; return 0; }
EOF
-if { (eval echo configure:9465: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_abs_link=yes
else
@@ -9487,7 +10581,7 @@ EOF
echo $ac_n "checking for __builtin_fabsf declaration""... $ac_c" 1>&6
-echo "configure:9491: checking for __builtin_fabsf declaration" >&5
+echo "configure:10585: checking for __builtin_fabsf declaration" >&5
if test x${glibcpp_cv_func___builtin_fabsf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_fabsf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -9502,14 +10596,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 9506 "configure"
+#line 10600 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_fabsf(0);
; return 0; }
EOF
-if { (eval echo configure:9513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10607: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_fabsf_use=yes
else
@@ -9533,21 +10627,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_fabsf_use" 1>&6
if test x$glibcpp_cv_func___builtin_fabsf_use = x"yes"; then
echo $ac_n "checking for __builtin_fabsf linkage""... $ac_c" 1>&6
-echo "configure:9537: checking for __builtin_fabsf linkage" >&5
+echo "configure:10631: checking for __builtin_fabsf linkage" >&5
if test x${glibcpp_cv_func___builtin_fabsf_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_fabsf_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9544 "configure"
+#line 10638 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_fabsf(0);
; return 0; }
EOF
-if { (eval echo configure:9551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10645: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_fabsf_link=yes
else
@@ -9573,7 +10667,7 @@ EOF
echo $ac_n "checking for __builtin_fabs declaration""... $ac_c" 1>&6
-echo "configure:9577: checking for __builtin_fabs declaration" >&5
+echo "configure:10671: checking for __builtin_fabs declaration" >&5
if test x${glibcpp_cv_func___builtin_fabs_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_fabs_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -9588,14 +10682,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 9592 "configure"
+#line 10686 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_fabs(0);
; return 0; }
EOF
-if { (eval echo configure:9599: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10693: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_fabs_use=yes
else
@@ -9619,21 +10713,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_fabs_use" 1>&6
if test x$glibcpp_cv_func___builtin_fabs_use = x"yes"; then
echo $ac_n "checking for __builtin_fabs linkage""... $ac_c" 1>&6
-echo "configure:9623: checking for __builtin_fabs linkage" >&5
+echo "configure:10717: checking for __builtin_fabs linkage" >&5
if test x${glibcpp_cv_func___builtin_fabs_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_fabs_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9630 "configure"
+#line 10724 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_fabs(0);
; return 0; }
EOF
-if { (eval echo configure:9637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_fabs_link=yes
else
@@ -9659,7 +10753,7 @@ EOF
echo $ac_n "checking for __builtin_fabsl declaration""... $ac_c" 1>&6
-echo "configure:9663: checking for __builtin_fabsl declaration" >&5
+echo "configure:10757: checking for __builtin_fabsl declaration" >&5
if test x${glibcpp_cv_func___builtin_fabsl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_fabsl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -9674,14 +10768,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 9678 "configure"
+#line 10772 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_fabsl(0);
; return 0; }
EOF
-if { (eval echo configure:9685: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10779: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_fabsl_use=yes
else
@@ -9705,21 +10799,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_fabsl_use" 1>&6
if test x$glibcpp_cv_func___builtin_fabsl_use = x"yes"; then
echo $ac_n "checking for __builtin_fabsl linkage""... $ac_c" 1>&6
-echo "configure:9709: checking for __builtin_fabsl linkage" >&5
+echo "configure:10803: checking for __builtin_fabsl linkage" >&5
if test x${glibcpp_cv_func___builtin_fabsl_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_fabsl_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9716 "configure"
+#line 10810 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_fabsl(0);
; return 0; }
EOF
-if { (eval echo configure:9723: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10817: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_fabsl_link=yes
else
@@ -9745,7 +10839,7 @@ EOF
echo $ac_n "checking for __builtin_labs declaration""... $ac_c" 1>&6
-echo "configure:9749: checking for __builtin_labs declaration" >&5
+echo "configure:10843: checking for __builtin_labs declaration" >&5
if test x${glibcpp_cv_func___builtin_labs_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_labs_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -9760,14 +10854,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 9764 "configure"
+#line 10858 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_labs(0);
; return 0; }
EOF
-if { (eval echo configure:9771: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10865: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_labs_use=yes
else
@@ -9791,21 +10885,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_labs_use" 1>&6
if test x$glibcpp_cv_func___builtin_labs_use = x"yes"; then
echo $ac_n "checking for __builtin_labs linkage""... $ac_c" 1>&6
-echo "configure:9795: checking for __builtin_labs linkage" >&5
+echo "configure:10889: checking for __builtin_labs linkage" >&5
if test x${glibcpp_cv_func___builtin_labs_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_labs_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9802 "configure"
+#line 10896 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_labs(0);
; return 0; }
EOF
-if { (eval echo configure:9809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_labs_link=yes
else
@@ -9832,7 +10926,7 @@ EOF
echo $ac_n "checking for __builtin_sqrtf declaration""... $ac_c" 1>&6
-echo "configure:9836: checking for __builtin_sqrtf declaration" >&5
+echo "configure:10930: checking for __builtin_sqrtf declaration" >&5
if test x${glibcpp_cv_func___builtin_sqrtf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sqrtf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -9847,14 +10941,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 9851 "configure"
+#line 10945 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sqrtf(0);
; return 0; }
EOF
-if { (eval echo configure:9858: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10952: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_sqrtf_use=yes
else
@@ -9878,21 +10972,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_sqrtf_use" 1>&6
if test x$glibcpp_cv_func___builtin_sqrtf_use = x"yes"; then
echo $ac_n "checking for __builtin_sqrtf linkage""... $ac_c" 1>&6
-echo "configure:9882: checking for __builtin_sqrtf linkage" >&5
+echo "configure:10976: checking for __builtin_sqrtf linkage" >&5
if test x${glibcpp_cv_func___builtin_sqrtf_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sqrtf_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9889 "configure"
+#line 10983 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sqrtf(0);
; return 0; }
EOF
-if { (eval echo configure:9896: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10990: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_sqrtf_link=yes
else
@@ -9918,7 +11012,7 @@ EOF
echo $ac_n "checking for __builtin_sqrt declaration""... $ac_c" 1>&6
-echo "configure:9922: checking for __builtin_sqrt declaration" >&5
+echo "configure:11016: checking for __builtin_sqrt declaration" >&5
if test x${glibcpp_cv_func___builtin_sqrt_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sqrt_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -9933,14 +11027,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 9937 "configure"
+#line 11031 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sqrt(0);
; return 0; }
EOF
-if { (eval echo configure:9944: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11038: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_sqrt_use=yes
else
@@ -9964,21 +11058,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_sqrt_use" 1>&6
if test x$glibcpp_cv_func___builtin_sqrt_use = x"yes"; then
echo $ac_n "checking for __builtin_sqrt linkage""... $ac_c" 1>&6
-echo "configure:9968: checking for __builtin_sqrt linkage" >&5
+echo "configure:11062: checking for __builtin_sqrt linkage" >&5
if test x${glibcpp_cv_func___builtin_sqrt_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sqrt_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9975 "configure"
+#line 11069 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sqrt(0);
; return 0; }
EOF
-if { (eval echo configure:9982: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11076: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_sqrt_link=yes
else
@@ -10004,7 +11098,7 @@ EOF
echo $ac_n "checking for __builtin_sqrtl declaration""... $ac_c" 1>&6
-echo "configure:10008: checking for __builtin_sqrtl declaration" >&5
+echo "configure:11102: checking for __builtin_sqrtl declaration" >&5
if test x${glibcpp_cv_func___builtin_sqrtl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sqrtl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10019,14 +11113,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 10023 "configure"
+#line 11117 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sqrtl(0);
; return 0; }
EOF
-if { (eval echo configure:10030: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11124: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_sqrtl_use=yes
else
@@ -10050,21 +11144,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_sqrtl_use" 1>&6
if test x$glibcpp_cv_func___builtin_sqrtl_use = x"yes"; then
echo $ac_n "checking for __builtin_sqrtl linkage""... $ac_c" 1>&6
-echo "configure:10054: checking for __builtin_sqrtl linkage" >&5
+echo "configure:11148: checking for __builtin_sqrtl linkage" >&5
if test x${glibcpp_cv_func___builtin_sqrtl_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sqrtl_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10061 "configure"
+#line 11155 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sqrtl(0);
; return 0; }
EOF
-if { (eval echo configure:10068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_sqrtl_link=yes
else
@@ -10091,7 +11185,7 @@ EOF
echo $ac_n "checking for __builtin_sinf declaration""... $ac_c" 1>&6
-echo "configure:10095: checking for __builtin_sinf declaration" >&5
+echo "configure:11189: checking for __builtin_sinf declaration" >&5
if test x${glibcpp_cv_func___builtin_sinf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sinf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10106,14 +11200,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 10110 "configure"
+#line 11204 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sinf(0);
; return 0; }
EOF
-if { (eval echo configure:10117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11211: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_sinf_use=yes
else
@@ -10137,21 +11231,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_sinf_use" 1>&6
if test x$glibcpp_cv_func___builtin_sinf_use = x"yes"; then
echo $ac_n "checking for __builtin_sinf linkage""... $ac_c" 1>&6
-echo "configure:10141: checking for __builtin_sinf linkage" >&5
+echo "configure:11235: checking for __builtin_sinf linkage" >&5
if test x${glibcpp_cv_func___builtin_sinf_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sinf_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10148 "configure"
+#line 11242 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sinf(0);
; return 0; }
EOF
-if { (eval echo configure:10155: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_sinf_link=yes
else
@@ -10177,7 +11271,7 @@ EOF
echo $ac_n "checking for __builtin_sin declaration""... $ac_c" 1>&6
-echo "configure:10181: checking for __builtin_sin declaration" >&5
+echo "configure:11275: checking for __builtin_sin declaration" >&5
if test x${glibcpp_cv_func___builtin_sin_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sin_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10192,14 +11286,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 10196 "configure"
+#line 11290 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sin(0);
; return 0; }
EOF
-if { (eval echo configure:10203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11297: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_sin_use=yes
else
@@ -10223,21 +11317,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_sin_use" 1>&6
if test x$glibcpp_cv_func___builtin_sin_use = x"yes"; then
echo $ac_n "checking for __builtin_sin linkage""... $ac_c" 1>&6
-echo "configure:10227: checking for __builtin_sin linkage" >&5
+echo "configure:11321: checking for __builtin_sin linkage" >&5
if test x${glibcpp_cv_func___builtin_sin_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sin_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10234 "configure"
+#line 11328 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sin(0);
; return 0; }
EOF
-if { (eval echo configure:10241: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_sin_link=yes
else
@@ -10263,7 +11357,7 @@ EOF
echo $ac_n "checking for __builtin_sinl declaration""... $ac_c" 1>&6
-echo "configure:10267: checking for __builtin_sinl declaration" >&5
+echo "configure:11361: checking for __builtin_sinl declaration" >&5
if test x${glibcpp_cv_func___builtin_sinl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sinl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10278,14 +11372,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 10282 "configure"
+#line 11376 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sinl(0);
; return 0; }
EOF
-if { (eval echo configure:10289: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11383: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_sinl_use=yes
else
@@ -10309,21 +11403,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_sinl_use" 1>&6
if test x$glibcpp_cv_func___builtin_sinl_use = x"yes"; then
echo $ac_n "checking for __builtin_sinl linkage""... $ac_c" 1>&6
-echo "configure:10313: checking for __builtin_sinl linkage" >&5
+echo "configure:11407: checking for __builtin_sinl linkage" >&5
if test x${glibcpp_cv_func___builtin_sinl_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sinl_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10320 "configure"
+#line 11414 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sinl(0);
; return 0; }
EOF
-if { (eval echo configure:10327: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_sinl_link=yes
else
@@ -10350,7 +11444,7 @@ EOF
echo $ac_n "checking for __builtin_cosf declaration""... $ac_c" 1>&6
-echo "configure:10354: checking for __builtin_cosf declaration" >&5
+echo "configure:11448: checking for __builtin_cosf declaration" >&5
if test x${glibcpp_cv_func___builtin_cosf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_cosf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10365,14 +11459,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 10369 "configure"
+#line 11463 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_cosf(0);
; return 0; }
EOF
-if { (eval echo configure:10376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11470: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_cosf_use=yes
else
@@ -10396,21 +11490,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_cosf_use" 1>&6
if test x$glibcpp_cv_func___builtin_cosf_use = x"yes"; then
echo $ac_n "checking for __builtin_cosf linkage""... $ac_c" 1>&6
-echo "configure:10400: checking for __builtin_cosf linkage" >&5
+echo "configure:11494: checking for __builtin_cosf linkage" >&5
if test x${glibcpp_cv_func___builtin_cosf_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_cosf_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10407 "configure"
+#line 11501 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_cosf(0);
; return 0; }
EOF
-if { (eval echo configure:10414: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_cosf_link=yes
else
@@ -10436,7 +11530,7 @@ EOF
echo $ac_n "checking for __builtin_cos declaration""... $ac_c" 1>&6
-echo "configure:10440: checking for __builtin_cos declaration" >&5
+echo "configure:11534: checking for __builtin_cos declaration" >&5
if test x${glibcpp_cv_func___builtin_cos_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_cos_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10451,14 +11545,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 10455 "configure"
+#line 11549 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_cos(0);
; return 0; }
EOF
-if { (eval echo configure:10462: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11556: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_cos_use=yes
else
@@ -10482,21 +11576,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_cos_use" 1>&6
if test x$glibcpp_cv_func___builtin_cos_use = x"yes"; then
echo $ac_n "checking for __builtin_cos linkage""... $ac_c" 1>&6
-echo "configure:10486: checking for __builtin_cos linkage" >&5
+echo "configure:11580: checking for __builtin_cos linkage" >&5
if test x${glibcpp_cv_func___builtin_cos_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_cos_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10493 "configure"
+#line 11587 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_cos(0);
; return 0; }
EOF
-if { (eval echo configure:10500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_cos_link=yes
else
@@ -10522,7 +11616,7 @@ EOF
echo $ac_n "checking for __builtin_cosl declaration""... $ac_c" 1>&6
-echo "configure:10526: checking for __builtin_cosl declaration" >&5
+echo "configure:11620: checking for __builtin_cosl declaration" >&5
if test x${glibcpp_cv_func___builtin_cosl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_cosl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10537,14 +11631,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 10541 "configure"
+#line 11635 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_cosl(0);
; return 0; }
EOF
-if { (eval echo configure:10548: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11642: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_cosl_use=yes
else
@@ -10568,21 +11662,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_cosl_use" 1>&6
if test x$glibcpp_cv_func___builtin_cosl_use = x"yes"; then
echo $ac_n "checking for __builtin_cosl linkage""... $ac_c" 1>&6
-echo "configure:10572: checking for __builtin_cosl linkage" >&5
+echo "configure:11666: checking for __builtin_cosl linkage" >&5
if test x${glibcpp_cv_func___builtin_cosl_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_cosl_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10579 "configure"
+#line 11673 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_cosl(0);
; return 0; }
EOF
-if { (eval echo configure:10586: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_cosl_link=yes
else
@@ -10673,7 +11767,7 @@ EOF
CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
-echo "configure:10677: checking for sin in -lm" >&5
+echo "configure:11771: checking for sin in -lm" >&5
ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10681,7 +11775,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 10685 "configure"
+#line 11779 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -10692,7 +11786,7 @@ int main() {
sin()
; return 0; }
EOF
-if { (eval echo configure:10696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -10718,7 +11812,7 @@ fi
echo $ac_n "checking for isinf declaration""... $ac_c" 1>&6
-echo "configure:10722: checking for isinf declaration" >&5
+echo "configure:11816: checking for isinf declaration" >&5
if test x${glibcpp_cv_func_isinf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_isinf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10733,7 +11827,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 10737 "configure"
+#line 11831 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -10744,7 +11838,7 @@ int main() {
isinf(0);
; return 0; }
EOF
-if { (eval echo configure:10748: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11842: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_isinf_use=yes
else
@@ -10771,12 +11865,12 @@ fi
for ac_func in isinf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:10775: checking for $ac_func" >&5
+echo "configure:11869: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10780 "configure"
+#line 11874 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -10799,7 +11893,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:10803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -10826,7 +11920,7 @@ done
else
echo $ac_n "checking for _isinf declaration""... $ac_c" 1>&6
-echo "configure:10830: checking for _isinf declaration" >&5
+echo "configure:11924: checking for _isinf declaration" >&5
if test x${glibcpp_cv_func__isinf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__isinf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10841,7 +11935,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 10845 "configure"
+#line 11939 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -10852,7 +11946,7 @@ int main() {
_isinf(0);
; return 0; }
EOF
-if { (eval echo configure:10856: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11950: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__isinf_use=yes
else
@@ -10879,12 +11973,12 @@ fi
for ac_func in _isinf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:10883: checking for $ac_func" >&5
+echo "configure:11977: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10888 "configure"
+#line 11982 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -10907,7 +12001,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:10911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -10937,7 +12031,7 @@ done
echo $ac_n "checking for isnan declaration""... $ac_c" 1>&6
-echo "configure:10941: checking for isnan declaration" >&5
+echo "configure:12035: checking for isnan declaration" >&5
if test x${glibcpp_cv_func_isnan_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_isnan_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10952,7 +12046,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 10956 "configure"
+#line 12050 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -10963,7 +12057,7 @@ int main() {
isnan(0);
; return 0; }
EOF
-if { (eval echo configure:10967: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12061: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_isnan_use=yes
else
@@ -10990,12 +12084,12 @@ fi
for ac_func in isnan
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:10994: checking for $ac_func" >&5
+echo "configure:12088: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10999 "configure"
+#line 12093 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -11018,7 +12112,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:11022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12116: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -11045,7 +12139,7 @@ done
else
echo $ac_n "checking for _isnan declaration""... $ac_c" 1>&6
-echo "configure:11049: checking for _isnan declaration" >&5
+echo "configure:12143: checking for _isnan declaration" >&5
if test x${glibcpp_cv_func__isnan_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__isnan_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11060,7 +12154,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11064 "configure"
+#line 12158 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -11071,7 +12165,7 @@ int main() {
_isnan(0);
; return 0; }
EOF
-if { (eval echo configure:11075: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12169: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__isnan_use=yes
else
@@ -11098,12 +12192,12 @@ fi
for ac_func in _isnan
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11102: checking for $ac_func" >&5
+echo "configure:12196: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11107 "configure"
+#line 12201 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -11126,7 +12220,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:11130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -11156,7 +12250,7 @@ done
echo $ac_n "checking for finite declaration""... $ac_c" 1>&6
-echo "configure:11160: checking for finite declaration" >&5
+echo "configure:12254: checking for finite declaration" >&5
if test x${glibcpp_cv_func_finite_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_finite_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11171,7 +12265,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11175 "configure"
+#line 12269 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -11182,7 +12276,7 @@ int main() {
finite(0);
; return 0; }
EOF
-if { (eval echo configure:11186: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12280: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_finite_use=yes
else
@@ -11209,12 +12303,12 @@ fi
for ac_func in finite
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11213: checking for $ac_func" >&5
+echo "configure:12307: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11218 "configure"
+#line 12312 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -11237,7 +12331,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:11241: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -11264,7 +12358,7 @@ done
else
echo $ac_n "checking for _finite declaration""... $ac_c" 1>&6
-echo "configure:11268: checking for _finite declaration" >&5
+echo "configure:12362: checking for _finite declaration" >&5
if test x${glibcpp_cv_func__finite_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__finite_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11279,7 +12373,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11283 "configure"
+#line 12377 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -11290,7 +12384,7 @@ int main() {
_finite(0);
; return 0; }
EOF
-if { (eval echo configure:11294: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12388: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__finite_use=yes
else
@@ -11317,12 +12411,12 @@ fi
for ac_func in _finite
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11321: checking for $ac_func" >&5
+echo "configure:12415: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11326 "configure"
+#line 12420 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -11345,7 +12439,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:11349: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -11375,7 +12469,7 @@ done
echo $ac_n "checking for copysign declaration""... $ac_c" 1>&6
-echo "configure:11379: checking for copysign declaration" >&5
+echo "configure:12473: checking for copysign declaration" >&5
if test x${glibcpp_cv_func_copysign_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_copysign_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11390,14 +12484,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11394 "configure"
+#line 12488 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
copysign(0, 0);
; return 0; }
EOF
-if { (eval echo configure:11401: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12495: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_copysign_use=yes
else
@@ -11424,12 +12518,12 @@ fi
for ac_func in copysign
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11428: checking for $ac_func" >&5
+echo "configure:12522: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11433 "configure"
+#line 12527 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -11452,7 +12546,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:11456: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12550: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -11479,7 +12573,7 @@ done
else
echo $ac_n "checking for _copysign declaration""... $ac_c" 1>&6
-echo "configure:11483: checking for _copysign declaration" >&5
+echo "configure:12577: checking for _copysign declaration" >&5
if test x${glibcpp_cv_func__copysign_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__copysign_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11494,14 +12588,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11498 "configure"
+#line 12592 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_copysign(0, 0);
; return 0; }
EOF
-if { (eval echo configure:11505: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12599: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__copysign_use=yes
else
@@ -11528,12 +12622,12 @@ fi
for ac_func in _copysign
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11532: checking for $ac_func" >&5
+echo "configure:12626: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11537 "configure"
+#line 12631 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -11556,7 +12650,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:11560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12654: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -11586,7 +12680,7 @@ done
echo $ac_n "checking for sincos declaration""... $ac_c" 1>&6
-echo "configure:11590: checking for sincos declaration" >&5
+echo "configure:12684: checking for sincos declaration" >&5
if test x${glibcpp_cv_func_sincos_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_sincos_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11601,14 +12695,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11605 "configure"
+#line 12699 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
sincos(0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:11612: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12706: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_sincos_use=yes
else
@@ -11635,12 +12729,12 @@ fi
for ac_func in sincos
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11639: checking for $ac_func" >&5
+echo "configure:12733: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11644 "configure"
+#line 12738 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -11663,7 +12757,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:11667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -11690,7 +12784,7 @@ done
else
echo $ac_n "checking for _sincos declaration""... $ac_c" 1>&6
-echo "configure:11694: checking for _sincos declaration" >&5
+echo "configure:12788: checking for _sincos declaration" >&5
if test x${glibcpp_cv_func__sincos_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__sincos_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11705,14 +12799,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11709 "configure"
+#line 12803 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_sincos(0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:11716: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12810: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__sincos_use=yes
else
@@ -11739,12 +12833,12 @@ fi
for ac_func in _sincos
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11743: checking for $ac_func" >&5
+echo "configure:12837: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11748 "configure"
+#line 12842 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -11767,7 +12861,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:11771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -11797,7 +12891,7 @@ done
echo $ac_n "checking for fpclass declaration""... $ac_c" 1>&6
-echo "configure:11801: checking for fpclass declaration" >&5
+echo "configure:12895: checking for fpclass declaration" >&5
if test x${glibcpp_cv_func_fpclass_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_fpclass_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11812,7 +12906,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11816 "configure"
+#line 12910 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -11823,7 +12917,7 @@ int main() {
fpclass(0);
; return 0; }
EOF
-if { (eval echo configure:11827: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_fpclass_use=yes
else
@@ -11850,12 +12944,12 @@ fi
for ac_func in fpclass
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11854: checking for $ac_func" >&5
+echo "configure:12948: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11859 "configure"
+#line 12953 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -11878,7 +12972,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:11882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -11905,7 +12999,7 @@ done
else
echo $ac_n "checking for _fpclass declaration""... $ac_c" 1>&6
-echo "configure:11909: checking for _fpclass declaration" >&5
+echo "configure:13003: checking for _fpclass declaration" >&5
if test x${glibcpp_cv_func__fpclass_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__fpclass_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11920,7 +13014,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11924 "configure"
+#line 13018 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -11931,7 +13025,7 @@ int main() {
_fpclass(0);
; return 0; }
EOF
-if { (eval echo configure:11935: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13029: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__fpclass_use=yes
else
@@ -11958,12 +13052,12 @@ fi
for ac_func in _fpclass
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11962: checking for $ac_func" >&5
+echo "configure:13056: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11967 "configure"
+#line 13061 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -11986,7 +13080,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:11990: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13084: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12016,7 +13110,7 @@ done
echo $ac_n "checking for qfpclass declaration""... $ac_c" 1>&6
-echo "configure:12020: checking for qfpclass declaration" >&5
+echo "configure:13114: checking for qfpclass declaration" >&5
if test x${glibcpp_cv_func_qfpclass_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_qfpclass_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12031,7 +13125,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12035 "configure"
+#line 13129 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -12042,7 +13136,7 @@ int main() {
qfpclass(0);
; return 0; }
EOF
-if { (eval echo configure:12046: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13140: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_qfpclass_use=yes
else
@@ -12069,12 +13163,12 @@ fi
for ac_func in qfpclass
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12073: checking for $ac_func" >&5
+echo "configure:13167: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12078 "configure"
+#line 13172 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12097,7 +13191,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12101: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13195: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12124,7 +13218,7 @@ done
else
echo $ac_n "checking for _qfpclass declaration""... $ac_c" 1>&6
-echo "configure:12128: checking for _qfpclass declaration" >&5
+echo "configure:13222: checking for _qfpclass declaration" >&5
if test x${glibcpp_cv_func__qfpclass_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__qfpclass_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12139,7 +13233,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12143 "configure"
+#line 13237 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -12150,7 +13244,7 @@ int main() {
_qfpclass(0);
; return 0; }
EOF
-if { (eval echo configure:12154: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13248: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__qfpclass_use=yes
else
@@ -12177,12 +13271,12 @@ fi
for ac_func in _qfpclass
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12181: checking for $ac_func" >&5
+echo "configure:13275: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12186 "configure"
+#line 13280 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12205,7 +13299,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12209: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12235,7 +13329,7 @@ done
echo $ac_n "checking for hypot declaration""... $ac_c" 1>&6
-echo "configure:12239: checking for hypot declaration" >&5
+echo "configure:13333: checking for hypot declaration" >&5
if test x${glibcpp_cv_func_hypot_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_hypot_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12250,14 +13344,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12254 "configure"
+#line 13348 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
hypot(0, 0);
; return 0; }
EOF
-if { (eval echo configure:12261: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13355: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_hypot_use=yes
else
@@ -12284,12 +13378,12 @@ fi
for ac_func in hypot
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12288: checking for $ac_func" >&5
+echo "configure:13382: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12293 "configure"
+#line 13387 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12312,7 +13406,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12316: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13410: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12339,7 +13433,7 @@ done
else
echo $ac_n "checking for _hypot declaration""... $ac_c" 1>&6
-echo "configure:12343: checking for _hypot declaration" >&5
+echo "configure:13437: checking for _hypot declaration" >&5
if test x${glibcpp_cv_func__hypot_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__hypot_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12354,14 +13448,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12358 "configure"
+#line 13452 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_hypot(0, 0);
; return 0; }
EOF
-if { (eval echo configure:12365: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13459: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__hypot_use=yes
else
@@ -12388,12 +13482,12 @@ fi
for ac_func in _hypot
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12392: checking for $ac_func" >&5
+echo "configure:13486: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12397 "configure"
+#line 13491 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12416,7 +13510,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12420: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12446,7 +13540,7 @@ done
echo $ac_n "checking for float trig functions""... $ac_c" 1>&6
-echo "configure:12450: checking for float trig functions" >&5
+echo "configure:13544: checking for float trig functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func_float_trig_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -12460,7 +13554,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12464 "configure"
+#line 13558 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
@@ -12469,7 +13563,7 @@ int main() {
coshf sinhf tanhf; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:12473: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13567: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_float_trig_use=yes
else
@@ -12495,12 +13589,12 @@ fi
coshf sinhf tanhf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12499: checking for $ac_func" >&5
+echo "configure:13593: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12504 "configure"
+#line 13598 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12523,7 +13617,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12551,7 +13645,7 @@ done
echo $ac_n "checking for float round functions""... $ac_c" 1>&6
-echo "configure:12555: checking for float round functions" >&5
+echo "configure:13649: checking for float round functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func_float_round_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -12565,14 +13659,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12569 "configure"
+#line 13663 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
`for x in ceilf floorf; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:12576: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13670: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_float_round_use=yes
else
@@ -12596,12 +13690,12 @@ fi
for ac_func in ceilf floorf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12600: checking for $ac_func" >&5
+echo "configure:13694: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12605 "configure"
+#line 13699 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12624,7 +13718,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12653,7 +13747,7 @@ done
echo $ac_n "checking for expf declaration""... $ac_c" 1>&6
-echo "configure:12657: checking for expf declaration" >&5
+echo "configure:13751: checking for expf declaration" >&5
if test x${glibcpp_cv_func_expf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_expf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12668,7 +13762,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12672 "configure"
+#line 13766 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -12679,7 +13773,7 @@ int main() {
expf(0);
; return 0; }
EOF
-if { (eval echo configure:12683: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_expf_use=yes
else
@@ -12706,12 +13800,12 @@ fi
for ac_func in expf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12710: checking for $ac_func" >&5
+echo "configure:13804: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12715 "configure"
+#line 13809 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12734,7 +13828,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12761,7 +13855,7 @@ done
else
echo $ac_n "checking for _expf declaration""... $ac_c" 1>&6
-echo "configure:12765: checking for _expf declaration" >&5
+echo "configure:13859: checking for _expf declaration" >&5
if test x${glibcpp_cv_func__expf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__expf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12776,7 +13870,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12780 "configure"
+#line 13874 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -12787,7 +13881,7 @@ int main() {
_expf(0);
; return 0; }
EOF
-if { (eval echo configure:12791: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13885: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__expf_use=yes
else
@@ -12814,12 +13908,12 @@ fi
for ac_func in _expf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12818: checking for $ac_func" >&5
+echo "configure:13912: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12823 "configure"
+#line 13917 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12842,7 +13936,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12872,7 +13966,7 @@ done
echo $ac_n "checking for isnanf declaration""... $ac_c" 1>&6
-echo "configure:12876: checking for isnanf declaration" >&5
+echo "configure:13970: checking for isnanf declaration" >&5
if test x${glibcpp_cv_func_isnanf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_isnanf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12887,7 +13981,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12891 "configure"
+#line 13985 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -12898,7 +13992,7 @@ int main() {
isnanf(0);
; return 0; }
EOF
-if { (eval echo configure:12902: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13996: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_isnanf_use=yes
else
@@ -12925,12 +14019,12 @@ fi
for ac_func in isnanf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12929: checking for $ac_func" >&5
+echo "configure:14023: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12934 "configure"
+#line 14028 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12953,7 +14047,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12980,7 +14074,7 @@ done
else
echo $ac_n "checking for _isnanf declaration""... $ac_c" 1>&6
-echo "configure:12984: checking for _isnanf declaration" >&5
+echo "configure:14078: checking for _isnanf declaration" >&5
if test x${glibcpp_cv_func__isnanf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__isnanf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12995,7 +14089,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12999 "configure"
+#line 14093 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -13006,7 +14100,7 @@ int main() {
_isnanf(0);
; return 0; }
EOF
-if { (eval echo configure:13010: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14104: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__isnanf_use=yes
else
@@ -13033,12 +14127,12 @@ fi
for ac_func in _isnanf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13037: checking for $ac_func" >&5
+echo "configure:14131: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13042 "configure"
+#line 14136 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13061,7 +14155,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13065: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14159: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13091,7 +14185,7 @@ done
echo $ac_n "checking for isinff declaration""... $ac_c" 1>&6
-echo "configure:13095: checking for isinff declaration" >&5
+echo "configure:14189: checking for isinff declaration" >&5
if test x${glibcpp_cv_func_isinff_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_isinff_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13106,7 +14200,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13110 "configure"
+#line 14204 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -13117,7 +14211,7 @@ int main() {
isinff(0);
; return 0; }
EOF
-if { (eval echo configure:13121: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14215: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_isinff_use=yes
else
@@ -13144,12 +14238,12 @@ fi
for ac_func in isinff
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13148: checking for $ac_func" >&5
+echo "configure:14242: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13153 "configure"
+#line 14247 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13172,7 +14266,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13176: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13199,7 +14293,7 @@ done
else
echo $ac_n "checking for _isinff declaration""... $ac_c" 1>&6
-echo "configure:13203: checking for _isinff declaration" >&5
+echo "configure:14297: checking for _isinff declaration" >&5
if test x${glibcpp_cv_func__isinff_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__isinff_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13214,7 +14308,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13218 "configure"
+#line 14312 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -13225,7 +14319,7 @@ int main() {
_isinff(0);
; return 0; }
EOF
-if { (eval echo configure:13229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14323: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__isinff_use=yes
else
@@ -13252,12 +14346,12 @@ fi
for ac_func in _isinff
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13256: checking for $ac_func" >&5
+echo "configure:14350: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13261 "configure"
+#line 14355 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13280,7 +14374,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13310,7 +14404,7 @@ done
echo $ac_n "checking for atan2f declaration""... $ac_c" 1>&6
-echo "configure:13314: checking for atan2f declaration" >&5
+echo "configure:14408: checking for atan2f declaration" >&5
if test x${glibcpp_cv_func_atan2f_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_atan2f_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13325,14 +14419,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13329 "configure"
+#line 14423 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
atan2f(0, 0);
; return 0; }
EOF
-if { (eval echo configure:13336: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14430: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_atan2f_use=yes
else
@@ -13359,12 +14453,12 @@ fi
for ac_func in atan2f
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13363: checking for $ac_func" >&5
+echo "configure:14457: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13368 "configure"
+#line 14462 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13387,7 +14481,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14485: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13414,7 +14508,7 @@ done
else
echo $ac_n "checking for _atan2f declaration""... $ac_c" 1>&6
-echo "configure:13418: checking for _atan2f declaration" >&5
+echo "configure:14512: checking for _atan2f declaration" >&5
if test x${glibcpp_cv_func__atan2f_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__atan2f_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13429,14 +14523,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13433 "configure"
+#line 14527 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_atan2f(0, 0);
; return 0; }
EOF
-if { (eval echo configure:13440: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14534: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__atan2f_use=yes
else
@@ -13463,12 +14557,12 @@ fi
for ac_func in _atan2f
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13467: checking for $ac_func" >&5
+echo "configure:14561: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13472 "configure"
+#line 14566 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13491,7 +14585,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13521,7 +14615,7 @@ done
echo $ac_n "checking for fabsf declaration""... $ac_c" 1>&6
-echo "configure:13525: checking for fabsf declaration" >&5
+echo "configure:14619: checking for fabsf declaration" >&5
if test x${glibcpp_cv_func_fabsf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_fabsf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13536,7 +14630,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13540 "configure"
+#line 14634 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -13547,7 +14641,7 @@ int main() {
fabsf(0);
; return 0; }
EOF
-if { (eval echo configure:13551: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14645: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_fabsf_use=yes
else
@@ -13574,12 +14668,12 @@ fi
for ac_func in fabsf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13578: checking for $ac_func" >&5
+echo "configure:14672: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13583 "configure"
+#line 14677 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13602,7 +14696,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14700: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13629,7 +14723,7 @@ done
else
echo $ac_n "checking for _fabsf declaration""... $ac_c" 1>&6
-echo "configure:13633: checking for _fabsf declaration" >&5
+echo "configure:14727: checking for _fabsf declaration" >&5
if test x${glibcpp_cv_func__fabsf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__fabsf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13644,7 +14738,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13648 "configure"
+#line 14742 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -13655,7 +14749,7 @@ int main() {
_fabsf(0);
; return 0; }
EOF
-if { (eval echo configure:13659: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14753: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__fabsf_use=yes
else
@@ -13682,12 +14776,12 @@ fi
for ac_func in _fabsf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13686: checking for $ac_func" >&5
+echo "configure:14780: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13691 "configure"
+#line 14785 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13710,7 +14804,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13714: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13740,7 +14834,7 @@ done
echo $ac_n "checking for fmodf declaration""... $ac_c" 1>&6
-echo "configure:13744: checking for fmodf declaration" >&5
+echo "configure:14838: checking for fmodf declaration" >&5
if test x${glibcpp_cv_func_fmodf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_fmodf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13755,14 +14849,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13759 "configure"
+#line 14853 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
fmodf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:13766: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14860: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_fmodf_use=yes
else
@@ -13789,12 +14883,12 @@ fi
for ac_func in fmodf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13793: checking for $ac_func" >&5
+echo "configure:14887: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13798 "configure"
+#line 14892 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13817,7 +14911,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13821: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13844,7 +14938,7 @@ done
else
echo $ac_n "checking for _fmodf declaration""... $ac_c" 1>&6
-echo "configure:13848: checking for _fmodf declaration" >&5
+echo "configure:14942: checking for _fmodf declaration" >&5
if test x${glibcpp_cv_func__fmodf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__fmodf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13859,14 +14953,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13863 "configure"
+#line 14957 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_fmodf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:13870: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14964: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__fmodf_use=yes
else
@@ -13893,12 +14987,12 @@ fi
for ac_func in _fmodf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13897: checking for $ac_func" >&5
+echo "configure:14991: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13902 "configure"
+#line 14996 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13921,7 +15015,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13951,7 +15045,7 @@ done
echo $ac_n "checking for frexpf declaration""... $ac_c" 1>&6
-echo "configure:13955: checking for frexpf declaration" >&5
+echo "configure:15049: checking for frexpf declaration" >&5
if test x${glibcpp_cv_func_frexpf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_frexpf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13966,14 +15060,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13970 "configure"
+#line 15064 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
frexpf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:13977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15071: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_frexpf_use=yes
else
@@ -14000,12 +15094,12 @@ fi
for ac_func in frexpf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14004: checking for $ac_func" >&5
+echo "configure:15098: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14009 "configure"
+#line 15103 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14028,7 +15122,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14032: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14055,7 +15149,7 @@ done
else
echo $ac_n "checking for _frexpf declaration""... $ac_c" 1>&6
-echo "configure:14059: checking for _frexpf declaration" >&5
+echo "configure:15153: checking for _frexpf declaration" >&5
if test x${glibcpp_cv_func__frexpf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__frexpf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14070,14 +15164,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14074 "configure"
+#line 15168 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_frexpf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:14081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15175: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__frexpf_use=yes
else
@@ -14104,12 +15198,12 @@ fi
for ac_func in _frexpf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14108: checking for $ac_func" >&5
+echo "configure:15202: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14113 "configure"
+#line 15207 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14132,7 +15226,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14162,7 +15256,7 @@ done
echo $ac_n "checking for hypotf declaration""... $ac_c" 1>&6
-echo "configure:14166: checking for hypotf declaration" >&5
+echo "configure:15260: checking for hypotf declaration" >&5
if test x${glibcpp_cv_func_hypotf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_hypotf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14177,14 +15271,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14181 "configure"
+#line 15275 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
hypotf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:14188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15282: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_hypotf_use=yes
else
@@ -14211,12 +15305,12 @@ fi
for ac_func in hypotf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14215: checking for $ac_func" >&5
+echo "configure:15309: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14220 "configure"
+#line 15314 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14239,7 +15333,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15337: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14266,7 +15360,7 @@ done
else
echo $ac_n "checking for _hypotf declaration""... $ac_c" 1>&6
-echo "configure:14270: checking for _hypotf declaration" >&5
+echo "configure:15364: checking for _hypotf declaration" >&5
if test x${glibcpp_cv_func__hypotf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__hypotf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14281,14 +15375,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14285 "configure"
+#line 15379 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_hypotf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:14292: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15386: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__hypotf_use=yes
else
@@ -14315,12 +15409,12 @@ fi
for ac_func in _hypotf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14319: checking for $ac_func" >&5
+echo "configure:15413: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14324 "configure"
+#line 15418 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14343,7 +15437,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14373,7 +15467,7 @@ done
echo $ac_n "checking for ldexpf declaration""... $ac_c" 1>&6
-echo "configure:14377: checking for ldexpf declaration" >&5
+echo "configure:15471: checking for ldexpf declaration" >&5
if test x${glibcpp_cv_func_ldexpf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_ldexpf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14388,14 +15482,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14392 "configure"
+#line 15486 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
ldexpf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:14399: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15493: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_ldexpf_use=yes
else
@@ -14422,12 +15516,12 @@ fi
for ac_func in ldexpf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14426: checking for $ac_func" >&5
+echo "configure:15520: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14431 "configure"
+#line 15525 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14450,7 +15544,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14477,7 +15571,7 @@ done
else
echo $ac_n "checking for _ldexpf declaration""... $ac_c" 1>&6
-echo "configure:14481: checking for _ldexpf declaration" >&5
+echo "configure:15575: checking for _ldexpf declaration" >&5
if test x${glibcpp_cv_func__ldexpf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__ldexpf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14492,14 +15586,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14496 "configure"
+#line 15590 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_ldexpf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:14503: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15597: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__ldexpf_use=yes
else
@@ -14526,12 +15620,12 @@ fi
for ac_func in _ldexpf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14530: checking for $ac_func" >&5
+echo "configure:15624: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14535 "configure"
+#line 15629 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14554,7 +15648,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14558: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15652: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14584,7 +15678,7 @@ done
echo $ac_n "checking for logf declaration""... $ac_c" 1>&6
-echo "configure:14588: checking for logf declaration" >&5
+echo "configure:15682: checking for logf declaration" >&5
if test x${glibcpp_cv_func_logf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_logf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14599,7 +15693,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14603 "configure"
+#line 15697 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -14610,7 +15704,7 @@ int main() {
logf(0);
; return 0; }
EOF
-if { (eval echo configure:14614: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15708: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_logf_use=yes
else
@@ -14637,12 +15731,12 @@ fi
for ac_func in logf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14641: checking for $ac_func" >&5
+echo "configure:15735: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14646 "configure"
+#line 15740 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14665,7 +15759,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14669: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14692,7 +15786,7 @@ done
else
echo $ac_n "checking for _logf declaration""... $ac_c" 1>&6
-echo "configure:14696: checking for _logf declaration" >&5
+echo "configure:15790: checking for _logf declaration" >&5
if test x${glibcpp_cv_func__logf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__logf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14707,7 +15801,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14711 "configure"
+#line 15805 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -14718,7 +15812,7 @@ int main() {
_logf(0);
; return 0; }
EOF
-if { (eval echo configure:14722: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15816: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__logf_use=yes
else
@@ -14745,12 +15839,12 @@ fi
for ac_func in _logf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14749: checking for $ac_func" >&5
+echo "configure:15843: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14754 "configure"
+#line 15848 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14773,7 +15867,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15871: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14803,7 +15897,7 @@ done
echo $ac_n "checking for log10f declaration""... $ac_c" 1>&6
-echo "configure:14807: checking for log10f declaration" >&5
+echo "configure:15901: checking for log10f declaration" >&5
if test x${glibcpp_cv_func_log10f_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_log10f_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14818,7 +15912,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14822 "configure"
+#line 15916 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -14829,7 +15923,7 @@ int main() {
log10f(0);
; return 0; }
EOF
-if { (eval echo configure:14833: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_log10f_use=yes
else
@@ -14856,12 +15950,12 @@ fi
for ac_func in log10f
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14860: checking for $ac_func" >&5
+echo "configure:15954: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14865 "configure"
+#line 15959 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14884,7 +15978,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15982: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14911,7 +16005,7 @@ done
else
echo $ac_n "checking for _log10f declaration""... $ac_c" 1>&6
-echo "configure:14915: checking for _log10f declaration" >&5
+echo "configure:16009: checking for _log10f declaration" >&5
if test x${glibcpp_cv_func__log10f_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__log10f_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14926,7 +16020,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14930 "configure"
+#line 16024 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -14937,7 +16031,7 @@ int main() {
_log10f(0);
; return 0; }
EOF
-if { (eval echo configure:14941: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16035: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__log10f_use=yes
else
@@ -14964,12 +16058,12 @@ fi
for ac_func in _log10f
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14968: checking for $ac_func" >&5
+echo "configure:16062: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14973 "configure"
+#line 16067 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14992,7 +16086,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16090: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15022,7 +16116,7 @@ done
echo $ac_n "checking for modff declaration""... $ac_c" 1>&6
-echo "configure:15026: checking for modff declaration" >&5
+echo "configure:16120: checking for modff declaration" >&5
if test x${glibcpp_cv_func_modff_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_modff_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15037,14 +16131,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15041 "configure"
+#line 16135 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
modff(0, 0);
; return 0; }
EOF
-if { (eval echo configure:15048: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16142: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_modff_use=yes
else
@@ -15071,12 +16165,12 @@ fi
for ac_func in modff
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15075: checking for $ac_func" >&5
+echo "configure:16169: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15080 "configure"
+#line 16174 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15099,7 +16193,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15103: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16197: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15126,7 +16220,7 @@ done
else
echo $ac_n "checking for _modff declaration""... $ac_c" 1>&6
-echo "configure:15130: checking for _modff declaration" >&5
+echo "configure:16224: checking for _modff declaration" >&5
if test x${glibcpp_cv_func__modff_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__modff_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15141,14 +16235,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15145 "configure"
+#line 16239 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_modff(0, 0);
; return 0; }
EOF
-if { (eval echo configure:15152: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16246: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__modff_use=yes
else
@@ -15175,12 +16269,12 @@ fi
for ac_func in _modff
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15179: checking for $ac_func" >&5
+echo "configure:16273: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15184 "configure"
+#line 16278 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15203,7 +16297,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15233,7 +16327,7 @@ done
echo $ac_n "checking for powf declaration""... $ac_c" 1>&6
-echo "configure:15237: checking for powf declaration" >&5
+echo "configure:16331: checking for powf declaration" >&5
if test x${glibcpp_cv_func_powf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_powf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15248,14 +16342,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15252 "configure"
+#line 16346 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
powf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:15259: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16353: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_powf_use=yes
else
@@ -15282,12 +16376,12 @@ fi
for ac_func in powf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15286: checking for $ac_func" >&5
+echo "configure:16380: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15291 "configure"
+#line 16385 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15310,7 +16404,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15337,7 +16431,7 @@ done
else
echo $ac_n "checking for _powf declaration""... $ac_c" 1>&6
-echo "configure:15341: checking for _powf declaration" >&5
+echo "configure:16435: checking for _powf declaration" >&5
if test x${glibcpp_cv_func__powf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__powf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15352,14 +16446,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15356 "configure"
+#line 16450 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_powf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:15363: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16457: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__powf_use=yes
else
@@ -15386,12 +16480,12 @@ fi
for ac_func in _powf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15390: checking for $ac_func" >&5
+echo "configure:16484: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15395 "configure"
+#line 16489 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15414,7 +16508,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15444,7 +16538,7 @@ done
echo $ac_n "checking for sqrtf declaration""... $ac_c" 1>&6
-echo "configure:15448: checking for sqrtf declaration" >&5
+echo "configure:16542: checking for sqrtf declaration" >&5
if test x${glibcpp_cv_func_sqrtf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_sqrtf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15459,7 +16553,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15463 "configure"
+#line 16557 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -15470,7 +16564,7 @@ int main() {
sqrtf(0);
; return 0; }
EOF
-if { (eval echo configure:15474: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16568: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_sqrtf_use=yes
else
@@ -15497,12 +16591,12 @@ fi
for ac_func in sqrtf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15501: checking for $ac_func" >&5
+echo "configure:16595: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15506 "configure"
+#line 16600 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15525,7 +16619,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15529: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16623: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15552,7 +16646,7 @@ done
else
echo $ac_n "checking for _sqrtf declaration""... $ac_c" 1>&6
-echo "configure:15556: checking for _sqrtf declaration" >&5
+echo "configure:16650: checking for _sqrtf declaration" >&5
if test x${glibcpp_cv_func__sqrtf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__sqrtf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15567,7 +16661,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15571 "configure"
+#line 16665 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -15578,7 +16672,7 @@ int main() {
_sqrtf(0);
; return 0; }
EOF
-if { (eval echo configure:15582: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16676: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__sqrtf_use=yes
else
@@ -15605,12 +16699,12 @@ fi
for ac_func in _sqrtf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15609: checking for $ac_func" >&5
+echo "configure:16703: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15614 "configure"
+#line 16708 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15633,7 +16727,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15663,7 +16757,7 @@ done
echo $ac_n "checking for sincosf declaration""... $ac_c" 1>&6
-echo "configure:15667: checking for sincosf declaration" >&5
+echo "configure:16761: checking for sincosf declaration" >&5
if test x${glibcpp_cv_func_sincosf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_sincosf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15678,14 +16772,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15682 "configure"
+#line 16776 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
sincosf(0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:15689: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16783: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_sincosf_use=yes
else
@@ -15712,12 +16806,12 @@ fi
for ac_func in sincosf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15716: checking for $ac_func" >&5
+echo "configure:16810: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15721 "configure"
+#line 16815 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15740,7 +16834,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15744: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16838: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15767,7 +16861,7 @@ done
else
echo $ac_n "checking for _sincosf declaration""... $ac_c" 1>&6
-echo "configure:15771: checking for _sincosf declaration" >&5
+echo "configure:16865: checking for _sincosf declaration" >&5
if test x${glibcpp_cv_func__sincosf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__sincosf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15782,14 +16876,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15786 "configure"
+#line 16880 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_sincosf(0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:15793: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16887: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__sincosf_use=yes
else
@@ -15816,12 +16910,12 @@ fi
for ac_func in _sincosf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15820: checking for $ac_func" >&5
+echo "configure:16914: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15825 "configure"
+#line 16919 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15844,7 +16938,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15874,7 +16968,7 @@ done
echo $ac_n "checking for finitef declaration""... $ac_c" 1>&6
-echo "configure:15878: checking for finitef declaration" >&5
+echo "configure:16972: checking for finitef declaration" >&5
if test x${glibcpp_cv_func_finitef_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_finitef_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15889,7 +16983,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15893 "configure"
+#line 16987 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -15900,7 +16994,7 @@ int main() {
finitef(0);
; return 0; }
EOF
-if { (eval echo configure:15904: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16998: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_finitef_use=yes
else
@@ -15927,12 +17021,12 @@ fi
for ac_func in finitef
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15931: checking for $ac_func" >&5
+echo "configure:17025: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15936 "configure"
+#line 17030 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15955,7 +17049,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17053: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15982,7 +17076,7 @@ done
else
echo $ac_n "checking for _finitef declaration""... $ac_c" 1>&6
-echo "configure:15986: checking for _finitef declaration" >&5
+echo "configure:17080: checking for _finitef declaration" >&5
if test x${glibcpp_cv_func__finitef_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__finitef_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15997,7 +17091,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16001 "configure"
+#line 17095 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -16008,7 +17102,7 @@ int main() {
_finitef(0);
; return 0; }
EOF
-if { (eval echo configure:16012: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17106: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__finitef_use=yes
else
@@ -16035,12 +17129,12 @@ fi
for ac_func in _finitef
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16039: checking for $ac_func" >&5
+echo "configure:17133: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16044 "configure"
+#line 17138 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16063,7 +17157,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16067: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16093,7 +17187,7 @@ done
echo $ac_n "checking for long double trig functions""... $ac_c" 1>&6
-echo "configure:16097: checking for long double trig functions" >&5
+echo "configure:17191: checking for long double trig functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func_long_double_trig_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -16107,7 +17201,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16111 "configure"
+#line 17205 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
@@ -16116,7 +17210,7 @@ int main() {
coshl sinhl tanhl; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:16120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17214: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_long_double_trig_use=yes
else
@@ -16142,12 +17236,12 @@ fi
coshl sinhl tanhl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16146: checking for $ac_func" >&5
+echo "configure:17240: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16151 "configure"
+#line 17245 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16170,7 +17264,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16198,7 +17292,7 @@ done
echo $ac_n "checking for long double round functions""... $ac_c" 1>&6
-echo "configure:16202: checking for long double round functions" >&5
+echo "configure:17296: checking for long double round functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func_long_double_round_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -16212,14 +17306,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16216 "configure"
+#line 17310 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
`for x in ceill floorl; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:16223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17317: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_long_double_round_use=yes
else
@@ -16243,12 +17337,12 @@ fi
for ac_func in ceill floorl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16247: checking for $ac_func" >&5
+echo "configure:17341: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16252 "configure"
+#line 17346 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16271,7 +17365,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16300,7 +17394,7 @@ done
echo $ac_n "checking for isnanl declaration""... $ac_c" 1>&6
-echo "configure:16304: checking for isnanl declaration" >&5
+echo "configure:17398: checking for isnanl declaration" >&5
if test x${glibcpp_cv_func_isnanl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_isnanl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16315,7 +17409,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16319 "configure"
+#line 17413 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -16326,7 +17420,7 @@ int main() {
isnanl(0);
; return 0; }
EOF
-if { (eval echo configure:16330: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17424: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_isnanl_use=yes
else
@@ -16353,12 +17447,12 @@ fi
for ac_func in isnanl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16357: checking for $ac_func" >&5
+echo "configure:17451: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16362 "configure"
+#line 17456 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16381,7 +17475,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16408,7 +17502,7 @@ done
else
echo $ac_n "checking for _isnanl declaration""... $ac_c" 1>&6
-echo "configure:16412: checking for _isnanl declaration" >&5
+echo "configure:17506: checking for _isnanl declaration" >&5
if test x${glibcpp_cv_func__isnanl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__isnanl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16423,7 +17517,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16427 "configure"
+#line 17521 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -16434,7 +17528,7 @@ int main() {
_isnanl(0);
; return 0; }
EOF
-if { (eval echo configure:16438: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17532: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__isnanl_use=yes
else
@@ -16461,12 +17555,12 @@ fi
for ac_func in _isnanl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16465: checking for $ac_func" >&5
+echo "configure:17559: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16470 "configure"
+#line 17564 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16489,7 +17583,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16493: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16519,7 +17613,7 @@ done
echo $ac_n "checking for isinfl declaration""... $ac_c" 1>&6
-echo "configure:16523: checking for isinfl declaration" >&5
+echo "configure:17617: checking for isinfl declaration" >&5
if test x${glibcpp_cv_func_isinfl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_isinfl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16534,7 +17628,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16538 "configure"
+#line 17632 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -16545,7 +17639,7 @@ int main() {
isinfl(0);
; return 0; }
EOF
-if { (eval echo configure:16549: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17643: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_isinfl_use=yes
else
@@ -16572,12 +17666,12 @@ fi
for ac_func in isinfl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16576: checking for $ac_func" >&5
+echo "configure:17670: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16581 "configure"
+#line 17675 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16600,7 +17694,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16627,7 +17721,7 @@ done
else
echo $ac_n "checking for _isinfl declaration""... $ac_c" 1>&6
-echo "configure:16631: checking for _isinfl declaration" >&5
+echo "configure:17725: checking for _isinfl declaration" >&5
if test x${glibcpp_cv_func__isinfl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__isinfl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16642,7 +17736,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16646 "configure"
+#line 17740 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -16653,7 +17747,7 @@ int main() {
_isinfl(0);
; return 0; }
EOF
-if { (eval echo configure:16657: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17751: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__isinfl_use=yes
else
@@ -16680,12 +17774,12 @@ fi
for ac_func in _isinfl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16684: checking for $ac_func" >&5
+echo "configure:17778: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16689 "configure"
+#line 17783 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16708,7 +17802,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16712: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16738,7 +17832,7 @@ done
echo $ac_n "checking for copysignl declaration""... $ac_c" 1>&6
-echo "configure:16742: checking for copysignl declaration" >&5
+echo "configure:17836: checking for copysignl declaration" >&5
if test x${glibcpp_cv_func_copysignl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_copysignl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16753,14 +17847,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16757 "configure"
+#line 17851 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
copysignl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:16764: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17858: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_copysignl_use=yes
else
@@ -16787,12 +17881,12 @@ fi
for ac_func in copysignl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16791: checking for $ac_func" >&5
+echo "configure:17885: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16796 "configure"
+#line 17890 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16815,7 +17909,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16842,7 +17936,7 @@ done
else
echo $ac_n "checking for _copysignl declaration""... $ac_c" 1>&6
-echo "configure:16846: checking for _copysignl declaration" >&5
+echo "configure:17940: checking for _copysignl declaration" >&5
if test x${glibcpp_cv_func__copysignl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__copysignl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16857,14 +17951,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16861 "configure"
+#line 17955 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_copysignl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:16868: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17962: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__copysignl_use=yes
else
@@ -16891,12 +17985,12 @@ fi
for ac_func in _copysignl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16895: checking for $ac_func" >&5
+echo "configure:17989: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16900 "configure"
+#line 17994 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16919,7 +18013,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18017: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16949,7 +18043,7 @@ done
echo $ac_n "checking for atan2l declaration""... $ac_c" 1>&6
-echo "configure:16953: checking for atan2l declaration" >&5
+echo "configure:18047: checking for atan2l declaration" >&5
if test x${glibcpp_cv_func_atan2l_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_atan2l_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16964,14 +18058,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16968 "configure"
+#line 18062 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
atan2l(0, 0);
; return 0; }
EOF
-if { (eval echo configure:16975: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18069: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_atan2l_use=yes
else
@@ -16998,12 +18092,12 @@ fi
for ac_func in atan2l
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17002: checking for $ac_func" >&5
+echo "configure:18096: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17007 "configure"
+#line 18101 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17026,7 +18120,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17053,7 +18147,7 @@ done
else
echo $ac_n "checking for _atan2l declaration""... $ac_c" 1>&6
-echo "configure:17057: checking for _atan2l declaration" >&5
+echo "configure:18151: checking for _atan2l declaration" >&5
if test x${glibcpp_cv_func__atan2l_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__atan2l_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17068,14 +18162,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17072 "configure"
+#line 18166 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_atan2l(0, 0);
; return 0; }
EOF
-if { (eval echo configure:17079: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18173: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__atan2l_use=yes
else
@@ -17102,12 +18196,12 @@ fi
for ac_func in _atan2l
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17106: checking for $ac_func" >&5
+echo "configure:18200: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17111 "configure"
+#line 18205 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17130,7 +18224,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17160,7 +18254,7 @@ done
echo $ac_n "checking for expl declaration""... $ac_c" 1>&6
-echo "configure:17164: checking for expl declaration" >&5
+echo "configure:18258: checking for expl declaration" >&5
if test x${glibcpp_cv_func_expl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_expl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17175,7 +18269,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17179 "configure"
+#line 18273 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -17186,7 +18280,7 @@ int main() {
expl(0);
; return 0; }
EOF
-if { (eval echo configure:17190: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18284: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_expl_use=yes
else
@@ -17213,12 +18307,12 @@ fi
for ac_func in expl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17217: checking for $ac_func" >&5
+echo "configure:18311: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17222 "configure"
+#line 18316 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17241,7 +18335,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17245: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18339: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17268,7 +18362,7 @@ done
else
echo $ac_n "checking for _expl declaration""... $ac_c" 1>&6
-echo "configure:17272: checking for _expl declaration" >&5
+echo "configure:18366: checking for _expl declaration" >&5
if test x${glibcpp_cv_func__expl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__expl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17283,7 +18377,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17287 "configure"
+#line 18381 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -17294,7 +18388,7 @@ int main() {
_expl(0);
; return 0; }
EOF
-if { (eval echo configure:17298: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18392: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__expl_use=yes
else
@@ -17321,12 +18415,12 @@ fi
for ac_func in _expl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17325: checking for $ac_func" >&5
+echo "configure:18419: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17330 "configure"
+#line 18424 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17349,7 +18443,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18447: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17379,7 +18473,7 @@ done
echo $ac_n "checking for fabsl declaration""... $ac_c" 1>&6
-echo "configure:17383: checking for fabsl declaration" >&5
+echo "configure:18477: checking for fabsl declaration" >&5
if test x${glibcpp_cv_func_fabsl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_fabsl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17394,7 +18488,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17398 "configure"
+#line 18492 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -17405,7 +18499,7 @@ int main() {
fabsl(0);
; return 0; }
EOF
-if { (eval echo configure:17409: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18503: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_fabsl_use=yes
else
@@ -17432,12 +18526,12 @@ fi
for ac_func in fabsl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17436: checking for $ac_func" >&5
+echo "configure:18530: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17441 "configure"
+#line 18535 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17460,7 +18554,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18558: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17487,7 +18581,7 @@ done
else
echo $ac_n "checking for _fabsl declaration""... $ac_c" 1>&6
-echo "configure:17491: checking for _fabsl declaration" >&5
+echo "configure:18585: checking for _fabsl declaration" >&5
if test x${glibcpp_cv_func__fabsl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__fabsl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17502,7 +18596,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17506 "configure"
+#line 18600 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -17513,7 +18607,7 @@ int main() {
_fabsl(0);
; return 0; }
EOF
-if { (eval echo configure:17517: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18611: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__fabsl_use=yes
else
@@ -17540,12 +18634,12 @@ fi
for ac_func in _fabsl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17544: checking for $ac_func" >&5
+echo "configure:18638: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17549 "configure"
+#line 18643 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17568,7 +18662,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18666: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17598,7 +18692,7 @@ done
echo $ac_n "checking for fmodl declaration""... $ac_c" 1>&6
-echo "configure:17602: checking for fmodl declaration" >&5
+echo "configure:18696: checking for fmodl declaration" >&5
if test x${glibcpp_cv_func_fmodl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_fmodl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17613,14 +18707,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17617 "configure"
+#line 18711 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
fmodl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:17624: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18718: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_fmodl_use=yes
else
@@ -17647,12 +18741,12 @@ fi
for ac_func in fmodl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17651: checking for $ac_func" >&5
+echo "configure:18745: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17656 "configure"
+#line 18750 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17675,7 +18769,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17702,7 +18796,7 @@ done
else
echo $ac_n "checking for _fmodl declaration""... $ac_c" 1>&6
-echo "configure:17706: checking for _fmodl declaration" >&5
+echo "configure:18800: checking for _fmodl declaration" >&5
if test x${glibcpp_cv_func__fmodl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__fmodl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17717,14 +18811,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17721 "configure"
+#line 18815 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_fmodl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:17728: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18822: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__fmodl_use=yes
else
@@ -17751,12 +18845,12 @@ fi
for ac_func in _fmodl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17755: checking for $ac_func" >&5
+echo "configure:18849: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17760 "configure"
+#line 18854 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17779,7 +18873,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17783: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17809,7 +18903,7 @@ done
echo $ac_n "checking for frexpl declaration""... $ac_c" 1>&6
-echo "configure:17813: checking for frexpl declaration" >&5
+echo "configure:18907: checking for frexpl declaration" >&5
if test x${glibcpp_cv_func_frexpl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_frexpl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17824,14 +18918,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17828 "configure"
+#line 18922 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
frexpl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:17835: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18929: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_frexpl_use=yes
else
@@ -17858,12 +18952,12 @@ fi
for ac_func in frexpl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17862: checking for $ac_func" >&5
+echo "configure:18956: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17867 "configure"
+#line 18961 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17886,7 +18980,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17913,7 +19007,7 @@ done
else
echo $ac_n "checking for _frexpl declaration""... $ac_c" 1>&6
-echo "configure:17917: checking for _frexpl declaration" >&5
+echo "configure:19011: checking for _frexpl declaration" >&5
if test x${glibcpp_cv_func__frexpl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__frexpl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17928,14 +19022,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17932 "configure"
+#line 19026 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_frexpl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:17939: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19033: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__frexpl_use=yes
else
@@ -17962,12 +19056,12 @@ fi
for ac_func in _frexpl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17966: checking for $ac_func" >&5
+echo "configure:19060: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17971 "configure"
+#line 19065 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17990,7 +19084,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17994: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18020,7 +19114,7 @@ done
echo $ac_n "checking for hypotl declaration""... $ac_c" 1>&6
-echo "configure:18024: checking for hypotl declaration" >&5
+echo "configure:19118: checking for hypotl declaration" >&5
if test x${glibcpp_cv_func_hypotl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_hypotl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18035,14 +19129,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18039 "configure"
+#line 19133 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
hypotl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:18046: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19140: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_hypotl_use=yes
else
@@ -18069,12 +19163,12 @@ fi
for ac_func in hypotl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18073: checking for $ac_func" >&5
+echo "configure:19167: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18078 "configure"
+#line 19172 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18097,7 +19191,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18101: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19195: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18124,7 +19218,7 @@ done
else
echo $ac_n "checking for _hypotl declaration""... $ac_c" 1>&6
-echo "configure:18128: checking for _hypotl declaration" >&5
+echo "configure:19222: checking for _hypotl declaration" >&5
if test x${glibcpp_cv_func__hypotl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__hypotl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18139,14 +19233,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18143 "configure"
+#line 19237 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_hypotl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:18150: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19244: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__hypotl_use=yes
else
@@ -18173,12 +19267,12 @@ fi
for ac_func in _hypotl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18177: checking for $ac_func" >&5
+echo "configure:19271: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18182 "configure"
+#line 19276 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18201,7 +19295,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19299: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18231,7 +19325,7 @@ done
echo $ac_n "checking for ldexpl declaration""... $ac_c" 1>&6
-echo "configure:18235: checking for ldexpl declaration" >&5
+echo "configure:19329: checking for ldexpl declaration" >&5
if test x${glibcpp_cv_func_ldexpl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_ldexpl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18246,14 +19340,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18250 "configure"
+#line 19344 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
ldexpl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:18257: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19351: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_ldexpl_use=yes
else
@@ -18280,12 +19374,12 @@ fi
for ac_func in ldexpl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18284: checking for $ac_func" >&5
+echo "configure:19378: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18289 "configure"
+#line 19383 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18308,7 +19402,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18335,7 +19429,7 @@ done
else
echo $ac_n "checking for _ldexpl declaration""... $ac_c" 1>&6
-echo "configure:18339: checking for _ldexpl declaration" >&5
+echo "configure:19433: checking for _ldexpl declaration" >&5
if test x${glibcpp_cv_func__ldexpl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__ldexpl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18350,14 +19444,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18354 "configure"
+#line 19448 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_ldexpl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:18361: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19455: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__ldexpl_use=yes
else
@@ -18384,12 +19478,12 @@ fi
for ac_func in _ldexpl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18388: checking for $ac_func" >&5
+echo "configure:19482: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18393 "configure"
+#line 19487 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18412,7 +19506,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18442,7 +19536,7 @@ done
echo $ac_n "checking for logl declaration""... $ac_c" 1>&6
-echo "configure:18446: checking for logl declaration" >&5
+echo "configure:19540: checking for logl declaration" >&5
if test x${glibcpp_cv_func_logl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_logl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18457,7 +19551,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18461 "configure"
+#line 19555 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -18468,7 +19562,7 @@ int main() {
logl(0);
; return 0; }
EOF
-if { (eval echo configure:18472: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19566: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_logl_use=yes
else
@@ -18495,12 +19589,12 @@ fi
for ac_func in logl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18499: checking for $ac_func" >&5
+echo "configure:19593: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18504 "configure"
+#line 19598 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18523,7 +19617,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18550,7 +19644,7 @@ done
else
echo $ac_n "checking for _logl declaration""... $ac_c" 1>&6
-echo "configure:18554: checking for _logl declaration" >&5
+echo "configure:19648: checking for _logl declaration" >&5
if test x${glibcpp_cv_func__logl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__logl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18565,7 +19659,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18569 "configure"
+#line 19663 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -18576,7 +19670,7 @@ int main() {
_logl(0);
; return 0; }
EOF
-if { (eval echo configure:18580: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19674: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__logl_use=yes
else
@@ -18603,12 +19697,12 @@ fi
for ac_func in _logl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18607: checking for $ac_func" >&5
+echo "configure:19701: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18612 "configure"
+#line 19706 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18631,7 +19725,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18661,7 +19755,7 @@ done
echo $ac_n "checking for log10l declaration""... $ac_c" 1>&6
-echo "configure:18665: checking for log10l declaration" >&5
+echo "configure:19759: checking for log10l declaration" >&5
if test x${glibcpp_cv_func_log10l_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_log10l_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18676,7 +19770,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18680 "configure"
+#line 19774 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -18687,7 +19781,7 @@ int main() {
log10l(0);
; return 0; }
EOF
-if { (eval echo configure:18691: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19785: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_log10l_use=yes
else
@@ -18714,12 +19808,12 @@ fi
for ac_func in log10l
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18718: checking for $ac_func" >&5
+echo "configure:19812: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18723 "configure"
+#line 19817 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18742,7 +19836,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18746: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19840: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18769,7 +19863,7 @@ done
else
echo $ac_n "checking for _log10l declaration""... $ac_c" 1>&6
-echo "configure:18773: checking for _log10l declaration" >&5
+echo "configure:19867: checking for _log10l declaration" >&5
if test x${glibcpp_cv_func__log10l_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__log10l_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18784,7 +19878,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18788 "configure"
+#line 19882 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -18795,7 +19889,7 @@ int main() {
_log10l(0);
; return 0; }
EOF
-if { (eval echo configure:18799: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__log10l_use=yes
else
@@ -18822,12 +19916,12 @@ fi
for ac_func in _log10l
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18826: checking for $ac_func" >&5
+echo "configure:19920: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18831 "configure"
+#line 19925 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18850,7 +19944,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18880,7 +19974,7 @@ done
echo $ac_n "checking for modfl declaration""... $ac_c" 1>&6
-echo "configure:18884: checking for modfl declaration" >&5
+echo "configure:19978: checking for modfl declaration" >&5
if test x${glibcpp_cv_func_modfl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_modfl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18895,14 +19989,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18899 "configure"
+#line 19993 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
modfl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:18906: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20000: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_modfl_use=yes
else
@@ -18929,12 +20023,12 @@ fi
for ac_func in modfl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18933: checking for $ac_func" >&5
+echo "configure:20027: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18938 "configure"
+#line 20032 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18957,7 +20051,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20055: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18984,7 +20078,7 @@ done
else
echo $ac_n "checking for _modfl declaration""... $ac_c" 1>&6
-echo "configure:18988: checking for _modfl declaration" >&5
+echo "configure:20082: checking for _modfl declaration" >&5
if test x${glibcpp_cv_func__modfl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__modfl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18999,14 +20093,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19003 "configure"
+#line 20097 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_modfl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:19010: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20104: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__modfl_use=yes
else
@@ -19033,12 +20127,12 @@ fi
for ac_func in _modfl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19037: checking for $ac_func" >&5
+echo "configure:20131: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19042 "configure"
+#line 20136 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19061,7 +20155,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19065: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20159: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19091,7 +20185,7 @@ done
echo $ac_n "checking for powl declaration""... $ac_c" 1>&6
-echo "configure:19095: checking for powl declaration" >&5
+echo "configure:20189: checking for powl declaration" >&5
if test x${glibcpp_cv_func_powl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_powl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19106,14 +20200,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19110 "configure"
+#line 20204 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
powl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:19117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20211: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_powl_use=yes
else
@@ -19140,12 +20234,12 @@ fi
for ac_func in powl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19144: checking for $ac_func" >&5
+echo "configure:20238: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19149 "configure"
+#line 20243 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19168,7 +20262,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19195,7 +20289,7 @@ done
else
echo $ac_n "checking for _powl declaration""... $ac_c" 1>&6
-echo "configure:19199: checking for _powl declaration" >&5
+echo "configure:20293: checking for _powl declaration" >&5
if test x${glibcpp_cv_func__powl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__powl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19210,14 +20304,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19214 "configure"
+#line 20308 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_powl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:19221: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20315: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__powl_use=yes
else
@@ -19244,12 +20338,12 @@ fi
for ac_func in _powl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19248: checking for $ac_func" >&5
+echo "configure:20342: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19253 "configure"
+#line 20347 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19272,7 +20366,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19276: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19302,7 +20396,7 @@ done
echo $ac_n "checking for sqrtl declaration""... $ac_c" 1>&6
-echo "configure:19306: checking for sqrtl declaration" >&5
+echo "configure:20400: checking for sqrtl declaration" >&5
if test x${glibcpp_cv_func_sqrtl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_sqrtl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19317,7 +20411,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19321 "configure"
+#line 20415 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -19328,7 +20422,7 @@ int main() {
sqrtl(0);
; return 0; }
EOF
-if { (eval echo configure:19332: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20426: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_sqrtl_use=yes
else
@@ -19355,12 +20449,12 @@ fi
for ac_func in sqrtl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19359: checking for $ac_func" >&5
+echo "configure:20453: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19364 "configure"
+#line 20458 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19383,7 +20477,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19387: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19410,7 +20504,7 @@ done
else
echo $ac_n "checking for _sqrtl declaration""... $ac_c" 1>&6
-echo "configure:19414: checking for _sqrtl declaration" >&5
+echo "configure:20508: checking for _sqrtl declaration" >&5
if test x${glibcpp_cv_func__sqrtl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__sqrtl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19425,7 +20519,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19429 "configure"
+#line 20523 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -19436,7 +20530,7 @@ int main() {
_sqrtl(0);
; return 0; }
EOF
-if { (eval echo configure:19440: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20534: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__sqrtl_use=yes
else
@@ -19463,12 +20557,12 @@ fi
for ac_func in _sqrtl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19467: checking for $ac_func" >&5
+echo "configure:20561: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19472 "configure"
+#line 20566 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19491,7 +20585,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19521,7 +20615,7 @@ done
echo $ac_n "checking for sincosl declaration""... $ac_c" 1>&6
-echo "configure:19525: checking for sincosl declaration" >&5
+echo "configure:20619: checking for sincosl declaration" >&5
if test x${glibcpp_cv_func_sincosl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_sincosl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19536,14 +20630,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19540 "configure"
+#line 20634 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
sincosl(0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:19547: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20641: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_sincosl_use=yes
else
@@ -19570,12 +20664,12 @@ fi
for ac_func in sincosl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19574: checking for $ac_func" >&5
+echo "configure:20668: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19579 "configure"
+#line 20673 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19598,7 +20692,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19625,7 +20719,7 @@ done
else
echo $ac_n "checking for _sincosl declaration""... $ac_c" 1>&6
-echo "configure:19629: checking for _sincosl declaration" >&5
+echo "configure:20723: checking for _sincosl declaration" >&5
if test x${glibcpp_cv_func__sincosl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__sincosl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19640,14 +20734,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19644 "configure"
+#line 20738 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_sincosl(0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:19651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20745: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__sincosl_use=yes
else
@@ -19674,12 +20768,12 @@ fi
for ac_func in _sincosl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19678: checking for $ac_func" >&5
+echo "configure:20772: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19683 "configure"
+#line 20777 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19702,7 +20796,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19732,7 +20826,7 @@ done
echo $ac_n "checking for finitel declaration""... $ac_c" 1>&6
-echo "configure:19736: checking for finitel declaration" >&5
+echo "configure:20830: checking for finitel declaration" >&5
if test x${glibcpp_cv_func_finitel_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_finitel_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19747,7 +20841,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19751 "configure"
+#line 20845 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -19758,7 +20852,7 @@ int main() {
finitel(0);
; return 0; }
EOF
-if { (eval echo configure:19762: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20856: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_finitel_use=yes
else
@@ -19785,12 +20879,12 @@ fi
for ac_func in finitel
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19789: checking for $ac_func" >&5
+echo "configure:20883: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19794 "configure"
+#line 20888 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19813,7 +20907,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19817: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19840,7 +20934,7 @@ done
else
echo $ac_n "checking for _finitel declaration""... $ac_c" 1>&6
-echo "configure:19844: checking for _finitel declaration" >&5
+echo "configure:20938: checking for _finitel declaration" >&5
if test x${glibcpp_cv_func__finitel_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__finitel_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19855,7 +20949,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19859 "configure"
+#line 20953 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -19866,7 +20960,7 @@ int main() {
_finitel(0);
; return 0; }
EOF
-if { (eval echo configure:19870: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20964: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__finitel_use=yes
else
@@ -19893,12 +20987,12 @@ fi
for ac_func in _finitel
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19897: checking for $ac_func" >&5
+echo "configure:20991: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19902 "configure"
+#line 20996 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19921,7 +21015,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19952,7 +21046,7 @@ done
echo $ac_n "checking for _float trig functions""... $ac_c" 1>&6
-echo "configure:19956: checking for _float trig functions" >&5
+echo "configure:21050: checking for _float trig functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func__float_trig_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -19966,7 +21060,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19970 "configure"
+#line 21064 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
@@ -19975,7 +21069,7 @@ int main() {
_coshf _sinhf _tanhf; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:19979: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:21073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__float_trig_use=yes
else
@@ -20001,12 +21095,12 @@ fi
_coshf _sinhf _tanhf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20005: checking for $ac_func" >&5
+echo "configure:21099: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20010 "configure"
+#line 21104 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20029,7 +21123,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20057,7 +21151,7 @@ done
echo $ac_n "checking for _float round functions""... $ac_c" 1>&6
-echo "configure:20061: checking for _float round functions" >&5
+echo "configure:21155: checking for _float round functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func__float_round_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -20071,14 +21165,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 20075 "configure"
+#line 21169 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
`for x in _ceilf _floorf; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:20082: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:21176: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__float_round_use=yes
else
@@ -20102,12 +21196,12 @@ fi
for ac_func in _ceilf _floorf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20106: checking for $ac_func" >&5
+echo "configure:21200: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20111 "configure"
+#line 21205 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20130,7 +21224,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20159,7 +21253,7 @@ done
echo $ac_n "checking for _long double trig functions""... $ac_c" 1>&6
-echo "configure:20163: checking for _long double trig functions" >&5
+echo "configure:21257: checking for _long double trig functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func__long_double_trig_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -20173,7 +21267,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 20177 "configure"
+#line 21271 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
@@ -20182,7 +21276,7 @@ int main() {
_coshl _sinhl _tanhl; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:20186: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:21280: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__long_double_trig_use=yes
else
@@ -20208,12 +21302,12 @@ fi
_coshl _sinhl _tanhl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20212: checking for $ac_func" >&5
+echo "configure:21306: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20217 "configure"
+#line 21311 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20236,7 +21330,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20240: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20264,7 +21358,7 @@ done
echo $ac_n "checking for _long double round functions""... $ac_c" 1>&6
-echo "configure:20268: checking for _long double round functions" >&5
+echo "configure:21362: checking for _long double round functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func__long_double_round_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -20278,14 +21372,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 20282 "configure"
+#line 21376 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
`for x in _ceill _floorl; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:20289: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:21383: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__long_double_round_use=yes
else
@@ -20309,12 +21403,12 @@ fi
for ac_func in _ceill _floorl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20313: checking for $ac_func" >&5
+echo "configure:21407: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20318 "configure"
+#line 21412 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20337,7 +21431,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20369,7 +21463,7 @@ done
echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:20373: checking for main in -lm" >&5
+echo "configure:21467: checking for main in -lm" >&5
ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -20377,14 +21471,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 20381 "configure"
+#line 21475 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:20388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -20414,12 +21508,12 @@ fi
for ac_func in nan copysignf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20418: checking for $ac_func" >&5
+echo "configure:21512: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20423 "configure"
+#line 21517 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20442,7 +21536,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20446: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21540: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20471,12 +21565,12 @@ done
for ac_func in __signbit
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20475: checking for $ac_func" >&5
+echo "configure:21569: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20480 "configure"
+#line 21574 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20499,7 +21593,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21597: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20527,12 +21621,12 @@ done
for ac_func in __signbitf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20531: checking for $ac_func" >&5
+echo "configure:21625: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20536 "configure"
+#line 21630 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20555,7 +21649,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20585,12 +21679,12 @@ done
for ac_func in __signbitl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20589: checking for $ac_func" >&5
+echo "configure:21683: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20594 "configure"
+#line 21688 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20613,7 +21707,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20645,16 +21739,16 @@ done
echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
-echo "configure:20649: checking for mbstate_t" >&5
+echo "configure:21743: checking for mbstate_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 20651 "configure"
+#line 21745 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
mbstate_t teststate;
; return 0; }
EOF
-if { (eval echo configure:20658: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:21752: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
have_mbstate_t=yes
else
@@ -20676,17 +21770,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:20680: checking for $ac_hdr" >&5
+echo "configure:21774: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20685 "configure"
+#line 21779 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:20690: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:21784: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -20717,17 +21811,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:20721: checking for $ac_hdr" >&5
+echo "configure:21815: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20726 "configure"
+#line 21820 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:20731: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:21825: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -20760,16 +21854,16 @@ done
test x"$enable_c_mbchar" != xno; then
echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
-echo "configure:20764: checking for WCHAR_MIN and WCHAR_MAX" >&5
+echo "configure:21858: checking for WCHAR_MIN and WCHAR_MAX" >&5
cat > conftest.$ac_ext <<EOF
-#line 20766 "configure"
+#line 21860 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
int i = WCHAR_MIN; int j = WCHAR_MAX;
; return 0; }
EOF
-if { (eval echo configure:20773: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:21867: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_wchar_minmax=yes
else
@@ -20782,9 +21876,9 @@ rm -f conftest*
echo "$ac_t""$has_wchar_minmax" 1>&6
echo $ac_n "checking for WEOF""... $ac_c" 1>&6
-echo "configure:20786: checking for WEOF" >&5
+echo "configure:21880: checking for WEOF" >&5
cat > conftest.$ac_ext <<EOF
-#line 20788 "configure"
+#line 21882 "configure"
#include "confdefs.h"
#include <wchar.h>
@@ -20793,7 +21887,7 @@ int main() {
wint_t i = WEOF;
; return 0; }
EOF
-if { (eval echo configure:20797: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:21891: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_weof=yes
else
@@ -20809,12 +21903,12 @@ rm -f conftest*
for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20813: checking for $ac_func" >&5
+echo "configure:21907: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20818 "configure"
+#line 21912 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20837,7 +21931,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21935: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20872,12 +21966,12 @@ done
wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20876: checking for $ac_func" >&5
+echo "configure:21970: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20881 "configure"
+#line 21975 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20900,7 +21994,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20904: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20928,7 +22022,7 @@ done
echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
-echo "configure:20932: checking for ISO C99 wchar_t support" >&5
+echo "configure:22026: checking for ISO C99 wchar_t support" >&5
if test x"$has_weof" = xyes &&
test x"$has_wchar_minmax" = xyes &&
test x"$ac_wfuncs" = xyes; then
@@ -20940,17 +22034,17 @@ echo "configure:20932: checking for ISO C99 wchar_t support" >&5
ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
-echo "configure:20944: checking for iconv.h" >&5
+echo "configure:22038: checking for iconv.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20949 "configure"
+#line 22043 "configure"
#include "confdefs.h"
#include <iconv.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:20954: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:22048: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -20974,17 +22068,17 @@ fi
ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
-echo "configure:20978: checking for langinfo.h" >&5
+echo "configure:22072: checking for langinfo.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20983 "configure"
+#line 22077 "configure"
#include "confdefs.h"
#include <langinfo.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:20988: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:22082: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -21008,7 +22102,7 @@ fi
echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
-echo "configure:21012: checking for iconv in -liconv" >&5
+echo "configure:22106: checking for iconv in -liconv" >&5
ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -21016,7 +22110,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-liconv $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 21020 "configure"
+#line 22114 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -21027,7 +22121,7 @@ int main() {
iconv()
; return 0; }
EOF
-if { (eval echo configure:21031: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22125: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -21053,12 +22147,12 @@ fi
for ac_func in iconv_open iconv_close iconv nl_langinfo
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21057: checking for $ac_func" >&5
+echo "configure:22151: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21062 "configure"
+#line 22156 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21081,7 +22175,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21111,7 +22205,7 @@ done
LIBS="$ac_save_LIBS"
echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
-echo "configure:21115: checking for XPG2 wchar_t support" >&5
+echo "configure:22209: checking for XPG2 wchar_t support" >&5
if test x"$ac_has_iconv_h" = xyes &&
test x"$ac_has_langinfo_h" = xyes &&
test x"$ac_XPG2funcs" = xyes; then
@@ -21122,7 +22216,7 @@ echo "configure:21115: checking for XPG2 wchar_t support" >&5
echo "$ac_t""$ac_XPG2_wchar_t" 1>&6
echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
-echo "configure:21126: checking for enabled wchar_t specializations" >&5
+echo "configure:22220: checking for enabled wchar_t specializations" >&5
if test x"$ac_isoC99_wchar_t" = xyes &&
test x"$ac_XPG2_wchar_t" = xyes; then
cat >> confdefs.h <<\EOF
@@ -21144,7 +22238,7 @@ EOF
echo $ac_n "checking for strtold declaration""... $ac_c" 1>&6
-echo "configure:21148: checking for strtold declaration" >&5
+echo "configure:22242: checking for strtold declaration" >&5
if test x${glibcpp_cv_func_strtold_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_strtold_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -21159,14 +22253,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 21163 "configure"
+#line 22257 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
strtold(0, 0);
; return 0; }
EOF
-if { (eval echo configure:21170: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:22264: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_strtold_use=yes
else
@@ -21192,12 +22286,12 @@ fi
for ac_func in strtold
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21196: checking for $ac_func" >&5
+echo "configure:22290: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21201 "configure"
+#line 22295 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21220,7 +22314,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21248,7 +22342,7 @@ done
echo $ac_n "checking for strtof declaration""... $ac_c" 1>&6
-echo "configure:21252: checking for strtof declaration" >&5
+echo "configure:22346: checking for strtof declaration" >&5
if test x${glibcpp_cv_func_strtof_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_strtof_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -21263,14 +22357,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 21267 "configure"
+#line 22361 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
strtof(0, 0);
; return 0; }
EOF
-if { (eval echo configure:21274: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:22368: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_strtof_use=yes
else
@@ -21296,12 +22390,12 @@ fi
for ac_func in strtof
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21300: checking for $ac_func" >&5
+echo "configure:22394: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21305 "configure"
+#line 22399 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21324,7 +22418,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21353,12 +22447,12 @@ done
for ac_func in drand48
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21357: checking for $ac_func" >&5
+echo "configure:22451: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21362 "configure"
+#line 22456 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21381,7 +22475,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21411,17 +22505,17 @@ done
ac_safe=`echo "locale.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for locale.h""... $ac_c" 1>&6
-echo "configure:21415: checking for locale.h" >&5
+echo "configure:22509: checking for locale.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21420 "configure"
+#line 22514 "configure"
#include "confdefs.h"
#include <locale.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:21425: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:22519: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -21439,19 +22533,19 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:21443: checking for LC_MESSAGES" >&5
+echo "configure:22537: checking for LC_MESSAGES" >&5
if eval "test \"`echo '$''{'ac_cv_val_LC_MESSAGES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21448 "configure"
+#line 22542 "configure"
#include "confdefs.h"
#include <locale.h>
int main() {
return LC_MESSAGES
; return 0; }
EOF
-if { (eval echo configure:21455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_val_LC_MESSAGES=yes
else
@@ -21478,7 +22572,7 @@ fi
cat > conftest.$ac_ext <<EOF
-#line 21482 "configure"
+#line 22576 "configure"
#include "confdefs.h"
#include <setjmp.h>
@@ -21487,7 +22581,7 @@ int main() {
sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1);
; return 0; }
EOF
-if { (eval echo configure:21491: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:22585: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_SIGSETJMP 1
@@ -21500,21 +22594,21 @@ else
fi
rm -f conftest*
- for ac_hdr in stdlib.h unistd.h sys/stat.h sys/types.h
+ for ac_hdr in unistd.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:21508: checking for $ac_hdr" >&5
+echo "configure:22602: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21513 "configure"
+#line 22607 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:21518: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:22612: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -21543,12 +22637,12 @@ done
for ac_func in getpagesize
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21547: checking for $ac_func" >&5
+echo "configure:22641: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21552 "configure"
+#line 22646 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21571,7 +22665,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22669: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21596,7 +22690,7 @@ fi
done
echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:21600: checking for working mmap" >&5
+echo "configure:22694: checking for working mmap" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -21604,7 +22698,7 @@ else
ac_cv_func_mmap_fixed_mapped=no
else
cat > conftest.$ac_ext <<EOF
-#line 21608 "configure"
+#line 22702 "configure"
#include "confdefs.h"
/* Thanks to Mike Haertel and Jim Avera for this test.
@@ -21632,24 +22726,11 @@ else
#include <fcntl.h>
#include <sys/mman.h>
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-
-#if HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
/* This mess was copied from the GNU getpagesize.h. */
#ifndef HAVE_GETPAGESIZE
+# ifdef HAVE_UNISTD_H
+# include <unistd.h>
+# endif
/* Assume that all systems that can run configure have sys/param.h. */
# ifndef HAVE_SYS_PARAM_H
@@ -21757,7 +22838,7 @@ main()
}
EOF
-if { (eval echo configure:21761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:22842: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_fixed_mapped=yes
else
@@ -21788,17 +22869,17 @@ fi
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:21792: checking for $ac_hdr" >&5
+echo "configure:22873: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21797 "configure"
+#line 22878 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:21802: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:22883: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -21831,7 +22912,7 @@ done
# Can't do these in a loop, else the resulting syntax is wrong.
cat > conftest.$ac_ext <<EOF
-#line 21835 "configure"
+#line 22916 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@@ -21841,7 +22922,7 @@ int main() {
int f = RLIMIT_DATA ;
; return 0; }
EOF
-if { (eval echo configure:21845: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:22926: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_mresult=1
else
@@ -21858,7 +22939,7 @@ EOF
cat > conftest.$ac_ext <<EOF
-#line 21862 "configure"
+#line 22943 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@@ -21868,7 +22949,7 @@ int main() {
int f = RLIMIT_RSS ;
; return 0; }
EOF
-if { (eval echo configure:21872: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:22953: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_mresult=1
else
@@ -21885,7 +22966,7 @@ EOF
cat > conftest.$ac_ext <<EOF
-#line 21889 "configure"
+#line 22970 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@@ -21895,7 +22976,7 @@ int main() {
int f = RLIMIT_VMEM ;
; return 0; }
EOF
-if { (eval echo configure:21899: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:22980: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_mresult=1
else
@@ -21912,7 +22993,7 @@ EOF
cat > conftest.$ac_ext <<EOF
-#line 21916 "configure"
+#line 22997 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@@ -21922,7 +23003,7 @@ int main() {
int f = RLIMIT_AS ;
; return 0; }
EOF
-if { (eval echo configure:21926: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:23007: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_mresult=1
else
@@ -21944,7 +23025,7 @@ EOF
else
cat > conftest.$ac_ext <<EOF
-#line 21948 "configure"
+#line 23029 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@@ -21954,7 +23035,7 @@ int main() {
struct rlimit r; setrlimit(0, &r);
; return 0; }
EOF
-if { (eval echo configure:21958: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:23039: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_setrlimit=yes
else
@@ -21970,7 +23051,7 @@ fi
fi
echo $ac_n "checking for testsuite memory limit support""... $ac_c" 1>&6
-echo "configure:21974: checking for testsuite memory limit support" >&5
+echo "configure:23055: checking for testsuite memory limit support" >&5
if test $setrlimit_have_headers = yes && test $ac_setrlimit = yes; then
ac_mem_limits=yes
cat >> confdefs.h <<\EOF
@@ -21986,7 +23067,7 @@ EOF
# Look for setenv, so that extended locale tests can be performed.
echo $ac_n "checking for setenv declaration""... $ac_c" 1>&6
-echo "configure:21990: checking for setenv declaration" >&5
+echo "configure:23071: checking for setenv declaration" >&5
if test x${glibcpp_cv_func_setenv_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_setenv_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -22001,14 +23082,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 22005 "configure"
+#line 23086 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
setenv(0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:22012: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:23093: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_setenv_use=yes
else
@@ -22034,12 +23115,12 @@ fi
for ac_func in setenv
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:22038: checking for $ac_func" >&5
+echo "configure:23119: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 22043 "configure"
+#line 23124 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -22062,7 +23143,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:22066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:23147: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -22133,18 +23214,18 @@ fi
# Check to see if libgcc_s exists, indicating that shared libgcc is possible.
if test $enable_symvers != no; then
echo $ac_n "checking for shared libgcc""... $ac_c" 1>&6
-echo "configure:22137: checking for shared libgcc" >&5
+echo "configure:23218: checking for shared libgcc" >&5
ac_save_CFLAGS="$CFLAGS"
CFLAGS=' -lgcc_s'
cat > conftest.$ac_ext <<EOF
-#line 22141 "configure"
+#line 23222 "configure"
#include "confdefs.h"
int main() {
return 0
; return 0; }
EOF
-if { (eval echo configure:22148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:23229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_shared_libgcc=yes
else
@@ -22179,14 +23260,14 @@ if test $enable_symvers = yes ; then
echo 'FOO { global: f[a-z]o; local: *; };' > conftest.map
cat > conftest.$ac_ext <<EOF
-#line 22183 "configure"
+#line 23264 "configure"
#include "confdefs.h"
int foo;
int main() {
; return 0; }
EOF
-if { (eval echo configure:22190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:23271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
enable_symvers=gnu
else
@@ -22214,6 +23295,10 @@ case $enable_symvers in
;;
gnu)
LINKER_MAP=config/linker-map.gnu
+ cat >> confdefs.h <<\EOF
+#define _GLIBCPP_SYMVER 1
+EOF
+
;;
esac
@@ -22228,7 +23313,7 @@ else
GLIBCPP_BUILD_VERSIONED_SHLIB_FALSE=
fi
echo $ac_n "checking versioning on shared library symbols""... $ac_c" 1>&6
-echo "configure:22232: checking versioning on shared library symbols" >&5
+echo "configure:23317: checking versioning on shared library symbols" >&5
echo "$ac_t""$enable_symvers" 1>&6
@@ -22315,7 +23400,7 @@ glibcpp_prefixdir=${prefix}
# Process the option --with-gxx-include-dir=<path to include-files directory>
echo $ac_n "checking for --with-gxx-include-dir""... $ac_c" 1>&6
-echo "configure:22319: checking for --with-gxx-include-dir" >&5
+echo "configure:23404: checking for --with-gxx-include-dir" >&5
# Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
if test "${with_gxx_include_dir+set}" = set; then
withval="$with_gxx_include_dir"
@@ -22339,7 +23424,7 @@ echo "$ac_t""$gxx_include_dir" 1>&6
# Process the option "--enable-version-specific-runtime-libs"
echo $ac_n "checking for --enable-version-specific-runtime-libs""... $ac_c" 1>&6
-echo "configure:22343: checking for --enable-version-specific-runtime-libs" >&5
+echo "configure:23428: checking for --enable-version-specific-runtime-libs" >&5
# Check whether --enable-version-specific-runtime-libs or --disable-version-specific-runtime-libs was given.
if test "${enable_version_specific_runtime_libs+set}" = set; then
enableval="$enable_version_specific_runtime_libs"
@@ -22385,7 +23470,7 @@ if test x"$glibcpp_toolexecdir" = x"no"; then
fi
echo $ac_n "checking for install location""... $ac_c" 1>&6
-echo "configure:22389: checking for install location" >&5
+echo "configure:23474: checking for install location" >&5
echo "$ac_t""$gxx_include_dir" 1>&6
diff --git a/libstdc++-v3/configure.in b/libstdc++-v3/configure.in
index f73a4c12a82..4be7d9db261 100644
--- a/libstdc++-v3/configure.in
+++ b/libstdc++-v3/configure.in
@@ -102,7 +102,7 @@ if test -n "$with_cross_host" || test x"$build" != x"$host"; then
# GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT
# GLIBCPP_CHECK_MATH_SUPPORT
- case "$target_alias" in
+ case "$target" in
*-linux*)
os_include_dir="os/gnu-linux"
AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
@@ -147,7 +147,7 @@ if test -n "$with_cross_host" || test x"$build" != x"$host"; then
AC_DEFINE(HAVE_COPYSIGNF)
AC_DEFINE(HAVE_FREXPF)
AC_DEFINE(HAVE_HYPOT)
- case "$target_alias" in
+ case "$target" in
*-hpux10*)
AC_DEFINE(HAVE_FINITE)
AC_DEFINE(HAVE_FINITEF)
@@ -186,6 +186,39 @@ if test -n "$with_cross_host" || test x"$build" != x"$host"; then
AC_DEFINE(HAVE_ISNANL)
fi
;;
+ *-freebsd*)
+ # Check for available headers.
+ AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+ machine/endian.h machine/param.h sys/machine.h sys/types.h \
+ fp.h locale.h float.h inttypes.h sys/resource.h sys/stat.h \
+ sys/time.h unistd.h])
+ SECTION_FLAGS='-ffunction-sections -fdata-sections'
+ AC_SUBST(SECTION_FLAGS)
+ GLIBCPP_CHECK_LINKER_FEATURES
+ GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
+ GLIBCPP_CHECK_WCHAR_T_SUPPORT
+ os_include_dir="os/bsd/freebsd"
+ AC_DEFINE(HAVE_LC_MESSAGES)
+ AC_DEFINE(HAVE_DRAND48)
+ AC_DEFINE(HAVE_GETPAGESIZE)
+ AC_DEFINE(HAVE_SETENV)
+ AC_DEFINE(HAVE_SIGSETJMP)
+ AC_DEFINE(HAVE_COPYSIGN)
+ AC_DEFINE(HAVE_COPYSIGNF)
+ AC_DEFINE(HAVE_FINITEF)
+ AC_DEFINE(HAVE_FINITE)
+ AC_DEFINE(HAVE_FREXPF)
+ AC_DEFINE(HAVE_HYPOT)
+ AC_DEFINE(HAVE_HYPOTF)
+ AC_DEFINE(HAVE_ISINF)
+ AC_DEFINE(HAVE_ISNAN)
+ AC_DEFINE(HAVE_ISNANF)
+ if test x"long_double_math_on_this_cpu" = x"yes"; then
+ AC_DEFINE(HAVE_FINITEL)
+ AC_DEFINE(HAVE_ISINFL)
+ AC_DEFINE(HAVE_ISNANL)
+ fi
+ ;;
*-mingw32*)
AC_CHECK_HEADERS([sys/types.h locale.h float.h])
GLIBCPP_CHECK_LINKER_FEATURES
@@ -224,7 +257,7 @@ changequote([,])dnl
;;
esac
- case "$target_alias" in
+ case "$target" in
*-mingw32*)
;;
*-windiss*)
@@ -253,6 +286,34 @@ changequote([,])dnl
AC_DEFINE(HAVE_TANF)
AC_DEFINE(HAVE_TANHF)
;;
+ *-freebsd*)
+ # Must replicate generic section since we don't have strtof or strtold.
+ AC_DEFINE(HAVE_MMAP)
+ AC_DEFINE(HAVE_ACOSF)
+ AC_DEFINE(HAVE_ASINF)
+ AC_DEFINE(HAVE_ATAN2F)
+ AC_DEFINE(HAVE_ATANF)
+ AC_DEFINE(HAVE_CEILF)
+ AC_DEFINE(HAVE_COPYSIGN)
+ AC_DEFINE(HAVE_COPYSIGNF)
+ AC_DEFINE(HAVE_COSF)
+ AC_DEFINE(HAVE_COSHF)
+ AC_DEFINE(HAVE_EXPF)
+ AC_DEFINE(HAVE_FABSF)
+ AC_DEFINE(HAVE_FLOORF)
+ AC_DEFINE(HAVE_FMODF)
+ AC_DEFINE(HAVE_FREXPF)
+ AC_DEFINE(HAVE_LDEXPF)
+ AC_DEFINE(HAVE_LOG10F)
+ AC_DEFINE(HAVE_LOGF)
+ AC_DEFINE(HAVE_MODFF)
+ AC_DEFINE(HAVE_POWF)
+ AC_DEFINE(HAVE_SINF)
+ AC_DEFINE(HAVE_SINHF)
+ AC_DEFINE(HAVE_SQRTF)
+ AC_DEFINE(HAVE_TANF)
+ AC_DEFINE(HAVE_TANHF)
+ ;;
*)
# GLIBCPP_CHECK_STDLIB_SUPPORT
AC_DEFINE(HAVE_STRTOF)
diff --git a/libstdc++-v3/configure.target b/libstdc++-v3/configure.target
index 95b533cab49..dc9c44b6f75 100644
--- a/libstdc++-v3/configure.target
+++ b/libstdc++-v3/configure.target
@@ -138,7 +138,8 @@ case "${target_os}" in
aix*)
ATOMICITYH="cpu/generic"
;;
- bsd* | freebsd* )
+ bsd*)
+ # Plain BSD attempts to share FreeBSD files.
os_include_dir="os/bsd/freebsd"
;;
cygwin*)
@@ -147,6 +148,11 @@ case "${target_os}" in
*djgpp*) # leading * picks up "msdosdjgpp"
os_include_dir="os/djgpp"
;;
+ freebsd*)
+ os_include_dir="os/bsd/freebsd"
+ # The FreeBSD ABI is expressed in the major version number only.
+ abi_baseline_triplet=`echo ${target} | sed 's,\(\.[0-9]*\)*$,,'`
+ ;;
gnu* | linux*)
os_include_dir="os/gnu-linux"
;;
diff --git a/libstdc++-v3/docs/html/17_intro/contribute.html b/libstdc++-v3/docs/html/17_intro/contribute.html
index 1ab24b92fb5..17bc65f4ed0 100644
--- a/libstdc++-v3/docs/html/17_intro/contribute.html
+++ b/libstdc++-v3/docs/html/17_intro/contribute.html
@@ -1,4 +1,9 @@
-<html>
+<?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>
<title>How to contribute</title>
</head>
diff --git a/libstdc++-v3/docs/html/17_intro/howto.html b/libstdc++-v3/docs/html/17_intro/howto.html
index a8cf3976e13..137829df6f8 100644
--- a/libstdc++-v3/docs/html/17_intro/howto.html
+++ b/libstdc++-v3/docs/html/17_intro/howto.html
@@ -1,4 +1,9 @@
-<html>
+<?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" />
<meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
diff --git a/libstdc++-v3/docs/html/17_intro/license.html b/libstdc++-v3/docs/html/17_intro/license.html
index 7db8aa5f240..a0a2c9135ea 100644
--- a/libstdc++-v3/docs/html/17_intro/license.html
+++ b/libstdc++-v3/docs/html/17_intro/license.html
@@ -1,4 +1,9 @@
-<html>
+<?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" />
<meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
diff --git a/libstdc++-v3/docs/html/17_intro/porting.html b/libstdc++-v3/docs/html/17_intro/porting.html
index e791f92dc74..c28f89f407f 100644
--- a/libstdc++-v3/docs/html/17_intro/porting.html
+++ b/libstdc++-v3/docs/html/17_intro/porting.html
@@ -68,12 +68,13 @@ directory. The important information is that there needs to be a
directory under <code>config/os</code> to store the files for your operating
system.
-<p>You'll have to change the <code>configure.target</code> file to ensure that
-your new directory is activated. Look for the switch statement that
-sets <code>os_include_dir</code>, and add a pattern to handle your operating
-system. The switch statement switches on only the OS portion of the
-standard target triplet; e.g., the <code>solaris2.8</code> in
-<code>sparc-sun-solaris2.8</code>.
+<p>You might have to change the <code>configure.target</code> file to ensure that
+your new directory is activated. Look for the switch statement that sets
+<code>os_include_dir</code>, and add a pattern to handle your operating system
+if the default will not suffice. The switch statement switches on only
+the OS portion of the standard target triplet; e.g., the <code>solaris2.8</code>
+in <code>sparc-sun-solaris2.8</code>. If the new directory is named after the
+OS portion of the triplet (the default), then nothing needs to be changed.
<p>The first file to create in this directory, should be called
<code>os_defines.h</code>. This file contains basic macro definitions
diff --git a/libstdc++-v3/docs/html/17_intro/porting.texi b/libstdc++-v3/docs/html/17_intro/porting.texi
index 142a354a032..6c6ec1f7f48 100644
--- a/libstdc++-v3/docs/html/17_intro/porting.texi
+++ b/libstdc++-v3/docs/html/17_intro/porting.texi
@@ -102,12 +102,13 @@ directory. The important information is that there needs to be a
directory under @file{config/os} to store the files for your operating
system.
-You'll have to change the @file{configure.target} file to ensure that
-your new directory is activated. Look for the switch statement that
-sets @code{os_include_dir}, and add a pattern to handle your operating
-system. The switch statement switches on only the OS portion of the
-standard target triplet; e.g., the @code{solaris2.8} in
-@code{sparc-sun-solaris2.8}.
+You might have to change the @file{configure.target} file to ensure that
+your new directory is activated. Look for the switch statement that sets
+@code{os_include_dir}, and add a pattern to handle your operating system
+if the default will not suffice. The switch statement switches on only
+the OS portion of the standard target triplet; e.g., the @code{solaris2.8}
+in @code{sparc-sun-solaris2.8}. If the new directory is named after the
+OS portion of the triplet (the default), then nothing needs to be changed.
The first file to create in this directory, should be called
@file{os_defines.h}. This file contains basic macro definitions
diff --git a/libstdc++-v3/docs/html/18_support/howto.html b/libstdc++-v3/docs/html/18_support/howto.html
index c055f999bdc..c95f956a370 100644
--- a/libstdc++-v3/docs/html/18_support/howto.html
+++ b/libstdc++-v3/docs/html/18_support/howto.html
@@ -1,4 +1,9 @@
-<html>
+<?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" />
<meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
diff --git a/libstdc++-v3/docs/html/19_diagnostics/howto.html b/libstdc++-v3/docs/html/19_diagnostics/howto.html
index 07585bb8347..d1d759d5a43 100644
--- a/libstdc++-v3/docs/html/19_diagnostics/howto.html
+++ b/libstdc++-v3/docs/html/19_diagnostics/howto.html
@@ -1,4 +1,9 @@
-<html>
+<?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" />
<meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
diff --git a/libstdc++-v3/docs/html/20_util/howto.html b/libstdc++-v3/docs/html/20_util/howto.html
index 7b7485ed837..28021d20635 100644
--- a/libstdc++-v3/docs/html/20_util/howto.html
+++ b/libstdc++-v3/docs/html/20_util/howto.html
@@ -1,4 +1,9 @@
-<html>
+<?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" />
<meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
diff --git a/libstdc++-v3/docs/html/21_strings/howto.html b/libstdc++-v3/docs/html/21_strings/howto.html
index e49a166c0c5..cba9c3f21d4 100644
--- a/libstdc++-v3/docs/html/21_strings/howto.html
+++ b/libstdc++-v3/docs/html/21_strings/howto.html
@@ -1,4 +1,9 @@
-<html>
+<?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" />
<meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
@@ -335,15 +340,78 @@
<hr />
<h2><a name="5">Making strings of arbitrary character types</a></h2>
- <p>how to work with char_traits -- in the archives, just need to
- go through and pull the examples together
+ <p>The <code>std::basic_string</code> is tantalizingly general, in that
+ it is parameterized on the type of the characters which it holds.
+ In theory, you could whip up a Unicode character class and instantiate
+ <code>std::basic_string&lt;my_unicode_char&gt;</code>, or assuming
+ that integers are wider than characters on your platform, maybe just
+ declare variables of type <code>std::basic_string&lt;int&gt;</code>.
+ </p>
+ <p>That's the theory. Remember however that basic_string has additional
+ type parameters, which take default arguments based on the character
+ type (called CharT here):
+ </p>
+ <pre>
+ template &lt;typename CharT,
+ typename Traits = char_traits&lt;CharT&gt;,
+ typename Alloc = allocator&lt;CharT&gt; &gt;
+ class basic_string { .... };</pre>
+ <p>Now, <code>allocator&lt;CharT&gt;</code> will probably Do The Right
+ Thing by default, unless you need to implement your own allocator
+ for your characters.
+ </p>
+ <p>But <code>char_traits</code> takes more work. The char_traits
+ template is <em>declared</em> but not <em>defined</em>.
+ That means there is only
+ </p>
+ <pre>
+ template &lt;typename CharT&gt;
+ struct char_traits
+ {
+ static void foo (type1 x, type2 y);
+ ...
+ };</pre>
+ <p>and functions such as char_traits&lt;CharT&gt;::foo() are not
+ actually defined anywhere for the general case. The C++ standard
+ permits this, because writing such a definition to fit all possible
+ CharT's cannot be done. (For a time, in earlier versions of GCC,
+ there was a mostly-correct implementation that let programmers be
+ lazy. :-) But it broke under many situations, so it was removed.
+ You are no longer allowed to be lazy and non-portable.)
+ </p>
+ <p>The C++ standard also requires that char_traits be specialized for
+ instantiations of <code>char</code> and <code>wchar_t</code>, and it
+ is these template specializations that permit entities like
+ <code>basic_string&lt;char,char_traits&lt;char&gt;&gt;</code> to work.
+ </p>
+ <p>If you want to use character types other than char and wchar_t,
+ such as <code>unsigned char</code> and <code>int</code>, you will
+ need to write specializations for them at the present time. If you
+ want to use your own special character class, then you have
+ <a href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00163.html">a lot
+ of work to do</a>, especially if you with to use i18n features
+ (facets require traits information but don't have a traits argument).
+ </p>
+ <p>One example of how to specialize char_traits is given
+ <a href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00260.html">in
+ this message</a>. We agree that the way it's used with basic_string
+ (scroll down to main()) doesn't look nice, but that's because
+ <a href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00236.html">the
+ nice-looking first attempt</a> turned out to
+ <a href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00242.html">not
+ be conforming C++</a>, due to the rule that CharT must be a POD.
+ (See how tricky this is?)
+ </p>
+ <p>Other approaches were suggested in that same thread, such as providing
+ more specializations and/or some helper types in the library to assist
+ users writing such code. So far nobody has had the time...
+ <a href="../17_intro/contribute.html">do you?</a>
</p>
<p>Return <a href="#top">to top of page</a> or
<a href="../faq/index.html">to the FAQ</a>.
</p>
-
<!-- ####################################################### -->
<hr />
diff --git a/libstdc++-v3/docs/html/22_locale/codecvt.html b/libstdc++-v3/docs/html/22_locale/codecvt.html
index 64f3856d479..6acd416fc07 100644
--- a/libstdc++-v3/docs/html/22_locale/codecvt.html
+++ b/libstdc++-v3/docs/html/22_locale/codecvt.html
@@ -1,4 +1,9 @@
-<html>
+<?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" />
<meta name="AUTHOR" content="bkoz@redhat.com (Benjamin Kosnik)" />
diff --git a/libstdc++-v3/docs/html/22_locale/ctype.html b/libstdc++-v3/docs/html/22_locale/ctype.html
index 886f83d0739..3043123f041 100644
--- a/libstdc++-v3/docs/html/22_locale/ctype.html
+++ b/libstdc++-v3/docs/html/22_locale/ctype.html
@@ -1,4 +1,9 @@
-<html>
+<?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" />
<meta name="AUTHOR" content="bkoz@redhat.com (Benjamin Kosnik)" />
diff --git a/libstdc++-v3/docs/html/22_locale/howto.html b/libstdc++-v3/docs/html/22_locale/howto.html
index 106662753d9..bd2526ddb4c 100644
--- a/libstdc++-v3/docs/html/22_locale/howto.html
+++ b/libstdc++-v3/docs/html/22_locale/howto.html
@@ -1,4 +1,9 @@
-<html>
+<?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" />
<meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
diff --git a/libstdc++-v3/docs/html/22_locale/locale.html b/libstdc++-v3/docs/html/22_locale/locale.html
index 999e82ed0bd..6816204df8f 100644
--- a/libstdc++-v3/docs/html/22_locale/locale.html
+++ b/libstdc++-v3/docs/html/22_locale/locale.html
@@ -1,8 +1,12 @@
-<html>
+<?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">
+
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="AUTHOR" content="bkoz@redhat.com (Benjamin Kosnik)" />
- <meta name="KEYWORDS" content="HOWTO, libstdc++, GCC, g++, libg++, STL" />
+ <meta name="KEYWORDS" content="HOWTO, libstdc++, locale name LC_ALL" />
<meta name="DESCRIPTION" content="Notes on the locale implementation." />
<title>Notes on the locale implementation.</title>
<link rel="StyleSheet" href="../lib3styles.css" />
@@ -12,79 +16,459 @@
Notes on the locale implementation.
</h1>
<em>
-prepared by Benjamin Kosnik (bkoz@redhat.com) on August 8, 2001
+prepared by Benjamin Kosnik (bkoz@redhat.com) on October 14, 2002
</em>
<h2>
-1. Abstract Describes the basic locale object, including nested
-classes id, facet, and the reference-counted implementation object,
-class _Impl.
+1. Abstract
</h2>
<p>
+Describes the basic locale object, including nested
+classes id, facet, and the reference-counted implementation object,
+class _Impl.
</p>
<h2>
2. What the standard says
</h2>
-See Chapter 22 of the standard.
+Class locale is non-templatized and has two distinct types nested
+inside of it:
+
+<blockquote>
+<em>
+class facet
+22.1.1.1.2 Class locale::facet
+</em>
+</blockquote>
+
+<p>
+Facets actually implement locale functionality. For instance, a facet
+called numpunct is the data objects that can be used to query for the
+thousands separator is in the German locale.
+</p>
+
+Literally, a facet is strictly defined:
+<ul>
+ <li>containing the following public data member:
+ <p>
+ <code>static locale::id id;</code>
+ </p>
+ </li>
+
+ <li>derived from another facet:
+ <p>
+ <code> class gnu_codecvt: public std::ctype&lt;user-defined-type&gt;</code>
+ </p>
+ </li>
+</ul>
+
+<p>
+Of interest in this class are the memory management options explicitly
+specified as an argument to facet's constructor. Each constructor of a
+facet class takes a std::size_t __refs argument: if __refs == 0, the
+facet is deleted when the locale containing it is destroyed. If __refs
+== 1, the facet is not destroyed, even when it is no longer
+referenced.
+</p>
+
+<blockquote>
+<em>
+class id
+22.1.1.1.3 - Class locale::id
+</em>
+</blockquote>
+
+<p>
+Provides an index for looking up specific facets.
+<p>
<h2>
-3. Problems with &quot;C&quot; locales : global locales, termination.
+3. Interacting with &quot;C&quot; locales.
</h2>
<p>
-The major problem is fitting an object-orientated and non-global locale
-design ontop of POSIX and other relevant stanards, which include the
-Single Unix (nee X/Open.)
+Some help on determining the underlying support for locales on a system.
+Note, this is specific to linux (and glibc-2.3.x)
+</p>
-Because POSIX falls down so completely, portibility is an issue.
+<ul>
+ <li> <code>`locale -a`</code> displays available locales.
+<blockquote>
+<pre>
+af_ZA
+ar_AE
+ar_AE.utf8
+ar_BH
+ar_BH.utf8
+ar_DZ
+ar_DZ.utf8
+ar_EG
+ar_EG.utf8
+ar_IN
+ar_IQ
+ar_IQ.utf8
+ar_JO
+ar_JO.utf8
+ar_KW
+ar_KW.utf8
+ar_LB
+ar_LB.utf8
+ar_LY
+ar_LY.utf8
+ar_MA
+ar_MA.utf8
+ar_OM
+ar_OM.utf8
+ar_QA
+ar_QA.utf8
+ar_SA
+ar_SA.utf8
+ar_SD
+ar_SD.utf8
+ar_SY
+ar_SY.utf8
+ar_TN
+ar_TN.utf8
+ar_YE
+ar_YE.utf8
+be_BY
+be_BY.utf8
+bg_BG
+bg_BG.utf8
+br_FR
+bs_BA
+C
+ca_ES
+ca_ES@euro
+ca_ES.utf8
+ca_ES.utf8@euro
+cs_CZ
+cs_CZ.utf8
+cy_GB
+da_DK
+da_DK.iso885915
+da_DK.utf8
+de_AT
+de_AT@euro
+de_AT.utf8
+de_AT.utf8@euro
+de_BE
+de_BE@euro
+de_BE.utf8
+de_BE.utf8@euro
+de_CH
+de_CH.utf8
+de_DE
+de_DE@euro
+de_DE.utf8
+de_DE.utf8@euro
+de_LU
+de_LU@euro
+de_LU.utf8
+de_LU.utf8@euro
+el_GR
+el_GR.utf8
+en_AU
+en_AU.utf8
+en_BW
+en_BW.utf8
+en_CA
+en_CA.utf8
+en_DK
+en_DK.utf8
+en_GB
+en_GB.iso885915
+en_GB.utf8
+en_HK
+en_HK.utf8
+en_IE
+en_IE@euro
+en_IE.utf8
+en_IE.utf8@euro
+en_IN
+en_NZ
+en_NZ.utf8
+en_PH
+en_PH.utf8
+en_SG
+en_SG.utf8
+en_US
+en_US.iso885915
+en_US.utf8
+en_ZA
+en_ZA.utf8
+en_ZW
+en_ZW.utf8
+es_AR
+es_AR.utf8
+es_BO
+es_BO.utf8
+es_CL
+es_CL.utf8
+es_CO
+es_CO.utf8
+es_CR
+es_CR.utf8
+es_DO
+es_DO.utf8
+es_EC
+es_EC.utf8
+es_ES
+es_ES@euro
+es_ES.utf8
+es_ES.utf8@euro
+es_GT
+es_GT.utf8
+es_HN
+es_HN.utf8
+es_MX
+es_MX.utf8
+es_NI
+es_NI.utf8
+es_PA
+es_PA.utf8
+es_PE
+es_PE.utf8
+es_PR
+es_PR.utf8
+es_PY
+es_PY.utf8
+es_SV
+es_SV.utf8
+es_US
+es_US.utf8
+es_UY
+es_UY.utf8
+es_VE
+es_VE.utf8
+et_EE
+et_EE.utf8
+eu_ES
+eu_ES@euro
+eu_ES.utf8
+eu_ES.utf8@euro
+fa_IR
+fi_FI
+fi_FI@euro
+fi_FI.utf8
+fi_FI.utf8@euro
+fo_FO
+fo_FO.utf8
+fr_BE
+fr_BE@euro
+fr_BE.utf8
+fr_BE.utf8@euro
+fr_CA
+fr_CA.utf8
+fr_CH
+fr_CH.utf8
+fr_FR
+fr_FR@euro
+fr_FR.utf8
+fr_FR.utf8@euro
+fr_LU
+fr_LU@euro
+fr_LU.utf8
+fr_LU.utf8@euro
+ga_IE
+ga_IE@euro
+ga_IE.utf8
+ga_IE.utf8@euro
+gl_ES
+gl_ES@euro
+gl_ES.utf8
+gl_ES.utf8@euro
+gv_GB
+gv_GB.utf8
+he_IL
+he_IL.utf8
+hi_IN
+hr_HR
+hr_HR.utf8
+hu_HU
+hu_HU.utf8
+id_ID
+id_ID.utf8
+is_IS
+is_IS.utf8
+it_CH
+it_CH.utf8
+it_IT
+it_IT@euro
+it_IT.utf8
+it_IT.utf8@euro
+iw_IL
+iw_IL.utf8
+ja_JP.eucjp
+ja_JP.utf8
+ka_GE
+kl_GL
+kl_GL.utf8
+ko_KR.euckr
+ko_KR.utf8
+kw_GB
+kw_GB.utf8
+lt_LT
+lt_LT.utf8
+lv_LV
+lv_LV.utf8
+mi_NZ
+mk_MK
+mk_MK.utf8
+mr_IN
+ms_MY
+ms_MY.utf8
+mt_MT
+mt_MT.utf8
+nl_BE
+nl_BE@euro
+nl_BE.utf8
+nl_BE.utf8@euro
+nl_NL
+nl_NL@euro
+nl_NL.utf8
+nl_NL.utf8@euro
+nn_NO
+nn_NO.utf8
+no_NO
+no_NO.utf8
+oc_FR
+pl_PL
+pl_PL.utf8
+POSIX
+pt_BR
+pt_BR.utf8
+pt_PT
+pt_PT@euro
+pt_PT.utf8
+pt_PT.utf8@euro
+ro_RO
+ro_RO.utf8
+ru_RU
+ru_RU.koi8r
+ru_RU.utf8
+ru_UA
+ru_UA.utf8
+se_NO
+sk_SK
+sk_SK.utf8
+sl_SI
+sl_SI.utf8
+sq_AL
+sq_AL.utf8
+sr_YU
+sr_YU@cyrillic
+sr_YU.utf8
+sr_YU.utf8@cyrillic
+sv_FI
+sv_FI@euro
+sv_FI.utf8
+sv_FI.utf8@euro
+sv_SE
+sv_SE.iso885915
+sv_SE.utf8
+ta_IN
+te_IN
+tg_TJ
+th_TH
+th_TH.utf8
+tl_PH
+tr_TR
+tr_TR.utf8
+uk_UA
+uk_UA.utf8
+ur_PK
+uz_UZ
+vi_VN
+vi_VN.tcvn
+wa_BE
+wa_BE@euro
+yi_US
+zh_CN
+zh_CN.gb18030
+zh_CN.gbk
+zh_CN.utf8
+zh_HK
+zh_HK.utf8
+zh_TW
+zh_TW.euctw
+zh_TW.utf8
+</pre>
+</blockquote>
+</li>
+
+ <li> <code>`locale`</code> displays environmental variables
+ that impact how locale("") will be deduced.
+
+<blockquote>
+<pre>
+LANG=en_US
+LC_CTYPE="en_US"
+LC_NUMERIC="en_US"
+LC_TIME="en_US"
+LC_COLLATE="en_US"
+LC_MONETARY="en_US"
+LC_MESSAGES="en_US"
+LC_PAPER="en_US"
+LC_NAME="en_US"
+LC_ADDRESS="en_US"
+LC_TELEPHONE="en_US"
+LC_MEASUREMENT="en_US"
+LC_IDENTIFICATION="en_US"
+LC_ALL=
+</pre>
+</blockquote>
+</li>
+</ul>
+
+<p>
+From Josuttis, p. 697-698, which says, that "there is only *one*
+relation (of the C++ locale mechanism) to the C locale mechanism: the
+global C locale is modified if a named C++ locale object is set as the
+global locale" (emphasis Paolo), that is:
</p>
+ <code>std::locale::global(std::locale(""));</code>
-<h2>
-4. Design
-</h2>
-Class locale in non-templatized and has three distinct types nested
-inside of it:
+<p>affects the C functions as if the following call was made:</p>
-class facet
-22.1.1.1.2 Class locale::facet
+ <code>std::setlocale(LC_ALL, "");</code>
-Facets actually implement locale functionality. For instance, a facet
-called numpunct is the data objects that can be used to query for the
-thousands separator is in the German locale.
+<p>
+On the other hand, there is *no* viceversa, that is, calling setlocale
+has *no* whatsoever on the C++ locale mechanism, in particular on the
+working of locale(""), which constructs the locale object from the
+environment of the running program, that is, in practice, the set of
+LC_ALL, LANG, etc. variable of the shell.
+</p>
-Literally, a facet is strictly defined:
- - containing
-public:
- static locale::id id;
-- or derived from another facet
+<h2>
+4. Design
+</h2>
-The only other thing of interest in this class is the memory
-management of facets. Each constructor of a facet class takes a
-std::size_t __refs argument: if __refs == 0, the facet is deleted when
-no longer used. if __refs == 1, the facet is not destroyed, even when
-it is no longer reference.
+<p>
+The major design challenge is fitting an object-orientated and
+non-global locale design ontop of POSIX and other relevant stanards,
+which include the Single Unix (nee X/Open.)
+</p>
-class id
-Provides an index for looking up specific facets.
+<p>
+Because POSIX falls down so completely, portibility is an issue.
+</p>
class _Impl
+The internal representation of the std::locale object.
+
<h2>
5. Examples
</h2>
-<pre>
- typedef __locale_t locale;
-</pre>
-
More information can be found in the following testcases:
<ul>
-<li> testsuite/22_locale/ctype_char_members.cc </li>
-<li> testsuite/22_locale/ctype_wchar_t_members.cc </li>
+<li> testsuite/22_locale/all </li>
</ul>
<h2>
@@ -92,8 +476,6 @@ More information can be found in the following testcases:
</h2>
<ul>
- <li> locale -a displays available locales on linux </li>
-
<li> locale initialization: at what point does _S_classic,
_S_global get initialized? Can named locales assume this
initialization has already taken place? </li>
diff --git a/libstdc++-v3/docs/html/22_locale/messages.html b/libstdc++-v3/docs/html/22_locale/messages.html
index 7497590bd88..68d387612ff 100644
--- a/libstdc++-v3/docs/html/22_locale/messages.html
+++ b/libstdc++-v3/docs/html/22_locale/messages.html
@@ -1,4 +1,8 @@
-<html>
+<?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">
+
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="AUTHOR" content="bkoz@redhat.com (Benjamin Kosnik)" />
diff --git a/libstdc++-v3/docs/html/23_containers/howto.html b/libstdc++-v3/docs/html/23_containers/howto.html
index 1c1e137b67c..008017a8827 100644
--- a/libstdc++-v3/docs/html/23_containers/howto.html
+++ b/libstdc++-v3/docs/html/23_containers/howto.html
@@ -1,4 +1,8 @@
-<html>
+<?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">
+
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
@@ -247,41 +251,11 @@
solution would probably be more trouble than it's worth.
</p>
<p>The STL implementation is currently configured to use the
- high-speed caching memory allocator. If you absolutely think
- you must change this on a global basis for your platform to better
- support multi-threading, then please consult all commentary in
- include/bits/stl_alloc.h and the allocators link below.
+ high-speed caching memory allocator. Some people like to
+ test and/or normally run threaded programs with a different
+ default. For all details about how to globally override this
+ at application run-time see <a href="../ext/howto.html#3">here</a>.
</p>
- <blockquote>
- <p>(Explicit warning since so many people get confused while
- attempting this:)
- </p>
- <p><strong>Adding -D__USE_MALLOC on the command
- line is almost certainly a bad idea.</strong> Memory efficiency is
- almost guaranteed to suffer as a result; this is
- <a href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00136.html">why
- we disabled it for 3.0 in the first place</a>.
- </p>
- <p>Related to threading or otherwise, the current recommendation is
- that users not add any macro defines on the command line to remove or
- otherwise disable features of libstdc++-v3. There is
- no condition under which it will help you without causing other
- issues to perhaps raise up (possible linkage/ABI problems). In
- particular, __USE_MALLOC should only be added to a libstdc++-v3
- configuration file, include/bits/c++config (where such user
- action is cautioned against), and the entire library should be
- rebuilt. If you do not, then you might be violating the
- one-definition rule of C/C++ and you might cause yourself untold
- problems.
- </p>
- </blockquote>
- <p>If you find any platform where gcc reports a
- threading model other than single, and where libstdc++-v3 builds
- a buggy container allocator when used with threads unless you
- define __USE_MALLOC, we want to hear about it ASAP. In the
- past, correctness was the main reason people were led to believe
- that they should define __USE_MALLOC when using threads.
- </p>
<p>There is a better way (not standardized yet): It is possible to
force the malloc-based allocator on a per-case-basis for some
application code. The library team generally believes that this
diff --git a/libstdc++-v3/docs/html/24_iterators/howto.html b/libstdc++-v3/docs/html/24_iterators/howto.html
index 4d48cffdcbd..d8df4420444 100644
--- a/libstdc++-v3/docs/html/24_iterators/howto.html
+++ b/libstdc++-v3/docs/html/24_iterators/howto.html
@@ -1,4 +1,8 @@
-<html>
+<?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">
+
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
diff --git a/libstdc++-v3/docs/html/25_algorithms/howto.html b/libstdc++-v3/docs/html/25_algorithms/howto.html
index 65403ca8159..19c362454c1 100644
--- a/libstdc++-v3/docs/html/25_algorithms/howto.html
+++ b/libstdc++-v3/docs/html/25_algorithms/howto.html
@@ -1,4 +1,8 @@
-<html>
+<?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">
+
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
diff --git a/libstdc++-v3/docs/html/26_numerics/howto.html b/libstdc++-v3/docs/html/26_numerics/howto.html
index 067f59dd0fd..6074e358291 100644
--- a/libstdc++-v3/docs/html/26_numerics/howto.html
+++ b/libstdc++-v3/docs/html/26_numerics/howto.html
@@ -1,4 +1,8 @@
-<html>
+<?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">
+
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
diff --git a/libstdc++-v3/docs/html/27_io/howto.html b/libstdc++-v3/docs/html/27_io/howto.html
index 94b0e015fba..73187d3f1c2 100644
--- a/libstdc++-v3/docs/html/27_io/howto.html
+++ b/libstdc++-v3/docs/html/27_io/howto.html
@@ -1,4 +1,8 @@
-<html>
+<?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">
+
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
diff --git a/libstdc++-v3/docs/html/abi.txt b/libstdc++-v3/docs/html/abi.txt
index 770c3cf5974..73cb46c9c09 100644
--- a/libstdc++-v3/docs/html/abi.txt
+++ b/libstdc++-v3/docs/html/abi.txt
@@ -1,12 +1,5 @@
-===========================
-
-See http://gcc.gnu.org/ml/libstdc++/2002-07/msg00054.html for why this
-document exists, why it's incomplete, and what needs to be done still.
-
-===========================
-
-2002-09-06 Benjamin Kosnik
+2002-10-14 Benjamin Kosnik
Description of the libstdc++ ABI.
@@ -244,7 +237,7 @@ II. Library ABI changes
The following will cause the library major version number to
increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.4.0.0".
-- any g++ compiler ABI changes
+- (anything) changing in the gcc/g++ compiler ABI
- (anything) changing size of an exported symbol
@@ -256,7 +249,14 @@ increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.4.0.0".
- (anything) deleting an exported symbol
-Note: adding an exported symbol, if it's in a new linker map name, is ok.
+- (anything) changing the size, alignment, or layout of types
+ specified in the C++ standard. These may not necessarily be
+ instantiated or otherwise exported in the library binary, and
+ include all the required locale facets, as well as things like
+ std::basic_streambuf, et al.
+
+Note: adding an exported symbol, if it's in a new and dependent
+interface name, is ok.
The following will cause the library revision version number to
increase, say from "libstdc++.so.5.0.0" to "libstdc++.so.5.0.1".
@@ -331,17 +331,20 @@ addition, all exported names are demangled, and the exported objects
are checked to make sure they are the same size as the same object in
the baseline.
-In the future, more tests should be added. In particular, vtable
-information, offsets of data members in class objects, and other
-layout information should be checked.
+This dataset is insufficient, yet a start. Also needed is a
+comprehensive check for all user-visible types part of the standard
+library for sizeof() and alignof() changes.
-It should be possible to use sizeof, alignof, and offset to compute
+Verifying compatible layouts of objects is not even attempted. It
+should be possible to use sizeof, alignof, and offsetof to compute
offsets for each structure and type in the standard library, saving to
-another datafile. Then, compute this for new binaries, and look for
-differences.
+another datafile. Then, compute this in a similar way for new
+binaries, and look for differences.
Another approach might be to use the -fdump-class-hierarchy flag to
-get information.
+get information. However, currently this approach gives insufficient
+data for use in library testing, as class data members, their offsets,
+and other detailed data is not displayed with this flag.
(See g++/7470 on how this was used to find bugs.)
Perhaps there are other C++ ABI checkers. If so, please notify
diff --git a/libstdc++-v3/docs/html/configopts.html b/libstdc++-v3/docs/html/configopts.html
index 47eb4637fbe..eab9864f330 100644
--- a/libstdc++-v3/docs/html/configopts.html
+++ b/libstdc++-v3/docs/html/configopts.html
@@ -1,4 +1,9 @@
-<html>
+<?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 name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
<meta name="KEYWORDS" content="libstdc++, libstdc++-v3, GCC, g++" />
diff --git a/libstdc++-v3/docs/html/documentation.html b/libstdc++-v3/docs/html/documentation.html
index aba38723747..a4a79e32b54 100644
--- a/libstdc++-v3/docs/html/documentation.html
+++ b/libstdc++-v3/docs/html/documentation.html
@@ -1,4 +1,9 @@
-<html>
+<?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 name="KEYWORDS"
content="libstdc++, homepage, home, C++, library, c++, std, g++, ABI, STL" />
diff --git a/libstdc++-v3/docs/html/explanations.html b/libstdc++-v3/docs/html/explanations.html
index 7d8196ff84a..dac57b87288 100644
--- a/libstdc++-v3/docs/html/explanations.html
+++ b/libstdc++-v3/docs/html/explanations.html
@@ -1,4 +1,9 @@
-<html>
+<?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 name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
<meta name="KEYWORDS" content="libstdc++, libstdc++-v3, GCC, g++" />
diff --git a/libstdc++-v3/docs/html/ext/howto.html b/libstdc++-v3/docs/html/ext/howto.html
index b4f6dae6f14..007335b6569 100644
--- a/libstdc++-v3/docs/html/ext/howto.html
+++ b/libstdc++-v3/docs/html/ext/howto.html
@@ -1,4 +1,8 @@
-<html>
+<?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">
+
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
@@ -276,19 +280,16 @@
same as <code>allocator&lt;T&gt;</code>.
</li>
</ul>
- <p>An internal typedef, <code> __mem_interface </code>, is defined to be
- <code>__new_alloc</code> by default.
- </p>
<p>Normally,
<code> __default_alloc_template&lt;bool thr, int inst&gt; </code>
is also available. This is the high-speed pool, called the default
node allocator. The reusable memory is shared among identical
instantiations of
- this type. It calls through <code>__mem_interface</code> to obtain
+ this type. It calls through <code>__new_alloc</code> to obtain
new memory when its lists run out. If a client container requests a
block larger than a certain threshold size, then the pool is bypassed,
and the allocate/deallocate request is passed to
- <code>__mem_interface</code> directly.
+ <code>__new_alloc</code> directly.
</p>
<p>Its <code>inst</code> parameter is described below. The
<code>thr</code> boolean determines whether the pool should be
@@ -309,17 +310,25 @@
</p>
<h3>A cannon to swat a fly:<code> __USE_MALLOC</code></h3>
<p>If you've already read <a href="../23_containers/howto.html#3">this
- advice</a> and decided to define this macro, then the situation changes
- thusly:
- </p>
- <ol>
- <li><code>__mem_interface</code>, and</li>
- <li><code>__alloc</code>, and</li>
- <li><code>__single_client_alloc</code> are all typedef'd to
- <code>__malloc_alloc_template</code>.</li>
- <li><code>__default_alloc_template</code> is no longer available.
- At all. Anywhere.</li>
- </ol>
+ advice</a> but still think you remember how to use this macro from
+ SGI STL days. We have removed it in gcc 3.3. See next section
+ for the new way to get the same effect.
+ </p>
+ <h3>Globally disabling memory caching:<code> GLIBCPP_FORCE_NEW</code></h3>
+ <p>Starting with gcc 3.3, if you want to globally disable memory
+ caching within the library for the default allocator (i.e.
+ the one you get for all library objects when you do not specify
+ which one to use), merely set GLIBCPP_FORCE_NEW (at this time,
+ with any value) into your environment before running the
+ program. You will obtain a similar effect without having to
+ recompile your entire program and the entire library (the new
+ operator in gcc is a light wrapper around malloc). If your
+ program crashes with GLIBCPP_FORCE_NEW in the environment,
+ it likely means that you linked against objects built against
+ the older library. Code to support this extension is fully
+ compatible with 3.2 code if GLIBCPP_FORCE_NEW is not in the
+ environment.
+ </p>
<h3>Writing your own allocators</h3>
<p>Depending on your application (a specific program, a generic library,
etc), allocator classes tend to be one of two styles: &quot;SGI&quot;
diff --git a/libstdc++-v3/docs/html/ext/sgiexts.html b/libstdc++-v3/docs/html/ext/sgiexts.html
index 2903cd2b8e1..10fed07eb57 100644
--- a/libstdc++-v3/docs/html/ext/sgiexts.html
+++ b/libstdc++-v3/docs/html/ext/sgiexts.html
@@ -1,4 +1,8 @@
-<html>
+<?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">
+
<head>
<meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
<meta name="KEYWORDS" content="libstdc++, libstdc++-v3, GCC, g++, STL, SGI" />
@@ -24,7 +28,8 @@ libstdc++-v3</a></h1>
for a description). Not every chapter may have extensions, and the
extensions may come and go. Also, this page is incomplete because the
author is pressed for time. Check back often; the latest change was on
- $Date: 2002/09/17 22:59:56 $ (UTC).
+
+ $Date: 2002/10/15 01:34:58 $ (UTC).
</p>
<p>Descriptions range from the scanty to the verbose. You should also check
diff --git a/libstdc++-v3/docs/html/faq/index.html b/libstdc++-v3/docs/html/faq/index.html
index 6d42ebc7ecf..c4f4e78a600 100644
--- a/libstdc++-v3/docs/html/faq/index.html
+++ b/libstdc++-v3/docs/html/faq/index.html
@@ -1,4 +1,8 @@
-<html>
+<?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">
+
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="KEYWORDS" content="libstdc++, libstdc++-v3, GCC, g++, libg++, STL" />
diff --git a/libstdc++-v3/docs/html/install.html b/libstdc++-v3/docs/html/install.html
index 20e2a0a366b..58439330200 100644
--- a/libstdc++-v3/docs/html/install.html
+++ b/libstdc++-v3/docs/html/install.html
@@ -1,4 +1,9 @@
-<html>
+<?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 name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
<meta name="KEYWORDS" content="libstdc++, libstdc++-v3, GCC, g++" />
@@ -104,8 +109,8 @@
<p>
If the 'gnu' locale model is being used, the following locales
are used and tested in the libstdc++ testsuites: en_HK, en_US,
- fr_FR, fr_FR@euro, de_DE, de_DE@euro, ja_JP.eucjp, and
- it_IT. Failure to have the underlying "C" library locale
+ fr_FR, fr_FR@euro, de_DE, de_DE@euro, ja_JP.eucjp, es_MX, en_PH,
+ and it_IT. Failure to have the underlying "C" library locale
information installed will mean that C++ named locales for the
above regions will not work: because of this, the libstdc++
testsuite will not pass the named locale tests. If this isn't an
diff --git a/libstdc++-v3/include/backward/alloc.h b/libstdc++-v3/include/backward/alloc.h
index 4344a1d902c..9482e4cfeba 100644
--- a/libstdc++-v3/include/backward/alloc.h
+++ b/libstdc++-v3/include/backward/alloc.h
@@ -53,10 +53,6 @@ using std::__debug_alloc;
using std::__alloc;
using std::__single_client_alloc;
using std::allocator;
-#ifdef __USE_MALLOC
-using std::malloc_alloc;
-#else
using std::__default_alloc_template;
-#endif
#endif
diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index 607fad71880..23246d41c0f 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -34,7 +34,7 @@
#include <bits/os_defines.h>
// The current version of the C++ library in compressed ISO date format.
-#define __GLIBCPP__ 20020930
+#define __GLIBCPP__ 20021020
// This is necessary until GCC supports separate template
// compilation.
@@ -55,6 +55,9 @@
// Use corrected code from the committee library group's issues list.
#define _GLIBCPP_RESOLVE_LIB_DEFECTS 1
+// Hopefully temporary workaround to autoconf/m4 issue with quoting '@'.
+#define _GLIBCPP_AT_AT "@@"
+
// In those parts of the standard C++ library that use a mutex instead
// of a spin-lock, we now unconditionally use GCC's gthr.h mutex
// abstraction layer. All support to directly map to various
@@ -71,13 +74,8 @@
// so, please report any possible issues to libstdc++@gcc.gnu.org .
// Do not define __USE_MALLOC on the command line. Enforce it here:
#ifdef __USE_MALLOC
-#error __USE_MALLOC should only be defined within \
-libstdc++-v3/include/bits/c++config before full recompilation of the library.
+#error __USE_MALLOC should never be defined. Read the release notes.
#endif
-// Define __USE_MALLOC after this point in the file in order to aid debugging
-// or globally change allocation policy. This breaks the ABI, thus
-// completely recompile the library. A patch to better support
-// changing the global allocator policy would be probably be accepted.
// The remainder of the prewritten config is mostly automatic; all the
// user hooks are listed above.
diff --git a/libstdc++-v3/include/bits/locale_facets.h b/libstdc++-v3/include/bits/locale_facets.h
index f99562fac49..660bad3c11a 100644
--- a/libstdc++-v3/include/bits/locale_facets.h
+++ b/libstdc++-v3/include/bits/locale_facets.h
@@ -525,7 +525,7 @@ namespace std
// For use at construction time only.
void
- _M_initialize_numpunct(__c_locale __cloc = _S_c_locale);
+ _M_initialize_numpunct(__c_locale __cloc = NULL);
};
template<typename _CharT>
@@ -875,10 +875,7 @@ namespace std
protected:
virtual
~collate()
- {
- if (_M_c_locale_collate != _S_c_locale)
- _S_destroy_c_locale(_M_c_locale_collate);
- }
+ { _S_destroy_c_locale(_M_c_locale_collate); }
virtual int
do_compare(const _CharT* __lo1, const _CharT* __hi1,
@@ -924,8 +921,7 @@ namespace std
collate_byname(const char* __s, size_t __refs = 0)
: collate<_CharT>(__refs)
{
- if (_M_c_locale_collate != _S_c_locale)
- _S_destroy_c_locale(_M_c_locale_collate);
+ _S_destroy_c_locale(_M_c_locale_collate);
_S_create_c_locale(_M_c_locale_collate, __s);
}
@@ -956,7 +952,7 @@ namespace std
protected:
__c_locale _M_c_locale_timepunct;
- const char* _M_name_timepunct;
+ char* _M_name_timepunct;
const _CharT* _M_date_format;
const _CharT* _M_date_era_format;
const _CharT* _M_time_format;
@@ -1016,13 +1012,21 @@ namespace std
public:
explicit
__timepunct(size_t __refs = 0)
- : locale::facet(__refs), _M_name_timepunct("C")
- { _M_initialize_timepunct(); }
+ : locale::facet(__refs)
+ {
+ _M_name_timepunct = new char[2];
+ strcpy(_M_name_timepunct, "C");
+ _M_initialize_timepunct();
+ }
explicit
__timepunct(__c_locale __cloc, const char* __s, size_t __refs = 0)
- : locale::facet(__refs), _M_name_timepunct(__s)
- { _M_initialize_timepunct(__cloc); }
+ : locale::facet(__refs)
+ {
+ _M_name_timepunct = new char[strlen(__s) + 1];
+ strcpy(_M_name_timepunct, __s);
+ _M_initialize_timepunct(__cloc);
+ }
void
_M_put(_CharT* __s, size_t __maxlen, const _CharT* __format,
@@ -1119,20 +1123,21 @@ namespace std
protected:
virtual
- ~__timepunct();
+ ~__timepunct()
+ {
+ delete [] _M_name_timepunct;
+ _S_destroy_c_locale(_M_c_locale_timepunct);
+ }
// For use at construction time only.
void
- _M_initialize_timepunct(__c_locale __cloc = _S_c_locale);
+ _M_initialize_timepunct(__c_locale __cloc = NULL);
};
template<typename _CharT>
locale::id __timepunct<_CharT>::id;
// Specializations.
- template<>
- __timepunct<char>::~__timepunct();
-
template<>
const char*
__timepunct<char>::_S_timezones[14];
@@ -1146,9 +1151,6 @@ namespace std
__timepunct<char>::_M_put(char*, size_t, const char*, const tm*) const;
#ifdef _GLIBCPP_USE_WCHAR_T
- template<>
- __timepunct<wchar_t>::~__timepunct();
-
template<>
const wchar_t*
__timepunct<wchar_t>::_S_timezones[14];
@@ -1459,7 +1461,7 @@ namespace std
// For use at construction time only.
void
- _M_initialize_moneypunct(__c_locale __cloc = _S_c_locale,
+ _M_initialize_moneypunct(__c_locale __cloc = NULL,
const char* __name = NULL);
};
@@ -1628,7 +1630,7 @@ namespace std
__c_locale _M_c_locale_messages;
#if 1
// Only needed if glibc < 2.3
- const char* _M_name_messages;
+ char* _M_name_messages;
#endif
public:
@@ -1636,15 +1638,20 @@ namespace std
explicit
messages(size_t __refs = 0)
- : locale::facet(__refs), _M_name_messages("C")
- { _M_c_locale_messages = _S_c_locale; }
+ : locale::facet(__refs)
+ {
+ _M_name_messages = new char[2];
+ strcpy(_M_name_messages, "C");
+ _M_c_locale_messages = _S_c_locale;
+ }
// Non-standard.
explicit
- messages(__c_locale __cloc, const char* __name, size_t __refs = 0)
+ messages(__c_locale __cloc, const char* __s, size_t __refs = 0)
: locale::facet(__refs)
{
- _M_name_messages = __name;
+ _M_name_messages = new char[strlen(__s) + 1];
+ strcpy(_M_name_messages, __s);
_M_c_locale_messages = _S_clone_c_locale(__cloc);
}
@@ -1668,8 +1675,8 @@ namespace std
virtual
~messages()
{
- if (_M_c_locale_messages != _S_c_locale)
- _S_destroy_c_locale(_M_c_locale_messages);
+ delete [] _M_name_messages;
+ _S_destroy_c_locale(_M_c_locale_messages);
}
virtual catalog
@@ -1758,9 +1765,10 @@ namespace std
messages_byname(const char* __s, size_t __refs = 0)
: messages<_CharT>(__refs)
{
- _M_name_messages = __s;
- if (_M_c_locale_messages != _S_c_locale)
- _S_destroy_c_locale(_M_c_locale_messages);
+ delete [] _M_name_messages;
+ _M_name_messages = new char[strlen(__s) + 1];
+ strcpy(_M_name_messages, __s);
+ _S_destroy_c_locale(_M_c_locale_messages);
_S_create_c_locale(_M_c_locale_messages, __s);
}
diff --git a/libstdc++-v3/include/bits/localefwd.h b/libstdc++-v3/include/bits/localefwd.h
index b92560f0b52..76279609921 100644
--- a/libstdc++-v3/include/bits/localefwd.h
+++ b/libstdc++-v3/include/bits/localefwd.h
@@ -207,8 +207,8 @@ namespace std
static const category time = 1L << 3;
static const category monetary = 1L << 4;
static const category messages = 1L << 5;
- static const category all = (collate | ctype | monetary |
- numeric | time | messages);
+ static const category all = (ctype | numeric | collate |
+ time | monetary | messages);
// Construct/copy/destroy:
locale() throw();
@@ -267,7 +267,26 @@ namespace std
// Current global reference locale
static _Impl* _S_global;
- static const size_t _S_num_categories = 6;
+ // Number of standard categories. For C++, these categories are
+ // collate, ctype, monetary, numeric, time, and messages. These
+ // directly correspond to ISO C99 macros LC_COLLATE, LC_CTYPE,
+ // LC_MONETARY, LC_NUMERIC, and LC_TIME. In addition, POSIX (IEEE
+ // 1003.1-2001) specifies LC_MESSAGES.
+ static const size_t _S_categories_size = 6;
+
+ // In addition to the standard categories, the underlying
+ // operating system is allowed to define extra LC_*
+ // macros. For GNU systems, the following are also valid:
+ // LC_PAPER, LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT,
+ // and LC_IDENTIFICATION.
+ static const size_t _S_extra_categories_size = _GLIBCPP_NUM_CATEGORIES;
+
+ // Names of underlying locale categories.
+ // NB: locale::global() has to know how to modify all the
+ // underlying categories, not just the ones required by the C++
+ // standard.
+ static const char* _S_categories[_S_categories_size
+ + _S_extra_categories_size];
explicit
locale(_Impl*) throw();
@@ -308,7 +327,9 @@ namespace std
_Atomic_word _M_references;
facet** _M_facets;
size_t _M_facets_size;
- const char* _M_names[_S_num_categories];
+
+ char* _M_names[_S_categories_size
+ + _S_extra_categories_size];
static const locale::id* const _S_id_ctype[];
static const locale::id* const _S_id_numeric[];
static const locale::id* const _S_id_collate[];
@@ -348,8 +369,10 @@ namespace std
_M_check_same_name()
{
bool __ret = true;
- for (size_t i = 0; __ret && i < _S_num_categories - 1; ++i)
- __ret &= (strcmp(_M_names[i], _M_names[i + 1]) == 0);
+ for (size_t __i = 0;
+ __ret && __i < _S_categories_size + _S_extra_categories_size - 1;
+ ++__i)
+ __ret &= (strcmp(_M_names[__i], _M_names[__i + 1]) == 0);
return __ret;
}
@@ -376,8 +399,14 @@ namespace std
{
_M_impl = new _Impl(*__other._M_impl, 1);
_M_impl->_M_install_facet(&_Facet::id, __f);
- for (size_t __i = 0; __i < _S_num_categories; ++__i)
- _M_impl->_M_names[__i] = "*";
+ for (size_t __i = 0;
+ __i < _S_categories_size + _S_extra_categories_size; ++__i)
+ {
+ delete [] _M_impl->_M_names[__i];
+ char* __new = new char[2];
+ strcpy(__new, "*");
+ _M_impl->_M_names[__i] = __new;
+ }
}
// 22.1.1.1.2 Class locale::facet
diff --git a/libstdc++-v3/include/bits/stl_alloc.h b/libstdc++-v3/include/bits/stl_alloc.h
index c3b4b19b176..fceed498df6 100644
--- a/libstdc++-v3/include/bits/stl_alloc.h
+++ b/libstdc++-v3/include/bits/stl_alloc.h
@@ -89,6 +89,8 @@
#include <bits/functexcept.h> // For __throw_bad_alloc
#include <bits/stl_threads.h>
+#include <bits/atomicity.h>
+
namespace std
{
/**
@@ -210,14 +212,8 @@ namespace std
}
#endif
-
- // Determines the underlying allocator choice for the node allocator.
-#ifdef __USE_MALLOC
- typedef __malloc_alloc_template<0> __mem_interface;
-#else
+ // Should not be referenced within the library anymore.
typedef __new_alloc __mem_interface;
-#endif
-
/**
* @if maint
@@ -307,23 +303,16 @@ namespace std
};
-#ifdef __USE_MALLOC
-
- typedef __mem_interface __alloc;
- typedef __mem_interface __single_client_alloc;
-
-#else
-
-
/**
* @if maint
- * Default node allocator. "SGI" style. Uses __mem_interface for its
- * underlying requests (and makes as few requests as possible).
- * **** Currently __mem_interface is always __new_alloc, never __malloc*.
+ * Default node allocator. "SGI" style. Uses various allocators to
+ * fulfill underlying requests (and makes as few requests as possible
+ * when in default high-speed pool mode).
*
* Important implementation properties:
+ * 0. If globally mandated, then allocate objects from __new_alloc
* 1. If the clients request an object of size > _MAX_BYTES, the resulting
- * object will be obtained directly from the underlying __mem_interface.
+ * object will be obtained directly from __new_alloc
* 2. In all other cases, we allocate an object of size exactly
* _S_round_up(requested_size). Thus the client has enough size
* information that we can return the object to the proper free list
@@ -394,54 +383,69 @@ namespace std
} __attribute__ ((__unused__));
friend struct _Lock;
+ static _Atomic_word _S_force_new;
+
public:
// __n must be > 0
static void*
allocate(size_t __n)
{
- void* __ret = 0;
-
- if (__n > (size_t) _MAX_BYTES)
- __ret = __mem_interface::allocate(__n);
- else
- {
- _Obj* volatile* __my_free_list = _S_free_list
- + _S_freelist_index(__n);
- // Acquire the lock here with a constructor call. This
- // ensures that it is released in exit or during stack
- // unwinding.
- _Lock __lock_instance;
- _Obj* __restrict__ __result = *__my_free_list;
- if (__result == 0)
- __ret = _S_refill(_S_round_up(__n));
- else
- {
- *__my_free_list = __result -> _M_free_list_link;
- __ret = __result;
- }
- }
- return __ret;
- };
+ void* __ret = 0;
+
+ // If there is a race through here, assume answer from getenv
+ // will resolve in same direction. Inspired by techniques
+ // to efficiently support threading found in basic_string.h.
+ if (_S_force_new == 0)
+ {
+ if (getenv("GLIBCPP_FORCE_NEW"))
+ __atomic_add(&_S_force_new, 1);
+ else
+ __atomic_add(&_S_force_new, -1);
+ // Trust but verify...
+ assert (_S_force_new != 0);
+ }
+
+ if ((__n > (size_t) _MAX_BYTES) || (_S_force_new > 0))
+ __ret = __new_alloc::allocate(__n);
+ else
+ {
+ _Obj* volatile* __my_free_list = _S_free_list
+ + _S_freelist_index(__n);
+ // Acquire the lock here with a constructor call. This
+ // ensures that it is released in exit or during stack
+ // unwinding.
+ _Lock __lock_instance;
+ _Obj* __restrict__ __result = *__my_free_list;
+ if (__result == 0)
+ __ret = _S_refill(_S_round_up(__n));
+ else
+ {
+ *__my_free_list = __result -> _M_free_list_link;
+ __ret = __result;
+ }
+ }
+ return __ret;
+ }
// __p may not be 0
static void
deallocate(void* __p, size_t __n)
{
- if (__n > (size_t) _MAX_BYTES)
- __mem_interface::deallocate(__p, __n);
- else
- {
- _Obj* volatile* __my_free_list = _S_free_list
- + _S_freelist_index(__n);
- _Obj* __q = (_Obj*)__p;
-
- // Acquire the lock here with a constructor call. This
- // ensures that it is released in exit or during stack
- // unwinding.
- _Lock __lock_instance;
- __q -> _M_free_list_link = *__my_free_list;
- *__my_free_list = __q;
- }
+ if ((__n > (size_t) _MAX_BYTES) || (_S_force_new > 0))
+ __new_alloc::deallocate(__p, __n);
+ else
+ {
+ _Obj* volatile* __my_free_list = _S_free_list
+ + _S_freelist_index(__n);
+ _Obj* __q = (_Obj*)__p;
+
+ // Acquire the lock here with a constructor call. This
+ // ensures that it is released in exit or during stack
+ // unwinding.
+ _Lock __lock_instance;
+ __q -> _M_free_list_link = *__my_free_list;
+ *__my_free_list = __q;
+ }
}
#ifdef _GLIBCPP_DEPRECATED
@@ -450,6 +454,8 @@ namespace std
#endif
};
+ template<bool __threads, int __inst> _Atomic_word
+ __default_alloc_template<__threads, __inst>::_S_force_new = 0;
template<bool __threads, int __inst>
inline bool
@@ -465,8 +471,8 @@ namespace std
// We allocate memory in large chunks in order to avoid fragmenting the
- // malloc heap (or whatever __mem_interface is using) too much. We assume
- // that __size is properly aligned. We hold the allocation lock.
+ // heap too much. We assume that __size is properly aligned. We hold
+ // the allocation lock.
template<bool __threads, int __inst>
char*
__default_alloc_template<__threads, __inst>::
@@ -503,7 +509,7 @@ namespace std
((_Obj*)_S_start_free) -> _M_free_list_link = *__my_free_list;
*__my_free_list = (_Obj*)_S_start_free;
}
- _S_start_free = (char*) __mem_interface::allocate(__bytes_to_get);
+ _S_start_free = (char*) __new_alloc::allocate(__bytes_to_get);
if (0 == _S_start_free)
{
size_t __i;
@@ -528,7 +534,7 @@ namespace std
}
}
_S_end_free = 0; // In case of exception.
- _S_start_free = (char*)__mem_interface::allocate(__bytes_to_get);
+ _S_start_free = (char*)__new_alloc::allocate(__bytes_to_get);
// This should either throw an exception or remedy the situation.
// Thus we assume it succeeded.
}
@@ -618,7 +624,6 @@ namespace std
typedef __default_alloc_template<true,0> __alloc;
typedef __default_alloc_template<false,0> __single_client_alloc;
-#endif /* ! __USE_MALLOC */
/**
@@ -628,10 +633,6 @@ namespace std
* of stl_alloc.h.)
*
* The underlying allocator behaves as follows.
- * - if __USE_MALLOC then
- * - thread safety depends on malloc and is entirely out of our hands
- * - __malloc_alloc_template is used for memory requests
- * - else (the default)
* - __default_alloc_template is used via two typedefs
* - "__single_client_alloc" typedef does no locking for threads
* - "__alloc" typedef is threadsafe via the locks
@@ -908,7 +909,6 @@ namespace std
typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
};
-#ifndef __USE_MALLOC
template<typename _Tp, bool __threads, int __inst>
struct _Alloc_traits<_Tp, __default_alloc_template<__threads, __inst> >
{
@@ -918,7 +918,6 @@ namespace std
typedef __allocator<_Tp, __default_alloc_template<__threads, __inst> >
allocator_type;
};
-#endif
template<typename _Tp, typename _Alloc>
struct _Alloc_traits<_Tp, __debug_alloc<_Alloc> >
@@ -941,7 +940,6 @@ namespace std
typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
};
-#ifndef __USE_MALLOC
template<typename _Tp, typename _Tp1, bool __thr, int __inst>
struct _Alloc_traits<_Tp, __allocator<_Tp1, __default_alloc_template<__thr, __inst> > >
{
@@ -951,7 +949,6 @@ namespace std
typedef __allocator<_Tp, __default_alloc_template<__thr,__inst> >
allocator_type;
};
-#endif
template<typename _Tp, typename _Tp1, typename _Alloc>
struct _Alloc_traits<_Tp, __allocator<_Tp1, __debug_alloc<_Alloc> > >
@@ -967,11 +964,7 @@ namespace std
// NB: This syntax is a GNU extension.
extern template class allocator<char>;
extern template class allocator<wchar_t>;
-#ifdef __USE_MALLOC
- extern template class __malloc_alloc_template<0>;
-#else
extern template class __default_alloc_template<true,0>;
-#endif
} // namespace std
#endif
diff --git a/libstdc++-v3/include/bits/stl_threads.h b/libstdc++-v3/include/bits/stl_threads.h
index 0150cd58c85..b21ebdd36d6 100644
--- a/libstdc++-v3/include/bits/stl_threads.h
+++ b/libstdc++-v3/include/bits/stl_threads.h
@@ -1,6 +1,6 @@
// Threading support -*- C++ -*-
-// Copyright (C) 2001 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002 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
@@ -126,6 +126,7 @@ namespace std
return __result;
}
#endif
+} //namespace std
// Locking class. Note that this class *does not have a
// constructor*. It must be initialized either statically, with
@@ -141,13 +142,18 @@ namespace std
// functions, and no private or protected members.
#if !defined(__GTHREAD_MUTEX_INIT) && defined(__GTHREAD_MUTEX_INIT_FUNCTION)
+namespace __gnu_cxx
+{
extern __gthread_mutex_t _GLIBCPP_mutex;
extern __gthread_mutex_t *_GLIBCPP_mutex_address;
extern __gthread_once_t _GLIBCPP_once;
extern void _GLIBCPP_mutex_init (void);
extern void _GLIBCPP_mutex_address_init (void);
+}
#endif
+namespace std
+{
struct _STL_mutex_lock
{
// The class must be statically initialized with __STL_MUTEX_INITIALIZER.
@@ -164,22 +170,24 @@ namespace std
// There should be no code in this path given the usage rules above.
#elif defined(__GTHREAD_MUTEX_INIT_FUNCTION)
if (_M_init_flag) return;
- if (__gthread_once (&_GLIBCPP_once, _GLIBCPP_mutex_init) != 0
+ if (__gthread_once (&__gnu_cxx::_GLIBCPP_once,
+ __gnu_cxx::_GLIBCPP_mutex_init) != 0
&& __gthread_active_p ())
abort ();
- __gthread_mutex_lock (&_GLIBCPP_mutex);
+ __gthread_mutex_lock (&__gnu_cxx::_GLIBCPP_mutex);
if (!_M_init_flag)
{
// Even though we have a global lock, we use __gthread_once to be
// absolutely certain the _M_lock mutex is only initialized once on
// multiprocessor systems.
- _GLIBCPP_mutex_address = &_M_lock;
- if (__gthread_once (&_M_once, _GLIBCPP_mutex_address_init) != 0
+ __gnu_cxx::_GLIBCPP_mutex_address = &_M_lock;
+ if (__gthread_once (&_M_once,
+ __gnu_cxx::_GLIBCPP_mutex_address_init) != 0
&& __gthread_active_p ())
abort ();
_M_init_flag = 1;
}
- __gthread_mutex_unlock (&_GLIBCPP_mutex);
+ __gthread_mutex_unlock (&__gnu_cxx::_GLIBCPP_mutex);
#endif
}
diff --git a/libstdc++-v3/include/bits/streambuf.tcc b/libstdc++-v3/include/bits/streambuf.tcc
index 2f790e902cb..2101f10b2ef 100644
--- a/libstdc++-v3/include/bits/streambuf.tcc
+++ b/libstdc++-v3/include/bits/streambuf.tcc
@@ -208,19 +208,28 @@ namespace std
try
{
while (__testput && __bufsize != -1)
- {
- __xtrct = __sbout->sputn(__sbin->gptr(), __bufsize);
- __ret += __xtrct;
- __sbin->_M_in_cur_move(__xtrct);
- if (__xtrct == __bufsize)
+ {
+ if (__bufsize != 0 && __sbin->gptr() != NULL)
{
- if (_Traits::eq_int_type(__sbin->sgetc(), _Traits::eof()))
+ __xtrct = __sbout->sputn(__sbin->gptr(), __bufsize);
+ __ret += __xtrct;
+ __sbin->_M_in_cur_move(__xtrct);
+ if (__xtrct != __bufsize)
break;
- __bufsize = __sbin->in_avail();
}
- else
- break;
- }
+ else
+ {
+ _CharT __buf[256];
+ streamsize __charsread = __sbin->sgetn(__buf, sizeof(__buf));
+ __xtrct = __sbout->sputn(__buf, __charsread);
+ __ret += __xtrct;
+ if (__xtrct != __charsread)
+ break;
+ }
+ if (_Traits::eq_int_type(__sbin->sgetc(), _Traits::eof()))
+ break;
+ __bufsize = __sbin->in_avail();
+ }
}
catch(exception& __fail)
{
diff --git a/libstdc++-v3/src/codecvt.cc b/libstdc++-v3/src/codecvt.cc
index 8d4c1b40c7e..b9575cf70bc 100644
--- a/libstdc++-v3/src/codecvt.cc
+++ b/libstdc++-v3/src/codecvt.cc
@@ -55,10 +55,7 @@ namespace std
codecvt<char, char, mbstate_t>::
~codecvt()
- {
- if (_M_c_locale_codecvt != _S_c_locale)
- _S_destroy_c_locale(_M_c_locale_codecvt);
- }
+ { _S_destroy_c_locale(_M_c_locale_codecvt); }
codecvt_base::result
codecvt<char, char, mbstate_t>::
@@ -123,7 +120,7 @@ namespace std
codecvt<wchar_t, char, mbstate_t>::
codecvt(size_t __refs)
: __codecvt_abstract_base<wchar_t, char, mbstate_t>(__refs)
- { _M_c_locale_codecvt = _S_c_locale; }
+ { _M_c_locale_codecvt = _S_c_locale; }
codecvt<wchar_t, char, mbstate_t>::
codecvt(__c_locale __cloc, size_t __refs)
@@ -132,10 +129,7 @@ namespace std
codecvt<wchar_t, char, mbstate_t>::
~codecvt()
- {
- if (_M_c_locale_codecvt != _S_c_locale)
- _S_destroy_c_locale(_M_c_locale_codecvt);
- }
+ { _S_destroy_c_locale(_M_c_locale_codecvt); }
codecvt_base::result
codecvt<wchar_t, char, mbstate_t>::
diff --git a/libstdc++-v3/src/ctype.cc b/libstdc++-v3/src/ctype.cc
index 7ca934eb379..3d5ee618c53 100644
--- a/libstdc++-v3/src/ctype.cc
+++ b/libstdc++-v3/src/ctype.cc
@@ -79,8 +79,7 @@ namespace std
ctype<char>::~ctype()
{
- if (_M_c_locale_ctype != _S_c_locale)
- _S_destroy_c_locale(_M_c_locale_ctype);
+ _S_destroy_c_locale(_M_c_locale_ctype);
if (_M_del)
delete[] this->table();
}
@@ -135,17 +134,13 @@ namespace std
{ _M_c_locale_ctype = _S_clone_c_locale(__cloc); }
ctype<wchar_t>::~ctype()
- {
- if (_M_c_locale_ctype != _S_c_locale)
- _S_destroy_c_locale(_M_c_locale_ctype);
- }
+ { _S_destroy_c_locale(_M_c_locale_ctype); }
template<>
ctype_byname<wchar_t>::ctype_byname(const char* __s, size_t __refs)
: ctype<wchar_t>(__refs)
{
- if (_M_c_locale_ctype != _S_c_locale)
- _S_destroy_c_locale(_M_c_locale_ctype);
+ _S_destroy_c_locale(_M_c_locale_ctype);
_S_create_c_locale(_M_c_locale_ctype, __s);
}
#endif
diff --git a/libstdc++-v3/src/globals.cc b/libstdc++-v3/src/globals.cc
index 36d193fb406..d85bf3a6369 100644
--- a/libstdc++-v3/src/globals.cc
+++ b/libstdc++-v3/src/globals.cc
@@ -44,163 +44,206 @@
// Because <iostream> declares the standard streams to be [io]stream
// types instead of say [io]fstream types, it is also necessary to
// allocate the actual file buffers in this file.
-namespace std
+namespace __gnu_cxx
{
- // Standard "C" locale.
- typedef char fake_locale[sizeof(locale)]
- __attribute__ ((aligned(__alignof__(locale))));
- fake_locale c_locale;
+ using namespace std;
+
+ typedef char fake_facet_name[sizeof(char*)]
+ __attribute__ ((aligned(__alignof__(char*))));
+ fake_facet_name facet_name[6 + _GLIBCPP_NUM_CATEGORIES];
typedef char fake_locale_Impl[sizeof(locale::_Impl)]
__attribute__ ((aligned(__alignof__(locale::_Impl))));
fake_locale_Impl c_locale_impl;
-
+
+
+ // NB: The asm directives renames these non-exported, namespace
+ // __gnu_cxx symbols into the mistakenly exported, namespace std
+ // symbols in GLIBCPP_3.2.
+ // The rename syntax is
+ // asm (".symver currentname,oldname@@GLIBCPP_3.2")
+ // At the same time, these new __gnu_cxx symbols are not exported.
+ // In the future, GLIBCXX_ABI > 5 should remove all uses of
+ // _GLIBCPP_ASM_SYMVER in this file.
+ typedef char fake_locale[sizeof(locale)]
+ __attribute__ ((aligned(__alignof__(locale))));
+ fake_locale c_locale;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx8c_localeE, _ZSt8c_locale, GLIBCPP_3.2)
+
+ // GLIBCXX_ABI > 5 will not need this symbol at all.
+ // It's here just as a placeholder, as the size of this exported
+ // object changed. The new symbol is not exported.
+ const int o = sizeof(locale::_Impl) - sizeof(char*[_GLIBCPP_NUM_CATEGORIES]);
+ typedef char fake_locale_Impl_compat[o]
+ __attribute__ ((aligned(__alignof__(o))));
+ fake_locale_Impl_compat c_locale_impl_compat;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx20c_locale_impl_compatE, _ZSt13c_locale_impl, GLIBCPP_3.2)
+
typedef char fake_facet_vec[sizeof(locale::facet*)]
__attribute__ ((aligned(__alignof__(locale::facet*))));
fake_facet_vec facet_vec[_GLIBCPP_NUM_FACETS];
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9facet_vecE, _ZSt9facet_vec, GLIBCPP_3.2)
typedef char fake_ctype_c[sizeof(std::ctype<char>)]
__attribute__ ((aligned(__alignof__(std::ctype<char>))));
fake_ctype_c ctype_c;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx7ctype_cE, _ZSt7ctype_c, GLIBCPP_3.2)
typedef char fake_collate_c[sizeof(std::collate<char>)]
__attribute__ ((aligned(__alignof__(std::collate<char>))));
fake_collate_c collate_c;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9collate_cE, _ZSt9collate_c, GLIBCPP_3.2)
typedef char fake_numpunct_c[sizeof(numpunct<char>)]
__attribute__ ((aligned(__alignof__(numpunct<char>))));
fake_numpunct_c numpunct_c;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10numpunct_cE, _ZSt10numpunct_c, GLIBCPP_3.2)
typedef char fake_num_get_c[sizeof(num_get<char>)]
__attribute__ ((aligned(__alignof__(num_get<char>))));
fake_num_get_c num_get_c;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9num_get_cE, _ZSt9num_get_c, GLIBCPP_3.2)
typedef char fake_num_put_c[sizeof(num_put<char>)]
__attribute__ ((aligned(__alignof__(num_put<char>))));
fake_num_put_c num_put_c;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9num_put_cE, _ZSt9num_put_c, GLIBCPP_3.2)
typedef char fake_codecvt_c[sizeof(codecvt<char, char, mbstate_t>)]
__attribute__ ((aligned(__alignof__(codecvt<char, char, mbstate_t>))));
fake_codecvt_c codecvt_c;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9codecvt_cE, _ZSt9codecvt_c, GLIBCPP_3.2)
typedef char fake_moneypunct_c[sizeof(moneypunct<char, true>)]
__attribute__ ((aligned(__alignof__(moneypunct<char, true>))));
fake_moneypunct_c moneypunct_tc;
fake_moneypunct_c moneypunct_fc;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx13moneypunct_tcE,\
+ _ZSt13moneypunct_tc, GLIBCPP_3.2)
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx13moneypunct_fcE,\
+ _ZSt13moneypunct_fc, GLIBCPP_3.2)
typedef char fake_money_get_c[sizeof(money_get<char>)]
__attribute__ ((aligned(__alignof__(money_get<char>))));
fake_money_get_c money_get_c;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11money_get_cE, _ZSt11money_get_c, GLIBCPP_3.2)
typedef char fake_money_put_c[sizeof(money_put<char>)]
__attribute__ ((aligned(__alignof__(money_put<char>))));
fake_money_put_c money_put_c;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11money_put_cE, _ZSt11money_put_c, GLIBCPP_3.2)
typedef char fake_timepunct_c[sizeof(__timepunct<char>)]
__attribute__ ((aligned(__alignof__(__timepunct<char>))));
fake_timepunct_c timepunct_c;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11timepunct_cE, _ZSt11timepunct_c, GLIBCPP_3.2)
typedef char fake_time_get_c[sizeof(time_get<char>)]
__attribute__ ((aligned(__alignof__(time_get<char>))));
fake_time_get_c time_get_c;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10time_get_cE, _ZSt10time_get_c, GLIBCPP_3.2)
typedef char fake_time_put_c[sizeof(time_put<char>)]
__attribute__ ((aligned(__alignof__(time_put<char>))));
fake_time_put_c time_put_c;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10time_put_cE, _ZSt10time_put_c, GLIBCPP_3.2)
typedef char fake_messages_c[sizeof(messages<char>)]
__attribute__ ((aligned(__alignof__(messages<char>))));
fake_messages_c messages_c;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10messages_cE, _ZSt10messages_c, GLIBCPP_3.2)
#ifdef _GLIBCPP_USE_WCHAR_T
typedef char fake_wtype_w[sizeof(std::ctype<wchar_t>)]
__attribute__ ((aligned(__alignof__(std::ctype<wchar_t>))));
fake_wtype_w ctype_w;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx7ctype_wE, _ZSt7ctype_w, GLIBCPP_3.2)
typedef char fake_wollate_w[sizeof(std::collate<wchar_t>)]
__attribute__ ((aligned(__alignof__(std::collate<wchar_t>))));
fake_wollate_w collate_w;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9collate_wE, _ZSt9collate_w, GLIBCPP_3.2)
typedef char fake_numpunct_w[sizeof(numpunct<wchar_t>)]
__attribute__ ((aligned(__alignof__(numpunct<wchar_t>))));
fake_numpunct_w numpunct_w;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10numpunct_wE, _ZSt10numpunct_w, GLIBCPP_3.2)
typedef char fake_num_get_w[sizeof(num_get<wchar_t>)]
__attribute__ ((aligned(__alignof__(num_get<wchar_t>))));
fake_num_get_w num_get_w;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9num_get_wE, _ZSt9num_get_w, GLIBCPP_3.2)
typedef char fake_num_put_w[sizeof(num_put<wchar_t>)]
__attribute__ ((aligned(__alignof__(num_put<wchar_t>))));
fake_num_put_w num_put_w;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9num_put_wE, _ZSt9num_put_w, GLIBCPP_3.2)
typedef char fake_wodecvt_w[sizeof(codecvt<wchar_t, char, mbstate_t>)]
__attribute__ ((aligned(__alignof__(codecvt<wchar_t, char, mbstate_t>))));
fake_wodecvt_w codecvt_w;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9codecvt_wE, _ZSt9codecvt_w, GLIBCPP_3.2)
typedef char fake_moneypunct_w[sizeof(moneypunct<wchar_t, true>)]
__attribute__ ((aligned(__alignof__(moneypunct<wchar_t, true>))));
fake_moneypunct_w moneypunct_tw;
fake_moneypunct_w moneypunct_fw;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx13moneypunct_twE,\
+ _ZSt13moneypunct_tw, GLIBCPP_3.2)
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx13moneypunct_fwE,\
+ _ZSt13moneypunct_fw, GLIBCPP_3.2)
typedef char fake_money_get_w[sizeof(money_get<wchar_t>)]
__attribute__ ((aligned(__alignof__(money_get<wchar_t>))));
fake_money_get_w money_get_w;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11money_get_wE, _ZSt11money_get_w, GLIBCPP_3.2)
typedef char fake_money_put_w[sizeof(money_put<wchar_t>)]
__attribute__ ((aligned(__alignof__(money_put<wchar_t>))));
fake_money_put_w money_put_w;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11money_put_wE, _ZSt11money_put_w, GLIBCPP_3.2)
typedef char fake_timepunct_w[sizeof(__timepunct<wchar_t>)]
__attribute__ ((aligned(__alignof__(__timepunct<wchar_t>))));
fake_timepunct_w timepunct_w;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11timepunct_wE, _ZSt11timepunct_w, GLIBCPP_3.2)
typedef char fake_time_get_w[sizeof(time_get<wchar_t>)]
__attribute__ ((aligned(__alignof__(time_get<wchar_t>))));
fake_time_get_w time_get_w;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10time_get_wE, _ZSt10time_get_w, GLIBCPP_3.2)
typedef char fake_time_put_w[sizeof(time_put<wchar_t>)]
__attribute__ ((aligned(__alignof__(time_put<wchar_t>))));
fake_time_put_w time_put_w;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10time_put_wE, _ZSt10time_put_w, GLIBCPP_3.2)
typedef char fake_messages_w[sizeof(messages<wchar_t>)]
__attribute__ ((aligned(__alignof__(messages<wchar_t>))));
fake_messages_w messages_w;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10messages_wE, _ZSt10messages_w, GLIBCPP_3.2)
#endif
- // Standard stream objects.
- typedef char fake_istream[sizeof(istream)]
- __attribute__ ((aligned(__alignof__(istream))));
- typedef char fake_ostream[sizeof(ostream)]
- __attribute__ ((aligned(__alignof__(ostream))));
- fake_istream cin;
- fake_ostream cout;
- fake_ostream cerr;
- fake_ostream clog;
-
- typedef char fake_filebuf[sizeof(__gnu_cxx::stdio_filebuf<char>)]
- __attribute__ ((aligned(__alignof__(__gnu_cxx::stdio_filebuf<char>))));
+ typedef char fake_filebuf[sizeof(stdio_filebuf<char>)]
+ __attribute__ ((aligned(__alignof__(stdio_filebuf<char>))));
fake_filebuf buf_cout;
fake_filebuf buf_cin;
fake_filebuf buf_cerr;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx8buf_coutE, _ZSt8buf_cout, GLIBCPP_3.2)
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx7buf_cinE, _ZSt7buf_cin, GLIBCPP_3.2)
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx8buf_cerrE, _ZSt8buf_cerr, GLIBCPP_3.2)
#ifdef _GLIBCPP_USE_WCHAR_T
- typedef char fake_wistream[sizeof(wistream)]
- __attribute__ ((aligned(__alignof__(wistream))));
- typedef char fake_wostream[sizeof(wostream)]
- __attribute__ ((aligned(__alignof__(wostream))));
- fake_wistream wcin;
- fake_wostream wcout;
- fake_wostream wcerr;
- fake_wostream wclog;
-
- typedef char fake_wfilebuf[sizeof(__gnu_cxx::stdio_filebuf<wchar_t>)]
- __attribute__ ((aligned(__alignof__(__gnu_cxx::stdio_filebuf<wchar_t>))));
+ typedef char fake_wfilebuf[sizeof(stdio_filebuf<wchar_t>)]
+ __attribute__ ((aligned(__alignof__(stdio_filebuf<wchar_t>))));
fake_wfilebuf buf_wcout;
fake_wfilebuf buf_wcin;
fake_wfilebuf buf_wcerr;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9buf_wcoutE, _ZSt9buf_wcout, GLIBCPP_3.2)
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx8buf_wcinE, _ZSt8buf_wcin, GLIBCPP_3.2)
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9buf_wcerrE, _ZSt9buf_wcerr, GLIBCPP_3.2)
#endif
-
// Globals for once-only runtime initialization of mutex objects. This
// allows static initialization of these objects on systems that need a
// function call to initialize a mutex. For example, see stl_threads.h.
@@ -223,4 +266,28 @@ namespace std
_GLIBCPP_mutex_address_init ()
{ __GTHREAD_MUTEX_INIT_FUNCTION (_GLIBCPP_mutex_address); }
#endif
-}
+} // namespace __gnu_cxx
+
+namespace std
+{
+ // Standard stream objects.
+ typedef char fake_istream[sizeof(istream)]
+ __attribute__ ((aligned(__alignof__(istream))));
+ typedef char fake_ostream[sizeof(ostream)]
+ __attribute__ ((aligned(__alignof__(ostream))));
+ fake_istream cin;
+ fake_ostream cout;
+ fake_ostream cerr;
+ fake_ostream clog;
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ typedef char fake_wistream[sizeof(wistream)]
+ __attribute__ ((aligned(__alignof__(wistream))));
+ typedef char fake_wostream[sizeof(wostream)]
+ __attribute__ ((aligned(__alignof__(wostream))));
+ fake_wistream wcin;
+ fake_wostream wcout;
+ fake_wostream wcerr;
+ fake_wostream wclog;
+#endif
+} // namespace std
diff --git a/libstdc++-v3/src/ios.cc b/libstdc++-v3/src/ios.cc
index c1167f8c15c..7bfdc5b4bb4 100644
--- a/libstdc++-v3/src/ios.cc
+++ b/libstdc++-v3/src/ios.cc
@@ -39,28 +39,34 @@
#include <bits/atomicity.h>
#include <ext/stdio_filebuf.h>
-namespace std
+namespace __gnu_cxx
{
// Extern declarations for global objects in src/globals.cc.
+ extern stdio_filebuf<char> buf_cout;
+ extern stdio_filebuf<char> buf_cin;
+ extern stdio_filebuf<char> buf_cerr;
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ extern stdio_filebuf<wchar_t> buf_wcout;
+ extern stdio_filebuf<wchar_t> buf_wcin;
+ extern stdio_filebuf<wchar_t> buf_wcerr;
+#endif
+} // namespace __gnu_cxx
+
+namespace std
+{
+ using namespace __gnu_cxx;
+
extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;
- using __gnu_cxx::stdio_filebuf;
- extern stdio_filebuf<char> buf_cout;
- extern stdio_filebuf<char> buf_cin;
- extern stdio_filebuf<char> buf_cerr;
-
#ifdef _GLIBCPP_USE_WCHAR_T
extern wistream wcin;
extern wostream wcout;
extern wostream wcerr;
extern wostream wclog;
-
- extern stdio_filebuf<wchar_t> buf_wcout;
- extern stdio_filebuf<wchar_t> buf_wcin;
- extern stdio_filebuf<wchar_t> buf_wcerr;
#endif
// Definitions for static const data members of __ios_flags.
diff --git a/libstdc++-v3/src/locale-inst.cc b/libstdc++-v3/src/locale-inst.cc
index 5e6c6751bc4..8f2c8638177 100644
--- a/libstdc++-v3/src/locale-inst.cc
+++ b/libstdc++-v3/src/locale-inst.cc
@@ -35,11 +35,7 @@
#include <clocale>
#include <cstring>
#include <cassert>
-#include <limits>
-#include <exception>
#include <locale>
-#include <istream>
-#include <ostream>
namespace std
{
diff --git a/libstdc++-v3/src/locale.cc b/libstdc++-v3/src/locale.cc
index 6314ba6a7a5..127197d0138 100644
--- a/libstdc++-v3/src/locale.cc
+++ b/libstdc++-v3/src/locale.cc
@@ -31,19 +31,19 @@
#include <cassert>
#include <cctype>
#include <cwctype> // For towupper, etc.
-#include <limits>
-#include <exception>
#include <locale>
-#include <istream>
-#include <ostream>
#include <bits/atomicity.h>
-namespace std
+namespace __gnu_cxx
{
// Defined in globals.cc.
- extern locale c_locale;
- extern locale::_Impl c_locale_impl;
- extern locale::facet** facet_vec;
+ extern std::locale c_locale;
+ extern std::locale::_Impl c_locale_impl;
+} // namespace __gnu_cxx
+
+namespace std
+{
+ using namespace __gnu_cxx;
// Definitions for static const data members of locale.
const locale::category locale::none;
@@ -55,9 +55,14 @@ namespace std
const locale::category locale::messages;
const locale::category locale::all;
+ // In the future, GLIBCXX_ABI > 5 should remove all uses of
+ // _GLIBCPP_ASM_SYMVER in this file, and remove exports of any
+ // static data members of locale.
locale::_Impl* locale::_S_classic;
locale::_Impl* locale::_S_global;
- const size_t locale::_S_num_categories;
+ const size_t locale::_S_categories_size;
+ _GLIBCPP_ASM_SYMVER(_ZNSt6locale18_S_categories_sizeE, _ZNSt6locale17_S_num_categoriesE, GLIBCPP_3.2)
+ const size_t locale::_S_extra_categories_size;
// Definitions for static const data members of locale::id
_Atomic_word locale::id::_S_highwater; // init'd to 0 by linker
@@ -146,31 +151,12 @@ namespace std
locale::_Impl::_S_id_ctype,
locale::_Impl::_S_id_numeric,
locale::_Impl::_S_id_collate,
- locale::_Impl::_S_id_monetary,
locale::_Impl::_S_id_time,
+ locale::_Impl::_S_id_monetary,
locale::_Impl::_S_id_messages,
0
};
- locale::~locale() throw()
- { _M_impl->_M_remove_reference(); }
-
- void
- locale::_M_coalesce(const locale& __base, const locale& __add,
- category __cat)
- {
- __cat = _S_normalize_category(__cat);
- _M_impl = new _Impl(*__base._M_impl, 1);
-
- try
- { _M_impl->_M_replace_categories(__add._M_impl, __cat); }
- catch (...)
- {
- _M_impl->_M_remove_reference();
- __throw_exception_again;
- }
- }
-
locale::locale() throw()
{
_S_initialize();
@@ -182,6 +168,7 @@ namespace std
// This is used to initialize global and classic locales, and
// assumes that the _Impl objects are constructed correctly.
+ // The lack of a reference increment is intentional.
locale::locale(_Impl* __ip) throw() : _M_impl(__ip)
{ }
@@ -192,18 +179,110 @@ namespace std
_S_initialize();
if (strcmp(__s, "C") == 0 || strcmp(__s, "POSIX") == 0)
(_M_impl = _S_classic)->_M_add_reference();
- else if (strcmp(__s, "") == 0)
+ else if (strcmp(__s, "") != 0)
+ _M_impl = new _Impl(__s, 1);
+ else
{
+ // Get it from the environment.
char* __env = getenv("LC_ALL");
- if (__env)
- _M_impl = new _Impl(__env, 1);
- else if ((__env = getenv("LANG")))
- _M_impl = new _Impl(__env, 1);
+ // If LC_ALL is set we are done.
+ if (__env && strcmp(__env, "") != 0)
+ {
+ if (strcmp(__env, "C") == 0 || strcmp(__env, "POSIX") == 0)
+ (_M_impl = _S_classic)->_M_add_reference();
+ else
+ _M_impl = new _Impl(__env, 1);
+ }
else
- (_M_impl = _S_classic)->_M_add_reference();
+ {
+ char* __res;
+ // LANG may set a default different from "C".
+ char* __env = getenv("LANG");
+ if (!__env || strcmp(__env, "") == 0 || strcmp(__env, "C") == 0
+ || strcmp(__env, "POSIX") == 0)
+ __res = strdup("C");
+ else
+ __res = strdup(__env);
+
+ // Scan the categories looking for the first one
+ // different from LANG.
+ size_t __i = 0;
+ if (strcmp(__res, "C") == 0)
+ for (__i = 0;
+ __i < _S_categories_size + _S_extra_categories_size;
+ ++__i)
+ {
+ __env = getenv(_S_categories[__i]);
+ if (__env && strcmp(__env, "") != 0
+ && strcmp(__env, "C") != 0
+ && strcmp(__env, "POSIX") != 0)
+ break;
+ }
+ else
+ for (__i = 0;
+ __i < _S_categories_size + _S_extra_categories_size;
+ ++__i)
+ {
+ __env = getenv(_S_categories[__i]);
+ if (__env && strcmp(__env, "") != 0
+ && strcmp(__env, __res) != 0)
+ break;
+ }
+
+ // If one is found, build the complete string of
+ // the form LC_CTYPE=xxx;LC_NUMERIC=yyy; and so on...
+ if (__i < _S_categories_size + _S_extra_categories_size)
+ {
+ string __str;
+ for (size_t __j = 0; __j < __i; ++__j)
+ {
+ __str += _S_categories[__j];
+ __str += "=";
+ __str += __res;
+ __str += ";";
+ }
+ __str += _S_categories[__i];
+ __str += "=";
+ __str += __env;
+ __str += ";";
+ __i++;
+ for (; __i < _S_categories_size
+ + _S_extra_categories_size; ++__i)
+ {
+ __env = getenv(_S_categories[__i]);
+ if (!__env || strcmp(__env, "") == 0)
+ {
+ __str += _S_categories[__i];
+ __str += '=';
+ __str += __res;
+ __str += ';';
+ }
+ else if (strcmp(__env, "C") == 0
+ || strcmp(__env, "POSIX") == 0)
+ {
+ __str += _S_categories[__i];
+ __str += "=C;";
+ }
+ else
+ {
+ __str += _S_categories[__i];
+ __str += "=";
+ __str += __env;
+ __str += ";";
+ }
+ }
+ __str.erase(__str.end() - 1);
+ _M_impl = new _Impl(__str.c_str(), 1);
+ }
+ // ... otherwise either an additional instance of
+ // the "C" locale or LANG.
+ else if (strcmp(__res, "C") == 0)
+ (_M_impl = _S_classic)->_M_add_reference();
+ else
+ _M_impl = new _Impl(__res, 1);
+ free(__res);
+ }
}
- else
- _M_impl = new _Impl(__s, 1);
}
else
__throw_runtime_error("attempt to create locale from NULL name");
@@ -221,6 +300,9 @@ namespace std
locale::locale(const locale& __base, const locale& __add, category __cat)
{ _M_coalesce(__base, __add, __cat); }
+ locale::~locale() throw()
+ { _M_impl->_M_remove_reference(); }
+
bool
locale::operator==(const locale& __rhs) const throw()
{
@@ -261,20 +343,22 @@ namespace std
string
locale::name() const
{
- // Need some kind of separator character. This one was pretty much
- // arbitrarily chosen as to not conflict with glibc locales: the
- // exact formatting is not set in stone.
- const char __separator = '|';
-
string __ret;
if (_M_impl->_M_check_same_name())
__ret = _M_impl->_M_names[0];
else
{
- for (size_t i = 0; i < _S_num_categories; ++i)
+ __ret += _S_categories[0];
+ __ret += "=";
+ __ret += _M_impl->_M_names[0];
+ for (size_t __i = 1;
+ __i < _S_categories_size + _S_extra_categories_size;
+ ++__i)
{
- __ret += __separator;
- __ret += _M_impl->_M_names[i];
+ __ret += ";";
+ __ret += _S_categories[__i];
+ __ret += "=";
+ __ret += _M_impl->_M_names[__i];
}
}
return __ret;
@@ -291,12 +375,8 @@ namespace std
try
{
// 26 Standard facets, 2 references.
- // One reference for _M_classic, one for _M_global
- facet** f = new(&facet_vec) facet*[_GLIBCPP_NUM_FACETS];
- for (size_t __i = 0; __i < _GLIBCPP_NUM_FACETS; ++__i)
- f[__i] = 0;
-
- _S_classic = new (&c_locale_impl) _Impl(f, 2, true);
+ // One reference for _S_classic, one for _S_global
+ _S_classic = new (&c_locale_impl) _Impl(0, 2, true);
_S_global = _S_classic;
new (&c_locale) locale(_S_classic);
}
@@ -313,6 +393,22 @@ namespace std
return c_locale;
}
+ void
+ locale::_M_coalesce(const locale& __base, const locale& __add,
+ category __cat)
+ {
+ __cat = _S_normalize_category(__cat);
+ _M_impl = new _Impl(*__base._M_impl, 1);
+
+ try
+ { _M_impl->_M_replace_categories(__add._M_impl, __cat); }
+ catch (...)
+ {
+ _M_impl->_M_remove_reference();
+ __throw_exception_again;
+ }
+ }
+
locale::category
locale::_S_normalize_category(category __cat)
{
@@ -361,11 +457,8 @@ namespace std
~facet() { }
locale::facet::
- facet(size_t __refs) throw() : _M_references(__refs)
- {
- if (!_S_c_locale)
- _S_create_c_locale(_S_c_locale, "C");
- }
+ facet(size_t __refs) throw() : _M_references(__refs ? 1 : 0)
+ { }
void
locale::facet::
@@ -376,7 +469,7 @@ namespace std
locale::facet::
_M_remove_reference() throw()
{
- if (__exchange_and_add(&_M_references, -1) == 0)
+ if (__exchange_and_add(&_M_references, -1) == 1)
{
try
{ delete this; }
diff --git a/libstdc++-v3/src/localename.cc b/libstdc++-v3/src/localename.cc
index a0c9e75ee80..0a2c5210215 100644
--- a/libstdc++-v3/src/localename.cc
+++ b/libstdc++-v3/src/localename.cc
@@ -30,9 +30,14 @@
#include <cstring>
#include <locale>
-namespace std
+namespace __gnu_cxx
{
+ using namespace std;
+
// Defined in globals.cc.
+ extern locale::facet** facet_vec;
+ extern char* facet_name[6 + _GLIBCPP_NUM_CATEGORIES];
+
extern std::ctype<char> ctype_c;
extern std::collate<char> collate_c;
extern numpunct<char> numpunct_c;
@@ -63,6 +68,11 @@ namespace std
extern time_put<wchar_t> time_put_w;
extern std::messages<wchar_t> messages_w;
#endif
+} // namespace __gnu_cxx
+
+namespace std
+{
+ using namespace __gnu_cxx;
locale::_Impl::
~_Impl() throw()
@@ -71,6 +81,10 @@ namespace std
if (_M_facets[__i])
_M_facets[__i]->_M_remove_reference();
delete [] _M_facets;
+
+ for (size_t __i = 0;
+ __i < _S_categories_size + _S_extra_categories_size; ++__i)
+ delete [] _M_names[__i];
}
// Clone existing _Impl object.
@@ -95,14 +109,19 @@ namespace std
if (_M_facets[__i])
_M_facets[__i]->_M_add_reference();
}
- for (size_t __i = 0; __i < _S_num_categories; ++__i)
- _M_names[__i] = __imp._M_names[__i];
+ for (size_t __i = 0;
+ __i < _S_categories_size + _S_extra_categories_size; ++__i)
+ {
+ char* __new = new char[strlen(__imp._M_names[__i]) + 1];
+ strcpy(__new, __imp._M_names[__i]);
+ _M_names[__i] = __new;
+ }
}
// Construct named _Impl.
locale::_Impl::
_Impl(const char* __s, size_t __refs)
- : _M_references(__refs), _M_facets_size(_GLIBCPP_NUM_FACETS) // XXX
+ : _M_references(__refs), _M_facets_size(_GLIBCPP_NUM_FACETS)
{
// Initialize the underlying locale model, which also checks
// to see if the given name is valid.
@@ -122,11 +141,40 @@ namespace std
}
// Name all the categories.
- for (size_t i = 0; i < _S_num_categories; ++i)
- _M_names[i] = __s;
+ if (!strchr(__s, ';'))
+ {
+ size_t __len = strlen(__s) + 1;
+ for (size_t __i = 0;
+ __i < _S_categories_size + _S_extra_categories_size; ++__i)
+ {
+ _M_names[__i] = new char[__len];
+ strcpy(_M_names[__i], __s);
+ }
+ }
+ else
+ {
+ char* __tmp = strdup(__s);
+ __tmp[strlen(__tmp)] = ';';
+ strtok(__tmp, "=;");
+ for (size_t __i = 0;
+ __i < _S_categories_size + _S_extra_categories_size - 1; ++__i)
+ {
+ char* __src = strtok(NULL, "=;");
+ char* __new = new char[strlen(__src) + 1];
+ strcpy(__new, __src);
+ _M_names[__i] = __new;
+ strtok(NULL, "=;");
+ }
+ char* __src = strtok(NULL, "=;");
+ char* __new = new char[strlen(__src) + 1];
+ strcpy(__new, __src);
+ _M_names[_S_categories_size + _S_extra_categories_size - 1] = __new;
- // Construct all standard facets and add them to _M_facets.
- _M_init_facet(new std::ctype<char>(__cloc));
+ free(__tmp);
+ }
+
+ // Construct all standard facets and add them to _M_facets.
+ _M_init_facet(new std::ctype<char>(__cloc, 0, false));
_M_init_facet(new codecvt<char, char, mbstate_t>(__cloc));
_M_init_facet(new numpunct<char>(__cloc));
_M_init_facet(new num_get<char>);
@@ -162,47 +210,61 @@ namespace std
// Construct "C" _Impl.
locale::_Impl::
- _Impl(facet** __f, size_t __refs, bool)
- : _M_references(__refs), _M_facets(__f), _M_facets_size(_GLIBCPP_NUM_FACETS)
+ _Impl(facet**, size_t __refs, bool)
+ : _M_references(__refs), _M_facets_size(_GLIBCPP_NUM_FACETS)
{
+ // Initialize the underlying locale model.
+ locale::facet::_S_create_c_locale(locale::facet::_S_c_locale, "C");
+
+ _M_facets = new(&facet_vec) facet*[_M_facets_size];
+ for (size_t __i = 0; __i < _M_facets_size; ++__i)
+ _M_facets[__i] = 0;
+
// Name all the categories.
- for (size_t i = 0; i < _S_num_categories; ++i)
- _M_names[i] = "C";
+ for (size_t __i = 0;
+ __i < _S_categories_size + _S_extra_categories_size; ++__i)
+ {
+ _M_names[__i] = new (&facet_name[__i]) char[2];
+ strcpy(_M_names[__i], "C");
+ }
// This is needed as presently the C++ version of "C" locales
// != data in the underlying locale model for __timepunct,
// numpunct, and moneypunct. Also, the "C" locales must be
// constructed in a way such that they are pre-allocated.
- _M_init_facet(new (&ctype_c) std::ctype<char>);
- _M_init_facet(new (&codecvt_c) codecvt<char, char, mbstate_t>);
- _M_init_facet(new (&numpunct_c) numpunct<char>);
- _M_init_facet(new (&num_get_c) num_get<char>);
- _M_init_facet(new (&num_put_c) num_put<char>);
- _M_init_facet(new (&collate_c) std::collate<char>);
- _M_init_facet(new (&moneypunct_fc) moneypunct<char, false>);
- _M_init_facet(new (&moneypunct_tc) moneypunct<char, true>);
- _M_init_facet(new (&money_get_c) money_get<char>);
- _M_init_facet(new (&money_put_c) money_put<char>);
- _M_init_facet(new (&timepunct_c) __timepunct<char>);
- _M_init_facet(new (&time_get_c) time_get<char>);
- _M_init_facet(new (&time_put_c) time_put<char>);
- _M_init_facet(new (&messages_c) std::messages<char>);
+ // NB: Set locale::facets(ref) count to one so that each individual
+ // facet is not destroyed when the locale (and thus locale::_Impl) is
+ // destroyed.
+ _M_init_facet(new (&ctype_c) std::ctype<char>(0, false, 1));
+ _M_init_facet(new (&codecvt_c) codecvt<char, char, mbstate_t>(1));
+ _M_init_facet(new (&numpunct_c) numpunct<char>(1));
+ _M_init_facet(new (&num_get_c) num_get<char>(1));
+ _M_init_facet(new (&num_put_c) num_put<char>(1));
+ _M_init_facet(new (&collate_c) std::collate<char>(1));
+ _M_init_facet(new (&moneypunct_fc) moneypunct<char, false>(1));
+ _M_init_facet(new (&moneypunct_tc) moneypunct<char, true>(1));
+ _M_init_facet(new (&money_get_c) money_get<char>(1));
+ _M_init_facet(new (&money_put_c) money_put<char>(1));
+ _M_init_facet(new (&timepunct_c) __timepunct<char>(1));
+ _M_init_facet(new (&time_get_c) time_get<char>(1));
+ _M_init_facet(new (&time_put_c) time_put<char>(1));
+ _M_init_facet(new (&messages_c) std::messages<char>(1));
#ifdef _GLIBCPP_USE_WCHAR_T
- _M_init_facet(new (&ctype_w) std::ctype<wchar_t>);
- _M_init_facet(new (&codecvt_w) codecvt<wchar_t, char, mbstate_t>);
- _M_init_facet(new (&numpunct_w) numpunct<wchar_t>);
- _M_init_facet(new (&num_get_w) num_get<wchar_t>);
- _M_init_facet(new (&num_put_w) num_put<wchar_t>);
- _M_init_facet(new (&collate_w) std::collate<wchar_t>);
- _M_init_facet(new (&moneypunct_fw) moneypunct<wchar_t, false>);
- _M_init_facet(new (&moneypunct_tw) moneypunct<wchar_t, true>);
- _M_init_facet(new (&money_get_w) money_get<wchar_t>);
- _M_init_facet(new (&money_put_w) money_put<wchar_t>);
- _M_init_facet(new (&timepunct_w) __timepunct<wchar_t>);
- _M_init_facet(new (&time_get_w) time_get<wchar_t>);
- _M_init_facet(new (&time_put_w) time_put<wchar_t>);
- _M_init_facet(new (&messages_w) std::messages<wchar_t>);
-#endif
+ _M_init_facet(new (&ctype_w) std::ctype<wchar_t>(1));
+ _M_init_facet(new (&codecvt_w) codecvt<wchar_t, char, mbstate_t>(1));
+ _M_init_facet(new (&numpunct_w) numpunct<wchar_t>(1));
+ _M_init_facet(new (&num_get_w) num_get<wchar_t>(1));
+ _M_init_facet(new (&num_put_w) num_put<wchar_t>(1));
+ _M_init_facet(new (&collate_w) std::collate<wchar_t>(1));
+ _M_init_facet(new (&moneypunct_fw) moneypunct<wchar_t, false>(1));
+ _M_init_facet(new (&moneypunct_tw) moneypunct<wchar_t, true>(1));
+ _M_init_facet(new (&money_get_w) money_get<wchar_t>(1));
+ _M_init_facet(new (&money_put_w) money_put<wchar_t>(1));
+ _M_init_facet(new (&timepunct_w) __timepunct<wchar_t>(1));
+ _M_init_facet(new (&time_get_w) time_get<wchar_t>(1));
+ _M_init_facet(new (&time_put_w) time_put<wchar_t>(1));
+ _M_init_facet(new (&messages_w) std::messages<wchar_t>(1));
+#endif
}
void
@@ -210,7 +272,7 @@ namespace std
_M_replace_categories(const _Impl* __imp, category __cat)
{
category __mask;
- for (unsigned int __ix = 0; __ix < _S_num_categories; ++__ix)
+ for (size_t __ix = 0; __ix < _S_categories_size; ++__ix)
{
__mask = 1 << __ix;
if (__mask & __cat)
@@ -220,7 +282,12 @@ namespace std
// If both have names, go ahead and mangle.
if (strcmp(_M_names[__ix], "*") != 0
&& strcmp(__imp->_M_names[__ix], "*") != 0)
- _M_names[__ix] = __imp->_M_names[__ix];
+ {
+ delete [] _M_names[__ix];
+ char* __new = new char[strlen(__imp->_M_names[__ix]) + 1];
+ strcpy(__new, __imp->_M_names[__ix]);
+ _M_names[__ix] = __new;
+ }
}
}
}
@@ -250,6 +317,8 @@ namespace std
if (__fp)
{
size_t __index = __idp->_M_id();
+
+ // Check size of facet vector to ensure adequate room.
if (__index > _M_facets_size - 1)
{
facet** __old = _M_facets;
@@ -266,11 +335,11 @@ namespace std
delete [] __old;
}
+ __fp->_M_add_reference();
facet*& __fpr = _M_facets[__index];
if (__fpr)
{
// Replacing an existing facet. Order matters.
- __fp->_M_add_reference();
__fpr->_M_remove_reference();
__fpr = __fp;
}
diff --git a/libstdc++-v3/src/stl-inst.cc b/libstdc++-v3/src/stl-inst.cc
index d8879a7bccd..d80a7186718 100644
--- a/libstdc++-v3/src/stl-inst.cc
+++ b/libstdc++-v3/src/stl-inst.cc
@@ -39,9 +39,5 @@ namespace std
template class allocator<char>;
template class allocator<wchar_t>;
-#ifdef __USE_MALLOC
- template class __malloc_alloc_template<0>;
-#else
template class __default_alloc_template<true, 0>;
-#endif
} // namespace std
diff --git a/libstdc++-v3/testsuite/21_strings/capacity.cc b/libstdc++-v3/testsuite/21_strings/capacity.cc
index 3c45b005017..99a5b655f58 100644
--- a/libstdc++-v3/testsuite/21_strings/capacity.cc
+++ b/libstdc++-v3/testsuite/21_strings/capacity.cc
@@ -209,7 +209,7 @@ void test01()
sz02 = str011.length();
VERIFY( sz02 > sz01 );
- // trickster allocator (__USE_MALLOC, luke) issues involved with these:
+ // trickster allocator issues involved with these:
std::string str3 = "8-chars_8-chars_";
const char* p3 = str3.c_str();
std::string str4 = str3 + "7-chars";
diff --git a/libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc b/libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc
index a27b2457e87..8ffef6e34e1 100644
--- a/libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc
@@ -121,7 +121,7 @@ void test01()
string str1, str2;
// construct a locale object with the C facet
- const locale& loc01 = locale::classic();
+ const locale loc01 = locale::classic();
// 1
// template <class Facet> locale(const locale& other, Facet* f)
@@ -315,16 +315,183 @@ void test03()
{
bool test = true;
#ifdef _GLIBCPP_HAVE_SETENV
- const char* oldLANG = getenv("LANG");
- if (!setenv("LANG", "it_IT", 1))
+ const char* LC_ALL_orig = getenv("LC_ALL");
+ if (!setenv("LC_ALL", "it_IT", 1))
{
std::locale loc("");
VERIFY( loc.name() == "it_IT" );
- setenv("LANG", oldLANG ? oldLANG : "", 1);
+ setenv("LC_ALL", LC_ALL_orig ? LC_ALL_orig : "", 1);
}
#endif
}
+
+// More tests for locale("") == POSIX locale::name.
+void test04()
+{
+ bool test = true;
+ using namespace std;
+
+#ifdef _GLIBCPP_HAVE_SETENV
+
+ const char* LANG_orig = getenv("LANG") ? strdup(getenv("LANG")) : "";
+ const char* LC_ALL_orig = getenv("LC_ALL") ? strdup(getenv("LC_ALL")) : "";
+ const char* LC_CTYPE_orig =
+ getenv("LC_CTYPE") ? strdup(getenv("LC_CTYPE")) : "";
+ const char* LC_NUMERIC_orig =
+ getenv("LC_NUMERIC") ? strdup(getenv("LC_NUMERIC")) : "";
+ const char* LC_COLLATE_orig =
+ getenv("LC_COLLATE") ? strdup(getenv("LC_COLLATE")) : "";
+ const char* LC_TIME_orig =
+ getenv("LC_TIME") ? strdup(getenv("LC_TIME")) : "";
+ const char* LC_MONETARY_orig =
+ getenv("LC_MONETARY") ? strdup(getenv("LC_MONETARY")) : "";
+ const char* LC_MESSAGES_orig =
+ getenv("LC_MESSAGES") ? strdup(getenv("LC_MESSAGES")) : "";
+#if _GLIBCPP_NUM_CATEGORIES
+ const char* LC_PAPER_orig =
+ getenv("LC_PAPER") ? strdup(getenv("LC_PAPER")) : "";
+ const char* LC_NAME_orig =
+ getenv("LC_NAME") ? strdup(getenv("LC_NAME")) : "";
+ const char* LC_ADDRESS_orig =
+ getenv("LC_ADDRESS") ? strdup(getenv("LC_ADDRESS")) : "";
+ const char* LC_TELEPHONE_orig =
+ getenv("LC_TELEPHONE") ? strdup(getenv("LC_TELEPHONE")) : "";
+ const char* LC_MEASUREMENT_orig =
+ getenv("LC_MEASUREMENT") ? strdup(getenv("LC_MEASUREMENT")) : "";
+ const char* LC_IDENTIFICATION_orig =
+ getenv("LC_IDENTIFICATION") ? strdup(getenv("LC_IDENTIFICATION")) : "";
+#endif
+
+ // Check that a "POSIX" LC_ALL is equivalent to "C".
+ if (!setenv("LC_ALL", "POSIX", 1))
+ {
+ locale loc("");
+ VERIFY( loc.name() == "C" );
+ }
+ setenv("LC_ALL", "", 1);
+
+ // Check that a "en_PH" LC_ALL is equivalent to "en_PH".
+ if (!setenv("LC_ALL", "en_PH", 1))
+ {
+ locale loc("");
+ VERIFY( loc.name() == "en_PH" );
+ }
+ setenv("LC_ALL", "", 1);
+
+ // Explicit check that LC_ALL sets regardless of LC_* and LANG.
+ if (!setenv("LANG", "es_MX", 1) && !setenv("LC_COLLATE", "de_DE", 1))
+ {
+ if (!setenv("LC_ALL", "en_PH", 1))
+ {
+ locale loc("");
+ VERIFY( loc.name() == "en_PH" );
+ }
+ setenv("LC_ALL", "", 1);
+ setenv("LANG", LANG_orig ? LANG_orig : "", 1);
+ setenv("LC_COLLATE", LC_COLLATE_orig ? LC_COLLATE_orig : "", 1);
+ }
+
+ // NB: LANG checks all LC_* macro settings. As such, all LC_* macros
+ // must be cleared for these tests, and then restored.
+ setenv("LC_ALL", "", 1);
+ setenv("LC_CTYPE", "", 1);
+ setenv("LC_NUMERIC", "", 1);
+ setenv("LC_COLLATE", "", 1);
+ setenv("LC_TIME", "", 1);
+ setenv("LC_MONETARY", "", 1);
+ setenv("LC_MESSAGES", "", 1);
+#if _GLIBCPP_NUM_CATEGORIES
+ setenv("LC_PAPER", "", 1);
+ setenv("LC_NAME", "", 1);
+ setenv("LC_ADDRESS", "", 1);
+ setenv("LC_TELEPHONE", "", 1);
+ setenv("LC_MEASUREMENT", "", 1);
+ setenv("LC_IDENTIFICATION", "", 1);
+#endif
+
+ // Check the default set by LANG.
+ if (!setenv("LANG", "fr_FR", 1))
+ {
+ locale loc("");
+ VERIFY( loc.name() == "fr_FR" );
+ }
+
+ // Check that a "POSIX" LANG is equivalent to "C".
+ if (!setenv("LANG", "POSIX", 1))
+ {
+ locale loc("");
+ VERIFY( loc.name() == "C" );
+ }
+
+ // Setting a category in the "C" default.
+ if (!setenv("LC_COLLATE", "de_DE", 1))
+ {
+ locale loc("");
+
+#if _GLIBCPP_NUM_CATEGORIES
+ VERIFY( loc.name() == "LC_CTYPE=C;LC_NUMERIC=C;LC_COLLATE=de_DE;"
+ "LC_TIME=C;LC_MONETARY=C;LC_MESSAGES=C;LC_PAPER=C;"
+ "LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;"
+ "LC_IDENTIFICATION=C" );
+#else
+ VERIFY( loc.name() == "LC_CTYPE=C;LC_NUMERIC=C;LC_COLLATE=de_DE;"
+ "LC_TIME=C;LC_MONETARY=C;LC_MESSAGES=C" );
+#endif
+ }
+
+ // Changing the LANG default while LC_COLLATE is set.
+ if (!setenv("LANG", "fr_FR", 1))
+ {
+ locale loc("");
+#if _GLIBCPP_NUM_CATEGORIES
+ VERIFY( loc.name() == "LC_CTYPE=fr_FR;LC_NUMERIC=fr_FR;"
+ "LC_COLLATE=de_DE;LC_TIME=fr_FR;LC_MONETARY=fr_FR;"
+ "LC_MESSAGES=fr_FR;LC_PAPER=fr_FR;LC_NAME=fr_FR;"
+ "LC_ADDRESS=fr_FR;LC_TELEPHONE=fr_FR;LC_MEASUREMENT=fr_FR;"
+ "LC_IDENTIFICATION=fr_FR" );
+#else
+ VERIFY( loc.name() == "LC_CTYPE=fr_FR;LC_NUMERIC=fr_FR;"
+ "LC_COLLATE=de_DE;LC_TIME=fr_FR;LC_MONETARY=fr_FR;"
+ "LC_MESSAGES=fr_FR" );
+#endif
+ }
+
+ // Changing another (C only) category.
+#if _GLIBCPP_NUM_CATEGORIES
+ if (!setenv("LC_IDENTIFICATION", "it_IT", 1))
+ {
+ locale loc("");
+ VERIFY( loc.name() == "LC_CTYPE=fr_FR;LC_NUMERIC=fr_FR;"
+ "LC_COLLATE=de_DE;LC_TIME=fr_FR;LC_MONETARY=fr_FR;"
+ "LC_MESSAGES=fr_FR;LC_PAPER=fr_FR;LC_NAME=fr_FR;"
+ "LC_ADDRESS=fr_FR;LC_TELEPHONE=fr_FR;LC_MEASUREMENT=fr_FR;"
+ "LC_IDENTIFICATION=it_IT" );
+ }
+#endif
+
+ // Restore the environment.
+ setenv("LANG", LANG_orig ? LANG_orig : "", 1);
+ setenv("LC_ALL", LC_ALL_orig ? LC_ALL_orig : "", 1);
+ setenv("LC_CTYPE", LC_CTYPE_orig ? LC_CTYPE_orig : "", 1);
+ setenv("LC_NUMERIC", LC_NUMERIC_orig ? LC_NUMERIC_orig : "", 1);
+ setenv("LC_COLLATE", LC_COLLATE_orig ? LC_COLLATE_orig : "", 1);
+ setenv("LC_TIME", LC_TIME_orig ? LC_TIME_orig : "", 1);
+ setenv("LC_MONETARY", LC_MONETARY_orig ? LC_MONETARY_orig : "", 1);
+ setenv("LC_MESSAGES", LC_MESSAGES_orig ? LC_MESSAGES_orig : "", 1);
+#if _GLIBCPP_NUM_CATEGORIES
+ setenv("LC_PAPER", LC_PAPER_orig ? LC_PAPER_orig : "", 1);
+ setenv("LC_NAME", LC_NAME_orig ? LC_NAME_orig : "", 1);
+ setenv("LC_ADDRESS", LC_ADDRESS_orig ? LC_ADDRESS_orig : "", 1);
+ setenv("LC_TELEPHONE", LC_TELEPHONE_orig ? LC_TELEPHONE_orig : "", 1);
+ setenv("LC_MEASUREMENT", LC_MEASUREMENT_orig ? LC_MEASUREMENT_orig : "", 1);
+ setenv("LC_IDENTIFICATION",
+ LC_IDENTIFICATION_orig ? LC_IDENTIFICATION_orig : "", 1);
+#endif
+
+#endif
+}
+
int main()
{
test00();
@@ -335,6 +502,7 @@ int main()
test02();
test03();
+ test04();
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/facet.cc b/libstdc++-v3/testsuite/22_locale/facet.cc
index 431718e7834..9c613b4c203 100644
--- a/libstdc++-v3/testsuite/22_locale/facet.cc
+++ b/libstdc++-v3/testsuite/22_locale/facet.cc
@@ -1,6 +1,6 @@
// 2000-08-31 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2000 Free Software Foundation
+// Copyright (C) 2000, 2002 Free Software Foundation
//
// 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
@@ -25,6 +25,7 @@
#include <stdexcept>
#include <string>
#include <iterator>
+#include <limits>
#include <testsuite_hooks.h>
// 1 a class if a facet if it is publicly derived from another facet
@@ -233,9 +234,69 @@ void test01()
}
}
+// Static counter for use in checking ctors/dtors.
+static std::size_t counter;
+
+class surf : public std::locale::facet
+{
+public:
+ static std::locale::id id;
+ surf(size_t refs = 0): std::locale::facet(refs) { ++counter; }
+ ~surf() { --counter; }
+};
+
+std::locale::id surf::id;
+
+typedef surf facet_type;
+
+void test02()
+{
+ using namespace std;
+ bool test = true;
+
+ // 1: Destroyed when out of scope.
+ VERIFY( counter == 0 );
+ {
+ locale loc01(locale::classic(), new facet_type);
+ VERIFY( counter == 1 );
+ }
+ VERIFY( counter == 0 );
+
+ // 2: Not destroyed when out of scope, deliberately leaked.
+ VERIFY( counter == 0 );
+ {
+ // Default refs argument is zero.
+ locale loc02(locale::classic(), new facet_type(1));
+ VERIFY( counter == 1 );
+ }
+ VERIFY( counter == 1 );
+
+ // 3: Pathological.
+ counter = 0;
+ {
+ // Test bounds.
+ facet_type* f = new facet_type(numeric_limits<size_t>::max());
+ VERIFY( counter == 1 );
+ // Add a reference.
+ locale loc01(locale::classic(), f);
+ {
+ // Add another reference...
+ locale loc02(locale::classic(), f);
+ }
+ VERIFY( counter == 1 );
+ }
+
+ // 4: Named locale should destroy facets when it goes out of scope.
+ // Not quite sure how to test for this w/o valgrind at the moment.
+ {
+ locale loc03("es_MX");
+ }
+}
+
int main ()
{
test01();
+ test02();
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/static_members.cc b/libstdc++-v3/testsuite/22_locale/static_members.cc
index 16e856a2ee4..9811dd9a806 100644
--- a/libstdc++-v3/testsuite/22_locale/static_members.cc
+++ b/libstdc++-v3/testsuite/22_locale/static_members.cc
@@ -1,6 +1,6 @@
// 2000-09-13 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2000 Free Software Foundation
+// Copyright (C) 2000, 2002 Free Software Foundation
//
// 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
@@ -22,6 +22,7 @@
#include <cwchar> // for mbstate_t
#include <locale>
+#include <iostream>
#include <testsuite_hooks.h>
typedef std::codecvt<char, char, std::mbstate_t> ccodecvt;
@@ -30,14 +31,15 @@ class gnu_codecvt: public ccodecvt { };
void test01()
{
using namespace std;
-
bool test = true;
+
string str1, str2;
- // construct a locale object with the C facet
- const locale& loc01 = locale::classic();
- // construct a locale object with the specialized facet.
- locale loc02(locale::classic(), new gnu_codecvt);
+ // Construct a locale object with the C facet.
+ const locale loc01 = locale::classic();
+
+ // Construct a locale object with the specialized facet.
+ locale loc02(locale::classic(), new gnu_codecvt);
VERIFY ( loc01 != loc02 );
VERIFY ( !(loc01 == loc02) );
@@ -50,15 +52,143 @@ void test01()
// global
locale loc03;
VERIFY ( loc03 == loc01);
- locale loc04 = locale::global(loc02);
+ locale global_orig = locale::global(loc02);
locale loc05;
VERIFY (loc05 != loc03);
VERIFY (loc05 == loc02);
+
+ // Reset global settings.
+ locale::global(global_orig);
+}
+
+// Sanity check locale::global(loc) and setlocale.
+void test02()
+{
+ using namespace std;
+ bool test = true;
+
+ const string ph("en_PH");
+ const string mx("es_MX");
+ const char* orig = setlocale(LC_ALL, NULL);
+ const char* testph = setlocale(LC_ALL, ph.c_str());
+ const char* testmx = setlocale(LC_ALL, mx.c_str());
+ setlocale(LC_ALL, orig);
+
+ // If the underlying locale doesn't support these names, setlocale
+ // won't be reset. Therefore, disable unless we know these specific
+ // named locales work.
+ if (testph && testmx)
+ {
+ const locale loc_ph(ph.c_str());
+ const locale loc_mx(mx.c_str());
+
+ // Use setlocale between two calls to locale("")
+ const locale loc_env_1("");
+ setlocale(LC_ALL, ph.c_str());
+ const locale loc_env_2("");
+ VERIFY( loc_env_1 == loc_env_2 );
+
+ // Change global locale.
+ locale global_orig = locale::global(loc_mx);
+ const char* lc_all_mx = setlocale(LC_ALL, NULL);
+ if (lc_all_mx)
+ {
+ cout << "lc_all_mx is " << lc_all_mx << endl;
+ VERIFY( mx == lc_all_mx );
+ }
+
+ // Restore global settings.
+ locale::global(global_orig);
+ }
+}
+
+// Static counter for use in checking ctors/dtors.
+static std::size_t counter;
+
+class surf : public std::locale::facet
+{
+public:
+ static std::locale::id id;
+ surf(size_t refs = 0): std::locale::facet(refs) { ++counter; }
+ ~surf() { --counter; }
+};
+
+std::locale::id surf::id;
+
+typedef surf facet_type;
+
+// Verify lifetimes of global objects.
+void test03()
+{
+ using namespace std;
+ bool test = true;
+
+ string name;
+ locale global_orig;
+ // 1: Destroyed when out of scope.
+ {
+ {
+ {
+ VERIFY( counter == 0 );
+ {
+ locale loc01(locale::classic(), new facet_type);
+ VERIFY( counter == 1 );
+ global_orig = locale::global(loc01);
+ name = loc01.name();
+ }
+ VERIFY( counter == 1 );
+ locale loc02 = locale();
+ // Weak, but it's something...
+ VERIFY( loc02.name() == name );
+ }
+ VERIFY( counter == 1 );
+ // NB: loc03 should be a copy of the previous global locale.
+ locale loc03 = locale::global(global_orig);
+ VERIFY( counter == 1 );
+ VERIFY( loc03.name() == name );
+ }
+ VERIFY( counter == 0 );
+ locale loc04 = locale();
+ VERIFY( loc04 == global_orig );
+ }
+
+ // 2: Not destroyed when out of scope, deliberately leaked.
+ {
+ {
+ {
+ VERIFY( counter == 0 );
+ {
+ locale loc01(locale::classic(), new facet_type(1));
+ VERIFY( counter == 1 );
+ global_orig = locale::global(loc01);
+ name = loc01.name();
+ }
+ VERIFY( counter == 1 );
+ locale loc02 = locale();
+ // Weak, but it's something...
+ VERIFY( loc02.name() == name );
+ }
+ VERIFY( counter == 1 );
+ // NB: loc03 should be a copy of the previous global locale.
+ locale loc03 = locale::global(global_orig);
+ VERIFY( counter == 1 );
+ VERIFY( loc03.name() == name );
+ }
+ VERIFY( counter == 1 );
+ locale loc04 = locale();
+ VERIFY( loc04 == global_orig );
+ }
+ VERIFY( counter == 1 );
+
+ // Restore global settings.
+ locale::global(global_orig);
}
int main ()
{
test01();
+ test02();
+ test03();
return 0;
}
diff --git a/libstdc++-v3/testsuite/27_io/ostream_inserter_other.cc b/libstdc++-v3/testsuite/27_io/ostream_inserter_other.cc
index 4ce5b68d207..9d8cc0f9ecc 100644
--- a/libstdc++-v3/testsuite/27_io/ostream_inserter_other.cc
+++ b/libstdc++-v3/testsuite/27_io/ostream_inserter_other.cc
@@ -149,6 +149,99 @@ void test04()
VERIFY( test );
}
+
+class test_buffer_1 : public std::streambuf
+{
+public:
+ test_buffer_1(const std::string& s) : str(s), it(str.begin()) { }
+
+protected:
+ virtual int underflow() { return (it != str.end() ? *it : EOF); }
+ virtual int uflow() { return (it != str.end() ? *it++ : EOF); }
+
+private:
+ const std::string str;
+ std::string::const_iterator it;
+};
+
+
+class test_buffer_2 : public std::streambuf
+{
+public:
+ test_buffer_2(const std::string& s) : str(s), it(str.begin()) { }
+
+protected:
+ virtual int underflow() { return (it != str.end() ? *it : EOF); }
+ virtual int uflow() { return (it != str.end() ? *it++ : EOF); }
+ virtual std::streamsize showmanyc() { return std::distance(it, str.end()); }
+private:
+ const std::string str;
+ std::string::const_iterator it;
+};
+
+
+class test_buffer_3 : public std::streambuf
+{
+public:
+ test_buffer_3(const std::string& s) : str(s), it(str.begin()) { }
+
+protected:
+ virtual int underflow() { return (it != str.end() ? *it : EOF); }
+ virtual int uflow() { return (it != str.end() ? *it++ : EOF); }
+ virtual std::streamsize showmanyc()
+ {
+ std::streamsize ret = std::distance(it, str.end());
+ return ret > 0 ? ret : -1;
+ }
+private:
+ const std::string str;
+ std::string::const_iterator it;
+};
+
+
+void test(const std::string& str, std::streambuf& buf)
+{
+ bool test = true;
+
+ std::ostringstream out;
+ std::istream in(&buf);
+
+ out << in.rdbuf();
+
+ if (out.str() != str)
+ VERIFY( false );
+}
+
+// libstdc++/6745
+// libstdc++/8071
+// libstdc++/8127
+// Jonathan Lennox <lennox@cs.columbia.edu>
+void test05()
+{
+ std::ostringstream out_1, out_2, out_3, out_4;
+
+ std::string string_a("Hello, world!");
+ std::string string_b("");
+
+ test_buffer_1 buf1a(string_a);
+ test_buffer_1 buf1b(string_b);
+
+ test_buffer_2 buf2a(string_a);
+ test_buffer_2 buf2b(string_b);
+
+ test_buffer_3 buf3a(string_a);
+ test_buffer_3 buf3b(string_b);
+
+ test(string_a, buf1a);
+ test(string_b, buf1b);
+
+ test(string_a, buf2a);
+ test(string_b, buf2b);
+
+ test(string_a, buf3a);
+ test(string_b, buf3b);
+}
+
int
main()
{
@@ -156,6 +249,7 @@ main()
test02();
test03();
test04();
-
+
+ test05();
return 0;
}
diff --git a/libstdc++-v3/testsuite/abi_check.cc b/libstdc++-v3/testsuite/abi_check.cc
index 1e407811437..21ca619ca83 100644
--- a/libstdc++-v3/testsuite/abi_check.cc
+++ b/libstdc++-v3/testsuite/abi_check.cc
@@ -46,17 +46,35 @@ struct symbol_info
enum category { none, function, object, error };
category type;
std::string name;
- std::string name_demangled;
- std::string version;
+ std::string demangled_name;
int size;
+ std::string version_name;
symbol_info() : type(none), size(0) { }
symbol_info(const symbol_info& other)
- : type(other.type), name(other.name), name_demangled(other.name_demangled),
- version(other.version), size(other.size) { }
+ : type(other.type), name(other.name), demangled_name(other.demangled_name),
+ size(other.size), version_name(other.version_name) { }
};
+namespace __gnu_cxx
+{
+ using namespace std;
+
+ template<>
+ struct hash<string>
+ {
+ size_t operator()(const string& s) const
+ {
+ const collate<char>& c = use_facet<collate<char> >(locale::classic());
+ return c.hash(s.c_str(), s.c_str() + s.size());
+ }
+ };
+}
+
+typedef std::deque<std::string> symbol_names;
+typedef __gnu_cxx::hash_map<std::string, symbol_info> symbol_infos;
+
bool
check_compatible(const symbol_info& lhs, const symbol_info& rhs,
bool verbose = false)
@@ -93,8 +111,7 @@ check_compatible(const symbol_info& lhs, const symbol_info& rhs,
}
}
- // Expect something more sophisticated eventually.
- if (lhs.version != rhs.version)
+ if (lhs.version_name != rhs.version_name)
{
ret = false;
if (verbose)
@@ -106,19 +123,6 @@ check_compatible(const symbol_info& lhs, const symbol_info& rhs,
return ret;
}
-template<typename _CharT, typename _Traits>
- std::basic_ostream<_CharT, _Traits>&
- operator<<(std::basic_ostream<_CharT, _Traits>& os, symbol_info& si)
- {
- using namespace std;
- os << si.type << endl;
- os << si.name << endl;
- os << si.name_demangled << endl;
- os << si.version << endl;
- os << si.size << endl;
- return os;
- }
-
const char*
demangle(const std::string& mangled)
{
@@ -187,7 +191,7 @@ line_to_symbol_info(std::string& input, symbol_info& output)
istringstream iss(size);
int x;
iss >> x;
- if (iss.good())
+ if (!iss.fail())
output.size = x;
input.erase(input.begin(), input.begin() + n + 1);
}
@@ -203,7 +207,7 @@ line_to_symbol_info(std::string& input, symbol_info& output)
input.erase(input.begin(), input.begin() + n + 1);
// Set version name.
- output.version = input;
+ output.version_name = input;
}
else
{
@@ -213,12 +217,9 @@ line_to_symbol_info(std::string& input, symbol_info& output)
}
// Set the demangled name.
- output.name_demangled = demangle(output.name);
+ output.demangled_name = demangle(output.name);
}
-typedef std::deque<std::string> symbol_names;
-typedef __gnu_cxx::hash_map<const char*, symbol_info> symbol_infos;
-
void
create_symbol_data(const char* file, symbol_infos& symbols,
symbol_names& names)
@@ -238,7 +239,7 @@ create_symbol_data(const char* file, symbol_infos& symbols,
{
symbol_info symbol;
line_to_symbol_info(line, symbol);
- symbols[symbol.name.c_str()] = symbol;
+ symbols[symbol.name] = symbol;
names.push_back(symbol.name);
line = empty;
}
@@ -256,7 +257,7 @@ report_symbol_info(const symbol_info& symbol, std::size_t n)
// Add any other information to display here.
cout << tab << "demangled symbol"<< endl;
- cout << tab << symbol.name_demangled << endl;
+ cout << tab << symbol.demangled_name << endl;
cout << endl;
}
@@ -279,10 +280,10 @@ main(int argc, char** argv)
exit(1);
}
+
+ // Quick sanity/setup check for arguments.
const char* test_file = argv[2];
const char* baseline_file = argv[3];
-
- // Quick sanity/setup check
if (access(test_file, R_OK) != 0)
{
cerr << "Cannot read symbols file " << test_file
@@ -303,7 +304,7 @@ main(int argc, char** argv)
create_symbol_data(baseline_file, baseline_symbols, baseline_names);
create_symbol_data(test_file, test_symbols, test_names);
- // More sanity checking.
+ // Sanity check results.
const symbol_names::size_type baseline_size = baseline_names.size();
const symbol_names::size_type test_size = test_names.size();
if (!baseline_size || !test_size)
@@ -315,53 +316,71 @@ main(int argc, char** argv)
// Sort out names.
// Assuming baseline_names, test_names are both unique w/ no duplicates.
//
- // The pairs of names in shared_names are needed to do lookups on
- // the hash tables of common symbols to do compares.
- //
// The names added to missing_names are baseline_names not found in
// test_names
// -> symbols that have been deleted.
//
- // The names left in test_names are names not in baseline_names
+ // The names added to added_names are test_names are names not in
+ // baseline_names
// -> symbols that have been added.
- typedef pair<string, string> string_pair;
- vector<string_pair> shared_names;
+ symbol_names shared_names;
symbol_names missing_names;
+ symbol_names added_names = test_names;
for (size_t i = 0; i < baseline_size; ++i)
{
- symbol_names::iterator end = test_names.end();
- symbol_names::iterator it = find(test_names.begin(), end,
- baseline_names[i]);
+ string what(baseline_names[i]);
+ symbol_names::iterator end = added_names.end();
+ symbol_names::iterator it = find(added_names.begin(), end, what);
if (it != end)
{
// Found.
- shared_names.push_back(string_pair(baseline_names[i], *it));
- test_names.erase(it);
+ shared_names.push_back(what);
+ added_names.erase(it);
}
else
- missing_names.push_back(baseline_names[i]);
+ missing_names.push_back(what);
}
- // Check common names for detailed compatibility.
- const vector<string_pair>::size_type shared_size = shared_names.size();
+ // Check shared names for compatibility.
typedef pair<symbol_info, symbol_info> symbol_pair;
vector<symbol_pair> incompatible;
- for (size_t i = 0; i < shared_size; ++i)
+ for (size_t i = 0; i < shared_names.size(); ++i)
{
- symbol_info base = baseline_symbols[shared_names[i].first.c_str()];
- symbol_info test = test_symbols[shared_names[i].second.c_str()];
+ symbol_info base = baseline_symbols[shared_names[i]];
+ symbol_info test = test_symbols[shared_names[i]];
if (!check_compatible(base, test))
incompatible.push_back(symbol_pair(base, test));
}
+ // Check added names for compatibility.
+ for (size_t i = 0; i < added_names.size(); ++i)
+ {
+ vector<string> compatible_versions;
+ compatible_versions.push_back("GLIBCPP_3.2.1");
+
+ symbol_info test = test_symbols[added_names[i]];
+ vector<string>::iterator end = compatible_versions.end();
+
+ // Check version names for compatibility...
+ vector<string>::iterator it1 = find(compatible_versions.begin(), end,
+ test.version_name);
+
+ // Check for weak label.
+ vector<string>::iterator it2 = find(compatible_versions.begin(), end,
+ test.name);
+
+ if (it1 == end && it2 == end)
+ incompatible.push_back(symbol_pair(test, test));
+ }
+
// Report results.
- cout << test_names.size() << " added symbols " << endl;
- for (size_t j = 0; j < test_names.size() ; ++j)
- report_symbol_info(test_symbols[test_names[j].c_str()], j + 1);
+ cout << added_names.size() << " added symbols " << endl;
+ for (size_t j = 0; j < added_names.size() ; ++j)
+ report_symbol_info(test_symbols[added_names[j]], j + 1);
cout << missing_names.size() << " missing symbols " << endl;
for (size_t j = 0; j < missing_names.size() ; ++j)
- report_symbol_info(baseline_symbols[missing_names[j].c_str()], j + 1);
+ report_symbol_info(baseline_symbols[missing_names[j]], j + 1);
cout << incompatible.size() << " incompatible symbols " << endl;
for (size_t j = 0; j < incompatible.size() ; ++j)
diff --git a/libstdc++-v3/testsuite/ext/allocators.cc b/libstdc++-v3/testsuite/ext/allocators.cc
index b3068e0b2dd..58152145e7e 100644
--- a/libstdc++-v3/testsuite/ext/allocators.cc
+++ b/libstdc++-v3/testsuite/ext/allocators.cc
@@ -20,7 +20,6 @@
// 20.4.1.1 allocator members
-#undef __USE_MALLOC
#include <memory>
#include <cstdlib>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/thread/pthread1.cc b/libstdc++-v3/testsuite/thread/pthread1.cc
index 71afefcc758..eaa634d0bd5 100644
--- a/libstdc++-v3/testsuite/thread/pthread1.cc
+++ b/libstdc++-v3/testsuite/thread/pthread1.cc
@@ -124,7 +124,7 @@ main (int argc, char** argv)
{
pthread_join (prod[i], NULL);
pthread_join (cons[i], NULL);
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) && __FreeBSD__ < 5
// These lines are not required by POSIX since a successful
// join is suppose to detach as well...
pthread_detach (prod[i]);